Skip to content

Mimari ​

pantoken'in bir görevi var: Instructure'ın tasarım token'larını ve ikonlarını bir kez çözmek ve sonra bu modeli her hedef için yeniden şekillendirmek. Aşağıdaki katmanlar bu yeniden şekillendirmeyi dürüst tutar ve yayımlanan paketlerin herhangi bir yalnızca-GitHub üst akışına bağımlı olmasını engeller.

Katmanlar ​

flowchart TD upstream["@instructure/instructure-design-tokens<br/>(upstream, GitHub-only)"] core["@pantoken/core<br/>buildTokens() / toCss() - resolves upstream into the IR"] tokens["@pantoken/tokens<br/>the IR, vendored as static JSON per theme<br/>(the decoupling point)"] formats["formats/<br/>(css, scss, ...)"] renderers["renderers/<br/>(react, vue, web-components, ...)"] platforms["platforms/<br/>(swift, wordpress, ...)"] design["design/<br/>(figma, swatches)"] bundlers["bundlers/<br/>(vite, tailwind, ...)"] upstream --> core --> tokens tokens --> formats tokens --> renderers tokens --> platforms tokens --> design tokens --> bundlers
  • @pantoken/model yalnızca tür sözleşmelerini tutar ve başka hiçbir şey yapmaz. Bu, Token biçiminin ve eklenti sözleşmesinin doğruluk kaynağıdır; sıfır bağımlılıkla herhangi bir paketin ona serbestçe bağımlı olmasını sağlar.
  • @pantoken/core üst akış kaynağına dokunan tek pakettir. Token'ları ve ikonları kanonik IR'ye çözer ve CSS'i render eder.
  • @pantoken/tokens bu IR'yi derleme zamanında statik JSON olarak paketler. Bu ayrılma noktasıdır: aşağı akış paketleri @pantoken/tokens'ü okur, asla @pantoken/core'i değil, böylece npm i pantoken asla yalnızca-GitHub üst akışına uzanmaz.
  • @pantoken/utils paylaşılan yardımcıları taşır — var(--x) çözücüsü, referans regex'leri, büyük/küçük harf ve renk dönüşümleri ve üretilen çıktıyı IR'ye sadık tutan sapma kontrolleri.

Neden token'lar paketleniyor ​

Üst akış token paketi GitHub'da yaşıyor, npm'de değil. Eğer her aşağı akış paket buna bağımlı olsaydı, npm i pantoken erişimi olmayan herkes için başarısız olurdu. Bunun yerine @pantoken/tokens üst akışı bir kere derleme zamanında çözer ve sonucu statik JSON'a yazar. Yayımlanan paketler bu JSON'u taşır, böylece npm'den temiz kurulurlar, semver'e sabitlenirler ve çevrimdışı çalışırlar.

Bölümler ​

Her aşağı akış bölüm IR'yi tüketmenin bir yoludur:

  • formats/ — token'ları bir dosyaya dönüştürür (CSS, SCSS, Less, Stylus, DTCG).
  • renderers/ — framework ve araç entegrasyonları (React, Vue, Svelte, MUI, Pendo ve daha fazlası).
  • bundlers/ — build-aracı eklentileri ve ön ayarları (Vite, Next, Tailwind, Panda, PostCSS, webpack).
  • platforms/ — yerel ve site üretici hedefleri (Swift, Kotlin, Rust, WordPress, Drupal).
  • design/ — tasarım araçları için payload'lar (Figma, renk örnekleri).
  • plugins/ — token veya CSS çıktısını genişleten opsiyonel dönüşümler. Bakınız Plugins.

Üretilen çıktı ​

Bir dosya üreten her paket, derlemenin yeniden ürettiği paket başına bir generated/ dizinine yazar, bu yüzden üretilen hiçbir şey commit edilmez. Bir workspace görevi bunların tümünü doğrular. Bakınız Generated output.