Ana içeriğe geç

Promtlar

Promtlar, kullanıcı ile etkileşim sağlamak için adaptörler ve isteğe bağlı eş bağımlılıklar kullanır. Bu uygulama ile yaşadığımız sorun, tek bir konsol güncelleyici kullanmamızdır, bu nedenle doğrudan process.stdout'a yazamayız. Bu davranış, task.stdout'a yazmak ve satır temizleme için ANSI kaçış dizilerini kontrol etmek amacıyla araya bir adaptör yerleştirilmesini gerektirir, çünkü konsol güncelleyici aracılığıyla vt100 uyumlu bir arayüzümüz yoktur.

itibarıyla, birden fazla prompt sağlayıcısını desteklemek için task.prompt fonksiyonunun imzası değişti ve öncelikle bir adaptör gerektiriyor.

Adaptörler

enquirer

Girdi adaptörü, güzel ve pek iyi bakılmayan (xD) enquirer kullanır.

::: danger enquirer, isteğe bağlı bir eş bağımlılıktır. Lütfen önce bunu yükleyin. :::

::: code-group

npm i @listr2/prompt-adapter-enquirer enquirer
yarn add @listr2/prompt-adapter-enquirer enquirer
pnpm i @listr2/prompt-adapter-enquirer enquirer

:::

Bir Görev içinde, task.prompt fonksiyonu size herhangi bir enquirer varsayılan istemine erişim sağlar ve özel bir enquirer istemini kullanmak için altındaki örneği değiştirme yeteneği sunar.

Kullanıcıdan girdi almak için göreve bir yeni istem atayabilir ve yanıtı bağlama yazabilirsiniz.

::: warning Eş zamanlı görevlerde promtların çalıştırılması önerilmez çünkü birden fazla prompt çakışacak ve birbirinin konsol çıktılarını yazacaktır ve klavye hareketlerinizi yaparken bu, ikisine de uygulanır.

Bu bazı render'larda devre dışı bırakılmıştır, ancak hala bazı render'larla bunu yapabilirsiniz. :::

::: info Örnek İlgili örnekleri burada bulabilirsiniz. :::

Kullanım

Promtları erişmek için task.prompt jumper fonksiyonunu kullanarak enquirer promtlarınızı argüman olarak geçebilirsiniz.

::: info Lütfen enquirer türlerini yeniden yazdığımı ve bunları bu uygulama ile paketlediğimi unutmayın.

Bu nedenle, onların tümünü genellikle kullanmadığım için bazı hatalar içermesi muhtemeldir. enquirer bunları düzeltirken orijinal türleri ile birleştireceğim, bu sorun açılabilir, büyük olasılıkla asla olmayacaktır! :::

Tek Prompt

::: danger Burada küçük bir numara yaptım, eğer yalnızca bir promta sahipseniz, o zaman promtunuzu enquirer gibi adlandırmanıza gerek yoktur, otomatik olarak adlandırılacak ve geri dönecektir. :::

( [ { title: 'Özel prompt', task: async (ctx, task): Promise => { ctx.testInput = await task.prompt(ListrEnquirerPromptAdapter).run( { type: 'editor', message: 'Bu enquirer özel isteminde bir şeyler yazın.', initial: 'Yazmaya başlayın!', validate: (response): boolean | string => { return true } }, { enquirer } ) } } ], { concurrent: false } )

const ctx = await tasks.run()

console.log(ctx)


#### Bir Promtu İptal Etme



_Görev_, etkin promptu takip eder ve bu adaptör bir `cancel` metodu sunduğundan, aktifken bir promtu iptal edebilirsiniz.



::: danger
`inquirer`, isteğe bağlı bir eş bağımlılıktır. Lütfen önce bunu yükleyin.

Bu kütüphane, miras alınan uygulama `inquirer` yerine `@inquirer/prompts` kullanır.

Bir `inquirer` promtundan yararlanmak için gerekli olan prompt paketini de eklemeyi unutmayın, bunun hakkında daha fazla bilgiyi [belgelendirmelerinde](https://github.com/SBoudrias/Inquirer.js/blob/master/packages/prompts/README.md) bulabilirsiniz.
:::

::: code-group
```bash [npm]
npm i @listr2/prompt-adapter-inquirer @inquirer/prompts
yarn add @listr2/prompt-adapter-inquirer @inquirer/prompts
pnpm i @listr2/prompt-adapter-inquirer @inquirer/prompts

:::

Tek Prompt

<<< @../../examples/docs/task/prompts/inquirer-single.ts{12}

Bir Promtu İptal Etme

Görev, etkin promptu takip eder ve bu adaptör bir cancel metodu sunduğundan, aktifken bir promtu iptal edebilirsiniz.

::: warning inquirer, promptu iptal etme sırasında biraz farklı davranır, çünkü bu, CancellablePromise biçiminde uygulanır ve submit'i dışarıya açmaz, her zaman durumda promise iptal edildiğinde bir hata fırlatır. :::

<<< @../../examples/docs/task/prompts/inquirer-cancel.ts{17}

Renderer

Promtlar, çıktılarını dahili bir WritableStream üzerinden process.stdout'ya geçirdiğinden, TTY olmayan render'larda birden fazla kez render edilecektir. Her ne olursa olsun çalışacaktır, ancak harika görünmeyebilir. Promtlar, TTY olmayan terminaller için tasarlanmadığından, bu bir yenilik olarak değerlendirilir.

DefaultRenderer

Promtlar bir başlığa sahip olabilir ya da olmayabilir, ancak her zaman mevcut konsol çıktısının sonunda render edilecektir.