1*eeffdb10STomasz Sapetaimport path from 'path'; 2*eeffdb10STomasz Sapeta 3*eeffdb10STomasz Sapetaimport { Package } from './Packages'; 4*eeffdb10STomasz Sapetaimport { spawnAsync, spawnJSONCommandAsync } from './Utils'; 5*eeffdb10STomasz Sapetaimport { EXPO_DIR } from './Constants'; 6*eeffdb10STomasz Sapeta 7*eeffdb10STomasz Sapetaconst NATIVE_APPS_PATHS = [EXPO_DIR, path.join(EXPO_DIR, 'apps/bare-expo')]; 8*eeffdb10STomasz Sapeta 9*eeffdb10STomasz Sapeta/** 10*eeffdb10STomasz Sapeta * Workspace info for the single project. 11*eeffdb10STomasz Sapeta */ 12*eeffdb10STomasz Sapetaexport type WorkspaceProjectInfo = { 13*eeffdb10STomasz Sapeta location: string; 14*eeffdb10STomasz Sapeta workspaceDependencies: string[]; 15*eeffdb10STomasz Sapeta mismatchedWorkspaceDependencies: string[]; 16*eeffdb10STomasz Sapeta}; 17*eeffdb10STomasz Sapeta 18*eeffdb10STomasz Sapeta/** 19*eeffdb10STomasz Sapeta * An object with workspace's projects info. 20*eeffdb10STomasz Sapeta */ 21*eeffdb10STomasz Sapetaexport type WorkspacesInfo = Record<string, WorkspaceProjectInfo>; 22*eeffdb10STomasz Sapeta 23*eeffdb10STomasz Sapeta/** 24*eeffdb10STomasz Sapeta * Returns an object containing info for all projects in the workspace. 25*eeffdb10STomasz Sapeta */ 26*eeffdb10STomasz Sapetaexport async function getInfoAsync(): Promise<WorkspacesInfo> { 27*eeffdb10STomasz Sapeta const info = await spawnJSONCommandAsync<{ data: string }>('yarn', [ 28*eeffdb10STomasz Sapeta '--json', 29*eeffdb10STomasz Sapeta 'workspaces', 30*eeffdb10STomasz Sapeta 'info', 31*eeffdb10STomasz Sapeta ]); 32*eeffdb10STomasz Sapeta return JSON.parse(info.data); 33*eeffdb10STomasz Sapeta} 34*eeffdb10STomasz Sapeta 35*eeffdb10STomasz Sapeta/** 36*eeffdb10STomasz Sapeta * Runs yarn in the root workspace directory. 37*eeffdb10STomasz Sapeta */ 38*eeffdb10STomasz Sapetaexport async function installAsync(): Promise<void> { 39*eeffdb10STomasz Sapeta await spawnAsync('yarn'); 40*eeffdb10STomasz Sapeta} 41*eeffdb10STomasz Sapeta 42*eeffdb10STomasz Sapeta/** 43*eeffdb10STomasz Sapeta * Returns an array of workspace's native apps, like Expo Client or BareExpo. 44*eeffdb10STomasz Sapeta */ 45*eeffdb10STomasz Sapetaexport function getNativeApps(): Package[] { 46*eeffdb10STomasz Sapeta return NATIVE_APPS_PATHS.map((appPath) => new Package(appPath)); 47*eeffdb10STomasz Sapeta} 48