import { execa } from 'execa'; import fsExtra from 'fs-extra'; import { load as yamlLoad } from 'js-yaml'; import minimist from 'minimist'; import picocolors from 'picocolors'; import { IGNORE_WORKSPACE } from './constant'; const { green, red } = picocolors; const { readFile } = fsExtra; export interface WorkspacePackage { name: string; version?: string; path: string; } export function error(err: any) { console.log(red(err)); } export function succeed(msg: any) { console.log(green(msg)); } /** * Get command line parameters * @param argvName */ export function commandArgv(argvName: string | undefined = undefined) { const argv = minimist(process.argv.slice(2)); return argvName ? argv[argvName] || undefined : argv; } /** * Read Workspace */ export async function readWorkspace() { const path = '../pnpm-workspace.yaml'; // eslint-disable-next-line no-useless-catch try { const workspace = yamlLoad(await readFile(path, { encoding: 'utf8' }), { json: true, }) as any; return workspace.packages as string[]; } catch (e) { throw e; } } export async function filterWorkspace() { // eslint-disable-next-line no-useless-catch try { const filterArgv = (await readWorkspace()).filter((wr) => !IGNORE_WORKSPACE.includes(wr)); return filterArgv.map((argv) => ['--filter', '../' + argv]).flatMap((argv) => argv); } catch (e) { throw e; } } export async function getWorkspacePackages(filterArgv: string[] = []) { const { stdout } = await execa( 'pnpm', ['ls', '-r', '--depth', '-1', '--json'].concat(filterArgv), ); if (!stdout) return []; return JSON.parse(stdout) as WorkspacePackage[]; }