@expo/config-plugins 7.9.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/build/android/AllowBackup.js +4 -6
  2. package/build/android/AllowBackup.js.map +1 -1
  3. package/build/android/BuildProperties.js +4 -8
  4. package/build/android/BuildProperties.js.map +1 -1
  5. package/build/android/Colors.js +3 -6
  6. package/build/android/Colors.js.map +1 -1
  7. package/build/android/EasBuild.js +2 -2
  8. package/build/android/EasBuild.js.map +1 -1
  9. package/build/android/EasBuildGradleScript.js +1 -2
  10. package/build/android/EasBuildGradleScript.js.map +1 -1
  11. package/build/android/GoogleMapsApiKey.js +2 -4
  12. package/build/android/GoogleMapsApiKey.js.map +1 -1
  13. package/build/android/GoogleServices.js +1 -2
  14. package/build/android/GoogleServices.js.map +1 -1
  15. package/build/android/IntentFilters.js +6 -12
  16. package/build/android/IntentFilters.js.map +1 -1
  17. package/build/android/Manifest.d.ts +1 -0
  18. package/build/android/Manifest.js +13 -22
  19. package/build/android/Manifest.js.map +1 -1
  20. package/build/android/Name.js +2 -4
  21. package/build/android/Name.js.map +1 -1
  22. package/build/android/Orientation.js +2 -4
  23. package/build/android/Orientation.js.map +1 -1
  24. package/build/android/Package.js +2 -4
  25. package/build/android/Package.js.map +1 -1
  26. package/build/android/Paths.js +2 -2
  27. package/build/android/Paths.js.map +1 -1
  28. package/build/android/Permissions.js +4 -8
  29. package/build/android/Permissions.js.map +1 -1
  30. package/build/android/PrimaryColor.js +1 -2
  31. package/build/android/PrimaryColor.js.map +1 -1
  32. package/build/android/Resources.js +8 -6
  33. package/build/android/Resources.js.map +1 -1
  34. package/build/android/Scheme.js +17 -40
  35. package/build/android/Scheme.js.map +1 -1
  36. package/build/android/StatusBar.js +3 -6
  37. package/build/android/StatusBar.js.map +1 -1
  38. package/build/android/Strings.js +2 -4
  39. package/build/android/Strings.js.map +1 -1
  40. package/build/android/Styles.js +3 -4
  41. package/build/android/Styles.js.map +1 -1
  42. package/build/android/Updates.d.ts +0 -8
  43. package/build/android/Updates.js +6 -91
  44. package/build/android/Updates.js.map +1 -1
  45. package/build/android/Version.js +3 -6
  46. package/build/android/Version.js.map +1 -1
  47. package/build/android/WindowSoftInputMode.js +2 -3
  48. package/build/android/WindowSoftInputMode.js.map +1 -1
  49. package/build/android/index.js +2 -2
  50. package/build/android/index.js.map +1 -1
  51. package/build/index.js +3 -4
  52. package/build/index.js.map +1 -1
  53. package/build/ios/Bitcode.js +1 -2
  54. package/build/ios/Bitcode.js.map +1 -1
  55. package/build/ios/BuildProperties.js +4 -8
  56. package/build/ios/BuildProperties.js.map +1 -1
  57. package/build/ios/BuildScheme.js +7 -12
  58. package/build/ios/BuildScheme.js.map +1 -1
  59. package/build/ios/BundleIdentifier.js +3 -5
  60. package/build/ios/BundleIdentifier.js.map +1 -1
  61. package/build/ios/DeviceFamily.js +5 -8
  62. package/build/ios/DeviceFamily.js.map +1 -1
  63. package/build/ios/Entitlements.js +3 -6
  64. package/build/ios/Entitlements.js.map +1 -1
  65. package/build/ios/Google.js +2 -4
  66. package/build/ios/Google.js.map +1 -1
  67. package/build/ios/IosConfig.types.d.ts +3 -1
  68. package/build/ios/IosConfig.types.js.map +1 -1
  69. package/build/ios/Locales.js +3 -4
  70. package/build/ios/Locales.js.map +1 -1
  71. package/build/ios/Maps.js +2 -4
  72. package/build/ios/Maps.js.map +1 -1
  73. package/build/ios/Name.js +3 -6
  74. package/build/ios/Name.js.map +1 -1
  75. package/build/ios/Orientation.js +4 -8
  76. package/build/ios/Orientation.js.map +1 -1
  77. package/build/ios/Paths.js +2 -2
  78. package/build/ios/Paths.js.map +1 -1
  79. package/build/ios/PrivacyInfo.js +7 -11
  80. package/build/ios/PrivacyInfo.js.map +1 -1
  81. package/build/ios/RequiresFullScreen.js +2 -4
  82. package/build/ios/RequiresFullScreen.js.map +1 -1
  83. package/build/ios/Scheme.js +6 -9
  84. package/build/ios/Scheme.js.map +1 -1
  85. package/build/ios/Swift.js +2 -2
  86. package/build/ios/Swift.js.map +1 -1
  87. package/build/ios/Target.js +4 -5
  88. package/build/ios/Target.js.map +1 -1
  89. package/build/ios/Updates.d.ts +0 -16
  90. package/build/ios/Updates.js +6 -95
  91. package/build/ios/Updates.js.map +1 -1
  92. package/build/ios/UsesNonExemptEncryption.js +2 -4
  93. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  94. package/build/ios/Version.js +3 -6
  95. package/build/ios/Version.js.map +1 -1
  96. package/build/ios/codeMod.js +1 -2
  97. package/build/ios/codeMod.js.map +1 -1
  98. package/build/ios/index.js +2 -2
  99. package/build/ios/index.js.map +1 -1
  100. package/build/ios/utils/Xcodeproj.js +15 -21
  101. package/build/ios/utils/Xcodeproj.js.map +1 -1
  102. package/build/ios/utils/getInfoPlistPath.js +1 -2
  103. package/build/ios/utils/getInfoPlistPath.js.map +1 -1
  104. package/build/plugins/createBaseMod.js +3 -4
  105. package/build/plugins/createBaseMod.js.map +1 -1
  106. package/build/plugins/ios-plugins.js +1 -2
  107. package/build/plugins/ios-plugins.js.map +1 -1
  108. package/build/plugins/mod-compiler.js +6 -10
  109. package/build/plugins/mod-compiler.js.map +1 -1
  110. package/build/plugins/withAndroidBaseMods.js +4 -6
  111. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  112. package/build/plugins/withIosBaseMods.js +4 -5
  113. package/build/plugins/withIosBaseMods.js.map +1 -1
  114. package/build/plugins/withMod.js +2 -4
  115. package/build/plugins/withMod.js.map +1 -1
  116. package/build/plugins/withStaticPlugin.js +2 -4
  117. package/build/plugins/withStaticPlugin.js.map +1 -1
  118. package/build/utils/Updates.d.ts +5 -0
  119. package/build/utils/Updates.js +34 -37
  120. package/build/utils/Updates.js.map +1 -1
  121. package/build/utils/XML.js +4 -8
  122. package/build/utils/XML.js.map +1 -1
  123. package/build/utils/generateCode.js +2 -2
  124. package/build/utils/generateCode.js.map +1 -1
  125. package/build/utils/history.js +1 -2
  126. package/build/utils/history.js.map +1 -1
  127. package/build/utils/modules.js +2 -4
  128. package/build/utils/modules.js.map +1 -1
  129. package/build/utils/plugin-resolver.js +5 -7
  130. package/build/utils/plugin-resolver.js.map +1 -1
  131. package/package.json +4 -6
@@ -1,5 +1,6 @@
1
1
  import { Android, ExpoConfig, IOS } from '@expo/config-types';
2
2
  export type ExpoConfigUpdates = Pick<ExpoConfig, 'sdkVersion' | 'owner' | 'runtimeVersion' | 'updates' | 'slug'>;
3
+ export declare const FINGERPRINT_RUNTIME_VERSION_SENTINEL = "file:fingerprint";
3
4
  export declare function getExpoUpdatesPackageVersion(projectRoot: string): string | null;
