@expo/config-plugins 4.0.7 → 4.0.11

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 (104) hide show
  1. package/build/Plugin.types.js +6 -6
  2. package/build/android/AllowBackup.js +1 -1
  3. package/build/android/Colors.js +3 -3
  4. package/build/android/EasBuild.js +1 -1
  5. package/build/android/GoogleServices.js +3 -3
  6. package/build/android/IntentFilters.d.ts +3 -3
  7. package/build/android/IntentFilters.js +45 -49
  8. package/build/android/IntentFilters.js.map +1 -1
  9. package/build/android/JsEngine.js +2 -1
  10. package/build/android/JsEngine.js.map +1 -1
  11. package/build/android/Manifest.d.ts +5 -1
  12. package/build/android/Manifest.js +10 -10
  13. package/build/android/Manifest.js.map +1 -1
  14. package/build/android/Name.d.ts +2 -1
  15. package/build/android/Name.js +7 -4
  16. package/build/android/Name.js.map +1 -1
  17. package/build/android/Orientation.js +2 -1
  18. package/build/android/Orientation.js.map +1 -1
  19. package/build/android/Package.js +4 -4
  20. package/build/android/Package.js.map +1 -1
  21. package/build/android/Paths.js +9 -9
  22. package/build/android/Permissions.js +6 -6
  23. package/build/android/Resources.js +5 -5
  24. package/build/android/Scheme.js +3 -3
  25. package/build/android/StatusBar.js +3 -3
  26. package/build/android/Strings.js +1 -1
  27. package/build/android/Styles.js +5 -5
  28. package/build/android/Updates.d.ts +2 -7
  29. package/build/android/Updates.js +34 -27
  30. package/build/android/Updates.js.map +1 -1
  31. package/build/android/Version.d.ts +9 -0
  32. package/build/android/Version.js +39 -3
  33. package/build/android/Version.js.map +1 -1
  34. package/build/android/WindowSoftInputMode.js +1 -1
  35. package/build/android/codeMod.js +2 -2
  36. package/build/index.d.ts +1 -1
  37. package/build/index.js +57 -49
  38. package/build/index.js.map +1 -1
  39. package/build/ios/Bitcode.js +1 -1
  40. package/build/ios/BuildScheme.js +2 -2
  41. package/build/ios/BundleIdentifier.js +14 -4
  42. package/build/ios/BundleIdentifier.js.map +1 -1
  43. package/build/ios/DeviceFamily.js +3 -3
  44. package/build/ios/Entitlements.js +2 -2
  45. package/build/ios/Entitlements.js.map +1 -1
  46. package/build/ios/Google.js +2 -2
  47. package/build/ios/JsEngine.d.ts +2 -1
  48. package/build/ios/JsEngine.js +2 -1
  49. package/build/ios/JsEngine.js.map +1 -1
  50. package/build/ios/Locales.js +1 -1
  51. package/build/ios/Maps.js +32 -18
  52. package/build/ios/Maps.js.map +1 -1
  53. package/build/ios/Orientation.js +2 -1
  54. package/build/ios/Orientation.js.map +1 -1
  55. package/build/ios/Paths.js +14 -14
  56. package/build/ios/Paths.js.map +1 -1
  57. package/build/ios/Permissions.js +1 -1
  58. package/build/ios/Permissions.js.map +1 -1
  59. package/build/ios/ProvisioningProfile.js +11 -2
  60. package/build/ios/ProvisioningProfile.js.map +1 -1
  61. package/build/ios/Scheme.js +4 -4
  62. package/build/ios/Swift.js +2 -2
  63. package/build/ios/Target.js +34 -15
  64. package/build/ios/Target.js.map +1 -1
  65. package/build/ios/Updates.d.ts +2 -7
  66. package/build/ios/Updates.js +34 -27
  67. package/build/ios/Updates.js.map +1 -1
  68. package/build/ios/Version.js +3 -3
  69. package/build/ios/codeMod.js +2 -2
  70. package/build/ios/index.js +3 -1
  71. package/build/ios/index.js.map +1 -1
  72. package/build/ios/utils/Xcodeproj.js +9 -9
  73. package/build/ios/utils/string.d.ts +1 -0
  74. package/build/ios/utils/string.js +11 -0
  75. package/build/ios/utils/string.js.map +1 -0
  76. package/build/plugins/android-plugins.js +1 -1
  77. package/build/plugins/createBaseMod.js +2 -2
  78. package/build/plugins/createBaseMod.js.map +1 -1
  79. package/build/plugins/ios-plugins.d.ts +2 -2
  80. package/build/plugins/ios-plugins.js +2 -2
  81. package/build/plugins/ios-plugins.js.map +1 -1
  82. package/build/plugins/mod-compiler.js +3 -3
  83. package/build/plugins/mod-compiler.js.map +1 -1
  84. package/build/plugins/withAndroidBaseMods.js +1 -1
  85. package/build/plugins/withIosBaseMods.d.ts +3 -3
  86. package/build/plugins/withIosBaseMods.js +1 -1
  87. package/build/plugins/withIosBaseMods.js.map +1 -1
  88. package/build/utils/Updates.d.ts +2 -0
  89. package/build/utils/Updates.js +58 -1
  90. package/build/utils/Updates.js.map +1 -1
  91. package/build/utils/XML.d.ts +6 -0
  92. package/build/utils/XML.js +57 -10
  93. package/build/utils/XML.js.map +1 -1
  94. package/build/utils/errors.js +1 -1
  95. package/build/utils/generateCode.js +2 -2
  96. package/build/utils/history.js +1 -1
  97. package/build/utils/modules.js +1 -1
  98. package/build/utils/plugin-resolver.js +4 -4
  99. package/build/utils/sortObject.js +2 -2
  100. package/build/utils/warnings.js +1 -1
  101. package/package.json +4 -3
  102. package/build/utils/resolvePackageRootFolder.d.ts +0 -1
  103. package/build/utils/resolvePackageRootFolder.js +0 -57
  104. package/build/utils/resolvePackageRootFolder.js.map +0 -1
