İçeriğe geç

SSR Giriş

@lentystyle/ssr, CSS ve runtime payload'ı route HTML snapshot'ına enjekte eden SSR orchestration katmanıdır. Framework HTML'ini kendi başına render etmez; mevcut bir HTML snapshot ve o route'a ait .luis source listesi tüketir.

Compiler -> Hybrid -> SSR -> HTML Response

Terminal window
pnpm add @lentystyle/ssr

  • Route HTML snapshot'ı alır
  • O route için .luis source listesini compile eder
  • Üretilen CSS'i HTML içine enjekte eder
  • Route payload'ını <script type="application/json"> olarak yazar
  • Framework veya server entegrasyonu için adapter seam'leri sunar
  • Aynı process içinde tekrar eden render'lar için optional in-memory cache sunar
  • Request HTML ve source envelope girdilerini @lentystyle/core/guard/ssr ile strict modda validate eder
  • Framework HTML'ini sizin yerinize render etmez
  • Browser runtime'ı başlatmaz
  • Route source'larını auto-discover etmez
  • Distributed cache veya kalıcı storage sunmaz

SSR request akışı @lentystyle/core/guard/ssr kullanır.

Bu adapter:

  • varsayılan olarak strict preset'ini kullanır
  • htmlMode: 'ssr' zorlar
  • LentyStyle SSR payload ve bootstrap allowlist'ini yalnızca SSR akışında strict tutar
  • geçersiz request HTML veya source envelope girdilerini hybrid compile başlamadan önce bloklar

High-level SSR helper'larında guard'ı ayrıca etkinleştirmezsiniz; request render akışının içinde çalışır.

import { renderLentySsrSnapshot } from '@lentystyle/ssr'
await renderLentySsrSnapshot({}, {
routeId: '/docs/',
html: '<html><head></head><body><div class="card"></div></body></html>',
sources: [
{
sourceId: 'docs.luis',
source: '.card { color: #0f172a; }',
},
],
})

Yerleşik davranış sabittir:

  • preset: 'strict'
  • htmlMode: 'ssr'

Public renderLentySsrSnapshot() ve createLentySsrIntegration() yüzeyleri doğrudan guardPolicy kabul etmez. Özel doğrulama gerekiyorsa guard'ı SSR'in bir katman üstünde ayrı çalıştırmalı ya da daha low-level orchestration'a inmelisiniz.

import { scanSnapshotEnvelope } from '@lentystyle/core/guard/ssr'
const findings = scanSnapshotEnvelope(
{
routeId: '/docs/',
html: '<html><head></head><body><div class="card"></div></body></html>',
sources: [
{
sourceId: 'docs.luis',
source: '.card { color: #0f172a; }',
},
],
},
{ preset: 'strict', htmlMode: 'ssr' },
)
console.log(findings.length) // 0

  1. Route HTML snapshot'ı üretin
  2. .luis source listesini hazırlayın
  3. Doğru SSR yüzeyini seçin
  4. result.html çıktısını response'a yazın

Mevcut yüzeyler:

  • renderLentySsrSnapshot() -> tek seferlik render
  • createLentySsrIntegration() -> yeniden kullanılabilir doğrudan yüzey
  • createLentySsrFrameworkAdapter() -> framework seam'i
  • createLentySsrProd() -> process-local cache destekli helper

import { renderLentySsrSnapshot } from '@lentystyle/ssr'
const result = await renderLentySsrSnapshot(
{ mode: 'ssr' },
{
routeId: '/docs/',
html: '<html><head></head><body><div class="card"></div></body></html>',
sources: [
{
sourceId: 'site.luis',
source: '.card { color: red; }',
},
],
},
)

Çağrıdan sonra:

  • result.css üretilen CSS'i içerir
  • result.runtimePayload hybrid route payload'ını içerir
  • result.html nihai enjekte edilmiş HTML'i içerir

Low-level SSR API'leri object tabanlıdır ve luis.config.mjs gerektirmez. Ama app-level preview ve project helper akışlarında ortak SSR ayarlarını aynı config dosyasında tutmak daha faydalıdır.

import { defineLuisConfig } from '@lentystyle/core'
export default defineLuisConfig({
ssr: {
mode: 'ssr',
outDirName: 'dist-ssr',
defaultRuntimeOptions: '',
include: ['**/*.html'],
},
})

SSR de convenience ve hardening rollerini ayrı tutar:

  • browser runtime client tarafında optional ve convenience odaklı kalır
  • @lentystyle/core/guard/ssr, server tarafında gelen HTML snapshot ve source envelope girdisini sertleştirir

Bu ayrım sayesinde SSR, payload ve bootstrap HTML konusunda strict kalabilirken browser runtime kendi standalone policy modelini korur.


  • Request-level ve project-level ayarlar için Config
  • Browser tarafı convenience davranışı için Browser Runtime
  • Fail-closed validation modeli için @lentystyle/guard dokümanları