1import { ExpoConfig, getAccountUsername, getDefaultTarget } from '@expo/config'; 2import JsonFile, { JSONValue } from '@expo/json-file'; 3import resolveFrom from 'resolve-from'; 4 5import { memoize } from '../fn'; 6 7const getAccountName = memoize((exp: Pick<ExpoConfig, 'owner'>) => { 8 return getAccountUsername(exp); 9}); 10 11const getDevClientVersion = memoize((projectRoot: string): JSONValue | undefined => { 12 try { 13 const devClientPackage = resolveFrom.silent(projectRoot, 'expo-dev-client/package.json'); 14 if (devClientPackage) { 15 return JsonFile.read(devClientPackage).version; 16 } 17 } catch {} 18 return undefined; 19}); 20 21const getProjectType = memoize((projectRoot: string): 'managed' | 'generic' => { 22 return getDefaultTarget(projectRoot) === 'managed' ? 'managed' : 'generic'; 23}); 24 25export default function getDevClientProperties(projectRoot: string, exp: ExpoConfig) { 26 return { 27 account_name: getAccountName({ owner: exp.owner }), 28 dev_client_version: getDevClientVersion(projectRoot), 29 project_type: getProjectType(projectRoot), 30 uptime_ms: process.uptime() * 1000, 31 }; 32} 33