@@ -3,20 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getRuntimeVersionNullable = getRuntimeVersionNullable;
6
+ exports.Config = void 0;
7
+ exports.ensureBundleReactNativePhaseContainsConfigurationScript = ensureBundleReactNativePhaseContainsConfigurationScript;
8
+ exports.getBundleReactNativePhase = getBundleReactNativePhase;
7
9
  exports.getSDKVersion = getSDKVersion;
10
+ exports.getUpdatesCheckOnLaunch = getUpdatesCheckOnLaunch;
8
11
  exports.getUpdatesEnabled = getUpdatesEnabled;
9
12
  exports.getUpdatesTimeout = getUpdatesTimeout;
10
- exports.getUpdatesCheckOnLaunch = getUpdatesCheckOnLaunch;
11
- exports.setUpdatesConfig = setUpdatesConfig;
12
- exports.setVersionsConfig = setVersionsConfig;
13
- exports.getBundleReactNativePhase = getBundleReactNativePhase;
14
- exports.ensureBundleReactNativePhaseContainsConfigurationScript = ensureBundleReactNativePhaseContainsConfigurationScript;
15
- exports.isShellScriptBuildPhaseConfigured = isShellScriptBuildPhaseConfigured;
16
13
  exports.isPlistConfigurationSet = isPlistConfigurationSet;
17
14
  exports.isPlistConfigurationSynced = isPlistConfigurationSynced;
18
15
  exports.isPlistVersionConfigurationSynced = isPlistVersionConfigurationSynced;
19
- exports.withUpdates = exports.Config = void 0;
16
+ exports.isShellScriptBuildPhaseConfigured = isShellScriptBuildPhaseConfigured;
17
+ exports.setUpdatesConfig = setUpdatesConfig;
18
+ exports.setVersionsConfig = setVersionsConfig;
19
+ exports.withUpdates = void 0;
20
20
 
