@expo/config-plugins 4.0.6 → 4.0.10

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 (107) hide show
  1. package/README.md +14 -0
  2. package/build/Plugin.types.js +6 -6
  3. package/build/android/AllowBackup.js +1 -1
  4. package/build/android/Colors.js +3 -3
  5. package/build/android/EasBuild.js +1 -1
  6. package/build/android/GoogleServices.js +3 -3
  7. package/build/android/IntentFilters.js +1 -1
  8. package/build/android/JsEngine.js +2 -1
  9. package/build/android/JsEngine.js.map +1 -1
  10. package/build/android/Manifest.js +10 -10
  11. package/build/android/Name.d.ts +2 -1
  12. package/build/android/Name.js +7 -4
  13. package/build/android/Name.js.map +1 -1
  14. package/build/android/Orientation.js +2 -1
  15. package/build/android/Orientation.js.map +1 -1
  16. package/build/android/Package.js +4 -4
  17. package/build/android/Package.js.map +1 -1
  18. package/build/android/Paths.js +9 -9
  19. package/build/android/Permissions.js +6 -6
  20. package/build/android/Resources.js +5 -5
  21. package/build/android/Scheme.js +3 -3
  22. package/build/android/StatusBar.js +3 -3
  23. package/build/android/Strings.js +1 -1
  24. package/build/android/Styles.js +5 -5
  25. package/build/android/Updates.d.ts +0 -5
  26. package/build/android/Updates.js +14 -23
  27. package/build/android/Updates.js.map +1 -1
  28. package/build/android/Version.js +2 -2
  29. package/build/android/WindowSoftInputMode.js +1 -1
  30. package/build/android/codeMod.js +2 -2
  31. package/build/android/index.d.ts +1 -3
  32. package/build/android/index.js +1 -35
  33. package/build/android/index.js.map +1 -1
  34. package/build/index.d.ts +1 -1
  35. package/build/index.js +57 -49
  36. package/build/index.js.map +1 -1
  37. package/build/ios/Bitcode.js +1 -1
  38. package/build/ios/BuildScheme.js +2 -2
  39. package/build/ios/BundleIdentifier.js +3 -3
  40. package/build/ios/DeviceFamily.js +3 -3
  41. package/build/ios/Entitlements.js +2 -2
  42. package/build/ios/Entitlements.js.map +1 -1
  43. package/build/ios/Google.js +2 -2
  44. package/build/ios/JsEngine.d.ts +2 -1
  45. package/build/ios/JsEngine.js +2 -1
  46. package/build/ios/JsEngine.js.map +1 -1
  47. package/build/ios/Locales.js +1 -1
  48. package/build/ios/Maps.js +29 -8
  49. package/build/ios/Maps.js.map +1 -1
  50. package/build/ios/Orientation.js +2 -1
  51. package/build/ios/Orientation.js.map +1 -1
  52. package/build/ios/Paths.js +14 -14
  53. package/build/ios/Paths.js.map +1 -1
  54. package/build/ios/Permissions.js +1 -1
  55. package/build/ios/Permissions.js.map +1 -1
  56. package/build/ios/Scheme.js +4 -4
  57. package/build/ios/Swift.js +2 -2
  58. package/build/ios/Target.js +5 -5
  59. package/build/ios/Updates.d.ts +0 -5
  60. package/build/ios/Updates.js +14 -23
  61. package/build/ios/Updates.js.map +1 -1
  62. package/build/ios/Version.js +3 -3
  63. package/build/ios/codeMod.js +2 -2
  64. package/build/ios/index.d.ts +1 -3
  65. package/build/ios/index.js +3 -35
  66. package/build/ios/index.js.map +1 -1
  67. package/build/ios/utils/Xcodeproj.js +9 -9
  68. package/build/plugins/android-plugins.js +1 -1
  69. package/build/plugins/createBaseMod.js +2 -2
  70. package/build/plugins/createBaseMod.js.map +1 -1
  71. package/build/plugins/ios-plugins.d.ts +2 -2
  72. package/build/plugins/ios-plugins.js +2 -2
  73. package/build/plugins/ios-plugins.js.map +1 -1
  74. package/build/plugins/mod-compiler.js +3 -3
  75. package/build/plugins/mod-compiler.js.map +1 -1
  76. package/build/plugins/withAndroidBaseMods.js +1 -1
  77. package/build/plugins/withIosBaseMods.d.ts +3 -3
  78. package/build/plugins/withIosBaseMods.js +1 -1
  79. package/build/plugins/withIosBaseMods.js.map +1 -1
  80. package/build/plugins/withStaticPlugin.js +16 -5
  81. package/build/plugins/withStaticPlugin.js.map +1 -1
  82. package/build/utils/Updates.d.ts +1 -0
  83. package/build/utils/Updates.js +24 -1
  84. package/build/utils/Updates.js.map +1 -1
  85. package/build/utils/XML.d.ts +6 -0
  86. package/build/utils/XML.js +57 -10
  87. package/build/utils/XML.js.map +1 -1
  88. package/build/utils/errors.js +1 -1
  89. package/build/utils/generateCode.js +2 -2
  90. package/build/utils/history.js +1 -1
  91. package/build/utils/modules.js +1 -1
  92. package/build/utils/plugin-resolver.js +4 -4
  93. package/build/utils/sortObject.js +2 -2
  94. package/build/utils/warnings.js +1 -1
  95. package/package.json +3 -3
  96. package/build/android/RootViewBackgroundColor.d.ts +0 -6
  97. package/build/android/RootViewBackgroundColor.js +0 -81
  98. package/build/android/RootViewBackgroundColor.js.map +0 -1
  99. package/build/android/UserInterfaceStyle.d.ts +0 -10
  100. package/build/android/UserInterfaceStyle.js +0 -119
  101. package/build/android/UserInterfaceStyle.js.map +0 -1
  102. package/build/ios/RootViewBackgroundColor.d.ts +0 -6
  103. package/build/ios/RootViewBackgroundColor.js +0 -70
  104. package/build/ios/RootViewBackgroundColor.js.map +0 -1
  105. package/build/ios/UserInterfaceStyle.d.ts +0 -5
  106. package/build/ios/UserInterfaceStyle.js +0 -59
  107. package/build/ios/UserInterfaceStyle.js.map +0 -1
@@ -3,19 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.Entitlements = exports.DeviceFamily = exports.BundleIdentifier = exports.BuildScheme = exports.Bitcode = void 0;
6
7
  Object.defineProperty(exports, "ExpoPlist", {
7
8
  enumerable: true,
8
9
  get: function () {
9
10
  return _IosConfig().ExpoPlist;
10
11
  }
11
12
  });
13
+ exports.Google = void 0;
12
14
  Object.defineProperty(exports, "InfoPlist", {
13
15
  enumerable: true,
14
16
  get: function () {
15
17
  return _IosConfig().InfoPlist;
16
18
  }
17
19
  });
18
- exports.XcodeUtils = exports.XcodeProjectFile = exports.Version = exports.UsesNonExemptEncryption = exports.UserInterfaceStyle = exports.Updates = exports.Target = exports.Swift = exports.Scheme = exports.RootViewBackgroundColor = exports.RequiresFullScreen = exports.ProvisioningProfile = exports.Permissions = exports.Paths = exports.Orientation = exports.Name = exports.Maps = exports.Locales = exports.JsEngine = exports.Google = exports.Entitlements = exports.DeviceFamily = exports.BundleIdentifier = exports.BuildScheme = exports.Bitcode = void 0;
20
+ exports.XcodeUtils = exports.XcodeProjectFile = exports.Version = exports.UsesNonExemptEncryption = exports.Updates = exports.Target = exports.Swift = exports.Scheme = exports.RequiresFullScreen = exports.ProvisioningProfile = exports.Permissions = exports.Paths = exports.Orientation = exports.Name = exports.Maps = exports.Locales = exports.JsEngine = void 0;
19
21
 
20
22
  function Bitcode() {
21
23
  const data = _interopRequireWildcard(require("./Bitcode"));
@@ -282,23 +284,6 @@ Object.defineProperty(exports, "RequiresFullScreen", {
282
284
  }
283
285
  });
284
286
 
285
- function RootViewBackgroundColor() {
286
- const data = _interopRequireWildcard(require("./RootViewBackgroundColor"));
287
-
288
- RootViewBackgroundColor = function () {
289
- return data;
290
- };
291
-
292
- return data;
293
- }
294
-
295
- Object.defineProperty(exports, "RootViewBackgroundColor", {
296
- enumerable: true,
297
- get: function () {
298
- return RootViewBackgroundColor();
299
- }
300
- });
301
-
302
287
  function Scheme() {
303
288
  const data = _interopRequireWildcard(require("./Scheme"));
304
289
 
@@ -367,23 +352,6 @@ Object.defineProperty(exports, "Updates", {
367
352
  }
368
353
  });
369
354
 
