epic-cli
Version:
Commands useful for everyday web development with node.
33 lines (28 loc) • 1.03 kB
text/typescript
import { execSync } from 'node:child_process'
import { readFileSync } from 'node:fs'
import { join } from 'node:path'
import { styleText } from 'node:util'
import { prompt } from 'prompts'
const { scripts } = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf-8'))
const { scripts: selection } = await prompt([
{
type: 'multiselect',
name: 'scripts',
message: 'Which scripts do you want to run?',
choices: Object.entries(scripts).map((entry) => ({ title: `${styleText('bold', entry[0])}: ${entry[1]}`, value: entry[0] })),
instructions: false, // This is for advanced CLI users.
},
])
if (!selection || selection.length === 0) {
console.warn('No script selected!')
process.exit(0)
}
for (const script of selection as string[]) {
console.log(`Running script ${styleText('bold', script)}.`)
try {
execSync(`bun run ${script}`, { cwd: process.cwd(), stdio: 'inherit' })
} catch (_error) {
console.error(`${styleText('bold', script)} failed.`)
}
}