4
5
  export declare function getUpdateUrl(config: Pick<ExpoConfigUpdates, 'updates'>): string | null;
5
6
  export declare function getAppVersion(config: Pick<ExpoConfig, 'version'>): string;
@@ -12,6 +13,10 @@ export declare function getRuntimeVersionAsync(projectRoot: string, config: Pick
12
13
  android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;
13
14
  ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;
14
15
  }, platform: 'android' | 'ios'): Promise<string | null>;
16
+ export declare function resolveRuntimeVersionPolicyAsync(policy: 'appVersion' | 'nativeVersion' | 'sdkVersion', config: Pick<ExpoConfig, 'version' | 'sdkVersion'> & {
17
+ android?: Pick<Android, 'versionCode'>;
18
+ ios?: Pick<IOS, 'buildNumber'>;
19
+ }, platform: 'android' | 'ios'): Promise<string>;
15
20
  export declare function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null;
16
21
  export declare function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean;
17
22
  export declare function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.FINGERPRINT_RUNTIME_VERSION_SENTINEL = void 0;
6
7
  exports.getAppVersion = getAppVersion;
7
8
  exports.getExpoUpdatesPackageVersion = getExpoUpdatesPackageVersion;
8
9
  exports.getNativeVersion = getNativeVersion;
@@ -18,13 +19,7 @@ exports.getUpdatesEnabled = getUpdatesEnabled;
18
19
  exports.getUpdatesRequestHeaders = getUpdatesRequestHeaders;
19
20
  exports.getUpdatesRequestHeadersStringified = getUpdatesRequestHeadersStringified;
20
21
  exports.getUpdatesTimeout = getUpdatesTimeout;
