@expo/config-plugins 6.0.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +2 -2
  2. package/build/Plugin.types.js.map +1 -1
  3. package/build/android/AllowBackup.js.map +1 -1
  4. package/build/android/BuildProperties.js.map +1 -1
  5. package/build/android/Colors.js.map +1 -1
  6. package/build/android/EasBuild.js.map +1 -1
  7. package/build/android/EasBuildGradleScript.js.map +1 -1
  8. package/build/android/GoogleMapsApiKey.js.map +1 -1
  9. package/build/android/GoogleServices.js.map +1 -1
  10. package/build/android/IntentFilters.js.map +1 -1
  11. package/build/android/Manifest.js.map +1 -1
  12. package/build/android/Name.js.map +1 -1
  13. package/build/android/Orientation.js.map +1 -1
  14. package/build/android/Package.js +1 -0
  15. package/build/android/Package.js.map +1 -1
  16. package/build/android/Paths.js.map +1 -1
  17. package/build/android/Permissions.js.map +1 -1
  18. package/build/android/PrimaryColor.js.map +1 -1
  19. package/build/android/Properties.js.map +1 -1
  20. package/build/android/Resources.js.map +1 -1
  21. package/build/android/Scheme.js +1 -1
  22. package/build/android/Scheme.js.map +1 -1
  23. package/build/android/StatusBar.js.map +1 -1
  24. package/build/android/Strings.js.map +1 -1
  25. package/build/android/Styles.js.map +1 -1
  26. package/build/android/Updates.js +4 -3
  27. package/build/android/Updates.js.map +1 -1
  28. package/build/android/Version.js.map +1 -1
  29. package/build/android/WindowSoftInputMode.js.map +1 -1
  30. package/build/android/codeMod.js.map +1 -1
  31. package/build/android/index.js.map +1 -1
  32. package/build/index.js.map +1 -1
  33. package/build/ios/Bitcode.js.map +1 -1
  34. package/build/ios/BuildProperties.js.map +1 -1
  35. package/build/ios/BuildScheme.js.map +1 -1
  36. package/build/ios/BundleIdentifier.js.map +1 -1
  37. package/build/ios/DeviceFamily.js.map +1 -1
  38. package/build/ios/Entitlements.js.map +1 -1
  39. package/build/ios/Google.js.map +1 -1
  40. package/build/ios/Locales.js.map +1 -1
  41. package/build/ios/Maps.js.map +1 -1
  42. package/build/ios/Name.js.map +1 -1
  43. package/build/ios/Orientation.js.map +1 -1
  44. package/build/ios/Paths.js.map +1 -1
  45. package/build/ios/Permissions.js.map +1 -1
  46. package/build/ios/ProvisioningProfile.js.map +1 -1
  47. package/build/ios/RequiresFullScreen.js +1 -1
  48. package/build/ios/RequiresFullScreen.js.map +1 -1
  49. package/build/ios/Scheme.js.map +1 -1
  50. package/build/ios/Swift.js +1 -1
  51. package/build/ios/Swift.js.map +1 -1
  52. package/build/ios/Target.js.map +1 -1
  53. package/build/ios/Updates.js +4 -3
  54. package/build/ios/Updates.js.map +1 -1
  55. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  56. package/build/ios/Version.js.map +1 -1
  57. package/build/ios/XcodeProjectFile.js.map +1 -1
  58. package/build/ios/codeMod.js.map +1 -1
  59. package/build/ios/index.js.map +1 -1
  60. package/build/ios/utils/Xcodeproj.js.map +1 -1
  61. package/build/ios/utils/getInfoPlistPath.js.map +1 -1
  62. package/build/ios/utils/string.js.map +1 -1
  63. package/build/plugins/android-plugins.js.map +1 -1
  64. package/build/plugins/createBaseMod.d.ts +2 -1
  65. package/build/plugins/createBaseMod.js.map +1 -1
  66. package/build/plugins/ios-plugins.js.map +1 -1
  67. package/build/plugins/mod-compiler.js +3 -3
  68. package/build/plugins/mod-compiler.js.map +1 -1
  69. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  70. package/build/plugins/withDangerousMod.js.map +1 -1
  71. package/build/plugins/withIosBaseMods.js +2 -1
  72. package/build/plugins/withIosBaseMods.js.map +1 -1
  73. package/build/plugins/withMod.d.ts +2 -1
  74. package/build/plugins/withMod.js.map +1 -1
  75. package/build/plugins/withPlugins.js.map +1 -1
  76. package/build/plugins/withRunOnce.js.map +1 -1
  77. package/build/plugins/withStaticPlugin.js.map +1 -1
  78. package/build/utils/Updates.d.ts +2 -2
  79. package/build/utils/Updates.js +35 -18
  80. package/build/utils/Updates.js.map +1 -1
  81. package/build/utils/XML.d.ts +1 -0
  82. package/build/utils/XML.js +5 -2
  83. package/build/utils/XML.js.map +1 -1
  84. package/build/utils/commonCodeMod.js.map +1 -1
  85. package/build/utils/errors.js.map +1 -1
  86. package/build/utils/fs.js.map +1 -1
  87. package/build/utils/generateCode.js.map +1 -1
  88. package/build/utils/history.js.map +1 -1
  89. package/build/utils/matchBrackets.js.map +1 -1
  90. package/build/utils/modules.js.map +1 -1
  91. package/build/utils/obj.js.map +1 -1
  92. package/build/utils/plugin-resolver.js.map +1 -1
  93. package/build/utils/sortObject.js.map +1 -1
  94. package/build/utils/versions.js.map +1 -1
  95. package/build/utils/warnings.d.ts +1 -1
  96. package/build/utils/warnings.js.map +1 -1
  97. package/package.json +3 -3
@@ -77,11 +77,18 @@ function getExpoUpdatesPackageVersion(projectRoot) {
77
77
  const packageJson = JSON.parse(_fs().default.readFileSync(expoUpdatesPackageJsonPath, 'utf8'));
78
78
  return packageJson.version;
79
79
  }
