@expo/config-plugins 5.0.2 → 5.0.4
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.
|
@@ -60,11 +60,11 @@ exports.withPermissions = withPermissions;
|
|
|
60
60
|
const withBlockedPermissions = (config, permissions) => {
|
|
61
61
|
var _config$android;
|
|
62
62
|
|
|
63
|
-
const resolvedPermissions = (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean);
|
|
63
|
+
const resolvedPermissions = prefixAndroidPermissionsIfNecessary((Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean));
|
|
64
64
|
|
|
65
65
|
if (config !== null && config !== void 0 && (_config$android = config.android) !== null && _config$android !== void 0 && _config$android.permissions && Array.isArray(config.android.permissions)) {
|
|
66
66
|
// Remove any static config permissions
|
|
67
|
-
config.android.permissions = config.android.permissions.filter(permission => !resolvedPermissions.includes(permission));
|
|
67
|
+
config.android.permissions = prefixAndroidPermissionsIfNecessary(config.android.permissions).filter(permission => !resolvedPermissions.includes(permission));
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
return (0, _androidPlugins().withAndroidManifest)(config, async config => {
|
|
@@ -95,7 +95,7 @@ function addBlockedPermissions(androidManifest, permissions) {
|
|
|
95
95
|
androidManifest.manifest['uses-permission'] = [];
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
for (const permission of permissions) {
|
|
98
|
+
for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {
|
|
99
99
|
androidManifest.manifest['uses-permission'] = ensureBlockedPermission(androidManifest.manifest['uses-permission'], permission);
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Permissions.js","names":["USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","withBlockedPermissions","resolvedPermissions","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","prefixAndroidPermissionsIfNecessary","map","getAndroidPermissions","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = (Array.isArray(permissions) ? permissions : [permissions]).filter(\n Boolean\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = config.android.permissions.filter(\n (permission) => !resolvedPermissions.includes(permission)\n );\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of permissions) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Permissions.js","names":["USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","withBlockedPermissions","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = prefixAndroidPermissionsIfNecessary(\n (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean)\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = prefixAndroidPermissionsIfNecessary(\n config.android.permissions\n ).filter((permission) => !resolvedPermissions.includes(permission));\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
|
package/build/ios/Scheme.js
CHANGED
|
@@ -71,7 +71,7 @@ function appendScheme(scheme, infoPlist) {
|
|
|
71
71
|
|
|
72
72
|
const existingSchemes = (_infoPlist$CFBundleUR = infoPlist.CFBundleURLTypes) !== null && _infoPlist$CFBundleUR !== void 0 ? _infoPlist$CFBundleUR : [];
|
|
73
73
|
|
|
74
|
-
if (existingSchemes.some(({
|
|
74
|
+
if (existingSchemes !== null && existingSchemes !== void 0 && existingSchemes.some(({
|
|
75
75
|
CFBundleURLSchemes
|
|
76
76
|
}) => CFBundleURLSchemes.includes(scheme))) {
|
|
77
77
|
return infoPlist;
|
|
@@ -113,7 +113,7 @@ function removeScheme(scheme, infoPlist) {
|
|
|
113
113
|
function hasScheme(scheme, infoPlist) {
|
|
114
114
|
const existingSchemes = infoPlist.CFBundleURLTypes;
|
|
115
115
|
if (!Array.isArray(existingSchemes)) return false;
|
|
116
|
-
return existingSchemes.some(({
|
|
116
|
+
return existingSchemes === null || existingSchemes === void 0 ? void 0 : existingSchemes.some(({
|
|
117
117
|
CFBundleURLSchemes: schemes
|
|
118
118
|
}) => Array.isArray(schemes) ? schemes.includes(scheme) : false);
|
|
119
119
|
}
|
package/build/ios/Scheme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scheme.js","names":["withScheme","createInfoPlistPluginWithPropertyGuard","setScheme","infoPlistProperty","expoConfigProperty","getScheme","config","Array","isArray","scheme","validate","value","filter","infoPlist","ios","bundleIdentifier","push","length","CFBundleURLTypes","CFBundleURLSchemes","appendScheme","existingSchemes","some","includes","removeScheme","map","bundleUrlType","index","indexOf","splice","undefined","Boolean","hasScheme","schemes","getSchemesFromPlist","reduce"],"sources":["../../src/ios/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createInfoPlistPluginWithPropertyGuard } from '../plugins/ios-plugins';\nimport { InfoPlist, URLScheme } from './IosConfig.types';\n\nexport const withScheme = createInfoPlistPluginWithPropertyGuard(\n setScheme,\n {\n infoPlistProperty: 'CFBundleURLTypes',\n expoConfigProperty: 'scheme',\n },\n 'withScheme'\n);\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => {\n return typeof value === 'string';\n };\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\nexport function setScheme(\n config: Partial<Pick<ExpoConfig, 'scheme' | 'ios'>>,\n infoPlist: InfoPlist\n): InfoPlist {\n const scheme = [\n ...getScheme(config),\n // @ts-ignore: TODO: ios.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.ios ?? {}),\n ];\n // Add the bundle identifier to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.ios?.bundleIdentifier) {\n scheme.push(config.ios.bundleIdentifier);\n }\n if (scheme.length === 0) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleURLTypes: [{ CFBundleURLSchemes: scheme }],\n };\n}\n\nexport function appendScheme(scheme: string | null, infoPlist: InfoPlist): InfoPlist {\n if (!scheme) {\n return infoPlist;\n }\n\n const existingSchemes = infoPlist.CFBundleURLTypes ?? [];\n if (existingSchemes
|
|
1
|
+
{"version":3,"file":"Scheme.js","names":["withScheme","createInfoPlistPluginWithPropertyGuard","setScheme","infoPlistProperty","expoConfigProperty","getScheme","config","Array","isArray","scheme","validate","value","filter","infoPlist","ios","bundleIdentifier","push","length","CFBundleURLTypes","CFBundleURLSchemes","appendScheme","existingSchemes","some","includes","removeScheme","map","bundleUrlType","index","indexOf","splice","undefined","Boolean","hasScheme","schemes","getSchemesFromPlist","reduce"],"sources":["../../src/ios/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createInfoPlistPluginWithPropertyGuard } from '../plugins/ios-plugins';\nimport { InfoPlist, URLScheme } from './IosConfig.types';\n\nexport const withScheme = createInfoPlistPluginWithPropertyGuard(\n setScheme,\n {\n infoPlistProperty: 'CFBundleURLTypes',\n expoConfigProperty: 'scheme',\n },\n 'withScheme'\n);\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => {\n return typeof value === 'string';\n };\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\nexport function setScheme(\n config: Partial<Pick<ExpoConfig, 'scheme' | 'ios'>>,\n infoPlist: InfoPlist\n): InfoPlist {\n const scheme = [\n ...getScheme(config),\n // @ts-ignore: TODO: ios.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.ios ?? {}),\n ];\n // Add the bundle identifier to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.ios?.bundleIdentifier) {\n scheme.push(config.ios.bundleIdentifier);\n }\n if (scheme.length === 0) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleURLTypes: [{ CFBundleURLSchemes: scheme }],\n };\n}\n\nexport function appendScheme(scheme: string | null, infoPlist: InfoPlist): InfoPlist {\n if (!scheme) {\n return infoPlist;\n }\n\n const existingSchemes = infoPlist.CFBundleURLTypes ?? [];\n if (existingSchemes?.some(({ CFBundleURLSchemes }) => CFBundleURLSchemes.includes(scheme))) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleURLTypes: [\n ...existingSchemes,\n {\n CFBundleURLSchemes: [scheme],\n },\n ],\n };\n}\n\nexport function removeScheme(scheme: string | null, infoPlist: InfoPlist): InfoPlist {\n if (!scheme) {\n return infoPlist;\n }\n\n // No need to remove if we don't have any\n if (!infoPlist.CFBundleURLTypes) {\n return infoPlist;\n }\n\n infoPlist.CFBundleURLTypes = infoPlist.CFBundleURLTypes.map((bundleUrlType) => {\n const index = bundleUrlType.CFBundleURLSchemes.indexOf(scheme);\n if (index > -1) {\n bundleUrlType.CFBundleURLSchemes.splice(index, 1);\n if (bundleUrlType.CFBundleURLSchemes.length === 0) {\n return undefined;\n }\n }\n return bundleUrlType;\n }).filter(Boolean) as URLScheme[];\n\n return infoPlist;\n}\n\nexport function hasScheme(scheme: string, infoPlist: InfoPlist): boolean {\n const existingSchemes = infoPlist.CFBundleURLTypes;\n\n if (!Array.isArray(existingSchemes)) return false;\n\n return existingSchemes?.some(({ CFBundleURLSchemes: schemes }: any) =>\n Array.isArray(schemes) ? schemes.includes(scheme) : false\n );\n}\n\nexport function getSchemesFromPlist(infoPlist: InfoPlist): string[] {\n if (Array.isArray(infoPlist.CFBundleURLTypes)) {\n return infoPlist.CFBundleURLTypes.reduce<string[]>((schemes, { CFBundleURLSchemes }) => {\n if (Array.isArray(CFBundleURLSchemes)) {\n return [...schemes, ...CFBundleURLSchemes];\n }\n return schemes;\n }, []);\n }\n return [];\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withIosBaseMods.js","names":["readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","defaultProviders","dangerous","provider","getFilePath","read","write","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","sortObject","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","getPbxproj","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","infoPlistPath","fileExists","addWarningIOS","getInfoPlistPath","ios","assert","entitlements","ensureApplicationTargetEntitlementsFileConfigured","Entitlements","getEntitlementsPath","fs","existsSync","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 { 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';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getAppDelegateFilePath(projectRoot);\n },\n async read(filePath) {\n return Paths.getFileInfo(filePath);\n },\n async write(filePath: string, { modResults: { contents } }) {\n await writeFile(filePath, contents);\n },\n }),\n // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`\n expoPlist: provider<JSONObject>({\n isIntrospective: true,\n getFilePath({ modRequest: { platformProjectRoot, projectName } }) {\n const supportingDirectory = path.join(platformProjectRoot, projectName!, 'Supporting');\n return path.resolve(supportingDirectory, 'Expo.plist');\n },\n async read(filePath, { modRequest: { introspect } }) {\n try {\n return plist.parse(await readFile(filePath, 'utf8'));\n } catch (error) {\n if (introspect) {\n return {};\n }\n throw error;\n }\n },\n async write(filePath, { modResults, modRequest: { introspect } }) {\n if (introspect) {\n return;\n }\n await writeFile(filePath, plist.build(sortObject(modResults)));\n },\n }),\n // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`\n xcodeproj: provider<XcodeProject>({\n getFilePath({ modRequest: { projectRoot } }) {\n return Paths.getPBXProjectPath(projectRoot);\n },\n async read(filePath) {\n const project = xcode.project(filePath);\n project.parseSync();\n return project;\n },\n async write(filePath, { modResults }) {\n await writeFile(filePath, modResults.writeSync());\n },\n }),\n // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`\n infoPlist: provider<InfoPlist, ForwardedBaseModOptions>({\n isIntrospective: true,\n async getFilePath(config) {\n let project: xcode.XcodeProject | null = null;\n try {\n project = getPbxproj(config.modRequest.projectRoot);\n } catch {\n // noop\n }\n\n // Only check / warn if a project actually exists, this'll provide\n // more accurate warning messages for users in managed projects.\n if (project) {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(project);\n\n if (infoPlistBuildProperty) {\n //: [root]/myapp/ios/MyApp/Info.plist\n const infoPlistPath = path.join(\n //: myapp/ios\n config.modRequest.platformProjectRoot,\n //: MyApp/Info.plist\n infoPlistBuildProperty\n );\n if (fileExists(infoPlistPath)) {\n return infoPlistPath;\n }\n addWarningIOS(\n 'mods.ios.infoPlist',\n `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`\n );\n } else {\n addWarningIOS('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');\n }\n }\n try {\n // Fallback on glob...\n return await Paths.getInfoPlistPath(config.modRequest.projectRoot);\n } catch (error: any) {\n if (config.modRequest.introspect) {\n // fallback to an empty string in introspection mode.\n return '';\n }\n throw error;\n }\n },\n async read(filePath, config) {\n // Apply all of the Info.plist values to the expo.ios.infoPlist object\n // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.\n if (!config.ios) config.ios = {};\n if (!config.ios.infoPlist) config.ios.infoPlist = {};\n\n let modResults: InfoPlist;\n try {\n const contents = await readFile(filePath, 'utf8');\n assert(contents, 'Info.plist is empty');\n modResults = plist.parse(contents) as InfoPlist;\n } catch (error: any) {\n // Throw errors in introspection mode.\n if (!config.modRequest.introspect) {\n throw error;\n }\n // Fallback to using the infoPlist object from the Expo config.\n modResults = getInfoPlistTemplate();\n }\n\n config.ios.infoPlist = {\n ...(modResults || {}),\n ...config.ios.infoPlist,\n };\n\n return config.ios.infoPlist!;\n },\n async write(filePath, config) {\n // Update the contents of the static infoPlist object\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n\n // Return early without writing, in introspection mode.\n if (config.modRequest.introspect) {\n return;\n }\n\n await writeFile(filePath, plist.build(sortObject(config.modResults)));\n },\n }),\n // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`\n entitlements: provider<JSONObject, ForwardedBaseModOptions>({\n isIntrospective: true,\n\n async getFilePath(config) {\n try {\n 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 (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 // 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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"}
|
|
1
|
+
{"version":3,"file":"withIosBaseMods.js","names":["readFile","writeFile","promises","getEntitlementsPlistTemplate","getInfoPlistTemplate","CFBundleDevelopmentRegion","CFBundleExecutable","CFBundleIdentifier","CFBundleName","CFBundlePackageType","CFBundleInfoDictionaryVersion","CFBundleSignature","LSRequiresIPhoneOS","NSAppTransportSecurity","NSAllowsArbitraryLoads","NSExceptionDomains","localhost","NSExceptionAllowsInsecureHTTPLoads","UILaunchStoryboardName","UIRequiredDeviceCapabilities","UIViewControllerBasedStatusBarAppearance","UIStatusBarStyle","defaultProviders","dangerous","provider","getFilePath","read","write","appDelegate","modRequest","projectRoot","Paths","getAppDelegateFilePath","filePath","getFileInfo","modResults","contents","expoPlist","isIntrospective","platformProjectRoot","projectName","supportingDirectory","path","join","resolve","introspect","plist","parse","error","build","sortObject","xcodeproj","getPBXProjectPath","project","xcode","parseSync","writeSync","infoPlist","config","getPbxproj","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","infoPlistPath","fileExists","addWarningIOS","getInfoPlistPath","ios","assert","entitlements","ensureApplicationTargetEntitlementsFileConfigured","Entitlements","getEntitlementsPath","fs","existsSync","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 { 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';\nimport { ForwardedBaseModOptions, provider, withGeneratedBaseMods } from './createBaseMod';\n\nconst { readFile, writeFile } = promises;\n\ntype IosModName = keyof Required<ModConfig>['ios'];\n\nfunction getEntitlementsPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {};\n}\n\nfunction getInfoPlistTemplate() {\n // TODO: Fetch the versioned template file if possible\n return {\n CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',\n CFBundleExecutable: '$(EXECUTABLE_NAME)',\n CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',\n CFBundleName: '$(PRODUCT_NAME)',\n CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',\n CFBundleInfoDictionaryVersion: '6.0',\n CFBundleSignature: '????',\n LSRequiresIPhoneOS: true,\n NSAppTransportSecurity: {\n NSAllowsArbitraryLoads: true,\n NSExceptionDomains: {\n localhost: {\n NSExceptionAllowsInsecureHTTPLoads: true,\n },\n },\n },\n UILaunchStoryboardName: 'SplashScreen',\n UIRequiredDeviceCapabilities: ['armv7'],\n UIViewControllerBasedStatusBarAppearance: false,\n UIStatusBarStyle: 'UIStatusBarStyleDefault',\n };\n}\n\nconst defaultProviders = {\n dangerous: provider<unknown>({\n getFilePath() {\n return '';\n },\n async read() {\n return {};\n },\n async write() {},\n }),\n // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`\n appDelegate: provider<Paths.AppDelegateProjectFile>({\n getFilePath({ modRequest: { projectRoot } }) {\n // 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 (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 // 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/config-plugins",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "A library for Expo config plugins",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "1a87dcc55895a9e16e3d4fd0fa78f2244c1d961f"
|
|
60
60
|
}
|