@expo/config-plugins 5.0.4 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/build/Plugin.types.d.ts +7 -7
  2. package/build/Plugin.types.js +0 -9
  3. package/build/Plugin.types.js.map +1 -1
  4. package/build/android/AllowBackup.js +0 -15
  5. package/build/android/AllowBackup.js.map +1 -1
  6. package/build/android/BuildProperties.js +2 -16
  7. package/build/android/BuildProperties.js.map +1 -1
  8. package/build/android/Colors.js +3 -25
  9. package/build/android/Colors.js.map +1 -1
  10. package/build/android/EasBuild.js +2 -22
  11. package/build/android/EasBuild.js.map +1 -1
  12. package/build/android/EasBuildGradleScript.js.map +1 -1
  13. package/build/android/GoogleMapsApiKey.js +0 -12
  14. package/build/android/GoogleMapsApiKey.js.map +1 -1
  15. package/build/android/GoogleServices.js +10 -48
  16. package/build/android/GoogleServices.js.map +1 -1
  17. package/build/android/IntentFilters.d.ts +1 -1
  18. package/build/android/IntentFilters.js +8 -24
  19. package/build/android/IntentFilters.js.map +1 -1
  20. package/build/android/Manifest.d.ts +19 -19
  21. package/build/android/Manifest.js +7 -66
  22. package/build/android/Manifest.js.map +1 -1
  23. package/build/android/Name.js +6 -27
  24. package/build/android/Name.js.map +1 -1
  25. package/build/android/Orientation.js +2 -12
  26. package/build/android/Orientation.js.map +1 -1
  27. package/build/android/Package.js +26 -111
  28. package/build/android/Package.js.map +1 -1
  29. package/build/android/Paths.d.ts +2 -2
  30. package/build/android/Paths.js +0 -47
  31. package/build/android/Paths.js.map +1 -1
  32. package/build/android/Permissions.js +8 -52
  33. package/build/android/Permissions.js.map +1 -1
  34. package/build/android/PrimaryColor.js +0 -18
  35. package/build/android/PrimaryColor.js.map +1 -1
  36. package/build/android/Properties.d.ts +1 -1
  37. package/build/android/Properties.js +0 -9
  38. package/build/android/Properties.js.map +1 -1
  39. package/build/android/Resources.d.ts +4 -4
  40. package/build/android/Resources.js +9 -29
  41. package/build/android/Resources.js.map +1 -1
  42. package/build/android/Scheme.d.ts +1 -1
  43. package/build/android/Scheme.js +13 -66
  44. package/build/android/Scheme.js.map +1 -1
  45. package/build/android/StatusBar.js +5 -33
  46. package/build/android/StatusBar.js.map +1 -1
  47. package/build/android/Strings.js +0 -14
  48. package/build/android/Strings.js.map +1 -1
  49. package/build/android/Styles.js +7 -34
  50. package/build/android/Styles.js.map +1 -1
  51. package/build/android/Updates.d.ts +2 -0
  52. package/build/android/Updates.js +50 -47
  53. package/build/android/Updates.js.map +1 -1
  54. package/build/android/Version.js +3 -29
  55. package/build/android/Version.js.map +1 -1
  56. package/build/android/WindowSoftInputMode.js +0 -14
  57. package/build/android/WindowSoftInputMode.js.map +1 -1
  58. package/build/android/codeMod.js +6 -22
  59. package/build/android/codeMod.js.map +1 -1
  60. package/build/android/index.js +0 -94
  61. package/build/android/index.js.map +1 -1
  62. package/build/index.js +2 -65
  63. package/build/index.js.map +1 -1
  64. package/build/ios/Bitcode.d.ts +1 -1
  65. package/build/ios/Bitcode.js +8 -28
  66. package/build/ios/Bitcode.js.map +1 -1
  67. package/build/ios/BuildProperties.js +2 -14
  68. package/build/ios/BuildProperties.js.map +1 -1
  69. package/build/ios/BuildScheme.js +2 -34
  70. package/build/ios/BuildScheme.js.map +1 -1
  71. package/build/ios/BundleIdentifier.js +13 -72
  72. package/build/ios/BundleIdentifier.js.map +1 -1
  73. package/build/ios/DeviceFamily.js +6 -24
  74. package/build/ios/DeviceFamily.js.map +1 -1
  75. package/build/ios/Entitlements.js +4 -45
  76. package/build/ios/Entitlements.js.map +1 -1
  77. package/build/ios/Google.d.ts +2 -2
  78. package/build/ios/Google.js +11 -66
  79. package/build/ios/Google.js.map +1 -1
  80. package/build/ios/IosConfig.types.d.ts +6 -11
  81. package/build/ios/IosConfig.types.js.map +1 -1
  82. package/build/ios/Locales.d.ts +3 -3
  83. package/build/ios/Locales.js +12 -43
  84. package/build/ios/Locales.js.map +1 -1
  85. package/build/ios/Maps.js +15 -53
  86. package/build/ios/Maps.js.map +1 -1
  87. package/build/ios/Name.js +7 -31
  88. package/build/ios/Name.js.map +1 -1
  89. package/build/ios/Orientation.js +2 -10
  90. package/build/ios/Orientation.js.map +1 -1
  91. package/build/ios/Paths.d.ts +2 -2
  92. package/build/ios/Paths.js +8 -73
  93. package/build/ios/Paths.js.map +1 -1
  94. package/build/ios/Permissions.js +1 -16
  95. package/build/ios/Permissions.js.map +1 -1
  96. package/build/ios/ProvisioningProfile.d.ts +1 -1
  97. package/build/ios/ProvisioningProfile.js +0 -18
  98. package/build/ios/ProvisioningProfile.js.map +1 -1
  99. package/build/ios/RequiresFullScreen.js +19 -31
  100. package/build/ios/RequiresFullScreen.js.map +1 -1
  101. package/build/ios/Scheme.js +10 -32
  102. package/build/ios/Scheme.js.map +1 -1
  103. package/build/ios/Swift.js +16 -50
  104. package/build/ios/Swift.js.map +1 -1
  105. package/build/ios/Target.js +0 -30
  106. package/build/ios/Target.js.map +1 -1
  107. package/build/ios/Updates.js +10 -49
  108. package/build/ios/Updates.js.map +1 -1
  109. package/build/ios/UsesNonExemptEncryption.js +4 -10
  110. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  111. package/build/ios/Version.js +4 -11
  112. package/build/ios/Version.js.map +1 -1
  113. package/build/ios/XcodeProjectFile.js +5 -23
  114. package/build/ios/XcodeProjectFile.js.map +1 -1
  115. package/build/ios/codeMod.js +19 -60
  116. package/build/ios/codeMod.js.map +1 -1
  117. package/build/ios/index.js +0 -97
  118. package/build/ios/index.js.map +1 -1
  119. package/build/ios/utils/Xcodeproj.d.ts +6 -6
  120. package/build/ios/utils/Xcodeproj.js +15 -101
  121. package/build/ios/utils/Xcodeproj.js.map +1 -1
  122. package/build/ios/utils/getInfoPlistPath.js +2 -15
  123. package/build/ios/utils/getInfoPlistPath.js.map +1 -1
  124. package/build/ios/utils/string.js +0 -1
  125. package/build/ios/utils/string.js.map +1 -1
  126. package/build/plugins/android-plugins.d.ts +2 -2
  127. package/build/plugins/android-plugins.js +11 -42
  128. package/build/plugins/android-plugins.js.map +1 -1
  129. package/build/plugins/createBaseMod.d.ts +3 -3
  130. package/build/plugins/createBaseMod.js +8 -25
  131. package/build/plugins/createBaseMod.js.map +1 -1
  132. package/build/plugins/ios-plugins.d.ts +2 -2
  133. package/build/plugins/ios-plugins.js +8 -48
  134. package/build/plugins/ios-plugins.js.map +1 -1
  135. package/build/plugins/mod-compiler.js +21 -72
  136. package/build/plugins/mod-compiler.js.map +1 -1
  137. package/build/plugins/withAndroidBaseMods.d.ts +1 -1
  138. package/build/plugins/withAndroidBaseMods.js +4 -89
  139. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  140. package/build/plugins/withDangerousMod.js +0 -5
  141. package/build/plugins/withDangerousMod.js.map +1 -1
  142. package/build/plugins/withIosBaseMods.d.ts +1 -1
  143. package/build/plugins/withIosBaseMods.js +26 -118
  144. package/build/plugins/withIosBaseMods.js.map +1 -1
  145. package/build/plugins/withMod.d.ts +1 -1
  146. package/build/plugins/withMod.js +24 -59
  147. package/build/plugins/withMod.js.map +1 -1
  148. package/build/plugins/withPlugins.js +0 -9
  149. package/build/plugins/withPlugins.js.map +1 -1
  150. package/build/plugins/withRunOnce.js +3 -9
  151. package/build/plugins/withRunOnce.js.map +1 -1
  152. package/build/plugins/withStaticPlugin.js +21 -43
  153. package/build/plugins/withStaticPlugin.js.map +1 -1
  154. package/build/utils/BuildProperties.types.d.ts +2 -2
  155. package/build/utils/BuildProperties.types.js.map +1 -1
  156. package/build/utils/Updates.d.ts +3 -1
  157. package/build/utils/Updates.js +18 -77
  158. package/build/utils/Updates.js.map +1 -1
  159. package/build/utils/XML.d.ts +1 -1
  160. package/build/utils/XML.js +7 -44
  161. package/build/utils/XML.js.map +1 -1
  162. package/build/utils/commonCodeMod.js +2 -10
  163. package/build/utils/commonCodeMod.js.map +1 -1
  164. package/build/utils/errors.d.ts +1 -1
  165. package/build/utils/errors.js +3 -11
  166. package/build/utils/errors.js.map +1 -1
  167. package/build/utils/fs.js +1 -12
  168. package/build/utils/fs.js.map +1 -1
  169. package/build/utils/generateCode.d.ts +1 -1
  170. package/build/utils/generateCode.js +8 -25
  171. package/build/utils/generateCode.js.map +1 -1
  172. package/build/utils/history.d.ts +1 -1
  173. package/build/utils/history.js +0 -6
  174. package/build/utils/history.js.map +1 -1
  175. package/build/utils/matchBrackets.d.ts +3 -3
  176. package/build/utils/matchBrackets.js +2 -17
  177. package/build/utils/matchBrackets.js.map +1 -1
  178. package/build/utils/modules.js +0 -10
  179. package/build/utils/modules.js.map +1 -1
  180. package/build/utils/obj.js +0 -4
  181. package/build/utils/obj.js.map +1 -1
  182. package/build/utils/plugin-resolver.js +25 -69
  183. package/build/utils/plugin-resolver.js.map +1 -1
  184. package/build/utils/sortObject.js +4 -10
  185. package/build/utils/sortObject.js.map +1 -1
  186. package/build/utils/versions.js +0 -10
  187. package/build/utils/versions.js.map +1 -1
  188. package/build/utils/warnings.js +1 -9
  189. package/build/utils/warnings.js.map +1 -1
  190. package/package.json +5 -5
