@expo/config-plugins 5.0.3 → 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 +12 -34
  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
@@ -1 +1 @@
1
- {"version":3,"file":"BuildProperties.types.js","names":[],"sources":["../../src/utils/BuildProperties.types.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\n/**\n * Rule to transform from config to build properties\n *\n * @example\n * ```ts\n * {\n * propName: 'expo.jsEngine',\n * propValueGetter: (config) => config.android?.jsEngine ?? config.jsEngine ?? 'jsc',\n * }\n * ```\n * Will lookup a value through the `propValueGetter` and update to `android/gradle.properties` / `ios/Podfile.properties.json`\n * with the `expo.jsEngine` property name and the lookuped value.\n *\n */\n\n/**\n * Source config can be either expo config or generic config\n */\nexport type BuildPropertiesConfig = ExpoConfig | Record<string, any>;\n\nexport interface ConfigToPropertyRuleType<SourceConfigType extends BuildPropertiesConfig> {\n /** Property name in `android/gradle.properties` or `ios/Podfile.properties.json` */\n propName: string;\n\n /** Passing config and get the property value */\n propValueGetter: (config: SourceConfigType) => string | null | undefined;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"BuildProperties.types.js","names":[],"sources":["../../src/utils/BuildProperties.types.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\n/**\n * Rule to transform from config to build properties\n *\n * @example\n * ```ts\n * {\n * propName: 'expo.jsEngine',\n * propValueGetter: (config) => config.android?.jsEngine ?? config.jsEngine ?? 'hermes',\n * }\n * ```\n * Will lookup a value through the `propValueGetter` and update to `android/gradle.properties` / `ios/Podfile.properties.json`\n * with the `expo.jsEngine` property name and the lookuped value.\n *\n */\n\n/**\n * Source config can be either expo config or generic config\n */\nexport type BuildPropertiesConfig = ExpoConfig | Record<string, any>;\n\nexport interface ConfigToPropertyRuleType<SourceConfigType extends BuildPropertiesConfig> {\n /** Property name in `android/gradle.properties` or `ios/Podfile.properties.json` */\n propName: string;\n\n /** Passing config and get the property value */\n propValueGetter: (config: SourceConfigType) => string | null | undefined;\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { Android, ExpoConfig, IOS } from '@expo/config-types';
2
- export declare type ExpoConfigUpdates = Pick<ExpoConfig, 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'>;
2
+ export type ExpoConfigUpdates = Pick<ExpoConfig, 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'>;
3
3
  export declare function getExpoUpdatesPackageVersion(projectRoot: string): string | null;
4
4
  export declare function getUpdateUrl(config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>, username: string | null): string | null;
5
5
  export declare function getAppVersion(config: Pick<ExpoConfig, 'version'>): string;
@@ -24,3 +24,5 @@ export declare function getUpdatesCheckOnLaunch(config: Pick<ExpoConfigUpdates,
24
24
  export declare function getUpdatesCodeSigningCertificate(projectRoot: string, config: Pick<ExpoConfigUpdates, 'updates'>): string | undefined;
25
25
  export declare function getUpdatesCodeSigningMetadata(config: Pick<ExpoConfigUpdates, 'updates'>): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'];
26
26
  export declare function getUpdatesCodeSigningMetadataStringified(config: Pick<ExpoConfigUpdates, 'updates'>): string | undefined;
27
+ export declare function getUpdatesRequestHeaders(config: Pick<ExpoConfigUpdates, 'updates'>): NonNullable<ExpoConfigUpdates['updates']>['requestHeaders'];
28
+ export declare function getUpdatesRequestHeadersStringified(config: Pick<ExpoConfigUpdates, 'updates'>): string | undefined;
@@ -15,175 +15,132 @@ exports.getUpdatesCodeSigningCertificate = getUpdatesCodeSigningCertificate;
15
15
  exports.getUpdatesCodeSigningMetadata = getUpdatesCodeSigningMetadata;
16
16
  exports.getUpdatesCodeSigningMetadataStringified = getUpdatesCodeSigningMetadataStringified;
17
17
  exports.getUpdatesEnabled = getUpdatesEnabled;
18
+ exports.getUpdatesRequestHeaders = getUpdatesRequestHeaders;
19
+ exports.getUpdatesRequestHeadersStringified = getUpdatesRequestHeadersStringified;
18
20
  exports.getUpdatesTimeout = getUpdatesTimeout;
19
21
  exports.withRuntimeVersion = void 0;
20
-
21
22
  function _sdkRuntimeVersions() {
22
23
  const data = require("@expo/sdk-runtime-versions");
23
-
24
24
  _sdkRuntimeVersions = function () {
25
25
  return data;
26
26
  };
27
-
28
27
  return data;
29
28
  }
30
-
31
29
  function _fs() {
32
30
  const data = _interopRequireDefault(require("fs"));
33
-
34
31
  _fs = function () {
35
32
  return data;
36
33
  };
37
-
38
34
  return data;
39
35
  }
40
-
41
36
  function _getenv() {
42
37
  const data = require("getenv");
43
-
44
38
  _getenv = function () {
45
39
  return data;
46
40
  };
47
-
48
41
  return data;
49
42
  }
50
-
51
43
  function _path() {
52
44
  const data = _interopRequireDefault(require("path"));
53
-
54
45
  _path = function () {
55
46
  return data;
56
47
  };
57
-
58
48
  return data;
59
49
  }
60
-
61
50
  function _resolveFrom() {
62
51
  const data = _interopRequireDefault(require("resolve-from"));
63
-
64
52
  _resolveFrom = function () {
65
53
  return data;
66
54
  };
67
-
68
55
  return data;
69
56
  }
70
-
71
57
  function _semver() {
72
58
  const data = _interopRequireDefault(require("semver"));
73
-
74
59
  _semver = function () {
75
60
  return data;
76
61
  };
77
-
78
62
  return data;
79
63
  }
80
-
81
64
  function _() {
82
65
  const data = require("..");
83
-
84
66
  _ = function () {
85
67
  return data;
86
68
  };
87
-
88
69
  return data;
89
70
  }
90
-
91
71
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
92
-
93
72
  function getExpoUpdatesPackageVersion(projectRoot) {
94
73
  const expoUpdatesPackageJsonPath = _resolveFrom().default.silent(projectRoot, 'expo-updates/package.json');
95
-
96
74
  if (!expoUpdatesPackageJsonPath || !_fs().default.existsSync(expoUpdatesPackageJsonPath)) {
97
75
  return null;
98
76
  }
99
-
100
77
  const packageJson = JSON.parse(_fs().default.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));
101
78
  return packageJson.version;
102
79
  }
103
-
104
80
  function getUpdateUrl(config, username) {
105
81
  var _config$updates;
106
-
107
82
  if ((_config$updates = config.updates) !== null && _config$updates !== void 0 && _config$updates.url) {
108
83
  var _config$updates2;
109
-
110
84
  return (_config$updates2 = config.updates) === null || _config$updates2 === void 0 ? void 0 : _config$updates2.url;
111
85
  }
112
-
113
86
  const user = typeof config.owner === 'string' ? config.owner : username;
114
-
115
87
  if (!user) {
116
88
  return null;
117
89
  }
118
-
119
90
  return `https://exp.host/@${user}/${config.slug}`;
120
91
  }
121
-
122
92
  function getAppVersion(config) {
123
93
  var _config$version;
124
-
125
94
  return (_config$version = config.version) !== null && _config$version !== void 0 ? _config$version : '1.0.0';
126
95
  }
127
-
128
96
  function getNativeVersion(config, platform) {
129
97
  const version = _().IOSConfig.Version.getVersion(config);
130
-
131
98
  switch (platform) {
132
99
  case 'ios':
133
100
  {
134
101
  const buildNumber = _().IOSConfig.Version.getBuildNumber(config);
135
-
136
102
  return `${version}(${buildNumber})`;
137
103
  }
138
-
139
104
  case 'android':
140
105
  {
141
106
  const versionCode = _().AndroidConfig.Version.getVersionCode(config);
142
-
143
107
  return `${version}(${versionCode})`;
144
108
  }
145
-
146
109
  default:
147
110
  {
148
111
  throw new Error(`"${platform}" is not a supported platform. Choose either "ios" or "android".`);
149
112
  }
150
113
  }
151
114
  }
115
+
152
116
  /**
153
117
  * Compute runtime version policies.
154
118
  * @return an expoConfig with only string valued platform specific runtime versions.
155
119
  */
156
-
157
-
158
120
  const withRuntimeVersion = config => {
159
121
  var _config$ios, _config$android;
160
-
161
122
  if ((_config$ios = config.ios) !== null && _config$ios !== void 0 && _config$ios.runtimeVersion || config.runtimeVersion) {
162
123
  const runtimeVersion = getRuntimeVersion(config, 'ios');
163
-
164
124
  if (runtimeVersion) {
165
- config.ios = { ...config.ios,
125
+ config.ios = {
126
+ ...config.ios,
166
127
  runtimeVersion
167
128
  };
168
129
  }
169
130
  }
170
-
171
131
  if ((_config$android = config.android) !== null && _config$android !== void 0 && _config$android.runtimeVersion || config.runtimeVersion) {
172
132
  const runtimeVersion = getRuntimeVersion(config, 'android');
173
-
174
133
  if (runtimeVersion) {
175
- config.android = { ...config.android,
134
+ config.android = {
135
+ ...config.android,
176
136
  runtimeVersion
177
137
  };
178
138
  }
179
139
  }
180
-
181
140
  delete config.runtimeVersion;
182
141
  return config;
183
142
  };
184
-
185
143
  exports.withRuntimeVersion = withRuntimeVersion;
186
-
187
144
  function getRuntimeVersionNullable(...[config, platform]) {
188
145
  try {
189
146
  return getRuntimeVersion(config, platform);
@@ -191,20 +148,15 @@ function getRuntimeVersionNullable(...[config, platform]) {
191
148
  if ((0, _getenv().boolish)('EXPO_DEBUG', false)) {
192
149
  console.log(e);
193
150
  }
194
-
195
151
  return null;
196
152
  }
197
153
  }
198
-
199
154
  function getRuntimeVersion(config, platform) {
200
155
  var _config$platform$runt, _config$platform;
201
-
202
156
  const runtimeVersion = (_config$platform$runt = (_config$platform = config[platform]) === null || _config$platform === void 0 ? void 0 : _config$platform.runtimeVersion) !== null && _config$platform$runt !== void 0 ? _config$platform$runt : config.runtimeVersion;
203
-
204
157
  if (!runtimeVersion) {
205
158
  return null;
206
159
  }
207
-
208
160
  if (typeof runtimeVersion === 'string') {
209
161
  return runtimeVersion;
210
162
  } else if (runtimeVersion.policy === 'appVersion') {
@@ -215,77 +167,66 @@ function getRuntimeVersion(config, platform) {
215
167
  if (!config.sdkVersion) {
216
168
  throw new Error("An SDK version must be defined when using the 'sdkVersion' runtime policy.");
217
169
  }
218
-
219
170
  return (0, _sdkRuntimeVersions().getRuntimeVersionForSDKVersion)(config.sdkVersion);
220
171
  }
221
-
222
172
  throw new Error(`"${typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion}" is not a valid runtime version. getRuntimeVersion only supports a string, "sdkVersion", "appVersion", or "nativeVersion" policy.`);
223
173
  }
224
-
225
174
  function getSDKVersion(config) {
226
175
  return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;
227
176
  }
228
-
229
177
  function getUpdatesEnabled(config) {
230
178
  var _config$updates3;
231
-
232
179
  return ((_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.enabled) !== false;
233
180
  }
234
-
235
181
  function getUpdatesTimeout(config) {
236
182
  var _config$updates$fallb, _config$updates4;
237
-
238
183
  return (_config$updates$fallb = (_config$updates4 = config.updates) === null || _config$updates4 === void 0 ? void 0 : _config$updates4.fallbackToCacheTimeout) !== null && _config$updates$fallb !== void 0 ? _config$updates$fallb : 0;
239
184
  }
240
-
241
185
  function getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion) {
242
186
  var _config$updates5, _config$updates6;
243
-
244
187
  if (((_config$updates5 = config.updates) === null || _config$updates5 === void 0 ? void 0 : _config$updates5.checkAutomatically) === 'ON_ERROR_RECOVERY') {
245
188
  // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x
246
189
  if (expoUpdatesPackageVersion && _semver().default.gte(expoUpdatesPackageVersion, '0.11.0')) {
247
190
  return 'ERROR_RECOVERY_ONLY';
248
191
  }
249
-
250
192
  return 'NEVER';
251
193
  } else if (((_config$updates6 = config.updates) === null || _config$updates6 === void 0 ? void 0 : _config$updates6.checkAutomatically) === 'ON_LOAD') {
252
194
  return 'ALWAYS';
253
195
  }
254
-
255
196
  return 'ALWAYS';
256
197
  }
257
-
258
198
  function getUpdatesCodeSigningCertificate(projectRoot, config) {
259
199
  var _config$updates7;
260
-
261
200
  const codeSigningCertificatePath = (_config$updates7 = config.updates) === null || _config$updates7 === void 0 ? void 0 : _config$updates7.codeSigningCertificate;
262
-
263
201
  if (!codeSigningCertificatePath) {
264
202
  return undefined;
265
203
  }
266
-
267
204
  const finalPath = _path().default.join(projectRoot, codeSigningCertificatePath);
268
-
269
205
  if (!_fs().default.existsSync(finalPath)) {
270
206
  throw new Error(`File not found at \`updates.codeSigningCertificate\` path: ${finalPath}`);
271
207
  }
272
-
273
208
  return _fs().default.readFileSync(finalPath, 'utf8');
274
209
  }
275
-
276
210
  function getUpdatesCodeSigningMetadata(config) {
277
211
  var _config$updates8;
278
-
279
212
  return (_config$updates8 = config.updates) === null || _config$updates8 === void 0 ? void 0 : _config$updates8.codeSigningMetadata;
280
213
  }
281
-
282
214
  function getUpdatesCodeSigningMetadataStringified(config) {
283
215
  const metadata = getUpdatesCodeSigningMetadata(config);
284
-
285
216
  if (!metadata) {
286
217
  return undefined;
287
218
  }
288
-
219
+ return JSON.stringify(metadata);
220
+ }
221
+ function getUpdatesRequestHeaders(config) {
222
+ var _config$updates9;
223
+ return (_config$updates9 = config.updates) === null || _config$updates9 === void 0 ? void 0 : _config$updates9.requestHeaders;
224
+ }
225
+ function getUpdatesRequestHeadersStringified(config) {
226
+ const metadata = getUpdatesRequestHeaders(config);
227
+ if (!metadata) {
228
+ return undefined;
229
+ }
289
230
  return JSON.stringify(metadata);
290
231
  }
291
232
  //# sourceMappingURL=Updates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Updates.js","names":["getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","username","updates","url","user","owner","slug","getAppVersion","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","ios","runtimeVersion","getRuntimeVersion","android","getRuntimeVersionNullable","e","boolish","console","log","policy","sdkVersion","getRuntimeVersionForSDKVersion","stringify","getSDKVersion","getUpdatesEnabled","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","undefined","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata"],"sources":["../../src/utils/Updates.ts"],"sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport { getRuntimeVersionForSDKVersion } from '@expo/sdk-runtime-versions';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { AndroidConfig, IOSConfig } from '..';\n\nexport type ExpoConfigUpdates = Pick<\n ExpoConfig,\n 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'\n>;\n\nexport function getExpoUpdatesPackageVersion(projectRoot: string): string | null {\n const expoUpdatesPackageJsonPath = resolveFrom.silent(projectRoot, 'expo-updates/package.json');\n if (!expoUpdatesPackageJsonPath || !fs.existsSync(expoUpdatesPackageJsonPath)) {\n return null;\n }\n const packageJson = JSON.parse(fs.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));\n return packageJson.version;\n}\n\nexport function getUpdateUrl(\n config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n username: string | null\n): string | null {\n if (config.updates?.url) {\n return config.updates?.url;\n }\n\n const user = typeof config.owner === 'string' ? config.owner : username;\n if (!user) {\n return null;\n }\n return `https://exp.host/@${user}/${config.slug}`;\n}\n\nexport function getAppVersion(config: Pick<ExpoConfig, 'version'>): string {\n return config.version ?? '1.0.0';\n}\n\nexport function getNativeVersion(\n config: Pick<ExpoConfig, 'version'> & {\n android?: Pick<Android, 'versionCode'>;\n ios?: Pick<IOS, 'buildNumber'>;\n },\n platform: 'android' | 'ios'\n): string {\n const version = IOSConfig.Version.getVersion(config);\n switch (platform) {\n case 'ios': {\n const buildNumber = IOSConfig.Version.getBuildNumber(config);\n return `${version}(${buildNumber})`;\n }\n case 'android': {\n const versionCode = AndroidConfig.Version.getVersionCode(config);\n return `${version}(${versionCode})`;\n }\n default: {\n throw new Error(\n `\"${platform}\" is not a supported platform. Choose either \"ios\" or \"android\".`\n );\n }\n }\n}\n\n/**\n * Compute runtime version policies.\n * @return an expoConfig with only string valued platform specific runtime versions.\n */\nexport const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig = (config) => {\n if (config.ios?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'ios');\n if (runtimeVersion) {\n config.ios = {\n ...config.ios,\n runtimeVersion,\n };\n }\n }\n if (config.android?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'android');\n if (runtimeVersion) {\n config.android = {\n ...config.android,\n runtimeVersion,\n };\n }\n }\n delete config.runtimeVersion;\n return config;\n};\n\nexport function getRuntimeVersionNullable(\n ...[config, platform]: Parameters<typeof getRuntimeVersion>\n): string | null {\n try {\n return getRuntimeVersion(config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport function getRuntimeVersion(\n config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {\n android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;\n ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;\n },\n platform: 'android' | 'ios'\n): string | null {\n const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n if (!runtimeVersion) {\n return null;\n }\n\n if (typeof runtimeVersion === 'string') {\n return runtimeVersion;\n } else if (runtimeVersion.policy === 'appVersion') {\n return getAppVersion(config);\n } else if (runtimeVersion.policy === 'nativeVersion') {\n return getNativeVersion(config, platform);\n } else if (runtimeVersion.policy === 'sdkVersion') {\n if (!config.sdkVersion) {\n throw new Error(\"An SDK version must be defined when using the 'sdkVersion' runtime policy.\");\n }\n return getRuntimeVersionForSDKVersion(config.sdkVersion);\n }\n\n throw new Error(\n `\"${\n typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n }\" is not a valid runtime version. getRuntimeVersion only supports a string, \"sdkVersion\", \"appVersion\", or \"nativeVersion\" policy.`\n );\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport function getUpdatesCodeSigningCertificate(\n projectRoot: string,\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const codeSigningCertificatePath = config.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return undefined;\n }\n\n const finalPath = path.join(projectRoot, codeSigningCertificatePath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`File not found at \\`updates.codeSigningCertificate\\` path: ${finalPath}`);\n }\n\n return fs.readFileSync(finalPath, 'utf8');\n}\n\nexport function getUpdatesCodeSigningMetadata(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'] {\n return config.updates?.codeSigningMetadata;\n}\n\nexport function getUpdatesCodeSigningMetadataStringified(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const metadata = getUpdatesCodeSigningMetadata(config);\n if (!metadata) {\n return undefined;\n }\n\n return JSON.stringify(metadata);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Updates.js","names":["getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","username","updates","url","user","owner","slug","getAppVersion","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","ios","runtimeVersion","getRuntimeVersion","android","getRuntimeVersionNullable","e","boolish","console","log","policy","sdkVersion","getRuntimeVersionForSDKVersion","stringify","getSDKVersion","getUpdatesEnabled","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","undefined","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata","getUpdatesRequestHeaders","requestHeaders","getUpdatesRequestHeadersStringified"],"sources":["../../src/utils/Updates.ts"],"sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport { getRuntimeVersionForSDKVersion } from '@expo/sdk-runtime-versions';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { AndroidConfig, IOSConfig } from '..';\n\nexport type ExpoConfigUpdates = Pick<\n ExpoConfig,\n 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'\n>;\n\nexport function getExpoUpdatesPackageVersion(projectRoot: string): string | null {\n const expoUpdatesPackageJsonPath = resolveFrom.silent(projectRoot, 'expo-updates/package.json');\n if (!expoUpdatesPackageJsonPath || !fs.existsSync(expoUpdatesPackageJsonPath)) {\n return null;\n }\n const packageJson = JSON.parse(fs.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));\n return packageJson.version;\n}\n\nexport function getUpdateUrl(\n config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n username: string | null\n): string | null {\n if (config.updates?.url) {\n return config.updates?.url;\n }\n\n const user = typeof config.owner === 'string' ? config.owner : username;\n if (!user) {\n return null;\n }\n return `https://exp.host/@${user}/${config.slug}`;\n}\n\nexport function getAppVersion(config: Pick<ExpoConfig, 'version'>): string {\n return config.version ?? '1.0.0';\n}\n\nexport function getNativeVersion(\n config: Pick<ExpoConfig, 'version'> & {\n android?: Pick<Android, 'versionCode'>;\n ios?: Pick<IOS, 'buildNumber'>;\n },\n platform: 'android' | 'ios'\n): string {\n const version = IOSConfig.Version.getVersion(config);\n switch (platform) {\n case 'ios': {\n const buildNumber = IOSConfig.Version.getBuildNumber(config);\n return `${version}(${buildNumber})`;\n }\n case 'android': {\n const versionCode = AndroidConfig.Version.getVersionCode(config);\n return `${version}(${versionCode})`;\n }\n default: {\n throw new Error(\n `\"${platform}\" is not a supported platform. Choose either \"ios\" or \"android\".`\n );\n }\n }\n}\n\n/**\n * Compute runtime version policies.\n * @return an expoConfig with only string valued platform specific runtime versions.\n */\nexport const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig = (config) => {\n if (config.ios?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'ios');\n if (runtimeVersion) {\n config.ios = {\n ...config.ios,\n runtimeVersion,\n };\n }\n }\n if (config.android?.runtimeVersion || config.runtimeVersion) {\n const runtimeVersion = getRuntimeVersion(config, 'android');\n if (runtimeVersion) {\n config.android = {\n ...config.android,\n runtimeVersion,\n };\n }\n }\n delete config.runtimeVersion;\n return config;\n};\n\nexport function getRuntimeVersionNullable(\n ...[config, platform]: Parameters<typeof getRuntimeVersion>\n): string | null {\n try {\n return getRuntimeVersion(config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport function getRuntimeVersion(\n config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {\n android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;\n ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;\n },\n platform: 'android' | 'ios'\n): string | null {\n const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n if (!runtimeVersion) {\n return null;\n }\n\n if (typeof runtimeVersion === 'string') {\n return runtimeVersion;\n } else if (runtimeVersion.policy === 'appVersion') {\n return getAppVersion(config);\n } else if (runtimeVersion.policy === 'nativeVersion') {\n return getNativeVersion(config, platform);\n } else if (runtimeVersion.policy === 'sdkVersion') {\n if (!config.sdkVersion) {\n throw new Error(\"An SDK version must be defined when using the 'sdkVersion' runtime policy.\");\n }\n return getRuntimeVersionForSDKVersion(config.sdkVersion);\n }\n\n throw new Error(\n `\"${\n typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n }\" is not a valid runtime version. getRuntimeVersion only supports a string, \"sdkVersion\", \"appVersion\", or \"nativeVersion\" policy.`\n );\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport function getUpdatesCodeSigningCertificate(\n projectRoot: string,\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const codeSigningCertificatePath = config.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return undefined;\n }\n\n const finalPath = path.join(projectRoot, codeSigningCertificatePath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`File not found at \\`updates.codeSigningCertificate\\` path: ${finalPath}`);\n }\n\n return fs.readFileSync(finalPath, 'utf8');\n}\n\nexport function getUpdatesCodeSigningMetadata(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['codeSigningMetadata'] {\n return config.updates?.codeSigningMetadata;\n}\n\nexport function getUpdatesCodeSigningMetadataStringified(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const metadata = getUpdatesCodeSigningMetadata(config);\n if (!metadata) {\n return undefined;\n }\n\n return JSON.stringify(metadata);\n}\n\nexport function getUpdatesRequestHeaders(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): NonNullable<ExpoConfigUpdates['updates']>['requestHeaders'] {\n return config.updates?.requestHeaders;\n}\n\nexport function getUpdatesRequestHeadersStringified(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): string | undefined {\n const metadata = getUpdatesRequestHeaders(config);\n if (!metadata) {\n return undefined;\n }\n\n return JSON.stringify(metadata);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare type XMLValue = boolean | number | string | null | XMLArray | XMLObject;
1
+ export type XMLValue = boolean | number | string | null | XMLArray | XMLObject;
2
2
  export interface XMLArray extends Array<XMLValue> {
3
3
  }
4
4
  export interface XMLObject {
@@ -9,49 +9,35 @@ exports.parseXMLAsync = parseXMLAsync;
9
9
  exports.readXMLAsync = readXMLAsync;
10
10
  exports.unescapeAndroidString = unescapeAndroidString;
11
11
  exports.writeXMLAsync = writeXMLAsync;
12
-
13
12
  function _fs() {
14
13
  const data = _interopRequireDefault(require("fs"));
15
-
16
14
  _fs = function () {
17
15
  return data;
18
16
  };
19
-
20
17
  return data;
21
18
  }
22
-
23
19
  function _os() {
24
20
  const data = require("os");
25
-
26
21
  _os = function () {
27
22
  return data;
28
23
  };
29
-
30
24
  return data;
31
25
  }
32
-
33
26
  function _path() {
34
27
  const data = _interopRequireDefault(require("path"));
35
-
36
28
  _path = function () {
37
29
  return data;
38
30
  };
39
-
40
31
  return data;
41
32
  }
42
-
43
33
  function _xml2js() {
44
34
  const data = require("xml2js");
45
-
46
35
  _xml2js = function () {
47
36
  return data;
48
37
  };
49
-
50
38
  return data;
51
39
  }
52
-
53
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
-
55
41
  async function writeXMLAsync(options) {
56
42
  const xml = format(options.xml);
57
43
  await _fs().default.promises.mkdir(_path().default.dirname(options.path), {
@@ -59,78 +45,65 @@ async function writeXMLAsync(options) {
59
45
  });
60
46
  await _fs().default.promises.writeFile(options.path, xml);
61
47
  }
62
-
63
48
  async function readXMLAsync(options) {
64
49
  var _manifest$resources;
65
-
66
50
  let contents = '';
67
-
68
51
  try {
69
52
  contents = await _fs().default.promises.readFile(options.path, {
70
53
  encoding: 'utf8',
71
54
  flag: 'r'
72
55
  });
73
- } catch {// catch and use fallback
56
+ } catch {
57
+ // catch and use fallback
74
58
  }
75
-
76
59
  const parser = new (_xml2js().Parser)();
77
- const manifest = await parser.parseStringPromise(contents || options.fallback || ''); // For strings.xml
60
+ const manifest = await parser.parseStringPromise(contents || options.fallback || '');
78
61
 
62
+ // For strings.xml
79
63
  if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources = manifest.resources) === null || _manifest$resources === void 0 ? void 0 : _manifest$resources.string)) {
80
64
  for (const string of manifest === null || manifest === void 0 ? void 0 : (_manifest$resources2 = manifest.resources) === null || _manifest$resources2 === void 0 ? void 0 : _manifest$resources2.string) {
81
65
  var _manifest$resources2;
82
-
83
66
  if (string.$.translatable === 'false' || string.$.translatable === false) {
84
67
  continue;
85
68
  }
86
-
87
69
  string._ = unescapeAndroidString(string._);
88
70
  }
89
71
  }
90
-
91
72
  return manifest;
92
73
  }
93
-
94
74
  async function parseXMLAsync(contents) {
95
75
  const xml = await new (_xml2js().Parser)().parseStringPromise(contents);
96
76
  return xml;
97
77
  }
98
-
99
78
  const stringTimesN = (n, char) => Array(n + 1).join(char);
100
-
101
79
  function format(manifest, {
102
80
  indentLevel = 2,
103
81
  newline = _os().EOL
104
82
  } = {}) {
105
83
  let xmlInput;
106
-
107
84
  if (typeof manifest === 'string') {
108
85
  xmlInput = manifest;
109
86
  } else if (manifest.toString) {
110
87
  var _manifest$resources3;
111
-
112
88
  const builder = new (_xml2js().Builder)({
113
89
  headless: true
114
- }); // For strings.xml
90
+ });
115
91
 
92
+ // For strings.xml
116
93
  if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources3 = manifest.resources) === null || _manifest$resources3 === void 0 ? void 0 : _manifest$resources3.string)) {
117
94
  for (const string of manifest === null || manifest === void 0 ? void 0 : (_manifest$resources4 = manifest.resources) === null || _manifest$resources4 === void 0 ? void 0 : _manifest$resources4.string) {
118
95
  var _manifest$resources4;
119
-
120
96
  if (string.$.translatable === 'false' || string.$.translatable === false) {
121
97
  continue;
122
98
  }
123
-
124
99
  string._ = escapeAndroidString(string._);
125
100
  }
126
101
  }
127
-
128
102
  xmlInput = builder.buildObject(manifest);
129
103
  return xmlInput;
130
104
  } else {
131
105
  throw new Error(`Invalid XML value passed in: ${manifest}`);
132
106
  }
133
-
134
107
  const indentString = stringTimesN(indentLevel, ' ');
135
108
  let formatted = '';
136
109
  const regex = /(>)(<)(\/*)/g;
@@ -138,7 +111,6 @@ function format(manifest, {
138
111
  let pad = 0;
139
112
  xml.split(/\r?\n/).map(line => line.trim()).forEach(line => {
140
113
  let indent = 0;
141
-
142
114
  if (line.match(/.+<\/\w[^>]*>$/)) {
143
115
  indent = 0;
144
116
  } else if (line.match(/^<\/\w/)) {
@@ -150,20 +122,18 @@ function format(manifest, {
150
122
  } else {
151
123
  indent = 0;
152
124
  }
153
-
154
125
  const padding = stringTimesN(pad, indentString);
155
126
  formatted += padding + line + newline;
156
127
  pad += indent;
157
128
  });
158
129
  return formatted.trim();
159
130
  }
131
+
160
132
  /**
161
133
  * Escapes Android string literals, specifically characters `"`, `'`, `\`, `\n`, `\r`, `\t`
162
134
  *
163
135
  * @param value unescaped Android XML string literal.
164
136
  */
165
-
166
-
167
137
  function escapeAndroidString(value) {
168
138
  value = value.replace(/[\n\r\t'"@]/g, m => {
169
139
  switch (m) {
@@ -171,28 +141,21 @@ function escapeAndroidString(value) {
171
141
  case "'":
172
142
  case '@':
173
143
  return '\\' + m;
174
-
175
144
  case '\n':
176
145
  return '\\n';
177
-
178
146
  case '\r':
179
147
  return '\\r';
180
-
181
148
  case '\t':
182
149
  return '\\t';
183
-
184
150
  default:
185
151
  throw new Error(`Cannot escape unhandled XML character: ${m}`);
186
152
  }
187
153
  });
188
-
189
154
  if (value.match(/(^\s|\s$)/)) {
190
155
  value = '"' + value + '"';
191
156
  }
192
-
193
157
  return value;
194
158
  }
195
-
196
159
  function unescapeAndroidString(value) {
197
160
  return value.replace(/\\(.)/g, '$1');
198
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XML.js","names":["writeXMLAsync","options","xml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","Array","isArray","resources","string","$","translatable","_","unescapeAndroidString","parseXMLAsync","stringTimesN","n","char","join","indentLevel","newline","EOL","xmlInput","toString","builder","Builder","headless","escapeAndroidString","buildObject","Error","indentString","formatted","regex","replace","pad","split","map","line","trim","forEach","indent","match","padding","value","m"],"sources":["../../src/utils/XML.ts"],"sourcesContent":["import fs from 'fs';\nimport { EOL } from 'os';\nimport path from 'path';\nimport { Builder, Parser } from 'xml2js';\n\nexport type XMLValue = boolean | number | string | null | XMLArray | XMLObject;\n\nexport interface XMLArray extends Array<XMLValue> {}\n\nexport interface XMLObject {\n [key: string]: XMLValue | undefined;\n}\n\nexport async function writeXMLAsync(options: { path: string; xml: any }): Promise<void> {\n const xml = format(options.xml);\n await fs.promises.mkdir(path.dirname(options.path), { recursive: true });\n await fs.promises.writeFile(options.path, xml);\n}\n\nexport async function readXMLAsync(options: {\n path: string;\n fallback?: string | null;\n}): Promise<XMLObject> {\n let contents: string = '';\n try {\n contents = await fs.promises.readFile(options.path, { encoding: 'utf8', flag: 'r' });\n } catch {\n // catch and use fallback\n }\n const parser = new Parser();\n const manifest = await parser.parseStringPromise(contents || options.fallback || '');\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = unescapeAndroidString(string._);\n }\n }\n\n return manifest;\n}\n\nexport async function parseXMLAsync(contents: string): Promise<XMLObject> {\n const xml = await new Parser().parseStringPromise(contents);\n return xml;\n}\n\nconst stringTimesN = (n: number, char: string) => Array(n + 1).join(char);\n\nexport function format(manifest: any, { indentLevel = 2, newline = EOL } = {}): string {\n let xmlInput: string;\n if (typeof manifest === 'string') {\n xmlInput = manifest;\n } else if (manifest.toString) {\n const builder = new Builder({\n headless: true,\n });\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = escapeAndroidString(string._);\n }\n }\n\n xmlInput = builder.buildObject(manifest);\n\n return xmlInput;\n } else {\n throw new Error(`Invalid XML value passed in: ${manifest}`);\n }\n const indentString = stringTimesN(indentLevel, ' ');\n\n let formatted = '';\n const regex = /(>)(<)(\\/*)/g;\n const xml = xmlInput.replace(regex, `$1${newline}$2$3`);\n let pad = 0;\n xml\n .split(/\\r?\\n/)\n .map((line: string) => line.trim())\n .forEach((line: string) => {\n let indent = 0;\n if (line.match(/.+<\\/\\w[^>]*>$/)) {\n indent = 0;\n } else if (line.match(/^<\\/\\w/)) {\n if (pad !== 0) {\n pad -= 1;\n }\n } else if (line.match(/^<\\w([^>]*[^/])?>.*$/)) {\n indent = 1;\n } else {\n indent = 0;\n }\n\n const padding = stringTimesN(pad, indentString);\n formatted += padding + line + newline;\n pad += indent;\n });\n\n return formatted.trim();\n}\n\n/**\n * Escapes Android string literals, specifically characters `\"`, `'`, `\\`, `\\n`, `\\r`, `\\t`\n *\n * @param value unescaped Android XML string literal.\n */\nexport function escapeAndroidString(value: string): string {\n value = value.replace(/[\\n\\r\\t'\"@]/g, (m) => {\n switch (m) {\n case '\"':\n case \"'\":\n case '@':\n return '\\\\' + m;\n case '\\n':\n return '\\\\n';\n case '\\r':\n return '\\\\r';\n case '\\t':\n return '\\\\t';\n default:\n throw new Error(`Cannot escape unhandled XML character: ${m}`);\n }\n });\n if (value.match(/(^\\s|\\s$)/)) {\n value = '\"' + value + '\"';\n }\n return value;\n}\n\nexport function unescapeAndroidString(value: string): string {\n return value.replace(/\\\\(.)/g, '$1');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"XML.js","names":["writeXMLAsync","options","xml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","Array","isArray","resources","string","$","translatable","_","unescapeAndroidString","parseXMLAsync","stringTimesN","n","char","join","indentLevel","newline","EOL","xmlInput","toString","builder","Builder","headless","escapeAndroidString","buildObject","Error","indentString","formatted","regex","replace","pad","split","map","line","trim","forEach","indent","match","padding","value","m"],"sources":["../../src/utils/XML.ts"],"sourcesContent":["import fs from 'fs';\nimport { EOL } from 'os';\nimport path from 'path';\nimport { Builder, Parser } from 'xml2js';\n\nexport type XMLValue = boolean | number | string | null | XMLArray | XMLObject;\n\nexport interface XMLArray extends Array<XMLValue> {}\n\nexport interface XMLObject {\n [key: string]: XMLValue | undefined;\n}\n\nexport async function writeXMLAsync(options: { path: string; xml: any }): Promise<void> {\n const xml = format(options.xml);\n await fs.promises.mkdir(path.dirname(options.path), { recursive: true });\n await fs.promises.writeFile(options.path, xml);\n}\n\nexport async function readXMLAsync(options: {\n path: string;\n fallback?: string | null;\n}): Promise<XMLObject> {\n let contents: string = '';\n try {\n contents = await fs.promises.readFile(options.path, { encoding: 'utf8', flag: 'r' });\n } catch {\n // catch and use fallback\n }\n const parser = new Parser();\n const manifest = await parser.parseStringPromise(contents || options.fallback || '');\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = unescapeAndroidString(string._);\n }\n }\n\n return manifest;\n}\n\nexport async function parseXMLAsync(contents: string): Promise<XMLObject> {\n const xml = await new Parser().parseStringPromise(contents);\n return xml;\n}\n\nconst stringTimesN = (n: number, char: string) => Array(n + 1).join(char);\n\nexport function format(manifest: any, { indentLevel = 2, newline = EOL } = {}): string {\n let xmlInput: string;\n if (typeof manifest === 'string') {\n xmlInput = manifest;\n } else if (manifest.toString) {\n const builder = new Builder({\n headless: true,\n });\n\n // For strings.xml\n if (Array.isArray(manifest?.resources?.string)) {\n for (const string of manifest?.resources?.string) {\n if (string.$.translatable === 'false' || string.$.translatable === false) {\n continue;\n }\n string._ = escapeAndroidString(string._);\n }\n }\n\n xmlInput = builder.buildObject(manifest);\n\n return xmlInput;\n } else {\n throw new Error(`Invalid XML value passed in: ${manifest}`);\n }\n const indentString = stringTimesN(indentLevel, ' ');\n\n let formatted = '';\n const regex = /(>)(<)(\\/*)/g;\n const xml = xmlInput.replace(regex, `$1${newline}$2$3`);\n let pad = 0;\n xml\n .split(/\\r?\\n/)\n .map((line: string) => line.trim())\n .forEach((line: string) => {\n let indent = 0;\n if (line.match(/.+<\\/\\w[^>]*>$/)) {\n indent = 0;\n } else if (line.match(/^<\\/\\w/)) {\n if (pad !== 0) {\n pad -= 1;\n }\n } else if (line.match(/^<\\w([^>]*[^/])?>.*$/)) {\n indent = 1;\n } else {\n indent = 0;\n }\n\n const padding = stringTimesN(pad, indentString);\n formatted += padding + line + newline;\n pad += indent;\n });\n\n return formatted.trim();\n}\n\n/**\n * Escapes Android string literals, specifically characters `\"`, `'`, `\\`, `\\n`, `\\r`, `\\t`\n *\n * @param value unescaped Android XML string literal.\n */\nexport function escapeAndroidString(value: string): string {\n value = value.replace(/[\\n\\r\\t'\"@]/g, (m) => {\n switch (m) {\n case '\"':\n case \"'\":\n case '@':\n return '\\\\' + m;\n case '\\n':\n return '\\\\n';\n case '\\r':\n return '\\\\r';\n case '\\t':\n return '\\\\t';\n default:\n throw new Error(`Cannot escape unhandled XML character: ${m}`);\n }\n });\n if (value.match(/(^\\s|\\s$)/)) {\n value = '\"' + value + '\"';\n }\n return value;\n}\n\nexport function unescapeAndroidString(value: string): string {\n return value.replace(/\\\\(.)/g, '$1');\n}\n"],"mappings":";;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAyC;AAUlC,eAAeA,aAAa,CAACC,OAAmC,EAAiB;EACtF,MAAMC,GAAG,GAAGC,MAAM,CAACF,OAAO,CAACC,GAAG,CAAC;EAC/B,MAAME,aAAE,CAACC,QAAQ,CAACC,KAAK,CAACC,eAAI,CAACC,OAAO,CAACP,OAAO,CAACM,IAAI,CAAC,EAAE;IAAEE,SAAS,EAAE;EAAK,CAAC,CAAC;EACxE,MAAML,aAAE,CAACC,QAAQ,CAACK,SAAS,CAACT,OAAO,CAACM,IAAI,EAAEL,GAAG,CAAC;AAChD;AAEO,eAAeS,YAAY,CAACV,OAGlC,EAAsB;EAAA;EACrB,IAAIW,QAAgB,GAAG,EAAE;EACzB,IAAI;IACFA,QAAQ,GAAG,MAAMR,aAAE,CAACC,QAAQ,CAACQ,QAAQ,CAACZ,OAAO,CAACM,IAAI,EAAE;MAAEO,QAAQ,EAAE,MAAM;MAAEC,IAAI,EAAE;IAAI,CAAC,CAAC;EACtF,CAAC,CAAC,MAAM;IACN;EAAA;EAEF,MAAMC,MAAM,GAAG,KAAIC,gBAAM,GAAE;EAC3B,MAAMC,QAAQ,GAAG,MAAMF,MAAM,CAACG,kBAAkB,CAACP,QAAQ,IAAIX,OAAO,CAACmB,QAAQ,IAAI,EAAE,CAAC;;EAEpF;EACA,IAAIC,KAAK,CAACC,OAAO,CAACJ,QAAQ,aAARA,QAAQ,8CAARA,QAAQ,CAAEK,SAAS,wDAAnB,oBAAqBC,MAAM,CAAC,EAAE;IAC9C,KAAK,MAAMA,MAAM,IAAIN,QAAQ,aAARA,QAAQ,+CAARA,QAAQ,CAAEK,SAAS,yDAAnB,qBAAqBC,MAAM,EAAE;MAAA;MAChD,IAAIA,MAAM,CAACC,CAAC,CAACC,YAAY,KAAK,OAAO,IAAIF,MAAM,CAACC,CAAC,CAACC,YAAY,KAAK,KAAK,EAAE;QACxE;MACF;MACAF,MAAM,CAACG,CAAC,GAAGC,qBAAqB,CAACJ,MAAM,CAACG,CAAC,CAAC;IAC5C;EACF;EAEA,OAAOT,QAAQ;AACjB;AAEO,eAAeW,aAAa,CAACjB,QAAgB,EAAsB;EACxE,MAAMV,GAAG,GAAG,MAAM,KAAIe,gBAAM,GAAE,CAACE,kBAAkB,CAACP,QAAQ,CAAC;EAC3D,OAAOV,GAAG;AACZ;AAEA,MAAM4B,YAAY,GAAG,CAACC,CAAS,EAAEC,IAAY,KAAKX,KAAK,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,IAAI,CAACD,IAAI,CAAC;AAElE,SAAS7B,MAAM,CAACe,QAAa,EAAE;EAAEgB,WAAW,GAAG,CAAC;EAAEC,OAAO,GAAGC;AAAI,CAAC,GAAG,CAAC,CAAC,EAAU;EACrF,IAAIC,QAAgB;EACpB,IAAI,OAAOnB,QAAQ,KAAK,QAAQ,EAAE;IAChCmB,QAAQ,GAAGnB,QAAQ;EACrB,CAAC,MAAM,IAAIA,QAAQ,CAACoB,QAAQ,EAAE;IAAA;IAC5B,MAAMC,OAAO,GAAG,KAAIC,iBAAO,EAAC;MAC1BC,QAAQ,EAAE;IACZ,CAAC,CAAC;;IAEF;IACA,IAAIpB,KAAK,CAACC,OAAO,CAACJ,QAAQ,aAARA,QAAQ,+CAARA,QAAQ,CAAEK,SAAS,yDAAnB,qBAAqBC,MAAM,CAAC,EAAE;MAC9C,KAAK,MAAMA,MAAM,IAAIN,QAAQ,aAARA,QAAQ,+CAARA,QAAQ,CAAEK,SAAS,yDAAnB,qBAAqBC,MAAM,EAAE;QAAA;QAChD,IAAIA,MAAM,CAACC,CAAC,CAACC,YAAY,KAAK,OAAO,IAAIF,MAAM,CAACC,CAAC,CAACC,YAAY,KAAK,KAAK,EAAE;UACxE;QACF;QACAF,MAAM,CAACG,CAAC,GAAGe,mBAAmB,CAAClB,MAAM,CAACG,CAAC,CAAC;MAC1C;IACF;IAEAU,QAAQ,GAAGE,OAAO,CAACI,WAAW,CAACzB,QAAQ,CAAC;IAExC,OAAOmB,QAAQ;EACjB,CAAC,MAAM;IACL,MAAM,IAAIO,KAAK,CAAE,gCAA+B1B,QAAS,EAAC,CAAC;EAC7D;EACA,MAAM2B,YAAY,GAAGf,YAAY,CAACI,WAAW,EAAE,GAAG,CAAC;EAEnD,IAAIY,SAAS,GAAG,EAAE;EAClB,MAAMC,KAAK,GAAG,cAAc;EAC5B,MAAM7C,GAAG,GAAGmC,QAAQ,CAACW,OAAO,CAACD,KAAK,EAAG,KAAIZ,OAAQ,MAAK,CAAC;EACvD,IAAIc,GAAG,GAAG,CAAC;EACX/C,GAAG,CACAgD,KAAK,CAAC,OAAO,CAAC,CACdC,GAAG,CAAEC,IAAY,IAAKA,IAAI,CAACC,IAAI,EAAE,CAAC,CAClCC,OAAO,CAAEF,IAAY,IAAK;IACzB,IAAIG,MAAM,GAAG,CAAC;IACd,IAAIH,IAAI,CAACI,KAAK,CAAC,gBAAgB,CAAC,EAAE;MAChCD,MAAM,GAAG,CAAC;IACZ,CAAC,MAAM,IAAIH,IAAI,CAACI,KAAK,CAAC,QAAQ,CAAC,EAAE;MAC/B,IAAIP,GAAG,KAAK,CAAC,EAAE;QACbA,GAAG,IAAI,CAAC;MACV;IACF,CAAC,MAAM,IAAIG,IAAI,CAACI,KAAK,CAAC,sBAAsB,CAAC,EAAE;MAC7CD,MAAM,GAAG,CAAC;IACZ,CAAC,MAAM;MACLA,MAAM,GAAG,CAAC;IACZ;IAEA,MAAME,OAAO,GAAG3B,YAAY,CAACmB,GAAG,EAAEJ,YAAY,CAAC;IAC/CC,SAAS,IAAIW,OAAO,GAAGL,IAAI,GAAGjB,OAAO;IACrCc,GAAG,IAAIM,MAAM;EACf,CAAC,CAAC;EAEJ,OAAOT,SAAS,CAACO,IAAI,EAAE;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASX,mBAAmB,CAACgB,KAAa,EAAU;EACzDA,KAAK,GAAGA,KAAK,CAACV,OAAO,CAAC,cAAc,EAAGW,CAAC,IAAK;IAC3C,QAAQA,CAAC;MACP,KAAK,GAAG;MACR,KAAK,GAAG;MACR,KAAK,GAAG;QACN,OAAO,IAAI,GAAGA,CAAC;MACjB,KAAK,IAAI;QACP,OAAO,KAAK;MACd,KAAK,IAAI;QACP,OAAO,KAAK;MACd,KAAK,IAAI;QACP,OAAO,KAAK;MACd;QACE,MAAM,IAAIf,KAAK,CAAE,0CAAyCe,CAAE,EAAC,CAAC;IAAC;EAErE,CAAC,CAAC;EACF,IAAID,KAAK,CAACF,KAAK,CAAC,WAAW,CAAC,EAAE;IAC5BE,KAAK,GAAG,GAAG,GAAGA,KAAK,GAAG,GAAG;EAC3B;EACA,OAAOA,KAAK;AACd;AAEO,SAAS9B,qBAAqB,CAAC8B,KAAa,EAAU;EAC3D,OAAOA,KAAK,CAACV,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACtC"}