SSOT Template Markup Language — הצהרת UI בלתי תלויה בפריימוורק.

קוד פרונטאנד מערבב שני דברים: ההחלטות שלך וחיווט הפריימוורק. איזה API לקרוא, אילו שדות להציג, באיזה סדר, באילו תנאים — ההחלטות האלה קבורות ב-React hooks או Vue composables. כשמחליפים פריימוורק או מבצעים ריפקטורינג, ההחלטות מתפרשות מחדש או אובדות.

STML מפריד ביניהם. ההחלטות נשארות ב-HTML סטנדרטי עם תכונות data-*. חיווט הפריימוורק נוצר או מואצל.

מאגר GitHub

מה נשמר

הכל ב-HTML של STML הוא החלטת משתמש:

  • אילו נקודות קצה API לקרוא (data-fetch, data-action)
  • אילו שדות להציג או לאסוף (data-bind, data-field)
  • באיזה סדר מופיעים אלמנטים (מבנה DOM)
  • איך זה נראה (מחלקות Tailwind, תגיות HTML)
  • איזה טקסט המשתמשים רואים (כותרות, placeholders, תוויות כפתורים)
  • אילו תנאים שולטים בנראות (data-state)
  • אילו רכיבים מטפלים ב-UX מיוחד (data-component)
  • התנהגות רשימות — עימוד, מיון, סינון

לא React. לא Vue. זה מה שהעמוד שלך עושה, מוצהר ב-HTML5 סטנדרטי.

אימות

המאמת המובנה בודק STML מול OpenAPI לפני יצירת קוד:

  • האם operationId קיים? האם שיטת HTTP נכונה?
  • האם שדות הבקשה, התגובה והפרמטרים תואמים לסכמה?
  • האם עמודות מיון/סינון/הכללה בתוך הרשימות המותרות?
  • האם הרכיבים המוזכרים קיימים?

לוכד אי-התאמות פרונטאנד-API בזמן CI, לא בזמן ריצה.

stml validate specs/my-project    # 12 בדיקות סמליות מול OpenAPI

תכונות data-*

תכונהמה היא מצהירה
data-fetchטעינת נתונים מנקודת קצה GET
data-actionשליחת נתונים לנקודת קצה POST/PUT/DELETE
data-fieldאיסוף שדה גוף הבקשה
data-bindהצגת שדה תגובה
data-param-*הפעולה דורשת פרמטר נתיב/שאילתה
data-eachחזרה על שדה מערך
data-stateהצגה מותנית
data-componentהאצלה לרכיב מותאם אישית
data-paginateרשימה מעומדת
data-sortרשימה הניתנת למיון (עמודה וכיוון ברירת מחדל)
data-filterרשימה הניתנת לסינון (אילו עמודות)
data-includeהכללת משאבים קשורים

רישיון

MIT — GitHub