@@ -11,24 +11,20 @@ exports.getObjectAsResourceGroup = getObjectAsResourceGroup;
11
11
  exports.getObjectAsResourceItems = getObjectAsResourceItems;
12
12
  exports.getResourceItemsAsObject = getResourceItemsAsObject;
13
13
  exports.readResourcesXMLAsync = readResourcesXMLAsync;
14
-
15
14
  function _XML() {
16
15
  const data = require("../utils/XML");
17
-
18
16
  _XML = function () {
19
17
  return data;
20
18
  };
21
-
22
19
  return data;
23
20
  }
24
-
25
21
  const fallbackResourceString = `<?xml version="1.0" encoding="utf-8"?><resources></resources>`;
22
+
26
23
  /**
27
24
  * Read an XML file while providing a default fallback for resource files.
28
25
  *
29
26
  * @param options path to the XML file, returns a fallback XML if the path doesn't exist.
30
27
  */
31
-
32
28
  async function readResourcesXMLAsync({
33
29
  path,
34
30
  fallback = fallbackResourceString
@@ -36,34 +32,31 @@ async function readResourcesXMLAsync({
36
32
  const xml = await (0, _XML().readXMLAsync)({
37
33
  path,
38
34
  fallback
39
- }); // Ensure the type is expected.
40
-
35
+ });
36
+ // Ensure the type is expected.
41
37
  if (!xml.resources) {
42
38
  xml.resources = {};
43
39
  }
44
-
45
40
  return xml;
46
41
  }
42
+
47
43
  /**
48
44
  * Ensure the provided xml has a `resources` object (the expected shape).
49
45
  *
50
46
  * @param xml
51
47
  */
52
-
53
-
54
48
  function ensureDefaultResourceXML(xml) {
55
49
  if (!xml) {
56
50
  xml = {
57
51
  resources: {}
58
52
  };
59
53
  }
60
-
61
54
  if (!xml.resources) {
62
55
  xml.resources = {};
63
56
  }
64
-
65
57
  return xml;
66
58
  }
59
+
67
60
  /**
68
61
  * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable.
69
62
  *
@@ -72,8 +65,6 @@ function ensureDefaultResourceXML(xml) {
72
65
  *
73
66
  * @param props name and value strings.
74
67
  */
75
-
76
-
77
68
  function buildResourceItem({
78
69
  name,
79
70
  value,
@@ -86,21 +77,16 @@ function buildResourceItem({
86
77
  },
87
78
  _: value
88
79
  };
89
-
90
80
  if (targetApi) {
91
81
  item.$['tools:targetApi'] = targetApi;
92
82
  }
93
-
94
83
  if (translatable !== undefined) {
95
84
  item.$['translatable'] = String(translatable);
96
85
  }
97
-
98
86
  return item;
99
87
  }
100
-
101
88
  function buildResourceGroup(parent) {
102
89
  var _parent$items;
103
-
104
90
  return {
105
91
  $: {
106
92
  name: parent.name,
@@ -109,44 +95,39 @@ function buildResourceGroup(parent) {
109
95
  item: (_parent$items = parent.items) !== null && _parent$items !== void 0 ? _parent$items : []
110
96
  };
111
97
  }
112
-
113
98
  function findResourceGroup(xml, group) {
114
99
  var _xml$filter, _xml$filter$call;
115
-
116
100
  const app = xml === null || xml === void 0 ? void 0 : (_xml$filter = xml.filter) === null || _xml$filter === void 0 ? void 0 : (_xml$filter$call = _xml$filter.call(xml, ({
117
101
  $: head
118
102
  }) => {
119
103
  let matches = head.name === group.name;
120
-
121
104
  if (group.parent != null && matches) {
122
105
  matches = head.parent === group.parent;
123
106
  }
124
-
125
107
  return matches;
126
108
  })) === null || _xml$filter$call === void 0 ? void 0 : _xml$filter$call[0];
127
109
  return app !== null && app !== void 0 ? app : null;
128
110
  }
111
+
129
112
  /**
130
113
  * Helper to convert a basic XML object into a simple k/v pair.
131
114
  *
132
115
  * @param xml
133
116
  * @returns
134
117
  */
135
-
136
-
137
118
  function getResourceItemsAsObject(xml) {
138
- return xml.reduce((prev, curr) => ({ ...prev,
119
+ return xml.reduce((prev, curr) => ({
120
+ ...prev,
139
121
  [curr.$.name]: curr._
140
122
  }), {});
141
123
  }
124
+
142
125
  /**
143
126
  * Helper to convert a basic k/v object to a ResourceItemXML array.
144
127
  *
145
128
  * @param xml
146
129
  * @returns
147
130
  */
148
-
149
-
150
131
  function getObjectAsResourceItems(obj) {
151
132
  return Object.entries(obj).map(([name, value]) => ({
152
133
  $: {
@@ -155,7 +136,6 @@ function getObjectAsResourceItems(obj) {
155
136
  _: value
156
137
  }));
157
138
  }
158
-
159
139
  function getObjectAsResourceGroup(group) {
160
140
  return {
161
141
  $: {
@@ -1 +1 @@
1
- {"version":3,"file":"Resources.js","names":["fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","items","findResourceGroup","group","app","filter","head","matches","getResourceItemsAsObject","reduce","prev","curr","getObjectAsResourceItems","obj","Object","entries","map","getObjectAsResourceGroup"],"sources":["../../src/android/Resources.ts"],"sourcesContent":["import { readXMLAsync, XMLObject } from '../utils/XML';\n\nexport type ResourceGroupXML = {\n $: {\n name: string;\n parent: string;\n };\n item: ResourceItemXML[];\n};\n\nexport type ResourceXML = {\n resources: {\n $?: {\n 'xmlns:tools'?: string;\n };\n color?: ResourceItemXML[];\n string?: ResourceItemXML[];\n style?: ResourceGroupXML[];\n // Add more if needed...\n };\n};\n\nexport type ResourceItemXML = {\n _: string;\n $: {\n name: string;\n 'tools:targetApi'?: string;\n translatable?: string;\n };\n};\n/**\n * Name of the resource folder.\n */\nexport type ResourceKind =\n | 'values'\n | 'values-night'\n | 'values-v23'\n | 'values-night-v23'\n | 'drawable';\n\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources></resources>`;\n\n/**\n * Read an XML file while providing a default fallback for resource files.\n *\n * @param options path to the XML file, returns a fallback XML if the path doesn't exist.\n */\nexport async function readResourcesXMLAsync({\n path,\n fallback = fallbackResourceString,\n}: {\n path: string;\n fallback?: string | null;\n}): Promise<ResourceXML> {\n const xml = await readXMLAsync({ path, fallback });\n // Ensure the type is expected.\n if (!xml.resources) {\n xml.resources = {};\n }\n return xml as ResourceXML;\n}\n\n/**\n * Ensure the provided xml has a `resources` object (the expected shape).\n *\n * @param xml\n */\nexport function ensureDefaultResourceXML(xml: XMLObject): ResourceXML {\n if (!xml) {\n xml = { resources: {} };\n }\n if (!xml.resources) {\n xml.resources = {};\n }\n\n return xml as ResourceXML;\n}\n\n/**\n * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable.\n *\n * - JSON: `{ $: { name }, _: value }`\n * - XML: `<item name=\"NAME\">VALUE</item>`\n *\n * @param props name and value strings.\n */\nexport function buildResourceItem({\n name,\n value,\n targetApi,\n translatable,\n}: {\n name: string;\n value: string;\n targetApi?: string;\n translatable?: boolean;\n}): ResourceItemXML {\n const item: ResourceItemXML = { $: { name }, _: value };\n if (targetApi) {\n item.$['tools:targetApi'] = targetApi;\n }\n if (translatable !== undefined) {\n item.$['translatable'] = String(translatable);\n }\n return item;\n}\n\nexport function buildResourceGroup(parent: {\n name: string;\n parent: string;\n items?: ResourceItemXML[];\n}): ResourceGroupXML {\n return {\n $: { name: parent.name, parent: parent.parent },\n item: parent.items ?? [],\n };\n}\n\nexport function findResourceGroup(\n xml: ResourceGroupXML[] | undefined,\n group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n const app = xml?.filter?.(({ $: head }) => {\n let matches = head.name === group.name;\n if (group.parent != null && matches) {\n matches = head.parent === group.parent;\n }\n return matches;\n })?.[0];\n return app ?? null;\n}\n\n/**\n * Helper to convert a basic XML object into a simple k/v pair.\n *\n * @param xml\n * @returns\n */\nexport function getResourceItemsAsObject(xml: ResourceItemXML[]): Record<string, string> | null {\n return xml.reduce(\n (prev, curr) => ({\n ...prev,\n [curr.$.name]: curr._,\n }),\n {}\n );\n}\n\n/**\n * Helper to convert a basic k/v object to a ResourceItemXML array.\n *\n * @param xml\n * @returns\n */\nexport function getObjectAsResourceItems(obj: Record<string, string>): ResourceItemXML[] {\n return Object.entries(obj).map(([name, value]) => ({\n $: { name },\n _: value,\n }));\n}\n\nexport function getObjectAsResourceGroup(group: {\n name: string;\n parent: string;\n item: Record<string, string>;\n}): ResourceGroupXML {\n return {\n $: {\n name: group.name,\n parent: group.parent,\n },\n item: getObjectAsResourceItems(group.item),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAwCA,MAAMA,sBAAsB,GAAI,+DAAhC;AAEA;AACA;AACA;AACA;AACA;;AACO,eAAeC,qBAAf,CAAqC;EAC1CC,IAD0C;EAE1CC,QAAQ,GAAGH;AAF+B,CAArC,EAMkB;EACvB,MAAMI,GAAG,GAAG,MAAM,IAAAC,mBAAA,EAAa;IAAEH,IAAF;IAAQC;EAAR,CAAb,CAAlB,CADuB,CAEvB;;EACA,IAAI,CAACC,GAAG,CAACE,SAAT,EAAoB;IAClBF,GAAG,CAACE,SAAJ,GAAgB,EAAhB;EACD;;EACD,OAAOF,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AACO,SAASG,wBAAT,CAAkCH,GAAlC,EAA+D;EACpE,IAAI,CAACA,GAAL,EAAU;IACRA,GAAG,GAAG;MAAEE,SAAS,EAAE;IAAb,CAAN;EACD;;EACD,IAAI,CAACF,GAAG,CAACE,SAAT,EAAoB;IAClBF,GAAG,CAACE,SAAJ,GAAgB,EAAhB;EACD;;EAED,OAAOF,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASI,iBAAT,CAA2B;EAChCC,IADgC;EAEhCC,KAFgC;EAGhCC,SAHgC;EAIhCC;AAJgC,CAA3B,EAUa;EAClB,MAAMC,IAAqB,GAAG;IAAEC,CAAC,EAAE;MAAEL;IAAF,CAAL;IAAeM,CAAC,EAAEL;EAAlB,CAA9B;;EACA,IAAIC,SAAJ,EAAe;IACbE,IAAI,CAACC,CAAL,CAAO,iBAAP,IAA4BH,SAA5B;EACD;;EACD,IAAIC,YAAY,KAAKI,SAArB,EAAgC;IAC9BH,IAAI,CAACC,CAAL,CAAO,cAAP,IAAyBG,MAAM,CAACL,YAAD,CAA/B;EACD;;EACD,OAAOC,IAAP;AACD;;AAEM,SAASK,kBAAT,CAA4BC,MAA5B,EAIc;EAAA;;EACnB,OAAO;IACLL,CAAC,EAAE;MAAEL,IAAI,EAAEU,MAAM,CAACV,IAAf;MAAqBU,MAAM,EAAEA,MAAM,CAACA;IAApC,CADE;IAELN,IAAI,mBAAEM,MAAM,CAACC,KAAT,yDAAkB;EAFjB,CAAP;AAID;;AAEM,SAASC,iBAAT,CACLjB,GADK,EAELkB,KAFK,EAGoB;EAAA;;EACzB,MAAMC,GAAG,GAAGnB,GAAH,aAAGA,GAAH,sCAAGA,GAAG,CAAEoB,MAAR,oEAAG,iBAAApB,GAAG,EAAW,CAAC;IAAEU,CAAC,EAAEW;EAAL,CAAD,KAAiB;IACzC,IAAIC,OAAO,GAAGD,IAAI,CAAChB,IAAL,KAAca,KAAK,CAACb,IAAlC;;IACA,IAAIa,KAAK,CAACH,MAAN,IAAgB,IAAhB,IAAwBO,OAA5B,EAAqC;MACnCA,OAAO,GAAGD,IAAI,CAACN,MAAL,KAAgBG,KAAK,CAACH,MAAhC;IACD;;IACD,OAAOO,OAAP;EACD,CANc,CAAN,qDAAG,iBAMP,CANO,CAAZ;EAOA,OAAOH,GAAP,aAAOA,GAAP,cAAOA,GAAP,GAAc,IAAd;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASI,wBAAT,CAAkCvB,GAAlC,EAAyF;EAC9F,OAAOA,GAAG,CAACwB,MAAJ,CACL,CAACC,IAAD,EAAOC,IAAP,MAAiB,EACf,GAAGD,IADY;IAEf,CAACC,IAAI,CAAChB,CAAL,CAAOL,IAAR,GAAeqB,IAAI,CAACf;EAFL,CAAjB,CADK,EAKL,EALK,CAAP;AAOD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASgB,wBAAT,CAAkCC,GAAlC,EAAkF;EACvF,OAAOC,MAAM,CAACC,OAAP,CAAeF,GAAf,EAAoBG,GAApB,CAAwB,CAAC,CAAC1B,IAAD,EAAOC,KAAP,CAAD,MAAoB;IACjDI,CAAC,EAAE;MAAEL;IAAF,CAD8C;IAEjDM,CAAC,EAAEL;EAF8C,CAApB,CAAxB,CAAP;AAID;;AAEM,SAAS0B,wBAAT,CAAkCd,KAAlC,EAIc;EACnB,OAAO;IACLR,CAAC,EAAE;MACDL,IAAI,EAAEa,KAAK,CAACb,IADX;MAEDU,MAAM,EAAEG,KAAK,CAACH;IAFb,CADE;IAKLN,IAAI,EAAEkB,wBAAwB,CAACT,KAAK,CAACT,IAAP;EALzB,CAAP;AAOD"}
1
+ {"version":3,"file":"Resources.js","names":["fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","items","findResourceGroup","group","app","filter","head","matches","getResourceItemsAsObject","reduce","prev","curr","getObjectAsResourceItems","obj","Object","entries","map","getObjectAsResourceGroup"],"sources":["../../src/android/Resources.ts"],"sourcesContent":["import { readXMLAsync, XMLObject } from '../utils/XML';\n\nexport type ResourceGroupXML = {\n $: {\n name: string;\n parent: string;\n };\n item: ResourceItemXML[];\n};\n\nexport type ResourceXML = {\n resources: {\n $?: {\n 'xmlns:tools'?: string;\n };\n color?: ResourceItemXML[];\n string?: ResourceItemXML[];\n style?: ResourceGroupXML[];\n // Add more if needed...\n };\n};\n\nexport type ResourceItemXML = {\n _: string;\n $: {\n name: string;\n 'tools:targetApi'?: string;\n translatable?: string;\n };\n};\n/**\n * Name of the resource folder.\n */\nexport type ResourceKind =\n | 'values'\n | 'values-night'\n | 'values-v23'\n | 'values-night-v23'\n | 'drawable';\n\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources></resources>`;\n\n/**\n * Read an XML file while providing a default fallback for resource files.\n *\n * @param options path to the XML file, returns a fallback XML if the path doesn't exist.\n */\nexport async function readResourcesXMLAsync({\n path,\n fallback = fallbackResourceString,\n}: {\n path: string;\n fallback?: string | null;\n}): Promise<ResourceXML> {\n const xml = await readXMLAsync({ path, fallback });\n // Ensure the type is expected.\n if (!xml.resources) {\n xml.resources = {};\n }\n return xml as ResourceXML;\n}\n\n/**\n * Ensure the provided xml has a `resources` object (the expected shape).\n *\n * @param xml\n */\nexport function ensureDefaultResourceXML(xml: XMLObject): ResourceXML {\n if (!xml) {\n xml = { resources: {} };\n }\n if (!xml.resources) {\n xml.resources = {};\n }\n\n return xml as ResourceXML;\n}\n\n/**\n * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable.\n *\n * - JSON: `{ $: { name }, _: value }`\n * - XML: `<item name=\"NAME\">VALUE</item>`\n *\n * @param props name and value strings.\n */\nexport function buildResourceItem({\n name,\n value,\n targetApi,\n translatable,\n}: {\n name: string;\n value: string;\n targetApi?: string;\n translatable?: boolean;\n}): ResourceItemXML {\n const item: ResourceItemXML = { $: { name }, _: value };\n if (targetApi) {\n item.$['tools:targetApi'] = targetApi;\n }\n if (translatable !== undefined) {\n item.$['translatable'] = String(translatable);\n }\n return item;\n}\n\nexport function buildResourceGroup(parent: {\n name: string;\n parent: string;\n items?: ResourceItemXML[];\n}): ResourceGroupXML {\n return {\n $: { name: parent.name, parent: parent.parent },\n item: parent.items ?? [],\n };\n}\n\nexport function findResourceGroup(\n xml: ResourceGroupXML[] | undefined,\n group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n const app = xml?.filter?.(({ $: head }) => {\n let matches = head.name === group.name;\n if (group.parent != null && matches) {\n matches = head.parent === group.parent;\n }\n return matches;\n })?.[0];\n return app ?? null;\n}\n\n/**\n * Helper to convert a basic XML object into a simple k/v pair.\n *\n * @param xml\n * @returns\n */\nexport function getResourceItemsAsObject(xml: ResourceItemXML[]): Record<string, string> | null {\n return xml.reduce(\n (prev, curr) => ({\n ...prev,\n [curr.$.name]: curr._,\n }),\n {}\n );\n}\n\n/**\n * Helper to convert a basic k/v object to a ResourceItemXML array.\n *\n * @param xml\n * @returns\n */\nexport function getObjectAsResourceItems(obj: Record<string, string>): ResourceItemXML[] {\n return Object.entries(obj).map(([name, value]) => ({\n $: { name },\n _: value,\n }));\n}\n\nexport function getObjectAsResourceGroup(group: {\n name: string;\n parent: string;\n item: Record<string, string>;\n}): ResourceGroupXML {\n return {\n $: {\n name: group.name,\n parent: group.parent,\n },\n item: getObjectAsResourceItems(group.item),\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ExpoConfig } from '@expo/config-types';
2
2
  import { AndroidManifest } from './Manifest';
3
- export declare type IntentFilterProps = {
3
+ export type IntentFilterProps = {
4
4
  actions: string[];
5
5
  categories: string[];
6
6
  data: {
@@ -11,107 +11,86 @@ exports.hasScheme = hasScheme;
11
11
  exports.removeScheme = removeScheme;
12
12
  exports.setScheme = setScheme;
13
13
  exports.withScheme = void 0;
14
-
15
14
  function _androidPlugins() {
16
15
  const data = require("../plugins/android-plugins");
17
-
18
16
  _androidPlugins = function () {
19
17
  return data;
20
18
  };
21
-
22
19
  return data;
23
20
  }
24
-
25
21
  function _warnings() {
26
22
  const data = require("../utils/warnings");
27
-
28
23
  _warnings = function () {
29
24
  return data;
30
25
  };
31
-
32
26
  return data;
33
27
  }
34
-
35
28
  const withScheme = (0, _androidPlugins().createAndroidManifestPlugin)(setScheme, 'withScheme');
36
29
  exports.withScheme = withScheme;
37
-
38
30
  function getScheme(config) {
39
31
  if (Array.isArray(config.scheme)) {
40
32
  const validate = value => typeof value === 'string';
41
-
42
33
  return config.scheme.filter(validate);
43
34
  } else if (typeof config.scheme === 'string') {
44
35
  return [config.scheme];
45
36
  }
46
-
47
37
  return [];
48
- } // This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.
38
+ }
39
+
40
+ // This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.
49
41
  // The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`expo prebuild --clean`).
50
42
  // 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.
51
-
52
-
53
43
  function setScheme(config, androidManifest) {
54
44
  var _config$android, _config$android2;
55
-
56
- const schemes = [...getScheme(config), // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.
57
- ...getScheme((_config$android = config.android) !== null && _config$android !== void 0 ? _config$android : {})]; // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.
58
-
45
+ const schemes = [...getScheme(config),
46
+ // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.
47
+ ...getScheme((_config$android = config.android) !== null && _config$android !== void 0 ? _config$android : {})];
48
+ // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.
59
49
  if ((_config$android2 = config.android) !== null && _config$android2 !== void 0 && _config$android2.package) {
60
50
  schemes.push(config.android.package);
61
51
  }
62
-
63
52
  if (schemes.length === 0) {
64
53
  return androidManifest;
65
54
  }
66
-
67
55
  if (!ensureManifestHasValidIntentFilter(androidManifest)) {
68
56
  (0, _warnings().addWarningAndroid)('scheme', `Cannot add schemes because the provided manifest does not have a valid Activity with \`android:launchMode="singleTask"\``, 'https://expo.fyi/setup-android-uri-scheme');
69
57
  return androidManifest;
70
- } // Get the current schemes and remove them from the list of schemes to add.
71
-
58
+ }
72
59
 
60
+ // Get the current schemes and remove them from the list of schemes to add.
73
61
  const currentSchemes = getSchemesFromManifest(androidManifest);
74
-
75
62
  for (const uri of currentSchemes) {
76
63
  const index = schemes.indexOf(uri);
77
64
  if (index > -1) schemes.splice(index, 1);
78
- } // Now add all of the remaining schemes.
79
-
65
+ }
80
66
 
67
+ // Now add all of the remaining schemes.
81
68
  for (const uri of schemes) {
82
69
  androidManifest = appendScheme(uri, androidManifest);
83
70
  }
84
-
85
71
  return androidManifest;
86
72
  }
87
-
88
73
  function isValidRedirectIntentFilter({
89
74
  actions,
90
75
  categories
91
76
  }) {
92
77
  return actions.includes('android.intent.action.VIEW') && !categories.includes('android.intent.category.LAUNCHER');
93
78
  }
94
-
95
79
  function propertiesFromIntentFilter(intentFilter) {
96
80
  var _intentFilter$action$, _intentFilter$action, _intentFilter$categor, _intentFilter$categor2, _intentFilter$data$fi, _intentFilter$data, _intentFilter$data$fi2;
97
-
98
81
  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 => {
99
82
  var _data$$;
100
-
101
83
  return data === null || data === void 0 ? void 0 : (_data$$ = data.$) === null || _data$$ === void 0 ? void 0 : _data$$['android:name'];
102
84
  })) !== null && _intentFilter$action$ !== void 0 ? _intentFilter$action$ : [];
103
85
  const categories = (_intentFilter$categor = intentFilter === null || intentFilter === void 0 ? void 0 : (_intentFilter$categor2 = intentFilter.category) === null || _intentFilter$categor2 === void 0 ? void 0 : _intentFilter$categor2.map(data => {
104
86
  var _data$$2;
105
-
106
87
  return data === null || data === void 0 ? void 0 : (_data$$2 = data.$) === null || _data$$2 === void 0 ? void 0 : _data$$2['android:name'];
107
88
  })) !== null && _intentFilter$categor !== void 0 ? _intentFilter$categor : [];
108
89
  const data = (_intentFilter$data$fi = intentFilter === null || intentFilter === void 0 ? void 0 : (_intentFilter$data = intentFilter.data) === null || _intentFilter$data === void 0 ? void 0 : (_intentFilter$data$fi2 = _intentFilter$data.filter(data => {
109
90
  var _data$$3;
110
-
111
91
  return data === null || data === void 0 ? void 0 : (_data$$3 = data.$) === null || _data$$3 === void 0 ? void 0 : _data$$3['android:scheme'];
112
92
  })) === null || _intentFilter$data$fi2 === void 0 ? void 0 : _intentFilter$data$fi2.map(data => {
113
93
  var _data$$4, _data$$5;
114
-
115
94
  return {
116
95
  scheme: data === null || data === void 0 ? void 0 : (_data$$4 = data.$) === null || _data$$4 === void 0 ? void 0 : _data$$4['android:scheme'],
117
96
  host: data === null || data === void 0 ? void 0 : (_data$$5 = data.$) === null || _data$$5 === void 0 ? void 0 : _data$$5['android:host']
@@ -123,39 +102,31 @@ function propertiesFromIntentFilter(intentFilter) {
123
102
  data
124
103
  };
125
104
  }
126
-
127
105
  function getSingleTaskIntentFilters(androidManifest) {
128
106
  if (!Array.isArray(androidManifest.manifest.application)) return [];
129
107
  let outputSchemes = [];
130
-
131
108
  for (const application of androidManifest.manifest.application) {
132
109
  const {
133
110
  activity
134
- } = application; // @ts-ignore
135
-
111
+ } = application;
112
+ // @ts-ignore
136
113
  const activities = Array.isArray(activity) ? activity : [activity];
137
114
  const singleTaskActivities = activities.filter(activity => {
138
115
  var _activity$$;
139
-
140
116
  return (activity === null || activity === void 0 ? void 0 : (_activity$$ = activity.$) === null || _activity$$ === void 0 ? void 0 : _activity$$['android:launchMode']) === 'singleTask';
141
117
  });
142
-
143
118
  for (const activity of singleTaskActivities) {
144
119
  const intentFilters = activity['intent-filter'];
145
120
  outputSchemes = outputSchemes.concat(intentFilters);
146
121
  }
147
122
  }
148
-
149
123
  return outputSchemes;
150
124
  }
151
-
152
125
  function getSchemesFromManifest(androidManifest, requestedHost = null) {
153
126
  const outputSchemes = [];
154
127
  const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);
155
-
156
128
  for (const intentFilter of singleTaskIntentFilters) {
157
129
  const properties = propertiesFromIntentFilter(intentFilter);
158
-
159
130
  if (isValidRedirectIntentFilter(properties) && properties.data) {
160
131
  for (const {
161
132
  scheme,
@@ -167,33 +138,26 @@ function getSchemesFromManifest(androidManifest, requestedHost = null) {
167
138
  }
168
139
  }
169
140
  }
170
-
171
141
  return outputSchemes;
172
142
  }
173
-
174
143
  function ensureManifestHasValidIntentFilter(androidManifest) {
175
144
  if (!Array.isArray(androidManifest.manifest.application)) {
176
145
  return false;
177
146
  }
178
-
179
147
  for (const application of androidManifest.manifest.application) {
180
148
  for (const activity of application.activity || []) {
181
149
  var _activity$$2;
182
-
183
150
  if ((activity === null || activity === void 0 ? void 0 : (_activity$$2 = activity.$) === null || _activity$$2 === void 0 ? void 0 : _activity$$2['android:launchMode']) === 'singleTask') {
184
151
  for (const intentFilter of activity['intent-filter'] || []) {
185
152
  // Parse valid intent filters...
186
153
  const properties = propertiesFromIntentFilter(intentFilter);
187
-
188
154
  if (isValidRedirectIntentFilter(properties)) {
189
155
  return true;
190
156
  }
191
157
  }
192
-
193
158
  if (!activity['intent-filter']) {
194
159
  activity['intent-filter'] = [];
195
160
  }
196
-
197
161
  activity['intent-filter'].push({
198
162
  action: [{
199
163
  $: {
@@ -214,28 +178,22 @@ function ensureManifestHasValidIntentFilter(androidManifest) {
214
178
  }
215
179
  }
216
180
  }
217
-
218
181
  return false;
219
182
  }
220
-
221
183
  function hasScheme(scheme, androidManifest) {
222
184
  const schemes = getSchemesFromManifest(androidManifest);
223
185
  return schemes.includes(scheme);
224
186
  }
225
-
226
187
  function appendScheme(scheme, androidManifest) {
227
188
  if (!Array.isArray(androidManifest.manifest.application)) {
228
189
  return androidManifest;
229
190
  }
230
-
231
191
  for (const application of androidManifest.manifest.application) {
232
192
  for (const activity of application.activity || []) {
233
193
  var _activity$$3;
234
-
235
194
  if ((activity === null || activity === void 0 ? void 0 : (_activity$$3 = activity.$) === null || _activity$$3 === void 0 ? void 0 : _activity$$3['android:launchMode']) === 'singleTask') {
236
195
  for (const intentFilter of activity['intent-filter'] || []) {
237
196
  const properties = propertiesFromIntentFilter(intentFilter);
238
-
239
197
  if (isValidRedirectIntentFilter(properties)) {
240
198
  if (!intentFilter.data) intentFilter.data = [];
241
199
  intentFilter.data.push({
@@ -245,49 +203,38 @@ function appendScheme(scheme, androidManifest) {
245
203
  });
246
204
  }
247
205
  }
248
-
249
206
  break;
250
207
  }
251
208
  }
252
209
  }
253
-
254
210
  return androidManifest;
255
211
  }
256
-
257
212
  function removeScheme(scheme, androidManifest) {
258
213
  if (!Array.isArray(androidManifest.manifest.application)) {
259
214
  return androidManifest;
260
215
  }
261
-
262
216
  for (const application of androidManifest.manifest.application) {
263
217
  for (const activity of application.activity || []) {
264
218
  var _activity$$4;
265
-
266
219
  if ((activity === null || activity === void 0 ? void 0 : (_activity$$4 = activity.$) === null || _activity$$4 === void 0 ? void 0 : _activity$$4['android:launchMode']) === 'singleTask') {
267
220
  for (const intentFilter of activity['intent-filter'] || []) {
268
221
  // Parse valid intent filters...
269
222
  const properties = propertiesFromIntentFilter(intentFilter);
270
-
271
223
  if (isValidRedirectIntentFilter(properties)) {
272
224
  for (const dataKey in (intentFilter === null || intentFilter === void 0 ? void 0 : intentFilter.data) || []) {
273
225
  var _intentFilter$data2, _data$$6;
274
-
275
226
  const data = (_intentFilter$data2 = intentFilter.data) === null || _intentFilter$data2 === void 0 ? void 0 : _intentFilter$data2[dataKey];
276
-
277
227
  if ((data === null || data === void 0 ? void 0 : (_data$$6 = data.$) === null || _data$$6 === void 0 ? void 0 : _data$$6['android:scheme']) === scheme) {
278
228
  var _intentFilter$data3;
279
-
280
229
  (_intentFilter$data3 = intentFilter.data) === null || _intentFilter$data3 === void 0 ? true : delete _intentFilter$data3[dataKey];
281
230
  }
282
231
  }
283
232
  }
284
233
  }
285
-
286
234
  break;
287
235
  }
288
236
  }
289
237
  }
290
-
291
238
  return androidManifest;
292
239
  }
293
240
  //# sourceMappingURL=Scheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Scheme.js","names":["withScheme","createAndroidManifestPlugin","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","data","$","category","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","hasScheme","removeScheme","dataKey"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { 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"],"mappings":"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"}
1
+ {"version":3,"file":"Scheme.js","names":["withScheme","createAndroidManifestPlugin","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","data","$","category","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","hasScheme","removeScheme","dataKey"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { 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"],"mappings":"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"}