הרצה בטרמינל

רינדור יישום ⁦App Router⁩ או רכיב יחיד בטרמינל עם ⁦text run⁩ ו-renderToTerminal.

text run מרנדר אפליקציית ⁦App Router⁩ בטרמינל. ה-layout, הרכיבים, מפות המקשים ומטפלי הנתיב משותפים עם הדפדפן. הפלט הוא ANSI בצבע מלא במקום רכיבי span של %c.

text run              # render ./app at /text run --path /logs # start on another route

ליציאה יש ללחוץ על Ctrl+C. הפקודה text run דורשת Bun.

text run

text run מייבא כל קובץ בתיקייה app/, טוען את ⁦App Router⁩ עם היסטוריה בזיכרון ומצייר אותו במסך מלא. <Link>, useRouter(), notFound() ו-redirect() פועלים ללא שינוי.

קריאות fetch("/api/...") מאותו מקור מריצות את מטפלי route.ts בתוך התהליך, בדיוק כפי ש-text dev היה מגיש אותן. כתובות URL אחרות נשלחות לרשת.

renderToTerminal

לרכיב יחיד, או ל-CLI משלכם:

cli.tsxtsx
import { renderToTerminal } from "@textjs/app/terminal";import { App } from "./app";const app = await renderToTerminal(<App />);await app.waitUntilExit();

useApp().exit() מסיר את הרכיב ומשחזר את הטרמינל.

אפשרותתיאור
stdin / stdoutברירת מחדל: process.stdin / process.stdout
cols / rowsגודל קבוע (ברירת מחדל: התאמה לטרמינל)
altScreenשחזור היסטוריית הגלילה ביציאה (ברירת מחדל: true)
mouseגלילה באמצעות הגלגלת (ברירת מחדל: true)
exitOnCtrlCברירת מחדל: true
fpsתקרת קצב הפריימים (ברירת מחדל: 60)
patchConsoleהשהיית console.* עד ליציאה (ברירת מחדל: true)
theme / transparentכמו ב-createConsoleRoot

פלט

כל פריים עובר השוואת שינויים שורה אחר שורה. רק שורות שהשתנו נכתבות, כשהן עטופות בסמני פלט מסונכרן, כך שטרמינלים שתומכים בהם לעולם לא מציגים פריים שצויר חלקית. אפליקציות במצב סרק לא כותבות דבר.

קלט

קלט stdin במצב גולמי מפוענח לאותם אירועים שהדפדפן מפיק: חיצים ומקשי פונקציה עם מקשי שינוי, צירופי Alt, הדבקה תחומה, גלגלת עכבר SGR ופרוטוקול המקלדת kitty. הממשקים TerminalInputParser ו-parseTerminalInput מיוצאים לשימוש במקומות אחרים לפי הצורך.

הבדלים

תכונהDevToolsטרמינל
קצב פריימיםכ-15 fpsעד fps
גודל הרשתמסוף מעוגןחלון הטרמינל
<Image src>טעינה באמצעות canvasשימוש ב-pixels
console.logהפריימים של האפליקציההשהיה עד ליציאה
עריכת הדף ב-GitHub