80
- function getUpdateUrl(config, username) {
80
+ function shouldDefaultToClassicUpdates(config) {
81
81
  var _config$updates;
82
- if ((_config$updates = config.updates) !== null && _config$updates !== void 0 && _config$updates.url) {
83
- var _config$updates2;
84
- return (_config$updates2 = config.updates) === null || _config$updates2 === void 0 ? void 0 : _config$updates2.url;
82
+ return !!((_config$updates = config.updates) !== null && _config$updates !== void 0 && _config$updates.useClassicUpdates);
83
+ }
84
+ function getUpdateUrl(config, username) {
85
+ var _config$updates2;
86
+ if ((_config$updates2 = config.updates) !== null && _config$updates2 !== void 0 && _config$updates2.url) {
87
+ var _config$updates3;
88
+ return (_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.url;
89
+ }
90
+ if (!shouldDefaultToClassicUpdates(config)) {
91
+ return null;
85
92
  }
86
93
  const user = typeof config.owner === 'string' ? config.owner : username;
87
94
  if (!user) {
@@ -174,30 +181,40 @@ function getRuntimeVersion(config, platform) {
174
181
  function getSDKVersion(config) {
175
182
  return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;
176
183
  }
177
- function getUpdatesEnabled(config) {
178
- var _config$updates3;
179
- return ((_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.enabled) !== false;
184
+ function getUpdatesEnabled(config, username) {
185
+ var _config$updates4;
186
+ // allow override of enabled property
187
+ if (((_config$updates4 = config.updates) === null || _config$updates4 === void 0 ? void 0 : _config$updates4.enabled) !== undefined) {
188
+ return config.updates.enabled;
189
+ }
190
+
191
+ // enable if URL is set (which respects shouldDefaultToClassicUpdates)
192
+ return getUpdateUrl(config, username) !== null;
180
193
  }
181
194
  function getUpdatesTimeout(config) {
182
- var _config$updates$fallb, _config$updates4;
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;
195
+ var _config$updates$fallb, _config$updates5;
196
+ return (_config$updates$fallb = (_config$updates5 = config.updates) === null || _config$updates5 === void 0 ? void 0 : _config$updates5.fallbackToCacheTimeout) !== null && _config$updates$fallb !== void 0 ? _config$updates$fallb : 0;
184
197
  }
185
198
  function getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion) {
186
- var _config$updates5, _config$updates6;
187
- if (((_config$updates5 = config.updates) === null || _config$updates5 === void 0 ? void 0 : _config$updates5.checkAutomatically) === 'ON_ERROR_RECOVERY') {
199
+ var _config$updates6, _config$updates7, _config$updates8, _config$updates9;
200
+ if (((_config$updates6 = config.updates) === null || _config$updates6 === void 0 ? void 0 : _config$updates6.checkAutomatically) === 'ON_ERROR_RECOVERY') {
188
201
  // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x
189
202
  if (expoUpdatesPackageVersion && _semver().default.gte(expoUpdatesPackageVersion, '0.11.0')) {
190
203
  return 'ERROR_RECOVERY_ONLY';
191
204
  }
192
205
  return 'NEVER';
193
- } else if (((_config$updates6 = config.updates) === null || _config$updates6 === void 0 ? void 0 : _config$updates6.checkAutomatically) === 'ON_LOAD') {
206
+ } else if (((_config$updates7 = config.updates) === null || _config$updates7 === void 0 ? void 0 : _config$updates7.checkAutomatically) === 'ON_LOAD') {
194
207
  return 'ALWAYS';
208
+ } else if (((_config$updates8 = config.updates) === null || _config$updates8 === void 0 ? void 0 : _config$updates8.checkAutomatically) === 'WIFI_ONLY') {
209
+ return 'WIFI_ONLY';
210
+ } else if (((_config$updates9 = config.updates) === null || _config$updates9 === void 0 ? void 0 : _config$updates9.checkAutomatically) === 'NEVER') {
211
+ return 'NEVER';
195
212
  }
196
213
  return 'ALWAYS';
197
214
  }
198
215
  function getUpdatesCodeSigningCertificate(projectRoot, config) {
199
- var _config$updates7;
200
- const codeSigningCertificatePath = (_config$updates7 = config.updates) === null || _config$updates7 === void 0 ? void 0 : _config$updates7.codeSigningCertificate;
216
+ var _config$updates10;
217
+ const codeSigningCertificatePath = (_config$updates10 = config.updates) === null || _config$updates10 === void 0 ? void 0 : _config$updates10.codeSigningCertificate;
201
218
  if (!codeSigningCertificatePath) {
202
219
  return undefined;
203
220
  }
@@ -208,8 +225,8 @@ function getUpdatesCodeSigningCertificate(projectRoot, config) {
208
225
  return _fs().default.readFileSync(finalPath, 'utf8');
209
226
  }
210
227
  function getUpdatesCodeSigningMetadata(config) {
211
- var _config$updates8;
212
- return (_config$updates8 = config.updates) === null || _config$updates8 === void 0 ? void 0 : _config$updates8.codeSigningMetadata;
228
+ var _config$updates11;
229
+ return (_config$updates11 = config.updates) === null || _config$updates11 === void 0 ? void 0 : _config$updates11.codeSigningMetadata;
213
230
  }
214
231
  function getUpdatesCodeSigningMetadataStringified(config) {
215
232
  const metadata = getUpdatesCodeSigningMetadata(config);
@@ -219,8 +236,8 @@ function getUpdatesCodeSigningMetadataStringified(config) {
219
236
  return JSON.stringify(metadata);
220
237
  }
221
238
  function getUpdatesRequestHeaders(config) {
222
- var _config$updates9;
223
- return (_config$updates9 = config.updates) === null || _config$updates9 === void 0 ? void 0 : _config$updates9.requestHeaders;
239
+ var _config$updates12;
240
+ return (_config$updates12 = config.updates) === null || _config$updates12 === void 0 ? void 0 : _config$updates12.requestHeaders;
224
241
  }
225
242
  function getUpdatesRequestHeadersStringified(config) {
226
243
  const metadata = getUpdatesRequestHeaders(config);
@@ -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","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":";;;;;;;;;;;;;;;;;;;;;AACA;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;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAA8C;AAOvC,SAASA,4BAA4B,CAACC,WAAmB,EAAiB;EAC/E,MAAMC,0BAA0B,GAAGC,sBAAW,CAACC,MAAM,CAACH,WAAW,EAAE,2BAA2B,CAAC;EAC/F,IAAI,CAACC,0BAA0B,IAAI,CAACG,aAAE,CAACC,UAAU,CAACJ,0BAA0B,CAAC,EAAE;IAC7E,OAAO,IAAI;EACb;EACA,MAAMK,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACJ,aAAE,CAACK,YAAY,CAACR,0BAA0B,EAAE,MAAM,CAAC,CAAC;EACnF,OAAOK,WAAW,CAACI,OAAO;AAC5B;AAEO,SAASC,YAAY,CAC1BC,MAA6D,EAC7DC,QAAuB,EACR;EAAA;EACf,uBAAID,MAAM,CAACE,OAAO,4CAAd,gBAAgBC,GAAG,EAAE;IAAA;IACvB,2BAAOH,MAAM,CAACE,OAAO,qDAAd,iBAAgBC,GAAG;EAC5B;EAEA,MAAMC,IAAI,GAAG,OAAOJ,MAAM,CAACK,KAAK,KAAK,QAAQ,GAAGL,MAAM,CAACK,KAAK,GAAGJ,QAAQ;EACvE,IAAI,CAACG,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EACA,OAAQ,qBAAoBA,IAAK,IAAGJ,MAAM,CAACM,IAAK,EAAC;AACnD;AAEO,SAASC,aAAa,CAACP,MAAmC,EAAU;EAAA;EACzE,0BAAOA,MAAM,CAACF,OAAO,6DAAI,OAAO;AAClC;AAEO,SAASU,gBAAgB,CAC9BR,MAGC,EACDS,QAA2B,EACnB;EACR,MAAMX,OAAO,GAAGY,aAAS,CAACC,OAAO,CAACC,UAAU,CAACZ,MAAM,CAAC;EACpD,QAAQS,QAAQ;IACd,KAAK,KAAK;MAAE;QACV,MAAMI,WAAW,GAAGH,aAAS,CAACC,OAAO,CAACG,cAAc,CAACd,MAAM,CAAC;QAC5D,OAAQ,GAAEF,OAAQ,IAAGe,WAAY,GAAE;MACrC;IACA,KAAK,SAAS;MAAE;QACd,MAAME,WAAW,GAAGC,iBAAa,CAACL,OAAO,CAACM,cAAc,CAACjB,MAAM,CAAC;QAChE,OAAQ,GAAEF,OAAQ,IAAGiB,WAAY,GAAE;MACrC;IACA;MAAS;QACP,MAAM,IAAIG,KAAK,CACZ,IAAGT,QAAS,kEAAiE,CAC/E;MACH;EAAC;AAEL;;AAEA;AACA;AACA;AACA;AACO,MAAMU,kBAAsD,GAAInB,MAAM,IAAK;EAAA;EAChF,IAAI,eAAAA,MAAM,CAACoB,GAAG,wCAAV,YAAYC,cAAc,IAAIrB,MAAM,CAACqB,cAAc,EAAE;IACvD,MAAMA,cAAc,GAAGC,iBAAiB,CAACtB,MAAM,EAAE,KAAK,CAAC;IACvD,IAAIqB,cAAc,EAAE;MAClBrB,MAAM,CAACoB,GAAG,GAAG;QACX,GAAGpB,MAAM,CAACoB,GAAG;QACbC;MACF,CAAC;IACH;EACF;EACA,IAAI,mBAAArB,MAAM,CAACuB,OAAO,4CAAd,gBAAgBF,cAAc,IAAIrB,MAAM,CAACqB,cAAc,EAAE;IAC3D,MAAMA,cAAc,GAAGC,iBAAiB,CAACtB,MAAM,EAAE,SAAS,CAAC;IAC3D,IAAIqB,cAAc,EAAE;MAClBrB,MAAM,CAACuB,OAAO,GAAG;QACf,GAAGvB,MAAM,CAACuB,OAAO;QACjBF;MACF,CAAC;IACH;EACF;EACA,OAAOrB,MAAM,CAACqB,cAAc;EAC5B,OAAOrB,MAAM;AACf,CAAC;AAAC;AAEK,SAASwB,yBAAyB,CACvC,GAAG,CAACxB,MAAM,EAAES,QAAQ,CAAuC,EAC5C;EACf,IAAI;IACF,OAAOa,iBAAiB,CAACtB,MAAM,EAAES,QAAQ,CAAC;EAC5C,CAAC,CAAC,OAAOgB,CAAC,EAAE;IACV,IAAI,IAAAC,iBAAO,EAAC,YAAY,EAAE,KAAK,CAAC,EAAE;MAChCC,OAAO,CAACC,GAAG,CAACH,CAAC,CAAC;IAChB;IACA,OAAO,IAAI;EACb;AACF;AAEO,SAASH,iBAAiB,CAC/BtB,MAGC,EACDS,QAA2B,EACZ;EAAA;EACf,MAAMY,cAAc,gDAAGrB,MAAM,CAACS,QAAQ,CAAC,qDAAhB,iBAAkBY,cAAc,yEAAIrB,MAAM,CAACqB,cAAc;EAChF,IAAI,CAACA,cAAc,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,IAAI,OAAOA,cAAc,KAAK,QAAQ,EAAE;IACtC,OAAOA,cAAc;EACvB,CAAC,MAAM,IAAIA,cAAc,CAACQ,MAAM,KAAK,YAAY,EAAE;IACjD,OAAOtB,aAAa,CAACP,MAAM,CAAC;EAC9B,CAAC,MAAM,IAAIqB,cAAc,CAACQ,MAAM,KAAK,eAAe,EAAE;IACpD,OAAOrB,gBAAgB,CAACR,MAAM,EAAES,QAAQ,CAAC;EAC3C,CAAC,MAAM,IAAIY,cAAc,CAACQ,MAAM,KAAK,YAAY,EAAE;IACjD,IAAI,CAAC7B,MAAM,CAAC8B,UAAU,EAAE;MACtB,MAAM,IAAIZ,KAAK,CAAC,4EAA4E,CAAC;IAC/F;IACA,OAAO,IAAAa,oDAA8B,EAAC/B,MAAM,CAAC8B,UAAU,CAAC;EAC1D;EAEA,MAAM,IAAIZ,KAAK,CACZ,IACC,OAAOG,cAAc,KAAK,QAAQ,GAAG1B,IAAI,CAACqC,SAAS,CAACX,cAAc,CAAC,GAAGA,cACvE,oIAAmI,CACrI;AACH;AAEO,SAASY,aAAa,CAACjC,MAA6C,EAAiB;EAC1F,OAAO,OAAOA,MAAM,CAAC8B,UAAU,KAAK,QAAQ,GAAG9B,MAAM,CAAC8B,UAAU,GAAG,IAAI;AACzE;AAEO,SAASI,iBAAiB,CAAClC,MAA0C,EAAW;EAAA;EACrF,OAAO,qBAAAA,MAAM,CAACE,OAAO,qDAAd,iBAAgBiC,OAAO,MAAK,KAAK;AAC1C;AAEO,SAASC,iBAAiB,CAACpC,MAA0C,EAAU;EAAA;EACpF,oDAAOA,MAAM,CAACE,OAAO,qDAAd,iBAAgBmC,sBAAsB,yEAAI,CAAC;AACpD;AAEO,SAASC,uBAAuB,CACrCtC,MAA0C,EAC1CuC,yBAAyC,EACG;EAAA;EAC5C,IAAI,qBAAAvC,MAAM,CAACE,OAAO,qDAAd,iBAAgBsC,kBAAkB,MAAK,mBAAmB,EAAE;IAC9D;IACA,IAAID,yBAAyB,IAAIE,iBAAM,CAACC,GAAG,CAACH,yBAAyB,EAAE,QAAQ,CAAC,EAAE;MAChF,OAAO,qBAAqB;IAC9B;IACA,OAAO,OAAO;EAChB,CAAC,MAAM,IAAI,qBAAAvC,MAAM,CAACE,OAAO,qDAAd,iBAAgBsC,kBAAkB,MAAK,SAAS,EAAE;IAC3D,OAAO,QAAQ;EACjB;EACA,OAAO,QAAQ;AACjB;AAEO,SAASG,gCAAgC,CAC9CvD,WAAmB,EACnBY,MAA0C,EACtB;EAAA;EACpB,MAAM4C,0BAA0B,uBAAG5C,MAAM,CAACE,OAAO,qDAAd,iBAAgB2C,sBAAsB;EACzE,IAAI,CAACD,0BAA0B,EAAE;IAC/B,OAAOE,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGC,eAAI,CAACC,IAAI,CAAC7D,WAAW,EAAEwD,0BAA0B,CAAC;EACpE,IAAI,CAACpD,aAAE,CAACC,UAAU,CAACsD,SAAS,CAAC,EAAE;IAC7B,MAAM,IAAI7B,KAAK,CAAE,8DAA6D6B,SAAU,EAAC,CAAC;EAC5F;EAEA,OAAOvD,aAAE,CAACK,YAAY,CAACkD,SAAS,EAAE,MAAM,CAAC;AAC3C;AAEO,SAASG,6BAA6B,CAC3ClD,MAA0C,EACwB;EAAA;EAClE,2BAAOA,MAAM,CAACE,OAAO,qDAAd,iBAAgBiD,mBAAmB;AAC5C;AAEO,SAASC,wCAAwC,CACtDpD,MAA0C,EACtB;EACpB,MAAMqD,QAAQ,GAAGH,6BAA6B,CAAClD,MAAM,CAAC;EACtD,IAAI,CAACqD,QAAQ,EAAE;IACb,OAAOP,SAAS;EAClB;EAEA,OAAOnD,IAAI,CAACqC,SAAS,CAACqB,QAAQ,CAAC;AACjC;AAEO,SAASC,wBAAwB,CACtCtD,MAA0C,EACmB;EAAA;EAC7D,2BAAOA,MAAM,CAACE,OAAO,qDAAd,iBAAgBqD,cAAc;AACvC;AAEO,SAASC,mCAAmC,CACjDxD,MAA0C,EACtB;EACpB,MAAMqD,QAAQ,GAAGC,wBAAwB,CAACtD,MAAM,CAAC;EACjD,IAAI,CAACqD,QAAQ,EAAE;IACb,OAAOP,SAAS;EAClB;EAEA,OAAOnD,IAAI,CAACqC,SAAS,CAACqB,QAAQ,CAAC;AACjC"}
1
+ {"version":3,"file":"Updates.js","names":["_sdkRuntimeVersions","data","require","_fs","_interopRequireDefault","_getenv","_path","_resolveFrom","_semver","_","obj","__esModule","default","getExpoUpdatesPackageVersion","projectRoot","expoUpdatesPackageJsonPath","resolveFrom","silent","fs","existsSync","packageJson","JSON","parse","readFileSync","version","shouldDefaultToClassicUpdates","config","_config$updates","updates","useClassicUpdates","getUpdateUrl","username","_config$updates2","url","_config$updates3","user","owner","slug","getAppVersion","_config$version","getNativeVersion","platform","IOSConfig","Version","getVersion","buildNumber","getBuildNumber","versionCode","AndroidConfig","getVersionCode","Error","withRuntimeVersion","_config$ios","_config$android","ios","runtimeVersion","getRuntimeVersion","android","exports","getRuntimeVersionNullable","e","boolish","console","log","_config$platform$runt","_config$platform","policy","sdkVersion","getRuntimeVersionForSDKVersion","stringify","getSDKVersion","getUpdatesEnabled","_config$updates4","enabled","undefined","getUpdatesTimeout","_config$updates$fallb","_config$updates5","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","_config$updates6","_config$updates7","_config$updates8","_config$updates9","checkAutomatically","semver","gte","getUpdatesCodeSigningCertificate","_config$updates10","codeSigningCertificatePath","codeSigningCertificate","finalPath","path","join","getUpdatesCodeSigningMetadata","_config$updates11","codeSigningMetadata","getUpdatesCodeSigningMetadataStringified","metadata","getUpdatesRequestHeaders","_config$updates12","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\nfunction shouldDefaultToClassicUpdates(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return !!config.updates?.useClassicUpdates;\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 if (!shouldDefaultToClassicUpdates(config)) {\n return null;\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(\n config: Pick<ExpoConfigUpdates, 'owner' | 'slug' | 'updates'>,\n username: string | null\n): boolean {\n // allow override of enabled property\n if (config.updates?.enabled !== undefined) {\n return config.updates.enabled;\n }\n\n // enable if URL is set (which respects shouldDefaultToClassicUpdates)\n return getUpdateUrl(config, username) !== 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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"}
@@ -12,6 +12,7 @@ export declare function readXMLAsync(options: {
12
12
  path: string;
13
13
  fallback?: string | null;
14
14
  }): Promise<XMLObject>;
15
+ export declare function _processAndroidXML(manifest: any): XMLObject;
15
16
  export declare function parseXMLAsync(contents: string): Promise<XMLObject>;
16
17
  export declare function format(manifest: any, { indentLevel, newline }?: {
17
18
  indentLevel?: number | undefined;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports._processAndroidXML = _processAndroidXML;
6
7
  exports.escapeAndroidString = escapeAndroidString;
7
8
  exports.format = format;
8
9
  exports.parseXMLAsync = parseXMLAsync;
@@ -46,7 +47,6 @@ async function writeXMLAsync(options) {
46
47
  await _fs().default.promises.writeFile(options.path, xml);
47
48
  }
48
49
  async function readXMLAsync(options) {
49
- var _manifest$resources;
50
50
  let contents = '';
51
51
  try {
52
52
  contents = await _fs().default.promises.readFile(options.path, {
@@ -58,7 +58,10 @@ async function readXMLAsync(options) {
58
58
  }
59
59
  const parser = new (_xml2js().Parser)();
60
60
  const manifest = await parser.parseStringPromise(contents || options.fallback || '');
61
-
61
+ return _processAndroidXML(manifest);
62
+ }
63
+ function _processAndroidXML(manifest) {
64
+ var _manifest$resources;
62
65
  // For strings.xml
63
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)) {
64
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) {
@@ -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":["_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 +1 @@
1
- {"version":3,"file":"commonCodeMod.js","names":["insertContentsAtOffset","srcContents","insertion","offset","srcContentsLength","length","Error","prefix","substring","suffix","replaceContentsWithOffset","contents","replacement","startOffset","endOffset","contentsLength","searchFromOffset","source","regexp","target","matchedIndex","search"],"sources":["../../src/utils/commonCodeMod.ts"],"sourcesContent":["export interface CodeBlock {\n start: number;\n end: number;\n code: string;\n}\n\n/**\n * Insert contents at given offset\n * @param srcContents source contents\n * @param insertion content to insert\n * @param offset `srcContents` offset to insert `insertion`\n * @returns updated contents\n */\nexport function insertContentsAtOffset(\n srcContents: string,\n insertion: string,\n offset: number\n): string {\n const srcContentsLength = srcContents.length;\n if (offset < 0 || offset > srcContentsLength) {\n throw new Error('Invalid parameters.');\n }\n if (offset === 0) {\n return `${insertion}${srcContents}`;\n } else if (offset === srcContentsLength) {\n return `${srcContents}${insertion}`;\n }\n\n const prefix = srcContents.substring(0, offset);\n const suffix = srcContents.substring(offset);\n return `${prefix}${insertion}${suffix}`;\n}\n\n/**\n * Replace contents at given start and end offset\n *\n * @param contents source contents\n * @param replacement new contents to place in [startOffset:endOffset]\n * @param startOffset `contents` start offset for replacement\n * @param endOffset `contents` end offset for replacement\n * @returns updated contents\n */\nexport function replaceContentsWithOffset(\n contents: string,\n replacement: string,\n startOffset: number,\n endOffset: number\n): string {\n const contentsLength = contents.length;\n if (\n startOffset < 0 ||\n endOffset < 0 ||\n startOffset >= contentsLength ||\n endOffset >= contentsLength ||\n startOffset > endOffset\n ) {\n throw new Error('Invalid parameters.');\n }\n const prefix = contents.substring(0, startOffset);\n const suffix = contents.substring(endOffset + 1);\n return `${prefix}${replacement}${suffix}`;\n}\n\n/**\n * String.prototype.search() with offset support\n *\n * @param source source string to search\n * @param regexp RegExp pattern to search\n * @param offset start offset of `source` to search `regexp` pattern\n * @returns The index of the first match between the regular expression and the given string, or -1 if no match was found.\n */\nexport function searchFromOffset(source: string, regexp: RegExp, offset: number): number {\n const target = source.substring(offset);\n const matchedIndex = target.search(regexp);\n return matchedIndex < 0 ? matchedIndex : matchedIndex + offset;\n}\n"],"mappings":";;;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAsB,CACpCC,WAAmB,EACnBC,SAAiB,EACjBC,MAAc,EACN;EACR,MAAMC,iBAAiB,GAAGH,WAAW,CAACI,MAAM;EAC5C,IAAIF,MAAM,GAAG,CAAC,IAAIA,MAAM,GAAGC,iBAAiB,EAAE;IAC5C,MAAM,IAAIE,KAAK,CAAC,qBAAqB,CAAC;EACxC;EACA,IAAIH,MAAM,KAAK,CAAC,EAAE;IAChB,OAAQ,GAAED,SAAU,GAAED,WAAY,EAAC;EACrC,CAAC,MAAM,IAAIE,MAAM,KAAKC,iBAAiB,EAAE;IACvC,OAAQ,GAAEH,WAAY,GAAEC,SAAU,EAAC;EACrC;EAEA,MAAMK,MAAM,GAAGN,WAAW,CAACO,SAAS,CAAC,CAAC,EAAEL,MAAM,CAAC;EAC/C,MAAMM,MAAM,GAAGR,WAAW,CAACO,SAAS,CAACL,MAAM,CAAC;EAC5C,OAAQ,GAAEI,MAAO,GAAEL,SAAU,GAAEO,MAAO,EAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,yBAAyB,CACvCC,QAAgB,EAChBC,WAAmB,EACnBC,WAAmB,EACnBC,SAAiB,EACT;EACR,MAAMC,cAAc,GAAGJ,QAAQ,CAACN,MAAM;EACtC,IACEQ,WAAW,GAAG,CAAC,IACfC,SAAS,GAAG,CAAC,IACbD,WAAW,IAAIE,cAAc,IAC7BD,SAAS,IAAIC,cAAc,IAC3BF,WAAW,GAAGC,SAAS,EACvB;IACA,MAAM,IAAIR,KAAK,CAAC,qBAAqB,CAAC;EACxC;EACA,MAAMC,MAAM,GAAGI,QAAQ,CAACH,SAAS,CAAC,CAAC,EAAEK,WAAW,CAAC;EACjD,MAAMJ,MAAM,GAAGE,QAAQ,CAACH,SAAS,CAACM,SAAS,GAAG,CAAC,CAAC;EAChD,OAAQ,GAAEP,MAAO,GAAEK,WAAY,GAAEH,MAAO,EAAC;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,gBAAgB,CAACC,MAAc,EAAEC,MAAc,EAAEf,MAAc,EAAU;EACvF,MAAMgB,MAAM,GAAGF,MAAM,CAACT,SAAS,CAACL,MAAM,CAAC;EACvC,MAAMiB,YAAY,GAAGD,MAAM,CAACE,MAAM,CAACH,MAAM,CAAC;EAC1C,OAAOE,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAGA,YAAY,GAAGjB,MAAM;AAChE"}
1
+ {"version":3,"file":"commonCodeMod.js","names":["insertContentsAtOffset","srcContents","insertion","offset","srcContentsLength","length","Error","prefix","substring","suffix","replaceContentsWithOffset","contents","replacement","startOffset","endOffset","contentsLength","searchFromOffset","source","regexp","target","matchedIndex","search"],"sources":["../../src/utils/commonCodeMod.ts"],"sourcesContent":["export interface CodeBlock {\n start: number;\n end: number;\n code: string;\n}\n\n/**\n * Insert contents at given offset\n * @param srcContents source contents\n * @param insertion content to insert\n * @param offset `srcContents` offset to insert `insertion`\n * @returns updated contents\n */\nexport function insertContentsAtOffset(\n srcContents: string,\n insertion: string,\n offset: number\n): string {\n const srcContentsLength = srcContents.length;\n if (offset < 0 || offset > srcContentsLength) {\n throw new Error('Invalid parameters.');\n }\n if (offset === 0) {\n return `${insertion}${srcContents}`;\n } else if (offset === srcContentsLength) {\n return `${srcContents}${insertion}`;\n }\n\n const prefix = srcContents.substring(0, offset);\n const suffix = srcContents.substring(offset);\n return `${prefix}${insertion}${suffix}`;\n}\n\n/**\n * Replace contents at given start and end offset\n *\n * @param contents source contents\n * @param replacement new contents to place in [startOffset:endOffset]\n * @param startOffset `contents` start offset for replacement\n * @param endOffset `contents` end offset for replacement\n * @returns updated contents\n */\nexport function replaceContentsWithOffset(\n contents: string,\n replacement: string,\n startOffset: number,\n endOffset: number\n): string {\n const contentsLength = contents.length;\n if (\n startOffset < 0 ||\n endOffset < 0 ||\n startOffset >= contentsLength ||\n endOffset >= contentsLength ||\n startOffset > endOffset\n ) {\n throw new Error('Invalid parameters.');\n }\n const prefix = contents.substring(0, startOffset);\n const suffix = contents.substring(endOffset + 1);\n return `${prefix}${replacement}${suffix}`;\n}\n\n/**\n * String.prototype.search() with offset support\n *\n * @param source source string to search\n * @param regexp RegExp pattern to search\n * @param offset start offset of `source` to search `regexp` pattern\n * @returns The index of the first match between the regular expression and the given string, or -1 if no match was found.\n */\nexport function searchFromOffset(source: string, regexp: RegExp, offset: number): number {\n const target = source.substring(offset);\n const matchedIndex = target.search(regexp);\n return matchedIndex < 0 ? matchedIndex : matchedIndex + offset;\n}\n"],"mappings":";;;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAsBA,CACpCC,WAAmB,EACnBC,SAAiB,EACjBC,MAAc,EACN;EACR,MAAMC,iBAAiB,GAAGH,WAAW,CAACI,MAAM;EAC5C,IAAIF,MAAM,GAAG,CAAC,IAAIA,MAAM,GAAGC,iBAAiB,EAAE;IAC5C,MAAM,IAAIE,KAAK,CAAC,qBAAqB,CAAC;EACxC;EACA,IAAIH,MAAM,KAAK,CAAC,EAAE;IAChB,OAAQ,GAAED,SAAU,GAAED,WAAY,EAAC;EACrC,CAAC,MAAM,IAAIE,MAAM,KAAKC,iBAAiB,EAAE;IACvC,OAAQ,GAAEH,WAAY,GAAEC,SAAU,EAAC;EACrC;EAEA,MAAMK,MAAM,GAAGN,WAAW,CAACO,SAAS,CAAC,CAAC,EAAEL,MAAM,CAAC;EAC/C,MAAMM,MAAM,GAAGR,WAAW,CAACO,SAAS,CAACL,MAAM,CAAC;EAC5C,OAAQ,GAAEI,MAAO,GAAEL,SAAU,GAAEO,MAAO,EAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,yBAAyBA,CACvCC,QAAgB,EAChBC,WAAmB,EACnBC,WAAmB,EACnBC,SAAiB,EACT;EACR,MAAMC,cAAc,GAAGJ,QAAQ,CAACN,MAAM;EACtC,IACEQ,WAAW,GAAG,CAAC,IACfC,SAAS,GAAG,CAAC,IACbD,WAAW,IAAIE,cAAc,IAC7BD,SAAS,IAAIC,cAAc,IAC3BF,WAAW,GAAGC,SAAS,EACvB;IACA,MAAM,IAAIR,KAAK,CAAC,qBAAqB,CAAC;EACxC;EACA,MAAMC,MAAM,GAAGI,QAAQ,CAACH,SAAS,CAAC,CAAC,EAAEK,WAAW,CAAC;EACjD,MAAMJ,MAAM,GAAGE,QAAQ,CAACH,SAAS,CAACM,SAAS,GAAG,CAAC,CAAC;EAChD,OAAQ,GAAEP,MAAO,GAAEK,WAAY,GAAEH,MAAO,EAAC;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,gBAAgBA,CAACC,MAAc,EAAEC,MAAc,EAAEf,MAAc,EAAU;EACvF,MAAMgB,MAAM,GAAGF,MAAM,CAACT,SAAS,CAACL,MAAM,CAAC;EACvC,MAAMiB,YAAY,GAAGD,MAAM,CAACE,MAAM,CAACH,MAAM,CAAC;EAC1C,OAAOE,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAGA,YAAY,GAAGjB,MAAM;AAChE"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":["UnexpectedError","Error","constructor","message","PluginError","code","cause","name"],"sources":["../../src/utils/errors.ts"],"sourcesContent":["export class UnexpectedError extends Error {\n readonly name = 'UnexpectedError';\n\n constructor(message: string) {\n super(`${message}\\nPlease report this as an issue on https://github.com/expo/expo-cli/issues`);\n }\n}\n\nexport type PluginErrorCode =\n | 'INVALID_PLUGIN_TYPE'\n | 'INVALID_PLUGIN_IMPORT'\n | 'PLUGIN_NOT_FOUND'\n | 'CONFLICTING_PROVIDER'\n | 'INVALID_MOD_ORDER'\n | 'MISSING_PROVIDER';\n\n/**\n * Based on `JsonFileError` from `@expo/json-file`\n */\nexport class PluginError extends Error {\n readonly name = 'PluginError';\n readonly isPluginError = true;\n\n constructor(message: string, public code: PluginErrorCode, public cause?: Error) {\n super(cause ? `${message}\\n└─ Cause: ${cause.name}: ${cause.message}` : message);\n }\n}\n"],"mappings":";;;;;;;;;AAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAW,CAACC,OAAe,EAAE;IAC3B,KAAK,CAAE,GAAEA,OAAQ,6EAA4E,CAAC;IAAC,8BAHjF,iBAAiB;EAIjC;AACF;AAAC;AAUD;AACA;AACA;AACO,MAAMC,WAAW,SAASH,KAAK,CAAC;EAIrCC,WAAW,CAACC,OAAe,EAASE,IAAqB,EAASC,KAAa,EAAE;IAC/E,KAAK,CAACA,KAAK,GAAI,GAAEH,OAAQ,eAAcG,KAAK,CAACC,IAAK,KAAID,KAAK,CAACH,OAAQ,EAAC,GAAGA,OAAO,CAAC;IAAC,KAD/CE,IAAqB,GAArBA,IAAqB;IAAA,KAASC,KAAa,GAAbA,KAAa;IAAA,8BAH/D,aAAa;IAAA,uCACJ,IAAI;EAI7B;AACF;AAAC"}
1
+ {"version":3,"file":"errors.js","names":["UnexpectedError","Error","constructor","message","_defineProperty","exports","PluginError","code","cause","name"],"sources":["../../src/utils/errors.ts"],"sourcesContent":["export class UnexpectedError extends Error {\n readonly name = 'UnexpectedError';\n\n constructor(message: string) {\n super(`${message}\\nPlease report this as an issue on https://github.com/expo/expo-cli/issues`);\n }\n}\n\nexport type PluginErrorCode =\n | 'INVALID_PLUGIN_TYPE'\n | 'INVALID_PLUGIN_IMPORT'\n | 'PLUGIN_NOT_FOUND'\n | 'CONFLICTING_PROVIDER'\n | 'INVALID_MOD_ORDER'\n | 'MISSING_PROVIDER';\n\n/**\n * Based on `JsonFileError` from `@expo/json-file`\n */\nexport class PluginError extends Error {\n readonly name = 'PluginError';\n readonly isPluginError = true;\n\n constructor(message: string, public code: PluginErrorCode, public cause?: Error) {\n super(cause ? `${message}\\n└─ Cause: ${cause.name}: ${cause.message}` : message);\n }\n}\n"],"mappings":";;;;;;;;;AAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAAE,GAAEA,OAAQ,6EAA4E,CAAC;IAACC,eAAA,eAHjF,iBAAiB;EAIjC;AACF;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA;AAUD;AACA;AACA;AACO,MAAMM,WAAW,SAASL,KAAK,CAAC;EAIrCC,WAAWA,CAACC,OAAe,EAASI,IAAqB,EAASC,KAAa,EAAE;IAC/E,KAAK,CAACA,KAAK,GAAI,GAAEL,OAAQ,eAAcK,KAAK,CAACC,IAAK,KAAID,KAAK,CAACL,OAAQ,EAAC,GAAGA,OAAO,CAAC;IAAC,KAD/CI,IAAqB,GAArBA,IAAqB;IAAA,KAASC,KAAa,GAAbA,KAAa;IAAAJ,eAAA,eAH/D,aAAa;IAAAA,eAAA,wBACJ,IAAI;EAI7B;AACF;AAACC,OAAA,CAAAC,WAAA,GAAAA,WAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","names":["copyFilePathToPathAsync","src","dest","srcFile","fs","promises","readFile","mkdir","path","dirname","recursive","writeFile","removeFile","filePath","unlinkSync","error","code"],"sources":["../../src/utils/fs.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\n/** A basic function that copies a single file to another file location. */\nexport async function copyFilePathToPathAsync(src: string, dest: string): Promise<void> {\n const srcFile = await fs.promises.readFile(src);\n await fs.promises.mkdir(path.dirname(dest), { recursive: true });\n await fs.promises.writeFile(dest, srcFile);\n}\n\n/** Remove a single file (not directory). Returns `true` if a file was actually deleted. */\nexport function removeFile(filePath: string): boolean {\n try {\n fs.unlinkSync(filePath);\n return true;\n } catch (error: any) {\n // Skip if the remove did nothing.\n if (error.code === 'ENOENT') {\n return false;\n }\n throw error;\n }\n}\n"],"mappings":";;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAwB;AAExB;AACO,eAAeA,uBAAuB,CAACC,GAAW,EAAEC,IAAY,EAAiB;EACtF,MAAMC,OAAO,GAAG,MAAMC,aAAE,CAACC,QAAQ,CAACC,QAAQ,CAACL,GAAG,CAAC;EAC/C,MAAMG,aAAE,CAACC,QAAQ,CAACE,KAAK,CAACC,eAAI,CAACC,OAAO,CAACP,IAAI,CAAC,EAAE;IAAEQ,SAAS,EAAE;EAAK,CAAC,CAAC;EAChE,MAAMN,aAAE,CAACC,QAAQ,CAACM,SAAS,CAACT,IAAI,EAAEC,OAAO,CAAC;AAC5C;;AAEA;AACO,SAASS,UAAU,CAACC,QAAgB,EAAW;EACpD,IAAI;IACFT,aAAE,CAACU,UAAU,CAACD,QAAQ,CAAC;IACvB,OAAO,IAAI;EACb,CAAC,CAAC,OAAOE,KAAU,EAAE;IACnB;IACA,IAAIA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC3B,OAAO,KAAK;IACd;IACA,MAAMD,KAAK;EACb;AACF"}
1
+ {"version":3,"file":"fs.js","names":["_fs","data","_interopRequireDefault","require","_path","obj","__esModule","default","copyFilePathToPathAsync","src","dest","srcFile","fs","promises","readFile","mkdir","path","dirname","recursive","writeFile","removeFile","filePath","unlinkSync","error","code"],"sources":["../../src/utils/fs.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\n/** A basic function that copies a single file to another file location. */\nexport async function copyFilePathToPathAsync(src: string, dest: string): Promise<void> {\n const srcFile = await fs.promises.readFile(src);\n await fs.promises.mkdir(path.dirname(dest), { recursive: true });\n await fs.promises.writeFile(dest, srcFile);\n}\n\n/** Remove a single file (not directory). Returns `true` if a file was actually deleted. */\nexport function removeFile(filePath: string): boolean {\n try {\n fs.unlinkSync(filePath);\n return true;\n } catch (error: any) {\n // Skip if the remove did nothing.\n if (error.code === 'ENOENT') {\n return false;\n }\n throw error;\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;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAwB,SAAAC,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAExB;AACO,eAAeG,uBAAuBA,CAACC,GAAW,EAAEC,IAAY,EAAiB;EACtF,MAAMC,OAAO,GAAG,MAAMC,aAAE,CAACC,QAAQ,CAACC,QAAQ,CAACL,GAAG,CAAC;EAC/C,MAAMG,aAAE,CAACC,QAAQ,CAACE,KAAK,CAACC,eAAI,CAACC,OAAO,CAACP,IAAI,CAAC,EAAE;IAAEQ,SAAS,EAAE;EAAK,CAAC,CAAC;EAChE,MAAMN,aAAE,CAACC,QAAQ,CAACM,SAAS,CAACT,IAAI,EAAEC,OAAO,CAAC;AAC5C;;AAEA;AACO,SAASS,UAAUA,CAACC,QAAgB,EAAW;EACpD,IAAI;IACFT,aAAE,CAACU,UAAU,CAACD,QAAQ,CAAC;IACvB,OAAO,IAAI;EACb,CAAC,CAAC,OAAOE,KAAU,EAAE;IACnB;IACA,IAAIA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC3B,OAAO,KAAK;IACd;IACA,MAAMD,KAAK;EACb;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateCode.js","names":["getGeneratedSectionIndexes","src","tag","contents","split","start","findIndex","line","includes","end","mergeContents","newSrc","anchor","offset","comment","header","createGeneratedHeaderComment","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) => line.includes(`@generated begin ${tag}`));\n const end = contents.findIndex((line) => line.includes(`@generated end ${tag}`));\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","includes","end","mergeContents","newSrc","anchor","offset","comment","header","createGeneratedHeaderComment","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) => line.includes(`@generated begin ${tag}`));\n const end = contents.findIndex((line) => line.includes(`@generated end ${tag}`));\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 +1 @@
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,cAAc,CAC5BC,MAAqC,EACrCC,IAAY,EACc;EAAA;EAC1B,qDAAOD,MAAM,CAACE,SAAS,gFAAhB,kBAAkBC,aAAa,2DAA/B,uBAAkCF,IAAI,CAAC,yEAAI,IAAI;AACxD;AAEO,SAASG,cAAc,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"}
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 +1 @@
1
- {"version":3,"file":"matchBrackets.js","names":["LEFT_BRACKETS","RIGHT_BRACKETS","findMatchingBracketPosition","contents","bracket","offset","firstBracketPos","indexOf","stackCounter","matchingBracket","getMatchingBracket","isLeftBracket","contentsLength","length","i","c","leftBracketList","includes","Error"],"sources":["../../src/utils/matchBrackets.ts"],"sourcesContent":["const LEFT_BRACKETS = ['(', '{'] as const;\nconst RIGHT_BRACKETS = [')', '}'] as const;\n\ntype LeftBracket = typeof LEFT_BRACKETS[number];\ntype RightBracket = typeof RIGHT_BRACKETS[number];\ntype Bracket = LeftBracket | RightBracket;\n\nexport function findMatchingBracketPosition(\n contents: string,\n bracket: Bracket,\n offset: number = 0\n): number {\n // search first occurrence of `bracket`\n const firstBracketPos = contents.indexOf(bracket, offset);\n if (firstBracketPos < 0) {\n return -1;\n }\n\n let stackCounter = 0;\n const matchingBracket = getMatchingBracket(bracket);\n\n if (isLeftBracket(bracket)) {\n const contentsLength = contents.length;\n // search forward\n for (let i = firstBracketPos + 1; i < contentsLength; ++i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n } else {\n // search backward\n for (let i = firstBracketPos - 1; i >= 0; --i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n }\n\n return -1;\n}\n\nfunction isLeftBracket(bracket: Bracket): boolean {\n const leftBracketList: readonly Bracket[] = LEFT_BRACKETS;\n return leftBracketList.includes(bracket);\n}\n\nfunction getMatchingBracket(bracket: Bracket): Bracket {\n switch (bracket) {\n case '(':\n return ')';\n case ')':\n return '(';\n case '{':\n return '}';\n case '}':\n return '{';\n default:\n throw new Error(`Unsupported bracket - ${bracket}`);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU;AACzC,MAAMC,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU;AAMnC,SAASC,2BAA2B,CACzCC,QAAgB,EAChBC,OAAgB,EAChBC,MAAc,GAAG,CAAC,EACV;EACR;EACA,MAAMC,eAAe,GAAGH,QAAQ,CAACI,OAAO,CAACH,OAAO,EAAEC,MAAM,CAAC;EACzD,IAAIC,eAAe,GAAG,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC;EACX;EAEA,IAAIE,YAAY,GAAG,CAAC;EACpB,MAAMC,eAAe,GAAGC,kBAAkB,CAACN,OAAO,CAAC;EAEnD,IAAIO,aAAa,CAACP,OAAO,CAAC,EAAE;IAC1B,MAAMQ,cAAc,GAAGT,QAAQ,CAACU,MAAM;IACtC;IACA,KAAK,IAAIC,CAAC,GAAGR,eAAe,GAAG,CAAC,EAAEQ,CAAC,GAAGF,cAAc,EAAE,EAAEE,CAAC,EAAE;MACzD,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAC,CAAC;MACrB,IAAIC,CAAC,KAAKX,OAAO,EAAE;QACjBI,YAAY,IAAI,CAAC;MACnB,CAAC,MAAM,IAAIO,CAAC,KAAKN,eAAe,EAAE;QAChC,IAAID,YAAY,KAAK,CAAC,EAAE;UACtB,OAAOM,CAAC;QACV;QACAN,YAAY,IAAI,CAAC;MACnB;IACF;EACF,CAAC,MAAM;IACL;IACA,KAAK,IAAIM,CAAC,GAAGR,eAAe,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAE,EAAEA,CAAC,EAAE;MAC7C,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAC,CAAC;MACrB,IAAIC,CAAC,KAAKX,OAAO,EAAE;QACjBI,YAAY,IAAI,CAAC;MACnB,CAAC,MAAM,IAAIO,CAAC,KAAKN,eAAe,EAAE;QAChC,IAAID,YAAY,KAAK,CAAC,EAAE;UACtB,OAAOM,CAAC;QACV;QACAN,YAAY,IAAI,CAAC;MACnB;IACF;EACF;EAEA,OAAO,CAAC,CAAC;AACX;AAEA,SAASG,aAAa,CAACP,OAAgB,EAAW;EAChD,MAAMY,eAAmC,GAAGhB,aAAa;EACzD,OAAOgB,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAC;AAC1C;AAEA,SAASM,kBAAkB,CAACN,OAAgB,EAAW;EACrD,QAAQA,OAAO;IACb,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ;MACE,MAAM,IAAIc,KAAK,CAAE,yBAAwBd,OAAQ,EAAC,CAAC;EAAC;AAE1D"}
1
+ {"version":3,"file":"matchBrackets.js","names":["LEFT_BRACKETS","RIGHT_BRACKETS","findMatchingBracketPosition","contents","bracket","offset","firstBracketPos","indexOf","stackCounter","matchingBracket","getMatchingBracket","isLeftBracket","contentsLength","length","i","c","leftBracketList","includes","Error"],"sources":["../../src/utils/matchBrackets.ts"],"sourcesContent":["const LEFT_BRACKETS = ['(', '{'] as const;\nconst RIGHT_BRACKETS = [')', '}'] as const;\n\ntype LeftBracket = typeof LEFT_BRACKETS[number];\ntype RightBracket = typeof RIGHT_BRACKETS[number];\ntype Bracket = LeftBracket | RightBracket;\n\nexport function findMatchingBracketPosition(\n contents: string,\n bracket: Bracket,\n offset: number = 0\n): number {\n // search first occurrence of `bracket`\n const firstBracketPos = contents.indexOf(bracket, offset);\n if (firstBracketPos < 0) {\n return -1;\n }\n\n let stackCounter = 0;\n const matchingBracket = getMatchingBracket(bracket);\n\n if (isLeftBracket(bracket)) {\n const contentsLength = contents.length;\n // search forward\n for (let i = firstBracketPos + 1; i < contentsLength; ++i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n } else {\n // search backward\n for (let i = firstBracketPos - 1; i >= 0; --i) {\n const c = contents[i];\n if (c === bracket) {\n stackCounter += 1;\n } else if (c === matchingBracket) {\n if (stackCounter === 0) {\n return i;\n }\n stackCounter -= 1;\n }\n }\n }\n\n return -1;\n}\n\nfunction isLeftBracket(bracket: Bracket): boolean {\n const leftBracketList: readonly Bracket[] = LEFT_BRACKETS;\n return leftBracketList.includes(bracket);\n}\n\nfunction getMatchingBracket(bracket: Bracket): Bracket {\n switch (bracket) {\n case '(':\n return ')';\n case ')':\n return '(';\n case '{':\n return '}';\n case '}':\n return '{';\n default:\n throw new Error(`Unsupported bracket - ${bracket}`);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU;AACzC,MAAMC,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU;AAMnC,SAASC,2BAA2BA,CACzCC,QAAgB,EAChBC,OAAgB,EAChBC,MAAc,GAAG,CAAC,EACV;EACR;EACA,MAAMC,eAAe,GAAGH,QAAQ,CAACI,OAAO,CAACH,OAAO,EAAEC,MAAM,CAAC;EACzD,IAAIC,eAAe,GAAG,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC;EACX;EAEA,IAAIE,YAAY,GAAG,CAAC;EACpB,MAAMC,eAAe,GAAGC,kBAAkB,CAACN,OAAO,CAAC;EAEnD,IAAIO,aAAa,CAACP,OAAO,CAAC,EAAE;IAC1B,MAAMQ,cAAc,GAAGT,QAAQ,CAACU,MAAM;IACtC;IACA,KAAK,IAAIC,CAAC,GAAGR,eAAe,GAAG,CAAC,EAAEQ,CAAC,GAAGF,cAAc,EAAE,EAAEE,CAAC,EAAE;MACzD,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAC,CAAC;MACrB,IAAIC,CAAC,KAAKX,OAAO,EAAE;QACjBI,YAAY,IAAI,CAAC;MACnB,CAAC,MAAM,IAAIO,CAAC,KAAKN,eAAe,EAAE;QAChC,IAAID,YAAY,KAAK,CAAC,EAAE;UACtB,OAAOM,CAAC;QACV;QACAN,YAAY,IAAI,CAAC;MACnB;IACF;EACF,CAAC,MAAM;IACL;IACA,KAAK,IAAIM,CAAC,GAAGR,eAAe,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAE,EAAEA,CAAC,EAAE;MAC7C,MAAMC,CAAC,GAAGZ,QAAQ,CAACW,CAAC,CAAC;MACrB,IAAIC,CAAC,KAAKX,OAAO,EAAE;QACjBI,YAAY,IAAI,CAAC;MACnB,CAAC,MAAM,IAAIO,CAAC,KAAKN,eAAe,EAAE;QAChC,IAAID,YAAY,KAAK,CAAC,EAAE;UACtB,OAAOM,CAAC;QACV;QACAN,YAAY,IAAI,CAAC;MACnB;IACF;EACF;EAEA,OAAO,CAAC,CAAC;AACX;AAEA,SAASG,aAAaA,CAACP,OAAgB,EAAW;EAChD,MAAMY,eAAmC,GAAGhB,aAAa;EACzD,OAAOgB,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAC;AAC1C;AAEA,SAASM,kBAAkBA,CAACN,OAAgB,EAAW;EACrD,QAAQA,OAAO;IACb,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ,KAAK,GAAG;MACN,OAAO,GAAG;IACZ;MACE,MAAM,IAAIc,KAAK,CAAE,yBAAwBd,OAAQ,EAAC,CAAC;EAAC;AAE1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"modules.js","names":["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;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAoB;AAEpB;AACA;AACA;AACA;AACA;AACA,eAAeA,SAAS,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,eAAe,CAACJ,IAAY,EAAoB;EAAA;EACpE,oDAAQ,MAAMD,SAAS,CAACC,IAAI,CAAC,qDAAtB,iBAAyBK,MAAM,EAAE,yEAAI,KAAK;AACnD;AAEO,eAAeC,oBAAoB,CAACN,IAAY,EAAoB;EAAA;EACzE,qDAAQ,MAAMD,SAAS,CAACC,IAAI,CAAC,sDAAtB,kBAAyBO,WAAW,EAAE,yEAAI,KAAK;AACxD;AAEO,SAASC,UAAU,CAACR,IAAY,EAAW;EAChD,IAAI;IACF,OAAOC,aAAE,CAACQ,QAAQ,CAACT,IAAI,CAAC,CAACK,MAAM,EAAE;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","_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,EAAE,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,EAAE,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,EAAE;EACnC,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"obj.js","names":["get","obj","key","branches","split","current","branch","shift","undefined"],"sources":["../../src/utils/obj.ts"],"sourcesContent":["/** `lodash.get` */\nexport function get(obj: any, key: string): any {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (!(branch in current)) {\n return undefined;\n }\n current = current[branch];\n }\n return current;\n}\n"],"mappings":";;;;;;AAAA;AACO,SAASA,GAAG,CAACC,GAAQ,EAAEC,GAAW,EAAO;EAC9C,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC;EAC/B,IAAIC,OAAY,GAAGJ,GAAG;EACtB,IAAIK,MAA0B;EAC9B,OAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,EAAG;IAClC,IAAI,EAAED,MAAM,IAAID,OAAO,CAAC,EAAE;MACxB,OAAOG,SAAS;IAClB;IACAH,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC;EAC3B;EACA,OAAOD,OAAO;AAChB"}
1
+ {"version":3,"file":"obj.js","names":["get","obj","key","branches","split","current","branch","shift","undefined"],"sources":["../../src/utils/obj.ts"],"sourcesContent":["/** `lodash.get` */\nexport function get(obj: any, key: string): any {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (!(branch in current)) {\n return undefined;\n }\n current = current[branch];\n }\n return current;\n}\n"],"mappings":";;;;;;AAAA;AACO,SAASA,GAAGA,CAACC,GAAQ,EAAEC,GAAW,EAAO;EAC9C,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC;EAC/B,IAAIC,OAAY,GAAGJ,GAAG;EACtB,IAAIK,MAA0B;EAC9B,OAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,EAAG;IAClC,IAAI,EAAED,MAAM,IAAID,OAAO,CAAC,EAAE;MACxB,OAAOG,SAAS;IAClB;IACAH,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC;EAC3B;EACA,OAAOD,OAAO;AAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.js","names":["pluginFileName","findUpPackageJson","root","packageJson","findUp","sync","cwd","assert","resolvePluginForModule","projectRoot","modulePath","resolved","resolveFrom","silent","PluginError","moduleNameIsDirectFileReference","isPluginFile","filePath","findUpPlugin","pathIsFilePath","name","match","slashCount","split","path","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","default","require"],"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 { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { PluginError } from './errors';\nimport { fileExists } from './modules';\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","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 { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { PluginError } from './errors';\nimport { fileExists } from './modules';\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 +1 @@
1
- {"version":3,"file":"sortObject.js","names":["sortObject","obj","compareFn","Object","keys","sort","reduce","acc","key","sortObjWithOrder","order","sorted","sortWithOrder","groupOrder","Set","concat","length","shift","index","indexOf","item","splice","push","reverseSortString","a","b"],"sources":["../../src/utils/sortObject.ts"],"sourcesContent":["export function sortObject<T extends Record<string, any> = Record<string, any>>(\n obj: T,\n compareFn?: (a: string, b: string) => number\n): T {\n return Object.keys(obj)\n .sort(compareFn)\n .reduce(\n (acc, key) => ({\n ...acc,\n [key]: obj[key],\n }),\n {}\n ) as T;\n}\n\nexport function sortObjWithOrder<T extends Record<string, any> = Record<string, any>>(\n obj: T,\n order: string[]\n): T {\n const sorted = sortWithOrder(Object.keys(obj), order);\n\n return sorted.reduce(\n (acc, key) => ({\n ...acc,\n [key]: obj[key],\n }),\n {}\n ) as T;\n}\n\nexport function sortWithOrder(obj: string[], order: string[]): string[] {\n const groupOrder = [...new Set(order.concat(obj))];\n const sorted: string[] = [];\n\n while (groupOrder.length) {\n const key = groupOrder.shift()!;\n const index = obj.indexOf(key);\n if (index > -1) {\n const [item] = obj.splice(index, 1);\n sorted.push(item);\n }\n }\n\n return sorted;\n}\n\nexport const reverseSortString = (a: string, b: string) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n};\n"],"mappings":";;;;;;;;;AAAO,SAASA,UAAU,CACxBC,GAAM,EACNC,SAA4C,EACzC;EACH,OAAOC,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,CACpBI,IAAI,CAACH,SAAS,CAAC,CACfI,MAAM,CACL,CAACC,GAAG,EAAEC,GAAG,MAAM;IACb,GAAGD,GAAG;IACN,CAACC,GAAG,GAAGP,GAAG,CAACO,GAAG;EAChB,CAAC,CAAC,EACF,CAAC,CAAC,CACH;AACL;AAEO,SAASC,gBAAgB,CAC9BR,GAAM,EACNS,KAAe,EACZ;EACH,MAAMC,MAAM,GAAGC,aAAa,CAACT,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,EAAES,KAAK,CAAC;EAErD,OAAOC,MAAM,CAACL,MAAM,CAClB,CAACC,GAAG,EAAEC,GAAG,MAAM;IACb,GAAGD,GAAG;IACN,CAACC,GAAG,GAAGP,GAAG,CAACO,GAAG;EAChB,CAAC,CAAC,EACF,CAAC,CAAC,CACH;AACH;AAEO,SAASI,aAAa,CAACX,GAAa,EAAES,KAAe,EAAY;EACtE,MAAMG,UAAU,GAAG,CAAC,GAAG,IAAIC,GAAG,CAACJ,KAAK,CAACK,MAAM,CAACd,GAAG,CAAC,CAAC,CAAC;EAClD,MAAMU,MAAgB,GAAG,EAAE;EAE3B,OAAOE,UAAU,CAACG,MAAM,EAAE;IACxB,MAAMR,GAAG,GAAGK,UAAU,CAACI,KAAK,EAAG;IAC/B,MAAMC,KAAK,GAAGjB,GAAG,CAACkB,OAAO,CAACX,GAAG,CAAC;IAC9B,IAAIU,KAAK,GAAG,CAAC,CAAC,EAAE;MACd,MAAM,CAACE,IAAI,CAAC,GAAGnB,GAAG,CAACoB,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;MACnCP,MAAM,CAACW,IAAI,CAACF,IAAI,CAAC;IACnB;EACF;EAEA,OAAOT,MAAM;AACf;AAEO,MAAMY,iBAAiB,GAAG,CAACC,CAAS,EAAEC,CAAS,KAAK;EACzD,IAAID,CAAC,GAAGC,CAAC,EAAE,OAAO,CAAC;EACnB,IAAID,CAAC,GAAGC,CAAC,EAAE,OAAO,CAAC,CAAC;EACpB,OAAO,CAAC;AACV,CAAC;AAAC"}
1
+ {"version":3,"file":"sortObject.js","names":["sortObject","obj","compareFn","Object","keys","sort","reduce","acc","key","sortObjWithOrder","order","sorted","sortWithOrder","groupOrder","Set","concat","length","shift","index","indexOf","item","splice","push","reverseSortString","a","b","exports"],"sources":["../../src/utils/sortObject.ts"],"sourcesContent":["export function sortObject<T extends Record<string, any> = Record<string, any>>(\n obj: T,\n compareFn?: (a: string, b: string) => number\n): T {\n return Object.keys(obj)\n .sort(compareFn)\n .reduce(\n (acc, key) => ({\n ...acc,\n [key]: obj[key],\n }),\n {}\n ) as T;\n}\n\nexport function sortObjWithOrder<T extends Record<string, any> = Record<string, any>>(\n obj: T,\n order: string[]\n): T {\n const sorted = sortWithOrder(Object.keys(obj), order);\n\n return sorted.reduce(\n (acc, key) => ({\n ...acc,\n [key]: obj[key],\n }),\n {}\n ) as T;\n}\n\nexport function sortWithOrder(obj: string[], order: string[]): string[] {\n const groupOrder = [...new Set(order.concat(obj))];\n const sorted: string[] = [];\n\n while (groupOrder.length) {\n const key = groupOrder.shift()!;\n const index = obj.indexOf(key);\n if (index > -1) {\n const [item] = obj.splice(index, 1);\n sorted.push(item);\n }\n }\n\n return sorted;\n}\n\nexport const reverseSortString = (a: string, b: string) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n};\n"],"mappings":";;;;;;;;;AAAO,SAASA,UAAUA,CACxBC,GAAM,EACNC,SAA4C,EACzC;EACH,OAAOC,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,CACpBI,IAAI,CAACH,SAAS,CAAC,CACfI,MAAM,CACL,CAACC,GAAG,EAAEC,GAAG,MAAM;IACb,GAAGD,GAAG;IACN,CAACC,GAAG,GAAGP,GAAG,CAACO,GAAG;EAChB,CAAC,CAAC,EACF,CAAC,CAAC,CACH;AACL;AAEO,SAASC,gBAAgBA,CAC9BR,GAAM,EACNS,KAAe,EACZ;EACH,MAAMC,MAAM,GAAGC,aAAa,CAACT,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,EAAES,KAAK,CAAC;EAErD,OAAOC,MAAM,CAACL,MAAM,CAClB,CAACC,GAAG,EAAEC,GAAG,MAAM;IACb,GAAGD,GAAG;IACN,CAACC,GAAG,GAAGP,GAAG,CAACO,GAAG;EAChB,CAAC,CAAC,EACF,CAAC,CAAC,CACH;AACH;AAEO,SAASI,aAAaA,CAACX,GAAa,EAAES,KAAe,EAAY;EACtE,MAAMG,UAAU,GAAG,CAAC,GAAG,IAAIC,GAAG,CAACJ,KAAK,CAACK,MAAM,CAACd,GAAG,CAAC,CAAC,CAAC;EAClD,MAAMU,MAAgB,GAAG,EAAE;EAE3B,OAAOE,UAAU,CAACG,MAAM,EAAE;IACxB,MAAMR,GAAG,GAAGK,UAAU,CAACI,KAAK,EAAG;IAC/B,MAAMC,KAAK,GAAGjB,GAAG,CAACkB,OAAO,CAACX,GAAG,CAAC;IAC9B,IAAIU,KAAK,GAAG,CAAC,CAAC,EAAE;MACd,MAAM,CAACE,IAAI,CAAC,GAAGnB,GAAG,CAACoB,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;MACnCP,MAAM,CAACW,IAAI,CAACF,IAAI,CAAC;IACnB;EACF;EAEA,OAAOT,MAAM;AACf;AAEO,MAAMY,iBAAiB,GAAGA,CAACC,CAAS,EAAEC,CAAS,KAAK;EACzD,IAAID,CAAC,GAAGC,CAAC,EAAE,OAAO,CAAC;EACnB,IAAID,CAAC,GAAGC,CAAC,EAAE,OAAO,CAAC,CAAC;EACpB,OAAO,CAAC;AACV,CAAC;AAACC,OAAA,CAAAH,iBAAA,GAAAA,iBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","names":["gteSdkVersion","exp","sdkVersion","semver","gte","Error","lteSdkVersion","lte"],"sources":["../../src/utils/versions.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport semver from 'semver';\n\nexport function gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport function lteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return false;\n }\n\n try {\n return semver.lte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n"],"mappings":";;;;;;;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAA4B;AAErB,SAASA,aAAa,CAACC,GAAmC,EAAEC,UAAkB,EAAW;EAC9F,IAAI,CAACD,GAAG,CAACC,UAAU,EAAE;IACnB,OAAO,KAAK;EACd;EAEA,IAAID,GAAG,CAACC,UAAU,KAAK,aAAa,EAAE;IACpC,OAAO,IAAI;EACb;EAEA,IAAI;IACF,OAAOC,iBAAM,CAACC,GAAG,CAACH,GAAG,CAACC,UAAU,EAAEA,UAAU,CAAC;EAC/C,CAAC,CAAC,MAAM;IACN,MAAM,IAAIG,KAAK,CAAE,GAAEJ,GAAG,CAACC,UAAW,uDAAsD,CAAC;EAC3F;AACF;AAEO,SAASI,aAAa,CAACL,GAAmC,EAAEC,UAAkB,EAAW;EAC9F,IAAI,CAACD,GAAG,CAACC,UAAU,EAAE;IACnB,OAAO,KAAK;EACd;EAEA,IAAID,GAAG,CAACC,UAAU,KAAK,aAAa,EAAE;IACpC,OAAO,KAAK;EACd;EAEA,IAAI;IACF,OAAOC,iBAAM,CAACI,GAAG,CAACN,GAAG,CAACC,UAAU,EAAEA,UAAU,CAAC;EAC/C,CAAC,CAAC,MAAM;IACN,MAAM,IAAIG,KAAK,CAAE,GAAEJ,GAAG,CAACC,UAAW,uDAAsD,CAAC;EAC3F;AACF"}
1
+ {"version":3,"file":"versions.js","names":["_semver","data","_interopRequireDefault","require","obj","__esModule","default","gteSdkVersion","exp","sdkVersion","semver","gte","Error","lteSdkVersion","lte"],"sources":["../../src/utils/versions.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport semver from 'semver';\n\nexport function gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport function lteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return false;\n }\n\n try {\n return semver.lte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n"],"mappings":";;;;;;;AACA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA4B,SAAAC,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAErB,SAASG,aAAaA,CAACC,GAAmC,EAAEC,UAAkB,EAAW;EAC9F,IAAI,CAACD,GAAG,CAACC,UAAU,EAAE;IACnB,OAAO,KAAK;EACd;EAEA,IAAID,GAAG,CAACC,UAAU,KAAK,aAAa,EAAE;IACpC,OAAO,IAAI;EACb;EAEA,IAAI;IACF,OAAOC,iBAAM,CAACC,GAAG,CAACH,GAAG,CAACC,UAAU,EAAEA,UAAU,CAAC;EAC/C,CAAC,CAAC,MAAM;IACN,MAAM,IAAIG,KAAK,CAAE,GAAEJ,GAAG,CAACC,UAAW,uDAAsD,CAAC;EAC3F;AACF;AAEO,SAASI,aAAaA,CAACL,GAAmC,EAAEC,UAAkB,EAAW;EAC9F,IAAI,CAACD,GAAG,CAACC,UAAU,EAAE;IACnB,OAAO,KAAK;EACd;EAEA,IAAID,GAAG,CAACC,UAAU,KAAK,aAAa,EAAE;IACpC,OAAO,KAAK;EACd;EAEA,IAAI;IACF,OAAOC,iBAAM,CAACI,GAAG,CAACN,GAAG,CAACC,UAAU,EAAEA,UAAU,CAAC;EAC/C,CAAC,CAAC,MAAM;IACN,MAAM,IAAIG,KAAK,CAAE,GAAEJ,GAAG,CAACC,UAAW,uDAAsD,CAAC;EAC3F;AACF"}
@@ -23,4 +23,4 @@ export declare function addWarningAndroid(property: string, text: string, link?:
23
23
  * @param link Useful link to resources related to the warning
24
24
  */
25
25
  export declare function addWarningIOS(property: string, text: string, link?: string): void;
26
- export declare function addWarningForPlatform(platform: ModPlatform, property: string, text: string, link?: string): void;
26
+ export declare function addWarningForPlatform(platform: ModPlatform & string, property: string, text: string, link?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"warnings.js","names":["addWarningAndroid","property","text","link","console","warn","formatWarning","addWarningIOS","addWarningForPlatform","platform","warning","chalk","yellow","bold","gray"],"sources":["../../src/utils/warnings.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { ModPlatform } from '../Plugin.types';\n\n/**\n * Log a warning that doesn't disrupt the spinners.\n *\n * ```sh\n * » android: android.package: property is invalid https://expo.fyi/android-package\n * ```\n *\n * @param property Name of the config property that triggered the warning (best-effort)\n * @param text Main warning message\n * @param link Useful link to resources related to the warning\n */\nexport function addWarningAndroid(property: string, text: string, link?: string) {\n console.warn(formatWarning('android', property, text, link));\n}\n\n/**\n * Log a warning that doesn't disrupt the spinners.\n *\n * ```sh\n * » ios: ios.bundleIdentifier: property is invalid https://expo.fyi/bundle-identifier\n * ```\n *\n * @param property Name of the config property that triggered the warning (best-effort)\n * @param text Main warning message\n * @param link Useful link to resources related to the warning\n */\nexport function addWarningIOS(property: string, text: string, link?: string) {\n console.warn(formatWarning('ios', property, text, link));\n}\n\nexport function addWarningForPlatform(\n platform: ModPlatform,\n property: string,\n text: string,\n link?: string\n) {\n console.warn(formatWarning(platform, property, text, link));\n}\n\nfunction formatWarning(platform: string, property: string, warning: string, link?: string) {\n return chalk.yellow`${'» ' + chalk.bold(platform)}: ${property}: ${warning}${\n link ? chalk.gray(' ' + link) : ''\n }`;\n}\n"],"mappings":";;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAA0B;AAI1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,iBAAiB,CAACC,QAAgB,EAAEC,IAAY,EAAEC,IAAa,EAAE;EAC/EC,OAAO,CAACC,IAAI,CAACC,aAAa,CAAC,SAAS,EAAEL,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAa,CAACN,QAAgB,EAAEC,IAAY,EAAEC,IAAa,EAAE;EAC3EC,OAAO,CAACC,IAAI,CAACC,aAAa,CAAC,KAAK,EAAEL,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC1D;AAEO,SAASK,qBAAqB,CACnCC,QAAqB,EACrBR,QAAgB,EAChBC,IAAY,EACZC,IAAa,EACb;EACAC,OAAO,CAACC,IAAI,CAACC,aAAa,CAACG,QAAQ,EAAER,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC7D;AAEA,SAASG,aAAa,CAACG,QAAgB,EAAER,QAAgB,EAAES,OAAe,EAAEP,IAAa,EAAE;EACzF,OAAOQ,gBAAK,CAACC,MAAO,GAAE,IAAI,GAAGD,gBAAK,CAACE,IAAI,CAACJ,QAAQ,CAAE,KAAIR,QAAS,KAAIS,OAAQ,GACzEP,IAAI,GAAGQ,gBAAK,CAACG,IAAI,CAAC,GAAG,GAAGX,IAAI,CAAC,GAAG,EACjC,EAAC;AACJ"}
1
+ {"version":3,"file":"warnings.js","names":["_chalk","data","_interopRequireDefault","require","obj","__esModule","default","addWarningAndroid","property","text","link","console","warn","formatWarning","addWarningIOS","addWarningForPlatform","platform","warning","chalk","yellow","bold","gray"],"sources":["../../src/utils/warnings.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { ModPlatform } from '../Plugin.types';\n\n/**\n * Log a warning that doesn't disrupt the spinners.\n *\n * ```sh\n * » android: android.package: property is invalid https://expo.fyi/android-package\n * ```\n *\n * @param property Name of the config property that triggered the warning (best-effort)\n * @param text Main warning message\n * @param link Useful link to resources related to the warning\n */\nexport function addWarningAndroid(property: string, text: string, link?: string) {\n console.warn(formatWarning('android', property, text, link));\n}\n\n/**\n * Log a warning that doesn't disrupt the spinners.\n *\n * ```sh\n * » ios: ios.bundleIdentifier: property is invalid https://expo.fyi/bundle-identifier\n * ```\n *\n * @param property Name of the config property that triggered the warning (best-effort)\n * @param text Main warning message\n * @param link Useful link to resources related to the warning\n */\nexport function addWarningIOS(property: string, text: string, link?: string) {\n console.warn(formatWarning('ios', property, text, link));\n}\n\nexport function addWarningForPlatform(\n platform: ModPlatform & string,\n property: string,\n text: string,\n link?: string\n) {\n console.warn(formatWarning(platform, property, text, link));\n}\n\nfunction formatWarning(platform: string, property: string, warning: string, link?: string) {\n return chalk.yellow`${'» ' + chalk.bold(platform)}: ${property}: ${warning}${\n link ? chalk.gray(' ' + link) : ''\n }`;\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA0B,SAAAC,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAI1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,iBAAiBA,CAACC,QAAgB,EAAEC,IAAY,EAAEC,IAAa,EAAE;EAC/EC,OAAO,CAACC,IAAI,CAACC,aAAa,CAAC,SAAS,EAAEL,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAaA,CAACN,QAAgB,EAAEC,IAAY,EAAEC,IAAa,EAAE;EAC3EC,OAAO,CAACC,IAAI,CAACC,aAAa,CAAC,KAAK,EAAEL,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC1D;AAEO,SAASK,qBAAqBA,CACnCC,QAA8B,EAC9BR,QAAgB,EAChBC,IAAY,EACZC,IAAa,EACb;EACAC,OAAO,CAACC,IAAI,CAACC,aAAa,CAACG,QAAQ,EAAER,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;AAC7D;AAEA,SAASG,aAAaA,CAACG,QAAgB,EAAER,QAAgB,EAAES,OAAe,EAAEP,IAAa,EAAE;EACzF,OAAOQ,gBAAK,CAACC,MAAO,GAAE,IAAI,GAAGD,gBAAK,CAACE,IAAI,CAACJ,QAAQ,CAAE,KAAIR,QAAS,KAAIS,OAAQ,GACzEP,IAAI,GAAGQ,gBAAK,CAACG,IAAI,CAAC,GAAG,GAAGX,IAAI,CAAC,GAAG,EACjC,EAAC;AACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/config-plugins",
3
- "version": "6.0.2",
3
+ "version": "7.1.0",
4
4
  "description": "A library for Expo config plugins",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -32,7 +32,7 @@
32
32
  "paths"
33
33
  ],
34
34
  "dependencies": {
35
- "@expo/config-types": "^48.0.0",
35
+ "@expo/config-types": "^49.0.0-alpha.1",
36
36
  "@expo/json-file": "~8.2.37",
37
37
  "@expo/plist": "^0.0.20",
38
38
  "@expo/sdk-runtime-versions": "^1.0.0",
@@ -56,5 +56,5 @@
56
56
  "publishConfig": {
57
57
  "access": "public"
58
58
  },
59
- "gitHead": "42a945294457dc62d314e3ea427d57e88f668e7e"
59
+ "gitHead": "66d0501185956602c144a03a891bdb34d3c03910"
60
60
  }