Skip to content

Arhitektura

pantoken ima eno nalogo: enkrat razrešiti Instructure-ove oblikovne (design) tokene in ikone, nato pa to model preoblikovati za vsak cilj. Spodnje plasti zagotavljajo poštenost te preoblikave in ohranjajo objavljene pakete brez kakršnegakoli GitHub‑samo upstreama.

Plasti

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 hrani tipne pogodbe (type contracts) in nič drugega. Je vir resnice za obliko Token in pogodbo za vtičnike, z ničelnimi odvisnostmi, zato se lahko nanj vsak paket prostovoljno opre.
  • @pantoken/core je edini paket, ki se dotika upstream vira. Razreši tokene in ikone v canonical IR in upodobi CSS.
  • @pantoken/tokens vključuje (vendors) ta IR kot statični JSON med gradnjo. To je točka razvezave: downstream paketi berejo @pantoken/tokens, nikoli @pantoken/core, zato npm i pantoken nikoli ne posega po GitHub‑samo upstreamu.
  • @pantoken/utils nosi deljene pomočnike — var(--x) resolver, regexe za reference, pretvorbe velikosti črk in barv ter drift preverjanja, ki ohranjajo, da je generirana izhodna vsebina zvest IR.

Zakaj so tokeni vendorirani

Upstream paket s tokeni živi na GitHubu, ne na npm. Če bi se vsak downstream paket nanj zanašal, bi npm i pantoken odpovedal komurkoli brez tega dostopa. Namesto tega @pantoken/tokens razreši upstream enkrat med gradnjo in zapiše rezultat v statični JSON. Objavljeni paketi nosijo ta JSON, zato se namestijo čisto iz npm, pripnejo se na semver in delujejo brez povezave.

Vedra

Vsako downstream vedro je način porabe IR:

  • formats/ — pretvori tokene v datoteko (CSS, SCSS, Less, Stylus, DTCG).
  • renderers/ — integracije ogrodij in orodij (React, Vue, Svelte, MUI, Pendo in več).
  • bundlers/ — vtičniki in prednastavitve gradnikov (Vite, Next, Tailwind, Panda, PostCSS, webpack).
  • platforms/ — cilji za native in site‑generatorje (Swift, Kotlin, Rust, WordPress, Drupal).
  • design/ — podatki za oblikovalska orodja (Figma, barvne vzorčne palete).
  • plugins/ — opcijski transformatorji, ki razširijo izhod tokenov ali CSS. Glej Plugins.

Generiran izhod

Vsak paket, ki izda datoteko, jo zapiše v za paket specifično generated/ mapo, ki jo gradnja reproducira, tako da se nič generiranega ne commita. Naloga delovnega prostora vse to preveri. Glej Generated output.