@svelte-vitals/core 0.42.0 → 0.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm](https://img.shields.io/npm/v/@svelte-vitals/core)](https://www.npmjs.com/package/@svelte-vitals/core)
4
4
  [![MIT](https://img.shields.io/npm/l/@svelte-vitals/core)](https://opensource.org/licenses/MIT)
5
5
 
6
- Runtime-agnostic core for [svelte-vitals](https://github.com/oekazuma/svelte-vitals): shared types, the rule engine, scorer, and reporters, plus the full rule set across five categories — SEO, Performance, Correctness, Security, Architecture.
6
+ Runtime-agnostic core for [svelte-vitals](https://github.com/oekazuma/svelte-vitals): shared types, the rule engine, scorer, and reporters, plus the full rule set across six categories — SEO, Performance, Correctness, Security, Architecture, Accessibility.
7
7
 
8
8
  This package is **mode-independent** and contains no I/O — it operates on a normalized `ResolvedHead[]` intermediate representation, so the same rules run unchanged whether heads come from static source analysis (the `svelte-vitals` CLI) or from prerendered HTML (the `@svelte-vitals/vite` plugin). It has zero runtime dependencies and no `node:` imports.
9
9
 
package/dist/index.d.ts CHANGED
@@ -81,6 +81,18 @@ interface Project {
81
81
  * list is never empty: `$lib` is always prepended.
82
82
  */
83
83
  kitAliases?: KitAlias[];
84
+ /**
85
+ * Whether `src/app.html` opens with `<!doctype html>` (a11y/doctype). Set from the same read
86
+ * as `htmlLang`; absent when the file wasn't read (missing or unreadable) — the rule stays
87
+ * silent then, like `viteMinifyDisabled`'s absent convention.
88
+ */
89
+ appHtmlDoctype?: boolean;
90
+ /**
91
+ * Literal `id` attributes in `src/app.html`, from the same read as `htmlLang`. The shell is part
92
+ * of every rendered document, so its ids satisfy a route's id references (a11y/no-missing-id-ref);
93
+ * absent when the file wasn't read.
94
+ */
95
+ appHtmlIds?: string[];
84
96
  }
85
97
  declare const defaultProject: Project;
86
98
  /** A concrete, agent-actionable remediation for a finding (design §10, issue #18). */
@@ -113,7 +125,7 @@ interface Result {
113
125
  line?: number;
114
126
  }
115
127
  type Scope = 'route' | 'project' | 'component';
116
- type Category = 'seo' | 'performance' | 'correctness' | 'security' | 'architecture';
128
+ type Category = 'seo' | 'performance' | 'correctness' | 'security' | 'architecture' | 'a11y';
117
129
  /**
118
130
  * Every category, as a runtime list — for validating a user-supplied category
119
131
  * name and naming the known ones in the error. One definition so a category
@@ -318,6 +330,81 @@ interface ResolvedHeadings {
318
330
  componentHeadings?: HeadingInfo[];
319
331
  }
320
332
 
333
+ /** One step of a template branch address: which exclusive block, and which arm of it. */
334
+ interface BranchStep {
335
+ /** index of the {#if}/{#await} block among its file's blocks (document order) */
336
+ group: number;
337
+ /** branch index within the group (if: 0..n consequent→else; await: 0=pending,1=then,2=catch) */
338
+ branch: number;
339
+ }
340
+ /** Where a folded occurrence sits, for the finding location. */
341
+ interface A11yOccurrenceInfo {
342
+ file: string;
343
+ line: number;
344
+ }
345
+ /**
346
+ * Route-scoped a11y facts, the mode-independent boundary for the landmark/id rules
347
+ * (mirrors headings.ts). Source mode composes the layout chain plus its resolved
348
+ * components; rendered mode reads the prerendered document.
349
+ */
350
+ interface ResolvedA11y {
351
+ route: string;
352
+ /** representatives per landmark kind after the branch-aware fold ('main' | 'banner' | 'contentinfo' | 'complementary') */
353
+ landmarks: Record<string, A11yOccurrenceInfo[]>;
354
+ /** landmark occurrences nested inside another landmark after composition */
355
+ nestedLandmarks: {
356
+ kind: string;
357
+ within: string;
358
+ file: string;
359
+ line: number;
360
+ }[];
361
+ /** representatives per literal id */
362
+ ids: Record<string, A11yOccurrenceInfo[]>;
363
+ /** literal id references */
364
+ idRefs: {
365
+ id: string;
366
+ attr: string;
367
+ file: string;
368
+ line: number;
369
+ }[];
370
+ /** optimistic candidates: every literal id anywhere (all branches, each/snippet bodies, components, app.html) */
371
+ idCandidates: string[];
372
+ /** closed world holds: every component resolved, no depth truncation, no {@html}/spread, no dynamic id */
373
+ fullyResolved: boolean;
374
+ }
375
+ type Foldable = {
376
+ key: string;
377
+ path: BranchStep[];
378
+ repeatable: boolean;
379
+ };
380
+ /**
381
+ * Branch-aware occurrence fold (design "Control-flow semantics"): within a branch
382
+ * occurrences sum, across the arms of one exclusive block the arm with the most
383
+ * occurrences wins (tie → lowest branch index) and ITS occurrences are the group's
384
+ * representatives — so a caller's count is always `list.length`, with a location per
385
+ * representative. `{#each}`/`{#snippet}` occurrences render 0..N times and drop out.
386
+ * The max is per key: there is no scalar total to maximize.
387
+ */
388
+ declare function foldOccurrences<T extends Foldable>(nodes: T[]): Map<string, T[]>;
389
+ /**
390
+ * Decode a fragment identifier the way navigation does before matching an element id
391
+ * (`href="#caf%C3%A9"` targets `id="café"`). Malformed escapes are kept verbatim —
392
+ * the browser would also fail to decode them, so the raw text is the comparable form.
393
+ */
394
+ declare function decodeFragmentId(fragment: string): string;
395
+ /** Whitespace-split tokens of a (possibly undefined) literal attribute value. */
396
+ declare function splitTokens(value: string | undefined): string[];
397
+ /** Explicit `role` values that map to the landmark kinds the route rules inspect. */
398
+ declare const LANDMARK_ROLES: ReadonlySet<string>;
399
+ /** Attributes whose (whitespace-tokenized) values reference element ids. */
400
+ declare const IDREF_ATTRS: readonly string[];
401
+ /**
402
+ * Whether a decoded URL fragment is HTML's "top of the document" indicator: `#top` (ASCII
403
+ * case-insensitive) scrolls to the top when no element has that id, so it is never a missing
404
+ * reference. Compare AFTER percent-decoding — `#%74op` navigates identically to `#top`.
405
+ */
406
+ declare function isTopFragment(id: string): boolean;
407
+
321
408
  /**
322
409
  * Component-body facts for the Correctness category — the source-analysis boundary
323
410
  * (mirrors images.ts / headings.ts). Collected by the static (CLI) provider only;
@@ -402,6 +489,43 @@ interface BasePathLinkFact {
402
489
  /** 1-based source line, or 0 if unknown. */
403
490
  line: number;
404
491
  }
492
+ /** An interactive element (e.g. `<button>`) found nested inside another interactive
493
+ * container (e.g. `<a href>`) (a11y/interactive-nesting). */
494
+ interface InteractiveNestingFact {
495
+ containerTag: string;
496
+ descendantTag: string;
497
+ /** 1-based source line of the descendant, or 0 if unknown. */
498
+ line: number;
499
+ }
500
+ /** A `button`/`a href`/`input type="image"` with no computable accessible name (a11y/accessible-name). */
501
+ interface UnnamedInteractiveFact {
502
+ tag: string;
503
+ /** 1-based source line, or 0 if unknown. */
504
+ line: number;
505
+ }
506
+ /** An element carrying a `role` and/or `aria-*` attribute(s) (a11y ARIA rules). */
507
+ interface AriaElementFact {
508
+ tag: string;
509
+ /** 1-based source line, or 0 if unknown. */
510
+ line: number;
511
+ /** literal role value; undefined = no role attr; { expression: true } = dynamic */
512
+ role?: {
513
+ literal?: string;
514
+ expression?: boolean;
515
+ };
516
+ /** every aria-* attribute on the element */
517
+ aria: {
518
+ name: string;
519
+ literal?: string;
520
+ expression?: boolean;
521
+ line: number;
522
+ }[];
523
+ /** literal `type` of an `<input>`, lowercased; undefined for non-inputs or a dynamic type */
524
+ inputType?: string;
525
+ /** Set when the element also carries a spread attribute — its full attribute set is
526
+ * unknowable, so required-prop presence checks must treat it as satisfied (a11y/required-aria-props). */
527
+ hasSpread?: true;
528
+ }
405
529
  /** Reactivity/correctness + security + architecture facts parsed from one `.svelte` component. */
406
530
  interface ComponentFacts {
407
531
  /** Source file the component came from. */
@@ -486,6 +610,31 @@ interface ComponentFacts {
486
610
  url: string;
487
611
  line: number;
488
612
  }[];
613
+ /** Elements carrying a role or any aria-* attribute (a11y ARIA rules). */
614
+ ariaElements?: AriaElementFact[];
615
+ /** Interactive elements nested inside another interactive container (a11y/interactive-nesting). */
616
+ interactiveNestings?: InteractiveNestingFact[];
617
+ /** `button`/`a href`/`input type="image"` elements with no computable accessible name (a11y/accessible-name). */
618
+ unnamedInteractive?: UnnamedInteractiveFact[];
619
+ /** `<label>` elements with neither a `for` attribute nor a wrapped labelable descendant (a11y/label-has-control). */
620
+ unassociatedLabels?: {
621
+ line: number;
622
+ }[];
623
+ /** Text nodes whose trimmed content opens with a bullet character followed by whitespace, outside any `li` (a11y/use-list). */
624
+ bulletTexts?: {
625
+ line: number;
626
+ char: string;
627
+ }[];
628
+ /** `<select required>` (no `multiple`, display size absent or ≤ 1) whose first `option` element
629
+ * child is not a placeholder label option (a11y/placeholder-label-option). */
630
+ selectsMissingPlaceholder?: {
631
+ line: number;
632
+ }[];
633
+ /** `<time>` with no `datetime` attribute whose literal text content is not machine-readable (a11y/require-datetime). */
634
+ timesMissingDatetime?: {
635
+ line: number;
636
+ text: string;
637
+ }[];
489
638
  /** Set when the file failed to read or parse and these facts are the empty fallback — the file was NOT analyzed. */
490
639
  parseFailed?: true;
491
640
  }
@@ -510,10 +659,10 @@ declare function parseComponentFacts(source: string, filename: string): ParsedFa
510
659
  declare function emptyComponentFacts(file: string): ComponentFacts;
511
660
  /**
512
661
  * Scan every `.svelte` component and `.svelte.ts`/`.svelte.js` runes module under `src/`
513
- * for Correctness/Security/Architecture/Bundle-Performance facts. Independent of route
514
- * resolution — covers `$lib` and non-route components too. A file that fails to read or
515
- * parse contributes empty facts instead of aborting the whole scan (dev tooling must
516
- * never throw).
662
+ * for Correctness/Security/Architecture/Bundle-Performance/Accessibility facts. Independent
663
+ * of route resolution — covers `$lib` and non-route components too. A file that fails to
664
+ * read or parse contributes empty facts instead of aborting the whole scan (dev tooling
665
+ * must never throw).
517
666
  */
518
667
  declare function collectComponentFacts(rt: Runtime, cwd: string): Promise<ComponentFacts[]>;
519
668
 
@@ -984,6 +1133,8 @@ interface RuleContext {
984
1133
  images?: ResolvedImages[];
985
1134
  /** Per-route page-body headings for seo/single-h1 (absent in modes that don't collect them). */
986
1135
  headings?: ResolvedHeadings[];
1136
+ /** Per-route composed landmark/id occurrences for the route-scoped a11y rules (absent in modes that don't collect them). */
1137
+ a11y?: ResolvedA11y[];
987
1138
  /** Per-file component-body facts for Correctness rules (static/CLI mode only). */
988
1139
  components?: ComponentFacts[];
989
1140
  /** Per-file SvelteKit route/hooks facts for the SSR shared-state rules (static/CLI + vite build mode only). */
@@ -1400,6 +1551,57 @@ declare const performanceSequentialAwaits: Rule;
1400
1551
  */
1401
1552
  declare const performanceStateRaw: Rule;
1402
1553
 
1554
+ declare const a11yInvalidRole: Rule;
1555
+
1556
+ declare const a11yUnknownAriaAttribute: Rule;
1557
+
1558
+ declare const a11yRequiredAriaProps: Rule;
1559
+
1560
+ declare const a11yInvalidAriaValue: Rule;
1561
+
1562
+ declare const a11yInteractiveNesting: Rule;
1563
+
1564
+ declare const a11yAccessibleName: Rule;
1565
+
1566
+ declare const a11yLabelHasControl: Rule;
1567
+
1568
+ declare const a11yUseList: Rule;
1569
+
1570
+ declare const a11yPlaceholderLabelOption: Rule;
1571
+
1572
+ declare const a11yRequireDatetime: Rule;
1573
+
1574
+ declare const a11yDoctype: Rule;
1575
+
1576
+ /**
1577
+ * a11y/duplicate-landmark — a composed route (layout chain + page) yields more than one
1578
+ * `main` / `banner` / `contentinfo` landmark. `ctx.a11y[].landmarks` already holds the
1579
+ * branch-aware-folded representatives, so this rule only counts them per kind, in the
1580
+ * fixed KINDS order (it decides emission order and the PASS anchor).
1581
+ */
1582
+ declare const a11yDuplicateLandmark: Rule;
1583
+
1584
+ /**
1585
+ * a11y/top-level-landmark — a landmark (`main`/`banner`/`complementary`/`contentinfo`) that
1586
+ * composition places inside another landmark. `ctx.a11y[].nestedLandmarks` already carries one
1587
+ * entry per nested occurrence, so this rule only reports them.
1588
+ */
1589
+ declare const a11yTopLevelLandmark: Rule;
1590
+
1591
+ /**
1592
+ * a11y/id-duplication — a literal id repeated within a composed route. `ctx.a11y[].ids`
1593
+ * already holds the branch-aware-folded representatives per id, so this rule only counts them.
1594
+ */
1595
+ declare const a11yIdDuplication: Rule;
1596
+
1597
+ /**
1598
+ * a11y/no-missing-id-ref — a `for`/`aria-labelledby`/`aria-describedby`/`aria-controls`/
1599
+ * `aria-activedescendant`/same-page `href="#…"` referencing an `id` absent from the composed
1600
+ * route. Universal ("no element anywhere defines this id") needs a closed world, so this rule
1601
+ * runs only on routes `ctx.a11y[].fullyResolved` marks fully resolved — see the rule docs.
1602
+ */
1603
+ declare const a11yNoMissingIdRef: Rule;
1604
+
1403
1605
  declare const allRules: Rule[];
1404
1606
 
1405
1607
  /** One configurable option of a rule, flattened for `svelte-vitals explain`'s output. */
@@ -1748,4 +1950,4 @@ declare function formatHtmlReport(results: Result[], config: Config, meta: {
1748
1950
  coreVersion?: string;
1749
1951
  }): string;
1750
1952
 
1751
- export { APP_SCRIPT, APP_STYLE, type AppSnapshot, BAND_COLOR, CATEGORIES, CHILD_NODE_KEYS, type Category, type Classification, type CompiledOverride, type ComponentFacts, type Config, type ConsoleReportOptions, type Detection, type EachBlockFact, type EffectFact, type FailedRule, type Fix, type HeadProvider, type HeadTag, type HeadingInfo, type HealthResult, type ImageInfo, type JsonReport, type KitAlias, type KitModuleFacts, type OrphanEffectFact, type Palette, type Presence, type Project, ROBOTS_SOURCE_PATHS, type RawKitAliases, type ResolvedHead, type ResolvedHeadings, type ResolvedImages, type Result, type RouteBadge, type Rule, type RuleContext, type RuleEvidence, type RuleInfo, type RuleOptionInfo, type RuleOptionSpec, type RuleOptions, type RuleOptionsSpec, type RuleOverride, type RuleSetting, type RuleSettingObject, type Runtime, SITEMAP_SOURCE_PATHS, SVELTE_CONFIG_FILES, type Scope, type ScoreModel, type ScoreOptions, type ScoreResult, type Severity, type SourceSpan, type Summary, type SuppressionDirective, type TreatDynamicAs, VITE_CONFIG_FILES, type Value, type ViteKitConfigResult, allRules, applyOverrides, applyRuleSeverities, architectureComponentSize, architectureDirectoryNaming, architectureDocLinkTarget, architecturePrivateScopeImport, architecturePropCount, architectureReservedDirectoryNames, architectureReservedNamePlacement, architectureRouteComponentImport, architectureUnitEntryFile, attrText, attrTextOf, attrValue, attrValueOf, buildHtmlDocument, buildJsonReport, classify, collectComponentFacts, collectKitModuleFacts, collectSourceFiles, compileOverrides, computeHealth, computeScore, correctnessBasePathNavigation, correctnessCheckableBindValue, correctnessEachIndexKey, correctnessEachKey, correctnessEffectAsDerived, correctnessEffectAsOnMount, correctnessInstanceBrowserGlobal, correctnessNonreactiveBuiltinState, correctnessOrphanEffect, correctnessOrphanLifecycle, correctnessPropMutation, correctnessServerBrowserGlobal, correctnessStalePropDerivation, correctnessUnmutatedState, defaultConfig, defaultProject, defineConfig, docsUrlFor, effectiveSeverity, emptyComponentFacts, emptyKitModuleFacts, escapeHtml, explainRule, findAttr, findKitAliasesInSvelteConfig, findKitPathsBaseInSvelteConfig, findKitPathsBaseInViteConfig, findMinifyDisabled, formatAgentReport, formatConsoleReport, formatFailedRuleWarning, formatGithubReport, formatHtmlReport, formatJsonReport, formatMarkdownReport, formatSarifReport, hasFailureAtOrAbove, headTagRule, imageRule, intOption, isMentionedAnywhere, isPenalized, lineOf, linkRule, listOption, mapOption, noColorPalette, overrideMatches, parseComponentFacts, parseKitModuleFacts, performanceFontPreloadCrossorigin, performanceHeavyImport, performanceImageDimensions, performanceImageLoadingHint, performanceLcpImage, performanceLoadWaterfall, performanceMinifyDisabled, performanceNamespaceImport, performancePreconnect, performancePreloadMissingAs, performanceRenderBlockingScript, performanceResponsiveImage, performanceSequentialAwaits, performanceStateRaw, renderAppShell, resolveKitAliases, resolveKitPathsBase, resolveRepoLocalPath, resolveRuleOptions, resolveRunesModuleSpecifier, runRules, safeHref, scoreBand, scoreColor, scoresByCategory, securityHandlerStateWrite, securityJavascriptUrl, securityRawHtml, securityServerModuleState, securitySharedStateImport, selectRules, seoCanonicalUrl, seoCharset, seoDescriptionLength, seoDescriptionPresence, seoDuplicateDescription, seoDuplicateTitle, seoHeadingLevelSkip, seoHreflang, seoHtmlLang, seoImageAlt, seoIndexability, seoJsonLd, seoJsonLdDateFormat, seoJsonLdDeprecatedType, seoJsonLdPlaceholder, seoJsonLdRelativeUrl, seoJsonLdRequiredProps, seoJsonLdValidity, seoOgDescription, seoOgImage, seoOgTitle, seoOgUrl, seoRobotsTxt, seoSingleH1, seoSitemapInRobots, seoSitemapXml, seoSsrDisabled, seoTitleLength, seoTitlePresence, seoTwitterCard, seoViewport, settingOptions, settingSeverity, shouldSkipRangeCheck, summarize, terminalSafe, textFromNodes, validateRuleOptions, validateRuleSetting, valueFromNodes, withFailedRulesOff };
1953
+ export { type A11yOccurrenceInfo, APP_SCRIPT, APP_STYLE, type AppSnapshot, BAND_COLOR, type BranchStep, CATEGORIES, CHILD_NODE_KEYS, type Category, type Classification, type CompiledOverride, type ComponentFacts, type Config, type ConsoleReportOptions, type Detection, type EachBlockFact, type EffectFact, type FailedRule, type Fix, type HeadProvider, type HeadTag, type HeadingInfo, type HealthResult, IDREF_ATTRS, type ImageInfo, type JsonReport, type KitAlias, type KitModuleFacts, LANDMARK_ROLES, type OrphanEffectFact, type Palette, type Presence, type Project, ROBOTS_SOURCE_PATHS, type RawKitAliases, type ResolvedA11y, type ResolvedHead, type ResolvedHeadings, type ResolvedImages, type Result, type RouteBadge, type Rule, type RuleContext, type RuleEvidence, type RuleInfo, type RuleOptionInfo, type RuleOptionSpec, type RuleOptions, type RuleOptionsSpec, type RuleOverride, type RuleSetting, type RuleSettingObject, type Runtime, SITEMAP_SOURCE_PATHS, SVELTE_CONFIG_FILES, type Scope, type ScoreModel, type ScoreOptions, type ScoreResult, type Severity, type SourceSpan, type Summary, type SuppressionDirective, type TreatDynamicAs, VITE_CONFIG_FILES, type Value, type ViteKitConfigResult, a11yAccessibleName, a11yDoctype, a11yDuplicateLandmark, a11yIdDuplication, a11yInteractiveNesting, a11yInvalidAriaValue, a11yInvalidRole, a11yLabelHasControl, a11yNoMissingIdRef, a11yPlaceholderLabelOption, a11yRequireDatetime, a11yRequiredAriaProps, a11yTopLevelLandmark, a11yUnknownAriaAttribute, a11yUseList, allRules, applyOverrides, applyRuleSeverities, architectureComponentSize, architectureDirectoryNaming, architectureDocLinkTarget, architecturePrivateScopeImport, architecturePropCount, architectureReservedDirectoryNames, architectureReservedNamePlacement, architectureRouteComponentImport, architectureUnitEntryFile, attrText, attrTextOf, attrValue, attrValueOf, buildHtmlDocument, buildJsonReport, classify, collectComponentFacts, collectKitModuleFacts, collectSourceFiles, compileOverrides, computeHealth, computeScore, correctnessBasePathNavigation, correctnessCheckableBindValue, correctnessEachIndexKey, correctnessEachKey, correctnessEffectAsDerived, correctnessEffectAsOnMount, correctnessInstanceBrowserGlobal, correctnessNonreactiveBuiltinState, correctnessOrphanEffect, correctnessOrphanLifecycle, correctnessPropMutation, correctnessServerBrowserGlobal, correctnessStalePropDerivation, correctnessUnmutatedState, decodeFragmentId, defaultConfig, defaultProject, defineConfig, docsUrlFor, effectiveSeverity, emptyComponentFacts, emptyKitModuleFacts, escapeHtml, explainRule, findAttr, findKitAliasesInSvelteConfig, findKitPathsBaseInSvelteConfig, findKitPathsBaseInViteConfig, findMinifyDisabled, foldOccurrences, formatAgentReport, formatConsoleReport, formatFailedRuleWarning, formatGithubReport, formatHtmlReport, formatJsonReport, formatMarkdownReport, formatSarifReport, hasFailureAtOrAbove, headTagRule, imageRule, intOption, isMentionedAnywhere, isPenalized, isTopFragment, lineOf, linkRule, listOption, mapOption, noColorPalette, overrideMatches, parseComponentFacts, parseKitModuleFacts, performanceFontPreloadCrossorigin, performanceHeavyImport, performanceImageDimensions, performanceImageLoadingHint, performanceLcpImage, performanceLoadWaterfall, performanceMinifyDisabled, performanceNamespaceImport, performancePreconnect, performancePreloadMissingAs, performanceRenderBlockingScript, performanceResponsiveImage, performanceSequentialAwaits, performanceStateRaw, renderAppShell, resolveKitAliases, resolveKitPathsBase, resolveRepoLocalPath, resolveRuleOptions, resolveRunesModuleSpecifier, runRules, safeHref, scoreBand, scoreColor, scoresByCategory, securityHandlerStateWrite, securityJavascriptUrl, securityRawHtml, securityServerModuleState, securitySharedStateImport, selectRules, seoCanonicalUrl, seoCharset, seoDescriptionLength, seoDescriptionPresence, seoDuplicateDescription, seoDuplicateTitle, seoHeadingLevelSkip, seoHreflang, seoHtmlLang, seoImageAlt, seoIndexability, seoJsonLd, seoJsonLdDateFormat, seoJsonLdDeprecatedType, seoJsonLdPlaceholder, seoJsonLdRelativeUrl, seoJsonLdRequiredProps, seoJsonLdValidity, seoOgDescription, seoOgImage, seoOgTitle, seoOgUrl, seoRobotsTxt, seoSingleH1, seoSitemapInRobots, seoSitemapXml, seoSsrDisabled, seoTitleLength, seoTitlePresence, seoTwitterCard, seoViewport, settingOptions, settingSeverity, shouldSkipRangeCheck, splitTokens, summarize, terminalSafe, textFromNodes, validateRuleOptions, validateRuleSetting, valueFromNodes, withFailedRulesOff };