Skip to content

Qualität

@templatical/quality ist das Dachpaket für die Template-Qualitäts-Werkzeuge von Templatical — deterministische, ausschließlich JSON-basierte Linter, die Autorenfehler im Editor und in Headless- / CI-Prüfungen erkennen. MIT-lizenziert, ESM, kein Vue, kein DOM.

Linter

LinterWas er erkenntStandard-Schweregrade
BarrierefreiheitFehlender Alt-Text, niedriger Kontrast, vage CTAs, übersprungene Überschriftenebenen, zu kleine Touch-Ziele, lange GROSSBUCHSTABEN, target=_blank ohne rel, fehlender Preheader, …überwiegend error/warning
StrukturDoppelte Block-IDs, Sektionen mit falscher Spaltenanzahl, verschachtelte Sektionen, leere Sektionen, leere Spaltenüberwiegend error; einige warning
LinksGefährliche URL-Schemata (javascript:), nicht unterstützte Protokolle, fehlerhafte mailto: / tel:, Staging-/localhost-URLs, die ins Template leckenüberwiegend warning; link.javascript-protocol ist error

Alle drei Linter liefern dieselbe LintIssue-Struktur und teilen sich dieselbe Optionsfläche (LintOptions) — Konsumenten können sie also in jeder Kombination ausführen, Ergebnisse zusammenführen und beim Gruppieren nach ruleId-Präfix (a11y.*, structure.*, link.*) filtern. Die Schweregrad-Overrides und tool-spezifischen Stellschrauben jedes Linters liegen unter seinem eigenen Namensraum (accessibility, structure, links); setze einen davon auf false, um den jeweiligen Linter komplett zu deaktivieren.

Architektur

TemplateContentJSON-Blockbaumaus Editor oder DBlintAccessibility()a11y.* RegelnlintStructure()structure.* RegelnlintLinks()link.* RegelnLintIssue[]Schweregrad · Nachricht ·blockId · optionaler fixVerwendet vonIssues-PanelEditor-SidebarCanvas-BadgesSymbole pro BlockHeadless / CIgespeicherte Templates

Das Paket trifft keine UI-Annahmen. Das useTemplateLint-Composable des Editors lädt @templatical/quality per dynamischem Import nach, ruft jeden exportierten Linter bei (entprellten) Inhaltsänderungen auf und führt die Ergebnisse in einen einzigen Issue-Strom zusammen, der den Issues-Sidebar-Tab und die Per-Block-Canvas-Badges speist. applyFix(issue) führt jeden Patch über den bestehenden Block-Update-Pfad des Editors aus — Fixes landen so als ordentliche Undo-Einträge.

Installation

bash
npm install @templatical/quality
bash
pnpm add @templatical/quality
bash
yarn add @templatical/quality
bash
bun add @templatical/quality

Das Paket ist ein optionaler Peer von @templatical/editor. Installiere es, um den Issues-Tab und die Canvas-Badges zu aktivieren. Lass es weg und der Editor bleibt schlank — der dynamische Import ist gegated und tree-shakeable, der Linter-Chunk wird nie geladen.

CDN-Nutzer

Wenn du Templatical per CDN lädst, gibt es nichts zu installieren. Das Editor-CDN-Bundle liefert @templatical/quality als separat ausgelagerten Code-Split-Chunk aus, der automatisch nachgeladen wird, sobald Linting aktiv ist.

Editor anbinden

Übergib lint an init() oder initCloud():

ts
import { init } from "@templatical/editor";

const editor = init({
  container: "#editor",
  locale: "de",
  lint: {
    accessibility: {
      rules: {
        "a11y.img-missing-alt": "warning",   // von Standard 'error' herabstufen
        "a11y.text-all-caps": "off",         // komplett deaktivieren
      },
      thresholds: { minFontSize: 16 },
    },
    structure: {
      rules: { "structure.empty-column": "info" }, // warning → info
    },
    links: {
      rules: { "link.localhost-or-staging": "error" }, // vor Versand hochstufen
      nonProductionHosts: ["*.staging.*", "*.preview.*"],
    },
  },
});

Der Issues-Tab und die Canvas-Badges erscheinen automatisch, sobald der optionale Peer aufgelöst ist. Bei lint.disabled === true — oder wenn jeder Linter-Key (accessibility, structure, links) auf false steht — lädt der Editor das Paket gar nicht erst nach: kein Chunk-Download, keine UI.

Setze einen einzelnen Linter auf false, um nur dessen Regeln auszuschalten:

ts
init({ container: "#editor", lint: { links: false } });

Schnellzugriff