@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
|
@@ -18,6 +18,10 @@ function _XML() {
|
|
|
18
18
|
};
|
|
19
19
|
return data;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Name of the resource folder.
|
|
23
|
+
*/
|
|
24
|
+
|
|
21
25
|
const fallbackResourceString = `<?xml version="1.0" encoding="utf-8"?><resources></resources>`;
|
|
22
26
|
|
|
23
27
|
/**
|
|
@@ -86,18 +90,16 @@ function buildResourceItem({
|
|
|
86
90
|
return item;
|
|
87
91
|
}
|
|
88
92
|
function buildResourceGroup(parent) {
|
|
89
|
-
var _parent$items;
|
|
90
93
|
return {
|
|
91
94
|
$: {
|
|
92
95
|
name: parent.name,
|
|
93
96
|
parent: parent.parent
|
|
94
97
|
},
|
|
95
|
-
item:
|
|
98
|
+
item: parent.items ?? []
|
|
96
99
|
};
|
|
97
100
|
}
|
|
98
101
|
function findResourceGroup(xml, group) {
|
|
99
|
-
|
|
100
|
-
const app = xml === null || xml === void 0 ? void 0 : (_xml$filter = xml.filter) === null || _xml$filter === void 0 ? void 0 : (_xml$filter$call = _xml$filter.call(xml, ({
|
|
102
|
+
const app = xml?.filter?.(({
|
|
101
103
|
$: head
|
|
102
104
|
}) => {
|
|
103
105
|
let matches = head.name === group.name;
|
|
@@ -105,8 +107,8 @@ function findResourceGroup(xml, group) {
|
|
|
105
107
|
matches = head.parent === group.parent;
|
|
106
108
|
}
|
|
107
109
|
return matches;
|
|
108
|
-
})
|
|
109
|
-
return app
|
|
110
|
+
})?.[0];
|
|
111
|
+
return app ?? null;
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resources.js","names":["_XML","data","require","fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","
|
|
1
|
+
{"version":3,"file":"Resources.js","names":["_XML","data","require","fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","items","findResourceGroup","group","app","filter","head","matches","getResourceItemsAsObject","reduce","prev","curr","getObjectAsResourceItems","obj","Object","entries","map","getObjectAsResourceGroup"],"sources":["../../src/android/Resources.ts"],"sourcesContent":["import { readXMLAsync, XMLObject } from '../utils/XML';\n\nexport type ResourceGroupXML = {\n $: {\n name: string;\n parent: string;\n };\n item: ResourceItemXML[];\n};\n\nexport type ResourceXML = {\n resources: {\n $?: {\n 'xmlns:tools'?: string;\n };\n color?: ResourceItemXML[];\n string?: ResourceItemXML[];\n style?: ResourceGroupXML[];\n // Add more if needed...\n };\n};\n\nexport type ResourceItemXML = {\n _: string;\n $: {\n name: string;\n 'tools:targetApi'?: string;\n translatable?: string;\n };\n};\n/**\n * Name of the resource folder.\n */\nexport type ResourceKind =\n | 'values'\n | 'values-night'\n | 'values-v23'\n | 'values-night-v23'\n | 'drawable';\n\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources></resources>`;\n\n/**\n * Read an XML file while providing a default fallback for resource files.\n *\n * @param options path to the XML file, returns a fallback XML if the path doesn't exist.\n */\nexport async function readResourcesXMLAsync({\n path,\n fallback = fallbackResourceString,\n}: {\n path: string;\n fallback?: string | null;\n}): Promise<ResourceXML> {\n const xml = await readXMLAsync({ path, fallback });\n // Ensure the type is expected.\n if (!xml.resources) {\n xml.resources = {};\n }\n return xml as ResourceXML;\n}\n\n/**\n * Ensure the provided xml has a `resources` object (the expected shape).\n *\n * @param xml\n */\nexport function ensureDefaultResourceXML(xml: XMLObject): ResourceXML {\n if (!xml) {\n xml = { resources: {} };\n }\n if (!xml.resources) {\n xml.resources = {};\n }\n\n return xml as ResourceXML;\n}\n\n/**\n * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable.\n *\n * - JSON: `{ $: { name }, _: value }`\n * - XML: `<item name=\"NAME\">VALUE</item>`\n *\n * @param props name and value strings.\n */\nexport function buildResourceItem({\n name,\n value,\n targetApi,\n translatable,\n}: {\n name: string;\n value: string;\n targetApi?: string;\n translatable?: boolean;\n}): ResourceItemXML {\n const item: ResourceItemXML = { $: { name }, _: value };\n if (targetApi) {\n item.$['tools:targetApi'] = targetApi;\n }\n if (translatable !== undefined) {\n item.$['translatable'] = String(translatable);\n }\n return item;\n}\n\nexport function buildResourceGroup(parent: {\n name: string;\n parent: string;\n items?: ResourceItemXML[];\n}): ResourceGroupXML {\n return {\n $: { name: parent.name, parent: parent.parent },\n item: parent.items ?? [],\n };\n}\n\nexport function findResourceGroup(\n xml: ResourceGroupXML[] | undefined,\n group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n const app = xml?.filter?.(({ $: head }) => {\n let matches = head.name === group.name;\n if (group.parent != null && matches) {\n matches = head.parent === group.parent;\n }\n return matches;\n })?.[0];\n return app ?? null;\n}\n\n/**\n * Helper to convert a basic XML object into a simple k/v pair.\n *\n * @param xml\n * @returns\n */\nexport function getResourceItemsAsObject(xml: ResourceItemXML[]): Record<string, string> | null {\n return xml.reduce(\n (prev, curr) => ({\n ...prev,\n [curr.$.name]: curr._,\n }),\n {}\n );\n}\n\n/**\n * Helper to convert a basic k/v object to a ResourceItemXML array.\n *\n * @param xml\n * @returns\n */\nexport function getObjectAsResourceItems(obj: Record<string, string>): ResourceItemXML[] {\n return Object.entries(obj).map(([name, value]) => ({\n $: { name },\n _: value,\n }));\n}\n\nexport function getObjectAsResourceGroup(group: {\n name: string;\n parent: string;\n item: Record<string, string>;\n}): ResourceGroupXML {\n return {\n $: {\n name: group.name,\n parent: group.parent,\n },\n item: getObjectAsResourceItems(group.item),\n };\n}\n"],"mappings":"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"}
|
package/build/android/Scheme.js
CHANGED
|
@@ -25,8 +25,7 @@ function _warnings() {
|
|
|
25
25
|
};
|
|
26
26
|
return data;
|
|
27
27
|
}
|
|
28
|
-
const withScheme = (0, _androidPlugins().createAndroidManifestPlugin)(setScheme, 'withScheme');
|
|
29
|
-
exports.withScheme = withScheme;
|
|
28
|
+
const withScheme = exports.withScheme = (0, _androidPlugins().createAndroidManifestPlugin)(setScheme, 'withScheme');
|
|
30
29
|
function getScheme(config) {
|
|
31
30
|
if (Array.isArray(config.scheme)) {
|
|
32
31
|
const validate = value => typeof value === 'string';
|
|
@@ -41,12 +40,11 @@ function getScheme(config) {
|
|
|
41
40
|
// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`npx expo prebuild --clean`).
|
|
42
41
|
// 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.
|
|
43
42
|
function setScheme(config, androidManifest) {
|
|
44
|
-
var _config$android, _config$android2;
|
|
45
43
|
const schemes = [...getScheme(config),
|
|
46
44
|
// @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.
|
|
47
|
-
...getScheme(
|
|
45
|
+
...getScheme(config.android ?? {})];
|
|
48
46
|
// Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.
|
|
49
|
-
if (
|
|
47
|
+
if (config.android?.package) {
|
|
50
48
|
schemes.push(config.android.package);
|
|
51
49
|
}
|
|
52
50
|
if (schemes.length === 0) {
|
|
@@ -77,25 +75,12 @@ function isValidRedirectIntentFilter({
|
|
|
77
75
|
return actions.includes('android.intent.action.VIEW') && !categories.includes('android.intent.category.LAUNCHER');
|
|
78
76
|
}
|
|
79
77
|
function propertiesFromIntentFilter(intentFilter) {
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var _data$$2;
|
|
87
|
-
return data === null || data === void 0 ? void 0 : (_data$$2 = data.$) === null || _data$$2 === void 0 ? void 0 : _data$$2['android:name'];
|
|
88
|
-
})) !== null && _intentFilter$categor !== void 0 ? _intentFilter$categor : [];
|
|
89
|
-
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 => {
|
|
90
|
-
var _data$$3;
|
|
91
|
-
return data === null || data === void 0 ? void 0 : (_data$$3 = data.$) === null || _data$$3 === void 0 ? void 0 : _data$$3['android:scheme'];
|
|
92
|
-
})) === null || _intentFilter$data$fi2 === void 0 ? void 0 : _intentFilter$data$fi2.map(data => {
|
|
93
|
-
var _data$$4, _data$$5;
|
|
94
|
-
return {
|
|
95
|
-
scheme: data === null || data === void 0 ? void 0 : (_data$$4 = data.$) === null || _data$$4 === void 0 ? void 0 : _data$$4['android:scheme'],
|
|
96
|
-
host: data === null || data === void 0 ? void 0 : (_data$$5 = data.$) === null || _data$$5 === void 0 ? void 0 : _data$$5['android:host']
|
|
97
|
-
};
|
|
98
|
-
})) !== null && _intentFilter$data$fi !== void 0 ? _intentFilter$data$fi : [];
|
|
78
|
+
const actions = intentFilter?.action?.map(data => data?.$?.['android:name']) ?? [];
|
|
79
|
+
const categories = intentFilter?.category?.map(data => data?.$?.['android:name']) ?? [];
|
|
80
|
+
const data = intentFilter?.data?.filter(data => data?.$?.['android:scheme'])?.map(data => ({
|
|
81
|
+
scheme: data?.$?.['android:scheme'],
|
|
82
|
+
host: data?.$?.['android:host']
|
|
83
|
+
})) ?? [];
|
|
99
84
|
return {
|
|
100
85
|
actions,
|
|
101
86
|
categories,
|
|
@@ -111,10 +96,7 @@ function getSingleTaskIntentFilters(androidManifest) {
|
|
|
111
96
|
} = application;
|
|
112
97
|
// @ts-ignore
|
|
113
98
|
const activities = Array.isArray(activity) ? activity : [activity];
|
|
114
|
-
const singleTaskActivities = activities.filter(activity =>
|
|
115
|
-
var _activity$$;
|
|
116
|
-
return (activity === null || activity === void 0 ? void 0 : (_activity$$ = activity.$) === null || _activity$$ === void 0 ? void 0 : _activity$$['android:launchMode']) === 'singleTask';
|
|
117
|
-
});
|
|
99
|
+
const singleTaskActivities = activities.filter(activity => activity?.$?.['android:launchMode'] === 'singleTask');
|
|
118
100
|
for (const activity of singleTaskActivities) {
|
|
119
101
|
const intentFilters = activity['intent-filter'];
|
|
120
102
|
outputSchemes = outputSchemes.concat(intentFilters);
|
|
@@ -146,8 +128,7 @@ function ensureManifestHasValidIntentFilter(androidManifest) {
|
|
|
146
128
|
}
|
|
147
129
|
for (const application of androidManifest.manifest.application) {
|
|
148
130
|
for (const activity of application.activity || []) {
|
|
149
|
-
|
|
150
|
-
if ((activity === null || activity === void 0 ? void 0 : (_activity$$2 = activity.$) === null || _activity$$2 === void 0 ? void 0 : _activity$$2['android:launchMode']) === 'singleTask') {
|
|
131
|
+
if (activity?.$?.['android:launchMode'] === 'singleTask') {
|
|
151
132
|
for (const intentFilter of activity['intent-filter'] || []) {
|
|
152
133
|
// Parse valid intent filters...
|
|
153
134
|
const properties = propertiesFromIntentFilter(intentFilter);
|
|
@@ -190,8 +171,7 @@ function appendScheme(scheme, androidManifest) {
|
|
|
190
171
|
}
|
|
191
172
|
for (const application of androidManifest.manifest.application) {
|
|
192
173
|
for (const activity of application.activity || []) {
|
|
193
|
-
|
|
194
|
-
if ((activity === null || activity === void 0 ? void 0 : (_activity$$3 = activity.$) === null || _activity$$3 === void 0 ? void 0 : _activity$$3['android:launchMode']) === 'singleTask') {
|
|
174
|
+
if (activity?.$?.['android:launchMode'] === 'singleTask') {
|
|
195
175
|
for (const intentFilter of activity['intent-filter'] || []) {
|
|
196
176
|
const properties = propertiesFromIntentFilter(intentFilter);
|
|
197
177
|
if (isValidRedirectIntentFilter(properties)) {
|
|
@@ -215,18 +195,15 @@ function removeScheme(scheme, androidManifest) {
|
|
|
215
195
|
}
|
|
216
196
|
for (const application of androidManifest.manifest.application) {
|
|
217
197
|
for (const activity of application.activity || []) {
|
|
218
|
-
|
|
219
|
-
if ((activity === null || activity === void 0 ? void 0 : (_activity$$4 = activity.$) === null || _activity$$4 === void 0 ? void 0 : _activity$$4['android:launchMode']) === 'singleTask') {
|
|
198
|
+
if (activity?.$?.['android:launchMode'] === 'singleTask') {
|
|
220
199
|
for (const intentFilter of activity['intent-filter'] || []) {
|
|
221
200
|
// Parse valid intent filters...
|
|
222
201
|
const properties = propertiesFromIntentFilter(intentFilter);
|
|
223
202
|
if (isValidRedirectIntentFilter(properties)) {
|
|
224
|
-
for (const dataKey in
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
var _intentFilter$data3;
|
|
229
|
-
(_intentFilter$data3 = intentFilter.data) === null || _intentFilter$data3 === void 0 ? true : delete _intentFilter$data3[dataKey];
|
|
203
|
+
for (const dataKey in intentFilter?.data || []) {
|
|
204
|
+
const data = intentFilter.data?.[dataKey];
|
|
205
|
+
if (data?.$?.['android:scheme'] === scheme) {
|
|
206
|
+
delete intentFilter.data?.[dataKey];
|
|
230
207
|
}
|
|
231
208
|
}
|
|
232
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scheme.js","names":["_androidPlugins","data","require","_warnings","withScheme","createAndroidManifestPlugin","setScheme","exports","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","_config$android","_config$android2","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","_intentFilter$action$","_intentFilter$action","_intentFilter$categor","_intentFilter$categor2","_intentFilter$data$fi","_intentFilter$data","_intentFilter$data$fi2","action","map","_data$$","$","category","_data$$2","_data$$3","_data$$4","_data$$5","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","_activity$$","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","_activity$$2","hasScheme","_activity$$3","removeScheme","_activity$$4","dataKey","_intentFilter$data2","_data$$6","_intentFilter$data3"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, ManifestActivity } from './Manifest';\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\n\nexport type IntentFilterProps = {\n actions: string[];\n categories: string[];\n data: {\n scheme: string;\n host?: string;\n }[];\n};\n\nexport const withScheme = createAndroidManifestPlugin(setScheme, 'withScheme');\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => typeof value === 'string';\n\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\n// This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.\n// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`npx expo prebuild --clean`).\n// Regardless, having extra schemes isn't a fatal issue and therefore a tolerable compromise is to just add new schemes that aren't currently present.\nexport function setScheme(\n config: Pick<ExpoConfig, 'scheme' | 'android'>,\n androidManifest: AndroidManifest\n) {\n const schemes = [\n ...getScheme(config),\n // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.android ?? {}),\n ];\n // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.android?.package) {\n schemes.push(config.android.package);\n }\n if (schemes.length === 0) {\n return androidManifest;\n }\n\n if (!ensureManifestHasValidIntentFilter(androidManifest)) {\n addWarningAndroid(\n 'scheme',\n `Cannot add schemes because the provided manifest does not have a valid Activity with \\`android:launchMode=\"singleTask\"\\``,\n 'https://expo.fyi/setup-android-uri-scheme'\n );\n return androidManifest;\n }\n\n // Get the current schemes and remove them from the list of schemes to add.\n const currentSchemes = getSchemesFromManifest(androidManifest);\n for (const uri of currentSchemes) {\n const index = schemes.indexOf(uri);\n if (index > -1) schemes.splice(index, 1);\n }\n\n // Now add all of the remaining schemes.\n for (const uri of schemes) {\n androidManifest = appendScheme(uri, androidManifest);\n }\n\n return androidManifest;\n}\n\nfunction isValidRedirectIntentFilter({ actions, categories }: IntentFilterProps): boolean {\n return (\n actions.includes('android.intent.action.VIEW') &&\n !categories.includes('android.intent.category.LAUNCHER')\n );\n}\n\nfunction propertiesFromIntentFilter(intentFilter: any): IntentFilterProps {\n const actions = intentFilter?.action?.map((data: any) => data?.$?.['android:name']) ?? [];\n const categories = intentFilter?.category?.map((data: any) => data?.$?.['android:name']) ?? [];\n const data =\n intentFilter?.data\n ?.filter((data: any) => data?.$?.['android:scheme'])\n ?.map((data: any) => ({\n scheme: data?.$?.['android:scheme'],\n host: data?.$?.['android:host'],\n })) ?? [];\n return {\n actions,\n categories,\n data,\n };\n}\n\nfunction getSingleTaskIntentFilters(androidManifest: AndroidManifest): any[] {\n if (!Array.isArray(androidManifest.manifest.application)) return [];\n\n let outputSchemes: any[] = [];\n for (const application of androidManifest.manifest.application) {\n const { activity } = application;\n // @ts-ignore\n const activities = Array.isArray(activity) ? activity : [activity];\n const singleTaskActivities = (activities as ManifestActivity[]).filter(\n (activity) => activity?.$?.['android:launchMode'] === 'singleTask'\n );\n for (const activity of singleTaskActivities) {\n const intentFilters = activity['intent-filter'];\n outputSchemes = outputSchemes.concat(intentFilters);\n }\n }\n return outputSchemes;\n}\n\nexport function getSchemesFromManifest(\n androidManifest: AndroidManifest,\n requestedHost: string | null = null\n): string[] {\n const outputSchemes: string[] = [];\n\n const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);\n for (const intentFilter of singleTaskIntentFilters) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties) && properties.data) {\n for (const { scheme, host } of properties.data) {\n if (requestedHost === null || !host || host === requestedHost) {\n outputSchemes.push(scheme);\n }\n }\n }\n }\n\n return outputSchemes;\n}\n\nexport function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return false;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n return true;\n }\n }\n if (!activity['intent-filter']) {\n activity['intent-filter'] = [];\n }\n\n activity['intent-filter'].push({\n action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],\n category: [\n { $: { 'android:name': 'android.intent.category.DEFAULT' } },\n { $: { 'android:name': 'android.intent.category.BROWSABLE' } },\n ],\n });\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean {\n const schemes = getSchemesFromManifest(androidManifest);\n return schemes.includes(scheme);\n}\n\nexport function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n if (!intentFilter.data) intentFilter.data = [];\n intentFilter.data.push({\n $: { 'android:scheme': scheme },\n });\n }\n }\n break;\n }\n }\n }\n return androidManifest;\n}\n\nexport function removeScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n for (const dataKey in intentFilter?.data || []) {\n const data = intentFilter.data?.[dataKey];\n if (data?.$?.['android:scheme'] === scheme) {\n delete intentFilter.data?.[dataKey];\n }\n }\n }\n }\n break;\n }\n }\n }\n\n return androidManifest;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Scheme.js","names":["_androidPlugins","data","require","_warnings","withScheme","exports","createAndroidManifestPlugin","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","$","category","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","hasScheme","removeScheme","dataKey"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, ManifestActivity } from './Manifest';\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\n\nexport type IntentFilterProps = {\n actions: string[];\n categories: string[];\n data: {\n scheme: string;\n host?: string;\n }[];\n};\n\nexport const withScheme = createAndroidManifestPlugin(setScheme, 'withScheme');\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => typeof value === 'string';\n\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\n// This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.\n// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`npx expo prebuild --clean`).\n// Regardless, having extra schemes isn't a fatal issue and therefore a tolerable compromise is to just add new schemes that aren't currently present.\nexport function setScheme(\n config: Pick<ExpoConfig, 'scheme' | 'android'>,\n androidManifest: AndroidManifest\n) {\n const schemes = [\n ...getScheme(config),\n // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.android ?? {}),\n ];\n // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.android?.package) {\n schemes.push(config.android.package);\n }\n if (schemes.length === 0) {\n return androidManifest;\n }\n\n if (!ensureManifestHasValidIntentFilter(androidManifest)) {\n addWarningAndroid(\n 'scheme',\n `Cannot add schemes because the provided manifest does not have a valid Activity with \\`android:launchMode=\"singleTask\"\\``,\n 'https://expo.fyi/setup-android-uri-scheme'\n );\n return androidManifest;\n }\n\n // Get the current schemes and remove them from the list of schemes to add.\n const currentSchemes = getSchemesFromManifest(androidManifest);\n for (const uri of currentSchemes) {\n const index = schemes.indexOf(uri);\n if (index > -1) schemes.splice(index, 1);\n }\n\n // Now add all of the remaining schemes.\n for (const uri of schemes) {\n androidManifest = appendScheme(uri, androidManifest);\n }\n\n return androidManifest;\n}\n\nfunction isValidRedirectIntentFilter({ actions, categories }: IntentFilterProps): boolean {\n return (\n actions.includes('android.intent.action.VIEW') &&\n !categories.includes('android.intent.category.LAUNCHER')\n );\n}\n\nfunction propertiesFromIntentFilter(intentFilter: any): IntentFilterProps {\n const actions = intentFilter?.action?.map((data: any) => data?.$?.['android:name']) ?? [];\n const categories = intentFilter?.category?.map((data: any) => data?.$?.['android:name']) ?? [];\n const data =\n intentFilter?.data\n ?.filter((data: any) => data?.$?.['android:scheme'])\n ?.map((data: any) => ({\n scheme: data?.$?.['android:scheme'],\n host: data?.$?.['android:host'],\n })) ?? [];\n return {\n actions,\n categories,\n data,\n };\n}\n\nfunction getSingleTaskIntentFilters(androidManifest: AndroidManifest): any[] {\n if (!Array.isArray(androidManifest.manifest.application)) return [];\n\n let outputSchemes: any[] = [];\n for (const application of androidManifest.manifest.application) {\n const { activity } = application;\n // @ts-ignore\n const activities = Array.isArray(activity) ? activity : [activity];\n const singleTaskActivities = (activities as ManifestActivity[]).filter(\n (activity) => activity?.$?.['android:launchMode'] === 'singleTask'\n );\n for (const activity of singleTaskActivities) {\n const intentFilters = activity['intent-filter'];\n outputSchemes = outputSchemes.concat(intentFilters);\n }\n }\n return outputSchemes;\n}\n\nexport function getSchemesFromManifest(\n androidManifest: AndroidManifest,\n requestedHost: string | null = null\n): string[] {\n const outputSchemes: string[] = [];\n\n const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);\n for (const intentFilter of singleTaskIntentFilters) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties) && properties.data) {\n for (const { scheme, host } of properties.data) {\n if (requestedHost === null || !host || host === requestedHost) {\n outputSchemes.push(scheme);\n }\n }\n }\n }\n\n return outputSchemes;\n}\n\nexport function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return false;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n return true;\n }\n }\n if (!activity['intent-filter']) {\n activity['intent-filter'] = [];\n }\n\n activity['intent-filter'].push({\n action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],\n category: [\n { $: { 'android:name': 'android.intent.category.DEFAULT' } },\n { $: { 'android:name': 'android.intent.category.BROWSABLE' } },\n ],\n });\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean {\n const schemes = getSchemesFromManifest(androidManifest);\n return schemes.includes(scheme);\n}\n\nexport function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n if (!intentFilter.data) intentFilter.data = [];\n intentFilter.data.push({\n $: { 'android:scheme': scheme },\n });\n }\n }\n break;\n }\n }\n }\n return androidManifest;\n}\n\nexport function removeScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n for (const dataKey in intentFilter?.data || []) {\n const data = intentFilter.data?.[dataKey];\n if (data?.$?.['android:scheme'] === scheme) {\n delete intentFilter.data?.[dataKey];\n }\n }\n }\n }\n break;\n }\n }\n }\n\n return androidManifest;\n}\n"],"mappings":"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"}
|
|
@@ -96,8 +96,7 @@ function setStatusBarStyles(config, styles) {
|
|
|
96
96
|
return styles;
|
|
97
97
|
}
|
|
98
98
|
function getStatusBarColor(config) {
|
|
99
|
-
|
|
100
|
-
const backgroundColor = (_config$androidStatus = config.androidStatusBar) === null || _config$androidStatus === void 0 ? void 0 : _config$androidStatus.backgroundColor;
|
|
99
|
+
const backgroundColor = config.androidStatusBar?.backgroundColor;
|
|
101
100
|
if (backgroundColor) {
|
|
102
101
|
// Drop support for translucent
|
|
103
102
|
(0, _assert().default)(backgroundColor !== 'translucent', `androidStatusBar.backgroundColor must be a valid hex string, instead got: "${backgroundColor}"`);
|
|
@@ -113,11 +112,9 @@ function getStatusBarColor(config) {
|
|
|
113
112
|
* @returns
|
|
114
113
|
*/
|
|
115
114
|
function getStatusBarTranslucent(config) {
|
|
116
|
-
|
|
117
|
-
return (_config$androidStatus2 = (_config$androidStatus3 = config.androidStatusBar) === null || _config$androidStatus3 === void 0 ? void 0 : _config$androidStatus3.translucent) !== null && _config$androidStatus2 !== void 0 ? _config$androidStatus2 : false;
|
|
115
|
+
return config.androidStatusBar?.translucent ?? false;
|
|
118
116
|
}
|
|
119
117
|
function getStatusBarStyle(config) {
|
|
120
|
-
|
|
121
|
-
return ((_config$androidStatus4 = config.androidStatusBar) === null || _config$androidStatus4 === void 0 ? void 0 : _config$androidStatus4.barStyle) || 'light-content';
|
|
118
|
+
return config.androidStatusBar?.barStyle || 'light-content';
|
|
122
119
|
}
|
|
123
120
|
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","names":["_assert","data","_interopRequireDefault","require","_Colors","_Styles","_androidPlugins","obj","__esModule","default","COLOR_PRIMARY_DARK_KEY","WINDOW_TRANSLUCENT_STATUS","WINDOW_LIGHT_STATUS_BAR","withStatusBar","config","withStatusBarColors","withStatusBarStyles","exports","withAndroidColors","modResults","setStatusBarColors","withAndroidStyles","setStatusBarStyles","colors","assignColorValue","name","value","getStatusBarColor","styles","hexString","floatElement","getStatusBarTranslucent","assignStylesValue","parent","getAppThemeLightNoActionBarGroup","targetApi","add","getStatusBarStyle","
|
|
1
|
+
{"version":3,"file":"StatusBar.js","names":["_assert","data","_interopRequireDefault","require","_Colors","_Styles","_androidPlugins","obj","__esModule","default","COLOR_PRIMARY_DARK_KEY","WINDOW_TRANSLUCENT_STATUS","WINDOW_LIGHT_STATUS_BAR","withStatusBar","config","withStatusBarColors","withStatusBarStyles","exports","withAndroidColors","modResults","setStatusBarColors","withAndroidStyles","setStatusBarStyles","colors","assignColorValue","name","value","getStatusBarColor","styles","hexString","floatElement","getStatusBarTranslucent","assignStylesValue","parent","getAppThemeLightNoActionBarGroup","targetApi","add","getStatusBarStyle","backgroundColor","androidStatusBar","assert","translucent","barStyle"],"sources":["../../src/android/StatusBar.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport assert from 'assert';\n\nimport { assignColorValue } from './Colors';\nimport { ResourceXML } from './Resources';\nimport { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';\n\n// https://developer.android.com/reference/android/R.attr#colorPrimaryDark\nconst COLOR_PRIMARY_DARK_KEY = 'colorPrimaryDark';\n// https://developer.android.com/reference/android/R.attr#windowTranslucentStatus\nconst WINDOW_TRANSLUCENT_STATUS = 'android:windowTranslucentStatus';\n// https://developer.android.com/reference/android/R.attr#windowLightStatusBar\nconst WINDOW_LIGHT_STATUS_BAR = 'android:windowLightStatusBar';\n\nexport const withStatusBar: ConfigPlugin = (config) => {\n config = withStatusBarColors(config);\n config = withStatusBarStyles(config);\n return config;\n};\n\nconst withStatusBarColors: ConfigPlugin = (config) => {\n return withAndroidColors(config, (config) => {\n config.modResults = setStatusBarColors(config, config.modResults);\n return config;\n });\n};\n\nconst withStatusBarStyles: ConfigPlugin = (config) => {\n return withAndroidStyles(config, (config) => {\n config.modResults = setStatusBarStyles(config, config.modResults);\n return config;\n });\n};\n\nexport function setStatusBarColors(\n config: Pick<ExpoConfig, 'androidStatusBar'>,\n colors: ResourceXML\n): ResourceXML {\n return assignColorValue(colors, {\n name: COLOR_PRIMARY_DARK_KEY,\n value: getStatusBarColor(config),\n });\n}\n\nexport function setStatusBarStyles(\n config: Pick<ExpoConfig, 'androidStatusBar'>,\n styles: ResourceXML\n): ResourceXML {\n const hexString = getStatusBarColor(config);\n const floatElement = getStatusBarTranslucent(config);\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: WINDOW_LIGHT_STATUS_BAR,\n targetApi: '23',\n value: 'true',\n // Default is light-content, don't need to do anything to set it\n add: getStatusBarStyle(config) === 'dark-content',\n });\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: WINDOW_TRANSLUCENT_STATUS,\n value: 'true',\n // translucent status bar set in theme\n add: floatElement,\n });\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: COLOR_PRIMARY_DARK_KEY,\n value: `@color/${COLOR_PRIMARY_DARK_KEY}`,\n // Remove the color if translucent is used\n add: !!hexString,\n });\n\n return styles;\n}\n\nexport function getStatusBarColor(config: Pick<ExpoConfig, 'androidStatusBar'>) {\n const backgroundColor = config.androidStatusBar?.backgroundColor;\n if (backgroundColor) {\n // Drop support for translucent\n assert(\n backgroundColor !== 'translucent',\n `androidStatusBar.backgroundColor must be a valid hex string, instead got: \"${backgroundColor}\"`\n );\n }\n return backgroundColor;\n}\n\n/**\n * Specifies whether the status bar should be \"translucent\". When true, the status bar is drawn with `position: absolute` and a gray underlay, when false `position: relative` (pushes content down).\n *\n * @default false\n * @param config\n * @returns\n */\nexport function getStatusBarTranslucent(config: Pick<ExpoConfig, 'androidStatusBar'>): boolean {\n return config.androidStatusBar?.translucent ?? false;\n}\n\nexport function getStatusBarStyle(config: Pick<ExpoConfig, 'androidStatusBar'>) {\n return config.androidStatusBar?.barStyle || 'light-content';\n}\n"],"mappings":";;;;;;;;;;;AACA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,QAAA;EAAA,MAAAH,IAAA,GAAAE,OAAA;EAAAC,OAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAK,gBAAA;EAAA,MAAAL,IAAA,GAAAE,OAAA;EAAAG,eAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAkF,SAAAC,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAElF;AACA,MAAMG,sBAAsB,GAAG,kBAAkB;AACjD;AACA,MAAMC,yBAAyB,GAAG,iCAAiC;AACnE;AACA,MAAMC,uBAAuB,GAAG,8BAA8B;AAEvD,MAAMC,aAA2B,GAAIC,MAAM,IAAK;EACrDA,MAAM,GAAGC,mBAAmB,CAACD,MAAM,CAAC;EACpCA,MAAM,GAAGE,mBAAmB,CAACF,MAAM,CAAC;EACpC,OAAOA,MAAM;AACf,CAAC;AAACG,OAAA,CAAAJ,aAAA,GAAAA,aAAA;AAEF,MAAME,mBAAiC,GAAID,MAAM,IAAK;EACpD,OAAO,IAAAI,mCAAiB,EAACJ,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACK,UAAU,GAAGC,kBAAkB,CAACN,MAAM,EAAEA,MAAM,CAACK,UAAU,CAAC;IACjE,OAAOL,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAME,mBAAiC,GAAIF,MAAM,IAAK;EACpD,OAAO,IAAAO,mCAAiB,EAACP,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACK,UAAU,GAAGG,kBAAkB,CAACR,MAAM,EAAEA,MAAM,CAACK,UAAU,CAAC;IACjE,OAAOL,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAEM,SAASM,kBAAkBA,CAChCN,MAA4C,EAC5CS,MAAmB,EACN;EACb,OAAO,IAAAC,0BAAgB,EAACD,MAAM,EAAE;IAC9BE,IAAI,EAAEf,sBAAsB;IAC5BgB,KAAK,EAAEC,iBAAiB,CAACb,MAAM;EACjC,CAAC,CAAC;AACJ;AAEO,SAASQ,kBAAkBA,CAChCR,MAA4C,EAC5Cc,MAAmB,EACN;EACb,MAAMC,SAAS,GAAGF,iBAAiB,CAACb,MAAM,CAAC;EAC3C,MAAMgB,YAAY,GAAGC,uBAAuB,CAACjB,MAAM,CAAC;EAEpDc,MAAM,GAAG,IAAAI,2BAAiB,EAACJ,MAAM,EAAE;IACjCK,MAAM,EAAE,IAAAC,0CAAgC,EAAC,CAAC;IAC1CT,IAAI,EAAEb,uBAAuB;IAC7BuB,SAAS,EAAE,IAAI;IACfT,KAAK,EAAE,MAAM;IACb;IACAU,GAAG,EAAEC,iBAAiB,CAACvB,MAAM,CAAC,KAAK;EACrC,CAAC,CAAC;EAEFc,MAAM,GAAG,IAAAI,2BAAiB,EAACJ,MAAM,EAAE;IACjCK,MAAM,EAAE,IAAAC,0CAAgC,EAAC,CAAC;IAC1CT,IAAI,EAAEd,yBAAyB;IAC/Be,KAAK,EAAE,MAAM;IACb;IACAU,GAAG,EAAEN;EACP,CAAC,CAAC;EAEFF,MAAM,GAAG,IAAAI,2BAAiB,EAACJ,MAAM,EAAE;IACjCK,MAAM,EAAE,IAAAC,0CAAgC,EAAC,CAAC;IAC1CT,IAAI,EAAEf,sBAAsB;IAC5BgB,KAAK,EAAG,UAAShB,sBAAuB,EAAC;IACzC;IACA0B,GAAG,EAAE,CAAC,CAACP;EACT,CAAC,CAAC;EAEF,OAAOD,MAAM;AACf;AAEO,SAASD,iBAAiBA,CAACb,MAA4C,EAAE;EAC9E,MAAMwB,eAAe,GAAGxB,MAAM,CAACyB,gBAAgB,EAAED,eAAe;EAChE,IAAIA,eAAe,EAAE;IACnB;IACA,IAAAE,iBAAM,EACJF,eAAe,KAAK,aAAa,EAChC,8EAA6EA,eAAgB,GAChG,CAAC;EACH;EACA,OAAOA,eAAe;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASP,uBAAuBA,CAACjB,MAA4C,EAAW;EAC7F,OAAOA,MAAM,CAACyB,gBAAgB,EAAEE,WAAW,IAAI,KAAK;AACtD;AAEO,SAASJ,iBAAiBA,CAACvB,MAA4C,EAAE;EAC9E,OAAOA,MAAM,CAACyB,gBAAgB,EAAEG,QAAQ,IAAI,eAAe;AAC7D"}
|
package/build/android/Strings.js
CHANGED
|
@@ -22,8 +22,7 @@ async function getProjectStringsXMLPathAsync(projectRoot, {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
function setStringItem(itemToAdd, stringFileContentsJSON) {
|
|
25
|
-
|
|
26
|
-
if (!(stringFileContentsJSON !== null && stringFileContentsJSON !== void 0 && (_stringFileContentsJS = stringFileContentsJSON.resources) !== null && _stringFileContentsJS !== void 0 && _stringFileContentsJS.string)) {
|
|
25
|
+
if (!stringFileContentsJSON?.resources?.string) {
|
|
27
26
|
if (!stringFileContentsJSON.resources || typeof stringFileContentsJSON.resources === 'string') {
|
|
28
27
|
// file was empty and JSON is `{resources : ''}`
|
|
29
28
|
stringFileContentsJSON.resources = {};
|
|
@@ -43,8 +42,7 @@ function setStringItem(itemToAdd, stringFileContentsJSON) {
|
|
|
43
42
|
return stringFileContentsJSON;
|
|
44
43
|
}
|
|
45
44
|
function removeStringItem(named, stringFileContentsJSON) {
|
|
46
|
-
|
|
47
|
-
if (stringFileContentsJSON !== null && stringFileContentsJSON !== void 0 && (_stringFileContentsJS2 = stringFileContentsJSON.resources) !== null && _stringFileContentsJS2 !== void 0 && _stringFileContentsJS2.string) {
|
|
45
|
+
if (stringFileContentsJSON?.resources?.string) {
|
|
48
46
|
const stringNameExists = stringFileContentsJSON.resources.string.findIndex(e => e.$.name === named);
|
|
49
47
|
if (stringNameExists > -1) {
|
|
50
48
|
// replace the previous value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Strings.js","names":["_Paths","data","require","getProjectStringsXMLPathAsync","projectRoot","kind","getResourceXMLPathAsync","name","setStringItem","itemToAdd","stringFileContentsJSON","
|
|
1
|
+
{"version":3,"file":"Strings.js","names":["_Paths","data","require","getProjectStringsXMLPathAsync","projectRoot","kind","getResourceXMLPathAsync","name","setStringItem","itemToAdd","stringFileContentsJSON","resources","string","newItem","stringNameExists","findIndex","e","$","concat","removeStringItem","named","splice"],"sources":["../../src/android/Strings.ts"],"sourcesContent":["import { getResourceXMLPathAsync } from './Paths';\nimport { ResourceItemXML, ResourceKind, ResourceXML } from './Resources';\n\nexport async function getProjectStringsXMLPathAsync(\n projectRoot: string,\n { kind }: { kind?: ResourceKind } = {}\n): Promise<string> {\n return getResourceXMLPathAsync(projectRoot, { kind, name: 'strings' });\n}\n\nexport function setStringItem(\n itemToAdd: ResourceItemXML[],\n stringFileContentsJSON: ResourceXML\n): ResourceXML {\n if (!stringFileContentsJSON?.resources?.string) {\n if (!stringFileContentsJSON.resources || typeof stringFileContentsJSON.resources === 'string') {\n // file was empty and JSON is `{resources : ''}`\n stringFileContentsJSON.resources = {};\n }\n stringFileContentsJSON.resources.string = itemToAdd;\n return stringFileContentsJSON;\n }\n\n for (const newItem of itemToAdd) {\n const stringNameExists = stringFileContentsJSON.resources.string.findIndex(\n (e: ResourceItemXML) => e.$.name === newItem.$.name\n );\n if (stringNameExists > -1) {\n // replace the previous item\n stringFileContentsJSON.resources.string[stringNameExists] = newItem;\n } else {\n stringFileContentsJSON.resources.string =\n stringFileContentsJSON.resources.string.concat(newItem);\n }\n }\n return stringFileContentsJSON;\n}\n\nexport function removeStringItem(named: string, stringFileContentsJSON: ResourceXML): ResourceXML {\n if (stringFileContentsJSON?.resources?.string) {\n const stringNameExists = stringFileContentsJSON.resources.string.findIndex(\n (e: ResourceItemXML) => e.$.name === named\n );\n if (stringNameExists > -1) {\n // replace the previous value\n stringFileContentsJSON.resources.string.splice(stringNameExists, 1);\n }\n }\n return stringFileContentsJSON;\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGO,eAAeE,6BAA6BA,CACjDC,WAAmB,EACnB;EAAEC;AAA8B,CAAC,GAAG,CAAC,CAAC,EACrB;EACjB,OAAO,IAAAC,gCAAuB,EAACF,WAAW,EAAE;IAAEC,IAAI;IAAEE,IAAI,EAAE;EAAU,CAAC,CAAC;AACxE;AAEO,SAASC,aAAaA,CAC3BC,SAA4B,EAC5BC,sBAAmC,EACtB;EACb,IAAI,CAACA,sBAAsB,EAAEC,SAAS,EAAEC,MAAM,EAAE;IAC9C,IAAI,CAACF,sBAAsB,CAACC,SAAS,IAAI,OAAOD,sBAAsB,CAACC,SAAS,KAAK,QAAQ,EAAE;MAC7F;MACAD,sBAAsB,CAACC,SAAS,GAAG,CAAC,CAAC;IACvC;IACAD,sBAAsB,CAACC,SAAS,CAACC,MAAM,GAAGH,SAAS;IACnD,OAAOC,sBAAsB;EAC/B;EAEA,KAAK,MAAMG,OAAO,IAAIJ,SAAS,EAAE;IAC/B,MAAMK,gBAAgB,GAAGJ,sBAAsB,CAACC,SAAS,CAACC,MAAM,CAACG,SAAS,CACvEC,CAAkB,IAAKA,CAAC,CAACC,CAAC,CAACV,IAAI,KAAKM,OAAO,CAACI,CAAC,CAACV,IACjD,CAAC;IACD,IAAIO,gBAAgB,GAAG,CAAC,CAAC,EAAE;MACzB;MACAJ,sBAAsB,CAACC,SAAS,CAACC,MAAM,CAACE,gBAAgB,CAAC,GAAGD,OAAO;IACrE,CAAC,MAAM;MACLH,sBAAsB,CAACC,SAAS,CAACC,MAAM,GACrCF,sBAAsB,CAACC,SAAS,CAACC,MAAM,CAACM,MAAM,CAACL,OAAO,CAAC;IAC3D;EACF;EACA,OAAOH,sBAAsB;AAC/B;AAEO,SAASS,gBAAgBA,CAACC,KAAa,EAAEV,sBAAmC,EAAe;EAChG,IAAIA,sBAAsB,EAAEC,SAAS,EAAEC,MAAM,EAAE;IAC7C,MAAME,gBAAgB,GAAGJ,sBAAsB,CAACC,SAAS,CAACC,MAAM,CAACG,SAAS,CACvEC,CAAkB,IAAKA,CAAC,CAACC,CAAC,CAACV,IAAI,KAAKa,KACvC,CAAC;IACD,IAAIN,gBAAgB,GAAG,CAAC,CAAC,EAAE;MACzB;MACAJ,sBAAsB,CAACC,SAAS,CAACC,MAAM,CAACS,MAAM,CAACP,gBAAgB,EAAE,CAAC,CAAC;IACrE;EACF;EACA,OAAOJ,sBAAsB;AAC/B"}
|
package/build/android/Styles.js
CHANGED
|
@@ -46,9 +46,8 @@ async function getProjectStylesXMLPathAsync(projectRoot, {
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
function ensureDefaultStyleResourceXML(xml) {
|
|
49
|
-
var _xml, _xml$resources;
|
|
50
49
|
xml = (0, _Resources().ensureDefaultResourceXML)(xml);
|
|
51
|
-
if (!Array.isArray(
|
|
50
|
+
if (!Array.isArray(xml?.resources?.style)) {
|
|
52
51
|
xml.resources.style = [];
|
|
53
52
|
}
|
|
54
53
|
return xml;
|
|
@@ -113,7 +112,7 @@ function removeStylesItem({
|
|
|
113
112
|
}) {
|
|
114
113
|
xml = ensureDefaultStyleResourceXML(xml);
|
|
115
114
|
const appTheme = getStyleParent(xml, parent);
|
|
116
|
-
if (appTheme
|
|
115
|
+
if (appTheme?.item) {
|
|
117
116
|
const index = appTheme.item.findIndex(({
|
|
118
117
|
$: head
|
|
119
118
|
}) => head.name === name);
|
|
@@ -165,6 +164,6 @@ function assignStylesValue(xml, {
|
|
|
165
164
|
*/
|
|
166
165
|
function getStylesGroupAsObject(xml, group) {
|
|
167
166
|
const xmlGroup = getStyleParent(xml, group);
|
|
168
|
-
return xmlGroup
|
|
167
|
+
return xmlGroup?.item ? (0, _Resources().getResourceItemsAsObject)(xmlGroup.item) : null;
|
|
169
168
|
}
|
|
170
169
|
//# sourceMappingURL=Styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.js","names":["_Paths","data","require","_Resources","fallbackResourceString","readStylesXMLAsync","path","fallback","readResourcesXMLAsync","getProjectStylesXMLPathAsync","projectRoot","kind","getResourceXMLPathAsync","name","ensureDefaultStyleResourceXML","xml","
|
|
1
|
+
{"version":3,"file":"Styles.js","names":["_Paths","data","require","_Resources","fallbackResourceString","readStylesXMLAsync","path","fallback","readResourcesXMLAsync","getProjectStylesXMLPathAsync","projectRoot","kind","getResourceXMLPathAsync","name","ensureDefaultStyleResourceXML","xml","ensureDefaultResourceXML","Array","isArray","resources","style","getStyleParent","group","findResourceGroup","getStylesItem","parent","appTheme","item","existingItem","filter","$","head","setStylesItem","buildResourceGroup","push","_","removeStylesItem","index","findIndex","splice","getAppThemeLightNoActionBarGroup","assignStylesValue","add","value","targetApi","buildResourceItem","getStylesGroupAsObject","xmlGroup","getResourceItemsAsObject"],"sources":["../../src/android/Styles.ts"],"sourcesContent":["import { getResourceXMLPathAsync } from './Paths';\nimport {\n buildResourceGroup,\n buildResourceItem,\n ensureDefaultResourceXML,\n findResourceGroup,\n getResourceItemsAsObject,\n readResourcesXMLAsync,\n ResourceGroupXML,\n ResourceItemXML,\n ResourceKind,\n ResourceXML,\n} from './Resources';\n\n// Adds support for `tools:x`\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources xmlns:tools=\"http://schemas.android.com/tools\"></resources>`;\n\nexport async function readStylesXMLAsync({\n path,\n fallback = fallbackResourceString,\n}: {\n path: string;\n fallback?: string | null;\n}): Promise<ResourceXML> {\n return readResourcesXMLAsync({ path, fallback });\n}\n\nexport async function getProjectStylesXMLPathAsync(\n projectRoot: string,\n { kind }: { kind?: ResourceKind } = {}\n): Promise<string> {\n return getResourceXMLPathAsync(projectRoot, { kind, name: 'styles' });\n}\n\nfunction ensureDefaultStyleResourceXML(xml: ResourceXML): ResourceXML {\n xml = ensureDefaultResourceXML(xml);\n if (!Array.isArray(xml?.resources?.style)) {\n xml.resources.style = [];\n }\n return xml;\n}\n\nexport function getStyleParent(\n xml: ResourceXML,\n group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n return findResourceGroup(xml.resources.style, group);\n}\n\nexport function getStylesItem({\n name,\n xml,\n parent,\n}: {\n name: string;\n xml: ResourceXML;\n parent: { name: string; parent?: string };\n}): ResourceItemXML | null {\n xml = ensureDefaultStyleResourceXML(xml);\n\n const appTheme = getStyleParent(xml, parent);\n\n if (!appTheme) {\n return null;\n }\n\n if (appTheme.item) {\n const existingItem = appTheme.item.filter(({ $: head }) => head.name === name)[0];\n\n // Don't want to 2 of the same item, so if one exists, we overwrite it\n if (existingItem) {\n return existingItem;\n }\n }\n return null;\n}\n\nexport function setStylesItem({\n item,\n xml,\n parent,\n}: {\n item: ResourceItemXML;\n xml: ResourceXML;\n parent: { name: string; parent: string };\n}): ResourceXML {\n xml = ensureDefaultStyleResourceXML(xml);\n\n let appTheme = getStyleParent(xml, parent);\n\n if (!appTheme) {\n appTheme = buildResourceGroup(parent);\n xml.resources!.style!.push(appTheme);\n }\n\n if (appTheme.item) {\n const existingItem = appTheme.item.filter(({ $: head }) => head.name === item.$.name)[0];\n\n // Don't want to 2 of the same item, so if one exists, we overwrite it\n if (existingItem) {\n existingItem._ = item._;\n existingItem.$ = item.$;\n } else {\n appTheme.item.push(item);\n }\n } else {\n appTheme.item = [item];\n }\n return xml;\n}\n\nexport function removeStylesItem({\n name,\n xml,\n parent,\n}: {\n name: string;\n xml: ResourceXML;\n parent: { name: string; parent: string };\n}): ResourceXML {\n xml = ensureDefaultStyleResourceXML(xml);\n const appTheme = getStyleParent(xml, parent);\n if (appTheme?.item) {\n const index = appTheme.item.findIndex(({ $: head }: ResourceItemXML) => head.name === name);\n if (index > -1) {\n appTheme.item.splice(index, 1);\n }\n }\n return xml;\n}\n\n// This is a very common theme so make it reusable.\nexport function getAppThemeLightNoActionBarGroup() {\n return { name: 'AppTheme', parent: 'Theme.AppCompat.Light.NoActionBar' };\n}\n\nexport function assignStylesValue(\n xml: ResourceXML,\n {\n add,\n value,\n targetApi,\n name,\n parent,\n }: {\n add: boolean;\n value: string;\n targetApi?: string;\n name: string;\n parent: { name: string; parent: string };\n }\n): ResourceXML {\n if (add) {\n return setStylesItem({\n xml,\n parent,\n item: buildResourceItem({\n name,\n targetApi,\n value,\n }),\n });\n }\n return removeStylesItem({\n xml,\n parent,\n name,\n });\n}\n\n/**\n * Helper to convert a styles.xml parent's children into a simple k/v pair.\n * Added for testing purposes.\n *\n * @param xml\n * @returns\n */\nexport function getStylesGroupAsObject(\n xml: ResourceXML,\n group: { name: string; parent?: string }\n): Record<string, string> | null {\n const xmlGroup = getStyleParent(xml, group);\n return xmlGroup?.item ? getResourceItemsAsObject(xmlGroup.item) : null;\n}\n"],"mappings":"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"}
|
|
@@ -7,10 +7,8 @@ export declare enum Config {
|
|
|
7
7
|
ENABLED = "expo.modules.updates.ENABLED",
|
|
8
8
|
CHECK_ON_LAUNCH = "expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH",
|
|
9
9
|
LAUNCH_WAIT_MS = "expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS",
|
|
10
|
-
SDK_VERSION = "expo.modules.updates.EXPO_SDK_VERSION",
|
|
11
10
|
RUNTIME_VERSION = "expo.modules.updates.EXPO_RUNTIME_VERSION",
|
|
12
11
|
UPDATE_URL = "expo.modules.updates.EXPO_UPDATE_URL",
|
|
13
|
-
RELEASE_CHANNEL = "expo.modules.updates.EXPO_RELEASE_CHANNEL",
|
|
14
12
|
UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY",
|
|
15
13
|
CODE_SIGNING_CERTIFICATE = "expo.modules.updates.CODE_SIGNING_CERTIFICATE",
|
|
16
14
|
CODE_SIGNING_METADATA = "expo.modules.updates.CODE_SIGNING_METADATA"
|
|
@@ -20,9 +18,3 @@ export declare function applyRuntimeVersionFromConfigAsync(config: ExportedConfi
|
|
|
20
18
|
export declare function applyRuntimeVersionFromConfigForProjectRootAsync(projectRoot: string, config: ExpoConfigUpdates, stringsJSON: ResourceXML): Promise<ResourceXML>;
|
|
21
19
|
export declare function setUpdatesConfigAsync(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest, expoUpdatesPackageVersion?: string | null): Promise<AndroidManifest>;
|
|
22
20
|
export declare function setVersionsConfigAsync(projectRoot: string, config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>, androidManifest: AndroidManifest): Promise<AndroidManifest>;
|
|
23
|
-
export declare function ensureBuildGradleContainsConfigurationScript(projectRoot: string, buildGradleContents: string): string;
|
|
24
|
-
export declare function formatApplyLineForBuildGradle(projectRoot: string): string;
|
|
25
|
-
export declare function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean;
|
|
26
|
-
export declare function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean;
|
|
27
|
-
export declare function isMainApplicationMetaDataSyncedAsync(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest): Promise<boolean>;
|
|
28
|
-
export declare function areVersionsSyncedAsync(projectRoot: string, config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>, androidManifest: AndroidManifest): Promise<boolean>;
|