epic-cli
Version:
Commands useful for everyday web development with node.
34 lines (26 loc) • 1.12 kB
text/typescript
import { execSync } from 'node:child_process'
import { readFileSync } from 'node:fs'
import { join } from 'node:path'
import mapWorkspaces from '@npmcli/map-workspaces'
const command = process.argv[2]
const showOutput = process.argv.includes('--output')
if (!command || typeof command !== 'string' || command.length === 0) {
console.error(`Invalid or missing command provided, use like 'workspaces "update"'.`)
process.exit(1)
}
const pkg = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf-8'))
if (!(pkg && Array.isArray(pkg.workspaces)) || pkg.workspaces.length === 0) {
console.error('Current project is not a workspace.')
process.exit(1)
}
const workspaces = await mapWorkspaces({ pkg })
console.log(`Running "${command}" in ${workspaces.size} workspaces.`)
for (const workspacePath of workspaces.values()) {
try {
execSync(command, { cwd: workspacePath, stdio: showOutput ? 'inherit' : 'ignore' })
// biome-ignore lint/correctness/noUnusedVariables: Showing custom error.
} catch (error) {
console.log(`Failed to run in ${workspacePath}.`)
}
}