@expo/config-plugins 4.0.7 → 4.0.11

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.
Files changed (104) hide show
  1. package/build/Plugin.types.js +6 -6
  2. package/build/android/AllowBackup.js +1 -1
  3. package/build/android/Colors.js +3 -3
  4. package/build/android/EasBuild.js +1 -1
  5. package/build/android/GoogleServices.js +3 -3
  6. package/build/android/IntentFilters.d.ts +3 -3
  7. package/build/android/IntentFilters.js +45 -49
  8. package/build/android/IntentFilters.js.map +1 -1
  9. package/build/android/JsEngine.js +2 -1
  10. package/build/android/JsEngine.js.map +1 -1
  11. package/build/android/Manifest.d.ts +5 -1
  12. package/build/android/Manifest.js +10 -10
  13. package/build/android/Manifest.js.map +1 -1
  14. package/build/android/Name.d.ts +2 -1
  15. package/build/android/Name.js +7 -4
  16. package/build/android/Name.js.map +1 -1
  17. package/build/android/Orientation.js +2 -1
  18. package/build/android/Orientation.js.map +1 -1
  19. package/build/android/Package.js +4 -4
  20. package/build/android/Package.js.map +1 -1
  21. package/build/android/Paths.js +9 -9
  22. package/build/android/Permissions.js +6 -6
  23. package/build/android/Resources.js +5 -5
  24. package/build/android/Scheme.js +3 -3
  25. package/build/android/StatusBar.js +3 -3
  26. package/build/android/Strings.js +1 -1
  27. package/build/android/Styles.js +5 -5
  28. package/build/android/Updates.d.ts +2 -7
  29. package/build/android/Updates.js +34 -27
  30. package/build/android/Updates.js.map +1 -1
  31. package/build/android/Version.d.ts +9 -0
  32. package/build/android/Version.js +39 -3
  33. package/build/android/Version.js.map +1 -1
  34. package/build/android/WindowSoftInputMode.js +1 -1
  35. package/build/android/codeMod.js +2 -2
  36. package/build/index.d.ts +1 -1
  37. package/build/index.js +57 -49
  38. package/build/index.js.map +1 -1
  39. package/build/ios/Bitcode.js +1 -1
  40. package/build/ios/BuildScheme.js +2 -2
  41. package/build/ios/BundleIdentifier.js +14 -4
  42. package/build/ios/BundleIdentifier.js.map +1 -1
  43. package/build/ios/DeviceFamily.js +3 -3
  44. package/build/ios/Entitlements.js +2 -2
  45. package/build/ios/Entitlements.js.map +1 -1
  46. package/build/ios/Google.js +2 -2
  47. package/build/ios/JsEngine.d.ts +2 -1
  48. package/build/ios/JsEngine.js +2 -1
  49. package/build/ios/JsEngine.js.map +1 -1
  50. package/build/ios/Locales.js +1 -1
  51. package/build/ios/Maps.js +32 -18
  52. package/build/ios/Maps.js.map +1 -1
  53. package/build/ios/Orientation.js +2 -1
  54. package/build/ios/Orientation.js.map +1 -1
  55. package/build/ios/Paths.js +14 -14
  56. package/build/ios/Paths.js.map +1 -1
  57. package/build/ios/Permissions.js +1 -1
  58. package/build/ios/Permissions.js.map +1 -1
  59. package/build/ios/ProvisioningProfile.js +11 -2
  60. package/build/ios/ProvisioningProfile.js.map +1 -1
  61. package/build/ios/Scheme.js +4 -4
  62. package/build/ios/Swift.js +2 -2
  63. package/build/ios/Target.js +34 -15
  64. package/build/ios/Target.js.map +1 -1
  65. package/build/ios/Updates.d.ts +2 -7
  66. package/build/ios/Updates.js +34 -27
  67. package/build/ios/Updates.js.map +1 -1
  68. package/build/ios/Version.js +3 -3
  69. package/build/ios/codeMod.js +2 -2
  70. package/build/ios/index.js +3 -1
  71. package/build/ios/index.js.map +1 -1
  72. package/build/ios/utils/Xcodeproj.js +9 -9
  73. package/build/ios/utils/string.d.ts +1 -0
  74. package/build/ios/utils/string.js +11 -0
  75. package/build/ios/utils/string.js.map +1 -0
  76. package/build/plugins/android-plugins.js +1 -1
  77. package/build/plugins/createBaseMod.js +2 -2
  78. package/build/plugins/createBaseMod.js.map +1 -1
  79. package/build/plugins/ios-plugins.d.ts +2 -2
  80. package/build/plugins/ios-plugins.js +2 -2
  81. package/build/plugins/ios-plugins.js.map +1 -1
  82. package/build/plugins/mod-compiler.js +3 -3
  83. package/build/plugins/mod-compiler.js.map +1 -1
  84. package/build/plugins/withAndroidBaseMods.js +1 -1
  85. package/build/plugins/withIosBaseMods.d.ts +3 -3
  86. package/build/plugins/withIosBaseMods.js +1 -1
  87. package/build/plugins/withIosBaseMods.js.map +1 -1
  88. package/build/utils/Updates.d.ts +2 -0
  89. package/build/utils/Updates.js +58 -1
  90. package/build/utils/Updates.js.map +1 -1
  91. package/build/utils/XML.d.ts +6 -0
  92. package/build/utils/XML.js +57 -10
  93. package/build/utils/XML.js.map +1 -1
  94. package/build/utils/errors.js +1 -1
  95. package/build/utils/generateCode.js +2 -2
  96. package/build/utils/history.js +1 -1
  97. package/build/utils/modules.js +1 -1
  98. package/build/utils/plugin-resolver.js +4 -4
  99. package/build/utils/sortObject.js +2 -2
  100. package/build/utils/warnings.js +1 -1
  101. package/package.json +4 -3
  102. package/build/utils/resolvePackageRootFolder.d.ts +0 -1
  103. package/build/utils/resolvePackageRootFolder.js +0 -57
  104. package/build/utils/resolvePackageRootFolder.js.map +0 -1
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "XcodeProject", {
7
- enumerable: true,
8
- get: function () {
9
- return _xcode().XcodeProject;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "AndroidManifest", {
13
7
  enumerable: true,
14
8
  get: function () {
@@ -27,6 +21,12 @@ Object.defineProperty(exports, "InfoPlist", {
27
21
  return _IosConfig().InfoPlist;
28
22
  }
29
23
  });
24
+ Object.defineProperty(exports, "XcodeProject", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _xcode().XcodeProject;
28
+ }
29
+ });
30
30
 
31
31
  function _xcode() {
32
32
  const data = require("xcode");
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getAllowBackup = getAllowBackup;
7
- exports.setAllowBackup = setAllowBackup;
8
7
  exports.getAllowBackupFromManifest = getAllowBackupFromManifest;
8
+ exports.setAllowBackup = setAllowBackup;
9
9
  exports.withAllowBackup = void 0;
10
10
 
11
11
  function _androidPlugins() {
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getProjectColorsXMLPathAsync = getProjectColorsXMLPathAsync;
7
- exports.setColorItem = setColorItem;
8
- exports.removeColorItem = removeColorItem;
9
6
  exports.assignColorValue = assignColorValue;
10
7
  exports.getColorsAsObject = getColorsAsObject;
11
8
  exports.getObjectAsColorsXml = getObjectAsColorsXml;
9
+ exports.getProjectColorsXMLPathAsync = getProjectColorsXMLPathAsync;
10
+ exports.removeColorItem = removeColorItem;
11
+ exports.setColorItem = setColorItem;
12
12
 
13
13
  function _Paths() {
14
14
  const data = require("./Paths");
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getEasBuildGradlePath = getEasBuildGradlePath;
7
6
  exports.configureEasBuildAsync = configureEasBuildAsync;
7
+ exports.getEasBuildGradlePath = getEasBuildGradlePath;
8
8
  exports.isEasBuildGradleConfiguredAsync = isEasBuildGradleConfiguredAsync;
9
9
 
10
10
  function _fsExtra() {
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.applyPlugin = applyPlugin;
6
7
  exports.getGoogleServicesFilePath = getGoogleServicesFilePath;
7
- exports.setGoogleServicesFile = setGoogleServicesFile;
8
8
  exports.setClassPath = setClassPath;
9
- exports.applyPlugin = applyPlugin;
10
- exports.withGoogleServicesFile = exports.withApplyPlugin = exports.withClassPath = void 0;
9
+ exports.setGoogleServicesFile = setGoogleServicesFile;
10
+ exports.withGoogleServicesFile = exports.withClassPath = exports.withApplyPlugin = void 0;
11
11
 
12
12
  function _fsExtra() {
13
13
  const data = _interopRequireDefault(require("fs-extra"));
@@ -1,8 +1,8 @@
1
1
  import { Android, ExpoConfig } from '@expo/config-types';
2
- import { AndroidManifest } from './Manifest';
2
+ import { AndroidManifest, ManifestIntentFilter } from './Manifest';
3
3
  declare type AndroidIntentFilters = NonNullable<Android['intentFilters']>;
4
4
  export declare const withAndroidIntentFilters: import("..").ConfigPlugin<void>;
5
5
  export declare function getIntentFilters(config: Pick<ExpoConfig, 'android'>): AndroidIntentFilters;
6
- export declare function setAndroidIntentFilters(config: Pick<ExpoConfig, 'android'>, androidManifest: AndroidManifest): Promise<AndroidManifest>;
7
- export default function renderIntentFilters(intentFilters: AndroidIntentFilters): string[];
6
+ export declare function setAndroidIntentFilters(config: Pick<ExpoConfig, 'android'>, androidManifest: AndroidManifest): AndroidManifest;
7
+ export default function renderIntentFilters(intentFilters: AndroidIntentFilters): ManifestIntentFilter[];
8
8
  export {};
@@ -3,21 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = renderIntentFilters;
6
7
  exports.getIntentFilters = getIntentFilters;
7
8
  exports.setAndroidIntentFilters = setAndroidIntentFilters;
8
- exports.default = renderIntentFilters;
9
9
  exports.withAndroidIntentFilters = void 0;
10
10
 
11
- function _xml2js() {
12
- const data = require("xml2js");
13
-
14
- _xml2js = function () {
15
- return data;
16
- };
17
-
18
- return data;
19
- }
20
-
21
11
  function _androidPlugins() {
22
12
  const data = require("../plugins/android-plugins");
23
13
 
@@ -38,7 +28,7 @@ function _Manifest() {
38
28
  return data;
39
29
  }
40
30
 
41
- // TODO: make it so intent filters aren't written again if you run the command again
31
+ const GENERATED_TAG = 'data-generated';
42
32
  const withAndroidIntentFilters = (0, _androidPlugins().createAndroidManifestPlugin)(setAndroidIntentFilters, 'withAndroidIntentFilters');
43
33
  exports.withAndroidIntentFilters = withAndroidIntentFilters;
44
34
 
@@ -48,8 +38,19 @@ function getIntentFilters(config) {
48
38
  return (_config$android$inten = (_config$android = config.android) === null || _config$android === void 0 ? void 0 : _config$android.intentFilters) !== null && _config$android$inten !== void 0 ? _config$android$inten : [];
49
39
  }
50
40
 
51
- async function setAndroidIntentFilters(config, androidManifest) {
52
- var _mainActivity$intent;
41
+ function setAndroidIntentFilters(config, androidManifest) {
42
+ var _mainActivity$intent, _mainActivity$intent2;
43
+
44
+ // Always ensure old tags are removed.
45
+ const mainActivity = (0, _Manifest().getMainActivityOrThrow)(androidManifest); // Remove all generated tags from previous runs...
46
+
47
+ if ((_mainActivity$intent = mainActivity['intent-filter']) !== null && _mainActivity$intent !== void 0 && _mainActivity$intent.length) {
48
+ mainActivity['intent-filter'] = mainActivity['intent-filter'].filter(value => {
49
+ var _value$$;
50
+
51
+ return ((_value$$ = value.$) === null || _value$$ === void 0 ? void 0 : _value$$[GENERATED_TAG]) !== 'true';
52
+ });
53
+ }
53
54
 
54
55
  const intentFilters = getIntentFilters(config);
55
56
 
@@ -57,53 +58,48 @@ async function setAndroidIntentFilters(config, androidManifest) {
57
58
  return androidManifest;
58
59
  }
59
60
 
60
- const intentFiltersXML = renderIntentFilters(intentFilters).join('');
61
- const parser = new (_xml2js().Parser)();
62
- const intentFiltersJSON = await parser.parseStringPromise(intentFiltersXML);
63
- const mainActivity = (0, _Manifest().getMainActivityOrThrow)(androidManifest);
64
- mainActivity['intent-filter'] = (_mainActivity$intent = mainActivity['intent-filter']) === null || _mainActivity$intent === void 0 ? void 0 : _mainActivity$intent.concat(intentFiltersJSON['intent-filter']);
61
+ mainActivity['intent-filter'] = (_mainActivity$intent2 = mainActivity['intent-filter']) === null || _mainActivity$intent2 === void 0 ? void 0 : _mainActivity$intent2.concat(renderIntentFilters(intentFilters));
65
62
  return androidManifest;
66
63
  }
67
64
 
68
65
  function renderIntentFilters(intentFilters) {
69
- // returns an array of <intent-filter> tags:
70
- // [
71
- // `<intent-filter>
72
- // <data android:scheme="exp"/>
73
- // <data android:scheme="exps"/>
74
- //
75
- // <action android:name="android.intent.action.VIEW"/>
76
- //
77
- // <category android:name="android.intent.category.DEFAULT"/>
78
- // <category android:name="android.intent.category.BROWSABLE"/>
79
- // </intent-filter>`,
80
- // ...
81
- // ]
82
66
  return intentFilters.map(intentFilter => {
83
- const autoVerify = intentFilter.autoVerify ? ' android:autoVerify="true"' : '';
84
- return `<intent-filter${autoVerify}>
85
- ${renderIntentFilterData(intentFilter.data)}
86
- <action android:name="android.intent.action.${intentFilter.action}"/>
87
- ${renderIntentFilterCategory(intentFilter.category)}
88
- </intent-filter>`;
67
+ // <intent-filter>
68
+ return {
69
+ $: {
70
+ 'android:autoVerify': intentFilter.autoVerify ? 'true' : undefined,
71
+ // Add a custom "generated" tag that we can query later to remove.
72
+ [GENERATED_TAG]: 'true'
73
+ },
74
+ action: [// <action android:name="android.intent.action.VIEW"/>
75
+ {
76
+ $: {
77
+ 'android:name': `android.intent.action.${intentFilter.action}`
78
+ }
79
+ }],
80
+ data: renderIntentFilterData(intentFilter.data),
81
+ category: renderIntentFilterCategory(intentFilter.category)
82
+ };
89
83
  });
90
84
  }
85
+ /** Like `<data android:scheme="exp"/>` */
91
86
 
92
- function renderIntentFilterDatumEntries(datum = {}) {
93
- const entries = [];
94
-
95
- for (const [key, value] of Object.entries(datum)) {
96
- entries.push(`android:${key}="${value}"`);
97
- }
98
-
99
- return entries.join(' ');
100
- }
101
87
 
102
88
  function renderIntentFilterData(data) {
103
- return (Array.isArray(data) ? data : [data]).filter(Boolean).map(datum => `<data ${renderIntentFilterDatumEntries(datum)}/>`).join('\n');
89
+ return (Array.isArray(data) ? data : [data]).filter(Boolean).map(datum => ({
90
+ $: Object.entries(datum !== null && datum !== void 0 ? datum : {}).reduce((prev, [key, value]) => ({ ...prev,
91
+ [`android:${key}`]: value
92
+ }), {})
93
+ }));
104
94
  }
95
+ /** Like `<category android:name="android.intent.category.DEFAULT"/>` */
96
+
105
97
 
106
98
  function renderIntentFilterCategory(category) {
107
- return (Array.isArray(category) ? category : [category]).filter(Boolean).map(cat => `<category android:name="android.intent.category.${cat}"/>`).join('\n');
99
+ return (Array.isArray(category) ? category : [category]).filter(Boolean).map(cat => ({
100
+ $: {
101
+ 'android:name': `android.intent.category.${cat}`
102
+ }
103
+ }));
108
104
  }
109
105
  //# sourceMappingURL=IntentFilters.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/IntentFilters.ts"],"names":["withAndroidIntentFilters","setAndroidIntentFilters","getIntentFilters","config","android","intentFilters","androidManifest","length","intentFiltersXML","renderIntentFilters","join","parser","Parser","intentFiltersJSON","parseStringPromise","mainActivity","concat","map","intentFilter","autoVerify","renderIntentFilterData","data","action","renderIntentFilterCategory","category","renderIntentFilterDatumEntries","datum","entries","key","value","Object","push","Array","isArray","filter","Boolean","cat"],"mappings":";;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAEO,MAAMA,wBAAwB,GAAG,mDACtCC,uBADsC,EAEtC,0BAFsC,CAAjC;;;AAKA,SAASC,gBAAT,CAA0BC,MAA1B,EAAqF;AAAA;;AAC1F,qDAAOA,MAAM,CAACC,OAAd,oDAAO,gBAAgBC,aAAvB,yEAAwC,EAAxC;AACD;;AAEM,eAAeJ,uBAAf,CACLE,MADK,EAELG,eAFK,EAGqB;AAAA;;AAC1B,QAAMD,aAAa,GAAGH,gBAAgB,CAACC,MAAD,CAAtC;;AACA,MAAI,CAACE,aAAa,CAACE,MAAnB,EAA2B;AACzB,WAAOD,eAAP;AACD;;AAED,QAAME,gBAAgB,GAAGC,mBAAmB,CAACJ,aAAD,CAAnB,CAAmCK,IAAnC,CAAwC,EAAxC,CAAzB;AACA,QAAMC,MAAM,GAAG,KAAIC,gBAAJ,GAAf;AACA,QAAMC,iBAAiB,GAAG,MAAMF,MAAM,CAACG,kBAAP,CAA0BN,gBAA1B,CAAhC;AAEA,QAAMO,YAAY,GAAG,wCAAuBT,eAAvB,CAArB;AAEAS,EAAAA,YAAY,CAAC,eAAD,CAAZ,2BAAgCA,YAAY,CAAC,eAAD,CAA5C,yDAAgC,qBAA+BC,MAA/B,CAC9BH,iBAAiB,CAAC,eAAD,CADa,CAAhC;AAIA,SAAOP,eAAP;AACD;;AAEc,SAASG,mBAAT,CAA6BJ,aAA7B,EAA4E;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAOA,aAAa,CAACY,GAAd,CAAkBC,YAAY,IAAI;AACvC,UAAMC,UAAU,GAAGD,YAAY,CAACC,UAAb,GAA0B,4BAA1B,GAAyD,EAA5E;AAEA,WAAQ,iBAAgBA,UAAW;AACvC,QAAQC,sBAAsB,CAACF,YAAY,CAACG,IAAd,CAAoB;AAClD,oDAAoDH,YAAY,CAACI,MAAO;AACxE,QAAQC,0BAA0B,CAACL,YAAY,CAACM,QAAd,CAAwB;AAC1D,qBAJI;AAKD,GARM,CAAP;AASD;;AAED,SAASC,8BAAT,CAAwCC,KAA+B,GAAG,EAA1E,EAAsF;AACpF,QAAMC,OAAiB,GAAG,EAA1B;;AACA,OAAK,MAAM,CAACC,GAAD,EAAMC,KAAN,CAAX,IAA2BC,MAAM,CAACH,OAAP,CAAeD,KAAf,CAA3B,EAAkD;AAChDC,IAAAA,OAAO,CAACI,IAAR,CAAc,WAAUH,GAAI,KAAIC,KAAM,GAAtC;AACD;;AACD,SAAOF,OAAO,CAACjB,IAAR,CAAa,GAAb,CAAP;AACD;;AAED,SAASU,sBAAT,CACEC,IADF,EAEU;AACR,SAAO,CAACW,KAAK,CAACC,OAAN,CAAcZ,IAAd,IAAsBA,IAAtB,GAA6B,CAACA,IAAD,CAA9B,EACJa,MADI,CACGC,OADH,EAEJlB,GAFI,CAEAS,KAAK,IAAK,SAAQD,8BAA8B,CAACC,KAAD,CAAQ,IAFxD,EAGJhB,IAHI,CAGC,IAHD,CAAP;AAID;;AAED,SAASa,0BAAT,CAAoCC,QAApC,EAA0E;AACxE,SAAO,CAACQ,KAAK,CAACC,OAAN,CAAcT,QAAd,IAA0BA,QAA1B,GAAqC,CAACA,QAAD,CAAtC,EACJU,MADI,CACGC,OADH,EAEJlB,GAFI,CAEAmB,GAAG,IAAK,mDAAkDA,GAAI,KAF9D,EAGJ1B,IAHI,CAGC,IAHD,CAAP;AAID","sourcesContent":["import { Android, AndroidIntentFiltersData, ExpoConfig } from '@expo/config-types';\nimport { Parser } from 'xml2js';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\ntype AndroidIntentFilters = NonNullable<Android['intentFilters']>;\n// TODO: make it so intent filters aren't written again if you run the command again\n\nexport const withAndroidIntentFilters = createAndroidManifestPlugin(\n setAndroidIntentFilters,\n 'withAndroidIntentFilters'\n);\n\nexport function getIntentFilters(config: Pick<ExpoConfig, 'android'>): AndroidIntentFilters {\n return config.android?.intentFilters ?? [];\n}\n\nexport async function setAndroidIntentFilters(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n): Promise<AndroidManifest> {\n const intentFilters = getIntentFilters(config);\n if (!intentFilters.length) {\n return androidManifest;\n }\n\n const intentFiltersXML = renderIntentFilters(intentFilters).join('');\n const parser = new Parser();\n const intentFiltersJSON = await parser.parseStringPromise(intentFiltersXML);\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity['intent-filter'] = mainActivity['intent-filter']?.concat(\n intentFiltersJSON['intent-filter']\n );\n\n return androidManifest;\n}\n\nexport default function renderIntentFilters(intentFilters: AndroidIntentFilters): string[] {\n // returns an array of <intent-filter> tags:\n // [\n // `<intent-filter>\n // <data android:scheme=\"exp\"/>\n // <data android:scheme=\"exps\"/>\n //\n // <action android:name=\"android.intent.action.VIEW\"/>\n //\n // <category android:name=\"android.intent.category.DEFAULT\"/>\n // <category android:name=\"android.intent.category.BROWSABLE\"/>\n // </intent-filter>`,\n // ...\n // ]\n return intentFilters.map(intentFilter => {\n const autoVerify = intentFilter.autoVerify ? ' android:autoVerify=\"true\"' : '';\n\n return `<intent-filter${autoVerify}>\n ${renderIntentFilterData(intentFilter.data)}\n <action android:name=\"android.intent.action.${intentFilter.action}\"/>\n ${renderIntentFilterCategory(intentFilter.category)}\n </intent-filter>`;\n });\n}\n\nfunction renderIntentFilterDatumEntries(datum: AndroidIntentFiltersData = {}): string {\n const entries: string[] = [];\n for (const [key, value] of Object.entries(datum)) {\n entries.push(`android:${key}=\"${value}\"`);\n }\n return entries.join(' ');\n}\n\nfunction renderIntentFilterData(\n data?: AndroidIntentFiltersData | AndroidIntentFiltersData[]\n): string {\n return (Array.isArray(data) ? data : [data])\n .filter(Boolean)\n .map(datum => `<data ${renderIntentFilterDatumEntries(datum)}/>`)\n .join('\\n');\n}\n\nfunction renderIntentFilterCategory(category?: string | string[]): string {\n return (Array.isArray(category) ? category : [category])\n .filter(Boolean)\n .map(cat => `<category android:name=\"android.intent.category.${cat}\"/>`)\n .join('\\n');\n}\n"],"file":"IntentFilters.js"}
1
+ {"version":3,"sources":["../../src/android/IntentFilters.ts"],"names":["GENERATED_TAG","withAndroidIntentFilters","setAndroidIntentFilters","getIntentFilters","config","android","intentFilters","androidManifest","mainActivity","length","filter","value","$","concat","renderIntentFilters","map","intentFilter","autoVerify","undefined","action","data","renderIntentFilterData","category","renderIntentFilterCategory","Array","isArray","Boolean","datum","Object","entries","reduce","prev","key","cat"],"mappings":"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","sourcesContent":["import { Android, AndroidIntentFiltersData, ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow, ManifestIntentFilter } from './Manifest';\n\ntype AndroidIntentFilters = NonNullable<Android['intentFilters']>;\n\nconst GENERATED_TAG = 'data-generated';\n\nexport const withAndroidIntentFilters = createAndroidManifestPlugin(\n setAndroidIntentFilters,\n 'withAndroidIntentFilters'\n);\n\nexport function getIntentFilters(config: Pick<ExpoConfig, 'android'>): AndroidIntentFilters {\n return config.android?.intentFilters ?? [];\n}\n\nexport function setAndroidIntentFilters(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n): AndroidManifest {\n // Always ensure old tags are removed.\n const mainActivity = getMainActivityOrThrow(androidManifest);\n // Remove all generated tags from previous runs...\n if (mainActivity['intent-filter']?.length) {\n mainActivity['intent-filter'] = mainActivity['intent-filter'].filter(\n value => value.$?.[GENERATED_TAG] !== 'true'\n );\n }\n\n const intentFilters = getIntentFilters(config);\n if (!intentFilters.length) {\n return androidManifest;\n }\n\n mainActivity['intent-filter'] = mainActivity['intent-filter']?.concat(\n renderIntentFilters(intentFilters)\n );\n\n return androidManifest;\n}\n\nexport default function renderIntentFilters(\n intentFilters: AndroidIntentFilters\n): ManifestIntentFilter[] {\n return intentFilters.map(intentFilter => {\n // <intent-filter>\n return {\n $: {\n 'android:autoVerify': intentFilter.autoVerify ? 'true' : undefined,\n // Add a custom \"generated\" tag that we can query later to remove.\n [GENERATED_TAG]: 'true',\n },\n action: [\n // <action android:name=\"android.intent.action.VIEW\"/>\n {\n $: {\n 'android:name': `android.intent.action.${intentFilter.action}`,\n },\n },\n ],\n data: renderIntentFilterData(intentFilter.data),\n category: renderIntentFilterCategory(intentFilter.category),\n };\n });\n}\n\n/** Like `<data android:scheme=\"exp\"/>` */\nfunction renderIntentFilterData(data?: AndroidIntentFiltersData | AndroidIntentFiltersData[]) {\n return (Array.isArray(data) ? data : [data]).filter(Boolean).map(datum => ({\n $: Object.entries(datum ?? {}).reduce(\n (prev, [key, value]) => ({ ...prev, [`android:${key}`]: value }),\n {}\n ),\n }));\n}\n\n/** Like `<category android:name=\"android.intent.category.DEFAULT\"/>` */\nfunction renderIntentFilterCategory(category?: string | string[]) {\n return (Array.isArray(category) ? category : [category]).filter(Boolean).map(cat => ({\n $: {\n 'android:name': `android.intent.category.${cat}`,\n },\n }));\n}\n"],"file":"IntentFilters.js"}
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.JS_ENGINE_PROP_KEY = exports.DEFAULT_JS_ENGINE = void 0;
6
7
  exports.getJsEngine = getJsEngine;
7
8
  exports.setJsEngine = setJsEngine;
8
- exports.withJsEngineGradleProps = exports.DEFAULT_JS_ENGINE = exports.JS_ENGINE_PROP_KEY = void 0;
9
+ exports.withJsEngineGradleProps = void 0;
9
10
 
10
11
  function _androidPlugins() {
11
12
  const data = require("../plugins/android-plugins");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/JsEngine.ts"],"names":["JS_ENGINE_PROP_KEY","DEFAULT_JS_ENGINE","withJsEngineGradleProps","config","modResults","setJsEngine","getJsEngine","android","jsEngine","gradleProperties","oldPropIndex","findIndex","prop","type","key","newProp","value","push"],"mappings":";;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,MAAMA,kBAAkB,GAAG,eAA3B;;AACA,MAAMC,iBAAiB,GAAG,KAA1B;;;AAEA,MAAMC,uBAAqC,GAAGC,MAAM,IAAI;AAC7D,SAAO,4CAAqBA,MAArB,EAA6BA,MAAM,IAAI;AAC5CA,IAAAA,MAAM,CAACC,UAAP,GAAoBC,WAAW,CAACF,MAAD,EAASA,MAAM,CAACC,UAAhB,CAA/B;AACA,WAAOD,MAAP;AACD,GAHM,CAAP;AAID,CALM;;;;AAOA,SAASG,WAAT,CAAqBH,MAArB,EAAuE;AAAA;;AAC5E,6DAAOA,MAAM,CAACI,OAAd,oDAAO,gBAAgBC,QAAvB,yEAAmCL,MAAM,CAACK,QAA1C,uCAAsDP,iBAAtD;AACD;;AAEM,SAASI,WAAT,CACLF,MADK,EAELM,gBAFK,EAGa;AAAA;;AAClB,QAAMC,YAAY,GAAGD,gBAAgB,CAACE,SAAjB,CACnBC,IAAI,IAAIA,IAAI,CAACC,IAAL,KAAc,UAAd,IAA4BD,IAAI,CAACE,GAAL,KAAad,kBAD9B,CAArB;AAGA,QAAMe,OAAuB,GAAG;AAC9BF,IAAAA,IAAI,EAAE,UADwB;AAE9BC,IAAAA,GAAG,EAAEd,kBAFyB;AAG9BgB,IAAAA,KAAK,yDAAEb,MAAM,CAACI,OAAT,qDAAE,iBAAgBC,QAAlB,2EAA8BL,MAAM,CAACK,QAArC,yCAAiDP;AAHxB,GAAhC;;AAMA,MAAIS,YAAY,IAAI,CAApB,EAAuB;AACrBD,IAAAA,gBAAgB,CAACC,YAAD,CAAhB,GAAiCK,OAAjC;AACD,GAFD,MAEO;AACLN,IAAAA,gBAAgB,CAACQ,IAAjB,CAAsBF,OAAtB;AACD;;AAED,SAAON,gBAAP;AACD","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\nimport type { ConfigPlugin } from '../Plugin.types';\nimport { withGradleProperties } from '../plugins/android-plugins';\nimport type { PropertiesItem } from './Properties';\n\nexport const JS_ENGINE_PROP_KEY = 'expo.jsEngine';\nexport const DEFAULT_JS_ENGINE = 'jsc';\n\nexport const withJsEngineGradleProps: ConfigPlugin = config => {\n return withGradleProperties(config, config => {\n config.modResults = setJsEngine(config, config.modResults);\n return config;\n });\n};\n\nexport function getJsEngine(config: Pick<ExpoConfig, 'android' | 'jsEngine'>) {\n return config.android?.jsEngine ?? config.jsEngine ?? DEFAULT_JS_ENGINE;\n}\n\nexport function setJsEngine(\n config: Pick<ExpoConfig, 'android' | 'jsEngine'>,\n gradleProperties: PropertiesItem[]\n): PropertiesItem[] {\n const oldPropIndex = gradleProperties.findIndex(\n prop => prop.type === 'property' && prop.key === JS_ENGINE_PROP_KEY\n );\n const newProp: PropertiesItem = {\n type: 'property',\n key: JS_ENGINE_PROP_KEY,\n value: config.android?.jsEngine ?? config.jsEngine ?? DEFAULT_JS_ENGINE,\n };\n\n if (oldPropIndex >= 0) {\n gradleProperties[oldPropIndex] = newProp;\n } else {\n gradleProperties.push(newProp);\n }\n\n return gradleProperties;\n}\n"],"file":"JsEngine.js"}
1
+ {"version":3,"sources":["../../src/android/JsEngine.ts"],"names":["JS_ENGINE_PROP_KEY","DEFAULT_JS_ENGINE","withJsEngineGradleProps","config","modResults","setJsEngine","getJsEngine","android","jsEngine","gradleProperties","oldPropIndex","findIndex","prop","type","key","newProp","value","push"],"mappings":";;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,MAAMA,kBAAkB,GAAG,eAA3B;;AACA,MAAMC,iBAAiB,GAAG,KAA1B;;;AAEA,MAAMC,uBAAqC,GAAGC,MAAM,IAAI;AAC7D,SAAO,4CAAqBA,MAArB,EAA6BA,MAAM,IAAI;AAC5CA,IAAAA,MAAM,CAACC,UAAP,GAAoBC,WAAW,CAACF,MAAD,EAASA,MAAM,CAACC,UAAhB,CAA/B;AACA,WAAOD,MAAP;AACD,GAHM,CAAP;AAID,CALM;;;;AAOA,SAASG,WAAT,CAAqBH,MAArB,EAAuE;AAAA;;AAC5E,6DAAOA,MAAM,CAACI,OAAd,oDAAO,gBAAgBC,QAAvB,yEAAmCL,MAAM,CAACK,QAA1C,uCAAsDP,iBAAtD;AACD;;AAEM,SAASI,WAAT,CACLF,MADK,EAELM,gBAFK,EAGa;AAAA;;AAClB,QAAMC,YAAY,GAAGD,gBAAgB,CAACE,SAAjB,CACnBC,IAAI,IAAIA,IAAI,CAACC,IAAL,KAAc,UAAd,IAA4BD,IAAI,CAACE,GAAL,KAAad,kBAD9B,CAArB;AAGA,QAAMe,OAAuB,GAAG;AAC9BF,IAAAA,IAAI,EAAE,UADwB;AAE9BC,IAAAA,GAAG,EAAEd,kBAFyB;AAG9BgB,IAAAA,KAAK,yDAAEb,MAAM,CAACI,OAAT,qDAAE,iBAAgBC,QAAlB,2EAA8BL,MAAM,CAACK,QAArC,yCAAiDP;AAHxB,GAAhC;;AAMA,MAAIS,YAAY,IAAI,CAApB,EAAuB;AACrBD,IAAAA,gBAAgB,CAACC,YAAD,CAAhB,GAAiCK,OAAjC;AACD,GAFD,MAEO;AACLN,IAAAA,gBAAgB,CAACQ,IAAjB,CAAsBF,OAAtB;AACD;;AAED,SAAON,gBAAP;AACD","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\nimport type { ConfigPlugin } from '../Plugin.types';\nimport { withGradleProperties } from '../plugins/android-plugins';\nimport type { PropertiesItem } from './Properties';\n\nexport const JS_ENGINE_PROP_KEY = 'expo.jsEngine';\nexport const DEFAULT_JS_ENGINE = 'jsc';\n\nexport const withJsEngineGradleProps: ConfigPlugin = config => {\n return withGradleProperties(config, config => {\n config.modResults = setJsEngine(config, config.modResults);\n return config;\n });\n};\n\nexport function getJsEngine(config: Pick<ExpoConfig, 'android' | 'jsEngine'>) {\n return config.android?.jsEngine ?? config.jsEngine ?? DEFAULT_JS_ENGINE;\n}\n\nexport function setJsEngine(\n config: Pick<ExpoConfig, 'android' | 'jsEngine'>,\n gradleProperties: PropertiesItem[]\n): PropertiesItem[] {\n const oldPropIndex = gradleProperties.findIndex(\n prop => prop.type === 'property' && prop.key === JS_ENGINE_PROP_KEY\n );\n const newProp: PropertiesItem = {\n type: 'property',\n key: JS_ENGINE_PROP_KEY,\n value: config.android?.jsEngine ?? config.jsEngine ?? DEFAULT_JS_ENGINE,\n };\n\n if (oldPropIndex >= 0) {\n gradleProperties[oldPropIndex] = newProp;\n } else {\n gradleProperties.push(newProp);\n }\n\n return gradleProperties;\n}\n"],"file":"JsEngine.js"}
@@ -27,7 +27,11 @@ declare type ManifestReceiver = {
27
27
  };
28
28
  'intent-filter'?: ManifestIntentFilter[];
29
29
  };
30
- declare type ManifestIntentFilter = {
30
+ export declare type ManifestIntentFilter = {
31
+ $?: {
32
+ 'android:autoVerify'?: StringBoolean;
33
+ 'data-generated'?: StringBoolean;
34
+ };
31
35
  action?: ManifestAction[];
32
36
  data?: ManifestData[];
33
37
  category?: ManifestCategory[];
@@ -3,21 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.writeAndroidManifestAsync = writeAndroidManifestAsync;
7
- exports.readAndroidManifestAsync = readAndroidManifestAsync;
8
- exports.getMainApplication = getMainApplication;
9
- exports.getMainApplicationOrThrow = getMainApplicationOrThrow;
10
- exports.getMainActivityOrThrow = getMainActivityOrThrow;
11
- exports.getRunnableActivity = getRunnableActivity;
12
- exports.getMainActivity = getMainActivity;
13
6
  exports.addMetaDataItemToMainApplication = addMetaDataItemToMainApplication;
14
- exports.removeMetaDataItemFromMainApplication = removeMetaDataItemFromMainApplication;
7
+ exports.addUsesLibraryItemToMainApplication = addUsesLibraryItemToMainApplication;
15
8
  exports.findMetaDataItem = findMetaDataItem;
16
9
  exports.findUsesLibraryItem = findUsesLibraryItem;
10
+ exports.getMainActivity = getMainActivity;
11
+ exports.getMainActivityOrThrow = getMainActivityOrThrow;
12
+ exports.getMainApplication = getMainApplication;
17
13
  exports.getMainApplicationMetaDataValue = getMainApplicationMetaDataValue;
18
- exports.addUsesLibraryItemToMainApplication = addUsesLibraryItemToMainApplication;
19
- exports.removeUsesLibraryItemFromMainApplication = removeUsesLibraryItemFromMainApplication;
14
+ exports.getMainApplicationOrThrow = getMainApplicationOrThrow;
15
+ exports.getRunnableActivity = getRunnableActivity;
20
16
  exports.prefixAndroidKeys = prefixAndroidKeys;
17
+ exports.readAndroidManifestAsync = readAndroidManifestAsync;
18
+ exports.removeMetaDataItemFromMainApplication = removeMetaDataItemFromMainApplication;
19
+ exports.removeUsesLibraryItemFromMainApplication = removeUsesLibraryItemFromMainApplication;
20
+ exports.writeAndroidManifestAsync = writeAndroidManifestAsync;
21
21
 
22
22
  function _assert() {
23
23
  const data = _interopRequireDefault(require("assert"));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Manifest.ts"],"names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","ensureDir","path","dirname","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","getMainApplicationOrThrow","mainApplication","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","hasOwnProperty","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","Object","entries","reduce","prev","key","curr"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestIntentFilter = {\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: { 'xmlns:android': string; package?: string; [key: string]: string | undefined };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n application?: ManifestApplication[];\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.ensureDir(path.dirname(manifestPath));\n await fs.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter(\n e => e?.$?.['android:name'] === '.MainApplication'\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n action => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n category => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[\n `android:${itemType}` as keyof ManifestMetaDataAttributes\n ] = itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n e => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n"],"file":"Manifest.js"}
1
+ {"version":3,"sources":["../../src/android/Manifest.ts"],"names":["writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","XML","format","fs","ensureDir","path","dirname","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","e","$","getMainApplicationOrThrow","mainApplication","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","hasOwnProperty","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","Object","entries","reduce","prev","key","curr"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n $?: {\n 'android:autoVerify'?: StringBoolean;\n 'data-generated'?: StringBoolean;\n };\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: { 'xmlns:android': string; package?: string; [key: string]: string | undefined };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n application?: ManifestApplication[];\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.ensureDir(path.dirname(manifestPath));\n await fs.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter(\n e => e?.$?.['android:name'] === '.MainApplication'\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n action => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n category => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[\n `android:${itemType}` as keyof ManifestMetaDataAttributes\n ] = itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n e => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n"],"file":"Manifest.js"}
@@ -2,7 +2,8 @@ import { ExpoConfig } from '@expo/config-types';
2
2
  import { ConfigPlugin } from '../Plugin.types';
3
3
  /**
4
4
  * Sanitize a name, this should be used for files and gradle names.
5
- * - `[/, \, :, <, >, ", ?, *, |]` are not allowed https://bit.ly/3l6xqKL
5
+ * - `[/, \, :, <, >, ", ?, *, |]` are not allowed
6
+ * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated
6
7
  *
7
8
  * @param name
8
9
  */
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.sanitizeNameForGradle = sanitizeNameForGradle;
7
- exports.getName = getName;
8
6
  exports.applyNameSettingsGradle = applyNameSettingsGradle;
7
+ exports.getName = getName;
8
+ exports.sanitizeNameForGradle = sanitizeNameForGradle;
9
9
  exports.withNameSettingsGradle = exports.withName = void 0;
10
10
 
11
11
  function _androidPlugins() {
@@ -50,13 +50,16 @@ function _Strings() {
50
50
 
51
51
  /**
52
52
  * Sanitize a name, this should be used for files and gradle names.
53
- * - `[/, \, :, <, >, ", ?, *, |]` are not allowed https://bit.ly/3l6xqKL
53
+ * - `[/, \, :, <, >, ", ?, *, |]` are not allowed
54
+ * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated
54
55
  *
55
56
  * @param name
56
57
  */
57
58
  function sanitizeNameForGradle(name) {
58
- // Gradle disallows these:
59
+ // Remove escape characters which are valid in XML names but not in gradle.
60
+ name = name.replace(/[\n\r\t]/g, ''); // Gradle disallows these:
59
61
  // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \, :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).
62
+
60
63
  return name.replace(/(\/|\\|:|<|>|"|\?|\*|\|)/g, '');
61
64
  }
62
65
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Name.ts"],"names":["sanitizeNameForGradle","name","replace","withName","applyNameFromConfig","withNameSettingsGradle","config","modResults","language","contents","applyNameSettingsGradle","getName","stringsJSON","value","settingsGradle"],"mappings":";;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,qBAAT,CAA+BC,IAA/B,EAAqD;AAC1D;AACA;AACA,SAAOA,IAAI,CAACC,OAAL,CAAa,2BAAb,EAA0C,EAA1C,CAAP;AACD;;AAEM,MAAMC,QAAQ,GAAG,8CAAuBC,mBAAvB,EAA4C,UAA5C,CAAjB;;;AAEA,MAAMC,sBAAoC,GAAGC,MAAM,IAAI;AAC5D,SAAO,0CAAmBA,MAAnB,EAA2BA,MAAM,IAAI;AAC1C,QAAIA,MAAM,CAACC,UAAP,CAAkBC,QAAlB,KAA+B,QAAnC,EAA6C;AAC3CF,MAAAA,MAAM,CAACC,UAAP,CAAkBE,QAAlB,GAA6BC,uBAAuB,CAACJ,MAAD,EAASA,MAAM,CAACC,UAAP,CAAkBE,QAA3B,CAApD;AACD,KAFD,MAEO;AACL,yCACE,MADF,EAEG,mEAFH;AAID;;AACD,WAAOH,MAAP;AACD,GAVM,CAAP;AAWD,CAZM;;;;AAcA,SAASK,OAAT,CAAiBL,MAAjB,EAAmD;AACxD,SAAO,OAAOA,MAAM,CAACL,IAAd,KAAuB,QAAvB,GAAkCK,MAAM,CAACL,IAAzC,GAAgD,IAAvD;AACD;;AAED,SAASG,mBAAT,CACEE,MADF,EAEEM,WAFF,EAGe;AACb,QAAMX,IAAI,GAAGU,OAAO,CAACL,MAAD,CAApB;;AACA,MAAIL,IAAJ,EAAU;AACR,WAAO,8BAAc,CAAC,oCAAkB;AAAEA,MAAAA,IAAI,EAAE,UAAR;AAAoBY,MAAAA,KAAK,EAAEZ;AAA3B,KAAlB,CAAD,CAAd,EAAsEW,WAAtE,CAAP;AACD;;AACD,SAAO,iCAAiB,UAAjB,EAA6BA,WAA7B,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASF,uBAAT,CAAiCJ,MAAjC,EAAmEQ,cAAnE,EAA2F;AAAA;;AAChG,QAAMb,IAAI,GAAGD,qBAAqB,aAACW,OAAO,CAACL,MAAD,CAAR,+CAAoB,EAApB,CAAlC,CADgG,CAGhG;;AACA,SAAOQ,cAAc,CAACZ,OAAf,CACL,oDADK,EAEJ,uBAAsBD,IAAI,CAACC,OAAL,CAAa,IAAb,EAAmB,KAAnB,CAA0B,GAF5C,CAAP;AAID","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createStringsXmlPlugin, withSettingsGradle } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { buildResourceItem, ResourceXML } from './Resources';\nimport { removeStringItem, setStringItem } from './Strings';\n\n/**\n * Sanitize a name, this should be used for files and gradle names.\n * - `[/, \\, :, <, >, \", ?, *, |]` are not allowed https://bit.ly/3l6xqKL\n *\n * @param name\n */\nexport function sanitizeNameForGradle(name: string): string {\n // Gradle disallows these:\n // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \\, :, <, >, \", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).\n return name.replace(/(\\/|\\\\|:|<|>|\"|\\?|\\*|\\|)/g, '');\n}\n\nexport const withName = createStringsXmlPlugin(applyNameFromConfig, 'withName');\n\nexport const withNameSettingsGradle: ConfigPlugin = config => {\n return withSettingsGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyNameSettingsGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'name',\n `Cannot automatically configure settings.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\nfunction applyNameFromConfig(\n config: Pick<ExpoConfig, 'name'>,\n stringsJSON: ResourceXML\n): ResourceXML {\n const name = getName(config);\n if (name) {\n return setStringItem([buildResourceItem({ name: 'app_name', value: name })], stringsJSON);\n }\n return removeStringItem('app_name', stringsJSON);\n}\n\n/**\n * Regex a name change -- fragile.\n *\n * @param config\n * @param settingsGradle\n */\nexport function applyNameSettingsGradle(config: Pick<ExpoConfig, 'name'>, settingsGradle: string) {\n const name = sanitizeNameForGradle(getName(config) ?? '');\n\n // Select rootProject.name = '***' and replace the contents between the quotes.\n return settingsGradle.replace(\n /rootProject.name\\s?=\\s?([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g,\n `rootProject.name = '${name.replace(/'/g, \"\\\\'\")}'`\n );\n}\n"],"file":"Name.js"}
1
+ {"version":3,"sources":["../../src/android/Name.ts"],"names":["sanitizeNameForGradle","name","replace","withName","applyNameFromConfig","withNameSettingsGradle","config","modResults","language","contents","applyNameSettingsGradle","getName","stringsJSON","value","settingsGradle"],"mappings":";;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,qBAAT,CAA+BC,IAA/B,EAAqD;AAC1D;AACAA,EAAAA,IAAI,GAAGA,IAAI,CAACC,OAAL,CAAa,WAAb,EAA0B,EAA1B,CAAP,CAF0D,CAI1D;AACA;;AACA,SAAOD,IAAI,CAACC,OAAL,CAAa,2BAAb,EAA0C,EAA1C,CAAP;AACD;;AAEM,MAAMC,QAAQ,GAAG,8CAAuBC,mBAAvB,EAA4C,UAA5C,CAAjB;;;AAEA,MAAMC,sBAAoC,GAAGC,MAAM,IAAI;AAC5D,SAAO,0CAAmBA,MAAnB,EAA2BA,MAAM,IAAI;AAC1C,QAAIA,MAAM,CAACC,UAAP,CAAkBC,QAAlB,KAA+B,QAAnC,EAA6C;AAC3CF,MAAAA,MAAM,CAACC,UAAP,CAAkBE,QAAlB,GAA6BC,uBAAuB,CAACJ,MAAD,EAASA,MAAM,CAACC,UAAP,CAAkBE,QAA3B,CAApD;AACD,KAFD,MAEO;AACL,yCACE,MADF,EAEG,mEAFH;AAID;;AACD,WAAOH,MAAP;AACD,GAVM,CAAP;AAWD,CAZM;;;;AAcA,SAASK,OAAT,CAAiBL,MAAjB,EAAmD;AACxD,SAAO,OAAOA,MAAM,CAACL,IAAd,KAAuB,QAAvB,GAAkCK,MAAM,CAACL,IAAzC,GAAgD,IAAvD;AACD;;AAED,SAASG,mBAAT,CACEE,MADF,EAEEM,WAFF,EAGe;AACb,QAAMX,IAAI,GAAGU,OAAO,CAACL,MAAD,CAApB;;AACA,MAAIL,IAAJ,EAAU;AACR,WAAO,8BAAc,CAAC,oCAAkB;AAAEA,MAAAA,IAAI,EAAE,UAAR;AAAoBY,MAAAA,KAAK,EAAEZ;AAA3B,KAAlB,CAAD,CAAd,EAAsEW,WAAtE,CAAP;AACD;;AACD,SAAO,iCAAiB,UAAjB,EAA6BA,WAA7B,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASF,uBAAT,CAAiCJ,MAAjC,EAAmEQ,cAAnE,EAA2F;AAAA;;AAChG,QAAMb,IAAI,GAAGD,qBAAqB,aAACW,OAAO,CAACL,MAAD,CAAR,+CAAoB,EAApB,CAAlC,CADgG,CAGhG;;AACA,SAAOQ,cAAc,CAACZ,OAAf,CACL,oDADK,EAEJ,uBAAsBD,IAAI,CAACC,OAAL,CAAa,IAAb,EAAmB,KAAnB,CAA0B,GAF5C,CAAP;AAID","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createStringsXmlPlugin, withSettingsGradle } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { buildResourceItem, ResourceXML } from './Resources';\nimport { removeStringItem, setStringItem } from './Strings';\n\n/**\n * Sanitize a name, this should be used for files and gradle names.\n * - `[/, \\, :, <, >, \", ?, *, |]` are not allowed\n * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated\n *\n * @param name\n */\nexport function sanitizeNameForGradle(name: string): string {\n // Remove escape characters which are valid in XML names but not in gradle.\n name = name.replace(/[\\n\\r\\t]/g, '');\n\n // Gradle disallows these:\n // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \\, :, <, >, \", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).\n return name.replace(/(\\/|\\\\|:|<|>|\"|\\?|\\*|\\|)/g, '');\n}\n\nexport const withName = createStringsXmlPlugin(applyNameFromConfig, 'withName');\n\nexport const withNameSettingsGradle: ConfigPlugin = config => {\n return withSettingsGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyNameSettingsGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'name',\n `Cannot automatically configure settings.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\nfunction applyNameFromConfig(\n config: Pick<ExpoConfig, 'name'>,\n stringsJSON: ResourceXML\n): ResourceXML {\n const name = getName(config);\n if (name) {\n return setStringItem([buildResourceItem({ name: 'app_name', value: name })], stringsJSON);\n }\n return removeStringItem('app_name', stringsJSON);\n}\n\n/**\n * Regex a name change -- fragile.\n *\n * @param config\n * @param settingsGradle\n */\nexport function applyNameSettingsGradle(config: Pick<ExpoConfig, 'name'>, settingsGradle: string) {\n const name = sanitizeNameForGradle(getName(config) ?? '');\n\n // Select rootProject.name = '***' and replace the contents between the quotes.\n return settingsGradle.replace(\n /rootProject.name\\s?=\\s?([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g,\n `rootProject.name = '${name.replace(/'/g, \"\\\\'\")}'`\n );\n}\n"],"file":"Name.js"}
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.SCREEN_ORIENTATION_ATTRIBUTE = void 0;
6
7
  exports.getOrientation = getOrientation;
7
8
  exports.setAndroidOrientation = setAndroidOrientation;
8
- exports.withOrientation = exports.SCREEN_ORIENTATION_ATTRIBUTE = void 0;
9
+ exports.withOrientation = void 0;
9
10
 
10
11
  function _androidPlugins() {
11
12
  const data = require("../plugins/android-plugins");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/android/Orientation.ts"],"names":["SCREEN_ORIENTATION_ATTRIBUTE","withOrientation","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","$"],"mappings":";;;;;;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEO,MAAMA,4BAA4B,GAAG,2BAArC;;AAEA,MAAMC,eAAe,GAAG,mDAC7BC,qBAD6B,EAE7B,iBAF6B,CAAxB;;;AAKA,SAASC,cAAT,CAAwBC,MAAxB,EAAiE;AACtE,SAAO,OAAOA,MAAM,CAACC,WAAd,KAA8B,QAA9B,GAAyCD,MAAM,CAACC,WAAhD,GAA8D,IAArE;AACD;;AAEM,SAASH,qBAAT,CACLE,MADK,EAELE,eAFK,EAGL;AACA,QAAMD,WAAW,GAAGF,cAAc,CAACC,MAAD,CAAlC,CADA,CAEA;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,WAAOC,eAAP;AACD;;AAED,QAAMC,YAAY,GAAG,wCAAuBD,eAAvB,CAArB;AAEAC,EAAAA,YAAY,CAACC,CAAb,CAAeR,4BAAf,IACEK,WAAW,KAAK,SAAhB,GAA4BA,WAA5B,GAA0C,aAD5C;AAGA,SAAOC,eAAP;AACD","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"file":"Orientation.js"}
1
+ {"version":3,"sources":["../../src/android/Orientation.ts"],"names":["SCREEN_ORIENTATION_ATTRIBUTE","withOrientation","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","$"],"mappings":";;;;;;;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEO,MAAMA,4BAA4B,GAAG,2BAArC;;AAEA,MAAMC,eAAe,GAAG,mDAC7BC,qBAD6B,EAE7B,iBAF6B,CAAxB;;;AAKA,SAASC,cAAT,CAAwBC,MAAxB,EAAiE;AACtE,SAAO,OAAOA,MAAM,CAACC,WAAd,KAA8B,QAA9B,GAAyCD,MAAM,CAACC,WAAhD,GAA8D,IAArE;AACD;;AAEM,SAASH,qBAAT,CACLE,MADK,EAELE,eAFK,EAGL;AACA,QAAMD,WAAW,GAAGF,cAAc,CAACC,MAAD,CAAlC,CADA,CAEA;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,WAAOC,eAAP;AACD;;AAED,QAAMC,YAAY,GAAG,wCAAuBD,eAAvB,CAArB;AAEAC,EAAAA,YAAY,CAACC,CAAb,CAAeR,4BAAf,IACEK,WAAW,KAAK,SAAhB,GAA4BA,WAA5B,GAA0C,aAD5C;AAGA,SAAOC,eAAP;AACD","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"file":"Orientation.js"}
@@ -3,13 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getApplicationIdAsync = getApplicationIdAsync;
6
7
  exports.getPackage = getPackage;
7
8
  exports.renamePackageOnDisk = renamePackageOnDisk;
8
9
  exports.renamePackageOnDiskForType = renamePackageOnDiskForType;
9
- exports.setPackageInBuildGradle = setPackageInBuildGradle;
10
10
  exports.setPackageInAndroidManifest = setPackageInAndroidManifest;
11
- exports.getApplicationIdAsync = getApplicationIdAsync;
12
- exports.withPackageRefactor = exports.withPackageGradle = exports.withPackageManifest = void 0;
11
+ exports.setPackageInBuildGradle = setPackageInBuildGradle;
12
+ exports.withPackageRefactor = exports.withPackageManifest = exports.withPackageGradle = void 0;
13
13
 
14
14
  function _debug() {
15
15
  const data = _interopRequireDefault(require("debug"));
@@ -103,7 +103,7 @@ function _Paths() {
103
103
 
104
104
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
105
105
 
106
- const debug = (0, _debug().default)('config-plugins:android:package');
106
+ const debug = (0, _debug().default)('expo:config-plugins:android:package');
107
107
  const withPackageManifest = (0, _androidPlugins().createAndroidManifestPlugin)(setPackageInAndroidManifest, 'withPackageManifest');
108
108
  exports.withPackageManifest = withPackageManifest;
109
109