İçerikler
Clipanion komutlarında neyi bağlam olarak adlandırıyoruz. Bu şatafatlı kelimenin altında, tüm komutlara this.context
üzerinden sağladığımız basit bir nesne yatıyor. Varsayılan bağlam oldukça basittir:
import type {Readable, Writable} from 'stream';
interface BaseContext {
env: Record<string, string | undefined>;
stdin: Readable;
stdout: Writable;
stderr: Writable;
colorDepth: number;
}
Kendi bağlamlarınızı tanımlayabilirsiniz (varsayılan olanı genişletecek şekilde) cwd
, kullanıcı kimlik doğrulama token'ı ya da yapılandırma gibi daha karmaşık ortam seçenekleri geçirebilmek için ...
Bağlamda akışları neden tuttuğumuzu merak ediyor olabilirsiniz; bunun nedeni, komutların diğer komutların çıktısını kolayca kesip alabilmesidir (örneğin, sonuçlarını bir tampon içinde yakalamak için), bu da daha iyi bir birleşim sağlar.
Eğer console.log
ailesine olan tüm yazma işlemlerinin yakalanıp doğru akışlara yönlendirilmesi için Clipanion'un bunu otomatik olarak yönetmesini tercih ederseniz, CLI yapılandırmanıza enableCapture: true
ekleyin. Bu, aynı anda birden fazla komut çalıştığında uygun yönlendirmeyi bile destekler!
Bağlam Değişimleri
this.cli
API'sini çağırırken, run
fonksiyonu kısmi bir bağlam nesnesi alır - sıradan cli.run
ve cli.runExit
fonksiyonlarının aksine, bu fonksiyonlar tam bir bağlam gerektirir. Bu kısmi bağlam, mevcut bağlamın üzerine uygulanır, bu nedenle yönlendirilmiş komutlar geçmediğiniz bağlamı otomatik olarak miras alır.
import {Command} from 'clipanion';
// ---cut---
import {PassThrough} from 'stream';
class BufferCommand extends Command {
async execute() {
const passThrough = new PassThrough();
await this.cli.run([`other-command`], {
stdout: passThrough,
});
}
}