21
- function Fingerprint() {
22
- const data = _interopRequireWildcard(require("@expo/fingerprint"));
23
- Fingerprint = function () {
24
- return data;
25
- };
26
- return data;
27
- }
22
+ exports.resolveRuntimeVersionPolicyAsync = resolveRuntimeVersionPolicyAsync;
28
23
  function _sdkRuntimeVersions() {
29
24
  const data = require("@expo/sdk-runtime-versions");
30
25
  _sdkRuntimeVersions = function () {
@@ -75,8 +70,7 @@ function _() {
75
70
  return data;
76
71
  }
77
72
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
78
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
79
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
73
+ const FINGERPRINT_RUNTIME_VERSION_SENTINEL = exports.FINGERPRINT_RUNTIME_VERSION_SENTINEL = 'file:fingerprint';
80
74
  function getExpoUpdatesPackageVersion(projectRoot) {
81
75
  const expoUpdatesPackageJsonPath = _resolveFrom().default.silent(projectRoot, 'expo-updates/package.json');
82
76
  if (!expoUpdatesPackageJsonPath || !_fs().default.existsSync(expoUpdatesPackageJsonPath)) {
@@ -86,12 +80,10 @@ function getExpoUpdatesPackageVersion(projectRoot) {
86
80
  return packageJson.version;
87
81
  }
88
82
  function getUpdateUrl(config) {
89
- var _config$updates$url, _config$updates;
90
- return (_config$updates$url = (_config$updates = config.updates) === null || _config$updates === void 0 ? void 0 : _config$updates.url) !== null && _config$updates$url !== void 0 ? _config$updates$url : null;
83
+ return config.updates?.url ?? null;
91
84
  }
92
85
  function getAppVersion(config) {
93
- var _config$version;
94
- return (_config$version = config.version) !== null && _config$version !== void 0 ? _config$version : '1.0.0';
86
+ return config.version ?? '1.0.0';
95
87
  }
96
88
  function getNativeVersion(config, platform) {
97
89
  const version = _().IOSConfig.Version.getVersion(config);
@@ -123,63 +115,70 @@ async function getRuntimeVersionNullableAsync(...[projectRoot, config, platform]
123
115
  }
124
116
  }
125
117
  async function getRuntimeVersionAsync(projectRoot, config, platform) {
126
- var _config$platform$runt, _config$platform;
127
- 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;
118
+ const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;
128
119
  if (!runtimeVersion) {
129
120
  return null;
130
121
  }
131
122
  if (typeof runtimeVersion === 'string') {
123
+ if (runtimeVersion === FINGERPRINT_RUNTIME_VERSION_SENTINEL) {
124
+ throw new Error(`${FINGERPRINT_RUNTIME_VERSION_SENTINEL} is a reserved value for runtime version. To use a fingerprint runtime version, use the "fingerprint" runtime version policy.`);
125
+ }
132
126
  return runtimeVersion;
133
- } else if (runtimeVersion.policy === 'appVersion') {
127
+ } else if (!runtimeVersion.policy) {
128
+ throw new Error(`"${runtimeVersion}" is not a valid runtime version. Only a string or a runtime version policy is supported.`);
129
+ } else if (runtimeVersion.policy === 'fingerprint') {
130
+ console.warn(`Use of the experimental '${runtimeVersion.policy}' runtime policy may result in unexpected system behavior.`);
131
+ return FINGERPRINT_RUNTIME_VERSION_SENTINEL;
132
+ } else {
133
+ return await resolveRuntimeVersionPolicyAsync(runtimeVersion.policy, config, platform);
134
+ }
135
+ }
136
+ async function resolveRuntimeVersionPolicyAsync(policy, config, platform) {
137
+ if (policy === 'appVersion') {
134
138
  return getAppVersion(config);
135
- } else if (runtimeVersion.policy === 'nativeVersion') {
139
+ } else if (policy === 'nativeVersion') {
136
140
  return getNativeVersion(config, platform);
137
- } else if (runtimeVersion.policy === 'sdkVersion') {
141
+ } else if (policy === 'sdkVersion') {
138
142
  if (!config.sdkVersion) {
139
143
  throw new Error("An SDK version must be defined when using the 'sdkVersion' runtime policy.");
140
144
  }
141
145
  return (0, _sdkRuntimeVersions().getRuntimeVersionForSDKVersion)(config.sdkVersion);
142
- } else if (runtimeVersion.policy === 'fingerprintExperimental') {
143
- console.warn("Use of the experimental 'fingerprintExperimental' runtime policy may result in unexpected system behavior.");
144
- return await Fingerprint().createProjectHashAsync(projectRoot);
146
+ } else {
147
+ // fingerprint is resolvable only at build time (not in config plugin).
148
+ throw new Error(`"${policy}" is not a valid runtime version policy type.`);
145
149
  }
146
- throw new Error(`"${typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion}" is not a valid runtime version. getRuntimeVersionAsync only supports a string, "sdkVersion", "appVersion", "nativeVersion" or "fingerprintExperimental" policy.`);
147
150
  }
148
151
  function getSDKVersion(config) {
149
152
  return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;
150
153
  }
151
154
  function getUpdatesEnabled(config) {
152
- var _config$updates2;
153
155
  // allow override of enabled property
154
- if (((_config$updates2 = config.updates) === null || _config$updates2 === void 0 ? void 0 : _config$updates2.enabled) !== undefined) {
156
+ if (config.updates?.enabled !== undefined) {
155
157
  return config.updates.enabled;
156
158
  }
157
159
  return getUpdateUrl(config) !== null;
158
160
  }
159
161
  function getUpdatesTimeout(config) {
160
- var _config$updates$fallb, _config$updates3;
161
- return (_config$updates$fallb = (_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.fallbackToCacheTimeout) !== null && _config$updates$fallb !== void 0 ? _config$updates$fallb : 0;
162
+ return config.updates?.fallbackToCacheTimeout ?? 0;
162
163
  }
163
164
  function getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion) {
164
- var _config$updates4, _config$updates5, _config$updates6, _config$updates7;
165
- if (((_config$updates4 = config.updates) === null || _config$updates4 === void 0 ? void 0 : _config$updates4.checkAutomatically) === 'ON_ERROR_RECOVERY') {
165
+ if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {
166
166
  // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x
167
167
  if (expoUpdatesPackageVersion && _semver().default.gte(expoUpdatesPackageVersion, '0.11.0')) {
168
168
  return 'ERROR_RECOVERY_ONLY';
169
169
  }
170
170
  return 'NEVER';
171
- } else if (((_config$updates5 = config.updates) === null || _config$updates5 === void 0 ? void 0 : _config$updates5.checkAutomatically) === 'ON_LOAD') {
171
+ } else if (config.updates?.checkAutomatically === 'ON_LOAD') {
172
172
  return 'ALWAYS';
173
- } else if (((_config$updates6 = config.updates) === null || _config$updates6 === void 0 ? void 0 : _config$updates6.checkAutomatically) === 'WIFI_ONLY') {
173
+ } else if (config.updates?.checkAutomatically === 'WIFI_ONLY') {
174
174
  return 'WIFI_ONLY';
175
- } else if (((_config$updates7 = config.updates) === null || _config$updates7 === void 0 ? void 0 : _config$updates7.checkAutomatically) === 'NEVER') {
175
+ } else if (config.updates?.checkAutomatically === 'NEVER') {
176
176
  return 'NEVER';
177
177
  }
178
178
  return 'ALWAYS';
179
179
  }
180
180
  function getUpdatesCodeSigningCertificate(projectRoot, config) {
181
- var _config$updates8;
182
- const codeSigningCertificatePath = (_config$updates8 = config.updates) === null || _config$updates8 === void 0 ? void 0 : _config$updates8.codeSigningCertificate;
181
+ const codeSigningCertificatePath = config.updates?.codeSigningCertificate;
183
182
  if (!codeSigningCertificatePath) {
184
183
  return undefined;
185
184
  }
@@ -190,8 +189,7 @@ function getUpdatesCodeSigningCertificate(projectRoot, config) {
190
189
  return _fs().default.readFileSync(finalPath, 'utf8');
191
190
  }
192
191
  function getUpdatesCodeSigningMetadata(config) {
193
- var _config$updates9;
194
- return (_config$updates9 = config.updates) === null || _config$updates9 === void 0 ? void 0 : _config$updates9.codeSigningMetadata;
192
+ return config.updates?.codeSigningMetadata;
195
193
  }
196
194
  function getUpdatesCodeSigningMetadataStringified(config) {
197
195
  const metadata = getUpdatesCodeSigningMetadata(config);
@@ -201,8 +199,7 @@ function getUpdatesCodeSigningMetadataStringified(config) {
201
199
  return JSON.stringify(metadata);
202
200
  }
203
201
  function getUpdatesRequestHeaders(config) {
204
- var _config$updates10;
205
- return (_config$updates10 = config.updates) === null || _config$updates10 === void 0 ? void 0 : _config$updates10.requestHeaders;
202
+ return config.updates?.requestHeaders;
206
203
  }
207
204
  function getUpdatesRequestHeadersStringified(config) {
208
205
  const metadata = getUpdatesRequestHeaders(config);
@@ -1 +1 @@
1
- {"version":3,"file":"Updates.js","names":["Fingerprint","data","_interopRequireWildcard","require","_sdkRuntimeVersions","_fs","_interopRequireDefault","_getenv","_path","_resolveFrom","_semver","_","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","_config$updates$url","_config$updates","updates","url","getAppVersion","_config$version","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","getRuntimeVersionNullableAsync","getRuntimeVersionAsync","e","boolish","console","log","_config$platform$runt","_config$platform","runtimeVersion","policy","sdkVersion","getRuntimeVersionForSDKVersion","warn","createProjectHashAsync","stringify","getSDKVersion","getUpdatesEnabled","_config$updates2","enabled","undefined","getUpdatesTimeout","_config$updates$fallb","_config$updates3","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","_config$updates4","_config$updates5","_config$updates6","_config$updates7","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","_config$updates8","codeSigningCertificatePath","codeSigningCertificate","finalPath","path","join","getUpdatesCodeSigningMetadata","_config$updates9","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata","getUpdatesRequestHeaders","_config$updates10","requestHeaders","getUpdatesRequestHeadersStringified"],"sources":["../../src/utils/Updates.ts"],"sourcesContent":["import { Android, ExpoConfig, IOS } from '@expo/config-types';\nimport * as Fingerprint from '@expo/fingerprint';\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(config: Pick<ExpoConfigUpdates, 'updates'>): string | null {\n return config.updates?.url ?? null;\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\nexport async function getRuntimeVersionNullableAsync(\n ...[projectRoot, config, platform]: Parameters<typeof getRuntimeVersionAsync>\n): Promise<string | null> {\n try {\n return await getRuntimeVersionAsync(projectRoot, config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport async function getRuntimeVersionAsync(\n projectRoot: string,\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): Promise<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 } else if (runtimeVersion.policy === 'fingerprintExperimental') {\n console.warn(\n \"Use of the experimental 'fingerprintExperimental' runtime policy may result in unexpected system behavior.\"\n );\n return await Fingerprint.createProjectHashAsync(projectRoot);\n }\n\n throw new Error(\n `\"${\n typeof runtimeVersion === 'object' ? JSON.stringify(runtimeVersion) : runtimeVersion\n }\" is not a valid runtime version. getRuntimeVersionAsync only supports a string, \"sdkVersion\", \"appVersion\", \"nativeVersion\" or \"fingerprintExperimental\" 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 // allow override of enabled property\n if (config.updates?.enabled !== undefined) {\n return config.updates.enabled;\n }\n\n return getUpdateUrl(config) !== null;\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' | 'WIFI_ONLY' {\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 } else if (config.updates?.checkAutomatically === 'WIFI_ONLY') {\n return 'WIFI_ONLY';\n } else if (config.updates?.checkAutomatically === 'NEVER') {\n return 'NEVER';\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
+ {"version":3,"file":"Updates.js","names":["_sdkRuntimeVersions","data","require","_fs","_interopRequireDefault","_getenv","_path","_resolveFrom","_semver","_","obj","__esModule","default","FINGERPRINT_RUNTIME_VERSION_SENTINEL","exports","getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","getUpdateUrl","config","updates","url","getAppVersion","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","getRuntimeVersionNullableAsync","getRuntimeVersionAsync","e","boolish","console","log","runtimeVersion","policy","warn","resolveRuntimeVersionPolicyAsync","sdkVersion","getRuntimeVersionForSDKVersion","getSDKVersion","getUpdatesEnabled","enabled","undefined","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","codeSigningCertificatePath","codeSigningCertificate","finalPath","path","join","getUpdatesCodeSigningMetadata","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata","stringify","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 const FINGERPRINT_RUNTIME_VERSION_SENTINEL = 'file:fingerprint';\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(config: Pick<ExpoConfigUpdates, 'updates'>): string | null {\n return config.updates?.url ?? null;\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\nexport async function getRuntimeVersionNullableAsync(\n ...[projectRoot, config, platform]: Parameters<typeof getRuntimeVersionAsync>\n): Promise<string | null> {\n try {\n return await getRuntimeVersionAsync(projectRoot, config, platform);\n } catch (e) {\n if (boolish('EXPO_DEBUG', false)) {\n console.log(e);\n }\n return null;\n }\n}\n\nexport async function getRuntimeVersionAsync(\n projectRoot: string,\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): Promise<string | null> {\n const runtimeVersion = config[platform]?.runtimeVersion ?? config.runtimeVersion;\n if (!runtimeVersion) {\n return null;\n }\n\n if (typeof runtimeVersion === 'string') {\n if (runtimeVersion === FINGERPRINT_RUNTIME_VERSION_SENTINEL) {\n throw new Error(\n `${FINGERPRINT_RUNTIME_VERSION_SENTINEL} is a reserved value for runtime version. To use a fingerprint runtime version, use the \"fingerprint\" runtime version policy.`\n );\n }\n return runtimeVersion;\n } else if (!runtimeVersion.policy) {\n throw new Error(\n `\"${runtimeVersion}\" is not a valid runtime version. Only a string or a runtime version policy is supported.`\n );\n } else if (runtimeVersion.policy === 'fingerprint') {\n console.warn(\n `Use of the experimental '${runtimeVersion.policy}' runtime policy may result in unexpected system behavior.`\n );\n return FINGERPRINT_RUNTIME_VERSION_SENTINEL;\n } else {\n return await resolveRuntimeVersionPolicyAsync(runtimeVersion.policy, config, platform);\n }\n}\n\nexport async function resolveRuntimeVersionPolicyAsync(\n policy: 'appVersion' | 'nativeVersion' | 'sdkVersion',\n config: Pick<ExpoConfig, 'version' | 'sdkVersion'> & {\n android?: Pick<Android, 'versionCode'>;\n ios?: Pick<IOS, 'buildNumber'>;\n },\n platform: 'android' | 'ios'\n): Promise<string> {\n if (policy === 'appVersion') {\n return getAppVersion(config);\n } else if (policy === 'nativeVersion') {\n return getNativeVersion(config, platform);\n } else if (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 } else {\n // fingerprint is resolvable only at build time (not in config plugin).\n throw new Error(`\"${policy}\" is not a valid runtime version policy type.`);\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 // allow override of enabled property\n if (config.updates?.enabled !== undefined) {\n return config.updates.enabled;\n }\n\n return getUpdateUrl(config) !== null;\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' | 'WIFI_ONLY' {\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 } else if (config.updates?.checkAutomatically === 'WIFI_ONLY') {\n return 'WIFI_ONLY';\n } else if (config.updates?.checkAutomatically === 'NEVER') {\n return 'NEVER';\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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"}
@@ -61,11 +61,9 @@ async function readXMLAsync(options) {
61
61
  return _processAndroidXML(manifest);
62
62
  }
63
63
  function _processAndroidXML(manifest) {
64
- var _manifest$resources;
65
64
  // For strings.xml
66
- if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources = manifest.resources) === null || _manifest$resources === void 0 ? void 0 : _manifest$resources.string)) {
67
- 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) {
68
- var _manifest$resources2;
65
+ if (Array.isArray(manifest?.resources?.string)) {
66
+ for (const string of manifest?.resources?.string) {
69
67
  if (string.$.translatable === 'false' || string.$.translatable === false) {
70
68
  continue;
71
69
  }
@@ -87,15 +85,13 @@ function format(manifest, {
87
85
  if (typeof manifest === 'string') {
88
86
  xmlInput = manifest;
89
87
  } else if (manifest.toString) {
90
- var _manifest$resources3;
91
88
  const builder = new (_xml2js().Builder)({
92
89
  headless: true
93
90
  });
94
91
 
95
92
  // For strings.xml
96
- if (Array.isArray(manifest === null || manifest === void 0 ? void 0 : (_manifest$resources3 = manifest.resources) === null || _manifest$resources3 === void 0 ? void 0 : _manifest$resources3.string)) {
97
- 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) {
98
- var _manifest$resources4;
93
+ if (Array.isArray(manifest?.resources?.string)) {
94
+ for (const string of manifest?.resources?.string) {
99
95
  if (string.$.translatable === 'false' || string.$.translatable === false) {
100
96
  continue;
101
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XML.js","names":["_fs","data","_interopRequireDefault","require","_os","_path","_xml2js","obj","__esModule","default","writeXMLAsync","options","xml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","_processAndroidXML","_manifest$resources","Array","isArray","resources","string","_manifest$resources2","$","translatable","_","unescapeAndroidString","parseXMLAsync","stringTimesN","n","char","join","indentLevel","newline","EOL","xmlInput","toString","_manifest$resources3","builder","Builder","headless","_manifest$resources4","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 return _processAndroidXML(manifest);\n}\n\nexport function _processAndroidXML(manifest: any): XMLObject {\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":["_fs","data","_interopRequireDefault","require","_os","_path","_xml2js","obj","__esModule","default","writeXMLAsync","options","xml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readXMLAsync","contents","readFile","encoding","flag","parser","Parser","manifest","parseStringPromise","fallback","_processAndroidXML","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 return _processAndroidXML(manifest);\n}\n\nexport function _processAndroidXML(manifest: any): XMLObject {\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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"}
@@ -55,7 +55,7 @@ function mergeContents({
55
55
  // Ensure the old generated contents are removed.
56
56
  const sanitizedTarget = removeGeneratedContents(src, tag);
57
57
  return {
58
- contents: addLines(sanitizedTarget !== null && sanitizedTarget !== void 0 ? sanitizedTarget : src, anchor, offset, [header, ...newSrc.split('\n'), `${comment} @generated end ${tag}`]),
58
+ contents: addLines(sanitizedTarget ?? src, anchor, offset, [header, ...newSrc.split('\n'), `${comment} @generated end ${tag}`]),
59
59
  didMerge: true,
60
60
  didClear: !!sanitizedTarget
61
61
  };
@@ -73,7 +73,7 @@ function removeContents({
73
73
  // Ensure the old generated contents are removed.
74
74
  const sanitizedTarget = removeGeneratedContents(src, tag);
75
75
  return {
76
- contents: sanitizedTarget !== null && sanitizedTarget !== void 0 ? sanitizedTarget : src,
76
+ contents: sanitizedTarget ?? src,
77
77
  didMerge: false,
78
78
  didClear: !!sanitizedTarget
79
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generateCode.js","names":["_crypto","data","_interopRequireDefault","require","obj","__esModule","default","getGeneratedSectionIndexes","src","tag","contents","split","start","findIndex","line","RegExp","test","end","mergeContents","newSrc","anchor","offset","comment","header","createGeneratedHeaderComment","includes","sanitizedTarget","removeGeneratedContents","addLines","didMerge","didClear","removeContents","content","find","toAdd","lines","lineIndex","match","error","Error","code","newLine","splice","join","hashKey","createHash","hash","crypto","update","digest"],"sources":["../../src/utils/generateCode.ts"],"sourcesContent":["/**\n * Get line indexes for the generated section of a file.\n *\n * @param src\n */\nimport crypto from 'crypto';\n\nfunction getGeneratedSectionIndexes(\n src: string,\n tag: string\n): { contents: string[]; start: number; end: number } {\n const contents = src.split('\\n');\n const start = contents.findIndex((line) => new RegExp(`@generated begin ${tag} -`).test(line));\n const end = contents.findIndex((line) => new RegExp(`@generated end ${tag}$`).test(line));\n\n return { contents, start, end };\n}\n\nexport type MergeResults = {\n contents: string;\n didClear: boolean;\n didMerge: boolean;\n};\n\n/**\n * Merge the contents of two files together and add a generated header.\n *\n * @param src contents of the original file\n * @param newSrc new contents to merge into the original file\n * @param identifier used to update and remove merges\n * @param anchor regex to where the merge should begin\n * @param offset line offset to start merging at (<1 for behind the anchor)\n * @param comment comment style `//` or `#`\n */\nexport function mergeContents({\n src,\n newSrc,\n tag,\n anchor,\n offset,\n comment,\n}: {\n src: string;\n newSrc: string;\n tag: string;\n anchor: string | RegExp;\n offset: number;\n comment: string;\n}): MergeResults {\n const header = createGeneratedHeaderComment(newSrc, tag, comment);\n if (!src.includes(header)) {\n // Ensure the old generated contents are removed.\n const sanitizedTarget = removeGeneratedContents(src, tag);\n return {\n contents: addLines(sanitizedTarget ?? src, anchor, offset, [\n header,\n ...newSrc.split('\\n'),\n `${comment} @generated end ${tag}`,\n ]),\n didMerge: true,\n didClear: !!sanitizedTarget,\n };\n }\n return { contents: src, didClear: false, didMerge: false };\n}\n\nexport function removeContents({ src, tag }: { src: string; tag: string }): MergeResults {\n // Ensure the old generated contents are removed.\n const sanitizedTarget = removeGeneratedContents(src, tag);\n return {\n contents: sanitizedTarget ?? src,\n didMerge: false,\n didClear: !!sanitizedTarget,\n };\n}\n\nfunction addLines(content: string, find: string | RegExp, offset: number, toAdd: string[]) {\n const lines = content.split('\\n');\n\n let lineIndex = lines.findIndex((line) => line.match(find));\n if (lineIndex < 0) {\n const error = new Error(`Failed to match \"${find}\" in contents:\\n${content}`);\n // @ts-ignore\n error.code = 'ERR_NO_MATCH';\n throw error;\n }\n for (const newLine of toAdd) {\n lines.splice(lineIndex + offset, 0, newLine);\n lineIndex++;\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Removes the generated section from a file, returns null when nothing can be removed.\n * This sways heavily towards not removing lines unless it's certain that modifications were not made manually.\n *\n * @param src\n */\nexport function removeGeneratedContents(src: string, tag: string): string | null {\n const { contents, start, end } = getGeneratedSectionIndexes(src, tag);\n if (start > -1 && end > -1 && start < end) {\n contents.splice(start, end - start + 1);\n // TODO: We could in theory check that the contents we're removing match the hash used in the header,\n // this would ensure that we don't accidentally remove lines that someone added or removed from the generated section.\n return contents.join('\\n');\n }\n return null;\n}\n\nexport function createGeneratedHeaderComment(\n contents: string,\n tag: string,\n comment: string\n): string {\n const hashKey = createHash(contents);\n\n // Everything after the `${tag} ` is unversioned and can be freely modified without breaking changes.\n return `${comment} @generated begin ${tag} - expo prebuild (DO NOT MODIFY) ${hashKey}`;\n}\n\nexport function createHash(src: string): string {\n // this doesn't need to be secure, the shorter the better.\n const hash = crypto.createHash('sha1').update(src).digest('hex');\n return `sync-${hash}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generateCode.js","names":["_crypto","data","_interopRequireDefault","require","obj","__esModule","default","getGeneratedSectionIndexes","src","tag","contents","split","start","findIndex","line","RegExp","test","end","mergeContents","newSrc","anchor","offset","comment","header","createGeneratedHeaderComment","includes","sanitizedTarget","removeGeneratedContents","addLines","didMerge","didClear","removeContents","content","find","toAdd","lines","lineIndex","match","error","Error","code","newLine","splice","join","hashKey","createHash","hash","crypto","update","digest"],"sources":["../../src/utils/generateCode.ts"],"sourcesContent":["/**\n * Get line indexes for the generated section of a file.\n *\n * @param src\n */\nimport crypto from 'crypto';\n\nfunction getGeneratedSectionIndexes(\n src: string,\n tag: string\n): { contents: string[]; start: number; end: number } {\n const contents = src.split('\\n');\n const start = contents.findIndex((line) => new RegExp(`@generated begin ${tag} -`).test(line));\n const end = contents.findIndex((line) => new RegExp(`@generated end ${tag}$`).test(line));\n\n return { contents, start, end };\n}\n\nexport type MergeResults = {\n contents: string;\n didClear: boolean;\n didMerge: boolean;\n};\n\n/**\n * Merge the contents of two files together and add a generated header.\n *\n * @param src contents of the original file\n * @param newSrc new contents to merge into the original file\n * @param identifier used to update and remove merges\n * @param anchor regex to where the merge should begin\n * @param offset line offset to start merging at (<1 for behind the anchor)\n * @param comment comment style `//` or `#`\n */\nexport function mergeContents({\n src,\n newSrc,\n tag,\n anchor,\n offset,\n comment,\n}: {\n src: string;\n newSrc: string;\n tag: string;\n anchor: string | RegExp;\n offset: number;\n comment: string;\n}): MergeResults {\n const header = createGeneratedHeaderComment(newSrc, tag, comment);\n if (!src.includes(header)) {\n // Ensure the old generated contents are removed.\n const sanitizedTarget = removeGeneratedContents(src, tag);\n return {\n contents: addLines(sanitizedTarget ?? src, anchor, offset, [\n header,\n ...newSrc.split('\\n'),\n `${comment} @generated end ${tag}`,\n ]),\n didMerge: true,\n didClear: !!sanitizedTarget,\n };\n }\n return { contents: src, didClear: false, didMerge: false };\n}\n\nexport function removeContents({ src, tag }: { src: string; tag: string }): MergeResults {\n // Ensure the old generated contents are removed.\n const sanitizedTarget = removeGeneratedContents(src, tag);\n return {\n contents: sanitizedTarget ?? src,\n didMerge: false,\n didClear: !!sanitizedTarget,\n };\n}\n\nfunction addLines(content: string, find: string | RegExp, offset: number, toAdd: string[]) {\n const lines = content.split('\\n');\n\n let lineIndex = lines.findIndex((line) => line.match(find));\n if (lineIndex < 0) {\n const error = new Error(`Failed to match \"${find}\" in contents:\\n${content}`);\n // @ts-ignore\n error.code = 'ERR_NO_MATCH';\n throw error;\n }\n for (const newLine of toAdd) {\n lines.splice(lineIndex + offset, 0, newLine);\n lineIndex++;\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Removes the generated section from a file, returns null when nothing can be removed.\n * This sways heavily towards not removing lines unless it's certain that modifications were not made manually.\n *\n * @param src\n */\nexport function removeGeneratedContents(src: string, tag: string): string | null {\n const { contents, start, end } = getGeneratedSectionIndexes(src, tag);\n if (start > -1 && end > -1 && start < end) {\n contents.splice(start, end - start + 1);\n // TODO: We could in theory check that the contents we're removing match the hash used in the header,\n // this would ensure that we don't accidentally remove lines that someone added or removed from the generated section.\n return contents.join('\\n');\n }\n return null;\n}\n\nexport function createGeneratedHeaderComment(\n contents: string,\n tag: string,\n comment: string\n): string {\n const hashKey = createHash(contents);\n\n // Everything after the `${tag} ` is unversioned and can be freely modified without breaking changes.\n return `${comment} @generated begin ${tag} - expo prebuild (DO NOT MODIFY) ${hashKey}`;\n}\n\nexport function createHash(src: string): string {\n // this doesn't need to be secure, the shorter the better.\n const hash = crypto.createHash('sha1').update(src).digest('hex');\n return `sync-${hash}`;\n}\n"],"mappings":"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"}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.addHistoryItem = addHistoryItem;
7
7
  exports.getHistoryItem = getHistoryItem;
8
8
  function getHistoryItem(config, name) {
9
- var _config$_internal$plu, _config$_internal, _config$_internal$plu2;
10
- return (_config$_internal$plu = (_config$_internal = config._internal) === null || _config$_internal === void 0 ? void 0 : (_config$_internal$plu2 = _config$_internal.pluginHistory) === null || _config$_internal$plu2 === void 0 ? void 0 : _config$_internal$plu2[name]) !== null && _config$_internal$plu !== void 0 ? _config$_internal$plu : null;
9
+ return config._internal?.pluginHistory?.[name] ?? null;
11
10
  }
12
11
  function addHistoryItem(config, item) {
13
12
  if (!config._internal) {
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","names":["getHistoryItem","config","name","_config$_internal$plu","_config$_internal","_config$_internal$plu2","_internal","pluginHistory","addHistoryItem","item","version"],"sources":["../../src/utils/history.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ModPlatform } from '../Plugin.types';\n\nexport type PluginHistoryItem = {\n name: string;\n version: string;\n platform?: ModPlatform;\n};\n\nexport function getHistoryItem(\n config: Pick<ExpoConfig, '_internal'>,\n name: string\n): PluginHistoryItem | null {\n return config._internal?.pluginHistory?.[name] ?? null;\n}\n\nexport function addHistoryItem(\n config: ExpoConfig,\n item: Omit<PluginHistoryItem, 'version'> & { version?: string }\n): ExpoConfig {\n if (!config._internal) {\n config._internal = {};\n }\n if (!config._internal.pluginHistory) {\n config._internal.pluginHistory = {};\n }\n\n if (!item.version) {\n item.version = 'UNVERSIONED';\n }\n\n config._internal.pluginHistory[item.name] = item;\n\n return config;\n}\n"],"mappings":";;;;;;;AAUO,SAASA,cAAcA,CAC5BC,MAAqC,EACrCC,IAAY,EACc;EAAA,IAAAC,qBAAA,EAAAC,iBAAA,EAAAC,sBAAA;EAC1B,QAAAF,qBAAA,IAAAC,iBAAA,GAAOH,MAAM,CAACK,SAAS,cAAAF,iBAAA,wBAAAC,sBAAA,GAAhBD,iBAAA,CAAkBG,aAAa,cAAAF,sBAAA,uBAA/BA,sBAAA,CAAkCH,IAAI,CAAC,cAAAC,qBAAA,cAAAA,qBAAA,GAAI,IAAI;AACxD;AAEO,SAASK,cAAcA,CAC5BP,MAAkB,EAClBQ,IAA+D,EACnD;EACZ,IAAI,CAACR,MAAM,CAACK,SAAS,EAAE;IACrBL,MAAM,CAACK,SAAS,GAAG,CAAC,CAAC;EACvB;EACA,IAAI,CAACL,MAAM,CAACK,SAAS,CAACC,aAAa,EAAE;IACnCN,MAAM,CAACK,SAAS,CAACC,aAAa,GAAG,CAAC,CAAC;EACrC;EAEA,IAAI,CAACE,IAAI,CAACC,OAAO,EAAE;IACjBD,IAAI,CAACC,OAAO,GAAG,aAAa;EAC9B;EAEAT,MAAM,CAACK,SAAS,CAACC,aAAa,CAACE,IAAI,CAACP,IAAI,CAAC,GAAGO,IAAI;EAEhD,OAAOR,MAAM;AACf"}
1
+ {"version":3,"file":"history.js","names":["getHistoryItem","config","name","_internal","pluginHistory","addHistoryItem","item","version"],"sources":["../../src/utils/history.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ModPlatform } from '../Plugin.types';\n\nexport type PluginHistoryItem = {\n name: string;\n version: string;\n platform?: ModPlatform;\n};\n\nexport function getHistoryItem(\n config: Pick<ExpoConfig, '_internal'>,\n name: string\n): PluginHistoryItem | null {\n return config._internal?.pluginHistory?.[name] ?? null;\n}\n\nexport function addHistoryItem(\n config: ExpoConfig,\n item: Omit<PluginHistoryItem, 'version'> & { version?: string }\n): ExpoConfig {\n if (!config._internal) {\n config._internal = {};\n }\n if (!config._internal.pluginHistory) {\n config._internal.pluginHistory = {};\n }\n\n if (!item.version) {\n item.version = 'UNVERSIONED';\n }\n\n config._internal.pluginHistory[item.name] = item;\n\n return config;\n}\n"],"mappings":";;;;;;;AAUO,SAASA,cAAcA,CAC5BC,MAAqC,EACrCC,IAAY,EACc;EAC1B,OAAOD,MAAM,CAACE,SAAS,EAAEC,aAAa,GAAGF,IAAI,CAAC,IAAI,IAAI;AACxD;AAEO,SAASG,cAAcA,CAC5BJ,MAAkB,EAClBK,IAA+D,EACnD;EACZ,IAAI,CAACL,MAAM,CAACE,SAAS,EAAE;IACrBF,MAAM,CAACE,SAAS,GAAG,CAAC,CAAC;EACvB;EACA,IAAI,CAACF,MAAM,CAACE,SAAS,CAACC,aAAa,EAAE;IACnCH,MAAM,CAACE,SAAS,CAACC,aAAa,GAAG,CAAC,CAAC;EACrC;EAEA,IAAI,CAACE,IAAI,CAACC,OAAO,EAAE;IACjBD,IAAI,CAACC,OAAO,GAAG,aAAa;EAC9B;EAEAN,MAAM,CAACE,SAAS,CAACC,aAAa,CAACE,IAAI,CAACJ,IAAI,CAAC,GAAGI,IAAI;EAEhD,OAAOL,MAAM;AACf"}
@@ -27,12 +27,10 @@ async function statAsync(file) {
27
27
  }
28
28
  }
29
29
  async function fileExistsAsync(file) {
30
- var _await$statAsync$isFi, _await$statAsync;
31
- return (_await$statAsync$isFi = (_await$statAsync = await statAsync(file)) === null || _await$statAsync === void 0 ? void 0 : _await$statAsync.isFile()) !== null && _await$statAsync$isFi !== void 0 ? _await$statAsync$isFi : false;
30
+ return (await statAsync(file))?.isFile() ?? false;
32
31
  }
33
32
  async function directoryExistsAsync(file) {
34
- var _await$statAsync$isDi, _await$statAsync2;
35
- return (_await$statAsync$isDi = (_await$statAsync2 = await statAsync(file)) === null || _await$statAsync2 === void 0 ? void 0 : _await$statAsync2.isDirectory()) !== null && _await$statAsync$isDi !== void 0 ? _await$statAsync$isDi : false;
33
+ return (await statAsync(file))?.isDirectory() ?? false;
36
34
  }
37
35
  function fileExists(file) {
38
36
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"modules.js","names":["_fs","data","_interopRequireDefault","require","obj","__esModule","default","statAsync","file","fs","promises","stat","fileExistsAsync","_await$statAsync$isFi","_await$statAsync","isFile","directoryExistsAsync","_await$statAsync$isDi","_await$statAsync2","isDirectory","fileExists","statSync"],"sources":["../../src/utils/modules.ts"],"sourcesContent":["import fs from 'fs';\n\n/**\n * A non-failing version of async FS stat.\n *\n * @param file\n */\nasync function statAsync(file: string): Promise<fs.Stats | null> {\n try {\n return await fs.promises.stat(file);\n } catch {\n return null;\n }\n}\n\nexport async function fileExistsAsync(file: string): Promise<boolean> {\n return (await statAsync(file))?.isFile() ?? false;\n}\n\nexport async function directoryExistsAsync(file: string): Promise<boolean> {\n return (await statAsync(file))?.isDirectory() ?? false;\n}\n\nexport function fileExists(file: string): boolean {\n try {\n return fs.statSync(file).isFile();\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,IAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,GAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoB,SAAAC,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEpB;AACA;AACA;AACA;AACA;AACA,eAAeG,SAASA,CAACC,IAAY,EAA4B;EAC/D,IAAI;IACF,OAAO,MAAMC,aAAE,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC;EACrC,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEO,eAAeI,eAAeA,CAACJ,IAAY,EAAoB;EAAA,IAAAK,qBAAA,EAAAC,gBAAA;EACpE,QAAAD,qBAAA,IAAAC,gBAAA,GAAQ,MAAMP,SAAS,CAACC,IAAI,CAAC,cAAAM,gBAAA,uBAAtBA,gBAAA,CAAyBC,MAAM,CAAC,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,KAAK;AACnD;AAEO,eAAeG,oBAAoBA,CAACR,IAAY,EAAoB;EAAA,IAAAS,qBAAA,EAAAC,iBAAA;EACzE,QAAAD,qBAAA,IAAAC,iBAAA,GAAQ,MAAMX,SAAS,CAACC,IAAI,CAAC,cAAAU,iBAAA,uBAAtBA,iBAAA,CAAyBC,WAAW,CAAC,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,KAAK;AACxD;AAEO,SAASG,UAAUA,CAACZ,IAAY,EAAW;EAChD,IAAI;IACF,OAAOC,aAAE,CAACY,QAAQ,CAACb,IAAI,CAAC,CAACO,MAAM,CAAC,CAAC;EACnC,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF"}
1
+ {"version":3,"file":"modules.js","names":["_fs","data","_interopRequireDefault","require","obj","__esModule","default","statAsync","file","fs","promises","stat","fileExistsAsync","isFile","directoryExistsAsync","isDirectory","fileExists","statSync"],"sources":["../../src/utils/modules.ts"],"sourcesContent":["import fs from 'fs';\n\n/**\n * A non-failing version of async FS stat.\n *\n * @param file\n */\nasync function statAsync(file: string): Promise<fs.Stats | null> {\n try {\n return await fs.promises.stat(file);\n } catch {\n return null;\n }\n}\n\nexport async function fileExistsAsync(file: string): Promise<boolean> {\n return (await statAsync(file))?.isFile() ?? false;\n}\n\nexport async function directoryExistsAsync(file: string): Promise<boolean> {\n return (await statAsync(file))?.isDirectory() ?? false;\n}\n\nexport function fileExists(file: string): boolean {\n try {\n return fs.statSync(file).isFile();\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,IAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,GAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoB,SAAAC,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEpB;AACA;AACA;AACA;AACA;AACA,eAAeG,SAASA,CAACC,IAAY,EAA4B;EAC/D,IAAI;IACF,OAAO,MAAMC,aAAE,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC;EACrC,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEO,eAAeI,eAAeA,CAACJ,IAAY,EAAoB;EACpE,OAAO,CAAC,MAAMD,SAAS,CAACC,IAAI,CAAC,GAAGK,MAAM,CAAC,CAAC,IAAI,KAAK;AACnD;AAEO,eAAeC,oBAAoBA,CAACN,IAAY,EAAoB;EACzE,OAAO,CAAC,MAAMD,SAAS,CAACC,IAAI,CAAC,GAAGO,WAAW,CAAC,CAAC,IAAI,KAAK;AACxD;AAEO,SAASC,UAAUA,CAACR,IAAY,EAAW;EAChD,IAAI;IACF,OAAOC,aAAE,CAACQ,QAAQ,CAACT,IAAI,CAAC,CAACK,MAAM,CAAC,CAAC;EACnC,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF"}
@@ -53,12 +53,11 @@ function _modules() {
53
53
  };
54
54
  return data;
55
55
  }
56
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
57
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
56
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
57
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
58
58
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
59
59
  // Default plugin entry file name.
60
- const pluginFileName = 'app.plugin.js';
61
- exports.pluginFileName = pluginFileName;
60
+ const pluginFileName = exports.pluginFileName = 'app.plugin.js';
62
61
  function findUpPackageJson(root) {
63
62
  const packageJson = _findUp().default.sync('package.json', {
64
63
  cwd: root
@@ -88,11 +87,10 @@ function pathIsFilePath(name) {
88
87
  return !!name.match(/^(\.|~\/|\/)/g);
89
88
  }
90
89
  function moduleNameIsDirectFileReference(name) {
91
- var _name$split;
92
90
  if (pathIsFilePath(name)) {
93
91
  return true;
94
92
  }
95
- const slashCount = (_name$split = name.split(path().sep)) === null || _name$split === void 0 ? void 0 : _name$split.length;
93
+ const slashCount = name.split(path().sep)?.length;
96
94
  // Orgs (like @expo/config ) should have more than one slash to be a direct file.
97
95
  if (name.startsWith('@')) {
98
96
  return slashCount > 2;
@@ -121,7 +119,7 @@ function findUpPlugin(root) {
121
119
  // use whatever the initial resolved file was ex: `node_modules/my-package/index.js` or `./something.js`
122
120
  const pluginFile = resolveExpoPluginFile(moduleRoot);
123
121
  return {
124
- filePath: pluginFile !== null && pluginFile !== void 0 ? pluginFile : root,
122
+ filePath: pluginFile ?? root,
125
123
  isPluginFile: !!pluginFile
126
124
  };
127
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.js","names":["_assert","data","_interopRequireDefault","require","_findUp","path","_interopRequireWildcard","_resolveFrom","_errors","_modules","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","pluginFileName","exports","findUpPackageJson","root","packageJson","findUp","sync","cwd","assert","resolvePluginForModule","projectRoot","modulePath","resolved","resolveFrom","silent","PluginError","moduleNameIsDirectFileReference","isPluginFile","filePath","findUpPlugin","pathIsFilePath","name","match","_name$split","slashCount","split","sep","length","startsWith","resolveExpoPluginFile","pluginModuleFile","fileExists","moduleRoot","dirname","pluginFile","normalizeStaticPlugin","plugin","Array","isArray","undefined","assertInternalProjectRoot","resolveConfigPluginFunction","pluginReference","resolveConfigPluginFunctionWithInfo","result","requirePluginFile","error","SyntaxError","learnMoreLink","pluginError","message","stack","resolveConfigPluginExport"],"sources":["../../src/utils/plugin-resolver.ts"],"sourcesContent":["import assert from 'assert';\nimport findUp from 'find-up';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { PluginError } from './errors';\nimport { fileExists } from './modules';\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\n\n// Default plugin entry file name.\nexport const pluginFileName = 'app.plugin.js';\n\nfunction findUpPackageJson(root: string): string {\n const packageJson = findUp.sync('package.json', { cwd: root });\n assert(packageJson, `No package.json found for module \"${root}\"`);\n return packageJson;\n}\n\nexport function resolvePluginForModule(projectRoot: string, modulePath: string) {\n const resolved = resolveFrom.silent(projectRoot, modulePath);\n if (!resolved) {\n throw new PluginError(\n `Failed to resolve plugin for module \"${modulePath}\" relative to \"${projectRoot}\"`,\n 'PLUGIN_NOT_FOUND'\n );\n }\n // If the modulePath is something like `@bacon/package/index.js` or `expo-foo/build/app`\n // then skip resolving the module `app.plugin.js`\n if (moduleNameIsDirectFileReference(modulePath)) {\n return { isPluginFile: false, filePath: resolved };\n }\n return findUpPlugin(resolved);\n}\n\n// TODO: Test windows\nfunction pathIsFilePath(name: string): boolean {\n // Matches lines starting with: . / ~/\n return !!name.match(/^(\\.|~\\/|\\/)/g);\n}\n\nexport function moduleNameIsDirectFileReference(name: string): boolean {\n if (pathIsFilePath(name)) {\n return true;\n }\n\n const slashCount = name.split(path.sep)?.length;\n // Orgs (like @expo/config ) should have more than one slash to be a direct file.\n if (name.startsWith('@')) {\n return slashCount > 2;\n }\n\n // Regular packages should be considered direct reference if they have more than one slash.\n return slashCount > 1;\n}\n\nfunction resolveExpoPluginFile(root: string): string | null {\n // Find the expo plugin root file\n const pluginModuleFile = resolveFrom.silent(\n root,\n // use ./ so it isn't resolved as a node module\n `./${pluginFileName}`\n );\n\n // If the default expo plugin file exists use it.\n if (pluginModuleFile && fileExists(pluginModuleFile)) {\n return pluginModuleFile;\n }\n return null;\n}\n\nfunction findUpPlugin(root: string): { filePath: string; isPluginFile: boolean } {\n // Get the closest package.json to the node module\n const packageJson = findUpPackageJson(root);\n // resolve the root folder for the node module\n const moduleRoot = path.dirname(packageJson);\n // use whatever the initial resolved file was ex: `node_modules/my-package/index.js` or `./something.js`\n const pluginFile = resolveExpoPluginFile(moduleRoot);\n return { filePath: pluginFile ?? root, isPluginFile: !!pluginFile };\n}\n\nexport function normalizeStaticPlugin(plugin: StaticPlugin | ConfigPlugin | string): StaticPlugin {\n if (Array.isArray(plugin)) {\n assert(\n plugin.length > 0 && plugin.length < 3,\n `Wrong number of arguments provided for static config plugin, expected either 1 or 2, got ${plugin.length}`\n );\n return plugin;\n }\n return [plugin, undefined];\n}\n\nexport function assertInternalProjectRoot(projectRoot?: string): asserts projectRoot {\n assert(\n projectRoot,\n `Unexpected: Config \\`_internal.projectRoot\\` isn't defined by expo-cli, this is a bug.`\n );\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunction(projectRoot: string, pluginReference: string) {\n const { plugin } = resolveConfigPluginFunctionWithInfo(projectRoot, pluginReference);\n return plugin;\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunctionWithInfo(projectRoot: string, pluginReference: string) {\n const { filePath: pluginFile, isPluginFile } = resolvePluginForModule(\n projectRoot,\n pluginReference\n );\n let result: any;\n try {\n result = requirePluginFile(pluginFile);\n } catch (error) {\n if (error instanceof SyntaxError) {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module has a syntax error, then it probably doesn't have an official config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n const pluginError = new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin.\\n${learnMoreLink}\\n\\n${error.message}`,\n 'INVALID_PLUGIN_IMPORT'\n );\n pluginError.stack = error.stack;\n throw pluginError;\n }\n }\n throw error;\n }\n\n const plugin = resolveConfigPluginExport({\n plugin: result,\n pluginFile,\n pluginReference,\n isPluginFile,\n });\n return { plugin, pluginFile, pluginReference, isPluginFile };\n}\n\n/**\n * - Resolve the exported contents of an Expo config (be it default or module.exports)\n * - Assert no promise exports\n * - Return config type\n * - Serialize config\n *\n * @param props.plugin plugin results\n * @param props.pluginFile plugin file path\n * @param props.pluginReference the string used to reference the plugin\n * @param props.isPluginFile is file path from the app.plugin.js module root\n */\nexport function resolveConfigPluginExport({\n plugin,\n pluginFile,\n pluginReference,\n isPluginFile,\n}: {\n plugin: any;\n pluginFile: string;\n pluginReference: string;\n isPluginFile: boolean;\n}): ConfigPlugin<unknown> {\n if (plugin.default != null) {\n plugin = plugin.default;\n }\n if (typeof plugin !== 'function') {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module does not export a function then it probably doesn't have a config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n throw new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin. Module must export a function from file: ${pluginFile}\\n${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n throw new PluginError(\n `Plugin \"${pluginReference}\" must export a function from file: ${pluginFile}. ${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n\n return plugin;\n}\n\nfunction requirePluginFile(filePath: string): any {\n try {\n return require(filePath);\n } catch (error) {\n // TODO: Improve error messages\n throw error;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-resolver.js","names":["_assert","data","_interopRequireDefault","require","_findUp","path","_interopRequireWildcard","_resolveFrom","_errors","_modules","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","pluginFileName","exports","findUpPackageJson","root","packageJson","findUp","sync","cwd","assert","resolvePluginForModule","projectRoot","modulePath","resolved","resolveFrom","silent","PluginError","moduleNameIsDirectFileReference","isPluginFile","filePath","findUpPlugin","pathIsFilePath","name","match","slashCount","split","sep","length","startsWith","resolveExpoPluginFile","pluginModuleFile","fileExists","moduleRoot","dirname","pluginFile","normalizeStaticPlugin","plugin","Array","isArray","undefined","assertInternalProjectRoot","resolveConfigPluginFunction","pluginReference","resolveConfigPluginFunctionWithInfo","result","requirePluginFile","error","SyntaxError","learnMoreLink","pluginError","message","stack","resolveConfigPluginExport"],"sources":["../../src/utils/plugin-resolver.ts"],"sourcesContent":["import assert from 'assert';\nimport findUp from 'find-up';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { PluginError } from './errors';\nimport { fileExists } from './modules';\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\n\n// Default plugin entry file name.\nexport const pluginFileName = 'app.plugin.js';\n\nfunction findUpPackageJson(root: string): string {\n const packageJson = findUp.sync('package.json', { cwd: root });\n assert(packageJson, `No package.json found for module \"${root}\"`);\n return packageJson;\n}\n\nexport function resolvePluginForModule(projectRoot: string, modulePath: string) {\n const resolved = resolveFrom.silent(projectRoot, modulePath);\n if (!resolved) {\n throw new PluginError(\n `Failed to resolve plugin for module \"${modulePath}\" relative to \"${projectRoot}\"`,\n 'PLUGIN_NOT_FOUND'\n );\n }\n // If the modulePath is something like `@bacon/package/index.js` or `expo-foo/build/app`\n // then skip resolving the module `app.plugin.js`\n if (moduleNameIsDirectFileReference(modulePath)) {\n return { isPluginFile: false, filePath: resolved };\n }\n return findUpPlugin(resolved);\n}\n\n// TODO: Test windows\nfunction pathIsFilePath(name: string): boolean {\n // Matches lines starting with: . / ~/\n return !!name.match(/^(\\.|~\\/|\\/)/g);\n}\n\nexport function moduleNameIsDirectFileReference(name: string): boolean {\n if (pathIsFilePath(name)) {\n return true;\n }\n\n const slashCount = name.split(path.sep)?.length;\n // Orgs (like @expo/config ) should have more than one slash to be a direct file.\n if (name.startsWith('@')) {\n return slashCount > 2;\n }\n\n // Regular packages should be considered direct reference if they have more than one slash.\n return slashCount > 1;\n}\n\nfunction resolveExpoPluginFile(root: string): string | null {\n // Find the expo plugin root file\n const pluginModuleFile = resolveFrom.silent(\n root,\n // use ./ so it isn't resolved as a node module\n `./${pluginFileName}`\n );\n\n // If the default expo plugin file exists use it.\n if (pluginModuleFile && fileExists(pluginModuleFile)) {\n return pluginModuleFile;\n }\n return null;\n}\n\nfunction findUpPlugin(root: string): { filePath: string; isPluginFile: boolean } {\n // Get the closest package.json to the node module\n const packageJson = findUpPackageJson(root);\n // resolve the root folder for the node module\n const moduleRoot = path.dirname(packageJson);\n // use whatever the initial resolved file was ex: `node_modules/my-package/index.js` or `./something.js`\n const pluginFile = resolveExpoPluginFile(moduleRoot);\n return { filePath: pluginFile ?? root, isPluginFile: !!pluginFile };\n}\n\nexport function normalizeStaticPlugin(plugin: StaticPlugin | ConfigPlugin | string): StaticPlugin {\n if (Array.isArray(plugin)) {\n assert(\n plugin.length > 0 && plugin.length < 3,\n `Wrong number of arguments provided for static config plugin, expected either 1 or 2, got ${plugin.length}`\n );\n return plugin;\n }\n return [plugin, undefined];\n}\n\nexport function assertInternalProjectRoot(projectRoot?: string): asserts projectRoot {\n assert(\n projectRoot,\n `Unexpected: Config \\`_internal.projectRoot\\` isn't defined by expo-cli, this is a bug.`\n );\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunction(projectRoot: string, pluginReference: string) {\n const { plugin } = resolveConfigPluginFunctionWithInfo(projectRoot, pluginReference);\n return plugin;\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunctionWithInfo(projectRoot: string, pluginReference: string) {\n const { filePath: pluginFile, isPluginFile } = resolvePluginForModule(\n projectRoot,\n pluginReference\n );\n let result: any;\n try {\n result = requirePluginFile(pluginFile);\n } catch (error) {\n if (error instanceof SyntaxError) {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module has a syntax error, then it probably doesn't have an official config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n const pluginError = new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin.\\n${learnMoreLink}\\n\\n${error.message}`,\n 'INVALID_PLUGIN_IMPORT'\n );\n pluginError.stack = error.stack;\n throw pluginError;\n }\n }\n throw error;\n }\n\n const plugin = resolveConfigPluginExport({\n plugin: result,\n pluginFile,\n pluginReference,\n isPluginFile,\n });\n return { plugin, pluginFile, pluginReference, isPluginFile };\n}\n\n/**\n * - Resolve the exported contents of an Expo config (be it default or module.exports)\n * - Assert no promise exports\n * - Return config type\n * - Serialize config\n *\n * @param props.plugin plugin results\n * @param props.pluginFile plugin file path\n * @param props.pluginReference the string used to reference the plugin\n * @param props.isPluginFile is file path from the app.plugin.js module root\n */\nexport function resolveConfigPluginExport({\n plugin,\n pluginFile,\n pluginReference,\n isPluginFile,\n}: {\n plugin: any;\n pluginFile: string;\n pluginReference: string;\n isPluginFile: boolean;\n}): ConfigPlugin<unknown> {\n if (plugin.default != null) {\n plugin = plugin.default;\n }\n if (typeof plugin !== 'function') {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module does not export a function then it probably doesn't have a config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n throw new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin. Module must export a function from file: ${pluginFile}\\n${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n throw new PluginError(\n `Plugin \"${pluginReference}\" must export a function from file: ${pluginFile}. ${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n\n return plugin;\n}\n\nfunction requirePluginFile(filePath: string): any {\n try {\n return require(filePath);\n } catch (error) {\n // TODO: Improve error messages\n throw error;\n }\n}\n"],"mappings":"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"}