21
21
  function path() {
22
22
  const data = _interopRequireWildcard(require("path"));
@@ -38,6 +38,16 @@ function _resolveFrom() {
38
38
  return data;
39
39
  }
40
40
 
41
+ function _semver() {
42
+ const data = _interopRequireDefault(require("semver"));
43
+
44
+ _semver = function () {
45
+ return data;
46
+ };
47
+
48
+ return data;
49
+ }
50
+
41
51
  function _iosPlugins() {
42
52
  const data = require("../plugins/ios-plugins");
43
53
 
@@ -66,11 +76,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
66
76
 
67
77
  const CREATE_MANIFEST_IOS_PATH = 'expo-updates/scripts/create-manifest-ios.sh';
68
78
  let Config;
69
- /**
70
- * runtime version maybe null in projects using classic updates. In that
71
- * case we use SDK version
72
- */
73
-
74
79
  exports.Config = Config;
75
80
 
76
81
  (function (Config) {
@@ -84,14 +89,6 @@ exports.Config = Config;
84
89
  Config["UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY"] = "EXUpdatesRequestHeaders";
85
90
  })(Config || (exports.Config = Config = {}));
86
91
 
87
- function getRuntimeVersionNullable(config) {
88
- try {
89
- return (0, _Updates().getRuntimeVersion)(config, 'ios');
90
- } catch (e) {
91
- return null;
92
- }
93
- }
94
-
95
92
  function getSDKVersion(config) {
96
93
  return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;
97
94
  }
@@ -108,10 +105,15 @@ function getUpdatesTimeout(config) {
108
105
  return (_config$updates$fallb = (_config$updates2 = config.updates) === null || _config$updates2 === void 0 ? void 0 : _config$updates2.fallbackToCacheTimeout) !== null && _config$updates$fallb !== void 0 ? _config$updates$fallb : 0;
109
106
  }
110
107
 
111
- function getUpdatesCheckOnLaunch(config) {
108
+ function getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion) {
112
109
  var _config$updates3, _config$updates4;
113
110
 
114
111
  if (((_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.checkAutomatically) === 'ON_ERROR_RECOVERY') {
112
+ // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x
113
+ if (expoUpdatesPackageVersion && _semver().default.gte(expoUpdatesPackageVersion, '0.11.0')) {
114
+ return 'ERROR_RECOVERY_ONLY';
115
+ }
116
+
115
117
  return 'NEVER';
116
118
  } else if (((_config$updates4 = config.updates) === null || _config$updates4 === void 0 ? void 0 : _config$updates4.checkAutomatically) === 'ON_LOAD') {
117
119
  return 'ALWAYS';
@@ -124,17 +126,18 @@ const withUpdates = (config, {
124
126
  expoUsername
125
127
  }) => {
126
128
  return (0, _iosPlugins().withExpoPlist)(config, config => {
127
- config.modResults = setUpdatesConfig(config, config.modResults, expoUsername);
129
+ const expoUpdatesPackageVersion = (0, _Updates().getExpoUpdatesPackageVersion)(config.modRequest.projectRoot);
130
+ config.modResults = setUpdatesConfig(config, config.modResults, expoUsername, expoUpdatesPackageVersion);
128
131
  return config;
129
132
  });
130
133
  };
131
134
 
132
135
  exports.withUpdates = withUpdates;
133
136
 
134
- function setUpdatesConfig(config, expoPlist, username) {
137
+ function setUpdatesConfig(config, expoPlist, username, expoUpdatesPackageVersion) {
135
138
  const newExpoPlist = { ...expoPlist,
136
139
  [Config.ENABLED]: getUpdatesEnabled(config),
137
- [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config),
140
+ [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion),
138
141
  [Config.LAUNCH_WAIT_MS]: getUpdatesTimeout(config)
139
142
  };
140
143
  const updateUrl = (0, _Updates().getUpdateUrl)(config, username);
@@ -151,13 +154,17 @@ function setUpdatesConfig(config, expoPlist, username) {
151
154
  function setVersionsConfig(config, expoPlist) {
152
155
  const newExpoPlist = { ...expoPlist
153
156
  };
154
- const runtimeVersion = getRuntimeVersionNullable(config);
157
+ const runtimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'ios');
155
158
  const sdkVersion = getSDKVersion(config);
156
159
 
157
160
  if (runtimeVersion) {
158
161
  delete newExpoPlist[Config.SDK_VERSION];
159
162
  newExpoPlist[Config.RUNTIME_VERSION] = runtimeVersion;
160
163
  } else if (sdkVersion) {
164
+ /**
165
+ * runtime version maybe null in projects using classic updates. In that
166
+ * case we use SDK version
167
+ */
161
168
  delete newExpoPlist[Config.RUNTIME_VERSION];
162
169
  newExpoPlist[Config.SDK_VERSION] = sdkVersion;
163
170
  } else {
@@ -224,7 +231,7 @@ function isPlistConfigurationSynced(config, expoPlist, username) {
224
231
  function isPlistVersionConfigurationSynced(config, expoPlist) {
225
232
  var _expoPlist$EXUpdatesR, _expoPlist$EXUpdatesS;
226
233
 
227
- const expectedRuntimeVersion = getRuntimeVersionNullable(config);
234
+ const expectedRuntimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'ios');
228
235
  const expectedSdkVersion = getSDKVersion(config);
229
236
  const currentRuntimeVersion = (_expoPlist$EXUpdatesR = expoPlist.EXUpdatesRuntimeVersion) !== null && _expoPlist$EXUpdatesR !== void 0 ? _expoPlist$EXUpdatesR : null;
230
237
  const currentSdkVersion = (_expoPlist$EXUpdatesS = expoPlist.EXUpdatesSDKVersion) !== null && _expoPlist$EXUpdatesS !== void 0 ? _expoPlist$EXUpdatesS : null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/Updates.ts"],"names":["CREATE_MANIFEST_IOS_PATH","Config","getRuntimeVersionNullable","config","e","getSDKVersion","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","checkAutomatically","withUpdates","expoUsername","modResults","setUpdatesConfig","expoPlist","username","newExpoPlist","ENABLED","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","SDK_VERSION","RUNTIME_VERSION","formatConfigurationScriptPath","projectRoot","buildScriptPath","resolveFrom","silent","Error","relativePath","path","relative","join","process","platform","replace","getBundleReactNativePhase","project","shellScriptBuildPhase","hash","objects","PBXShellScriptBuildPhase","bundleReactNative","Object","values","find","buildPhase","name","ensureBundleReactNativePhaseContainsConfigurationScript","buildPhaseShellScriptPath","isShellScriptBuildPhaseConfigured","shellScript","includes","RegExp","isPlistConfigurationSet","Boolean","EXUpdatesURL","EXUpdatesSDKVersion","EXUpdatesRuntimeVersion","isPlistConfigurationSynced","EXUpdatesEnabled","EXUpdatesLaunchWaitMs","EXUpdatesCheckOnLaunch","isPlistVersionConfigurationSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport xcode from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withExpoPlist } from '../plugins/ios-plugins';\nimport { ExpoConfigUpdates, getRuntimeVersion, getUpdateUrl } from '../utils/Updates';\nimport { ExpoPlist } from './IosConfig.types';\n\nconst CREATE_MANIFEST_IOS_PATH = 'expo-updates/scripts/create-manifest-ios.sh';\n\nexport enum Config {\n ENABLED = 'EXUpdatesEnabled',\n CHECK_ON_LAUNCH = 'EXUpdatesCheckOnLaunch',\n LAUNCH_WAIT_MS = 'EXUpdatesLaunchWaitMs',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n SDK_VERSION = 'EXUpdatesSDKVersion',\n UPDATE_URL = 'EXUpdatesURL',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n}\n\n/**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\nexport function getRuntimeVersionNullable(\n config: Pick<ExpoConfigUpdates, 'runtimeVersion'>\n): string | null {\n try {\n return getRuntimeVersion(config, 'ios');\n } catch (e) {\n return null;\n }\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>) {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>\n): 'NEVER' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withExpoPlist(config, config => {\n config.modResults = setUpdatesConfig(config, config.modResults, expoUsername);\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null\n): ExpoPlist {\n const newExpoPlist = {\n ...expoPlist,\n [Config.ENABLED]: getUpdatesEnabled(config),\n [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config),\n [Config.LAUNCH_WAIT_MS]: getUpdatesTimeout(config),\n };\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n newExpoPlist[Config.UPDATE_URL] = updateUrl;\n } else {\n delete newExpoPlist[Config.UPDATE_URL];\n }\n\n return setVersionsConfig(config, newExpoPlist);\n}\n\nexport function setVersionsConfig(config: ExpoConfigUpdates, expoPlist: ExpoPlist): ExpoPlist {\n const newExpoPlist = { ...expoPlist };\n\n const runtimeVersion = getRuntimeVersionNullable(config);\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n delete newExpoPlist[Config.SDK_VERSION];\n newExpoPlist[Config.RUNTIME_VERSION] = runtimeVersion;\n } else if (sdkVersion) {\n delete newExpoPlist[Config.RUNTIME_VERSION];\n newExpoPlist[Config.SDK_VERSION] = sdkVersion;\n } else {\n delete newExpoPlist[Config.SDK_VERSION];\n delete newExpoPlist[Config.RUNTIME_VERSION];\n }\n\n return newExpoPlist;\n}\n\nfunction formatConfigurationScriptPath(projectRoot: string): string {\n const buildScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_IOS_PATH);\n\n if (!buildScriptPath) {\n throw new Error(\n \"Could not find the build script for iOS. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(path.join(projectRoot, 'ios'), buildScriptPath);\n return process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n}\n\ninterface ShellScriptBuildPhase {\n isa: 'PBXShellScriptBuildPhase';\n name: string;\n shellScript: string;\n [key: string]: any;\n}\n\nexport function getBundleReactNativePhase(project: xcode.XcodeProject): ShellScriptBuildPhase {\n const shellScriptBuildPhase = project.hash.project.objects.PBXShellScriptBuildPhase as Record<\n string,\n ShellScriptBuildPhase\n >;\n const bundleReactNative = Object.values(shellScriptBuildPhase).find(\n buildPhase => buildPhase.name === '\"Bundle React Native code and images\"'\n );\n\n if (!bundleReactNative) {\n throw new Error(`Couldn't find a build phase \"Bundle React Native code and images\"`);\n }\n\n return bundleReactNative;\n}\n\nexport function ensureBundleReactNativePhaseContainsConfigurationScript(\n projectRoot: string,\n project: xcode.XcodeProject\n): xcode.XcodeProject {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n\n if (!isShellScriptBuildPhaseConfigured(projectRoot, project)) {\n // check if there's already another path to create-manifest-ios.sh\n // this might be the case for monorepos\n if (bundleReactNative.shellScript.includes(CREATE_MANIFEST_IOS_PATH)) {\n bundleReactNative.shellScript = bundleReactNative.shellScript.replace(\n new RegExp(`(\\\\\\\\n)(\\\\.\\\\.)+/node_modules/${CREATE_MANIFEST_IOS_PATH}`),\n ''\n );\n }\n bundleReactNative.shellScript = `${bundleReactNative.shellScript.replace(\n /\"$/,\n ''\n )}${buildPhaseShellScriptPath}\\\\n\"`;\n }\n return project;\n}\n\nexport function isShellScriptBuildPhaseConfigured(\n projectRoot: string,\n project: xcode.XcodeProject\n): boolean {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n return bundleReactNative.shellScript.includes(buildPhaseShellScriptPath);\n}\n\nexport function isPlistConfigurationSet(expoPlist: ExpoPlist): boolean {\n return Boolean(\n expoPlist.EXUpdatesURL && (expoPlist.EXUpdatesSDKVersion || expoPlist.EXUpdatesRuntimeVersion)\n );\n}\n\nexport function isPlistConfigurationSynced(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) === expoPlist.EXUpdatesURL &&\n getUpdatesEnabled(config) === expoPlist.EXUpdatesEnabled &&\n getUpdatesTimeout(config) === expoPlist.EXUpdatesLaunchWaitMs &&\n getUpdatesCheckOnLaunch(config) === expoPlist.EXUpdatesCheckOnLaunch &&\n isPlistVersionConfigurationSynced(config, expoPlist)\n );\n}\n\nexport function isPlistVersionConfigurationSynced(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n expoPlist: ExpoPlist\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config);\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = expoPlist.EXUpdatesRuntimeVersion ?? null;\n const currentSdkVersion = expoPlist.EXUpdatesSDKVersion ?? null;\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
1
+ {"version":3,"sources":["../../src/ios/Updates.ts"],"names":["CREATE_MANIFEST_IOS_PATH","Config","getSDKVersion","config","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","expoUpdatesPackageVersion","checkAutomatically","semver","gte","withUpdates","expoUsername","modRequest","projectRoot","modResults","setUpdatesConfig","expoPlist","username","newExpoPlist","ENABLED","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","SDK_VERSION","RUNTIME_VERSION","formatConfigurationScriptPath","buildScriptPath","resolveFrom","silent","Error","relativePath","path","relative","join","process","platform","replace","getBundleReactNativePhase","project","shellScriptBuildPhase","hash","objects","PBXShellScriptBuildPhase","bundleReactNative","Object","values","find","buildPhase","name","ensureBundleReactNativePhaseContainsConfigurationScript","buildPhaseShellScriptPath","isShellScriptBuildPhaseConfigured","shellScript","includes","RegExp","isPlistConfigurationSet","Boolean","EXUpdatesURL","EXUpdatesSDKVersion","EXUpdatesRuntimeVersion","isPlistConfigurationSynced","EXUpdatesEnabled","EXUpdatesLaunchWaitMs","EXUpdatesCheckOnLaunch","isPlistVersionConfigurationSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\nimport xcode from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withExpoPlist } from '../plugins/ios-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport { ExpoPlist } from './IosConfig.types';\n\nconst CREATE_MANIFEST_IOS_PATH = 'expo-updates/scripts/create-manifest-ios.sh';\n\nexport enum Config {\n ENABLED = 'EXUpdatesEnabled',\n CHECK_ON_LAUNCH = 'EXUpdatesCheckOnLaunch',\n LAUNCH_WAIT_MS = 'EXUpdatesLaunchWaitMs',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n SDK_VERSION = 'EXUpdatesSDKVersion',\n UPDATE_URL = 'EXUpdatesURL',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n}\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>) {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withExpoPlist(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): ExpoPlist {\n const newExpoPlist = {\n ...expoPlist,\n [Config.ENABLED]: getUpdatesEnabled(config),\n [Config.CHECK_ON_LAUNCH]: getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion),\n [Config.LAUNCH_WAIT_MS]: getUpdatesTimeout(config),\n };\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n newExpoPlist[Config.UPDATE_URL] = updateUrl;\n } else {\n delete newExpoPlist[Config.UPDATE_URL];\n }\n\n return setVersionsConfig(config, newExpoPlist);\n}\n\nexport function setVersionsConfig(config: ExpoConfigUpdates, expoPlist: ExpoPlist): ExpoPlist {\n const newExpoPlist = { ...expoPlist };\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'ios');\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n delete newExpoPlist[Config.SDK_VERSION];\n newExpoPlist[Config.RUNTIME_VERSION] = runtimeVersion;\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n delete newExpoPlist[Config.RUNTIME_VERSION];\n newExpoPlist[Config.SDK_VERSION] = sdkVersion;\n } else {\n delete newExpoPlist[Config.SDK_VERSION];\n delete newExpoPlist[Config.RUNTIME_VERSION];\n }\n\n return newExpoPlist;\n}\n\nfunction formatConfigurationScriptPath(projectRoot: string): string {\n const buildScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_IOS_PATH);\n\n if (!buildScriptPath) {\n throw new Error(\n \"Could not find the build script for iOS. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(path.join(projectRoot, 'ios'), buildScriptPath);\n return process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n}\n\ninterface ShellScriptBuildPhase {\n isa: 'PBXShellScriptBuildPhase';\n name: string;\n shellScript: string;\n [key: string]: any;\n}\n\nexport function getBundleReactNativePhase(project: xcode.XcodeProject): ShellScriptBuildPhase {\n const shellScriptBuildPhase = project.hash.project.objects.PBXShellScriptBuildPhase as Record<\n string,\n ShellScriptBuildPhase\n >;\n const bundleReactNative = Object.values(shellScriptBuildPhase).find(\n buildPhase => buildPhase.name === '\"Bundle React Native code and images\"'\n );\n\n if (!bundleReactNative) {\n throw new Error(`Couldn't find a build phase \"Bundle React Native code and images\"`);\n }\n\n return bundleReactNative;\n}\n\nexport function ensureBundleReactNativePhaseContainsConfigurationScript(\n projectRoot: string,\n project: xcode.XcodeProject\n): xcode.XcodeProject {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n\n if (!isShellScriptBuildPhaseConfigured(projectRoot, project)) {\n // check if there's already another path to create-manifest-ios.sh\n // this might be the case for monorepos\n if (bundleReactNative.shellScript.includes(CREATE_MANIFEST_IOS_PATH)) {\n bundleReactNative.shellScript = bundleReactNative.shellScript.replace(\n new RegExp(`(\\\\\\\\n)(\\\\.\\\\.)+/node_modules/${CREATE_MANIFEST_IOS_PATH}`),\n ''\n );\n }\n bundleReactNative.shellScript = `${bundleReactNative.shellScript.replace(\n /\"$/,\n ''\n )}${buildPhaseShellScriptPath}\\\\n\"`;\n }\n return project;\n}\n\nexport function isShellScriptBuildPhaseConfigured(\n projectRoot: string,\n project: xcode.XcodeProject\n): boolean {\n const bundleReactNative = getBundleReactNativePhase(project);\n const buildPhaseShellScriptPath = formatConfigurationScriptPath(projectRoot);\n return bundleReactNative.shellScript.includes(buildPhaseShellScriptPath);\n}\n\nexport function isPlistConfigurationSet(expoPlist: ExpoPlist): boolean {\n return Boolean(\n expoPlist.EXUpdatesURL && (expoPlist.EXUpdatesSDKVersion || expoPlist.EXUpdatesRuntimeVersion)\n );\n}\n\nexport function isPlistConfigurationSynced(\n config: ExpoConfigUpdates,\n expoPlist: ExpoPlist,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) === expoPlist.EXUpdatesURL &&\n getUpdatesEnabled(config) === expoPlist.EXUpdatesEnabled &&\n getUpdatesTimeout(config) === expoPlist.EXUpdatesLaunchWaitMs &&\n getUpdatesCheckOnLaunch(config) === expoPlist.EXUpdatesCheckOnLaunch &&\n isPlistVersionConfigurationSynced(config, expoPlist)\n );\n}\n\nexport function isPlistVersionConfigurationSynced(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n expoPlist: ExpoPlist\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'ios');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = expoPlist.EXUpdatesRuntimeVersion ?? null;\n const currentSdkVersion = expoPlist.EXUpdatesSDKVersion ?? null;\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getVersion = getVersion;
7
- exports.setVersion = setVersion;
8
6
  exports.getBuildNumber = getBuildNumber;
7
+ exports.getVersion = getVersion;
9
8
  exports.setBuildNumber = setBuildNumber;
10
- exports.withBuildNumber = exports.withVersion = void 0;
9
+ exports.setVersion = setVersion;
10
+ exports.withVersion = exports.withBuildNumber = void 0;
11
11
 
12
12
  function _iosPlugins() {
13
13
  const data = require("../plugins/ios-plugins");
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.addObjcImports = addObjcImports;
7
- exports.findObjcInterfaceCodeBlock = findObjcInterfaceCodeBlock;
8
7
  exports.findObjcFunctionCodeBlock = findObjcFunctionCodeBlock;
8
+ exports.findObjcInterfaceCodeBlock = findObjcInterfaceCodeBlock;
9
+ exports.findSwiftFunctionCodeBlock = findSwiftFunctionCodeBlock;
9
10
  exports.insertContentsInsideObjcFunctionBlock = insertContentsInsideObjcFunctionBlock;
10
11
  exports.insertContentsInsideObjcInterfaceBlock = insertContentsInsideObjcInterfaceBlock;
11
- exports.findSwiftFunctionCodeBlock = findSwiftFunctionCodeBlock;
12
12
  exports.insertContentsInsideSwiftClassBlock = insertContentsInsideSwiftClassBlock;
13
13
  exports.insertContentsInsideSwiftFunctionBlock = insertContentsInsideSwiftFunctionBlock;
14
14
 
@@ -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.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 = 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"));
@@ -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","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"}
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() {
@@ -0,0 +1 @@
1
+ export declare function trimQuotes(s: string): string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.trimQuotes = trimQuotes;
7
+
8
+ function trimQuotes(s) {
9
+ return s && s[0] === '"' && s[s.length - 1] === '"' ? s.slice(1, -1) : s;
10
+ }
11
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ios/utils/string.ts"],"names":["trimQuotes","s","length","slice"],"mappings":";;;;;;;AAAO,SAASA,UAAT,CAAoBC,CAApB,EAAuC;AAC5C,SAAOA,CAAC,IAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAd,IAAqBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAzC,GAA+CD,CAAC,CAACE,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAA/C,GAAgEF,CAAvE;AACD","sourcesContent":["export function trimQuotes(s: string): string {\n return s && s[0] === '\"' && s[s.length - 1] === '\"' ? s.slice(1, -1) : s;\n}\n"],"file":"string.js"}
@@ -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":";;;;;;;;;;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;;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;;;;;;;;AAEA,MAAMA,KAAK,GAAG,sBAAM,kCAAN,CAAd;;AAEO,SAASC,mBAAT,CACLC,MADK,EAELC,KAA8B,GAAG,EAF5B,EAGW;AAChBD,EAAAA,MAAM,GAAG,wCAAgBA,MAAhB,EAAwBC,KAAxB,CAAT;AACAD,EAAAA,MAAM,GAAG,gDAAoBA,MAApB,EAA4BC,KAA5B,CAAT;AACA,SAAOD,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AACO,SAASE,yBAAT,CACLF,MADK,EAELC,KAA8B,GAAG,EAF5B,EAGW;AAChBD,EAAAA,MAAM,GAAG,wCAAgBA,MAAhB,EAAwB;AAC/BG,IAAAA,cAAc,EAAE,IADe;AAE/B;AACA;AACAC,IAAAA,YAAY,EAAE,KAJiB;AAK/B,OAAGH;AAL4B,GAAxB,CAAT;AAOAD,EAAAA,MAAM,GAAG,gDAAoBA,MAApB,EAA4B;AACnCG,IAAAA,cAAc,EAAE,IADmB;AAEnCC,IAAAA,YAAY,EAAE,KAFqB;AAGnC,OAAGH;AAHgC,GAA5B,CAAT;;AAMA,MAAID,MAAM,CAACK,IAAX,EAAiB;AACf;AACA,SAAK,MAAMC,QAAX,IAAuBC,MAAM,CAACC,IAAP,CAAYR,MAAM,CAACK,IAAnB,CAAvB,EAAkE;AAChE;AACA,WAAK,MAAMI,GAAX,IAAkBF,MAAM,CAACC,IAAP,CAAYR,MAAM,CAACK,IAAP,CAAYC,QAAZ,KAAyB,EAArC,CAAlB,EAA4D;AAAA;;AAC1D;AACA,YAAI,2BAACN,MAAM,CAACK,IAAP,CAAYC,QAAZ,CAAD,4EAAC,sBAAwBG,GAAxB,CAAD,mDAAC,uBAA8BC,eAA/B,CAAJ,EAAoD;AAAA;;AAClDZ,UAAAA,KAAK,CAAE,gCAA+BQ,QAAS,IAAGG,GAAI,EAAjD,CAAL,CADkD,CAElD;;AACA,oCAAOT,MAAM,CAACK,IAAP,CAAYC,QAAZ,CAAP,gEAAO,uBAAwBG,GAAxB,CAAP;AACD;AACF;AACF;AACF;;AAED,SAAOT,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AACO,eAAeW,gBAAf,CACLX,MADK,EAELC,KAFK,EAQoB;AACzB,MAAIA,KAAK,CAACW,UAAN,KAAqB,IAAzB,EAA+B;AAC7BZ,IAAAA,MAAM,GAAGE,yBAAyB,CAACF,MAAD,CAAlC;AACD,GAFD,MAEO;AACLA,IAAAA,MAAM,GAAGD,mBAAmB,CAACC,MAAD,CAA5B;AACD;;AACD,SAAO,MAAMa,aAAa,CAACb,MAAD,EAASC,KAAT,CAA1B;AACD;;AAED,SAASa,QAAT,CAAkBC,QAAlB,EAA6CC,KAA7C,EAA+E;AAC7E,QAAMC,OAAO,GAAGF,QAAQ,CAACG,GAAT,CAAa,CAAC,CAACT,GAAD,CAAD,KAAWA,GAAxB,CAAhB;AACA,QAAMU,aAAa,GAAG,CAAC,GAAG,IAAIC,GAAJ,CAAQ,CAAC,GAAGJ,KAAJ,EAAW,GAAGC,OAAd,CAAR,CAAJ,CAAtB;AACA,QAAMI,MAAuB,GAAG,EAAhC;;AACA,SAAOF,aAAa,CAACG,MAArB,EAA6B;AAC3B,UAAMC,KAAK,GAAGJ,aAAa,CAACK,KAAd,EAAd;AACA,UAAMC,UAAU,GAAGV,QAAQ,CAACW,IAAT,CAAc,CAAC,CAACjB,GAAD,CAAD,KAAWA,GAAG,KAAKc,KAAjC,CAAnB;;AACA,QAAIE,UAAJ,EAAgB;AACdJ,MAAAA,MAAM,CAACM,IAAP,CAAYF,UAAZ;AACD;AACF;;AACD,SAAOJ,MAAP;AACD;;AAED,MAAMO,MAAgC,GAAG;AACvCC,EAAAA,GAAG,EAAE,CACH;AACA,aAFG,EAGH;AACA,aAJG,CADkC;AAOvCC,EAAAA,OAAO,EAAE,CAAC,WAAD;AAP8B,CAAzC;AASA;AACA;AACA;AACA;AACA;;AACO,eAAejB,aAAf,CACLb,MADK,EAEL;AACE+B,EAAAA,WADF;AAEEnB,EAAAA,UAFF;AAGEoB,EAAAA,SAHF;;AAIE;AACJ;AACA;AACA;AACIC,EAAAA;AARF,CAFK,EAiBoB;AACzB,OAAK,MAAM,CAACC,YAAD,EAAe5B,QAAf,CAAX,IAAuCC,MAAM,CAAC4B,OAAP,iBAAenC,MAAM,CAACK,IAAtB,uDAA+B,EAA/B,CAAvC,EAAyF;AAAA;;AACvF,QAAI2B,SAAS,IAAI,CAACA,SAAS,CAACI,QAAV,CAAmBF,YAAnB,CAAlB,EAA2D;AACzDpC,MAAAA,KAAK,CAAE,kBAAiBoC,YAAa,EAAhC,CAAL;AACA;AACD;;AAED,QAAIC,OAAO,GAAG5B,MAAM,CAAC4B,OAAP,CAAe7B,QAAf,CAAd;;AACA,QAAI6B,OAAO,CAACb,MAAZ,EAAoB;AAClB;AACAa,MAAAA,OAAO,GAAGrB,QAAQ,CAACqB,OAAD,EAAUP,MAAM,CAACM,YAAD,CAAhB,CAAlB;AACApC,MAAAA,KAAK,CAAE,iBAAgBqC,OAAO,CAACjB,GAAR,CAAY,CAAC,CAACmB,IAAD,CAAD,KAAYA,IAAxB,EAA8BC,IAA9B,CAAmC,IAAnC,CAAyC,EAA3D,CAAL;;AACA,YAAMC,mBAAmB,GAAGC,gBAAKF,IAAL,CAAUP,WAAV,EAAuBG,YAAvB,CAA5B;;AACA,YAAMO,WAAW,GACfP,YAAY,KAAK,KAAjB,GAAyB,sCAAoBH,WAApB,EAAiC/B,MAAjC,CAAzB,GAAoE0C,SADtE;;AAGA,WAAK,MAAM,CAACC,OAAD,EAAUC,GAAV,CAAX,IAA6BT,OAA7B,EAAsC;AACpC,cAAMU,UAAU,GAAG;AACjBd,UAAAA,WADiB;AAEjBU,UAAAA,WAFiB;AAGjBF,UAAAA,mBAHiB;AAIjBjC,UAAAA,QAAQ,EAAE4B,YAJO;AAKjBS,UAAAA,OALiB;AAMjB/B,UAAAA,UAAU,EAAE,CAAC,CAACA;AANG,SAAnB;;AASA,YAAI,CAAEgC,GAAD,CAAaE,UAAlB,EAA8B;AAC5B;AACA,gBAAMC,YAAY,GAAI,8BAA6Bb,YAAa,IAAGS,OAAQ,6EAA3E;;AACA,cAAIV,yBAAyB,KAAK,KAAlC,EAAyC;AACvC,kBAAM,KAAIe,qBAAJ,EAAgBD,YAAhB,EAA8B,kBAA9B,CAAN;AACD,WAFD,MAEO;AACLE,YAAAA,QAAQ,GAACC,qBAAT,CACEhB,YADF,EAEG,GAAEA,YAAa,IAAGS,OAAQ,EAF7B,EAGG,wCAAuCT,YAAa,IAAGS,OAAQ,kIAHlE,EADK,CAML;;AACA;AACD;AACF;;AAED,cAAMQ,OAAO,GAAG,MAAOP,GAAD,CAAa,EACjC,GAAG5C,MAD8B;AAEjCoD,UAAAA,UAAU,EAAE,IAFqB;AAGjCP,UAAAA;AAHiC,SAAb,CAAtB,CA1BoC,CAgCpC;;AACA7C,QAAAA,MAAM,GAAG,uCAAiBmD,OAAjB,EAA0BjB,YAA1B,EAAwCS,OAAxC,CAAT,CAjCoC,CAkCpC;;AACA,eAAO3C,MAAM,CAACoD,UAAd,CAnCoC,CAoCpC;;AACA,eAAOpD,MAAM,CAAC6C,UAAd;AACD;AACF;AACF;;AAED,SAAO7C,MAAP;AACD","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"));