import command from 'execa'; import memoize from 'memoizerific'; import { resolve } from 'path'; export type Workspace = { name: string; location: string }; const codeDir = resolve(__dirname, '../../code'); async function getWorkspaces() { const { stdout } = await command('yarn workspaces list --json', { cwd: codeDir, shell: true, }); return JSON.parse(`[${stdout.split('\n').join(',')}]`) as Workspace[]; } const getWorkspacesMemo = memoize(1)(getWorkspaces); export async function workspacePath(type: string, packageName: string) { const workspaces = await getWorkspacesMemo(); const workspace = workspaces.find((w) => w.name === packageName); if (!workspace) { throw new Error(`Unknown ${type} '${packageName}', not in yarn workspace!`); } return workspace.location; }