@expo/config-plugins 7.7.0 → 7.8.1

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 (68) hide show
  1. package/build/android/BuildProperties.js.map +1 -1
  2. package/build/android/Colors.js.map +1 -1
  3. package/build/android/EasBuild.js.map +1 -1
  4. package/build/android/GoogleMapsApiKey.js.map +1 -1
  5. package/build/android/GoogleServices.js.map +1 -1
  6. package/build/android/IntentFilters.js.map +1 -1
  7. package/build/android/Manifest.js.map +1 -1
  8. package/build/android/Name.js.map +1 -1
  9. package/build/android/Orientation.js.map +1 -1
  10. package/build/android/Package.js.map +1 -1
  11. package/build/android/Paths.js.map +1 -1
  12. package/build/android/Permissions.js.map +1 -1
  13. package/build/android/PrimaryColor.js.map +1 -1
  14. package/build/android/Properties.js.map +1 -1
  15. package/build/android/Resources.js.map +1 -1
  16. package/build/android/Scheme.js.map +1 -1
  17. package/build/android/StatusBar.js.map +1 -1
  18. package/build/android/Strings.js.map +1 -1
  19. package/build/android/Updates.d.ts +1 -0
  20. package/build/android/Updates.js +4 -0
  21. package/build/android/Updates.js.map +1 -1
  22. package/build/android/Version.js.map +1 -1
  23. package/build/ios/Bitcode.js.map +1 -1
  24. package/build/ios/BuildProperties.js.map +1 -1
  25. package/build/ios/BuildScheme.js.map +1 -1
  26. package/build/ios/BundleIdentifier.js +21 -17
  27. package/build/ios/BundleIdentifier.js.map +1 -1
  28. package/build/ios/DeviceFamily.js.map +1 -1
  29. package/build/ios/Entitlements.js.map +1 -1
  30. package/build/ios/Google.js.map +1 -1
  31. package/build/ios/Locales.js.map +1 -1
  32. package/build/ios/Maps.js +0 -1
  33. package/build/ios/Maps.js.map +1 -1
  34. package/build/ios/Name.js.map +1 -1
  35. package/build/ios/Orientation.js.map +1 -1
  36. package/build/ios/Paths.js.map +1 -1
  37. package/build/ios/ProvisioningProfile.js.map +1 -1
  38. package/build/ios/RequiresFullScreen.js.map +1 -1
  39. package/build/ios/Scheme.js.map +1 -1
  40. package/build/ios/Swift.js.map +1 -1
  41. package/build/ios/Target.js.map +1 -1
  42. package/build/ios/Updates.js.map +1 -1
  43. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  44. package/build/ios/Version.js.map +1 -1
  45. package/build/ios/codeMod.js.map +1 -1
  46. package/build/ios/utils/Xcodeproj.d.ts +7 -0
  47. package/build/ios/utils/Xcodeproj.js +89 -0
  48. package/build/ios/utils/Xcodeproj.js.map +1 -1
  49. package/build/plugins/createBaseMod.js.map +1 -1
  50. package/build/plugins/ios-plugins.js.map +1 -1
  51. package/build/plugins/mod-compiler.js.map +1 -1
  52. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  53. package/build/plugins/withIosBaseMods.js.map +1 -1
  54. package/build/plugins/withMod.js.map +1 -1
  55. package/build/plugins/withPlugins.js.map +1 -1
  56. package/build/plugins/withStaticPlugin.js.map +1 -1
  57. package/build/utils/Updates.js.map +1 -1
  58. package/build/utils/XML.js.map +1 -1
  59. package/build/utils/errors.js +3 -6
  60. package/build/utils/errors.js.map +1 -1
  61. package/build/utils/generateCode.js +2 -2
  62. package/build/utils/generateCode.js.map +1 -1
  63. package/build/utils/matchBrackets.js.map +1 -1
  64. package/build/utils/modules.js.map +1 -1
  65. package/build/utils/obj.js.map +1 -1
  66. package/build/utils/plugin-resolver.js.map +1 -1
  67. package/build/utils/sortObject.js.map +1 -1
  68. package/package.json +13 -11
@@ -1 +1 @@
1
- {"version":3,"file":"BuildScheme.js","names":["_Paths","data","require","_Target","_Xcodeproj","_XML","getSchemesFromXcodeproj","projectRoot","findSchemeNames","getRunnableSchemesFromXcodeproj","configuration","project","getPbxproj","findSignableTargets","map","target","osType","type","unquote","productType","TargetType","WATCH","startsWith","APPLICATION","xcConfigurationList","hash","objects","XCConfigurationList","buildConfigurationList","buildConfiguration","buildConfigurations","find","value","comment","_project$hash$project","xcBuildConfiguration","XCBuildConfiguration","buildSdkRoot","buildSettings","SDKROOT","name","readSchemeAsync","scheme","allSchemePaths","findSchemePaths","re","RegExp","schemePath","i","exec","readXMLAsync","path","Error","getApplicationTargetNameForSchemeAsync","_schemeXML$Scheme","_schemeXML$Scheme$Bui","_schemeXML$Scheme$Bui2","_schemeXML$Scheme$Bui3","_schemeXML$Scheme$Bui4","schemeXML","buildActionEntry","Scheme","BuildAction","BuildActionEntries","BuildActionEntry","targetName","length","getBlueprintName","entry","_entry$BuildableRefer","_entry$BuildableRefer2","_entry$BuildableRefer3","_entry$BuildableRefer4","BuildableReference","BuildableName","endsWith","getArchiveBuildConfigurationForSchemeAsync","_schemeXML$Scheme2","_schemeXML$Scheme2$Ar","_schemeXML$Scheme2$Ar2","_schemeXML$Scheme2$Ar3","ArchiveAction","_entry$BuildableRefer5","_entry$BuildableRefer6","_entry$BuildableRefer7","BlueprintName"],"sources":["../../src/ios/BuildScheme.ts"],"sourcesContent":["import { findSchemeNames, findSchemePaths } from './Paths';\nimport { findSignableTargets, TargetType } from './Target';\nimport { getPbxproj, unquote } from './utils/Xcodeproj';\nimport { readXMLAsync } from '../utils/XML';\n\ninterface SchemeXML {\n Scheme?: {\n BuildAction?: {\n BuildActionEntries?: {\n BuildActionEntry?: BuildActionEntryType[];\n }[];\n }[];\n ArchiveAction?: {\n $?: {\n buildConfiguration?: string;\n };\n }[];\n };\n}\n\ninterface BuildActionEntryType {\n BuildableReference?: {\n $?: {\n BlueprintName?: string;\n BuildableName?: string;\n };\n }[];\n}\n\nexport function getSchemesFromXcodeproj(projectRoot: string): string[] {\n return findSchemeNames(projectRoot);\n}\n\nexport function getRunnableSchemesFromXcodeproj(\n projectRoot: string,\n { configuration = 'Debug' }: { configuration?: 'Debug' | 'Release' } = {}\n): { name: string; osType: string; type: string }[] {\n const project = getPbxproj(projectRoot);\n\n return findSignableTargets(project).map(([, target]) => {\n let osType = 'iOS';\n const type = unquote(target.productType);\n\n if (type === TargetType.WATCH) {\n osType = 'watchOS';\n } else if (\n // (apps) com.apple.product-type.application\n // (app clips) com.apple.product-type.application.on-demand-install-capable\n // NOTE(EvanBacon): This matches against `watchOS` as well so we check for watch first.\n type.startsWith(TargetType.APPLICATION)\n ) {\n // Attempt to resolve the platform SDK for each target so we can filter devices.\n const xcConfigurationList =\n project.hash.project.objects.XCConfigurationList[target.buildConfigurationList];\n\n if (xcConfigurationList) {\n const buildConfiguration =\n xcConfigurationList.buildConfigurations.find(\n (value: { comment: string; value: string }) => value.comment === configuration\n ) || xcConfigurationList.buildConfigurations[0];\n if (buildConfiguration?.value) {\n const xcBuildConfiguration =\n project.hash.project.objects.XCBuildConfiguration?.[buildConfiguration.value];\n\n const buildSdkRoot = xcBuildConfiguration.buildSettings.SDKROOT;\n if (\n buildSdkRoot === 'appletvos' ||\n 'TVOS_DEPLOYMENT_TARGET' in xcBuildConfiguration.buildSettings\n ) {\n // Is a TV app...\n osType = 'tvOS';\n } else if (buildSdkRoot === 'iphoneos') {\n osType = 'iOS';\n }\n }\n }\n }\n\n return {\n name: unquote(target.name),\n osType,\n type: unquote(target.productType),\n };\n });\n}\n\nasync function readSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<SchemeXML | undefined> {\n const allSchemePaths = findSchemePaths(projectRoot);\n const re = new RegExp(`/${scheme}.xcscheme`, 'i');\n const schemePath = allSchemePaths.find((i) => re.exec(i));\n if (schemePath) {\n return (await readXMLAsync({ path: schemePath })) as unknown as SchemeXML | undefined;\n } else {\n throw new Error(`scheme '${scheme}' does not exist, make sure it's marked as shared`);\n }\n}\n\nexport async function getApplicationTargetNameForSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<string> {\n const schemeXML = await readSchemeAsync(projectRoot, scheme);\n const buildActionEntry =\n schemeXML?.Scheme?.BuildAction?.[0]?.BuildActionEntries?.[0]?.BuildActionEntry;\n const targetName =\n buildActionEntry?.length === 1\n ? getBlueprintName(buildActionEntry[0])\n : getBlueprintName(\n buildActionEntry?.find((entry) => {\n return entry.BuildableReference?.[0]?.['$']?.BuildableName?.endsWith('.app');\n })\n );\n if (!targetName) {\n throw new Error(`${scheme}.xcscheme seems to be corrupted`);\n }\n return targetName;\n}\n\nexport async function getArchiveBuildConfigurationForSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<string> {\n const schemeXML = await readSchemeAsync(projectRoot, scheme);\n const buildConfiguration = schemeXML?.Scheme?.ArchiveAction?.[0]?.['$']?.buildConfiguration;\n if (!buildConfiguration) {\n throw new Error(`${scheme}.xcscheme seems to be corrupted`);\n }\n return buildConfiguration;\n}\n\nfunction getBlueprintName(entry?: BuildActionEntryType): string | undefined {\n return entry?.BuildableReference?.[0]?.['$']?.BlueprintName;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BuildScheme.js","names":["_Paths","data","require","_Target","_Xcodeproj","_XML","getSchemesFromXcodeproj","projectRoot","findSchemeNames","getRunnableSchemesFromXcodeproj","configuration","project","getPbxproj","findSignableTargets","map","target","osType","type","unquote","productType","TargetType","WATCH","startsWith","APPLICATION","xcConfigurationList","hash","objects","XCConfigurationList","buildConfigurationList","buildConfiguration","buildConfigurations","find","value","comment","_project$hash$project","xcBuildConfiguration","XCBuildConfiguration","buildSdkRoot","buildSettings","SDKROOT","name","readSchemeAsync","scheme","allSchemePaths","findSchemePaths","re","RegExp","schemePath","i","exec","readXMLAsync","path","Error","getApplicationTargetNameForSchemeAsync","_schemeXML$Scheme","_schemeXML$Scheme$Bui","_schemeXML$Scheme$Bui2","_schemeXML$Scheme$Bui3","_schemeXML$Scheme$Bui4","schemeXML","buildActionEntry","Scheme","BuildAction","BuildActionEntries","BuildActionEntry","targetName","length","getBlueprintName","entry","_entry$BuildableRefer","_entry$BuildableRefer2","_entry$BuildableRefer3","_entry$BuildableRefer4","BuildableReference","BuildableName","endsWith","getArchiveBuildConfigurationForSchemeAsync","_schemeXML$Scheme2","_schemeXML$Scheme2$Ar","_schemeXML$Scheme2$Ar2","_schemeXML$Scheme2$Ar3","ArchiveAction","_entry$BuildableRefer5","_entry$BuildableRefer6","_entry$BuildableRefer7","BlueprintName"],"sources":["../../src/ios/BuildScheme.ts"],"sourcesContent":["import { findSchemeNames, findSchemePaths } from './Paths';\nimport { findSignableTargets, TargetType } from './Target';\nimport { getPbxproj, unquote } from './utils/Xcodeproj';\nimport { readXMLAsync } from '../utils/XML';\n\ninterface SchemeXML {\n Scheme?: {\n BuildAction?: {\n BuildActionEntries?: {\n BuildActionEntry?: BuildActionEntryType[];\n }[];\n }[];\n ArchiveAction?: {\n $?: {\n buildConfiguration?: string;\n };\n }[];\n };\n}\n\ninterface BuildActionEntryType {\n BuildableReference?: {\n $?: {\n BlueprintName?: string;\n BuildableName?: string;\n };\n }[];\n}\n\nexport function getSchemesFromXcodeproj(projectRoot: string): string[] {\n return findSchemeNames(projectRoot);\n}\n\nexport function getRunnableSchemesFromXcodeproj(\n projectRoot: string,\n { configuration = 'Debug' }: { configuration?: 'Debug' | 'Release' } = {}\n): { name: string; osType: string; type: string }[] {\n const project = getPbxproj(projectRoot);\n\n return findSignableTargets(project).map(([, target]) => {\n let osType = 'iOS';\n const type = unquote(target.productType);\n\n if (type === TargetType.WATCH) {\n osType = 'watchOS';\n } else if (\n // (apps) com.apple.product-type.application\n // (app clips) com.apple.product-type.application.on-demand-install-capable\n // NOTE(EvanBacon): This matches against `watchOS` as well so we check for watch first.\n type.startsWith(TargetType.APPLICATION)\n ) {\n // Attempt to resolve the platform SDK for each target so we can filter devices.\n const xcConfigurationList =\n project.hash.project.objects.XCConfigurationList[target.buildConfigurationList];\n\n if (xcConfigurationList) {\n const buildConfiguration =\n xcConfigurationList.buildConfigurations.find(\n (value: { comment: string; value: string }) => value.comment === configuration\n ) || xcConfigurationList.buildConfigurations[0];\n if (buildConfiguration?.value) {\n const xcBuildConfiguration =\n project.hash.project.objects.XCBuildConfiguration?.[buildConfiguration.value];\n\n const buildSdkRoot = xcBuildConfiguration.buildSettings.SDKROOT;\n if (\n buildSdkRoot === 'appletvos' ||\n 'TVOS_DEPLOYMENT_TARGET' in xcBuildConfiguration.buildSettings\n ) {\n // Is a TV app...\n osType = 'tvOS';\n } else if (buildSdkRoot === 'iphoneos') {\n osType = 'iOS';\n }\n }\n }\n }\n\n return {\n name: unquote(target.name),\n osType,\n type: unquote(target.productType),\n };\n });\n}\n\nasync function readSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<SchemeXML | undefined> {\n const allSchemePaths = findSchemePaths(projectRoot);\n const re = new RegExp(`/${scheme}.xcscheme`, 'i');\n const schemePath = allSchemePaths.find((i) => re.exec(i));\n if (schemePath) {\n return (await readXMLAsync({ path: schemePath })) as unknown as SchemeXML | undefined;\n } else {\n throw new Error(`scheme '${scheme}' does not exist, make sure it's marked as shared`);\n }\n}\n\nexport async function getApplicationTargetNameForSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<string> {\n const schemeXML = await readSchemeAsync(projectRoot, scheme);\n const buildActionEntry =\n schemeXML?.Scheme?.BuildAction?.[0]?.BuildActionEntries?.[0]?.BuildActionEntry;\n const targetName =\n buildActionEntry?.length === 1\n ? getBlueprintName(buildActionEntry[0])\n : getBlueprintName(\n buildActionEntry?.find((entry) => {\n return entry.BuildableReference?.[0]?.['$']?.BuildableName?.endsWith('.app');\n })\n );\n if (!targetName) {\n throw new Error(`${scheme}.xcscheme seems to be corrupted`);\n }\n return targetName;\n}\n\nexport async function getArchiveBuildConfigurationForSchemeAsync(\n projectRoot: string,\n scheme: string\n): Promise<string> {\n const schemeXML = await readSchemeAsync(projectRoot, scheme);\n const buildConfiguration = schemeXML?.Scheme?.ArchiveAction?.[0]?.['$']?.buildConfiguration;\n if (!buildConfiguration) {\n throw new Error(`${scheme}.xcscheme seems to be corrupted`);\n }\n return buildConfiguration;\n}\n\nfunction getBlueprintName(entry?: BuildActionEntryType): string | undefined {\n return entry?.BuildableReference?.[0]?.['$']?.BlueprintName;\n}\n"],"mappings":"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"}
@@ -67,9 +67,9 @@ function _string() {
67
67
  };
68
68
  return data;
69
69
  }
