UNPKG

knip

Version:

Find unused files, dependencies and exports in your TypeScript and JavaScript projects

53 lines (52 loc) 2.35 kB
import { toDependency, toProductionDependency } from '../../util/input.js'; import { getPackageNameFromModuleSpecifier } from '../../util/modules.js'; export const getDependencies = async (localConfig, { manifest }) => { const expoConfig = typeof localConfig === 'function' ? localConfig() : localConfig; const config = 'expo' in expoConfig ? expoConfig.expo : expoConfig; const platforms = config.platforms ?? ['ios', 'android']; const pluginPackages = config.plugins ?.map(plugin => { const pluginName = Array.isArray(plugin) ? plugin[0] : plugin; return getPackageNameFromModuleSpecifier(pluginName); }) .filter(Boolean) ?? []; const inputs = new Set(pluginPackages.map(id => toDependency(id))); const allowedPackages = ['expo-atlas', 'expo-dev-client']; const allowedProductionPackages = ['expo-insights']; const manifestDependencies = Object.keys(manifest.dependencies ?? {}); for (const pkg of allowedPackages) { if (manifestDependencies.includes(pkg)) { inputs.add(toDependency(pkg)); } } for (const pkg of allowedProductionPackages) { if (manifestDependencies.includes(pkg)) { inputs.add(toProductionDependency(pkg)); } } if (config.updates?.enabled !== false) { inputs.add(toProductionDependency('expo-updates')); } if (config.notification) { inputs.add(toProductionDependency('expo-notifications')); } const isExpoRouter = manifest.main === 'expo-router/entry'; if (isExpoRouter) { inputs.add(toProductionDependency('expo-router')); } if (platforms.includes('web')) { inputs.add(toProductionDependency('react-native-web')); inputs.add(toProductionDependency('react-dom')); if (!isExpoRouter) { inputs.add(toDependency('@expo/metro-runtime')); } } if ((platforms.includes('android') && (config.userInterfaceStyle || config.android?.userInterfaceStyle)) || (platforms.includes('ios') && (config.backgroundColor || config.ios?.backgroundColor))) { inputs.add(toProductionDependency('expo-system-ui')); } if (platforms.includes('android') && config.androidNavigationBar) { inputs.add(toProductionDependency('expo-navigation-bar')); } return [...inputs]; };