curl and Terminal Clients
curl, Wget, HTTPie and xh get a page's first frame as truecolor ANSI text. Configure its size or turn it off.
Terminal HTTP istemcileri, HTML belgesi yerine sayfanın ilk karesini gerçek renkli ANSI metni olarak alır. Herhangi bir yapılandırma yapmanız gerekmez.
curl https://my-app.example.com/aboutKare alan istekler
Şu koşulların tümü sağlandığında istek bir kare alır:
- yöntem
GETveyaHEADolmalıdır; User-Agent,curl/,Wget/,wget2/,HTTPie/veyaxh/ile başlamalıdır;Acceptbaşlığı bulunmamalı veyatext/htmliçermemelidir.
Tarayıcılar, tarayıcı botları ve bağlantı önizlemeleri HTML sayfasını alır. curl ile HTML almak için bunu isteyin:
curl -H 'Accept: text/html' https://my-app.example.com/aboutKare, sayfanın sunulacağı noktada seçilir: ara katman, rewrites ve rota işleyicilerinden sonra; dosyalar veya son segmentinde nokta bulunan yollar için hiçbir zaman seçilmez. Ara katman yönlendirmeleri, 401 yanıtları, başlıklar ve yeniden yazımlar, tarayıcılarda olduğu gibi curl için de geçerlidir. /api/health yine kendi işleyicisini çalıştırır ve /robots.txt yine dosyayı sunar.
Karenin içeriği
Kare, ön render edilmiş bir kabukta olduğu gibi sayfanın ilk render çıktısıdır: hâlâ bekleyen her <Suspense> sınırı yedek içeriğini gösterir. Asenkron sunucu bileşenleri çalışmaz ve fetch() hiçbir zaman sonuçlanmaz; bu nedenle efektlerde yüklenen veriler yüklenme durumunda kalır.
- Boyut: 80 × 24 hücre. Sabit viewport kullanan bir uygulama (
viewport.responsive: false) bunun yerineviewport.width × viewport.heightkullanır. - Renkler: Uygulamanın
viewport.themetemasında 24 bit SGR kaçış kodları. Her satır bir sıfırlama koduyla, kare ise yeni satırla biter. - Durum:
200veya eşleşen sayfa olmadığında ya da sayfanotFound()çağırdığında uygulamanın bulunamadı sayfasıyla birlikte404. Render sırasındaredirect()çağıran bir sayfa HTML sunar.
Yanıtlar, Vary: User-Agent, Accept ve Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate başlıklarıyla text/plain; charset=utf-8 biçimindedir; böylece paylaşılan önbellekler hiçbir zaman bir kareyi saklayıp tarayıcıya sunmaz. curl isteğinin kare aldığı yoldaki HTML sayfası da aynı Vary başlığını taşır.
Desteklenen ortamlar
| Barındırma ortamı | Statik sayfalar | Dinamik sayfalar, bilinmeyen yollar |
|---|---|---|
text dev | İstek üzerine render | İstek üzerine render |
text start, bun | text build ile ön render | İstek üzerine render |
vercel, cloudflare | text build ile ön render | HTML sayfası |
static | HTML sayfası | HTML sayfası |
Sunucuda render edilen sayfalar için text start veya bun gerekir (bkz. Dağıtım).
Statik barındırma ortamları bir istemciye diğerinden farklı yanıt veremez; bu nedenle static adaptörü kareleri desteklemez. Vercel ve Cloudflare’da statik sayfaların kareleri derlemeyle birlikte gönderilir. vercel ve cloudflare adaptörleri bir renderer dağıtmadığından dinamik sayfalar ([id], force-dynamic) bu ortamlarda HTML sunar.
text start ve bun dist/server.js, kalan sayfaları istek üzerine .text/server/live.mjs ile render eder ve son 128 kareyi 10 saniye boyunca tutar. Her sunucu 10 saniyede en fazla 20 önbelleğe alınmamış sayfayı render eder. Bu sınır aşıldığında, bütçe yenilenene kadar curl HTML sayfasını alır. Örneğin bir sayfa modülü en üst düzeyde window okuduğu için sunucuda live.mjs yüklenemezse bu sayfalar HTML sunar.
text build, ön render edilmiş kareleri raporlar:
✓ Prerendering curl frames (5/5)Yapılandırma
Uygulamanın tamamı için boyutu değiştirin veya kareleri kapatın:
import { defineConfig } from "@textjs/app";export default defineConfig({ ansi: { cols: 100, rows: 30 }, // ansi: false,});Bir sayfa kendi boyutunu değiştirebilir veya terminallere de HTML sunabilir:
export const ansi = { cols: 120, rows: 40 };// export const ansi = false;Boyutlar 1–500 hücre aralığıyla sınırlanır. text.config.ts dosyasında ansi: false ayarlandığında sayfa dışa aktarımları yok sayılır.
Düz HTTP
-L belirtmediğiniz sürece curl yönlendirmeleri izlemez. Vercel, http:// isteklerini https:// adreslerine yönlendirir; Cloudflare da Her zaman HTTPS kullan açıkken aynısını yapar, bu nedenle curl http://… kare yerine yönlendirmeyi yazdırır. https:// URL’lerini paylaşın.
Özel sunucular
@textjs/app/ansi, text start veya bir adaptör çalıştırmayan sunucular ve fonksiyonlar için algılama ve yanıt yardımcılarını dışa aktarır:
import { ansiResponse, wantsAnsi } from "@textjs/app/ansi";import { frameToAnsi } from "@textjs/react";if (wantsAnsi(request)) return ansiResponse(frameToAnsi(buffer, { theme: "geistDark" }), request.method);wantsAnsi(request), Web Headers veya Node’un IncomingHttpHeaders türüyle (method, headers) biçimini de kabul eder. frameToAnsi(buffer, { theme }), render edilmiş bir CellBuffer nesnesini çerçevenin yaptığı gibi kodlar.