70
- function _withDangerousMod() {
71
- const data = require("../plugins/withDangerousMod");
72
- _withDangerousMod = function () {
70
+ function _iosPlugins() {
71
+ const data = require("../plugins/ios-plugins");
72
+ _iosPlugins = function () {
73
73
  return data;
74
74
  };
75
75
  return data;
@@ -78,13 +78,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
78
78
  const withBundleIdentifier = (config, {
79
79
  bundleIdentifier
80
80
  }) => {
81
- return (0, _withDangerousMod().withDangerousMod)(config, ['ios', async config => {
81
+ return (0, _iosPlugins().withXcodeProject)(config, async config => {
82
82
  var _config$ios;
83
83
  const bundleId = bundleIdentifier !== null && bundleIdentifier !== void 0 ? bundleIdentifier : (_config$ios = config.ios) === null || _config$ios === void 0 ? void 0 : _config$ios.bundleIdentifier;
84
- (0, _assert().default)(bundleId, '`bundleIdentifier` must be defined in the app config (`expo.ios.bundleIdentifier`) or passed to the plugin `withBundleIdentifier`.');
85
- await setBundleIdentifierForPbxproj(config.modRequest.projectRoot, bundleId);
84
+ // Should never happen.
85
+ (0, _assert().default)(bundleId, '`bundleIdentifier` must be defined in the app config (`ios.bundleIdentifier`) or passed to the plugin `withBundleIdentifier`.');
86
+ config.modResults = updateBundleIdentifierForPbxprojObject(config.modResults, bundleId, false);
86
87
  return config;
87
- }]);
88
+ });
88
89
  };
89
90
  exports.withBundleIdentifier = withBundleIdentifier;
90
91
  function getBundleIdentifier(config) {
@@ -147,15 +148,7 @@ function getProductBundleIdentifierFromBuildConfiguration(xcBuildConfiguration)
147
148
  const bundleIdentifierRaw = xcBuildConfiguration.buildSettings.PRODUCT_BUNDLE_IDENTIFIER;
148
149
  if (bundleIdentifierRaw) {
149
150
  const bundleIdentifier = (0, _string().trimQuotes)(bundleIdentifierRaw);
150
- // it's possible to use interpolation for the bundle identifier
151
- // the most common case is when the last part of the id is set to `$(PRODUCT_NAME:rfc1034identifier)`
152
- // in this case, PRODUCT_NAME should be replaced with its value
153
- // the `rfc1034identifier` modifier replaces all non-alphanumeric characters with dashes
154
- const bundleIdentifierParts = bundleIdentifier.split('.');
155
- if (bundleIdentifierParts[bundleIdentifierParts.length - 1] === '$(PRODUCT_NAME:rfc1034identifier)' && xcBuildConfiguration.buildSettings.PRODUCT_NAME) {
156
- bundleIdentifierParts[bundleIdentifierParts.length - 1] = xcBuildConfiguration.buildSettings.PRODUCT_NAME.replace(/[^a-zA-Z0-9]/g, '-');
157
- }
158
- return bundleIdentifierParts.join('.');
151
+ return (0, _Xcodeproj().resolveXcodeBuildSetting)(bundleIdentifier, setting => xcBuildConfiguration.buildSettings[setting]);
159
152
  } else {
160
153
  return null;
161
154
  }
@@ -171,6 +164,17 @@ function getProductBundleIdentifierFromBuildConfiguration(xcBuildConfiguration)
171
164
  function updateBundleIdentifierForPbxproj(pbxprojPath, bundleIdentifier, updateProductName = true) {
172
165
  const project = _xcode().default.project(pbxprojPath);
173
166
  project.parseSync();
167
+ _fs().default.writeFileSync(pbxprojPath, updateBundleIdentifierForPbxprojObject(project, bundleIdentifier, updateProductName).writeSync());
168
+ }
169
+
170
+ /**
171
+ * Updates the bundle identifier for a given pbxproj
172
+ *
173
+ * @param {string} project pbxproj file
174
+ * @param {string} bundleIdentifier Bundle identifier to set in the pbxproj
175
+ * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME
176
+ */
177
+ function updateBundleIdentifierForPbxprojObject(project, bundleIdentifier, updateProductName = true) {
174
178
  const [, nativeTarget] = (0, _Target().findFirstNativeTarget)(project);
175
179
  (0, _Xcodeproj().getBuildConfigurationsForListId)(project, nativeTarget.buildConfigurationList).forEach(([, item]) => {
176
180
  if (item.buildSettings.PRODUCT_BUNDLE_IDENTIFIER === bundleIdentifier) {
@@ -184,7 +188,7 @@ function updateBundleIdentifierForPbxproj(pbxprojPath, bundleIdentifier, updateP
184
188
  }
185
189
  }
186
190
  });
187
- _fs().default.writeFileSync(pbxprojPath, project.writeSync());
191
+ return project;
188
192
  }
189
193
 
190
194
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BundleIdentifier.js","names":["_plist","data","_interopRequireDefault","require","_assert","_fs","_xcode","_Paths","_Target","_Xcodeproj","_string","_withDangerousMod","obj","__esModule","default","withBundleIdentifier","config","bundleIdentifier","withDangerousMod","_config$ios","bundleId","ios","assert","setBundleIdentifierForPbxproj","modRequest","projectRoot","exports","getBundleIdentifier","_config$ios$bundleIde","_config$ios2","setBundleIdentifier","infoPlist","CFBundleIdentifier","getBundleIdentifierFromPbxproj","targetName","buildConfiguration","pbxprojPath","getPBXProjectPath","project","xcode","parseSync","xcBuildConfiguration","getXCBuildConfigurationFromPbxproj","getProductBundleIdentifierFromBuildConfiguration","bundleIdentifierRaw","buildSettings","PRODUCT_BUNDLE_IDENTIFIER","trimQuotes","bundleIdentifierParts","split","length","PRODUCT_NAME","replace","join","updateBundleIdentifierForPbxproj","updateProductName","nativeTarget","findFirstNativeTarget","getBuildConfigurationsForListId","buildConfigurationList","forEach","item","productName","pop","includes","fs","writeFileSync","writeSync","pbxprojPaths","getAllPBXProjectPaths","defaultBundleId","resetAllPlistBundleIdentifiers","infoPlistPaths","getAllInfoPlistPaths","plistPath","resetPlistBundleIdentifier","rawPlist","readFileSync","plistObject","plist","parse","format","pretty","indent","xml","build"],"sources":["../../src/ios/BundleIdentifier.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport plist, { PlistObject } from '@expo/plist';\nimport assert from 'assert';\nimport fs from 'fs';\nimport xcode, { XCBuildConfiguration } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { getAllInfoPlistPaths, getAllPBXProjectPaths, getPBXProjectPath } from './Paths';\nimport { findFirstNativeTarget, getXCBuildConfigurationFromPbxproj } from './Target';\nimport { ConfigurationSectionEntry, getBuildConfigurationsForListId } from './utils/Xcodeproj';\nimport { trimQuotes } from './utils/string';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\n\nexport const withBundleIdentifier: ConfigPlugin<{ bundleIdentifier?: string }> = (\n config,\n { bundleIdentifier }\n) => {\n return withDangerousMod(config, [\n 'ios',\n async (config) => {\n const bundleId = bundleIdentifier ?? config.ios?.bundleIdentifier;\n assert(\n bundleId,\n '`bundleIdentifier` must be defined in the app config (`expo.ios.bundleIdentifier`) or passed to the plugin `withBundleIdentifier`.'\n );\n await setBundleIdentifierForPbxproj(config.modRequest.projectRoot, bundleId!);\n return config;\n },\n ]);\n};\n\nfunction getBundleIdentifier(config: Pick<ExpoConfig, 'ios'>): string | null {\n return config.ios?.bundleIdentifier ?? null;\n}\n\n/**\n * In Turtle v1 we set the bundleIdentifier directly on Info.plist rather\n * than in pbxproj\n */\nfunction setBundleIdentifier(config: ExpoConfig, infoPlist: InfoPlist): InfoPlist {\n const bundleIdentifier = getBundleIdentifier(config);\n\n if (!bundleIdentifier) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleIdentifier: bundleIdentifier,\n };\n}\n\n/**\n * Gets the bundle identifier defined in the Xcode project found in the project directory.\n *\n * A bundle identifier is stored as a value in XCBuildConfiguration entry.\n * Those entries exist for every pair (build target, build configuration).\n * Unless target name is passed, the first target defined in the pbxproj is used\n * (to keep compatibility with the inaccurate legacy implementation of this function).\n * The build configuration is usually 'Release' or 'Debug'. However, it could be any arbitrary string.\n * Defaults to 'Release'.\n *\n * @param {string} projectRoot Path to project root containing the ios directory\n * @param {string} targetName Target name\n * @param {string} buildConfiguration Build configuration. Defaults to 'Release'.\n * @returns {string | null} bundle identifier of the Xcode project or null if the project is not configured\n */\nfunction getBundleIdentifierFromPbxproj(\n projectRoot: string,\n {\n targetName,\n buildConfiguration = 'Release',\n }: { targetName?: string; buildConfiguration?: string } = {}\n): string | null {\n let pbxprojPath: string;\n try {\n pbxprojPath = getPBXProjectPath(projectRoot);\n } catch {\n return null;\n }\n const project = xcode.project(pbxprojPath);\n project.parseSync();\n\n const xcBuildConfiguration = getXCBuildConfigurationFromPbxproj(project, {\n targetName,\n buildConfiguration,\n });\n if (!xcBuildConfiguration) {\n return null;\n }\n return getProductBundleIdentifierFromBuildConfiguration(xcBuildConfiguration);\n}\n\nfunction getProductBundleIdentifierFromBuildConfiguration(\n xcBuildConfiguration: XCBuildConfiguration\n): string | null {\n const bundleIdentifierRaw = xcBuildConfiguration.buildSettings.PRODUCT_BUNDLE_IDENTIFIER;\n if (bundleIdentifierRaw) {\n const bundleIdentifier = trimQuotes(bundleIdentifierRaw);\n // it's possible to use interpolation for the bundle identifier\n // the most common case is when the last part of the id is set to `$(PRODUCT_NAME:rfc1034identifier)`\n // in this case, PRODUCT_NAME should be replaced with its value\n // the `rfc1034identifier` modifier replaces all non-alphanumeric characters with dashes\n const bundleIdentifierParts = bundleIdentifier.split('.');\n if (\n bundleIdentifierParts[bundleIdentifierParts.length - 1] ===\n '$(PRODUCT_NAME:rfc1034identifier)' &&\n xcBuildConfiguration.buildSettings.PRODUCT_NAME\n ) {\n bundleIdentifierParts[bundleIdentifierParts.length - 1] =\n xcBuildConfiguration.buildSettings.PRODUCT_NAME.replace(/[^a-zA-Z0-9]/g, '-');\n }\n return bundleIdentifierParts.join('.');\n } else {\n return null;\n }\n}\n\n/**\n * Updates the bundle identifier for a given pbxproj\n *\n * @param {string} pbxprojPath Path to pbxproj file\n * @param {string} bundleIdentifier Bundle identifier to set in the pbxproj\n * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME\n */\nfunction updateBundleIdentifierForPbxproj(\n pbxprojPath: string,\n bundleIdentifier: string,\n updateProductName: boolean = true\n): void {\n const project = xcode.project(pbxprojPath);\n project.parseSync();\n\n const [, nativeTarget] = findFirstNativeTarget(project);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList).forEach(\n ([, item]: ConfigurationSectionEntry) => {\n if (item.buildSettings.PRODUCT_BUNDLE_IDENTIFIER === bundleIdentifier) {\n return;\n }\n\n item.buildSettings.PRODUCT_BUNDLE_IDENTIFIER = `\"${bundleIdentifier}\"`;\n\n if (updateProductName) {\n const productName = bundleIdentifier.split('.').pop();\n if (!productName?.includes('$')) {\n item.buildSettings.PRODUCT_NAME = productName;\n }\n }\n }\n );\n fs.writeFileSync(pbxprojPath, project.writeSync());\n}\n\n/**\n * Updates the bundle identifier for pbx projects inside the ios directory of the given project root\n *\n * @param {string} projectRoot Path to project root containing the ios directory\n * @param {string} bundleIdentifier Desired bundle identifier\n * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME\n */\nfunction setBundleIdentifierForPbxproj(\n projectRoot: string,\n bundleIdentifier: string,\n updateProductName: boolean = true\n): void {\n // Get all pbx projects in the ${projectRoot}/ios directory\n let pbxprojPaths: string[] = [];\n try {\n pbxprojPaths = getAllPBXProjectPaths(projectRoot);\n } catch {}\n\n for (const pbxprojPath of pbxprojPaths) {\n updateBundleIdentifierForPbxproj(pbxprojPath, bundleIdentifier, updateProductName);\n }\n}\n\n/**\n * Reset bundle identifier field in Info.plist to use PRODUCT_BUNDLE_IDENTIFIER, as recommended by Apple.\n */\n\nconst defaultBundleId = '$(PRODUCT_BUNDLE_IDENTIFIER)';\n\nfunction resetAllPlistBundleIdentifiers(projectRoot: string): void {\n const infoPlistPaths = getAllInfoPlistPaths(projectRoot);\n\n for (const plistPath of infoPlistPaths) {\n resetPlistBundleIdentifier(plistPath);\n }\n}\n\nfunction resetPlistBundleIdentifier(plistPath: string): void {\n const rawPlist = fs.readFileSync(plistPath, 'utf8');\n const plistObject = plist.parse(rawPlist) as PlistObject;\n\n if (plistObject.CFBundleIdentifier) {\n if (plistObject.CFBundleIdentifier === defaultBundleId) return;\n\n // attempt to match default Info.plist format\n const format = { pretty: true, indent: `\\t` };\n\n const xml = plist.build(\n {\n ...plistObject,\n CFBundleIdentifier: defaultBundleId,\n },\n format\n );\n\n if (xml !== rawPlist) {\n fs.writeFileSync(plistPath, xml);\n }\n }\n}\n\nexport {\n getBundleIdentifier,\n setBundleIdentifier,\n getBundleIdentifierFromPbxproj,\n updateBundleIdentifierForPbxproj,\n setBundleIdentifierForPbxproj,\n resetAllPlistBundleIdentifiers,\n resetPlistBundleIdentifier,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"BundleIdentifier.js","names":["_plist","data","_interopRequireDefault","require","_assert","_fs","_xcode","_Paths","_Target","_Xcodeproj","_string","_iosPlugins","obj","__esModule","default","withBundleIdentifier","config","bundleIdentifier","withXcodeProject","_config$ios","bundleId","ios","assert","modResults","updateBundleIdentifierForPbxprojObject","exports","getBundleIdentifier","_config$ios$bundleIde","_config$ios2","setBundleIdentifier","infoPlist","CFBundleIdentifier","getBundleIdentifierFromPbxproj","projectRoot","targetName","buildConfiguration","pbxprojPath","getPBXProjectPath","project","xcode","parseSync","xcBuildConfiguration","getXCBuildConfigurationFromPbxproj","getProductBundleIdentifierFromBuildConfiguration","bundleIdentifierRaw","buildSettings","PRODUCT_BUNDLE_IDENTIFIER","trimQuotes","resolveXcodeBuildSetting","setting","updateBundleIdentifierForPbxproj","updateProductName","fs","writeFileSync","writeSync","nativeTarget","findFirstNativeTarget","getBuildConfigurationsForListId","buildConfigurationList","forEach","item","productName","split","pop","includes","PRODUCT_NAME","setBundleIdentifierForPbxproj","pbxprojPaths","getAllPBXProjectPaths","defaultBundleId","resetAllPlistBundleIdentifiers","infoPlistPaths","getAllInfoPlistPaths","plistPath","resetPlistBundleIdentifier","rawPlist","readFileSync","plistObject","plist","parse","format","pretty","indent","xml","build"],"sources":["../../src/ios/BundleIdentifier.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport plist, { PlistObject } from '@expo/plist';\nimport assert from 'assert';\nimport fs from 'fs';\nimport xcode, { XCBuildConfiguration } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { getAllInfoPlistPaths, getAllPBXProjectPaths, getPBXProjectPath } from './Paths';\nimport { findFirstNativeTarget, getXCBuildConfigurationFromPbxproj } from './Target';\nimport {\n ConfigurationSectionEntry,\n getBuildConfigurationsForListId,\n resolveXcodeBuildSetting,\n} from './utils/Xcodeproj';\nimport { trimQuotes } from './utils/string';\nimport { ConfigPlugin, XcodeProject } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\n\nexport const withBundleIdentifier: ConfigPlugin<{ bundleIdentifier?: string }> = (\n config,\n { bundleIdentifier }\n) => {\n return withXcodeProject(config, async (config) => {\n const bundleId = bundleIdentifier ?? config.ios?.bundleIdentifier;\n // Should never happen.\n assert(\n bundleId,\n '`bundleIdentifier` must be defined in the app config (`ios.bundleIdentifier`) or passed to the plugin `withBundleIdentifier`.'\n );\n\n config.modResults = updateBundleIdentifierForPbxprojObject(config.modResults, bundleId, false);\n\n return config;\n });\n};\n\nfunction getBundleIdentifier(config: Pick<ExpoConfig, 'ios'>): string | null {\n return config.ios?.bundleIdentifier ?? null;\n}\n\n/**\n * In Turtle v1 we set the bundleIdentifier directly on Info.plist rather\n * than in pbxproj\n */\nfunction setBundleIdentifier(config: ExpoConfig, infoPlist: InfoPlist): InfoPlist {\n const bundleIdentifier = getBundleIdentifier(config);\n\n if (!bundleIdentifier) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleIdentifier: bundleIdentifier,\n };\n}\n\n/**\n * Gets the bundle identifier defined in the Xcode project found in the project directory.\n *\n * A bundle identifier is stored as a value in XCBuildConfiguration entry.\n * Those entries exist for every pair (build target, build configuration).\n * Unless target name is passed, the first target defined in the pbxproj is used\n * (to keep compatibility with the inaccurate legacy implementation of this function).\n * The build configuration is usually 'Release' or 'Debug'. However, it could be any arbitrary string.\n * Defaults to 'Release'.\n *\n * @param {string} projectRoot Path to project root containing the ios directory\n * @param {string} targetName Target name\n * @param {string} buildConfiguration Build configuration. Defaults to 'Release'.\n * @returns {string | null} bundle identifier of the Xcode project or null if the project is not configured\n */\nfunction getBundleIdentifierFromPbxproj(\n projectRoot: string,\n {\n targetName,\n buildConfiguration = 'Release',\n }: { targetName?: string; buildConfiguration?: string } = {}\n): string | null {\n let pbxprojPath: string;\n try {\n pbxprojPath = getPBXProjectPath(projectRoot);\n } catch {\n return null;\n }\n const project = xcode.project(pbxprojPath);\n project.parseSync();\n\n const xcBuildConfiguration = getXCBuildConfigurationFromPbxproj(project, {\n targetName,\n buildConfiguration,\n });\n if (!xcBuildConfiguration) {\n return null;\n }\n return getProductBundleIdentifierFromBuildConfiguration(xcBuildConfiguration);\n}\n\nfunction getProductBundleIdentifierFromBuildConfiguration(\n xcBuildConfiguration: XCBuildConfiguration\n): string | null {\n const bundleIdentifierRaw = xcBuildConfiguration.buildSettings.PRODUCT_BUNDLE_IDENTIFIER;\n if (bundleIdentifierRaw) {\n const bundleIdentifier = trimQuotes(bundleIdentifierRaw);\n return resolveXcodeBuildSetting(\n bundleIdentifier,\n (setting) => xcBuildConfiguration.buildSettings[setting] as string | undefined\n );\n } else {\n return null;\n }\n}\n\n/**\n * Updates the bundle identifier for a given pbxproj\n *\n * @param {string} pbxprojPath Path to pbxproj file\n * @param {string} bundleIdentifier Bundle identifier to set in the pbxproj\n * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME\n */\nfunction updateBundleIdentifierForPbxproj(\n pbxprojPath: string,\n bundleIdentifier: string,\n updateProductName: boolean = true\n): void {\n const project = xcode.project(pbxprojPath);\n project.parseSync();\n fs.writeFileSync(\n pbxprojPath,\n updateBundleIdentifierForPbxprojObject(project, bundleIdentifier, updateProductName).writeSync()\n );\n}\n\n/**\n * Updates the bundle identifier for a given pbxproj\n *\n * @param {string} project pbxproj file\n * @param {string} bundleIdentifier Bundle identifier to set in the pbxproj\n * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME\n */\nfunction updateBundleIdentifierForPbxprojObject(\n project: XcodeProject,\n bundleIdentifier: string,\n updateProductName: boolean = true\n) {\n const [, nativeTarget] = findFirstNativeTarget(project);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList).forEach(\n ([, item]: ConfigurationSectionEntry) => {\n if (item.buildSettings.PRODUCT_BUNDLE_IDENTIFIER === bundleIdentifier) {\n return;\n }\n\n item.buildSettings.PRODUCT_BUNDLE_IDENTIFIER = `\"${bundleIdentifier}\"`;\n\n if (updateProductName) {\n const productName = bundleIdentifier.split('.').pop();\n if (!productName?.includes('$')) {\n item.buildSettings.PRODUCT_NAME = productName;\n }\n }\n }\n );\n return project;\n}\n\n/**\n * Updates the bundle identifier for pbx projects inside the ios directory of the given project root\n *\n * @param {string} projectRoot Path to project root containing the ios directory\n * @param {string} bundleIdentifier Desired bundle identifier\n * @param {boolean} [updateProductName=true] Whether to update PRODUCT_NAME\n */\nfunction setBundleIdentifierForPbxproj(\n projectRoot: string,\n bundleIdentifier: string,\n updateProductName: boolean = true\n): void {\n // Get all pbx projects in the ${projectRoot}/ios directory\n let pbxprojPaths: string[] = [];\n try {\n pbxprojPaths = getAllPBXProjectPaths(projectRoot);\n } catch {}\n\n for (const pbxprojPath of pbxprojPaths) {\n updateBundleIdentifierForPbxproj(pbxprojPath, bundleIdentifier, updateProductName);\n }\n}\n\n/**\n * Reset bundle identifier field in Info.plist to use PRODUCT_BUNDLE_IDENTIFIER, as recommended by Apple.\n */\n\nconst defaultBundleId = '$(PRODUCT_BUNDLE_IDENTIFIER)';\n\nfunction resetAllPlistBundleIdentifiers(projectRoot: string): void {\n const infoPlistPaths = getAllInfoPlistPaths(projectRoot);\n\n for (const plistPath of infoPlistPaths) {\n resetPlistBundleIdentifier(plistPath);\n }\n}\n\nfunction resetPlistBundleIdentifier(plistPath: string): void {\n const rawPlist = fs.readFileSync(plistPath, 'utf8');\n const plistObject = plist.parse(rawPlist) as PlistObject;\n\n if (plistObject.CFBundleIdentifier) {\n if (plistObject.CFBundleIdentifier === defaultBundleId) return;\n\n // attempt to match default Info.plist format\n const format = { pretty: true, indent: `\\t` };\n\n const xml = plist.build(\n {\n ...plistObject,\n CFBundleIdentifier: defaultBundleId,\n },\n format\n );\n\n if (xml !== rawPlist) {\n fs.writeFileSync(plistPath, xml);\n }\n }\n}\n\nexport {\n getBundleIdentifier,\n setBundleIdentifier,\n getBundleIdentifierFromPbxproj,\n updateBundleIdentifierForPbxproj,\n setBundleIdentifierForPbxproj,\n resetAllPlistBundleIdentifiers,\n resetPlistBundleIdentifier,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceFamily.js","names":["_iosPlugins","data","require","_warnings","withDeviceFamily","config","withXcodeProject","modResults","setDeviceFamily","project","exports","getSupportsTablet","_config$ios","ios","supportsTablet","getIsTabletOnly","_config$ios2","isTabletOnly","getDeviceFamilies","_config$ios3","addWarningIOS","formatDeviceFamilies","deviceFamilies","join","configurations","pbxXCBuildConfigurationSection","buildSettings","Object","values","PRODUCT_NAME","TVOS_DEPLOYMENT_TARGET","TARGETED_DEVICE_FAMILY"],"sources":["../../src/ios/DeviceFamily.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\n\nexport const withDeviceFamily: ConfigPlugin = (config) => {\n return withXcodeProject(config, async (config) => {\n config.modResults = await setDeviceFamily(config, {\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getSupportsTablet(config: Pick<ExpoConfig, 'ios'>): boolean {\n return !!config.ios?.supportsTablet;\n}\n\nexport function getIsTabletOnly(config: Pick<ExpoConfig, 'ios'>): boolean {\n return !!config?.ios?.isTabletOnly;\n}\n\nexport function getDeviceFamilies(config: Pick<ExpoConfig, 'ios'>): number[] {\n const supportsTablet = getSupportsTablet(config);\n const isTabletOnly = getIsTabletOnly(config);\n\n if (isTabletOnly && config.ios?.supportsTablet === false) {\n addWarningIOS(\n 'ios.supportsTablet',\n `Found contradictory values: \\`{ ios: { isTabletOnly: true, supportsTablet: false } }\\`. Using \\`{ isTabletOnly: true }\\`.`\n );\n }\n\n // 1 is iPhone, 2 is iPad\n if (isTabletOnly) {\n return [2];\n } else if (supportsTablet) {\n return [1, 2];\n } else {\n // is iPhone only\n return [1];\n }\n}\n\n/**\n * Wrapping the families in double quotes is the only way to set a value with a comma in it.\n *\n * @param deviceFamilies\n */\nexport function formatDeviceFamilies(deviceFamilies: number[]): string {\n return `\"${deviceFamilies.join(',')}\"`;\n}\n\n/**\n * Add to pbxproj under TARGETED_DEVICE_FAMILY\n */\nexport function setDeviceFamily(\n config: Pick<ExpoConfig, 'ios'>,\n { project }: { project: XcodeProject }\n): XcodeProject {\n const deviceFamilies = formatDeviceFamilies(getDeviceFamilies(config));\n\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n if (typeof buildSettings?.TVOS_DEPLOYMENT_TARGET !== 'undefined') {\n buildSettings.TARGETED_DEVICE_FAMILY = '3';\n } else {\n buildSettings.TARGETED_DEVICE_FAMILY = deviceFamilies;\n }\n }\n }\n\n return project;\n}\n"],"mappings":";;;;;;;;;;;AAIA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,gBAA8B,GAAIC,MAAM,IAAK;EACxD,OAAO,IAAAC,8BAAgB,EAACD,MAAM,EAAE,MAAOA,MAAM,IAAK;IAChDA,MAAM,CAACE,UAAU,GAAG,MAAMC,eAAe,CAACH,MAAM,EAAE;MAChDI,OAAO,EAAEJ,MAAM,CAACE;IAClB,CAAC,CAAC;IACF,OAAOF,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACK,OAAA,CAAAN,gBAAA,GAAAA,gBAAA;AAEK,SAASO,iBAAiBA,CAACN,MAA+B,EAAW;EAAA,IAAAO,WAAA;EAC1E,OAAO,CAAC,GAAAA,WAAA,GAACP,MAAM,CAACQ,GAAG,cAAAD,WAAA,eAAVA,WAAA,CAAYE,cAAc;AACrC;AAEO,SAASC,eAAeA,CAACV,MAA+B,EAAW;EAAA,IAAAW,YAAA;EACxE,OAAO,CAAC,EAACX,MAAM,aAANA,MAAM,gBAAAW,YAAA,GAANX,MAAM,CAAEQ,GAAG,cAAAG,YAAA,eAAXA,YAAA,CAAaC,YAAY;AACpC;AAEO,SAASC,iBAAiBA,CAACb,MAA+B,EAAY;EAAA,IAAAc,YAAA;EAC3E,MAAML,cAAc,GAAGH,iBAAiB,CAACN,MAAM,CAAC;EAChD,MAAMY,YAAY,GAAGF,eAAe,CAACV,MAAM,CAAC;EAE5C,IAAIY,YAAY,IAAI,EAAAE,YAAA,GAAAd,MAAM,CAACQ,GAAG,cAAAM,YAAA,uBAAVA,YAAA,CAAYL,cAAc,MAAK,KAAK,EAAE;IACxD,IAAAM,yBAAa,EACX,oBAAoB,EACnB,2HAA0H,CAC5H;EACH;;EAEA;EACA,IAAIH,YAAY,EAAE;IAChB,OAAO,CAAC,CAAC,CAAC;EACZ,CAAC,MAAM,IAAIH,cAAc,EAAE;IACzB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACf,CAAC,MAAM;IACL;IACA,OAAO,CAAC,CAAC,CAAC;EACZ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASO,oBAAoBA,CAACC,cAAwB,EAAU;EACrE,OAAQ,IAAGA,cAAc,CAACC,IAAI,CAAC,GAAG,CAAE,GAAE;AACxC;;AAEA;AACA;AACA;AACO,SAASf,eAAeA,CAC7BH,MAA+B,EAC/B;EAAEI;AAAmC,CAAC,EACxB;EACd,MAAMa,cAAc,GAAGD,oBAAoB,CAACH,iBAAiB,CAACb,MAAM,CAAC,CAAC;EAEtE,MAAMmB,cAAc,GAAGf,OAAO,CAACgB,8BAA8B,EAAE;EAC/D;EACA,KAAK,MAAM;IAAEC;EAAc,CAAC,IAAIC,MAAM,CAACC,MAAM,CAACJ,cAAc,IAAI,CAAC,CAAC,CAAC,EAAE;IACnE;IACA;IACA,IAAI,QAAOE,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEG,YAAY,MAAK,WAAW,EAAE;MACtD,IAAI,QAAOH,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,sBAAsB,MAAK,WAAW,EAAE;QAChEJ,aAAa,CAACK,sBAAsB,GAAG,GAAG;MAC5C,CAAC,MAAM;QACLL,aAAa,CAACK,sBAAsB,GAAGT,cAAc;MACvD;IACF;EACF;EAEA,OAAOb,OAAO;AAChB"}
1
+ {"version":3,"file":"DeviceFamily.js","names":["_iosPlugins","data","require","_warnings","withDeviceFamily","config","withXcodeProject","modResults","setDeviceFamily","project","exports","getSupportsTablet","_config$ios","ios","supportsTablet","getIsTabletOnly","_config$ios2","isTabletOnly","getDeviceFamilies","_config$ios3","addWarningIOS","formatDeviceFamilies","deviceFamilies","join","configurations","pbxXCBuildConfigurationSection","buildSettings","Object","values","PRODUCT_NAME","TVOS_DEPLOYMENT_TARGET","TARGETED_DEVICE_FAMILY"],"sources":["../../src/ios/DeviceFamily.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\n\nexport const withDeviceFamily: ConfigPlugin = (config) => {\n return withXcodeProject(config, async (config) => {\n config.modResults = await setDeviceFamily(config, {\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getSupportsTablet(config: Pick<ExpoConfig, 'ios'>): boolean {\n return !!config.ios?.supportsTablet;\n}\n\nexport function getIsTabletOnly(config: Pick<ExpoConfig, 'ios'>): boolean {\n return !!config?.ios?.isTabletOnly;\n}\n\nexport function getDeviceFamilies(config: Pick<ExpoConfig, 'ios'>): number[] {\n const supportsTablet = getSupportsTablet(config);\n const isTabletOnly = getIsTabletOnly(config);\n\n if (isTabletOnly && config.ios?.supportsTablet === false) {\n addWarningIOS(\n 'ios.supportsTablet',\n `Found contradictory values: \\`{ ios: { isTabletOnly: true, supportsTablet: false } }\\`. Using \\`{ isTabletOnly: true }\\`.`\n );\n }\n\n // 1 is iPhone, 2 is iPad\n if (isTabletOnly) {\n return [2];\n } else if (supportsTablet) {\n return [1, 2];\n } else {\n // is iPhone only\n return [1];\n }\n}\n\n/**\n * Wrapping the families in double quotes is the only way to set a value with a comma in it.\n *\n * @param deviceFamilies\n */\nexport function formatDeviceFamilies(deviceFamilies: number[]): string {\n return `\"${deviceFamilies.join(',')}\"`;\n}\n\n/**\n * Add to pbxproj under TARGETED_DEVICE_FAMILY\n */\nexport function setDeviceFamily(\n config: Pick<ExpoConfig, 'ios'>,\n { project }: { project: XcodeProject }\n): XcodeProject {\n const deviceFamilies = formatDeviceFamilies(getDeviceFamilies(config));\n\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n if (typeof buildSettings?.TVOS_DEPLOYMENT_TARGET !== 'undefined') {\n buildSettings.TARGETED_DEVICE_FAMILY = '3';\n } else {\n buildSettings.TARGETED_DEVICE_FAMILY = deviceFamilies;\n }\n }\n }\n\n return project;\n}\n"],"mappings":";;;;;;;;;;;AAIA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,gBAA8B,GAAIC,MAAM,IAAK;EACxD,OAAO,IAAAC,8BAAgB,EAACD,MAAM,EAAE,MAAOA,MAAM,IAAK;IAChDA,MAAM,CAACE,UAAU,GAAG,MAAMC,eAAe,CAACH,MAAM,EAAE;MAChDI,OAAO,EAAEJ,MAAM,CAACE;IAClB,CAAC,CAAC;IACF,OAAOF,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACK,OAAA,CAAAN,gBAAA,GAAAA,gBAAA;AAEK,SAASO,iBAAiBA,CAACN,MAA+B,EAAW;EAAA,IAAAO,WAAA;EAC1E,OAAO,CAAC,GAAAA,WAAA,GAACP,MAAM,CAACQ,GAAG,cAAAD,WAAA,eAAVA,WAAA,CAAYE,cAAc;AACrC;AAEO,SAASC,eAAeA,CAACV,MAA+B,EAAW;EAAA,IAAAW,YAAA;EACxE,OAAO,CAAC,EAACX,MAAM,aAANA,MAAM,gBAAAW,YAAA,GAANX,MAAM,CAAEQ,GAAG,cAAAG,YAAA,eAAXA,YAAA,CAAaC,YAAY;AACpC;AAEO,SAASC,iBAAiBA,CAACb,MAA+B,EAAY;EAAA,IAAAc,YAAA;EAC3E,MAAML,cAAc,GAAGH,iBAAiB,CAACN,MAAM,CAAC;EAChD,MAAMY,YAAY,GAAGF,eAAe,CAACV,MAAM,CAAC;EAE5C,IAAIY,YAAY,IAAI,EAAAE,YAAA,GAAAd,MAAM,CAACQ,GAAG,cAAAM,YAAA,uBAAVA,YAAA,CAAYL,cAAc,MAAK,KAAK,EAAE;IACxD,IAAAM,yBAAa,EACX,oBAAoB,EACnB,2HACH,CAAC;EACH;;EAEA;EACA,IAAIH,YAAY,EAAE;IAChB,OAAO,CAAC,CAAC,CAAC;EACZ,CAAC,MAAM,IAAIH,cAAc,EAAE;IACzB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACf,CAAC,MAAM;IACL;IACA,OAAO,CAAC,CAAC,CAAC;EACZ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASO,oBAAoBA,CAACC,cAAwB,EAAU;EACrE,OAAQ,IAAGA,cAAc,CAACC,IAAI,CAAC,GAAG,CAAE,GAAE;AACxC;;AAEA;AACA;AACA;AACO,SAASf,eAAeA,CAC7BH,MAA+B,EAC/B;EAAEI;AAAmC,CAAC,EACxB;EACd,MAAMa,cAAc,GAAGD,oBAAoB,CAACH,iBAAiB,CAACb,MAAM,CAAC,CAAC;EAEtE,MAAMmB,cAAc,GAAGf,OAAO,CAACgB,8BAA8B,CAAC,CAAC;EAC/D;EACA,KAAK,MAAM;IAAEC;EAAc,CAAC,IAAIC,MAAM,CAACC,MAAM,CAACJ,cAAc,IAAI,CAAC,CAAC,CAAC,EAAE;IACnE;IACA;IACA,IAAI,QAAOE,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEG,YAAY,MAAK,WAAW,EAAE;MACtD,IAAI,QAAOH,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,sBAAsB,MAAK,WAAW,EAAE;QAChEJ,aAAa,CAACK,sBAAsB,GAAG,GAAG;MAC5C,CAAC,MAAM;QACLL,aAAa,CAACK,sBAAsB,GAAGT,cAAc;MACvD;IACF;EACF;EAEA,OAAOb,OAAO;AAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Entitlements.js","names":["_fs","data","_interopRequireDefault","require","_path","_slash","_Target","_Xcodeproj","_string","_iosPlugins","obj","__esModule","default","withAssociatedDomains","createEntitlementsPlugin","setAssociatedDomains","exports","config","_","entitlementsPlist","_config$ios","ios","associatedDomains","getEntitlementsPath","projectRoot","targetName","buildConfiguration","project","getPbxproj","xcBuildConfiguration","getXCBuildConfigurationFromPbxproj","entitlementsPath","getEntitlementsPathFromBuildConfiguration","fs","existsSync","_xcBuildConfiguration","entitlementsPathRaw","buildSettings","CODE_SIGN_ENTITLEMENTS","path","normalize","join","trimQuotes","ensureApplicationTargetEntitlementsFileConfigured","projectName","getProjectName","productName","getProductName","applicationTarget","findFirstNativeTarget","buildConfigurations","getBuildConfigurationsForListId","buildConfigurationList","hasChangesToWrite","oldEntitlementPath","entitlementsRelativePath","slash","mkdirSync","dirname","recursive","writeFileSync","ENTITLEMENTS_TEMPLATE","filepath","writeSync"],"sources":["../../src/ios/Entitlements.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\nimport slash from 'slash';\nimport { XCBuildConfiguration } from 'xcode';\n\nimport { findFirstNativeTarget, getXCBuildConfigurationFromPbxproj } from './Target';\nimport {\n getBuildConfigurationsForListId,\n getPbxproj,\n getProductName,\n getProjectName,\n} from './utils/Xcodeproj';\nimport { trimQuotes } from './utils/string';\nimport { createEntitlementsPlugin } from '../plugins/ios-plugins';\n\nexport const withAssociatedDomains = createEntitlementsPlugin(\n setAssociatedDomains,\n 'withAssociatedDomains'\n);\n\nexport function setAssociatedDomains(\n config: ExpoConfig,\n { 'com.apple.developer.associated-domains': _, ...entitlementsPlist }: JSONObject\n): JSONObject {\n if (config.ios?.associatedDomains) {\n return {\n ...entitlementsPlist,\n 'com.apple.developer.associated-domains': config.ios.associatedDomains,\n };\n }\n\n return entitlementsPlist;\n}\n\nexport function getEntitlementsPath(\n projectRoot: string,\n {\n targetName,\n buildConfiguration = 'Release',\n }: { targetName?: string; buildConfiguration?: string } = {}\n): string | null {\n const project = getPbxproj(projectRoot);\n const xcBuildConfiguration = getXCBuildConfigurationFromPbxproj(project, {\n targetName,\n buildConfiguration,\n });\n if (!xcBuildConfiguration) {\n return null;\n }\n const entitlementsPath = getEntitlementsPathFromBuildConfiguration(\n projectRoot,\n xcBuildConfiguration\n );\n return entitlementsPath && fs.existsSync(entitlementsPath) ? entitlementsPath : null;\n}\n\nfunction getEntitlementsPathFromBuildConfiguration(\n projectRoot: string,\n xcBuildConfiguration: XCBuildConfiguration\n): string | null {\n const entitlementsPathRaw = xcBuildConfiguration?.buildSettings?.CODE_SIGN_ENTITLEMENTS as\n | string\n | undefined;\n if (entitlementsPathRaw) {\n return path.normalize(path.join(projectRoot, 'ios', trimQuotes(entitlementsPathRaw)));\n } else {\n return null;\n }\n}\n\nexport function ensureApplicationTargetEntitlementsFileConfigured(projectRoot: string): void {\n const project = getPbxproj(projectRoot);\n const projectName = getProjectName(projectRoot);\n const productName = getProductName(project);\n\n const [, applicationTarget] = findFirstNativeTarget(project);\n const buildConfigurations = getBuildConfigurationsForListId(\n project,\n applicationTarget.buildConfigurationList\n );\n let hasChangesToWrite = false;\n for (const [, xcBuildConfiguration] of buildConfigurations) {\n const oldEntitlementPath = getEntitlementsPathFromBuildConfiguration(\n projectRoot,\n xcBuildConfiguration\n );\n if (oldEntitlementPath && fs.existsSync(oldEntitlementPath)) {\n return;\n }\n hasChangesToWrite = true;\n // Use posix formatted path, even on Windows\n const entitlementsRelativePath = slash(path.join(projectName, `${productName}.entitlements`));\n const entitlementsPath = path.normalize(\n path.join(projectRoot, 'ios', entitlementsRelativePath)\n );\n fs.mkdirSync(path.dirname(entitlementsPath), { recursive: true });\n if (!fs.existsSync(entitlementsPath)) {\n fs.writeFileSync(entitlementsPath, ENTITLEMENTS_TEMPLATE);\n }\n xcBuildConfiguration.buildSettings.CODE_SIGN_ENTITLEMENTS = entitlementsRelativePath;\n }\n if (hasChangesToWrite) {\n fs.writeFileSync(project.filepath, project.writeSync());\n }\n}\n\nconst ENTITLEMENTS_TEMPLATE = `\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n`;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Entitlements.js","names":["_fs","data","_interopRequireDefault","require","_path","_slash","_Target","_Xcodeproj","_string","_iosPlugins","obj","__esModule","default","withAssociatedDomains","createEntitlementsPlugin","setAssociatedDomains","exports","config","_","entitlementsPlist","_config$ios","ios","associatedDomains","getEntitlementsPath","projectRoot","targetName","buildConfiguration","project","getPbxproj","xcBuildConfiguration","getXCBuildConfigurationFromPbxproj","entitlementsPath","getEntitlementsPathFromBuildConfiguration","fs","existsSync","_xcBuildConfiguration","entitlementsPathRaw","buildSettings","CODE_SIGN_ENTITLEMENTS","path","normalize","join","trimQuotes","ensureApplicationTargetEntitlementsFileConfigured","projectName","getProjectName","productName","getProductName","applicationTarget","findFirstNativeTarget","buildConfigurations","getBuildConfigurationsForListId","buildConfigurationList","hasChangesToWrite","oldEntitlementPath","entitlementsRelativePath","slash","mkdirSync","dirname","recursive","writeFileSync","ENTITLEMENTS_TEMPLATE","filepath","writeSync"],"sources":["../../src/ios/Entitlements.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\nimport slash from 'slash';\nimport { XCBuildConfiguration } from 'xcode';\n\nimport { findFirstNativeTarget, getXCBuildConfigurationFromPbxproj } from './Target';\nimport {\n getBuildConfigurationsForListId,\n getPbxproj,\n getProductName,\n getProjectName,\n} from './utils/Xcodeproj';\nimport { trimQuotes } from './utils/string';\nimport { createEntitlementsPlugin } from '../plugins/ios-plugins';\n\nexport const withAssociatedDomains = createEntitlementsPlugin(\n setAssociatedDomains,\n 'withAssociatedDomains'\n);\n\nexport function setAssociatedDomains(\n config: ExpoConfig,\n { 'com.apple.developer.associated-domains': _, ...entitlementsPlist }: JSONObject\n): JSONObject {\n if (config.ios?.associatedDomains) {\n return {\n ...entitlementsPlist,\n 'com.apple.developer.associated-domains': config.ios.associatedDomains,\n };\n }\n\n return entitlementsPlist;\n}\n\nexport function getEntitlementsPath(\n projectRoot: string,\n {\n targetName,\n buildConfiguration = 'Release',\n }: { targetName?: string; buildConfiguration?: string } = {}\n): string | null {\n const project = getPbxproj(projectRoot);\n const xcBuildConfiguration = getXCBuildConfigurationFromPbxproj(project, {\n targetName,\n buildConfiguration,\n });\n if (!xcBuildConfiguration) {\n return null;\n }\n const entitlementsPath = getEntitlementsPathFromBuildConfiguration(\n projectRoot,\n xcBuildConfiguration\n );\n return entitlementsPath && fs.existsSync(entitlementsPath) ? entitlementsPath : null;\n}\n\nfunction getEntitlementsPathFromBuildConfiguration(\n projectRoot: string,\n xcBuildConfiguration: XCBuildConfiguration\n): string | null {\n const entitlementsPathRaw = xcBuildConfiguration?.buildSettings?.CODE_SIGN_ENTITLEMENTS as\n | string\n | undefined;\n if (entitlementsPathRaw) {\n return path.normalize(path.join(projectRoot, 'ios', trimQuotes(entitlementsPathRaw)));\n } else {\n return null;\n }\n}\n\nexport function ensureApplicationTargetEntitlementsFileConfigured(projectRoot: string): void {\n const project = getPbxproj(projectRoot);\n const projectName = getProjectName(projectRoot);\n const productName = getProductName(project);\n\n const [, applicationTarget] = findFirstNativeTarget(project);\n const buildConfigurations = getBuildConfigurationsForListId(\n project,\n applicationTarget.buildConfigurationList\n );\n let hasChangesToWrite = false;\n for (const [, xcBuildConfiguration] of buildConfigurations) {\n const oldEntitlementPath = getEntitlementsPathFromBuildConfiguration(\n projectRoot,\n xcBuildConfiguration\n );\n if (oldEntitlementPath && fs.existsSync(oldEntitlementPath)) {\n return;\n }\n hasChangesToWrite = true;\n // Use posix formatted path, even on Windows\n const entitlementsRelativePath = slash(path.join(projectName, `${productName}.entitlements`));\n const entitlementsPath = path.normalize(\n path.join(projectRoot, 'ios', entitlementsRelativePath)\n );\n fs.mkdirSync(path.dirname(entitlementsPath), { recursive: true });\n if (!fs.existsSync(entitlementsPath)) {\n fs.writeFileSync(entitlementsPath, ENTITLEMENTS_TEMPLATE);\n }\n xcBuildConfiguration.buildSettings.CODE_SIGN_ENTITLEMENTS = entitlementsRelativePath;\n }\n if (hasChangesToWrite) {\n fs.writeFileSync(project.filepath, project.writeSync());\n }\n}\n\nconst ENTITLEMENTS_TEMPLATE = `\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n`;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Google.js","names":["_plist","data","_interopRequireDefault","require","_assert","_fs","_path","_Paths","_Scheme","_Xcodeproj","_iosPlugins","obj","__esModule","default","withGoogle","config","withInfoPlist","modResults","setGoogleConfig","modRequest","exports","withGoogleServicesFile","withXcodeProject","setGoogleServicesFile","projectRoot","project","readGoogleServicesInfoPlist","relativePath","googleServiceFilePath","path","resolve","contents","fs","readFileSync","assert","plist","parse","getGoogleSignInReversedClientId","_infoPlist$REVERSED_C","googleServicesFileRelativePath","getGoogleServicesFile","infoPlist","REVERSED_CLIENT_ID","_config$ios$googleSer","_config$ios","ios","googleServicesFile","setGoogleSignInReversedClientId","reversedClientId","appendScheme","copyFileSync","join","getSourceRoot","projectName","getProjectName","plistFilePath","hasFile","addResourceFileToGroup","filepath","groupName","isBuildFile","verbose"],"sources":["../../src/ios/Google.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { getSourceRoot } from './Paths';\nimport { appendScheme } from './Scheme';\nimport { addResourceFileToGroup, getProjectName } from './utils/Xcodeproj';\nimport { ConfigPlugin, ModProps } from '../Plugin.types';\nimport { withInfoPlist, withXcodeProject } from '../plugins/ios-plugins';\n\nexport const withGoogle: ConfigPlugin = (config) => {\n return withInfoPlist(config, (config) => {\n config.modResults = setGoogleConfig(config, config.modResults, config.modRequest);\n return config;\n });\n};\n\nexport const withGoogleServicesFile: ConfigPlugin = (config) => {\n return withXcodeProject(config, (config) => {\n config.modResults = setGoogleServicesFile(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nfunction readGoogleServicesInfoPlist(\n relativePath: string,\n { projectRoot }: { projectRoot: string }\n) {\n const googleServiceFilePath = path.resolve(projectRoot, relativePath);\n const contents = fs.readFileSync(googleServiceFilePath, 'utf8');\n assert(contents, 'GoogleService-Info.plist is empty');\n return plist.parse(contents);\n}\n\nexport function getGoogleSignInReversedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): string | null {\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return null;\n }\n\n const infoPlist = readGoogleServicesInfoPlist(googleServicesFileRelativePath, modRequest);\n\n return infoPlist.REVERSED_CLIENT_ID ?? null;\n}\n\nexport function getGoogleServicesFile(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.googleServicesFile ?? null;\n}\n\nexport function setGoogleSignInReversedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): InfoPlist {\n const reversedClientId = getGoogleSignInReversedClientId(config, modRequest);\n\n if (reversedClientId === null) {\n return infoPlist;\n }\n\n return appendScheme(reversedClientId, infoPlist);\n}\n\nexport function setGoogleConfig(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: ModProps<InfoPlist>\n): InfoPlist {\n infoPlist = setGoogleSignInReversedClientId(config, infoPlist, modRequest);\n return infoPlist;\n}\n\nexport function setGoogleServicesFile(\n config: Pick<ExpoConfig, 'ios'>,\n { projectRoot, project }: { project: XcodeProject; projectRoot: string }\n): XcodeProject {\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return project;\n }\n\n const googleServiceFilePath = path.resolve(projectRoot, googleServicesFileRelativePath);\n fs.copyFileSync(\n googleServiceFilePath,\n path.join(getSourceRoot(projectRoot), 'GoogleService-Info.plist')\n );\n\n const projectName = getProjectName(projectRoot);\n const plistFilePath = `${projectName}/GoogleService-Info.plist`;\n if (!project.hasFile(plistFilePath)) {\n project = addResourceFileToGroup({\n filepath: plistFilePath,\n groupName: projectName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n return project;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Google.js","names":["_plist","data","_interopRequireDefault","require","_assert","_fs","_path","_Paths","_Scheme","_Xcodeproj","_iosPlugins","obj","__esModule","default","withGoogle","config","withInfoPlist","modResults","setGoogleConfig","modRequest","exports","withGoogleServicesFile","withXcodeProject","setGoogleServicesFile","projectRoot","project","readGoogleServicesInfoPlist","relativePath","googleServiceFilePath","path","resolve","contents","fs","readFileSync","assert","plist","parse","getGoogleSignInReversedClientId","_infoPlist$REVERSED_C","googleServicesFileRelativePath","getGoogleServicesFile","infoPlist","REVERSED_CLIENT_ID","_config$ios$googleSer","_config$ios","ios","googleServicesFile","setGoogleSignInReversedClientId","reversedClientId","appendScheme","copyFileSync","join","getSourceRoot","projectName","getProjectName","plistFilePath","hasFile","addResourceFileToGroup","filepath","groupName","isBuildFile","verbose"],"sources":["../../src/ios/Google.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { getSourceRoot } from './Paths';\nimport { appendScheme } from './Scheme';\nimport { addResourceFileToGroup, getProjectName } from './utils/Xcodeproj';\nimport { ConfigPlugin, ModProps } from '../Plugin.types';\nimport { withInfoPlist, withXcodeProject } from '../plugins/ios-plugins';\n\nexport const withGoogle: ConfigPlugin = (config) => {\n return withInfoPlist(config, (config) => {\n config.modResults = setGoogleConfig(config, config.modResults, config.modRequest);\n return config;\n });\n};\n\nexport const withGoogleServicesFile: ConfigPlugin = (config) => {\n return withXcodeProject(config, (config) => {\n config.modResults = setGoogleServicesFile(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nfunction readGoogleServicesInfoPlist(\n relativePath: string,\n { projectRoot }: { projectRoot: string }\n) {\n const googleServiceFilePath = path.resolve(projectRoot, relativePath);\n const contents = fs.readFileSync(googleServiceFilePath, 'utf8');\n assert(contents, 'GoogleService-Info.plist is empty');\n return plist.parse(contents);\n}\n\nexport function getGoogleSignInReversedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): string | null {\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return null;\n }\n\n const infoPlist = readGoogleServicesInfoPlist(googleServicesFileRelativePath, modRequest);\n\n return infoPlist.REVERSED_CLIENT_ID ?? null;\n}\n\nexport function getGoogleServicesFile(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.googleServicesFile ?? null;\n}\n\nexport function setGoogleSignInReversedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): InfoPlist {\n const reversedClientId = getGoogleSignInReversedClientId(config, modRequest);\n\n if (reversedClientId === null) {\n return infoPlist;\n }\n\n return appendScheme(reversedClientId, infoPlist);\n}\n\nexport function setGoogleConfig(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: ModProps<InfoPlist>\n): InfoPlist {\n infoPlist = setGoogleSignInReversedClientId(config, infoPlist, modRequest);\n return infoPlist;\n}\n\nexport function setGoogleServicesFile(\n config: Pick<ExpoConfig, 'ios'>,\n { projectRoot, project }: { project: XcodeProject; projectRoot: string }\n): XcodeProject {\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return project;\n }\n\n const googleServiceFilePath = path.resolve(projectRoot, googleServicesFileRelativePath);\n fs.copyFileSync(\n googleServiceFilePath,\n path.join(getSourceRoot(projectRoot), 'GoogleService-Info.plist')\n );\n\n const projectName = getProjectName(projectRoot);\n const plistFilePath = `${projectName}/GoogleService-Info.plist`;\n if (!project.hasFile(plistFilePath)) {\n project = addResourceFileToGroup({\n filepath: plistFilePath,\n groupName: projectName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n return project;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Locales.js","names":["_jsonFile","data","_interopRequireDefault","require","_fs","_path","_Xcodeproj","_iosPlugins","_warnings","obj","__esModule","default","withLocales","config","withXcodeProject","modResults","setLocalesAsync","projectRoot","modRequest","project","exports","getLocales","_config$locales","locales","localesMap","getResolvedLocalesAsync","projectName","getProjectName","supportingDirectory","join","stringName","lang","localizationObj","Object","entries","dir","fs","promises","mkdir","recursive","strings","buffer","plistKey","localVersion","push","writeFile","groupName","group","ensureGroupRecursively","children","some","comment","addResourceFileToGroup","filepath","relative","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","addWarningIOS"],"sources":["../../src/ios/Locales.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport JsonFile from '@expo/json-file';\nimport fs from 'fs';\nimport { join, relative } from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { addResourceFileToGroup, ensureGroupRecursively, getProjectName } from './utils/Xcodeproj';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\n\ntype LocaleJson = Record<string, string>;\ntype ResolvedLocalesJson = Record<string, LocaleJson>;\ntype ExpoConfigLocales = NonNullable<ExpoConfig['locales']>;\n\nexport const withLocales: ConfigPlugin = (config) => {\n return withXcodeProject(config, async (config) => {\n config.modResults = await setLocalesAsync(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getLocales(\n config: Pick<ExpoConfig, 'locales'>\n): Record<string, string | LocaleJson> | null {\n return config.locales ?? null;\n}\n\nexport async function setLocalesAsync(\n config: Pick<ExpoConfig, 'locales'>,\n { projectRoot, project }: { projectRoot: string; project: XcodeProject }\n): Promise<XcodeProject> {\n const locales = getLocales(config);\n if (!locales) {\n return project;\n }\n // possibly validate CFBundleAllowMixedLocalizations is enabled\n const localesMap = await getResolvedLocalesAsync(projectRoot, locales);\n\n const projectName = getProjectName(projectRoot);\n const supportingDirectory = join(projectRoot, 'ios', projectName, 'Supporting');\n\n // TODO: Should we delete all before running? Revisit after we land on a lock file.\n const stringName = 'InfoPlist.strings';\n\n for (const [lang, localizationObj] of Object.entries(localesMap)) {\n const dir = join(supportingDirectory, `${lang}.lproj`);\n // await fs.ensureDir(dir);\n await fs.promises.mkdir(dir, { recursive: true });\n\n const strings = join(dir, stringName);\n const buffer = [];\n for (const [plistKey, localVersion] of Object.entries(localizationObj)) {\n buffer.push(`${plistKey} = \"${localVersion}\";`);\n }\n // Write the file to the file system.\n await fs.promises.writeFile(strings, buffer.join('\\n'));\n\n const groupName = `${projectName}/Supporting/${lang}.lproj`;\n // deep find the correct folder\n const group = ensureGroupRecursively(project, groupName);\n\n // Ensure the file doesn't already exist\n if (!group?.children.some(({ comment }) => comment === stringName)) {\n // Only write the file if it doesn't already exist.\n project = addResourceFileToGroup({\n filepath: relative(supportingDirectory, strings),\n groupName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n }\n\n return project;\n}\n\nexport async function getResolvedLocalesAsync(\n projectRoot: string,\n input: ExpoConfigLocales\n): Promise<ResolvedLocalesJson> {\n const locales: ResolvedLocalesJson = {};\n for (const [lang, localeJsonPath] of Object.entries(input)) {\n if (typeof localeJsonPath === 'string') {\n try {\n locales[lang] = await JsonFile.readAsync(join(projectRoot, localeJsonPath));\n } catch {\n // Add a warning when a json file cannot be parsed.\n addWarningIOS(\n `locales.${lang}`,\n `Failed to parse JSON of locale file for language: ${lang}`,\n 'https://docs.expo.dev/distribution/app-stores/#localizing-your-ios-app'\n );\n }\n } else {\n // In the off chance that someone defined the locales json in the config, pass it directly to the object.\n // We do this to make the types more elegant.\n locales[lang] = localeJsonPath;\n }\n }\n\n return locales;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Locales.js","names":["_jsonFile","data","_interopRequireDefault","require","_fs","_path","_Xcodeproj","_iosPlugins","_warnings","obj","__esModule","default","withLocales","config","withXcodeProject","modResults","setLocalesAsync","projectRoot","modRequest","project","exports","getLocales","_config$locales","locales","localesMap","getResolvedLocalesAsync","projectName","getProjectName","supportingDirectory","join","stringName","lang","localizationObj","Object","entries","dir","fs","promises","mkdir","recursive","strings","buffer","plistKey","localVersion","push","writeFile","groupName","group","ensureGroupRecursively","children","some","comment","addResourceFileToGroup","filepath","relative","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","addWarningIOS"],"sources":["../../src/ios/Locales.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport JsonFile from '@expo/json-file';\nimport fs from 'fs';\nimport { join, relative } from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { addResourceFileToGroup, ensureGroupRecursively, getProjectName } from './utils/Xcodeproj';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\n\ntype LocaleJson = Record<string, string>;\ntype ResolvedLocalesJson = Record<string, LocaleJson>;\ntype ExpoConfigLocales = NonNullable<ExpoConfig['locales']>;\n\nexport const withLocales: ConfigPlugin = (config) => {\n return withXcodeProject(config, async (config) => {\n config.modResults = await setLocalesAsync(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getLocales(\n config: Pick<ExpoConfig, 'locales'>\n): Record<string, string | LocaleJson> | null {\n return config.locales ?? null;\n}\n\nexport async function setLocalesAsync(\n config: Pick<ExpoConfig, 'locales'>,\n { projectRoot, project }: { projectRoot: string; project: XcodeProject }\n): Promise<XcodeProject> {\n const locales = getLocales(config);\n if (!locales) {\n return project;\n }\n // possibly validate CFBundleAllowMixedLocalizations is enabled\n const localesMap = await getResolvedLocalesAsync(projectRoot, locales);\n\n const projectName = getProjectName(projectRoot);\n const supportingDirectory = join(projectRoot, 'ios', projectName, 'Supporting');\n\n // TODO: Should we delete all before running? Revisit after we land on a lock file.\n const stringName = 'InfoPlist.strings';\n\n for (const [lang, localizationObj] of Object.entries(localesMap)) {\n const dir = join(supportingDirectory, `${lang}.lproj`);\n // await fs.ensureDir(dir);\n await fs.promises.mkdir(dir, { recursive: true });\n\n const strings = join(dir, stringName);\n const buffer = [];\n for (const [plistKey, localVersion] of Object.entries(localizationObj)) {\n buffer.push(`${plistKey} = \"${localVersion}\";`);\n }\n // Write the file to the file system.\n await fs.promises.writeFile(strings, buffer.join('\\n'));\n\n const groupName = `${projectName}/Supporting/${lang}.lproj`;\n // deep find the correct folder\n const group = ensureGroupRecursively(project, groupName);\n\n // Ensure the file doesn't already exist\n if (!group?.children.some(({ comment }) => comment === stringName)) {\n // Only write the file if it doesn't already exist.\n project = addResourceFileToGroup({\n filepath: relative(supportingDirectory, strings),\n groupName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n }\n\n return project;\n}\n\nexport async function getResolvedLocalesAsync(\n projectRoot: string,\n input: ExpoConfigLocales\n): Promise<ResolvedLocalesJson> {\n const locales: ResolvedLocalesJson = {};\n for (const [lang, localeJsonPath] of Object.entries(input)) {\n if (typeof localeJsonPath === 'string') {\n try {\n locales[lang] = await JsonFile.readAsync(join(projectRoot, localeJsonPath));\n } catch {\n // Add a warning when a json file cannot be parsed.\n addWarningIOS(\n `locales.${lang}`,\n `Failed to parse JSON of locale file for language: ${lang}`,\n 'https://docs.expo.dev/distribution/app-stores/#localizing-your-ios-app'\n );\n }\n } else {\n // In the off chance that someone defined the locales json in the config, pass it directly to the object.\n // We do this to make the types more elegant.\n locales[lang] = localeJsonPath;\n }\n }\n\n return locales;\n}\n"],"mappings":"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"}
package/build/ios/Maps.js CHANGED
@@ -169,7 +169,6 @@ function isReactNativeMapsAutolinked(config) {
169
169
  // config._internal.autolinkedModules.includes('react-native-maps')
170
170
  // );
171
171
  }
172
-
173
172
  const withMapsCocoaPods = (config, {
174
173
  useGoogleMaps
175
174
  }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Maps.js","names":["_fs","data","_interopRequireDefault","require","_path","_resolveFrom","_iosPlugins","_withDangerousMod","_generateCode","obj","__esModule","default","debug","MATCH_INIT","exports","withGoogleMapsKey","createInfoPlistPlugin","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","_config$ios$config$go","_config$ios","_config$ios$config","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","mergeContents","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","removeContents","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","withDangerousMod","filePath","modRequest","platformProjectRoot","contents","fs","promises","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","withAppDelegate","includes","modResults","language"],"sources":["../../src/ios/Maps.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\nexport const MATCH_INIT =\n /-\\s*\\(BOOL\\)\\s*application:\\s*\\(UIApplication\\s*\\*\\s*\\)\\s*\\w+\\s+didFinishLaunchingWithOptions:/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = (config) => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 2,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async (config) => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.promises.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.promises.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, (config) => {\n if (['objc', 'objcpp'].includes(config.modResults.language)) {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error(\n `Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`\n );\n }\n return config;\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Maps.js","names":["_fs","data","_interopRequireDefault","require","_path","_resolveFrom","_iosPlugins","_withDangerousMod","_generateCode","obj","__esModule","default","debug","MATCH_INIT","exports","withGoogleMapsKey","createInfoPlistPlugin","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","_config$ios$config$go","_config$ios","_config$ios$config","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","mergeContents","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","removeContents","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","withDangerousMod","filePath","modRequest","platformProjectRoot","contents","fs","promises","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","withAppDelegate","includes","modResults","language"],"sources":["../../src/ios/Maps.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\nexport const MATCH_INIT =\n /-\\s*\\(BOOL\\)\\s*application:\\s*\\(UIApplication\\s*\\*\\s*\\)\\s*\\w+\\s+didFinishLaunchingWithOptions:/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = (config) => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 2,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async (config) => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.promises.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.promises.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, (config) => {\n if (['objc', 'objcpp'].includes(config.modResults.language)) {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error(\n `Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`\n );\n }\n return config;\n });\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Name.js","names":["_Target","data","require","_Xcodeproj","_iosPlugins","withDisplayName","createInfoPlistPluginWithPropertyGuard","setDisplayName","infoPlistProperty","expoConfigProperty","exports","withName","setName","withProductName","config","withXcodeProject","modResults","setProductName","getName","name","configOrName","CFBundleDisplayName","infoPlist","CFBundleName","project","_getName","sanitizedName","quotedName","ensureQuotes","nativeTarget","findFirstNativeTarget","getBuildConfigurationsForListId","buildConfigurationList","forEach","item","buildSettings","PRODUCT_NAME","value","match"],"sources":["../../src/ios/Name.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { XcodeProject } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { findFirstNativeTarget } from './Target';\nimport {\n ConfigurationSectionEntry,\n getBuildConfigurationsForListId,\n sanitizedName,\n} from './utils/Xcodeproj';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createInfoPlistPluginWithPropertyGuard, withXcodeProject } from '../plugins/ios-plugins';\n\nexport const withDisplayName = createInfoPlistPluginWithPropertyGuard(\n setDisplayName,\n {\n infoPlistProperty: 'CFBundleDisplayName',\n expoConfigProperty: 'name',\n },\n 'withDisplayName'\n);\n\nexport const withName = createInfoPlistPluginWithPropertyGuard(\n setName,\n {\n infoPlistProperty: 'CFBundleName',\n expoConfigProperty: 'name',\n },\n 'withName'\n);\n\n/** Set the PRODUCT_NAME variable in the xcproj file based on the app.json name property. */\nexport const withProductName: ConfigPlugin = (config) => {\n return withXcodeProject(config, (config) => {\n config.modResults = setProductName(config, config.modResults);\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\n/**\n * CFBundleDisplayName is used for most things: the name on the home screen, in\n * notifications, and others.\n */\nexport function setDisplayName(\n configOrName: Pick<ExpoConfig, 'name'> | string,\n { CFBundleDisplayName, ...infoPlist }: InfoPlist\n): InfoPlist {\n let name: string | null = null;\n if (typeof configOrName === 'string') {\n name = configOrName;\n } else {\n name = getName(configOrName);\n }\n\n if (!name) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleDisplayName: name,\n };\n}\n\n/**\n * CFBundleName is recommended to be 16 chars or less and is used in lists, eg:\n * sometimes on the App Store\n */\nexport function setName(\n config: Pick<ExpoConfig, 'name'>,\n { CFBundleName, ...infoPlist }: InfoPlist\n): InfoPlist {\n const name = getName(config);\n\n if (!name) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleName: name,\n };\n}\n\nexport function setProductName(\n config: Pick<ExpoConfig, 'name'>,\n project: XcodeProject\n): XcodeProject {\n const name = sanitizedName(getName(config) ?? '');\n\n if (!name) {\n return project;\n }\n const quotedName = ensureQuotes(name);\n\n const [, nativeTarget] = findFirstNativeTarget(project);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList).forEach(\n ([, item]: ConfigurationSectionEntry) => {\n item.buildSettings.PRODUCT_NAME = quotedName;\n }\n );\n\n return project;\n}\n\nconst ensureQuotes = (value: string) => {\n if (!value.match(/^['\"]/)) {\n return `\"${value}\"`;\n }\n return value;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Name.js","names":["_Target","data","require","_Xcodeproj","_iosPlugins","withDisplayName","createInfoPlistPluginWithPropertyGuard","setDisplayName","infoPlistProperty","expoConfigProperty","exports","withName","setName","withProductName","config","withXcodeProject","modResults","setProductName","getName","name","configOrName","CFBundleDisplayName","infoPlist","CFBundleName","project","_getName","sanitizedName","quotedName","ensureQuotes","nativeTarget","findFirstNativeTarget","getBuildConfigurationsForListId","buildConfigurationList","forEach","item","buildSettings","PRODUCT_NAME","value","match"],"sources":["../../src/ios/Name.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport { XcodeProject } from 'xcode';\n\nimport { InfoPlist } from './IosConfig.types';\nimport { findFirstNativeTarget } from './Target';\nimport {\n ConfigurationSectionEntry,\n getBuildConfigurationsForListId,\n sanitizedName,\n} from './utils/Xcodeproj';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createInfoPlistPluginWithPropertyGuard, withXcodeProject } from '../plugins/ios-plugins';\n\nexport const withDisplayName = createInfoPlistPluginWithPropertyGuard(\n setDisplayName,\n {\n infoPlistProperty: 'CFBundleDisplayName',\n expoConfigProperty: 'name',\n },\n 'withDisplayName'\n);\n\nexport const withName = createInfoPlistPluginWithPropertyGuard(\n setName,\n {\n infoPlistProperty: 'CFBundleName',\n expoConfigProperty: 'name',\n },\n 'withName'\n);\n\n/** Set the PRODUCT_NAME variable in the xcproj file based on the app.json name property. */\nexport const withProductName: ConfigPlugin = (config) => {\n return withXcodeProject(config, (config) => {\n config.modResults = setProductName(config, config.modResults);\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\n/**\n * CFBundleDisplayName is used for most things: the name on the home screen, in\n * notifications, and others.\n */\nexport function setDisplayName(\n configOrName: Pick<ExpoConfig, 'name'> | string,\n { CFBundleDisplayName, ...infoPlist }: InfoPlist\n): InfoPlist {\n let name: string | null = null;\n if (typeof configOrName === 'string') {\n name = configOrName;\n } else {\n name = getName(configOrName);\n }\n\n if (!name) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleDisplayName: name,\n };\n}\n\n/**\n * CFBundleName is recommended to be 16 chars or less and is used in lists, eg:\n * sometimes on the App Store\n */\nexport function setName(\n config: Pick<ExpoConfig, 'name'>,\n { CFBundleName, ...infoPlist }: InfoPlist\n): InfoPlist {\n const name = getName(config);\n\n if (!name) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleName: name,\n };\n}\n\nexport function setProductName(\n config: Pick<ExpoConfig, 'name'>,\n project: XcodeProject\n): XcodeProject {\n const name = sanitizedName(getName(config) ?? '');\n\n if (!name) {\n return project;\n }\n const quotedName = ensureQuotes(name);\n\n const [, nativeTarget] = findFirstNativeTarget(project);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList).forEach(\n ([, item]: ConfigurationSectionEntry) => {\n item.buildSettings.PRODUCT_NAME = quotedName;\n }\n );\n\n return project;\n}\n\nconst ensureQuotes = (value: string) => {\n if (!value.match(/^['\"]/)) {\n return `\"${value}\"`;\n }\n return value;\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Orientation.js","names":["_iosPlugins","data","require","withOrientation","createInfoPlistPluginWithPropertyGuard","setOrientation","infoPlistProperty","expoConfigProperty","exports","getOrientation","config","_config$orientation","orientation","PORTRAIT_ORIENTATIONS","LANDSCAPE_ORIENTATIONS","getUISupportedInterfaceOrientations","infoPlist","UISupportedInterfaceOrientations"],"sources":["../../src/ios/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { InfoPlist, InterfaceOrientation } from './IosConfig.types';\nimport { createInfoPlistPluginWithPropertyGuard } from '../plugins/ios-plugins';\n\nexport const withOrientation = createInfoPlistPluginWithPropertyGuard(\n setOrientation,\n {\n infoPlistProperty: 'UISupportedInterfaceOrientations',\n expoConfigProperty: 'orientation',\n },\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return config.orientation ?? null;\n}\n\nexport const PORTRAIT_ORIENTATIONS: InterfaceOrientation[] = [\n 'UIInterfaceOrientationPortrait',\n 'UIInterfaceOrientationPortraitUpsideDown',\n];\n\nexport const LANDSCAPE_ORIENTATIONS: InterfaceOrientation[] = [\n 'UIInterfaceOrientationLandscapeLeft',\n 'UIInterfaceOrientationLandscapeRight',\n];\n\nfunction getUISupportedInterfaceOrientations(orientation: string | null): InterfaceOrientation[] {\n if (orientation === 'portrait') {\n return PORTRAIT_ORIENTATIONS;\n } else if (orientation === 'landscape') {\n return LANDSCAPE_ORIENTATIONS;\n } else {\n return [...PORTRAIT_ORIENTATIONS, ...LANDSCAPE_ORIENTATIONS];\n }\n}\n\nexport function setOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n infoPlist: InfoPlist\n): InfoPlist {\n const orientation = getOrientation(config);\n\n return {\n ...infoPlist,\n UISupportedInterfaceOrientations: getUISupportedInterfaceOrientations(orientation),\n };\n}\n"],"mappings":";;;;;;;;;AAGA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,eAAe,GAAG,IAAAC,oDAAsC,EACnEC,cAAc,EACd;EACEC,iBAAiB,EAAE,kCAAkC;EACrDC,kBAAkB,EAAE;AACtB,CAAC,EACD,iBAAiB,CAClB;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA;AAEK,SAASM,cAAcA,CAACC,MAAuC,EAAE;EAAA,IAAAC,mBAAA;EACtE,QAAAA,mBAAA,GAAOD,MAAM,CAACE,WAAW,cAAAD,mBAAA,cAAAA,mBAAA,GAAI,IAAI;AACnC;AAEO,MAAME,qBAA6C,GAAG,CAC3D,gCAAgC,EAChC,0CAA0C,CAC3C;AAACL,OAAA,CAAAK,qBAAA,GAAAA,qBAAA;AAEK,MAAMC,sBAA8C,GAAG,CAC5D,qCAAqC,EACrC,sCAAsC,CACvC;AAACN,OAAA,CAAAM,sBAAA,GAAAA,sBAAA;AAEF,SAASC,mCAAmCA,CAACH,WAA0B,EAA0B;EAC/F,IAAIA,WAAW,KAAK,UAAU,EAAE;IAC9B,OAAOC,qBAAqB;EAC9B,CAAC,MAAM,IAAID,WAAW,KAAK,WAAW,EAAE;IACtC,OAAOE,sBAAsB;EAC/B,CAAC,MAAM;IACL,OAAO,CAAC,GAAGD,qBAAqB,EAAE,GAAGC,sBAAsB,CAAC;EAC9D;AACF;AAEO,SAAST,cAAcA,CAC5BK,MAAuC,EACvCM,SAAoB,EACT;EACX,MAAMJ,WAAW,GAAGH,cAAc,CAACC,MAAM,CAAC;EAE1C,OAAO;IACL,GAAGM,SAAS;IACZC,gCAAgC,EAAEF,mCAAmC,CAACH,WAAW;EACnF,CAAC;AACH"}
1
+ {"version":3,"file":"Orientation.js","names":["_iosPlugins","data","require","withOrientation","createInfoPlistPluginWithPropertyGuard","setOrientation","infoPlistProperty","expoConfigProperty","exports","getOrientation","config","_config$orientation","orientation","PORTRAIT_ORIENTATIONS","LANDSCAPE_ORIENTATIONS","getUISupportedInterfaceOrientations","infoPlist","UISupportedInterfaceOrientations"],"sources":["../../src/ios/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { InfoPlist, InterfaceOrientation } from './IosConfig.types';\nimport { createInfoPlistPluginWithPropertyGuard } from '../plugins/ios-plugins';\n\nexport const withOrientation = createInfoPlistPluginWithPropertyGuard(\n setOrientation,\n {\n infoPlistProperty: 'UISupportedInterfaceOrientations',\n expoConfigProperty: 'orientation',\n },\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return config.orientation ?? null;\n}\n\nexport const PORTRAIT_ORIENTATIONS: InterfaceOrientation[] = [\n 'UIInterfaceOrientationPortrait',\n 'UIInterfaceOrientationPortraitUpsideDown',\n];\n\nexport const LANDSCAPE_ORIENTATIONS: InterfaceOrientation[] = [\n 'UIInterfaceOrientationLandscapeLeft',\n 'UIInterfaceOrientationLandscapeRight',\n];\n\nfunction getUISupportedInterfaceOrientations(orientation: string | null): InterfaceOrientation[] {\n if (orientation === 'portrait') {\n return PORTRAIT_ORIENTATIONS;\n } else if (orientation === 'landscape') {\n return LANDSCAPE_ORIENTATIONS;\n } else {\n return [...PORTRAIT_ORIENTATIONS, ...LANDSCAPE_ORIENTATIONS];\n }\n}\n\nexport function setOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n infoPlist: InfoPlist\n): InfoPlist {\n const orientation = getOrientation(config);\n\n return {\n ...infoPlist,\n UISupportedInterfaceOrientations: getUISupportedInterfaceOrientations(orientation),\n };\n}\n"],"mappings":";;;;;;;;;AAGA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,eAAe,GAAG,IAAAC,oDAAsC,EACnEC,cAAc,EACd;EACEC,iBAAiB,EAAE,kCAAkC;EACrDC,kBAAkB,EAAE;AACtB,CAAC,EACD,iBACF,CAAC;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA;AAEK,SAASM,cAAcA,CAACC,MAAuC,EAAE;EAAA,IAAAC,mBAAA;EACtE,QAAAA,mBAAA,GAAOD,MAAM,CAACE,WAAW,cAAAD,mBAAA,cAAAA,mBAAA,GAAI,IAAI;AACnC;AAEO,MAAME,qBAA6C,GAAG,CAC3D,gCAAgC,EAChC,0CAA0C,CAC3C;AAACL,OAAA,CAAAK,qBAAA,GAAAA,qBAAA;AAEK,MAAMC,sBAA8C,GAAG,CAC5D,qCAAqC,EACrC,sCAAsC,CACvC;AAACN,OAAA,CAAAM,sBAAA,GAAAA,sBAAA;AAEF,SAASC,mCAAmCA,CAACH,WAA0B,EAA0B;EAC/F,IAAIA,WAAW,KAAK,UAAU,EAAE;IAC9B,OAAOC,qBAAqB;EAC9B,CAAC,MAAM,IAAID,WAAW,KAAK,WAAW,EAAE;IACtC,OAAOE,sBAAsB;EAC/B,CAAC,MAAM;IACL,OAAO,CAAC,GAAGD,qBAAqB,EAAE,GAAGC,sBAAsB,CAAC;EAC9D;AACF;AAEO,SAAST,cAAcA,CAC5BK,MAAuC,EACvCM,SAAoB,EACT;EACX,MAAMJ,WAAW,GAAGH,cAAc,CAACC,MAAM,CAAC;EAE1C,OAAO;IACL,GAAGM,SAAS;IACZC,gCAAgC,EAAEF,mCAAmC,CAACH,WAAW;EACnF,CAAC;AACH"}