help.ts•1.6 kB
import { format, HelpError } from '@prisma/internals'
import { bold, dim, red } from 'kleur/colors'
interface HelpContent {
command?: string
subcommand?: string
subcommands?: string[][]
options?: string[][]
examples?: string[]
additionalContent?: string[]
}
export const createHelp = (content: HelpContent) => {
const { command, subcommand, subcommands, options, examples, additionalContent } = content
const command_ = subcommand
? `prisma platform ${command} ${subcommand}`
: command && subcommands
? `prisma platform ${command} [command]`
: `prisma platform [command]`
const usage = format(`
${bold('Usage')}
${dim('$')} ${command_} [options]
`)
// prettier-ignore
const commands = subcommands && format(`
${bold('Commands')}
${subcommands.map(([option, description]) => `${option.padStart(15)} ${description}`).join('\n')}
`)
// prettier-ignore
const options_ = options && format(`
${bold('Options')}
${options.map(([option, alias, description]) => ` ${option.padStart(15)} ${alias && alias+','} ${description}`).join('\n')}
`)
// prettier-ignore
const examples_ = examples && format(`
${bold('Examples')}
${examples.map(example => ` ${dim('$')} ${example}`).join('\n')}
`)
// prettier-ignore
const additionalContent_ = additionalContent && format(`
${additionalContent.map(entry => `${entry}`).join('\n')}
`)
const help = [usage, commands, options_, examples_, additionalContent_].filter(Boolean).join('')
return (error?: string) => (error ? new HelpError(`\n${bold(red(`!`))} ${error}\n${help}`) : help)
}