@expo/config-plugins 4.0.18 → 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/ios/Google.d.ts +5 -5
- package/build/ios/Google.js +58 -8
- package/build/ios/Google.js.map +1 -1
- 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/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 +1 -1
- package/build/utils/Updates.js +15 -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 +1 -1
|
@@ -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":";;;;;;;;;;;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AASO,MAAMA,UAAU,GAAG,mDAA4BC,SAA5B,EAAuC,YAAvC,CAAnB;;;AAEA,SAASC,SAAT,CAAmBC,MAAnB,EAAqE;AAC1E,MAAIC,KAAK,CAACC,OAAN,CAAcF,MAAM,CAACG,MAArB,CAAJ,EAAkC;AAChC,UAAMC,QAAQ,GAAIC,KAAD,IAAiC,OAAOA,KAAP,KAAiB,QAAnE;;AAEA,WAAOL,MAAM,CAACG,MAAP,CAAcG,MAAd,CAA6BF,QAA7B,CAAP;AACD,GAJD,MAIO,IAAI,OAAOJ,MAAM,CAACG,MAAd,KAAyB,QAA7B,EAAuC;AAC5C,WAAO,CAACH,MAAM,CAACG,MAAR,CAAP;AACD;;AACD,SAAO,EAAP;AACD,C,CAED;AACA;AACA;;;AACO,SAASL,SAAT,CACLE,MADK,EAELO,eAFK,EAGL;AAAA;;AACA,QAAMC,OAAO,GAAG,CACd,GAAGT,SAAS,CAACC,MAAD,CADE,EAEd;AACA,KAAGD,SAAS,oBAACC,MAAM,CAACS,OAAR,6DAAmB,EAAnB,CAHE,CAAhB,CADA,CAMA;;AACA,0BAAIT,MAAM,CAACS,OAAX,6CAAI,iBAAgBC,OAApB,EAA6B;AAC3BF,IAAAA,OAAO,CAACG,IAAR,CAAaX,MAAM,CAACS,OAAP,CAAeC,OAA5B;AACD;;AACD,MAAIF,OAAO,CAACI,MAAR,KAAmB,CAAvB,EAA0B;AACxB,WAAOL,eAAP;AACD;;AAED,MAAI,CAACM,kCAAkC,CAACN,eAAD,CAAvC,EAA0D;AACxD,uCACE,QADF,EAEG,0HAFH,EAGE,2CAHF;AAKA,WAAOA,eAAP;AACD,GArBD,CAuBA;;;AACA,QAAMO,cAAc,GAAGC,sBAAsB,CAACR,eAAD,CAA7C;;AACA,OAAK,MAAMS,GAAX,IAAkBF,cAAlB,EAAkC;AAChC,UAAMG,KAAK,GAAGT,OAAO,CAACU,OAAR,CAAgBF,GAAhB,CAAd;AACA,QAAIC,KAAK,GAAG,CAAC,CAAb,EAAgBT,OAAO,CAACW,MAAR,CAAeF,KAAf,EAAsB,CAAtB;AACjB,GA5BD,CA8BA;;;AACA,OAAK,MAAMD,GAAX,IAAkBR,OAAlB,EAA2B;AACzBD,IAAAA,eAAe,GAAGa,YAAY,CAACJ,GAAD,EAAMT,eAAN,CAA9B;AACD;;AAED,SAAOA,eAAP;AACD;;AAED,SAASc,2BAAT,CAAqC;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,UAAX;AAAuBf,EAAAA;AAAvB,CAArC,EAAmG;AACjG,SACEc,OAAO,CAACE,QAAR,CAAiB,4BAAjB,KACA,CAACD,UAAU,CAACC,QAAX,CAAoB,kCAApB,CAFH;AAID;;AAED,SAASC,0BAAT,CAAoCC,YAApC,EAA0E;AAAA;;AACxE,QAAMJ,OAAO,4BAAGI,YAAH,aAAGA,YAAH,+CAAGA,YAAY,CAAEC,MAAjB,yDAAG,qBAAsBC,GAAtB,CAA2BC,IAAD;AAAA;;AAAA,WAAeA,IAAf,aAAeA,IAAf,kCAAeA,IAAI,CAAEC,CAArB,4CAAe,QAAU,cAAV,CAAf;AAAA,GAA1B,CAAH,yEAA0E,EAAvF;AACA,QAAMP,UAAU,4BAAGG,YAAH,aAAGA,YAAH,iDAAGA,YAAY,CAAEK,QAAjB,2DAAG,uBAAwBH,GAAxB,CAA6BC,IAAD;AAAA;;AAAA,WAAeA,IAAf,aAAeA,IAAf,mCAAeA,IAAI,CAAEC,CAArB,6CAAe,SAAU,cAAV,CAAf;AAAA,GAA5B,CAAH,yEAA4E,EAA5F;AACA,QAAMtB,OAAO,4BAAGkB,YAAH,aAAGA,YAAH,6CAAGA,YAAY,CAAEG,IAAjB,uDAAG,mBAAoBD,GAApB,CAAyBC,IAAD;AAAA;;AAAA,WAAeA,IAAf,aAAeA,IAAf,mCAAeA,IAAI,CAAEC,CAArB,6CAAe,SAAU,gBAAV,CAAf;AAAA,GAAxB,CAAH,yEAA0E,EAAvF;AACA,SAAO;AACLtB,IAAAA,OADK;AAELc,IAAAA,OAFK;AAGLC,IAAAA;AAHK,GAAP;AAKD;;AAED,SAASS,0BAAT,CAAoCzB,eAApC,EAA6E;AAC3E,MAAI,CAACN,KAAK,CAACC,OAAN,CAAcK,eAAe,CAAC0B,QAAhB,CAAyBC,WAAvC,CAAL,EAA0D,OAAO,EAAP;AAE1D,MAAIC,aAAoB,GAAG,EAA3B;;AACA,OAAK,MAAMD,WAAX,IAA0B3B,eAAe,CAAC0B,QAAhB,CAAyBC,WAAnD,EAAgE;AAC9D,UAAM;AAAEE,MAAAA;AAAF,QAAeF,WAArB,CAD8D,CAE9D;;AACA,UAAMG,UAAU,GAAGpC,KAAK,CAACC,OAAN,CAAckC,QAAd,IAA0BA,QAA1B,GAAqC,CAACA,QAAD,CAAxD;AACA,UAAME,oBAAoB,GAAID,UAAD,CAAmC/B,MAAnC,CAC3B8B,QAAQ;AAAA;;AAAA,aAAI,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,2BAAAA,QAAQ,CAAEN,CAAV,4DAAc,oBAAd,OAAwC,YAA5C;AAAA,KADmB,CAA7B;;AAGA,SAAK,MAAMM,QAAX,IAAuBE,oBAAvB,EAA6C;AAC3C,YAAMC,aAAa,GAAGH,QAAQ,CAAC,eAAD,CAA9B;AACAD,MAAAA,aAAa,GAAGA,aAAa,CAACK,MAAd,CAAqBD,aAArB,CAAhB;AACD;AACF;;AACD,SAAOJ,aAAP;AACD;;AAEM,SAASpB,sBAAT,CAAgCR,eAAhC,EAA4E;AACjF,QAAM4B,aAAkC,GAAG,EAA3C;AAEA,QAAMM,uBAAuB,GAAGT,0BAA0B,CAACzB,eAAD,CAA1D;;AACA,OAAK,MAAMmB,YAAX,IAA2Be,uBAA3B,EAAoD;AAClD,UAAMC,UAAU,GAAGjB,0BAA0B,CAACC,YAAD,CAA7C;;AACA,QAAIL,2BAA2B,CAACqB,UAAD,CAA/B,EAA6C;AAC3CP,MAAAA,aAAa,CAACxB,IAAd,CAAmB+B,UAAnB;AACD;AACF;;AAED,SAAOP,aAAa,CAACQ,MAAd,CAA+B,CAACC,IAAD,EAAO;AAAEpC,IAAAA;AAAF,GAAP,KAAuB,CAAC,GAAGoC,IAAJ,EAAU,GAAGpC,OAAb,CAAtD,EAA6E,EAA7E,CAAP;AACD;;AAEM,SAASK,kCAAT,CAA4CN,eAA5C,EAAuF;AAC5F,MAAI,CAACN,KAAK,CAACC,OAAN,CAAcK,eAAe,CAAC0B,QAAhB,CAAyBC,WAAvC,CAAL,EAA0D;AACxD,WAAO,KAAP;AACD;;AAED,OAAK,MAAMA,WAAX,IAA0B3B,eAAe,CAAC0B,QAAhB,CAAyBC,WAAnD,EAAgE;AAC9D,SAAK,MAAME,QAAX,IAAuBF,WAAW,CAACE,QAAZ,IAAwB,EAA/C,EAAmD;AAAA;;AACjD,UAAI,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,4BAAAA,QAAQ,CAAEN,CAAV,8DAAc,oBAAd,OAAwC,YAA5C,EAA0D;AACxD,aAAK,MAAMJ,YAAX,IAA2BU,QAAQ,CAAC,eAAD,CAAR,IAA6B,EAAxD,EAA4D;AAC1D;AACA,gBAAMM,UAAU,GAAGjB,0BAA0B,CAACC,YAAD,CAA7C;;AACA,cAAIL,2BAA2B,CAACqB,UAAD,CAA/B,EAA6C;AAC3C,mBAAO,IAAP;AACD;AACF;;AACD,YAAI,CAACN,QAAQ,CAAC,eAAD,CAAb,EAAgC;AAC9BA,UAAAA,QAAQ,CAAC,eAAD,CAAR,GAA4B,EAA5B;AACD;;AAEDA,QAAAA,QAAQ,CAAC,eAAD,CAAR,CAA0BzB,IAA1B,CAA+B;AAC7BgB,UAAAA,MAAM,EAAE,CAAC;AAAEG,YAAAA,CAAC,EAAE;AAAE,8BAAgB;AAAlB;AAAL,WAAD,CADqB;AAE7BC,UAAAA,QAAQ,EAAE,CACR;AAAED,YAAAA,CAAC,EAAE;AAAE,8BAAgB;AAAlB;AAAL,WADQ,EAER;AAAEA,YAAAA,CAAC,EAAE;AAAE,8BAAgB;AAAlB;AAAL,WAFQ;AAFmB,SAA/B;AAOA,eAAO,IAAP;AACD;AACF;AACF;;AACD,SAAO,KAAP;AACD;;AAEM,SAASe,SAAT,CAAmB1C,MAAnB,EAAmCI,eAAnC,EAA8E;AACnF,QAAMC,OAAO,GAAGO,sBAAsB,CAACR,eAAD,CAAtC;AACA,SAAOC,OAAO,CAACgB,QAAR,CAAiBrB,MAAjB,CAAP;AACD;;AAEM,SAASiB,YAAT,CAAsBjB,MAAtB,EAAsCI,eAAtC,EAAyF;AAC9F,MAAI,CAACN,KAAK,CAACC,OAAN,CAAcK,eAAe,CAAC0B,QAAhB,CAAyBC,WAAvC,CAAL,EAA0D;AACxD,WAAO3B,eAAP;AACD;;AAED,OAAK,MAAM2B,WAAX,IAA0B3B,eAAe,CAAC0B,QAAhB,CAAyBC,WAAnD,EAAgE;AAC9D,SAAK,MAAME,QAAX,IAAuBF,WAAW,CAACE,QAAZ,IAAwB,EAA/C,EAAmD;AAAA;;AACjD,UAAI,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,4BAAAA,QAAQ,CAAEN,CAAV,8DAAc,oBAAd,OAAwC,YAA5C,EAA0D;AACxD,aAAK,MAAMJ,YAAX,IAA2BU,QAAQ,CAAC,eAAD,CAAR,IAA6B,EAAxD,EAA4D;AAC1D,gBAAMM,UAAU,GAAGjB,0BAA0B,CAACC,YAAD,CAA7C;;AACA,cAAIL,2BAA2B,CAACqB,UAAD,CAA/B,EAA6C;AAC3C,gBAAI,CAAChB,YAAY,CAACG,IAAlB,EAAwBH,YAAY,CAACG,IAAb,GAAoB,EAApB;AACxBH,YAAAA,YAAY,CAACG,IAAb,CAAkBlB,IAAlB,CAAuB;AACrBmB,cAAAA,CAAC,EAAE;AAAE,kCAAkB3B;AAApB;AADkB,aAAvB;AAGD;AACF;;AACD;AACD;AACF;AACF;;AACD,SAAOI,eAAP;AACD;;AAEM,SAASuC,YAAT,CAAsB3C,MAAtB,EAAsCI,eAAtC,EAAyF;AAC9F,MAAI,CAACN,KAAK,CAACC,OAAN,CAAcK,eAAe,CAAC0B,QAAhB,CAAyBC,WAAvC,CAAL,EAA0D;AACxD,WAAO3B,eAAP;AACD;;AAED,OAAK,MAAM2B,WAAX,IAA0B3B,eAAe,CAAC0B,QAAhB,CAAyBC,WAAnD,EAAgE;AAC9D,SAAK,MAAME,QAAX,IAAuBF,WAAW,CAACE,QAAZ,IAAwB,EAA/C,EAAmD;AAAA;;AACjD,UAAI,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,4BAAAA,QAAQ,CAAEN,CAAV,8DAAc,oBAAd,OAAwC,YAA5C,EAA0D;AACxD,aAAK,MAAMJ,YAAX,IAA2BU,QAAQ,CAAC,eAAD,CAAR,IAA6B,EAAxD,EAA4D;AAC1D;AACA,gBAAMM,UAAU,GAAGjB,0BAA0B,CAACC,YAAD,CAA7C;;AACA,cAAIL,2BAA2B,CAACqB,UAAD,CAA/B,EAA6C;AAC3C,iBAAK,MAAMK,OAAX,IAAsB,CAAArB,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEG,IAAd,KAAsB,EAA5C,EAAgD;AAAA;;AAC9C,oBAAMA,IAAI,0BAAGH,YAAY,CAACG,IAAhB,wDAAG,oBAAoBkB,OAApB,CAAb;;AACA,kBAAI,CAAAlB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,wBAAAA,IAAI,CAAEC,CAAN,sDAAU,gBAAV,OAAgC3B,MAApC,EAA4C;AAAA;;AAC1C,uCAAOuB,YAAY,CAACG,IAApB,6DAAO,oBAAoBkB,OAApB,CAAP;AACD;AACF;AACF;AACF;;AACD;AACD;AACF;AACF;;AAED,SAAOxC,eAAP;AACD","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"}
|
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"}
|
package/build/ios/Maps.js
CHANGED
|
@@ -244,7 +244,7 @@ const withGoogleMapsAppDelegate = (config, {
|
|
|
244
244
|
apiKey
|
|
245
245
|
}) => {
|
|
246
246
|
return (0, _iosPlugins().withAppDelegate)(config, config => {
|
|
247
|
-
if (config.modResults.language
|
|
247
|
+
if (['objc', 'objcpp'].includes(config.modResults.language)) {
|
|
248
248
|
if (apiKey && isReactNativeMapsAutolinked(config) && isReactNativeMapsInstalled(config.modRequest.projectRoot)) {
|
|
249
249
|
try {
|
|
250
250
|
config.modResults.contents = addGoogleMapsAppDelegateImport(config.modResults.contents).contents;
|
|
@@ -261,7 +261,7 @@ const withGoogleMapsAppDelegate = (config, {
|
|
|
261
261
|
config.modResults.contents = removeGoogleMapsAppDelegateInit(config.modResults.contents).contents;
|
|
262
262
|
}
|
|
263
263
|
} else {
|
|
264
|
-
throw new Error(
|
|
264
|
+
throw new Error(`Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`);
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
return config;
|
package/build/ios/Maps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ios/Maps.ts"],"names":["debug","require","MATCH_INIT","withGoogleMapsKey","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","filePath","modRequest","platformProjectRoot","contents","fs","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","modResults","language"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\n// Match against `UMModuleRegistryAdapter` (unimodules), and React Native without unimodules (Expo Modules), and SDK +44 React AppDelegate subscriber.\nexport const MATCH_INIT = /(?:(self\\.|_)(\\w+)\\s?=\\s?\\[\\[UMModuleRegistryAdapter alloc\\])|(?:RCTBridge\\s?\\*\\s?(\\w+)\\s?=\\s?\\[\\[RCTBridge alloc\\])|(\\[self\\.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions\\])/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = config => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 0,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async config => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, config => {\n if (config.modResults.language === 'objc') {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error('Cannot setup Google Maps because the AppDelegate is not Objective C');\n }\n return config;\n });\n};\n"],"file":"Maps.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/ios/Maps.ts"],"names":["debug","require","MATCH_INIT","withGoogleMapsKey","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","filePath","modRequest","platformProjectRoot","contents","fs","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","includes","modResults","language"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\n// Match against `UMModuleRegistryAdapter` (unimodules), and React Native without unimodules (Expo Modules), and SDK +44 React AppDelegate subscriber.\nexport const MATCH_INIT = /(?:(self\\.|_)(\\w+)\\s?=\\s?\\[\\[UMModuleRegistryAdapter alloc\\])|(?:RCTBridge\\s?\\*\\s?(\\w+)\\s?=\\s?\\[\\[RCTBridge alloc\\])|(\\[self\\.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions\\])/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = config => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 0,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async config => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, config => {\n if (['objc', 'objcpp'].includes(config.modResults.language)) {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error(\n `Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`\n );\n }\n return config;\n });\n};\n"],"file":"Maps.js"}
|
package/build/ios/Paths.d.ts
CHANGED
|
@@ -3,14 +3,15 @@ interface ProjectFile<L extends string = string> {
|
|
|
3
3
|
language: L;
|
|
4
4
|
contents: string;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
declare type AppleLanguage = 'objc' | 'objcpp' | 'swift';
|
|
7
|
+
export declare type AppDelegateProjectFile = ProjectFile<AppleLanguage>;
|
|
7
8
|
export declare function getAppDelegateHeaderFilePath(projectRoot: string): string;
|
|
8
9
|
export declare function getAppDelegateFilePath(projectRoot: string): string;
|
|
9
10
|
export declare function getAppDelegateObjcHeaderFilePath(projectRoot: string): string;
|
|
10
11
|
export declare function getFileInfo(filePath: string): {
|
|
11
12
|
path: string;
|
|
12
13
|
contents: string;
|
|
13
|
-
language:
|
|
14
|
+
language: AppleLanguage;
|
|
14
15
|
};
|
|
15
16
|
export declare function getAppDelegate(projectRoot: string): AppDelegateProjectFile;
|
|
16
17
|
export declare function getSourceRoot(projectRoot: string): string;
|
package/build/ios/Paths.js
CHANGED
|
@@ -103,7 +103,7 @@ function getAppDelegateHeaderFilePath(projectRoot) {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
function getAppDelegateFilePath(projectRoot) {
|
|
106
|
-
const [using, ...extra] = (0, _glob().sync)('ios/*/AppDelegate.@(m|swift)', {
|
|
106
|
+
const [using, ...extra] = (0, _glob().sync)('ios/*/AppDelegate.@(m|mm|swift)', {
|
|
107
107
|
absolute: true,
|
|
108
108
|
cwd: projectRoot,
|
|
109
109
|
ignore: ignoredPaths
|
|
@@ -154,6 +154,9 @@ function getLanguage(filePath) {
|
|
|
154
154
|
const extension = path().extname(filePath);
|
|
155
155
|
|
|
156
156
|
switch (extension) {
|
|
157
|
+
case '.mm':
|
|
158
|
+
return 'objcpp';
|
|
159
|
+
|
|
157
160
|
case '.m':
|
|
158
161
|
case '.h':
|
|
159
162
|
return 'objc';
|
package/build/ios/Paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ios/Paths.ts"],"names":["ignoredPaths","getAppDelegateHeaderFilePath","projectRoot","using","extra","absolute","cwd","ignore","UnexpectedError","length","warnMultipleFiles","tag","fileName","getAppDelegateFilePath","getAppDelegateObjcHeaderFilePath","getLanguage","filePath","extension","path","extname","getFileInfo","normalize","contents","language","getAppDelegate","getSourceRoot","appDelegate","dirname","findSchemePaths","findSchemeNames","schemePaths","map","schemePath","parse","name","getAllXcodeProjectPaths","iosFolder","pbxprojPaths","filter","project","test","sort","value","join","getXcodeProjectPath","getAllPBXProjectPaths","projectPaths","paths","getPBXProjectPath","getAllInfoPlistPaths","a","b","getInfoPlistPath","getAllEntitlementsPaths","getEntitlementsPath","getSupportingPath","resolve","basename","getExpoPlistPath","supportingPath","usingPath","relative","extraPaths","v","JSON","stringify"],"mappings":"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","sourcesContent":["import { pathExistsSync, readFileSync } from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst ignoredPaths = ['**/@(Carthage|Pods|vendor|node_modules)/**'];\n\ninterface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type AppDelegateProjectFile = ProjectFile<'objc' | 'swift'>;\n\nexport function getAppDelegateHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(\n `Could not locate a valid AppDelegate header at root: \"${projectRoot}\"`\n );\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-header',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.@(m|swift)', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateObjcHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate.h at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-objc-header',\n fileName: 'AppDelegate.h',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nfunction getLanguage(filePath: string): 'objc' | 'swift' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.m':\n case '.h':\n return 'objc';\n case '.swift':\n return 'swift';\n default:\n throw new UnexpectedError(`Unexpected iOS file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath),\n };\n}\n\nexport function getAppDelegate(projectRoot: string): AppDelegateProjectFile {\n const filePath = getAppDelegateFilePath(projectRoot);\n return getFileInfo(filePath);\n}\n\nexport function getSourceRoot(projectRoot: string): string {\n const appDelegate = getAppDelegate(projectRoot);\n return path.dirname(appDelegate.path);\n}\n\nexport function findSchemePaths(projectRoot: string): string[] {\n return globSync('ios/*.xcodeproj/xcshareddata/xcschemes/*.xcscheme', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n}\n\nexport function findSchemeNames(projectRoot: string): string[] {\n const schemePaths = findSchemePaths(projectRoot);\n return schemePaths.map(schemePath => path.parse(schemePath).name);\n}\n\nexport function getAllXcodeProjectPaths(projectRoot: string): string[] {\n const iosFolder = 'ios';\n const pbxprojPaths = globSync('**/*.xcodeproj', { cwd: projectRoot, ignore: ignoredPaths })\n .filter(project => !/test|example|sample/i.test(project) || path.dirname(project) === iosFolder)\n .sort(project => (path.dirname(project) === iosFolder ? -1 : 1))\n // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)\n .sort();\n\n if (!pbxprojPaths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj files relative to path \"${projectRoot}\".`\n );\n }\n return pbxprojPaths.map(value => path.join(projectRoot, value));\n}\n\n/**\n * Get the pbxproj for the given path\n */\nexport function getXcodeProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllXcodeProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'xcodeproj',\n fileName: '*.xcodeproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllPBXProjectPaths(projectRoot: string): string[] {\n const projectPaths = getAllXcodeProjectPaths(projectRoot);\n const paths = projectPaths\n .map(value => path.join(value, 'project.pbxproj'))\n .filter(value => pathExistsSync(value));\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj/project.pbxproj files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getPBXProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllPBXProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'project-pbxproj',\n fileName: 'project.pbxproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllInfoPlistPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/Info.plist', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n }).sort(\n // longer name means more suffixes, we want the shortest possible one to be first.\n (a, b) => a.length - b.length\n );\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate Info.plist files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getInfoPlistPath(projectRoot: string): string {\n const [using, ...extra] = getAllInfoPlistPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'info-plist',\n fileName: 'Info.plist',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllEntitlementsPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/*.entitlements', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n return paths;\n}\n\n/**\n * Get the entitlements file path if it exists.\n *\n * @param projectRoot\n */\nexport function getEntitlementsPath(projectRoot: string): string | null {\n const [using, ...extra] = getAllEntitlementsPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'entitlements',\n fileName: '*.entitlements',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using ?? null;\n}\n\nexport function getSupportingPath(projectRoot: string): string {\n return path.resolve(projectRoot, 'ios', path.basename(getSourceRoot(projectRoot)), 'Supporting');\n}\n\nexport function getExpoPlistPath(projectRoot: string): string {\n const supportingPath = getSupportingPath(projectRoot);\n return path.join(supportingPath, 'Expo.plist');\n}\n\nfunction warnMultipleFiles({\n tag,\n fileName,\n projectRoot,\n using,\n extra,\n}: {\n tag: string;\n fileName: string;\n projectRoot?: string;\n using: string;\n extra: string[];\n}) {\n const usingPath = projectRoot ? path.relative(projectRoot, using) : using;\n const extraPaths = projectRoot ? extra.map(v => path.relative(projectRoot, v)) : extra;\n addWarningIOS(\n `paths-${tag}`,\n `Found multiple ${fileName} file paths, using \"${usingPath}\". Ignored paths: ${JSON.stringify(\n extraPaths\n )}`\n );\n}\n"],"file":"Paths.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/ios/Paths.ts"],"names":["ignoredPaths","getAppDelegateHeaderFilePath","projectRoot","using","extra","absolute","cwd","ignore","UnexpectedError","length","warnMultipleFiles","tag","fileName","getAppDelegateFilePath","getAppDelegateObjcHeaderFilePath","getLanguage","filePath","extension","path","extname","getFileInfo","normalize","contents","language","getAppDelegate","getSourceRoot","appDelegate","dirname","findSchemePaths","findSchemeNames","schemePaths","map","schemePath","parse","name","getAllXcodeProjectPaths","iosFolder","pbxprojPaths","filter","project","test","sort","value","join","getXcodeProjectPath","getAllPBXProjectPaths","projectPaths","paths","getPBXProjectPath","getAllInfoPlistPaths","a","b","getInfoPlistPath","getAllEntitlementsPaths","getEntitlementsPath","getSupportingPath","resolve","basename","getExpoPlistPath","supportingPath","usingPath","relative","extraPaths","v","JSON","stringify"],"mappings":"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","sourcesContent":["import { pathExistsSync, readFileSync } from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst ignoredPaths = ['**/@(Carthage|Pods|vendor|node_modules)/**'];\n\ninterface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\ntype AppleLanguage = 'objc' | 'objcpp' | 'swift';\n\nexport type AppDelegateProjectFile = ProjectFile<AppleLanguage>;\n\nexport function getAppDelegateHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(\n `Could not locate a valid AppDelegate header at root: \"${projectRoot}\"`\n );\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-header',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.@(m|mm|swift)', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateObjcHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate.h at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-objc-header',\n fileName: 'AppDelegate.h',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nfunction getLanguage(filePath: string): AppleLanguage {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.mm':\n return 'objcpp';\n case '.m':\n case '.h':\n return 'objc';\n case '.swift':\n return 'swift';\n default:\n throw new UnexpectedError(`Unexpected iOS file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath),\n };\n}\n\nexport function getAppDelegate(projectRoot: string): AppDelegateProjectFile {\n const filePath = getAppDelegateFilePath(projectRoot);\n return getFileInfo(filePath);\n}\n\nexport function getSourceRoot(projectRoot: string): string {\n const appDelegate = getAppDelegate(projectRoot);\n return path.dirname(appDelegate.path);\n}\n\nexport function findSchemePaths(projectRoot: string): string[] {\n return globSync('ios/*.xcodeproj/xcshareddata/xcschemes/*.xcscheme', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n}\n\nexport function findSchemeNames(projectRoot: string): string[] {\n const schemePaths = findSchemePaths(projectRoot);\n return schemePaths.map(schemePath => path.parse(schemePath).name);\n}\n\nexport function getAllXcodeProjectPaths(projectRoot: string): string[] {\n const iosFolder = 'ios';\n const pbxprojPaths = globSync('**/*.xcodeproj', { cwd: projectRoot, ignore: ignoredPaths })\n .filter(project => !/test|example|sample/i.test(project) || path.dirname(project) === iosFolder)\n .sort(project => (path.dirname(project) === iosFolder ? -1 : 1))\n // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)\n .sort();\n\n if (!pbxprojPaths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj files relative to path \"${projectRoot}\".`\n );\n }\n return pbxprojPaths.map(value => path.join(projectRoot, value));\n}\n\n/**\n * Get the pbxproj for the given path\n */\nexport function getXcodeProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllXcodeProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'xcodeproj',\n fileName: '*.xcodeproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllPBXProjectPaths(projectRoot: string): string[] {\n const projectPaths = getAllXcodeProjectPaths(projectRoot);\n const paths = projectPaths\n .map(value => path.join(value, 'project.pbxproj'))\n .filter(value => pathExistsSync(value));\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj/project.pbxproj files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getPBXProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllPBXProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'project-pbxproj',\n fileName: 'project.pbxproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllInfoPlistPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/Info.plist', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n }).sort(\n // longer name means more suffixes, we want the shortest possible one to be first.\n (a, b) => a.length - b.length\n );\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate Info.plist files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getInfoPlistPath(projectRoot: string): string {\n const [using, ...extra] = getAllInfoPlistPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'info-plist',\n fileName: 'Info.plist',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllEntitlementsPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/*.entitlements', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n return paths;\n}\n\n/**\n * Get the entitlements file path if it exists.\n *\n * @param projectRoot\n */\nexport function getEntitlementsPath(projectRoot: string): string | null {\n const [using, ...extra] = getAllEntitlementsPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'entitlements',\n fileName: '*.entitlements',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using ?? null;\n}\n\nexport function getSupportingPath(projectRoot: string): string {\n return path.resolve(projectRoot, 'ios', path.basename(getSourceRoot(projectRoot)), 'Supporting');\n}\n\nexport function getExpoPlistPath(projectRoot: string): string {\n const supportingPath = getSupportingPath(projectRoot);\n return path.join(supportingPath, 'Expo.plist');\n}\n\nfunction warnMultipleFiles({\n tag,\n fileName,\n projectRoot,\n using,\n extra,\n}: {\n tag: string;\n fileName: string;\n projectRoot?: string;\n using: string;\n extra: string[];\n}) {\n const usingPath = projectRoot ? path.relative(projectRoot, using) : using;\n const extraPaths = projectRoot ? extra.map(v => path.relative(projectRoot, v)) : extra;\n addWarningIOS(\n `paths-${tag}`,\n `Found multiple ${fileName} file paths, using \"${usingPath}\". Ignored paths: ${JSON.stringify(\n extraPaths\n )}`\n );\n}\n"],"file":"Paths.js"}
|
|
@@ -4,7 +4,7 @@ import type { XcodeProject } from 'xcode';
|
|
|
4
4
|
import type { ConfigPlugin, Mod } from '../Plugin.types';
|
|
5
5
|
import type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';
|
|
6
6
|
import type { AppDelegateProjectFile } from '../ios/Paths';
|
|
7
|
-
declare type MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => InfoPlist;
|
|
7
|
+
declare type MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => Promise<InfoPlist> | InfoPlist;
|
|
8
8
|
/**
|
|
9
9
|
* Helper method for creating mods from existing config functions.
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":";;;;;;;;;AAOA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":"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","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject, JSONValue } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (\n expo: ExpoConfig,\n infoPlist: InfoPlist\n) => Promise<InfoPlist> | InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withInfoPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n action: MutateEntitlementsPlistAction,\n name: string\n): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withEntitlementsPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'appDelegate',\n action,\n });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n return withMod<InfoPlist>(config, {\n platform: 'ios',\n mod: 'infoPlist',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n return withMod<JSONObject>(config, {\n platform: 'ios',\n mod: 'entitlements',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'expoPlist',\n action,\n });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n action,\n });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>> = (\n config,\n action\n) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'podfileProperties',\n action,\n });\n};\n"],"file":"ios-plugins.js"}
|
|
@@ -85,9 +85,6 @@ function getAndroidManifestTemplate(config) {
|
|
|
85
85
|
<uses-permission android:name="android.permission.INTERNET"/>
|
|
86
86
|
<!-- OPTIONAL PERMISSIONS, REMOVE WHATEVER YOU DO NOT NEED -->
|
|
87
87
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
|
88
|
-
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
|
89
|
-
<uses-permission android:name="android.permission.VIBRATE"/>
|
|
90
|
-
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
|
91
88
|
<!-- These require runtime permissions on M -->
|
|
92
89
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
|
93
90
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/withAndroidBaseMods.ts"],"names":["readFile","writeFile","promises","getAndroidManifestTemplate","config","android","package","sortAndroidManifest","obj","manifest","reverseSortString","Array","isArray","sort","a","b","$","application","map","defaultProviders","dangerous","getFilePath","read","filePath","modResults","write","isIntrospective","modRequest","platformProjectRoot","path","join","Manifest","readAndroidManifestAsync","error","introspect","writeAndroidManifestAsync","gradleProperties","Properties","parsePropertiesFile","propertiesListToString","strings","projectRoot","Strings","getProjectStringsXMLPathAsync","Resources","readResourcesXMLAsync","resources","xml","colors","Colors","getProjectColorsXMLPathAsync","colorsNight","kind","styles","Styles","getProjectStylesXMLPathAsync","fallback","projectBuildGradle","Paths","getProjectBuildGradleFilePath","getFileInfo","contents","settingsGradle","getSettingsGradleFilePath","appBuildGradle","getAppBuildGradleFilePath","mainActivity","getProjectFilePath","mainApplication","withAndroidBaseMods","providers","props","platform","getAndroidModFileProviders"],"mappings":"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","sourcesContent":["import { promises } from 'fs';\nimport path from 'path';\n\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Colors, Manifest, Paths, Properties, Resources, Strings, Styles } from '../android';\nimport { AndroidManifest } from '../android/Manifest';\nimport { parseXMLAsync, writeXMLAsync } from '../utils/XML';\nimport { reverseSortString, sortObject, sortObjWithOrder } from '../utils/sortObject';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype AndroidModName = keyof Required<ModConfig>['android'];\n\nfunction getAndroidManifestTemplate(config: ExportedConfig) {\n // Keep in sync with https://github.com/expo/expo/blob/master/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n // TODO: Read from remote template when possible\n return parseXMLAsync(`\n <manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"${\n config.android?.package ?? 'com.placeholder.appid'\n }\">\n\n <uses-permission android:name=\"android.permission.INTERNET\"/>\n <!-- OPTIONAL PERMISSIONS, REMOVE WHATEVER YOU DO NOT NEED -->\n <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n <uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>\n <uses-permission android:name=\"android.permission.VIBRATE\"/>\n <uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>\n <!-- These require runtime permissions on M -->\n <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>\n <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>\n <!-- END OPTIONAL PERMISSIONS -->\n\n <queries>\n <!-- Support checking for http(s) links via the Linking API -->\n <intent>\n <action android:name=\"android.intent.action.VIEW\" />\n <category android:name=\"android.intent.category.BROWSABLE\" />\n <data android:scheme=\"https\" />\n </intent>\n </queries>\n\n <application\n android:name=\".MainApplication\"\n android:label=\"@string/app_name\"\n android:icon=\"@mipmap/ic_launcher\"\n android:roundIcon=\"@mipmap/ic_launcher_round\"\n android:allowBackup=\"false\"\n android:theme=\"@style/AppTheme\"\n android:usesCleartextTraffic=\"true\"\n >\n <meta-data android:name=\"expo.modules.updates.EXPO_UPDATE_URL\" android:value=\"YOUR-APP-URL-HERE\"/>\n <meta-data android:name=\"expo.modules.updates.EXPO_SDK_VERSION\" android:value=\"YOUR-APP-SDK-VERSION-HERE\"/>\n <activity\n android:name=\".MainActivity\"\n android:label=\"@string/app_name\"\n android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n android:launchMode=\"singleTask\"\n android:windowSoftInputMode=\"adjustResize\"\n android:theme=\"@style/Theme.App.SplashScreen\"\n >\n <intent-filter>\n <action android:name=\"android.intent.action.MAIN\"/>\n <category android:name=\"android.intent.category.LAUNCHER\"/>\n </intent-filter>\n </activity>\n <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\"/>\n </application>\n </manifest>\n `) as Promise<AndroidManifest>;\n}\n\nexport function sortAndroidManifest(obj: AndroidManifest) {\n if (obj.manifest) {\n // Reverse sort so application is last and permissions are first\n obj.manifest = sortObject(obj.manifest, reverseSortString);\n\n if (Array.isArray(obj.manifest['uses-permission'])) {\n // Sort permissions alphabetically\n obj.manifest['uses-permission'].sort((a, b) => {\n if (a.$['android:name'] < b.$['android:name']) return -1;\n if (a.$['android:name'] > b.$['android:name']) return 1;\n return 0;\n });\n }\n\n if (Array.isArray(obj.manifest.application)) {\n // reverse sort applications so activity is towards the end and meta-data is towards the front.\n obj.manifest.application = obj.manifest.application.map(application => {\n application = sortObjWithOrder(application, ['meta-data', 'service', 'activity']);\n\n if (Array.isArray(application['meta-data'])) {\n // Sort metadata alphabetically\n application['meta-data'].sort((a, b) => {\n if (a.$['android:name'] < b.$['android:name']) return -1;\n if (a.$['android:name'] > b.$['android:name']) return 1;\n return 0;\n });\n }\n return application;\n });\n }\n }\n return obj;\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return { filePath: '', modResults: {} };\n },\n async write() {},\n }),\n\n // Append a rule to supply gradle.properties data to mods on `mods.android.gradleProperties`\n manifest: provider<Manifest.AndroidManifest>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.join(platformProjectRoot, 'app/src/main/AndroidManifest.xml');\n },\n async read(filePath, config) {\n try {\n return await Manifest.readAndroidManifestAsync(filePath);\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return await getAndroidManifestTemplate(config);\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await Manifest.writeAndroidManifestAsync(filePath, sortAndroidManifest(modResults));\n },\n }),\n\n // Append a rule to supply gradle.properties data to mods on `mods.android.gradleProperties`\n gradleProperties: provider<Properties.PropertiesItem[]>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.join(platformProjectRoot, 'gradle.properties');\n },\n async read(filePath, config) {\n try {\n return await Properties.parsePropertiesFile(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return [];\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeFile(filePath, Properties.propertiesListToString(modResults));\n },\n }),\n\n // Append a rule to supply strings.xml data to mods on `mods.android.strings`\n strings: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Strings.getProjectStringsXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n\n async read(filePath, config) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n colors: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Colors.getProjectColorsXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n colorsNight: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Colors.getProjectColorsXMLPathAsync(projectRoot, { kind: 'values-night' });\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n async read(filePath, config) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n styles: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Styles.getProjectStylesXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n async read(filePath, config) {\n let styles: Resources.ResourceXML = { resources: {} };\n\n try {\n // Adds support for `tools:x`\n styles = await Resources.readResourcesXMLAsync({\n path: filePath,\n fallback: `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources xmlns:tools=\"http://schemas.android.com/tools\"></resources>`,\n });\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n\n // Ensure support for tools is added...\n if (!styles.resources.$) {\n styles.resources.$ = {};\n }\n if (!styles.resources.$?.['xmlns:tools']) {\n styles.resources.$['xmlns:tools'] = 'http://schemas.android.com/tools';\n }\n return styles;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n projectBuildGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectBuildGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n settingsGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getSettingsGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n appBuildGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getAppBuildGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n mainActivity: provider<Paths.ApplicationProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectFilePath(projectRoot, 'MainActivity');\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n mainApplication: provider<Paths.ApplicationProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectFilePath(projectRoot, 'MainApplication');\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n};\n\ntype AndroidDefaultProviders = typeof defaultProviders;\n\nexport function withAndroidBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<AndroidDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<AndroidModName>(config, {\n ...props,\n platform: 'android',\n providers: providers ?? getAndroidModFileProviders(),\n });\n}\n\nexport function getAndroidModFileProviders() {\n return defaultProviders;\n}\n"],"file":"withAndroidBaseMods.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/withAndroidBaseMods.ts"],"names":["readFile","writeFile","promises","getAndroidManifestTemplate","config","android","package","sortAndroidManifest","obj","manifest","reverseSortString","Array","isArray","sort","a","b","$","application","map","defaultProviders","dangerous","getFilePath","read","filePath","modResults","write","isIntrospective","modRequest","platformProjectRoot","path","join","Manifest","readAndroidManifestAsync","error","introspect","writeAndroidManifestAsync","gradleProperties","Properties","parsePropertiesFile","propertiesListToString","strings","projectRoot","Strings","getProjectStringsXMLPathAsync","Resources","readResourcesXMLAsync","resources","xml","colors","Colors","getProjectColorsXMLPathAsync","colorsNight","kind","styles","Styles","getProjectStylesXMLPathAsync","fallback","projectBuildGradle","Paths","getProjectBuildGradleFilePath","getFileInfo","contents","settingsGradle","getSettingsGradleFilePath","appBuildGradle","getAppBuildGradleFilePath","mainActivity","getProjectFilePath","mainApplication","withAndroidBaseMods","providers","props","platform","getAndroidModFileProviders"],"mappings":"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","sourcesContent":["import { promises } from 'fs';\nimport path from 'path';\n\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Colors, Manifest, Paths, Properties, Resources, Strings, Styles } from '../android';\nimport { AndroidManifest } from '../android/Manifest';\nimport { parseXMLAsync, writeXMLAsync } from '../utils/XML';\nimport { reverseSortString, sortObject, sortObjWithOrder } from '../utils/sortObject';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype AndroidModName = keyof Required<ModConfig>['android'];\n\nfunction getAndroidManifestTemplate(config: ExportedConfig) {\n // Keep in sync with https://github.com/expo/expo/blob/master/templates/expo-template-bare-minimum/android/app/src/main/AndroidManifest.xml\n // TODO: Read from remote template when possible\n return parseXMLAsync(`\n <manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"${\n config.android?.package ?? 'com.placeholder.appid'\n }\">\n\n <uses-permission android:name=\"android.permission.INTERNET\"/>\n <!-- OPTIONAL PERMISSIONS, REMOVE WHATEVER YOU DO NOT NEED -->\n <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n <!-- These require runtime permissions on M -->\n <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>\n <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>\n <!-- END OPTIONAL PERMISSIONS -->\n\n <queries>\n <!-- Support checking for http(s) links via the Linking API -->\n <intent>\n <action android:name=\"android.intent.action.VIEW\" />\n <category android:name=\"android.intent.category.BROWSABLE\" />\n <data android:scheme=\"https\" />\n </intent>\n </queries>\n\n <application\n android:name=\".MainApplication\"\n android:label=\"@string/app_name\"\n android:icon=\"@mipmap/ic_launcher\"\n android:roundIcon=\"@mipmap/ic_launcher_round\"\n android:allowBackup=\"false\"\n android:theme=\"@style/AppTheme\"\n android:usesCleartextTraffic=\"true\"\n >\n <meta-data android:name=\"expo.modules.updates.EXPO_UPDATE_URL\" android:value=\"YOUR-APP-URL-HERE\"/>\n <meta-data android:name=\"expo.modules.updates.EXPO_SDK_VERSION\" android:value=\"YOUR-APP-SDK-VERSION-HERE\"/>\n <activity\n android:name=\".MainActivity\"\n android:label=\"@string/app_name\"\n android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n android:launchMode=\"singleTask\"\n android:windowSoftInputMode=\"adjustResize\"\n android:theme=\"@style/Theme.App.SplashScreen\"\n >\n <intent-filter>\n <action android:name=\"android.intent.action.MAIN\"/>\n <category android:name=\"android.intent.category.LAUNCHER\"/>\n </intent-filter>\n </activity>\n <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\"/>\n </application>\n </manifest>\n `) as Promise<AndroidManifest>;\n}\n\nexport function sortAndroidManifest(obj: AndroidManifest) {\n if (obj.manifest) {\n // Reverse sort so application is last and permissions are first\n obj.manifest = sortObject(obj.manifest, reverseSortString);\n\n if (Array.isArray(obj.manifest['uses-permission'])) {\n // Sort permissions alphabetically\n obj.manifest['uses-permission'].sort((a, b) => {\n if (a.$['android:name'] < b.$['android:name']) return -1;\n if (a.$['android:name'] > b.$['android:name']) return 1;\n return 0;\n });\n }\n\n if (Array.isArray(obj.manifest.application)) {\n // reverse sort applications so activity is towards the end and meta-data is towards the front.\n obj.manifest.application = obj.manifest.application.map(application => {\n application = sortObjWithOrder(application, ['meta-data', 'service', 'activity']);\n\n if (Array.isArray(application['meta-data'])) {\n // Sort metadata alphabetically\n application['meta-data'].sort((a, b) => {\n if (a.$['android:name'] < b.$['android:name']) return -1;\n if (a.$['android:name'] > b.$['android:name']) return 1;\n return 0;\n });\n }\n return application;\n });\n }\n }\n return obj;\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return { filePath: '', modResults: {} };\n },\n async write() {},\n }),\n\n // Append a rule to supply gradle.properties data to mods on `mods.android.gradleProperties`\n manifest: provider<Manifest.AndroidManifest>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.join(platformProjectRoot, 'app/src/main/AndroidManifest.xml');\n },\n async read(filePath, config) {\n try {\n return await Manifest.readAndroidManifestAsync(filePath);\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return await getAndroidManifestTemplate(config);\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await Manifest.writeAndroidManifestAsync(filePath, sortAndroidManifest(modResults));\n },\n }),\n\n // Append a rule to supply gradle.properties data to mods on `mods.android.gradleProperties`\n gradleProperties: provider<Properties.PropertiesItem[]>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.join(platformProjectRoot, 'gradle.properties');\n },\n async read(filePath, config) {\n try {\n return await Properties.parsePropertiesFile(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return [];\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeFile(filePath, Properties.propertiesListToString(modResults));\n },\n }),\n\n // Append a rule to supply strings.xml data to mods on `mods.android.strings`\n strings: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Strings.getProjectStringsXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n\n async read(filePath, config) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n colors: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Colors.getProjectColorsXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n colorsNight: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Colors.getProjectColorsXMLPathAsync(projectRoot, { kind: 'values-night' });\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n async read(filePath, config) {\n try {\n return await Resources.readResourcesXMLAsync({ path: filePath });\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n return { resources: {} };\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n styles: provider<Resources.ResourceXML>({\n isIntrospective: true,\n\n async getFilePath({ modRequest: { projectRoot, introspect } }) {\n try {\n return await Styles.getProjectStylesXMLPathAsync(projectRoot);\n } catch (error: any) {\n if (!introspect) {\n throw error;\n }\n }\n return '';\n },\n async read(filePath, config) {\n let styles: Resources.ResourceXML = { resources: {} };\n\n try {\n // Adds support for `tools:x`\n styles = await Resources.readResourcesXMLAsync({\n path: filePath,\n fallback: `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources xmlns:tools=\"http://schemas.android.com/tools\"></resources>`,\n });\n } catch (error: any) {\n if (!config.modRequest.introspect) {\n throw error;\n }\n }\n\n // Ensure support for tools is added...\n if (!styles.resources.$) {\n styles.resources.$ = {};\n }\n if (!styles.resources.$?.['xmlns:tools']) {\n styles.resources.$['xmlns:tools'] = 'http://schemas.android.com/tools';\n }\n return styles;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) return;\n await writeXMLAsync({ path: filePath, xml: modResults });\n },\n }),\n\n projectBuildGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectBuildGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n settingsGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getSettingsGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n appBuildGradle: provider<Paths.GradleProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getAppBuildGradleFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n mainActivity: provider<Paths.ApplicationProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectFilePath(projectRoot, 'MainActivity');\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n mainApplication: provider<Paths.ApplicationProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getProjectFilePath(projectRoot, 'MainApplication');\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n};\n\ntype AndroidDefaultProviders = typeof defaultProviders;\n\nexport function withAndroidBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<AndroidDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<AndroidModName>(config, {\n ...props,\n platform: 'android',\n providers: providers ?? getAndroidModFileProviders(),\n });\n}\n\nexport function getAndroidModFileProviders() {\n return defaultProviders;\n}\n"],"file":"withAndroidBaseMods.js"}
|
package/build/utils/Updates.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare function getRuntimeVersionNullable(...[config, platform]: Paramet
|
|
|
15
15
|
export declare function getRuntimeVersion(config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {
|
|
16
16
|
android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;
|
|
17
17
|
ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;
|
|
18
|
-
}, platform: 'android' | 'ios'): string;
|
|
18
|
+
}, platform: 'android' | 'ios'): string | null;
|
|
19
19
|
export declare function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null;
|
|
20
20
|
export declare function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean;
|
|
21
21
|
export declare function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number;
|
package/build/utils/Updates.js
CHANGED
|
@@ -152,15 +152,23 @@ const withRuntimeVersion = config => {
|
|
|
152
152
|
var _config$ios, _config$android;
|
|
153
153
|
|
|
154
154
|
if ((_config$ios = config.ios) !== null && _config$ios !== void 0 && _config$ios.runtimeVersion || config.runtimeVersion) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
const runtimeVersion = getRuntimeVersion(config, 'ios');
|
|
156
|
+
|
|
157
|
+
if (runtimeVersion) {
|
|
158
|
+
config.ios = { ...config.ios,
|
|
159
|
+
runtimeVersion
|
|
160
|
+
};
|
|
161
|
+
}
|
|
158
162
|
}
|
|
159
163
|
|
|
160
164
|
if ((_config$android = config.android) !== null && _config$android !== void 0 && _config$android.runtimeVersion || config.runtimeVersion) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
const runtimeVersion = getRuntimeVersion(config, 'android');
|
|
166
|
+
|
|
167
|
+
if (runtimeVersion) {
|
|
168
|
+
config.android = { ...config.android,
|
|
169
|
+
runtimeVersion
|
|
170
|
+
};
|
|
171
|
+
}
|
|
164
172
|
}
|
|
165
173
|
|
|
166
174
|
delete config.runtimeVersion;
|
|
@@ -187,7 +195,7 @@ function getRuntimeVersion(config, platform) {
|
|
|
187
195
|
const runtimeVersion = (_config$platform$runt = (_config$platform = config[platform]) === null || _config$platform === void 0 ? void 0 : _config$platform.runtimeVersion) !== null && _config$platform$runt !== void 0 ? _config$platform$runt : config.runtimeVersion;
|
|
188
196
|
|
|
189
197
|
if (!runtimeVersion) {
|
|
190
|
-
|
|
198
|
+
return null;
|
|
191
199
|
}
|
|
192
200
|
|
|
193
201
|
if (typeof runtimeVersion === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/Updates.ts"],"names":["getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","username","updates","url","user","owner","slug","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","ios","runtimeVersion","getRuntimeVersion","android","getRuntimeVersionNullable","e","console","log","policy","sdkVersion","stringify","getSDKVersion","getUpdatesEnabled","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","undefined","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata"],"mappings":"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","sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport { getRuntimeVersionForSDKVersion } from '@expo/sdk-runtime-versions';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { AndroidConfig, IOSConfig } from '..';\n\nexport type ExpoConfigUpdates = Pick<\n ExpoConfig,\n 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'\n>;\n\nexport function getExpoUpdatesPackageVersion(projectRoot: string): string | null {\n const expoUpdatesPackageJsonPath = resolveFrom.silent(projectRoot, 'expo-updates/package.json');\n if (!expoUpdatesPackageJsonPath || !fs.existsSync(expoUpdatesPackageJsonPath)) {\n return null;\n }\n const packageJson = JSON.parse(fs.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));\n return packageJson.version;\n}\n\nexport function getUpdateUrl(\n config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n username: string | null\n): string | null {\n if (config.updates?.url) {\n return config.updates?.url;\n }\n\n const user = typeof config.owner === 'string' ? config.owner : username;\n if (!user) {\n return null;\n }\n return `https://exp.host/@${user}/${config.slug}`;\n}\n\nexport function getNativeVersion(\n config: Pick<ExpoConfig, 'version'> & {\n android?: Pick<Android, 'versionCode'>;\n ios?: Pick<IOS, 'buildNumber'>;\n },\n platform: 'android' | 'ios'\n): string {\n const version = IOSConfig.Version.getVersion(config);\n switch (platform) {\n case 'ios': {\n const buildNumber = IOSConfig.Version.getBuildNumber(config);\n return `${version}(${buildNumber})`;\n }\n case 'android': {\n const versionCode = AndroidConfig.Version.getVersionCode(config);\n return `${version}(${versionCode})`;\n }\n default: {\n throw new Error(\n `\"${platform}\" is not a supported platform. Choose either \"ios\" or \"android\".`\n );\n }\n }\n}\n\n/**\n * Compute runtime version policies.\n * @return an expoConfig with only string valued platform specific runtime versions.\n */\nexport const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig = config => {\n if (config.ios?.runtimeVersion || config.runtimeVersion) {\n config.ios = {\n ...config.ios,\n runtimeVersion: getRuntimeVersion(config, 'ios'),\n };\n }\n if (config.android?.runtimeVersion || config.runtimeVersion) {\n config.android = {\n ...config.android,\n runtimeVersion: getRuntimeVersion(config, 'android'),\n };\n }\n delete config.runtimeVersion;\n return config;\n};\n\nexport function getRuntimeVersionNullable(\n ...[config, platform]: Parameters<typeof getRuntimeVersion>\n): string | null {\n try {\n return getRuntimeVersion(config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport function getRuntimeVersion(\n config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {\n android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;\n ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;\n },\n platform: 'android' | 'ios'\n): string {\n const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n if (!runtimeVersion) {\n throw new Error(\n `There is neither a value or a policy set for the runtime version on \"${platform}\"`\n );\n }\n\n if (typeof runtimeVersion === 'string') {\n return runtimeVersion;\n } else if (runtimeVersion.policy === 'nativeVersion') {\n return getNativeVersion(config, platform);\n } else if (runtimeVersion.policy === 'sdkVersion') {\n if (!config.sdkVersion) {\n throw new Error(\"An SDK version must be defined when using the 'sdkVersion' runtime policy.\");\n }\n return getRuntimeVersionForSDKVersion(config.sdkVersion);\n }\n\n throw new Error(\n `\"${\n typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n }\" is not a valid runtime version. getRuntimeVersion only supports a string, \"sdkVersion\", or \"nativeVersion\" policy.`\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 getUpdatesCodeSigningCertificate(\n projectRoot: string,\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const codeSigningCertificatePath = config.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return undefined;\n }\n\n const finalPath = path.join(projectRoot, codeSigningCertificatePath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`File not found at \\`updates.codeSigningCertificate\\` path: ${finalPath}`);\n }\n\n return fs.readFileSync(finalPath, 'utf8');\n}\n\nexport function getUpdatesCodeSigningMetadata(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'] {\n return config.updates?.codeSigningMetadata;\n}\n\nexport function getUpdatesCodeSigningMetadataStringified(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const metadata = getUpdatesCodeSigningMetadata(config);\n if (!metadata) {\n return undefined;\n }\n\n return JSON.stringify(metadata);\n}\n"],"file":"Updates.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/Updates.ts"],"names":["getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","username","updates","url","user","owner","slug","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","ios","runtimeVersion","getRuntimeVersion","android","getRuntimeVersionNullable","e","console","log","policy","sdkVersion","stringify","getSDKVersion","getUpdatesEnabled","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","undefined","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata"],"mappings":"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","sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport { getRuntimeVersionForSDKVersion } from '@expo/sdk-runtime-versions';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { AndroidConfig, IOSConfig } from '..';\n\nexport type ExpoConfigUpdates = Pick<\n ExpoConfig,\n 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'\n>;\n\nexport function getExpoUpdatesPackageVersion(projectRoot: string): string | null {\n const expoUpdatesPackageJsonPath = resolveFrom.silent(projectRoot, 'expo-updates/package.json');\n if (!expoUpdatesPackageJsonPath || !fs.existsSync(expoUpdatesPackageJsonPath)) {\n return null;\n }\n const packageJson = JSON.parse(fs.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));\n return packageJson.version;\n}\n\nexport function getUpdateUrl(\n config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n username: string | null\n): string | null {\n if (config.updates?.url) {\n return config.updates?.url;\n }\n\n const user = typeof config.owner === 'string' ? config.owner : username;\n if (!user) {\n return null;\n }\n return `https://exp.host/@${user}/${config.slug}`;\n}\n\nexport function getNativeVersion(\n config: Pick<ExpoConfig, 'version'> & {\n android?: Pick<Android, 'versionCode'>;\n ios?: Pick<IOS, 'buildNumber'>;\n },\n platform: 'android' | 'ios'\n): string {\n const version = IOSConfig.Version.getVersion(config);\n switch (platform) {\n case 'ios': {\n const buildNumber = IOSConfig.Version.getBuildNumber(config);\n return `${version}(${buildNumber})`;\n }\n case 'android': {\n const versionCode = AndroidConfig.Version.getVersionCode(config);\n return `${version}(${versionCode})`;\n }\n default: {\n throw new Error(\n `\"${platform}\" is not a supported platform. Choose either \"ios\" or \"android\".`\n );\n }\n }\n}\n\n/**\n * Compute runtime version policies.\n * @return an expoConfig with only string valued platform specific runtime versions.\n */\nexport const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig = config => {\n if (config.ios?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'ios');\n if (runtimeVersion) {\n config.ios = {\n ...config.ios,\n runtimeVersion,\n };\n }\n }\n if (config.android?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'android');\n if (runtimeVersion) {\n config.android = {\n ...config.android,\n runtimeVersion,\n };\n }\n }\n delete config.runtimeVersion;\n return config;\n};\n\nexport function getRuntimeVersionNullable(\n ...[config, platform]: Parameters<typeof getRuntimeVersion>\n): string | null {\n try {\n return getRuntimeVersion(config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport function getRuntimeVersion(\n config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {\n android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;\n ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;\n },\n platform: 'android' | 'ios'\n): string | null {\n const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n if (!runtimeVersion) {\n return null;\n }\n\n if (typeof runtimeVersion === 'string') {\n return runtimeVersion;\n } else if (runtimeVersion.policy === 'nativeVersion') {\n return getNativeVersion(config, platform);\n } else if (runtimeVersion.policy === 'sdkVersion') {\n if (!config.sdkVersion) {\n throw new Error(\"An SDK version must be defined when using the 'sdkVersion' runtime policy.\");\n }\n return getRuntimeVersionForSDKVersion(config.sdkVersion);\n }\n\n throw new Error(\n `\"${\n typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n }\" is not a valid runtime version. getRuntimeVersion only supports a string, \"sdkVersion\", or \"nativeVersion\" policy.`\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 getUpdatesCodeSigningCertificate(\n projectRoot: string,\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const codeSigningCertificatePath = config.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return undefined;\n }\n\n const finalPath = path.join(projectRoot, codeSigningCertificatePath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`File not found at \\`updates.codeSigningCertificate\\` path: ${finalPath}`);\n }\n\n return fs.readFileSync(finalPath, 'utf8');\n}\n\nexport function getUpdatesCodeSigningMetadata(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'] {\n return config.updates?.codeSigningMetadata;\n}\n\nexport function getUpdatesCodeSigningMetadataStringified(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const metadata = getUpdatesCodeSigningMetadata(config);\n if (!metadata) {\n return undefined;\n }\n\n return JSON.stringify(metadata);\n}\n"],"file":"Updates.js"}
|
package/build/utils/XML.d.ts
CHANGED
|
@@ -23,3 +23,4 @@ export declare function format(manifest: any, { indentLevel, newline }?: {
|
|
|
23
23
|
* @param value unescaped Android XML string literal.
|
|
24
24
|
*/
|
|
25
25
|
export declare function escapeAndroidString(value: string): string;
|
|
26
|
+
export declare function unescapeAndroidString(value: string): string;
|
package/build/utils/XML.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.escapeAndroidString = escapeAndroidString;
|
|
|
7
7
|
exports.format = format;
|
|
8
8
|
exports.parseXMLAsync = parseXMLAsync;
|
|
9
9
|
exports.readXMLAsync = readXMLAsync;
|
|
10
|
+
exports.unescapeAndroidString = unescapeAndroidString;
|
|
10
11
|
exports.writeXMLAsync = writeXMLAsync;
|
|
11
12
|
|
|
12
13
|
function _fsExtra() {
|
|
@@ -58,6 +59,8 @@ async function writeXMLAsync(options) {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
async function readXMLAsync(options) {
|
|
62
|
+
var _manifest$resources;
|
|
63
|
+
|
|
61
64
|
let contents = '';
|
|
62
65
|
|
|
63
66
|
try {
|
|
@@ -69,7 +72,20 @@ async function readXMLAsync(options) {
|
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
const parser = new (_xml2js().Parser)();
|
|
72
|
-
const manifest = await parser.parseStringPromise(contents || options.fallback || '');
|
|
75
|
+
const manifest = await parser.parseStringPromise(contents || options.fallback || ''); // For strings.xml
|
|
76
|
+
|
|
77
|
+
if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources = manifest.resources) === null || _manifest$resources === void 0 ? void 0 : _manifest$resources.string)) {
|
|
78
|
+
for (const string of manifest === null || manifest === void 0 ? void 0 : (_manifest$resources2 = manifest.resources) === null || _manifest$resources2 === void 0 ? void 0 : _manifest$resources2.string) {
|
|
79
|
+
var _manifest$resources2;
|
|
80
|
+
|
|
81
|
+
if (string.$.translatable === 'false' || string.$.translatable === false) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
string._ = unescapeAndroidString(string._);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
73
89
|
return manifest;
|
|
74
90
|
}
|
|
75
91
|
|
|
@@ -89,15 +105,15 @@ function format(manifest, {
|
|
|
89
105
|
if (typeof manifest === 'string') {
|
|
90
106
|
xmlInput = manifest;
|
|
91
107
|
} else if (manifest.toString) {
|
|
92
|
-
var _manifest$
|
|
108
|
+
var _manifest$resources3;
|
|
93
109
|
|
|
94
110
|
const builder = new (_xml2js().Builder)({
|
|
95
111
|
headless: true
|
|
96
112
|
}); // For strings.xml
|
|
97
113
|
|
|
98
|
-
if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$
|
|
99
|
-
for (const string of manifest === null || manifest === void 0 ? void 0 : (_manifest$
|
|
100
|
-
var _manifest$
|
|
114
|
+
if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources3 = manifest.resources) === null || _manifest$resources3 === void 0 ? void 0 : _manifest$resources3.string)) {
|
|
115
|
+
for (const string of manifest === null || manifest === void 0 ? void 0 : (_manifest$resources4 = manifest.resources) === null || _manifest$resources4 === void 0 ? void 0 : _manifest$resources4.string) {
|
|
116
|
+
var _manifest$resources4;
|
|
101
117
|
|
|
102
118
|
if (string.$.translatable === 'false' || string.$.translatable === false) {
|
|
103
119
|
continue;
|
|
@@ -174,4 +190,8 @@ function escapeAndroidString(value) {
|
|
|
174
190
|
|
|
175
191
|
return value;
|
|
176
192
|
}
|
|
193
|
+
|
|
194
|
+
function unescapeAndroidString(value) {
|
|
195
|
+
return value.replace(/\\(.)/g, '$1');
|
|
196
|
+
}
|
|
177
197
|
//# sourceMappingURL=XML.js.map
|
package/build/utils/XML.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/XML.ts"],"names":["writeXMLAsync","options","xml","format","fs","ensureDir","path","dirname","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","
|
|
1
|
+
{"version":3,"sources":["../../src/utils/XML.ts"],"names":["writeXMLAsync","options","xml","format","fs","ensureDir","path","dirname","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","Array","isArray","resources","string","$","translatable","_","unescapeAndroidString","parseXMLAsync","stringTimesN","n","char","join","indentLevel","newline","EOL","xmlInput","toString","builder","Builder","headless","escapeAndroidString","buildObject","Error","indentString","formatted","regex","replace","pad","split","map","line","trim","forEach","indent","match","padding","value","m"],"mappings":"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","sourcesContent":["import fs from 'fs-extra';\nimport { EOL } from 'os';\nimport path from 'path';\nimport { Builder, Parser } from 'xml2js';\n\nexport type XMLValue = boolean | number | string | null | XMLArray | XMLObject;\n\nexport interface XMLArray extends Array<XMLValue> {}\n\nexport interface XMLObject {\n [key: string]: XMLValue | undefined;\n}\n\nexport async function writeXMLAsync(options: { path: string; xml: any }): Promise<void> {\n const xml = format(options.xml);\n await fs.ensureDir(path.dirname(options.path));\n await fs.writeFile(options.path, xml);\n}\n\nexport async function readXMLAsync(options: {\n path: string;\n fallback?: string | null;\n}): Promise<XMLObject> {\n let contents: string = '';\n try {\n contents = await fs.readFile(options.path, { encoding: 'utf8', flag: 'r' });\n } catch {\n // catch and use fallback\n }\n const parser = new Parser();\n const manifest = await parser.parseStringPromise(contents || options.fallback || '');\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = unescapeAndroidString(string._);\n }\n }\n\n return manifest;\n}\n\nexport async function parseXMLAsync(contents: string): Promise<XMLObject> {\n const xml = await new Parser().parseStringPromise(contents);\n return xml;\n}\n\nconst stringTimesN = (n: number, char: string) => Array(n + 1).join(char);\n\nexport function format(manifest: any, { indentLevel = 2, newline = EOL } = {}): string {\n let xmlInput: string;\n if (typeof manifest === 'string') {\n xmlInput = manifest;\n } else if (manifest.toString) {\n const builder = new Builder({\n headless: true,\n });\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = escapeAndroidString(string._);\n }\n }\n\n xmlInput = builder.buildObject(manifest);\n\n return xmlInput;\n } else {\n throw new Error(`Invalid XML value passed in: ${manifest}`);\n }\n const indentString = stringTimesN(indentLevel, ' ');\n\n let formatted = '';\n const regex = /(>)(<)(\\/*)/g;\n const xml = xmlInput.replace(regex, `$1${newline}$2$3`);\n let pad = 0;\n xml\n .split(/\\r?\\n/)\n .map((line: string) => line.trim())\n .forEach((line: string) => {\n let indent = 0;\n if (line.match(/.+<\\/\\w[^>]*>$/)) {\n indent = 0;\n } else if (line.match(/^<\\/\\w/)) {\n if (pad !== 0) {\n pad -= 1;\n }\n } else if (line.match(/^<\\w([^>]*[^/])?>.*$/)) {\n indent = 1;\n } else {\n indent = 0;\n }\n\n const padding = stringTimesN(pad, indentString);\n formatted += padding + line + newline;\n pad += indent;\n });\n\n return formatted.trim();\n}\n\n/**\n * Escapes Android string literals, specifically characters `\"`, `'`, `\\`, `\\n`, `\\r`, `\\t`\n *\n * @param value unescaped Android XML string literal.\n */\nexport function escapeAndroidString(value: string): string {\n value = value.replace(/[\\n\\r\\t'\"@]/g, m => {\n switch (m) {\n case '\"':\n case \"'\":\n case '@':\n return '\\\\' + m;\n case '\\n':\n return '\\\\n';\n case '\\r':\n return '\\\\r';\n case '\\t':\n return '\\\\t';\n default:\n throw new Error(`Cannot escape unhandled XML character: ${m}`);\n }\n });\n if (value.match(/(^\\s|\\s$)/)) {\n value = '\"' + value + '\"';\n }\n return value;\n}\n\nexport function unescapeAndroidString(value: string): string {\n return value.replace(/\\\\(.)/g, '$1');\n}\n"],"file":"XML.js"}
|