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