370
- function UserInterfaceStyle() {
371
- const data = _interopRequireWildcard(require("./UserInterfaceStyle"));
372
-
373
- UserInterfaceStyle = function () {
374
- return data;
375
- };
376
-
377
- return data;
378
- }
379
-
380
- Object.defineProperty(exports, "UserInterfaceStyle", {
381
- enumerable: true,
382
- get: function () {
383
- return UserInterfaceStyle();
384
- }
385
- });
386
-
387
355
  function UsesNonExemptEncryption() {
388
356
  const data = _interopRequireWildcard(require("./UsesNonExemptEncryption"));
389
357
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["import * as Bitcode from './Bitcode';\nimport * as BuildScheme from './BuildScheme';\nimport * as BundleIdentifier from './BundleIdentifier';\nimport * as DeviceFamily from './DeviceFamily';\nimport * as Entitlements from './Entitlements';\nimport * as Google from './Google';\nimport { ExpoPlist, InfoPlist } from './IosConfig.types';\nimport * as JsEngine from './JsEngine';\nimport * as Locales from './Locales';\nimport * as Maps from './Maps';\nimport * as Name from './Name';\nimport * as Orientation from './Orientation';\nimport * as Paths from './Paths';\nimport * as Permissions from './Permissions';\nimport * as ProvisioningProfile from './ProvisioningProfile';\nimport * as RequiresFullScreen from './RequiresFullScreen';\nimport * as RootViewBackgroundColor from './RootViewBackgroundColor';\nimport * as Scheme from './Scheme';\nimport * as Swift from './Swift';\nimport * as Target from './Target';\nimport * as Updates from './Updates';\nimport * as UserInterfaceStyle from './UserInterfaceStyle';\nimport * as UsesNonExemptEncryption from './UsesNonExemptEncryption';\nimport * as Version from './Version';\nimport * as XcodeProjectFile from './XcodeProjectFile';\nimport * as XcodeUtils from './utils/Xcodeproj';\n\n// We can change this to export * as X with TypeScript 3.8+\n// https://devblogs.microsoft.com/typescript/announcing-typescript-3-8-beta/#export-star-as-namespace-syntax\n// .. but we should wait for this to be the default VSCode version.\nexport { InfoPlist, ExpoPlist, Entitlements, Paths, Permissions, XcodeUtils };\n\nexport {\n Bitcode,\n BundleIdentifier,\n BuildScheme,\n DeviceFamily,\n Google,\n Maps,\n Locales,\n JsEngine,\n Name,\n Orientation,\n ProvisioningProfile,\n RequiresFullScreen,\n RootViewBackgroundColor,\n Scheme,\n Swift,\n Target,\n Updates,\n UserInterfaceStyle,\n UsesNonExemptEncryption,\n Version,\n XcodeProjectFile,\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/ios/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["import * as Bitcode from './Bitcode';\nimport * as BuildScheme from './BuildScheme';\nimport * as BundleIdentifier from './BundleIdentifier';\nimport * as DeviceFamily from './DeviceFamily';\nimport * as Entitlements from './Entitlements';\nimport * as Google from './Google';\nimport { ExpoPlist, InfoPlist } from './IosConfig.types';\nimport * as JsEngine from './JsEngine';\nimport * as Locales from './Locales';\nimport * as Maps from './Maps';\nimport * as Name from './Name';\nimport * as Orientation from './Orientation';\nimport * as Paths from './Paths';\nimport * as Permissions from './Permissions';\nimport * as ProvisioningProfile from './ProvisioningProfile';\nimport * as RequiresFullScreen from './RequiresFullScreen';\nimport * as Scheme from './Scheme';\nimport * as Swift from './Swift';\nimport * as Target from './Target';\nimport * as Updates from './Updates';\nimport * as UsesNonExemptEncryption from './UsesNonExemptEncryption';\nimport * as Version from './Version';\nimport * as XcodeProjectFile from './XcodeProjectFile';\nimport * as XcodeUtils from './utils/Xcodeproj';\n\n// We can change this to export * as X with TypeScript 3.8+\n// https://devblogs.microsoft.com/typescript/announcing-typescript-3-8-beta/#export-star-as-namespace-syntax\n// .. but we should wait for this to be the default VSCode version.\nexport { InfoPlist, ExpoPlist, Entitlements, Paths, Permissions, XcodeUtils };\n\nexport {\n Bitcode,\n BundleIdentifier,\n BuildScheme,\n DeviceFamily,\n Google,\n Maps,\n Locales,\n JsEngine,\n Name,\n Orientation,\n ProvisioningProfile,\n RequiresFullScreen,\n Scheme,\n Swift,\n Target,\n Updates,\n UsesNonExemptEncryption,\n Version,\n XcodeProjectFile,\n};\n"],"file":"index.js"}
@@ -3,25 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getProjectName = getProjectName;
7
- exports.resolvePathOrProject = resolvePathOrProject;
8
- exports.sanitizedName = sanitizedName;
9
- exports.getHackyProjectName = getHackyProjectName;
10
- exports.addResourceFileToGroup = addResourceFileToGroup;
11
6
  exports.addBuildSourceFileToGroup = addBuildSourceFileToGroup;
12
7
  exports.addFileToGroupAndLink = addFileToGroupAndLink;
13
- exports.getApplicationNativeTarget = getApplicationNativeTarget;
14
8
  exports.addFramework = addFramework;
9
+ exports.addResourceFileToGroup = addResourceFileToGroup;
15
10
  exports.ensureGroupRecursively = ensureGroupRecursively;
11
+ exports.getApplicationNativeTarget = getApplicationNativeTarget;
12
+ exports.getBuildConfigurationForListIdAndName = getBuildConfigurationForListIdAndName;
13
+ exports.getBuildConfigurationsForListId = getBuildConfigurationsForListId;
14
+ exports.getHackyProjectName = getHackyProjectName;
16
15
  exports.getPbxproj = getPbxproj;
17
16
  exports.getProductName = getProductName;
17
+ exports.getProjectName = getProjectName;
18
18
  exports.getProjectSection = getProjectSection;
19
19
  exports.getXCConfigurationListEntries = getXCConfigurationListEntries;
20
- exports.getBuildConfigurationsForListId = getBuildConfigurationsForListId;
21
- exports.getBuildConfigurationForListIdAndName = getBuildConfigurationForListIdAndName;
22
20
  exports.isBuildConfig = isBuildConfig;
23
- exports.isNotTestHost = isNotTestHost;
24
21
  exports.isNotComment = isNotComment;
22
+ exports.isNotTestHost = isNotTestHost;
23
+ exports.resolvePathOrProject = resolvePathOrProject;
24
+ exports.sanitizedName = sanitizedName;
25
25
  exports.unquote = unquote;
26
26
 
27
27
  function _assert() {
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createAndroidManifestPlugin = createAndroidManifestPlugin;
7
7
  exports.createStringsXmlPlugin = createStringsXmlPlugin;
8
- exports.withGradleProperties = exports.withSettingsGradle = exports.withAppBuildGradle = exports.withProjectBuildGradle = exports.withMainApplication = exports.withMainActivity = exports.withAndroidStyles = exports.withAndroidColorsNight = exports.withAndroidColors = exports.withStringsXml = exports.withAndroidManifest = void 0;
8
+ exports.withStringsXml = exports.withSettingsGradle = exports.withProjectBuildGradle = exports.withMainApplication = exports.withMainActivity = exports.withGradleProperties = exports.withAppBuildGradle = exports.withAndroidStyles = exports.withAndroidManifest = exports.withAndroidColorsNight = exports.withAndroidColors = void 0;
9
9
 
10
10
  function _withMod() {
11
11
  const data = require("./withMod");
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createBaseMod = createBaseMod;
7
6
  exports.assertModResults = assertModResults;
7
+ exports.createBaseMod = createBaseMod;
8
8
  exports.createPlatformBaseMod = createPlatformBaseMod;
9
9
  exports.provider = provider;
10
10
  exports.withGeneratedBaseMods = withGeneratedBaseMods;
@@ -31,7 +31,7 @@ function _withMod() {
31
31
 
32
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
33
 
34
- const debug = (0, _debug().default)('config-plugins:base-mods');
34
+ const debug = (0, _debug().default)('expo:config-plugins:base-mods');
35
35
 
36
36
  function createBaseMod({
37
37
  methodName,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/createBaseMod.ts"],"names":["debug","createBaseMod","methodName","platform","modName","getFilePath","read","write","isIntrospective","withUnknown","config","_props","props","mod","skipEmptyMod","saveToInternal","isProvider","action","modRequest","nextMod","results","filePath","modResults","assertModResults","error","message","Object","defineProperty","value","platformName","ensuredResults","mods","Error","JSON","stringify","upperFirst","name","charAt","toUpperCase","slice","createPlatformBaseMod","provider","withGeneratedBaseMods","providers","entries","reduce","baseMod"],"mappings":"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","sourcesContent":["import Debug from 'debug';\n\nimport {\n ConfigPlugin,\n ExportedConfig,\n ExportedConfigWithProps,\n ModPlatform,\n} from '../Plugin.types';\nimport { BaseModOptions, withBaseMod } from './withMod';\n\nconst debug = Debug('config-plugins:base-mods');\n\nexport type ForwardedBaseModOptions = Partial<\n Pick<BaseModOptions, 'saveToInternal' | 'skipEmptyMod'>\n>;\n\nexport type BaseModProviderMethods<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n> = {\n getFilePath: (config: ExportedConfigWithProps<ModType>, props: Props) => Promise<string> | string;\n read: (\n filePath: string,\n config: ExportedConfigWithProps<ModType>,\n props: Props\n ) => Promise<ModType> | ModType;\n write: (\n filePath: string,\n config: ExportedConfigWithProps<ModType>,\n props: Props\n ) => Promise<void> | void;\n /**\n * If the mod supports introspection, and avoids making any filesystem modifications during compilation.\n * By enabling, this mod, and all of its descendants will be run in introspection mode.\n * This should only be used for static files like JSON or XML, and not for application files that require regexes,\n * or complex static files that require other files to be generated like Xcode `.pbxproj`.\n */\n isIntrospective?: boolean;\n};\n\nexport type CreateBaseModProps<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n> = {\n methodName: string;\n platform: ModPlatform;\n modName: string;\n} & BaseModProviderMethods<ModType, Props>;\n\nexport function createBaseMod<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n>({\n methodName,\n platform,\n modName,\n getFilePath,\n read,\n write,\n isIntrospective,\n}: CreateBaseModProps<ModType, Props>): ConfigPlugin<Props | void> {\n const withUnknown: ConfigPlugin<Props | void> = (config, _props) => {\n const props = _props || ({} as Props);\n return withBaseMod<ModType>(config, {\n platform,\n mod: modName,\n skipEmptyMod: props.skipEmptyMod ?? true,\n saveToInternal: props.saveToInternal ?? false,\n isProvider: true,\n isIntrospective,\n async action({ modRequest: { nextMod, ...modRequest }, ...config }) {\n try {\n let results: ExportedConfigWithProps<ModType> = {\n ...config,\n modRequest,\n };\n\n const filePath = await getFilePath(results, props);\n debug(`mods.${platform}.${modName}: file path: ${filePath || '[skipped]'}`);\n const modResults = await read(filePath, results, props);\n\n results = await nextMod!({\n ...results,\n modResults,\n modRequest,\n });\n\n assertModResults(results, modRequest.platform, modRequest.modName);\n\n await write(filePath, results, props);\n return results;\n } catch (error: any) {\n error.message = `[${platform}.${modName}]: ${methodName}: ${error.message}`;\n throw error;\n }\n },\n });\n };\n\n if (methodName) {\n Object.defineProperty(withUnknown, 'name', {\n value: methodName,\n });\n }\n\n return withUnknown;\n}\n\nexport function assertModResults(results: any, platformName: string, modName: string) {\n // If the results came from a mod, they'd be in the form of [config, data].\n // Ensure the results are an array and omit the data since it should've been written by a data provider plugin.\n const ensuredResults = results;\n\n // Sanity check to help locate non compliant mods.\n if (!ensuredResults || typeof ensuredResults !== 'object' || !ensuredResults?.mods) {\n throw new Error(\n `Mod \\`mods.${platformName}.${modName}\\` evaluated to an object that is not a valid project config. Instead got: ${JSON.stringify(\n ensuredResults\n )}`\n );\n }\n return ensuredResults;\n}\n\nfunction upperFirst(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function createPlatformBaseMod<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n>({ modName, ...props }: Omit<CreateBaseModProps<ModType, Props>, 'methodName'>) {\n // Generate the function name to ensure it's uniform and also to improve stack traces.\n const methodName = `with${upperFirst(props.platform)}${upperFirst(modName)}BaseMod`;\n return createBaseMod<ModType, Props>({\n methodName,\n modName,\n ...props,\n });\n}\n\n/** A TS wrapper for creating provides */\nexport function provider<ModType, Props extends ForwardedBaseModOptions = ForwardedBaseModOptions>(\n props: BaseModProviderMethods<ModType, Props>\n) {\n return props;\n}\n\n/** Plugin to create and append base mods from file providers */\nexport function withGeneratedBaseMods<ModName extends string>(\n config: ExportedConfig,\n {\n platform,\n providers,\n ...props\n }: ForwardedBaseModOptions & {\n platform: ModPlatform;\n providers: Partial<Record<ModName, BaseModProviderMethods<any, any>>>;\n }\n): ExportedConfig {\n return Object.entries(providers).reduce((config, [modName, value]) => {\n const baseMod = createPlatformBaseMod({ platform, modName, ...(value as any) });\n return baseMod(config, props);\n }, config);\n}\n"],"file":"createBaseMod.js"}
1
+ {"version":3,"sources":["../../src/plugins/createBaseMod.ts"],"names":["debug","createBaseMod","methodName","platform","modName","getFilePath","read","write","isIntrospective","withUnknown","config","_props","props","mod","skipEmptyMod","saveToInternal","isProvider","action","modRequest","nextMod","results","filePath","modResults","assertModResults","error","message","Object","defineProperty","value","platformName","ensuredResults","mods","Error","JSON","stringify","upperFirst","name","charAt","toUpperCase","slice","createPlatformBaseMod","provider","withGeneratedBaseMods","providers","entries","reduce","baseMod"],"mappings":"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","sourcesContent":["import Debug from 'debug';\n\nimport {\n ConfigPlugin,\n ExportedConfig,\n ExportedConfigWithProps,\n ModPlatform,\n} from '../Plugin.types';\nimport { BaseModOptions, withBaseMod } from './withMod';\n\nconst debug = Debug('expo:config-plugins:base-mods');\n\nexport type ForwardedBaseModOptions = Partial<\n Pick<BaseModOptions, 'saveToInternal' | 'skipEmptyMod'>\n>;\n\nexport type BaseModProviderMethods<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n> = {\n getFilePath: (config: ExportedConfigWithProps<ModType>, props: Props) => Promise<string> | string;\n read: (\n filePath: string,\n config: ExportedConfigWithProps<ModType>,\n props: Props\n ) => Promise<ModType> | ModType;\n write: (\n filePath: string,\n config: ExportedConfigWithProps<ModType>,\n props: Props\n ) => Promise<void> | void;\n /**\n * If the mod supports introspection, and avoids making any filesystem modifications during compilation.\n * By enabling, this mod, and all of its descendants will be run in introspection mode.\n * This should only be used for static files like JSON or XML, and not for application files that require regexes,\n * or complex static files that require other files to be generated like Xcode `.pbxproj`.\n */\n isIntrospective?: boolean;\n};\n\nexport type CreateBaseModProps<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n> = {\n methodName: string;\n platform: ModPlatform;\n modName: string;\n} & BaseModProviderMethods<ModType, Props>;\n\nexport function createBaseMod<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n>({\n methodName,\n platform,\n modName,\n getFilePath,\n read,\n write,\n isIntrospective,\n}: CreateBaseModProps<ModType, Props>): ConfigPlugin<Props | void> {\n const withUnknown: ConfigPlugin<Props | void> = (config, _props) => {\n const props = _props || ({} as Props);\n return withBaseMod<ModType>(config, {\n platform,\n mod: modName,\n skipEmptyMod: props.skipEmptyMod ?? true,\n saveToInternal: props.saveToInternal ?? false,\n isProvider: true,\n isIntrospective,\n async action({ modRequest: { nextMod, ...modRequest }, ...config }) {\n try {\n let results: ExportedConfigWithProps<ModType> = {\n ...config,\n modRequest,\n };\n\n const filePath = await getFilePath(results, props);\n debug(`mods.${platform}.${modName}: file path: ${filePath || '[skipped]'}`);\n const modResults = await read(filePath, results, props);\n\n results = await nextMod!({\n ...results,\n modResults,\n modRequest,\n });\n\n assertModResults(results, modRequest.platform, modRequest.modName);\n\n await write(filePath, results, props);\n return results;\n } catch (error: any) {\n error.message = `[${platform}.${modName}]: ${methodName}: ${error.message}`;\n throw error;\n }\n },\n });\n };\n\n if (methodName) {\n Object.defineProperty(withUnknown, 'name', {\n value: methodName,\n });\n }\n\n return withUnknown;\n}\n\nexport function assertModResults(results: any, platformName: string, modName: string) {\n // If the results came from a mod, they'd be in the form of [config, data].\n // Ensure the results are an array and omit the data since it should've been written by a data provider plugin.\n const ensuredResults = results;\n\n // Sanity check to help locate non compliant mods.\n if (!ensuredResults || typeof ensuredResults !== 'object' || !ensuredResults?.mods) {\n throw new Error(\n `Mod \\`mods.${platformName}.${modName}\\` evaluated to an object that is not a valid project config. Instead got: ${JSON.stringify(\n ensuredResults\n )}`\n );\n }\n return ensuredResults;\n}\n\nfunction upperFirst(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function createPlatformBaseMod<\n ModType,\n Props extends ForwardedBaseModOptions = ForwardedBaseModOptions\n>({ modName, ...props }: Omit<CreateBaseModProps<ModType, Props>, 'methodName'>) {\n // Generate the function name to ensure it's uniform and also to improve stack traces.\n const methodName = `with${upperFirst(props.platform)}${upperFirst(modName)}BaseMod`;\n return createBaseMod<ModType, Props>({\n methodName,\n modName,\n ...props,\n });\n}\n\n/** A TS wrapper for creating provides */\nexport function provider<ModType, Props extends ForwardedBaseModOptions = ForwardedBaseModOptions>(\n props: BaseModProviderMethods<ModType, Props>\n) {\n return props;\n}\n\n/** Plugin to create and append base mods from file providers */\nexport function withGeneratedBaseMods<ModName extends string>(\n config: ExportedConfig,\n {\n platform,\n providers,\n ...props\n }: ForwardedBaseModOptions & {\n platform: ModPlatform;\n providers: Partial<Record<ModName, BaseModProviderMethods<any, any>>>;\n }\n): ExportedConfig {\n return Object.entries(providers).reduce((config, [modName, value]) => {\n const baseMod = createPlatformBaseMod({ platform, modName, ...(value as any) });\n return baseMod(config, props);\n }, config);\n}\n"],"file":"createBaseMod.js"}
@@ -1,5 +1,5 @@
1
1
  import type { ExpoConfig } from '@expo/config-types';
2
- import type { JSONObject } from '@expo/json-file';
2
+ import type { JSONObject, JSONValue } from '@expo/json-file';
3
3
  import type { XcodeProject } from 'xcode';
4
4
  import type { ConfigPlugin, Mod } from '../Plugin.types';
5
5
  import type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';
@@ -61,5 +61,5 @@ export declare const withXcodeProject: ConfigPlugin<Mod<XcodeProject>>;
61
61
  * @param config
62
62
  * @param action
63
63
  */
64
- export declare const withPodfileProperties: ConfigPlugin<Mod<Record<string, string>>>;
64
+ export declare const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>>;
65
65
  export {};
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createInfoPlistPlugin = createInfoPlistPlugin;
7
6
  exports.createEntitlementsPlugin = createEntitlementsPlugin;
8
- exports.withPodfileProperties = exports.withXcodeProject = exports.withExpoPlist = exports.withEntitlementsPlist = exports.withInfoPlist = exports.withAppDelegate = void 0;
7
+ exports.createInfoPlistPlugin = createInfoPlistPlugin;
8
+ exports.withXcodeProject = exports.withPodfileProperties = exports.withInfoPlist = exports.withExpoPlist = exports.withEntitlementsPlist = exports.withAppDelegate = void 0;
9
9
 
10
10
  function _withMod() {
11
11
  const data = require("./withMod");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":"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","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withInfoPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n action: MutateEntitlementsPlistAction,\n name: string\n): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withEntitlementsPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'appDelegate',\n action,\n });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n return withMod<InfoPlist>(config, {\n platform: 'ios',\n mod: 'infoPlist',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n return withMod<JSONObject>(config, {\n platform: 'ios',\n mod: 'entitlements',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'expoPlist',\n action,\n });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n action,\n });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, string>>> = (\n config,\n action\n) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'podfileProperties',\n action,\n });\n};\n"],"file":"ios-plugins.js"}
1
+ {"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":"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","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject, JSONValue } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withInfoPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n action: MutateEntitlementsPlistAction,\n name: string\n): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withEntitlementsPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'appDelegate',\n action,\n });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n return withMod<InfoPlist>(config, {\n platform: 'ios',\n mod: 'infoPlist',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n return withMod<JSONObject>(config, {\n platform: 'ios',\n mod: 'entitlements',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'expoPlist',\n action,\n });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n action,\n });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>> = (\n config,\n action\n) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'podfileProperties',\n action,\n });\n};\n"],"file":"ios-plugins.js"}
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withDefaultBaseMods = withDefaultBaseMods;
7
- exports.withIntrospectionBaseMods = withIntrospectionBaseMods;
8
6
  exports.compileModsAsync = compileModsAsync;
9
7
  exports.evalModsAsync = evalModsAsync;
8
+ exports.withDefaultBaseMods = withDefaultBaseMods;
9
+ exports.withIntrospectionBaseMods = withIntrospectionBaseMods;
10
10
 
11
11
  function _debug() {
12
12
  const data = _interopRequireDefault(require("debug"));
@@ -94,7 +94,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
94
94
 
95
95
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
96
96
 
97
- const debug = (0, _debug().default)('config-plugins:mod-compiler');
97
+ const debug = (0, _debug().default)('expo:config-plugins:mod-compiler');
98
98
 
99
99
  function withDefaultBaseMods(config, props = {}) {
100
100
  config = (0, _withIosBaseMods().withIosBaseMods)(config, props);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/mod-compiler.ts"],"names":["debug","withDefaultBaseMods","config","props","withIntrospectionBaseMods","saveToInternal","skipEmptyMod","mods","platform","Object","keys","key","isIntrospective","compileModsAsync","introspect","evalModsAsync","sortMods","commands","order","allKeys","map","completeOrder","Set","sorted","length","group","shift","commandSet","find","push","orders","ios","android","projectRoot","platforms","assertMissingModProviders","platformName","entries","includes","name","join","platformProjectRoot","path","projectName","undefined","modName","mod","modRequest","isProvider","errorMessage","PluginError","Warnings","addWarningForPlatform","results","modResults"],"mappings":"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","sourcesContent":["import Debug from 'debug';\nimport path from 'path';\n\nimport { ExportedConfig, Mod, ModConfig, ModPlatform } from '../Plugin.types';\nimport { getHackyProjectName } from '../ios/utils/Xcodeproj';\nimport { PluginError } from '../utils/errors';\nimport * as Warnings from '../utils/warnings';\nimport { assertModResults, ForwardedBaseModOptions } from './createBaseMod';\nimport { withAndroidBaseMods } from './withAndroidBaseMods';\nimport { withIosBaseMods } from './withIosBaseMods';\n\nconst debug = Debug('config-plugins:mod-compiler');\n\nexport function withDefaultBaseMods(\n config: ExportedConfig,\n props: ForwardedBaseModOptions = {}\n): ExportedConfig {\n config = withIosBaseMods(config, props);\n config = withAndroidBaseMods(config, props);\n return config;\n}\n\n/**\n * Get a prebuild config that safely evaluates mods without persisting any changes to the file system.\n * Currently this only supports infoPlist, entitlements, androidManifest, strings, gradleProperties, and expoPlist mods.\n * This plugin should be evaluated directly:\n */\nexport function withIntrospectionBaseMods(\n config: ExportedConfig,\n props: ForwardedBaseModOptions = {}\n): ExportedConfig {\n config = withIosBaseMods(config, {\n saveToInternal: true,\n // This writing optimization can be skipped since we never write in introspection mode.\n // Including empty mods will ensure that all mods get introspected.\n skipEmptyMod: false,\n ...props,\n });\n config = withAndroidBaseMods(config, {\n saveToInternal: true,\n skipEmptyMod: false,\n ...props,\n });\n\n if (config.mods) {\n // Remove all mods that don't have an introspection base mod, for instance `dangerous` mods.\n for (const platform of Object.keys(config.mods) as ModPlatform[]) {\n // const platformPreserve = preserve[platform];\n for (const key of Object.keys(config.mods[platform] || {})) {\n // @ts-ignore\n if (!config.mods[platform]?.[key]?.isIntrospective) {\n debug(`removing non-idempotent mod: ${platform}.${key}`);\n // @ts-ignore\n delete config.mods[platform]?.[key];\n }\n }\n }\n }\n\n return config;\n}\n\n/**\n *\n * @param projectRoot\n * @param config\n */\nexport async function compileModsAsync(\n config: ExportedConfig,\n props: {\n projectRoot: string;\n platforms?: ModPlatform[];\n introspect?: boolean;\n assertMissingModProviders?: boolean;\n }\n): Promise<ExportedConfig> {\n if (props.introspect === true) {\n config = withIntrospectionBaseMods(config);\n } else {\n config = withDefaultBaseMods(config);\n }\n return await evalModsAsync(config, props);\n}\n\nfunction sortMods(commands: [string, any][], order: string[]): [string, any][] {\n const allKeys = commands.map(([key]) => key);\n const completeOrder = [...new Set([...order, ...allKeys])];\n const sorted: [string, any][] = [];\n while (completeOrder.length) {\n const group = completeOrder.shift()!;\n const commandSet = commands.find(([key]) => key === group);\n if (commandSet) {\n sorted.push(commandSet);\n }\n }\n return sorted;\n}\n\nconst orders: Record<string, string[]> = {\n ios: [\n // dangerous runs first\n 'dangerous',\n // run the XcodeProject mod second because many plugins attempt to read from it.\n 'xcodeproj',\n ],\n android: ['dangerous'],\n};\n/**\n * A generic plugin compiler.\n *\n * @param config\n */\nexport async function evalModsAsync(\n config: ExportedConfig,\n {\n projectRoot,\n introspect,\n platforms,\n /**\n * Throw errors when mods are missing providers.\n * @default true\n */\n assertMissingModProviders,\n }: {\n projectRoot: string;\n introspect?: boolean;\n assertMissingModProviders?: boolean;\n platforms?: ModPlatform[];\n }\n): Promise<ExportedConfig> {\n for (const [platformName, platform] of Object.entries(config.mods ?? ({} as ModConfig))) {\n if (platforms && !platforms.includes(platformName as any)) {\n debug(`skip platform: ${platformName}`);\n continue;\n }\n\n let entries = Object.entries(platform);\n if (entries.length) {\n // Move dangerous item to the first position if it exists, this ensures that all dangerous code runs first.\n entries = sortMods(entries, orders[platformName]!);\n debug(`run in order: ${entries.map(([name]) => name).join(', ')}`);\n const platformProjectRoot = path.join(projectRoot, platformName);\n const projectName =\n platformName === 'ios' ? getHackyProjectName(projectRoot, config) : undefined;\n\n for (const [modName, mod] of entries) {\n const modRequest = {\n projectRoot,\n projectName,\n platformProjectRoot,\n platform: platformName as ModPlatform,\n modName,\n introspect: !!introspect,\n };\n\n if (!(mod as Mod).isProvider) {\n // In strict mode, throw an error.\n const errorMessage = `Initial base modifier for \"${platformName}.${modName}\" is not a provider and therefore will not provide modResults to child mods`;\n if (assertMissingModProviders !== false) {\n throw new PluginError(errorMessage, 'MISSING_PROVIDER');\n } else {\n Warnings.addWarningForPlatform(\n platformName as ModPlatform,\n `${platformName}.${modName}`,\n `Skipping: Initial base modifier for \"${platformName}.${modName}\" is not a provider and therefore will not provide modResults to child mods. This may be due to an outdated version of Expo CLI.`\n );\n // In loose mode, just skip the mod entirely.\n continue;\n }\n }\n\n const results = await (mod as Mod)({\n ...config,\n modResults: null,\n modRequest,\n });\n\n // Sanity check to help locate non compliant mods.\n config = assertModResults(results, platformName, modName);\n // @ts-ignore: data is added for modifications\n delete config.modResults;\n // @ts-ignore: info is added for modifications\n delete config.modRequest;\n }\n }\n }\n\n return config;\n}\n"],"file":"mod-compiler.js"}
1
+ {"version":3,"sources":["../../src/plugins/mod-compiler.ts"],"names":["debug","withDefaultBaseMods","config","props","withIntrospectionBaseMods","saveToInternal","skipEmptyMod","mods","platform","Object","keys","key","isIntrospective","compileModsAsync","introspect","evalModsAsync","sortMods","commands","order","allKeys","map","completeOrder","Set","sorted","length","group","shift","commandSet","find","push","orders","ios","android","projectRoot","platforms","assertMissingModProviders","platformName","entries","includes","name","join","platformProjectRoot","path","projectName","undefined","modName","mod","modRequest","isProvider","errorMessage","PluginError","Warnings","addWarningForPlatform","results","modResults"],"mappings":"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","sourcesContent":["import Debug from 'debug';\nimport path from 'path';\n\nimport { ExportedConfig, Mod, ModConfig, ModPlatform } from '../Plugin.types';\nimport { getHackyProjectName } from '../ios/utils/Xcodeproj';\nimport { PluginError } from '../utils/errors';\nimport * as Warnings from '../utils/warnings';\nimport { assertModResults, ForwardedBaseModOptions } from './createBaseMod';\nimport { withAndroidBaseMods } from './withAndroidBaseMods';\nimport { withIosBaseMods } from './withIosBaseMods';\n\nconst debug = Debug('expo:config-plugins:mod-compiler');\n\nexport function withDefaultBaseMods(\n config: ExportedConfig,\n props: ForwardedBaseModOptions = {}\n): ExportedConfig {\n config = withIosBaseMods(config, props);\n config = withAndroidBaseMods(config, props);\n return config;\n}\n\n/**\n * Get a prebuild config that safely evaluates mods without persisting any changes to the file system.\n * Currently this only supports infoPlist, entitlements, androidManifest, strings, gradleProperties, and expoPlist mods.\n * This plugin should be evaluated directly:\n */\nexport function withIntrospectionBaseMods(\n config: ExportedConfig,\n props: ForwardedBaseModOptions = {}\n): ExportedConfig {\n config = withIosBaseMods(config, {\n saveToInternal: true,\n // This writing optimization can be skipped since we never write in introspection mode.\n // Including empty mods will ensure that all mods get introspected.\n skipEmptyMod: false,\n ...props,\n });\n config = withAndroidBaseMods(config, {\n saveToInternal: true,\n skipEmptyMod: false,\n ...props,\n });\n\n if (config.mods) {\n // Remove all mods that don't have an introspection base mod, for instance `dangerous` mods.\n for (const platform of Object.keys(config.mods) as ModPlatform[]) {\n // const platformPreserve = preserve[platform];\n for (const key of Object.keys(config.mods[platform] || {})) {\n // @ts-ignore\n if (!config.mods[platform]?.[key]?.isIntrospective) {\n debug(`removing non-idempotent mod: ${platform}.${key}`);\n // @ts-ignore\n delete config.mods[platform]?.[key];\n }\n }\n }\n }\n\n return config;\n}\n\n/**\n *\n * @param projectRoot\n * @param config\n */\nexport async function compileModsAsync(\n config: ExportedConfig,\n props: {\n projectRoot: string;\n platforms?: ModPlatform[];\n introspect?: boolean;\n assertMissingModProviders?: boolean;\n }\n): Promise<ExportedConfig> {\n if (props.introspect === true) {\n config = withIntrospectionBaseMods(config);\n } else {\n config = withDefaultBaseMods(config);\n }\n return await evalModsAsync(config, props);\n}\n\nfunction sortMods(commands: [string, any][], order: string[]): [string, any][] {\n const allKeys = commands.map(([key]) => key);\n const completeOrder = [...new Set([...order, ...allKeys])];\n const sorted: [string, any][] = [];\n while (completeOrder.length) {\n const group = completeOrder.shift()!;\n const commandSet = commands.find(([key]) => key === group);\n if (commandSet) {\n sorted.push(commandSet);\n }\n }\n return sorted;\n}\n\nconst orders: Record<string, string[]> = {\n ios: [\n // dangerous runs first\n 'dangerous',\n // run the XcodeProject mod second because many plugins attempt to read from it.\n 'xcodeproj',\n ],\n android: ['dangerous'],\n};\n/**\n * A generic plugin compiler.\n *\n * @param config\n */\nexport async function evalModsAsync(\n config: ExportedConfig,\n {\n projectRoot,\n introspect,\n platforms,\n /**\n * Throw errors when mods are missing providers.\n * @default true\n */\n assertMissingModProviders,\n }: {\n projectRoot: string;\n introspect?: boolean;\n assertMissingModProviders?: boolean;\n platforms?: ModPlatform[];\n }\n): Promise<ExportedConfig> {\n for (const [platformName, platform] of Object.entries(config.mods ?? ({} as ModConfig))) {\n if (platforms && !platforms.includes(platformName as any)) {\n debug(`skip platform: ${platformName}`);\n continue;\n }\n\n let entries = Object.entries(platform);\n if (entries.length) {\n // Move dangerous item to the first position if it exists, this ensures that all dangerous code runs first.\n entries = sortMods(entries, orders[platformName]!);\n debug(`run in order: ${entries.map(([name]) => name).join(', ')}`);\n const platformProjectRoot = path.join(projectRoot, platformName);\n const projectName =\n platformName === 'ios' ? getHackyProjectName(projectRoot, config) : undefined;\n\n for (const [modName, mod] of entries) {\n const modRequest = {\n projectRoot,\n projectName,\n platformProjectRoot,\n platform: platformName as ModPlatform,\n modName,\n introspect: !!introspect,\n };\n\n if (!(mod as Mod).isProvider) {\n // In strict mode, throw an error.\n const errorMessage = `Initial base modifier for \"${platformName}.${modName}\" is not a provider and therefore will not provide modResults to child mods`;\n if (assertMissingModProviders !== false) {\n throw new PluginError(errorMessage, 'MISSING_PROVIDER');\n } else {\n Warnings.addWarningForPlatform(\n platformName as ModPlatform,\n `${platformName}.${modName}`,\n `Skipping: Initial base modifier for \"${platformName}.${modName}\" is not a provider and therefore will not provide modResults to child mods. This may be due to an outdated version of Expo CLI.`\n );\n // In loose mode, just skip the mod entirely.\n continue;\n }\n }\n\n const results = await (mod as Mod)({\n ...config,\n modResults: null,\n modRequest,\n });\n\n // Sanity check to help locate non compliant mods.\n config = assertModResults(results, platformName, modName);\n // @ts-ignore: data is added for modifications\n delete config.modResults;\n // @ts-ignore: info is added for modifications\n delete config.modRequest;\n }\n }\n }\n\n return config;\n}\n"],"file":"mod-compiler.js"}
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getAndroidModFileProviders = getAndroidModFileProviders;
6
7
  exports.sortAndroidManifest = sortAndroidManifest;
7
8
  exports.withAndroidBaseMods = withAndroidBaseMods;
8
- exports.getAndroidModFileProviders = getAndroidModFileProviders;
9
9
 
10
10
  function _fs() {
11
11
  const data = require("fs");
@@ -1,4 +1,4 @@
1
- import { JSONObject } from '@expo/json-file';
1
+ import { JSONObject, JSONValue } from '@expo/json-file';
2
2
  import xcode from 'xcode';
3
3
  import { ExportedConfig } from '../Plugin.types';
4
4
  import { Paths } from '../ios';
@@ -11,7 +11,7 @@ declare const defaultProviders: {
11
11
  xcodeproj: import("./createBaseMod").BaseModProviderMethods<xcode.XcodeProject, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
12
12
  infoPlist: import("./createBaseMod").BaseModProviderMethods<InfoPlist, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
13
13
  entitlements: import("./createBaseMod").BaseModProviderMethods<JSONObject, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
14
- podfileProperties: import("./createBaseMod").BaseModProviderMethods<Record<string, string>, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
14
+ podfileProperties: import("./createBaseMod").BaseModProviderMethods<Record<string, JSONValue>, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
15
15
  };
16
16
  declare type IosDefaultProviders = typeof defaultProviders;
17
17
  export declare function withIosBaseMods(config: ExportedConfig, { providers, ...props }?: ForwardedBaseModOptions & {
@@ -24,6 +24,6 @@ export declare function getIosModFileProviders(): {
24
24
  xcodeproj: import("./createBaseMod").BaseModProviderMethods<xcode.XcodeProject, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
25
25
  infoPlist: import("./createBaseMod").BaseModProviderMethods<InfoPlist, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
26
26
  entitlements: import("./createBaseMod").BaseModProviderMethods<JSONObject, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
27
- podfileProperties: import("./createBaseMod").BaseModProviderMethods<Record<string, string>, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
27
+ podfileProperties: import("./createBaseMod").BaseModProviderMethods<Record<string, JSONValue>, Partial<Pick<import("./withMod").BaseModOptions, "skipEmptyMod" | "saveToInternal">>>;
28
28
  };
29
29
  export {};
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withIosBaseMods = withIosBaseMods;
7
6
  exports.getIosModFileProviders = getIosModFileProviders;
7
+ exports.withIosBaseMods = withIosBaseMods;
8
8
 
9
9
  function _jsonFile() {
10
10
  const data = _interopRequireDefault(require("@expo/json-file"));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/withIosBaseMods.ts"],"names":["readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","defaultProviders","dangerous","getFilePath","read","write","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","infoPlistBuildProperty","infoPlistPath","getInfoPlistPath","ios","entitlements","Entitlements","getEntitlementsPath","podfileProperties","results","JsonFile","readAsync","e","writeAsync","withIosBaseMods","providers","props","platform","getIosModFileProviders"],"mappings":"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","sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport { promises } from 'fs';\nimport path from 'path';\nimport xcode, { XcodeProject } from 'xcode';\n\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Entitlements, Paths } from '../ios';\nimport { InfoPlist } from '../ios/IosConfig.types';\nimport { getPbxproj } from '../ios/utils/Xcodeproj';\nimport { getInfoPlistPathFromPbxproj } from '../ios/utils/getInfoPlistPath';\nimport { fileExists } from '../utils/modules';\nimport { sortObject } from '../utils/sortObject';\nimport { addWarningIOS } from '../utils/warnings';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getAppDelegateFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath: string, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`\n expoPlist: provider<JSONObject>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot, projectName } }) {\n const supportingDirectory = path.join(platformProjectRoot, projectName!, 'Supporting');\n return path.resolve(supportingDirectory, 'Expo.plist');\n },\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return plist.parse(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (introspect) {\n return {};\n }\n throw error;\n }\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await writeFile(filePath, plist.build(sortObject(modResults)));\n },\n }),\n // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`\n xcodeproj: provider<XcodeProject>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPBXProjectPath(projectRoot);\n },\n async read(filePath) {\n const project = xcode.project(filePath);\n project.parseSync();\n return project;\n },\n async write(filePath, { modResults }) {\n await writeFile(filePath, modResults.writeSync());\n },\n }),\n // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`\n infoPlist: provider<InfoPlist, ForwardedBaseModOptions>({\n isIntrospective: true,\n async getFilePath(config) {\n let project: xcode.XcodeProject | null = null;\n try {\n project = getPbxproj(config.modRequest.projectRoot);\n } catch {\n // noop\n }\n\n // Only check / warn if a project actually exists, this'll provide\n // more accurate warning messages for users in managed projects.\n if (project) {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(project);\n\n if (infoPlistBuildProperty) {\n //: [root]/myapp/ios/MyApp/Info.plist\n const infoPlistPath = path.join(\n //: myapp/ios\n config.modRequest.platformProjectRoot,\n //: MyApp/Info.plist\n infoPlistBuildProperty\n );\n if (fileExists(infoPlistPath)) {\n return infoPlistPath;\n }\n addWarningIOS(\n 'mods.ios.infoPlist',\n `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`\n );\n } else {\n addWarningIOS('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');\n }\n }\n try {\n // Fallback on glob...\n return await Paths.getInfoPlistPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n async read(filePath, config) {\n // Apply all of the Info.plist values to the expo.ios.infoPlist object\n // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.infoPlist) config.ios.infoPlist = {};\n\n let modResults: InfoPlist;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Info.plist is empty');\n modResults = plist.parse(contents) as InfoPlist;\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the infoPlist object from the Expo config.\n modResults = getInfoPlistTemplate();\n }\n\n config.ios.infoPlist = {\n ...(modResults || {}),\n ...config.ios.infoPlist,\n };\n\n return config.ios.infoPlist!;\n },\n async write(filePath, config) {\n // Update the contents of the static infoPlist object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`\n entitlements: provider<JSONObject, ForwardedBaseModOptions>({\n isIntrospective: true,\n\n async getFilePath(config) {\n try {\n // Fallback on glob...\n return await Entitlements.getEntitlementsPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n\n async read(filePath, config) {\n let modResults: JSONObject;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Entitlements plist is empty');\n modResults = plist.parse(contents);\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the template file.\n modResults = getEntitlementsPlistTemplate();\n }\n\n // Apply all of the .entitlements values to the expo.ios.entitlements object\n // TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.entitlements) config.ios.entitlements = {};\n\n config.ios.entitlements = {\n ...(modResults || {}),\n ...config.ios.entitlements,\n };\n\n return config.ios.entitlements!;\n },\n\n async write(filePath, config) {\n // Update the contents of the static entitlements object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n\n // Append a rule to supply Podfile.properties.json data to mods on `mods.ios.podfileProperties`\n podfileProperties: provider<Record<string, string>>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.resolve(platformProjectRoot, 'Podfile.properties.json');\n },\n async read(filePath) {\n let results: Record<string, string> = {};\n try {\n results = await JsonFile.readAsync(filePath);\n } catch (e) {}\n return results;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await JsonFile.writeAsync(filePath, modResults);\n },\n }),\n};\n\ntype IosDefaultProviders = typeof defaultProviders;\n\nexport function withIosBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<IosDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<IosModName>(config, {\n ...props,\n platform: 'ios',\n providers: providers ?? getIosModFileProviders(),\n });\n}\n\nexport function getIosModFileProviders() {\n return defaultProviders;\n}\n"],"file":"withIosBaseMods.js"}
1
+ {"version":3,"sources":["../../src/plugins/withIosBaseMods.ts"],"names":["readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","defaultProviders","dangerous","getFilePath","read","write","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","infoPlistBuildProperty","infoPlistPath","getInfoPlistPath","ios","entitlements","Entitlements","getEntitlementsPath","podfileProperties","results","JsonFile","readAsync","e","writeAsync","withIosBaseMods","providers","props","platform","getIosModFileProviders"],"mappings":"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","sourcesContent":["import JsonFile, { JSONObject, JSONValue } from '@expo/json-file';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport { promises } from 'fs';\nimport path from 'path';\nimport xcode, { XcodeProject } from 'xcode';\n\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Entitlements, Paths } from '../ios';\nimport { InfoPlist } from '../ios/IosConfig.types';\nimport { getPbxproj } from '../ios/utils/Xcodeproj';\nimport { getInfoPlistPathFromPbxproj } from '../ios/utils/getInfoPlistPath';\nimport { fileExists } from '../utils/modules';\nimport { sortObject } from '../utils/sortObject';\nimport { addWarningIOS } from '../utils/warnings';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getAppDelegateFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath: string, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`\n expoPlist: provider<JSONObject>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot, projectName } }) {\n const supportingDirectory = path.join(platformProjectRoot, projectName!, 'Supporting');\n return path.resolve(supportingDirectory, 'Expo.plist');\n },\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return plist.parse(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (introspect) {\n return {};\n }\n throw error;\n }\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await writeFile(filePath, plist.build(sortObject(modResults)));\n },\n }),\n // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`\n xcodeproj: provider<XcodeProject>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPBXProjectPath(projectRoot);\n },\n async read(filePath) {\n const project = xcode.project(filePath);\n project.parseSync();\n return project;\n },\n async write(filePath, { modResults }) {\n await writeFile(filePath, modResults.writeSync());\n },\n }),\n // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`\n infoPlist: provider<InfoPlist, ForwardedBaseModOptions>({\n isIntrospective: true,\n async getFilePath(config) {\n let project: xcode.XcodeProject | null = null;\n try {\n project = getPbxproj(config.modRequest.projectRoot);\n } catch {\n // noop\n }\n\n // Only check / warn if a project actually exists, this'll provide\n // more accurate warning messages for users in managed projects.\n if (project) {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(project);\n\n if (infoPlistBuildProperty) {\n //: [root]/myapp/ios/MyApp/Info.plist\n const infoPlistPath = path.join(\n //: myapp/ios\n config.modRequest.platformProjectRoot,\n //: MyApp/Info.plist\n infoPlistBuildProperty\n );\n if (fileExists(infoPlistPath)) {\n return infoPlistPath;\n }\n addWarningIOS(\n 'mods.ios.infoPlist',\n `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`\n );\n } else {\n addWarningIOS('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');\n }\n }\n try {\n // Fallback on glob...\n return await Paths.getInfoPlistPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n async read(filePath, config) {\n // Apply all of the Info.plist values to the expo.ios.infoPlist object\n // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.infoPlist) config.ios.infoPlist = {};\n\n let modResults: InfoPlist;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Info.plist is empty');\n modResults = plist.parse(contents) as InfoPlist;\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the infoPlist object from the Expo config.\n modResults = getInfoPlistTemplate();\n }\n\n config.ios.infoPlist = {\n ...(modResults || {}),\n ...config.ios.infoPlist,\n };\n\n return config.ios.infoPlist!;\n },\n async write(filePath, config) {\n // Update the contents of the static infoPlist object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`\n entitlements: provider<JSONObject, ForwardedBaseModOptions>({\n isIntrospective: true,\n\n async getFilePath(config) {\n try {\n // Fallback on glob...\n return await Entitlements.getEntitlementsPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n\n async read(filePath, config) {\n let modResults: JSONObject;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Entitlements plist is empty');\n modResults = plist.parse(contents);\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the template file.\n modResults = getEntitlementsPlistTemplate();\n }\n\n // Apply all of the .entitlements values to the expo.ios.entitlements object\n // TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.entitlements) config.ios.entitlements = {};\n\n config.ios.entitlements = {\n ...(modResults || {}),\n ...config.ios.entitlements,\n };\n\n return config.ios.entitlements!;\n },\n\n async write(filePath, config) {\n // Update the contents of the static entitlements object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n\n // Append a rule to supply Podfile.properties.json data to mods on `mods.ios.podfileProperties`\n podfileProperties: provider<Record<string, JSONValue>>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.resolve(platformProjectRoot, 'Podfile.properties.json');\n },\n async read(filePath) {\n let results: Record<string, JSONValue> = {};\n try {\n results = await JsonFile.readAsync(filePath);\n } catch (e) {}\n return results;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await JsonFile.writeAsync(filePath, modResults);\n },\n }),\n};\n\ntype IosDefaultProviders = typeof defaultProviders;\n\nexport function withIosBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<IosDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<IosModName>(config, {\n ...props,\n platform: 'ios',\n providers: providers ?? getIosModFileProviders(),\n });\n}\n\nexport function getIosModFileProviders() {\n return defaultProviders;\n}\n"],"file":"withIosBaseMods.js"}
@@ -47,8 +47,12 @@ function _pluginResolver() {
47
47
 
48
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
49
 
50
- const EXPO_DEBUG = (0, _getenv().boolish)('EXPO_DEBUG', false);
51
- const EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = (0, _getenv().boolish)('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false);
50
+ const EXPO_DEBUG = (0, _getenv().boolish)('EXPO_DEBUG', false); // Show all error info related to plugin resolution.
51
+
52
+ const EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = (0, _getenv().boolish)('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false); // Force using the fallback unversioned plugin instead of a local versioned copy,
53
+ // this should only be used for testing the CLI.
54
+
55
+ const EXPO_USE_UNVERSIONED_PLUGINS = (0, _getenv().boolish)('EXPO_USE_UNVERSIONED_PLUGINS', false);
52
56
 
53
57
  function isModuleMissingError(name, error) {
54
58
  // @ts-ignore
@@ -93,14 +97,21 @@ const withStaticPlugin = (config, props) => {
93
97
  let [pluginResolve, pluginProps] = (0, _pluginResolver().normalizeStaticPlugin)(props.plugin); // Ensure no one uses this property by accident.
94
98
 
95
99
  (0, _assert().default)(!((_pluginProps = pluginProps) !== null && _pluginProps !== void 0 && _pluginProps._resolverError), `Plugin property '_resolverError' is a reserved property of \`withStaticPlugin\``);
96
- let withPlugin; // Function was provided, no need to resolve: [withPlugin, {}]
100
+ let withPlugin;
97
101
 
98
- if (typeof pluginResolve === 'function') {
102
+ if ( // Function was provided, no need to resolve: [withPlugin, {}]
103
+ typeof pluginResolve === 'function') {
99
104
  withPlugin = pluginResolve;
100
105
  } else if (typeof pluginResolve === 'string') {
101
106
  try {
102
107
  // Resolve and evaluate plugins.
103
- withPlugin = (0, _pluginResolver().resolveConfigPluginFunction)(projectRoot, pluginResolve);
108
+ withPlugin = (0, _pluginResolver().resolveConfigPluginFunction)(projectRoot, pluginResolve); // Only force if the project has the versioned plugin, otherwise use default behavior.
109
+ // This helps see which plugins are being skipped.
110
+
111
+ if (EXPO_USE_UNVERSIONED_PLUGINS && !!withPlugin && !!props._isLegacyPlugin && !!props.fallback) {
112
+ console.log(`Force "${pluginResolve}" to unversioned plugin`);
113
+ withPlugin = props.fallback;
114
+ }
104
115
  } catch (error) {
105
116
  if (EXPO_DEBUG) {
106
117
  if (EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/withStaticPlugin.ts"],"names":["EXPO_DEBUG","EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS","isModuleMissingError","name","error","includes","code","message","isUnexpectedTokenError","SyntaxError","PluginError","match","withStaticPlugin","config","props","projectRoot","_internal","pluginResolve","pluginProps","plugin","_resolverError","withPlugin","console","log","shouldMuteWarning","_isLegacyPlugin","fallback"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport { boolish } from 'getenv';\n\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { PluginError } from '../utils/errors';\nimport {\n assertInternalProjectRoot,\n normalizeStaticPlugin,\n resolveConfigPluginFunction,\n} from '../utils/plugin-resolver';\n\nconst EXPO_DEBUG = boolish('EXPO_DEBUG', false);\nconst EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = boolish('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false);\n\nfunction isModuleMissingError(name: string, error: Error): boolean {\n // @ts-ignore\n if (['MODULE_NOT_FOUND', 'PLUGIN_NOT_FOUND'].includes(error.code)) {\n return true;\n }\n return error.message.includes(`Cannot find module '${name}'`);\n}\n\nfunction isUnexpectedTokenError(error: Error): boolean {\n if (\n error instanceof SyntaxError ||\n (error instanceof PluginError && error.code === 'INVALID_PLUGIN_IMPORT')\n ) {\n return (\n // These are the most common errors that'll be thrown when a package isn't transpiled correctly.\n !!error.message.match(/Unexpected token/) ||\n !!error.message.match(/Cannot use import statement/)\n );\n }\n return false;\n}\n\n/**\n * Resolves static module plugin and potentially falls back on a provided plugin if the module cannot be resolved\n *\n * @param config\n * @param fallback Plugin with `_resolverError` explaining why the module couldn't be used\n * @param projectRoot optional project root, fallback to _internal.projectRoot. Used for testing.\n * @param _isLegacyPlugin Used to suppress errors thrown by plugins that are applied automatically\n */\nexport const withStaticPlugin: ConfigPlugin<{\n plugin: StaticPlugin | ConfigPlugin | string;\n fallback?: ConfigPlugin<{ _resolverError: Error } & any>;\n projectRoot?: string;\n _isLegacyPlugin?: boolean;\n}> = (config, props) => {\n let projectRoot = props.projectRoot;\n if (!projectRoot) {\n projectRoot = config._internal?.projectRoot;\n assertInternalProjectRoot(projectRoot);\n }\n\n let [pluginResolve, pluginProps] = normalizeStaticPlugin(props.plugin);\n // Ensure no one uses this property by accident.\n assert(\n !pluginProps?._resolverError,\n `Plugin property '_resolverError' is a reserved property of \\`withStaticPlugin\\``\n );\n\n let withPlugin: ConfigPlugin<unknown>;\n // Function was provided, no need to resolve: [withPlugin, {}]\n if (typeof pluginResolve === 'function') {\n withPlugin = pluginResolve;\n } else if (typeof pluginResolve === 'string') {\n try {\n // Resolve and evaluate plugins.\n withPlugin = resolveConfigPluginFunction(projectRoot, pluginResolve);\n } catch (error) {\n if (EXPO_DEBUG) {\n if (EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS) {\n // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n console.log(`Error resolving plugin \"${pluginResolve}\"`);\n console.log(error);\n console.log();\n } else {\n const shouldMuteWarning =\n props._isLegacyPlugin &&\n (isModuleMissingError(pluginResolve, error) || isUnexpectedTokenError(error));\n if (!shouldMuteWarning) {\n if (isModuleMissingError(pluginResolve, error)) {\n // Prevent causing log spew for basic resolution errors.\n console.log(`Could not find plugin \"${pluginResolve}\"`);\n } else {\n // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n console.log(`Error resolving plugin \"${pluginResolve}\"`);\n console.log(error);\n console.log();\n }\n }\n }\n }\n // TODO: Maybe allow for `PluginError`s to be thrown so external plugins can assert invalid options.\n\n // If the static module failed to resolve, attempt to use a fallback.\n // This enables support for built-in plugins with versioned variations living in other packages.\n if (props.fallback) {\n if (!pluginProps) pluginProps = {};\n // Pass this to the fallback plugin for potential warnings about needing to install a versioned package.\n pluginProps._resolverError = error;\n withPlugin = props.fallback;\n } else {\n // If no fallback, throw the resolution error.\n throw error;\n }\n }\n } else {\n throw new PluginError(\n `Plugin is an unexpected type: ${typeof pluginResolve}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n // Execute the plugin.\n config = withPlugin(config, pluginProps);\n return config;\n};\n"],"file":"withStaticPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/withStaticPlugin.ts"],"names":["EXPO_DEBUG","EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS","EXPO_USE_UNVERSIONED_PLUGINS","isModuleMissingError","name","error","includes","code","message","isUnexpectedTokenError","SyntaxError","PluginError","match","withStaticPlugin","config","props","projectRoot","_internal","pluginResolve","pluginProps","plugin","_resolverError","withPlugin","_isLegacyPlugin","fallback","console","log","shouldMuteWarning"],"mappings":";;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAMA,MAAMA,UAAU,GAAG,uBAAQ,YAAR,EAAsB,KAAtB,CAAnB,C,CAEA;;AACA,MAAMC,iCAAiC,GAAG,uBAAQ,mCAAR,EAA6C,KAA7C,CAA1C,C,CACA;AACA;;AACA,MAAMC,4BAA4B,GAAG,uBAAQ,8BAAR,EAAwC,KAAxC,CAArC;;AAEA,SAASC,oBAAT,CAA8BC,IAA9B,EAA4CC,KAA5C,EAAmE;AACjE;AACA,MAAI,CAAC,kBAAD,EAAqB,kBAArB,EAAyCC,QAAzC,CAAkDD,KAAK,CAACE,IAAxD,CAAJ,EAAmE;AACjE,WAAO,IAAP;AACD;;AACD,SAAOF,KAAK,CAACG,OAAN,CAAcF,QAAd,CAAwB,uBAAsBF,IAAK,GAAnD,CAAP;AACD;;AAED,SAASK,sBAAT,CAAgCJ,KAAhC,EAAuD;AACrD,MACEA,KAAK,YAAYK,WAAjB,IACCL,KAAK,YAAYM,qBAAjB,IAAgCN,KAAK,CAACE,IAAN,KAAe,uBAFlD,EAGE;AACA,WACE;AACA,OAAC,CAACF,KAAK,CAACG,OAAN,CAAcI,KAAd,CAAoB,kBAApB,CAAF,IACA,CAAC,CAACP,KAAK,CAACG,OAAN,CAAcI,KAAd,CAAoB,6BAApB;AAHJ;AAKD;;AACD,SAAO,KAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,gBAKX,GAAG,CAACC,MAAD,EAASC,KAAT,KAAmB;AAAA;;AACtB,MAAIC,WAAW,GAAGD,KAAK,CAACC,WAAxB;;AACA,MAAI,CAACA,WAAL,EAAkB;AAAA;;AAChBA,IAAAA,WAAW,wBAAGF,MAAM,CAACG,SAAV,sDAAG,kBAAkBD,WAAhC;AACA,qDAA0BA,WAA1B;AACD;;AAED,MAAI,CAACE,aAAD,EAAgBC,WAAhB,IAA+B,6CAAsBJ,KAAK,CAACK,MAA5B,CAAnC,CAPsB,CAQtB;;AACA,yBACE,kBAACD,WAAD,yCAAC,aAAaE,cAAd,CADF,EAEG,iFAFH;AAKA,MAAIC,UAAJ;;AAEA,OACE;AACA,SAAOJ,aAAP,KAAyB,UAF3B,EAGE;AACAI,IAAAA,UAAU,GAAGJ,aAAb;AACD,GALD,MAKO,IAAI,OAAOA,aAAP,KAAyB,QAA7B,EAAuC;AAC5C,QAAI;AACF;AACAI,MAAAA,UAAU,GAAG,mDAA4BN,WAA5B,EAAyCE,aAAzC,CAAb,CAFE,CAIF;AACA;;AACA,UACEhB,4BAA4B,IAC5B,CAAC,CAACoB,UADF,IAEA,CAAC,CAACP,KAAK,CAACQ,eAFR,IAGA,CAAC,CAACR,KAAK,CAACS,QAJV,EAKE;AACAC,QAAAA,OAAO,CAACC,GAAR,CAAa,UAASR,aAAc,yBAApC;AACAI,QAAAA,UAAU,GAAGP,KAAK,CAACS,QAAnB;AACD;AACF,KAfD,CAeE,OAAOnB,KAAP,EAAmB;AACnB,UAAIL,UAAJ,EAAgB;AACd,YAAIC,iCAAJ,EAAuC;AACrC;AACAwB,UAAAA,OAAO,CAACC,GAAR,CAAa,2BAA0BR,aAAc,GAArD;AACAO,UAAAA,OAAO,CAACC,GAAR,CAAYrB,KAAZ;AACAoB,UAAAA,OAAO,CAACC,GAAR;AACD,SALD,MAKO;AACL,gBAAMC,iBAAiB,GACrBZ,KAAK,CAACQ,eAAN,KACCpB,oBAAoB,CAACe,aAAD,EAAgBb,KAAhB,CAApB,IAA8CI,sBAAsB,CAACJ,KAAD,CADrE,CADF;;AAGA,cAAI,CAACsB,iBAAL,EAAwB;AACtB,gBAAIxB,oBAAoB,CAACe,aAAD,EAAgBb,KAAhB,CAAxB,EAAgD;AAC9C;AACAoB,cAAAA,OAAO,CAACC,GAAR,CAAa,0BAAyBR,aAAc,GAApD;AACD,aAHD,MAGO;AACL;AACAO,cAAAA,OAAO,CAACC,GAAR,CAAa,2BAA0BR,aAAc,GAArD;AACAO,cAAAA,OAAO,CAACC,GAAR,CAAYrB,KAAZ;AACAoB,cAAAA,OAAO,CAACC,GAAR;AACD;AACF;AACF;AACF,OAvBkB,CAwBnB;AAEA;AACA;;;AACA,UAAIX,KAAK,CAACS,QAAV,EAAoB;AAClB,YAAI,CAACL,WAAL,EAAkBA,WAAW,GAAG,EAAd,CADA,CAElB;;AACAA,QAAAA,WAAW,CAACE,cAAZ,GAA6BhB,KAA7B;AACAiB,QAAAA,UAAU,GAAGP,KAAK,CAACS,QAAnB;AACD,OALD,MAKO;AACL;AACA,cAAMnB,KAAN;AACD;AACF;AACF,GAtDM,MAsDA;AACL,UAAM,KAAIM,qBAAJ,EACH,iCAAgC,OAAOO,aAAc,EADlD,EAEJ,qBAFI,CAAN;AAID,GAhFqB,CAkFtB;;;AACAJ,EAAAA,MAAM,GAAGQ,UAAU,CAACR,MAAD,EAASK,WAAT,CAAnB;AACA,SAAOL,MAAP;AACD,CA1FM","sourcesContent":["import assert from 'assert';\nimport { boolish } from 'getenv';\n\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { PluginError } from '../utils/errors';\nimport {\n assertInternalProjectRoot,\n normalizeStaticPlugin,\n resolveConfigPluginFunction,\n} from '../utils/plugin-resolver';\n\nconst EXPO_DEBUG = boolish('EXPO_DEBUG', false);\n\n// Show all error info related to plugin resolution.\nconst EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = boolish('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false);\n// Force using the fallback unversioned plugin instead of a local versioned copy,\n// this should only be used for testing the CLI.\nconst EXPO_USE_UNVERSIONED_PLUGINS = boolish('EXPO_USE_UNVERSIONED_PLUGINS', false);\n\nfunction isModuleMissingError(name: string, error: Error): boolean {\n // @ts-ignore\n if (['MODULE_NOT_FOUND', 'PLUGIN_NOT_FOUND'].includes(error.code)) {\n return true;\n }\n return error.message.includes(`Cannot find module '${name}'`);\n}\n\nfunction isUnexpectedTokenError(error: Error): boolean {\n if (\n error instanceof SyntaxError ||\n (error instanceof PluginError && error.code === 'INVALID_PLUGIN_IMPORT')\n ) {\n return (\n // These are the most common errors that'll be thrown when a package isn't transpiled correctly.\n !!error.message.match(/Unexpected token/) ||\n !!error.message.match(/Cannot use import statement/)\n );\n }\n return false;\n}\n\n/**\n * Resolves static module plugin and potentially falls back on a provided plugin if the module cannot be resolved\n *\n * @param config\n * @param fallback Plugin with `_resolverError` explaining why the module couldn't be used\n * @param projectRoot optional project root, fallback to _internal.projectRoot. Used for testing.\n * @param _isLegacyPlugin Used to suppress errors thrown by plugins that are applied automatically\n */\nexport const withStaticPlugin: ConfigPlugin<{\n plugin: StaticPlugin | ConfigPlugin | string;\n fallback?: ConfigPlugin<{ _resolverError: Error } & any>;\n projectRoot?: string;\n _isLegacyPlugin?: boolean;\n}> = (config, props) => {\n let projectRoot = props.projectRoot;\n if (!projectRoot) {\n projectRoot = config._internal?.projectRoot;\n assertInternalProjectRoot(projectRoot);\n }\n\n let [pluginResolve, pluginProps] = normalizeStaticPlugin(props.plugin);\n // Ensure no one uses this property by accident.\n assert(\n !pluginProps?._resolverError,\n `Plugin property '_resolverError' is a reserved property of \\`withStaticPlugin\\``\n );\n\n let withPlugin: ConfigPlugin<unknown>;\n\n if (\n // Function was provided, no need to resolve: [withPlugin, {}]\n typeof pluginResolve === 'function'\n ) {\n withPlugin = pluginResolve;\n } else if (typeof pluginResolve === 'string') {\n try {\n // Resolve and evaluate plugins.\n withPlugin = resolveConfigPluginFunction(projectRoot, pluginResolve);\n\n // Only force if the project has the versioned plugin, otherwise use default behavior.\n // This helps see which plugins are being skipped.\n if (\n EXPO_USE_UNVERSIONED_PLUGINS &&\n !!withPlugin &&\n !!props._isLegacyPlugin &&\n !!props.fallback\n ) {\n console.log(`Force \"${pluginResolve}\" to unversioned plugin`);\n withPlugin = props.fallback;\n }\n } catch (error: any) {\n if (EXPO_DEBUG) {\n if (EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS) {\n // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n console.log(`Error resolving plugin \"${pluginResolve}\"`);\n console.log(error);\n console.log();\n } else {\n const shouldMuteWarning =\n props._isLegacyPlugin &&\n (isModuleMissingError(pluginResolve, error) || isUnexpectedTokenError(error));\n if (!shouldMuteWarning) {\n if (isModuleMissingError(pluginResolve, error)) {\n // Prevent causing log spew for basic resolution errors.\n console.log(`Could not find plugin \"${pluginResolve}\"`);\n } else {\n // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n console.log(`Error resolving plugin \"${pluginResolve}\"`);\n console.log(error);\n console.log();\n }\n }\n }\n }\n // TODO: Maybe allow for `PluginError`s to be thrown so external plugins can assert invalid options.\n\n // If the static module failed to resolve, attempt to use a fallback.\n // This enables support for built-in plugins with versioned variations living in other packages.\n if (props.fallback) {\n if (!pluginProps) pluginProps = {};\n // Pass this to the fallback plugin for potential warnings about needing to install a versioned package.\n pluginProps._resolverError = error;\n withPlugin = props.fallback;\n } else {\n // If no fallback, throw the resolution error.\n throw error;\n }\n }\n } else {\n throw new PluginError(\n `Plugin is an unexpected type: ${typeof pluginResolve}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n\n // Execute the plugin.\n config = withPlugin(config, pluginProps);\n return config;\n};\n"],"file":"withStaticPlugin.js"}
@@ -10,6 +10,7 @@ export declare function getNativeVersion(config: Pick<ExpoConfig, 'version'> & {
10
10
  * @return an expoConfig with only string valued platform specific runtime versions.
11
11
  */
12
12
  export declare const withRuntimeVersion: (config: ExpoConfig) => ExpoConfig;
13
+ export declare function getRuntimeVersionNullable(...[config, platform]: Parameters<typeof getRuntimeVersion>): string | null;
13
14
  export declare function getRuntimeVersion(config: Pick<ExpoConfig, 'version' | 'runtimeVersion' | 'sdkVersion'> & {
14
15
  android?: Pick<Android, 'versionCode' | 'runtimeVersion'>;
15
16
  ios?: Pick<IOS, 'buildNumber' | 'runtimeVersion'>;