Prompts
Prompts são widgets de terminal interativos que você pode usar para aceitar a entrada do usuário. Os prompts Ace são alimentados pelo pacote @poppinss/prompts, que suporta os seguintes tipos de prompt.
- input
- list
- password
- confirm
- toggle
- select
- multi-select
- autocomplete
Os prompts Ace são criados com testes em mente. Ao escrever testes, você pode capturar prompts e responder a eles programaticamente.
Veja também: Testando comandos ace
Exibindo um prompt
Você pode exibir prompts usando a propriedade this.prompt disponível em todos os comandos Ace.
import { BaseCommand } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
async run() {
const modelName = await this.prompt.ask('Enter the model name')
console.log(modelName)
}
}Opções de prompt
A seguir está a lista de opções aceitas por prompts. Você pode consultar esta tabela como a única fonte da verdade.
| Opção | Aceito por | Descrição |
| Todos os prompts | The default value to use when no value is entered. In the case of |
| Todos os prompts | The unique name for the prompt |
| Todos os prompts | The hint text to display next to the prompt |
| Todos os prompts | Transforme o valor de retorno do prompt. O valor de entrada do método ts |
| Todos os prompts | Formate ao vivo o valor de entrada conforme o usuário digita. A formatação é aplicada somente à saída CLI, não ao valor de retorno. ts |
| Todos os prompts | Valide a entrada do usuário. Retornar ts |
|
| Limite o número de opções a serem exibidas. Você terá que rolar para ver o restante das opções. |
Entrada de texto
Você pode renderizar o prompt para aceitar entrada de texto usando o método prompt.ask. O método aceita a mensagem do prompt como o primeiro parâmetro e o objeto de opções como o segundo parâmetro.
await this.prompt.ask('Enter the model name')// Validar entrada
await this.prompt.ask('Enter the model name', {
validate(value) {
return value.length > 0
}
})// Valor padrão
await this.prompt.ask('Enter the model name', {
default: 'User'
})Entrada mascarada
Como o nome sugere, o prompt de entrada mascarado mascara a entrada do usuário no terminal. Você pode exibir o prompt mascarado usando o método prompt.secure.
O método aceita a mensagem do prompt como o primeiro parâmetro e o objeto de opções como o segundo parâmetro.
await this.prompt.secure('Enter account password')await this.prompt.secure('Enter account password', {
validate(value) {
return value.length < 6
? 'Password must be 6 characters long'
: true
}
})Lista de escolhas
Você pode exibir uma lista de escolhas para uma única seleção usando o método prompt.choice. O método aceita os seguintes parâmetros.
- Mensagem de prompt.
- Uma matriz de escolhas.
- Objeto de opções opcional.
await this.prompt.choice('Select package manager', [
'npm',
'yarn',
'pnpm'
])Para mencionar um valor de exibição diferente, você pode definir opções como objetos. A propriedade name é retornada como o resultado do prompt, e a propriedade message é exibida no terminal.
await this.prompt.choice('Select database driver', [
{
name: 'sqlite',
message: 'SQLite'
},
{
name: 'mysql',
message: 'MySQL'
},
{
name: 'pg',
message: 'PostgreSQL'
}
])Escolhas de seleção múltipla
Você pode usar o método prompt.multiple para permitir seleções múltiplas na lista de escolhas. Os parâmetros aceitos são os mesmos do prompt choice.
await this.prompt.multiple('Select database drivers', [
{
name: 'sqlite',
message: 'SQLite'
},
{
name: 'mysql',
message: 'MySQL'
},
{
name: 'pg',
message: 'PostgreSQL'
}
])Confirmar ação
Você pode exibir um prompt de confirmação com opções Sim/Não usando o método prompt.confirm. O método aceita a mensagem de prompt como o primeiro parâmetro e o objeto de opções como o segundo parâmetro.
O prompt confirm retorna um valor booleano.
const deleteFiles = await this.prompt.confirm(
'Want to delete all files?'
)
if (deleteFiles) {
}Para personalizar o valor de exibição das opções Sim/Não, você pode usar o método prompt.toggle.
const deleteFiles = await this.prompt.toggle(
'Want to delete all files?',
['Yup', 'Nope']
)
if (deleteFiles) {
}Preenchimento automático
O prompt autocomplete é uma combinação do prompt de seleção e do prompt de seleção múltipla, mas com a capacidade de fazer uma busca difusa das opções.
const selectedCity = await this.prompt.autocomplete(
'Select your city',
await getCitiesList()
)