@expo/config-plugins 9.0.3 → 9.0.5

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.
@@ -124,6 +124,7 @@ function getInfoPlistTemplate() {
124
124
  CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',
125
125
  CFBundleInfoDictionaryVersion: '6.0',
126
126
  CFBundleSignature: '????',
127
+ LSMinimumSystemVersion: '12.0',
127
128
  LSRequiresIPhoneOS: true,
128
129
  NSAppTransportSecurity: {
129
130
  NSAllowsArbitraryLoads: true,
@@ -1 +1 @@
1
- {"version":3,"file":"withIosBaseMods.js","names":["_jsonFile","data","_interopRequireDefault","require","_plist","_assert","_fs","_interopRequireWildcard","_path","_xcode","_createBaseMod","_ios","_Entitlements","_Xcodeproj","_getInfoPlistPath","_modules","_sortObject","_warnings","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","CADisableMinimumFrameDurationOnPhone","defaultProviders","dangerous","provider","getFilePath","read","write","finalized","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","sortObject","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","getPbxproj","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","infoPlistPath","fileExists","addWarningIOS","getInfoPlistPath","ios","assert","entitlements","ensureApplicationTargetEntitlementsFileConfigured","Entitlements","getEntitlementsPath","ignoreExistingNativeFiles","fs","existsSync","podfile","getPodfilePath","podfileProperties","results","JsonFile","readAsync","writeAsync","withIosBaseMods","providers","props","withGeneratedBaseMods","platform","getIosModFileProviders"],"sources":["../../src/plugins/withIosBaseMods.ts"],"sourcesContent":["import JsonFile, { JSONObject, JSONValue } from '@expo/json-file';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport fs, { promises } from 'fs';\nimport path from 'path';\nimport xcode, { XcodeProject } from 'xcode';\n\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Entitlements, Paths } from '../ios';\nimport { ensureApplicationTargetEntitlementsFileConfigured } from '../ios/Entitlements';\nimport { InfoPlist } from '../ios/IosConfig.types';\nimport { getPbxproj } from '../ios/utils/Xcodeproj';\nimport { getInfoPlistPathFromPbxproj } from '../ios/utils/getInfoPlistPath';\nimport { fileExists } from '../utils/modules';\nimport { sortObject } from '../utils/sortObject';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n CADisableMinimumFrameDurationOnPhone: true,\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n finalized: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n // TODO: Get application AppDelegate file from pbxproj.\n return Paths.getAppDelegateFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath: string, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`\n expoPlist: provider<JSONObject>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot, projectName } }) {\n const supportingDirectory = path.join(platformProjectRoot, projectName!, 'Supporting');\n return path.resolve(supportingDirectory, 'Expo.plist');\n },\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return plist.parse(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (introspect) {\n return {};\n }\n throw error;\n }\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await writeFile(filePath, plist.build(sortObject(modResults)));\n },\n }),\n // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`\n xcodeproj: provider<XcodeProject>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPBXProjectPath(projectRoot);\n },\n async read(filePath) {\n const project = xcode.project(filePath);\n project.parseSync();\n return project;\n },\n async write(filePath, { modResults }) {\n await writeFile(filePath, modResults.writeSync());\n },\n }),\n // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`\n infoPlist: provider<InfoPlist, ForwardedBaseModOptions>({\n isIntrospective: true,\n async getFilePath(config) {\n let project: xcode.XcodeProject | null = null;\n try {\n project = getPbxproj(config.modRequest.projectRoot);\n } catch {\n // noop\n }\n\n // Only check / warn if a project actually exists, this'll provide\n // more accurate warning messages for users in managed projects.\n if (project) {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(project);\n\n if (infoPlistBuildProperty) {\n //: [root]/myapp/ios/MyApp/Info.plist\n const infoPlistPath = path.join(\n //: myapp/ios\n config.modRequest.platformProjectRoot,\n //: MyApp/Info.plist\n infoPlistBuildProperty\n );\n if (fileExists(infoPlistPath)) {\n return infoPlistPath;\n }\n addWarningIOS(\n 'mods.ios.infoPlist',\n `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`\n );\n } else {\n addWarningIOS('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');\n }\n }\n try {\n // Fallback on glob...\n return await Paths.getInfoPlistPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n async read(filePath, config) {\n // Apply all of the Info.plist values to the expo.ios.infoPlist object\n // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.infoPlist) config.ios.infoPlist = {};\n\n let modResults: InfoPlist;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Info.plist is empty');\n modResults = plist.parse(contents) as InfoPlist;\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the infoPlist object from the Expo config.\n modResults = getInfoPlistTemplate();\n }\n\n config.ios.infoPlist = {\n ...(modResults || {}),\n ...config.ios.infoPlist,\n };\n\n return config.ios.infoPlist!;\n },\n async write(filePath, config) {\n // Update the contents of the static infoPlist object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`\n entitlements: provider<JSONObject, ForwardedBaseModOptions>({\n isIntrospective: true,\n\n async getFilePath(config) {\n try {\n ensureApplicationTargetEntitlementsFileConfigured(config.modRequest.projectRoot);\n return Entitlements.getEntitlementsPath(config.modRequest.projectRoot) ?? '';\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n\n async read(filePath, config) {\n let modResults: JSONObject;\n try {\n if (!config.modRequest.ignoreExistingNativeFiles && fs.existsSync(filePath)) {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Entitlements plist is empty');\n modResults = plist.parse(contents);\n } else {\n modResults = getEntitlementsPlistTemplate();\n }\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the template file.\n modResults = getEntitlementsPlistTemplate();\n }\n\n // Apply all of the .entitlements values to the expo.ios.entitlements object\n // TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.entitlements) config.ios.entitlements = {};\n\n config.ios.entitlements = {\n ...(modResults || {}),\n ...config.ios.entitlements,\n };\n\n return config.ios.entitlements!;\n },\n\n async write(filePath, config) {\n // Update the contents of the static entitlements object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n\n podfile: provider<Paths.PodfileProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPodfilePath(projectRoot);\n },\n // @ts-expect-error\n async read(filePath) {\n // Note(cedric): this file is ruby, which is a 1-value subset of AppleLanguage and fails the type check\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n // Append a rule to supply Podfile.properties.json data to mods on `mods.ios.podfileProperties`\n podfileProperties: provider<Record<string, JSONValue>>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.resolve(platformProjectRoot, 'Podfile.properties.json');\n },\n async read(filePath) {\n let results: Record<string, JSONValue> = {};\n try {\n results = await JsonFile.readAsync(filePath);\n } catch {}\n return results;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await JsonFile.writeAsync(filePath, modResults);\n },\n }),\n};\n\ntype IosDefaultProviders = typeof defaultProviders;\n\nexport function withIosBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<IosDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<IosModName>(config, {\n ...props,\n platform: 'ios',\n providers: providers ?? getIosModFileProviders(),\n });\n}\n\nexport function getIosModFileProviders() {\n return defaultProviders;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"withIosBaseMods.js","names":["_jsonFile","data","_interopRequireDefault","require","_plist","_assert","_fs","_interopRequireWildcard","_path","_xcode","_createBaseMod","_ios","_Entitlements","_Xcodeproj","_getInfoPlistPath","_modules","_sortObject","_warnings","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSMinimumSystemVersion","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","CADisableMinimumFrameDurationOnPhone","defaultProviders","dangerous","provider","getFilePath","read","write","finalized","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","sortObject","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","getPbxproj","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","infoPlistPath","fileExists","addWarningIOS","getInfoPlistPath","ios","assert","entitlements","ensureApplicationTargetEntitlementsFileConfigured","Entitlements","getEntitlementsPath","ignoreExistingNativeFiles","fs","existsSync","podfile","getPodfilePath","podfileProperties","results","JsonFile","readAsync","writeAsync","withIosBaseMods","providers","props","withGeneratedBaseMods","platform","getIosModFileProviders"],"sources":["../../src/plugins/withIosBaseMods.ts"],"sourcesContent":["import JsonFile, { JSONObject, JSONValue } from '@expo/json-file';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport fs, { promises } from 'fs';\nimport path from 'path';\nimport xcode, { XcodeProject } from 'xcode';\n\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\nimport { ExportedConfig, ModConfig } from '../Plugin.types';\nimport { Entitlements, Paths } from '../ios';\nimport { ensureApplicationTargetEntitlementsFileConfigured } from '../ios/Entitlements';\nimport { InfoPlist } from '../ios/IosConfig.types';\nimport { getPbxproj } from '../ios/utils/Xcodeproj';\nimport { getInfoPlistPathFromPbxproj } from '../ios/utils/getInfoPlistPath';\nimport { fileExists } from '../utils/modules';\nimport { sortObject } from '../utils/sortObject';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSMinimumSystemVersion: '12.0',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n CADisableMinimumFrameDurationOnPhone: true,\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n finalized: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n // TODO: Get application AppDelegate file from pbxproj.\n return Paths.getAppDelegateFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath: string, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`\n expoPlist: provider<JSONObject>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot, projectName } }) {\n const supportingDirectory = path.join(platformProjectRoot, projectName!, 'Supporting');\n return path.resolve(supportingDirectory, 'Expo.plist');\n },\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return plist.parse(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (introspect) {\n return {};\n }\n throw error;\n }\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await writeFile(filePath, plist.build(sortObject(modResults)));\n },\n }),\n // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`\n xcodeproj: provider<XcodeProject>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPBXProjectPath(projectRoot);\n },\n async read(filePath) {\n const project = xcode.project(filePath);\n project.parseSync();\n return project;\n },\n async write(filePath, { modResults }) {\n await writeFile(filePath, modResults.writeSync());\n },\n }),\n // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`\n infoPlist: provider<InfoPlist, ForwardedBaseModOptions>({\n isIntrospective: true,\n async getFilePath(config) {\n let project: xcode.XcodeProject | null = null;\n try {\n project = getPbxproj(config.modRequest.projectRoot);\n } catch {\n // noop\n }\n\n // Only check / warn if a project actually exists, this'll provide\n // more accurate warning messages for users in managed projects.\n if (project) {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(project);\n\n if (infoPlistBuildProperty) {\n //: [root]/myapp/ios/MyApp/Info.plist\n const infoPlistPath = path.join(\n //: myapp/ios\n config.modRequest.platformProjectRoot,\n //: MyApp/Info.plist\n infoPlistBuildProperty\n );\n if (fileExists(infoPlistPath)) {\n return infoPlistPath;\n }\n addWarningIOS(\n 'mods.ios.infoPlist',\n `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`\n );\n } else {\n addWarningIOS('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');\n }\n }\n try {\n // Fallback on glob...\n return await Paths.getInfoPlistPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n async read(filePath, config) {\n // Apply all of the Info.plist values to the expo.ios.infoPlist object\n // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.infoPlist) config.ios.infoPlist = {};\n\n let modResults: InfoPlist;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Info.plist is empty');\n modResults = plist.parse(contents) as InfoPlist;\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the infoPlist object from the Expo config.\n modResults = getInfoPlistTemplate();\n }\n\n config.ios.infoPlist = {\n ...(modResults || {}),\n ...config.ios.infoPlist,\n };\n\n return config.ios.infoPlist!;\n },\n async write(filePath, config) {\n // Update the contents of the static infoPlist object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`\n entitlements: provider<JSONObject, ForwardedBaseModOptions>({\n isIntrospective: true,\n\n async getFilePath(config) {\n try {\n ensureApplicationTargetEntitlementsFileConfigured(config.modRequest.projectRoot);\n return Entitlements.getEntitlementsPath(config.modRequest.projectRoot) ?? '';\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n\n async read(filePath, config) {\n let modResults: JSONObject;\n try {\n if (!config.modRequest.ignoreExistingNativeFiles && fs.existsSync(filePath)) {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Entitlements plist is empty');\n modResults = plist.parse(contents);\n } else {\n modResults = getEntitlementsPlistTemplate();\n }\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the template file.\n modResults = getEntitlementsPlistTemplate();\n }\n\n // Apply all of the .entitlements values to the expo.ios.entitlements object\n // TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.entitlements) config.ios.entitlements = {};\n\n config.ios.entitlements = {\n ...(modResults || {}),\n ...config.ios.entitlements,\n };\n\n return config.ios.entitlements!;\n },\n\n async write(filePath, config) {\n // Update the contents of the static entitlements object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n\n podfile: provider<Paths.PodfileProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPodfilePath(projectRoot);\n },\n // @ts-expect-error\n async read(filePath) {\n // Note(cedric): this file is ruby, which is a 1-value subset of AppleLanguage and fails the type check\n return Paths.getFileInfo(filePath);\n },\n async write(filePath, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n\n // Append a rule to supply Podfile.properties.json data to mods on `mods.ios.podfileProperties`\n podfileProperties: provider<Record<string, JSONValue>>({\n isIntrospective: true,\n\n getFilePath({ modRequest: { platformProjectRoot } }) {\n return path.resolve(platformProjectRoot, 'Podfile.properties.json');\n },\n async read(filePath) {\n let results: Record<string, JSONValue> = {};\n try {\n results = await JsonFile.readAsync(filePath);\n } catch {}\n return results;\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await JsonFile.writeAsync(filePath, modResults);\n },\n }),\n};\n\ntype IosDefaultProviders = typeof defaultProviders;\n\nexport function withIosBaseMods(\n config: ExportedConfig,\n {\n providers,\n ...props\n }: ForwardedBaseModOptions & { providers?: Partial<IosDefaultProviders> } = {}\n): ExportedConfig {\n return withGeneratedBaseMods<IosModName>(config, {\n ...props,\n platform: 'ios',\n providers: providers ?? getIosModFileProviders(),\n });\n}\n\nexport function getIosModFileProviders() {\n return defaultProviders;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,16 @@
1
1
  import { ConfigPlugin, StaticPlugin } from '../Plugin.types';
2
2
  export declare const pluginFileName = "app.plugin.js";
3
+ /**
4
+ * Resolve the config plugin from a node module or package.
5
+ * If the module or package does not include a config plugin, this function throws a `PluginError`.
6
+ * The resolution is done in following order:
7
+ * 1. Is the reference a relative file path or an import specifier with file path? e.g. `./file.js`, `pkg/file.js` or `@org/pkg/file.js`?
8
+ * - Resolve the config plugin as-is
9
+ * 2. If the reference a module? e.g. `expo-font`
10
+ * - Resolve the root `app.plugin.js` file within the module, e.g. `expo-font/app.plugin.js`
11
+ * 3. Does the module have a valid config plugin in the `main` field?
12
+ * - Resolve the `main` entry point as config plugin
13
+ */
3
14
  export declare function resolvePluginForModule(projectRoot: string, pluginReference: string): {
4
15
  filePath: string;
5
16
  isPluginFile: boolean;
@@ -53,7 +53,17 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
53
53
  // Default plugin entry file name.
54
54
  const pluginFileName = exports.pluginFileName = 'app.plugin.js';
55
55
 
56
- // pluginReference is a node module or a file path, as user entered it in app.config.js
56
+ /**
57
+ * Resolve the config plugin from a node module or package.
58
+ * If the module or package does not include a config plugin, this function throws a `PluginError`.
59
+ * The resolution is done in following order:
60
+ * 1. Is the reference a relative file path or an import specifier with file path? e.g. `./file.js`, `pkg/file.js` or `@org/pkg/file.js`?
61
+ * - Resolve the config plugin as-is
62
+ * 2. If the reference a module? e.g. `expo-font`
63
+ * - Resolve the root `app.plugin.js` file within the module, e.g. `expo-font/app.plugin.js`
64
+ * 3. Does the module have a valid config plugin in the `main` field?
65
+ * - Resolve the `main` entry point as config plugin
66
+ */
57
67
  function resolvePluginForModule(projectRoot, pluginReference) {
58
68
  if (moduleNameIsDirectFileReference(pluginReference)) {
59
69
  // Only resolve `./file.js`, `package/file.js`, `@org/package/file.js`
@@ -73,15 +83,9 @@ function resolvePluginForModule(projectRoot, pluginReference) {
73
83
  filePath: pluginPackageFile
74
84
  };
75
85
  }
86
+ // Try to resole the `main` entry as config plugin
76
87
  const packageMainEntry = _resolveFrom().default.silent(projectRoot, pluginReference);
77
88
  if (packageMainEntry) {
78
- const relativePluginPath = packageMainEntry.replace(projectRoot, '').replace(/^\//, '');
79
- console.warn(`"${pluginReference}" config plugin is being resolved from its package.json main entry (${relativePluginPath}).
80
- This approach is deprecated and will throw an error in Expo SDK53.
81
-
82
- To fix this:
83
- 1. Report this issue to the maintainer of "${pluginReference}" - they need to migrate to using \`app.plugin.js\` instead.
84
- 2. For immediate unblocking, reference the config plugin file directly: ${relativePluginPath}`);
85
89
  return {
86
90
  isPluginFile: false,
87
91
  filePath: packageMainEntry
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.js","names":["_assert","data","_interopRequireDefault","require","path","_interopRequireWildcard","_resolveFrom","_errors","_modules","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","pluginFileName","exports","resolvePluginForModule","projectRoot","pluginReference","moduleNameIsDirectFileReference","pluginScriptFile","resolveFrom","silent","isPluginFile","endsWith","sep","filePath","moduleNameIsPackageReference","pluginPackageFile","fileExists","packageMainEntry","relativePluginPath","replace","console","warn","PluginError","pathIsFilePath","name","match","slashCount","split","length","startsWith","normalizeStaticPlugin","plugin","Array","isArray","assert","undefined","assertInternalProjectRoot","resolveConfigPluginFunction","resolveConfigPluginFunctionWithInfo","pluginFile","result","requirePluginFile","error","SyntaxError","learnMoreLink","pluginError","message","stack","resolveConfigPluginExport"],"sources":["../../src/utils/plugin-resolver.ts"],"sourcesContent":["import assert from 'assert';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { PluginError } from './errors';\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { fileExists } from './modules';\n// Default plugin entry file name.\nexport const pluginFileName = 'app.plugin.js';\n\n// pluginReference is a node module or a file path, as user entered it in app.config.js\nexport function resolvePluginForModule(\n projectRoot: string,\n pluginReference: string\n): { filePath: string; isPluginFile: boolean } {\n if (moduleNameIsDirectFileReference(pluginReference)) {\n // Only resolve `./file.js`, `package/file.js`, `@org/package/file.js`\n const pluginScriptFile = resolveFrom.silent(projectRoot, pluginReference);\n if (pluginScriptFile) {\n return {\n isPluginFile: pluginScriptFile.endsWith(path.sep + pluginFileName),\n filePath: pluginScriptFile,\n };\n }\n } else if (moduleNameIsPackageReference(pluginReference)) {\n // Only resolve `package -> package/app.plugin.js`, `@org/package -> @org/package/app.plugin.js`\n const pluginPackageFile = resolveFrom.silent(\n projectRoot,\n `${pluginReference}/${pluginFileName}`\n );\n if (pluginPackageFile && fileExists(pluginPackageFile)) {\n return { isPluginFile: true, filePath: pluginPackageFile };\n }\n const packageMainEntry = resolveFrom.silent(projectRoot, pluginReference);\n if (packageMainEntry) {\n const relativePluginPath = packageMainEntry.replace(projectRoot, '').replace(/^\\//, '');\n console.warn(\n `\"${pluginReference}\" config plugin is being resolved from its package.json main entry (${relativePluginPath}).\nThis approach is deprecated and will throw an error in Expo SDK53.\n\nTo fix this:\n1. Report this issue to the maintainer of \"${pluginReference}\" - they need to migrate to using \\`app.plugin.js\\` instead.\n2. For immediate unblocking, reference the config plugin file directly: ${relativePluginPath}`\n );\n return { isPluginFile: false, filePath: packageMainEntry };\n }\n }\n\n throw new PluginError(\n `Failed to resolve plugin for module \"${pluginReference}\" relative to \"${projectRoot}\"`,\n 'PLUGIN_NOT_FOUND'\n );\n}\n\n// TODO: Test windows\nfunction pathIsFilePath(name: string): boolean {\n // Matches lines starting with: . / ~/\n return !!name.match(/^(\\.|~\\/|\\/)/g);\n}\n\nexport function moduleNameIsDirectFileReference(name: string): boolean {\n if (pathIsFilePath(name)) {\n return true;\n }\n\n const slashCount = name.split(path.sep)?.length;\n // Orgs (like @expo/config ) should have more than one slash to be a direct file.\n if (name.startsWith('@')) {\n return slashCount > 2;\n }\n\n // Regular packages should be considered direct reference if they have more than one slash.\n return slashCount > 1;\n}\n\nexport function moduleNameIsPackageReference(name: string): boolean {\n const slashCount = name.split('/')?.length;\n return name.startsWith('@') ? slashCount === 2 : slashCount === 1;\n}\n\nexport function normalizeStaticPlugin(plugin: StaticPlugin | ConfigPlugin | string): StaticPlugin {\n if (Array.isArray(plugin)) {\n assert(\n plugin.length > 0 && plugin.length < 3,\n `Wrong number of arguments provided for static config plugin, expected either 1 or 2, got ${plugin.length}`\n );\n return plugin;\n }\n return [plugin, undefined];\n}\n\nexport function assertInternalProjectRoot(projectRoot?: string): asserts projectRoot {\n assert(\n projectRoot,\n `Unexpected: Config \\`_internal.projectRoot\\` isn't defined by expo-cli, this is a bug.`\n );\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunction(projectRoot: string, pluginReference: string) {\n const { plugin } = resolveConfigPluginFunctionWithInfo(projectRoot, pluginReference);\n return plugin;\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunctionWithInfo(projectRoot: string, pluginReference: string) {\n const { filePath: pluginFile, isPluginFile } = resolvePluginForModule(\n projectRoot,\n pluginReference\n );\n let result: any;\n try {\n result = requirePluginFile(pluginFile);\n } catch (error) {\n if (error instanceof SyntaxError) {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module has a syntax error, then it probably doesn't have an official config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n const pluginError = new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin.\\n${learnMoreLink}\\n\\n${error.message}`,\n 'INVALID_PLUGIN_IMPORT'\n );\n pluginError.stack = error.stack;\n throw pluginError;\n }\n }\n throw error;\n }\n\n const plugin = resolveConfigPluginExport({\n plugin: result,\n pluginFile,\n pluginReference,\n isPluginFile,\n });\n return { plugin, pluginFile, pluginReference, isPluginFile };\n}\n\n/**\n * - Resolve the exported contents of an Expo config (be it default or module.exports)\n * - Assert no promise exports\n * - Return config type\n * - Serialize config\n *\n * @param props.plugin plugin results\n * @param props.pluginFile plugin file path\n * @param props.pluginReference the string used to reference the plugin\n * @param props.isPluginFile is file path from the app.plugin.js module root\n */\nexport function resolveConfigPluginExport({\n plugin,\n pluginFile,\n pluginReference,\n isPluginFile,\n}: {\n plugin: any;\n pluginFile: string;\n pluginReference: string;\n isPluginFile: boolean;\n}): ConfigPlugin<unknown> {\n if (plugin.default != null) {\n plugin = plugin.default;\n }\n if (typeof plugin !== 'function') {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module does not export a function then it probably doesn't have a config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n throw new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin. Module must export a function from file: ${pluginFile}\\n${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n throw new PluginError(\n `Plugin \"${pluginReference}\" must export a function from file: ${pluginFile}. ${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n\n return plugin;\n}\n\nfunction requirePluginFile(filePath: string): any {\n try {\n return require(filePath);\n } catch (error) {\n // TODO: Improve error messages\n throw error;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"plugin-resolver.js","names":["_assert","data","_interopRequireDefault","require","path","_interopRequireWildcard","_resolveFrom","_errors","_modules","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","pluginFileName","exports","resolvePluginForModule","projectRoot","pluginReference","moduleNameIsDirectFileReference","pluginScriptFile","resolveFrom","silent","isPluginFile","endsWith","sep","filePath","moduleNameIsPackageReference","pluginPackageFile","fileExists","packageMainEntry","PluginError","pathIsFilePath","name","match","slashCount","split","length","startsWith","normalizeStaticPlugin","plugin","Array","isArray","assert","undefined","assertInternalProjectRoot","resolveConfigPluginFunction","resolveConfigPluginFunctionWithInfo","pluginFile","result","requirePluginFile","error","SyntaxError","learnMoreLink","pluginError","message","stack","resolveConfigPluginExport"],"sources":["../../src/utils/plugin-resolver.ts"],"sourcesContent":["import assert from 'assert';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { PluginError } from './errors';\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { fileExists } from './modules';\n// Default plugin entry file name.\nexport const pluginFileName = 'app.plugin.js';\n\n/**\n * Resolve the config plugin from a node module or package.\n * If the module or package does not include a config plugin, this function throws a `PluginError`.\n * The resolution is done in following order:\n * 1. Is the reference a relative file path or an import specifier with file path? e.g. `./file.js`, `pkg/file.js` or `@org/pkg/file.js`?\n * - Resolve the config plugin as-is\n * 2. If the reference a module? e.g. `expo-font`\n * - Resolve the root `app.plugin.js` file within the module, e.g. `expo-font/app.plugin.js`\n * 3. Does the module have a valid config plugin in the `main` field?\n * - Resolve the `main` entry point as config plugin\n */\nexport function resolvePluginForModule(\n projectRoot: string,\n pluginReference: string\n): { filePath: string; isPluginFile: boolean } {\n if (moduleNameIsDirectFileReference(pluginReference)) {\n // Only resolve `./file.js`, `package/file.js`, `@org/package/file.js`\n const pluginScriptFile = resolveFrom.silent(projectRoot, pluginReference);\n if (pluginScriptFile) {\n return {\n isPluginFile: pluginScriptFile.endsWith(path.sep + pluginFileName),\n filePath: pluginScriptFile,\n };\n }\n } else if (moduleNameIsPackageReference(pluginReference)) {\n // Only resolve `package -> package/app.plugin.js`, `@org/package -> @org/package/app.plugin.js`\n const pluginPackageFile = resolveFrom.silent(\n projectRoot,\n `${pluginReference}/${pluginFileName}`\n );\n if (pluginPackageFile && fileExists(pluginPackageFile)) {\n return { isPluginFile: true, filePath: pluginPackageFile };\n }\n // Try to resole the `main` entry as config plugin\n const packageMainEntry = resolveFrom.silent(projectRoot, pluginReference);\n if (packageMainEntry) {\n return { isPluginFile: false, filePath: packageMainEntry };\n }\n }\n\n throw new PluginError(\n `Failed to resolve plugin for module \"${pluginReference}\" relative to \"${projectRoot}\"`,\n 'PLUGIN_NOT_FOUND'\n );\n}\n\n// TODO: Test windows\nfunction pathIsFilePath(name: string): boolean {\n // Matches lines starting with: . / ~/\n return !!name.match(/^(\\.|~\\/|\\/)/g);\n}\n\nexport function moduleNameIsDirectFileReference(name: string): boolean {\n if (pathIsFilePath(name)) {\n return true;\n }\n\n const slashCount = name.split(path.sep)?.length;\n // Orgs (like @expo/config ) should have more than one slash to be a direct file.\n if (name.startsWith('@')) {\n return slashCount > 2;\n }\n\n // Regular packages should be considered direct reference if they have more than one slash.\n return slashCount > 1;\n}\n\nexport function moduleNameIsPackageReference(name: string): boolean {\n const slashCount = name.split('/')?.length;\n return name.startsWith('@') ? slashCount === 2 : slashCount === 1;\n}\n\nexport function normalizeStaticPlugin(plugin: StaticPlugin | ConfigPlugin | string): StaticPlugin {\n if (Array.isArray(plugin)) {\n assert(\n plugin.length > 0 && plugin.length < 3,\n `Wrong number of arguments provided for static config plugin, expected either 1 or 2, got ${plugin.length}`\n );\n return plugin;\n }\n return [plugin, undefined];\n}\n\nexport function assertInternalProjectRoot(projectRoot?: string): asserts projectRoot {\n assert(\n projectRoot,\n `Unexpected: Config \\`_internal.projectRoot\\` isn't defined by expo-cli, this is a bug.`\n );\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunction(projectRoot: string, pluginReference: string) {\n const { plugin } = resolveConfigPluginFunctionWithInfo(projectRoot, pluginReference);\n return plugin;\n}\n\n// Resolve the module function and assert type\nexport function resolveConfigPluginFunctionWithInfo(projectRoot: string, pluginReference: string) {\n const { filePath: pluginFile, isPluginFile } = resolvePluginForModule(\n projectRoot,\n pluginReference\n );\n let result: any;\n try {\n result = requirePluginFile(pluginFile);\n } catch (error) {\n if (error instanceof SyntaxError) {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module has a syntax error, then it probably doesn't have an official config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n const pluginError = new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin.\\n${learnMoreLink}\\n\\n${error.message}`,\n 'INVALID_PLUGIN_IMPORT'\n );\n pluginError.stack = error.stack;\n throw pluginError;\n }\n }\n throw error;\n }\n\n const plugin = resolveConfigPluginExport({\n plugin: result,\n pluginFile,\n pluginReference,\n isPluginFile,\n });\n return { plugin, pluginFile, pluginReference, isPluginFile };\n}\n\n/**\n * - Resolve the exported contents of an Expo config (be it default or module.exports)\n * - Assert no promise exports\n * - Return config type\n * - Serialize config\n *\n * @param props.plugin plugin results\n * @param props.pluginFile plugin file path\n * @param props.pluginReference the string used to reference the plugin\n * @param props.isPluginFile is file path from the app.plugin.js module root\n */\nexport function resolveConfigPluginExport({\n plugin,\n pluginFile,\n pluginReference,\n isPluginFile,\n}: {\n plugin: any;\n pluginFile: string;\n pluginReference: string;\n isPluginFile: boolean;\n}): ConfigPlugin<unknown> {\n if (plugin.default != null) {\n plugin = plugin.default;\n }\n if (typeof plugin !== 'function') {\n const learnMoreLink = `Learn more: https://docs.expo.dev/guides/config-plugins/#creating-a-plugin`;\n // If the plugin reference is a node module, and that node module does not export a function then it probably doesn't have a config plugin.\n if (!isPluginFile && !moduleNameIsDirectFileReference(pluginReference)) {\n throw new PluginError(\n `Package \"${pluginReference}\" does not contain a valid config plugin. Module must export a function from file: ${pluginFile}\\n${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n throw new PluginError(\n `Plugin \"${pluginReference}\" must export a function from file: ${pluginFile}. ${learnMoreLink}`,\n 'INVALID_PLUGIN_TYPE'\n );\n }\n\n return plugin;\n}\n\nfunction requirePluginFile(filePath: string): any {\n try {\n return require(filePath);\n } catch (error) {\n // TODO: Improve error messages\n throw error;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/config-plugins",
3
- "version": "9.0.3",
3
+ "version": "9.0.5",
4
4
  "description": "A library for Expo config plugins",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -57,5 +57,5 @@
57
57
  "publishConfig": {
58
58
  "access": "public"
59
59
  },
60
- "gitHead": "fc8a1408cab82e003dd2424db2994d7dea958067"
60
+ "gitHead": "d97ae0839fa465cee14e13ca38f3c6c84c124d82"
61
61
  }