@svelte-vitals/core 0.55.0 → 0.55.2

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.
@@ -46,6 +46,15 @@ interface EachBlockFact {
46
46
  line: number;
47
47
  /** Set when the block's key expression is its index binding or a trivial coercion of it — `(i)`, `(String(i))`, `(Number(i))`, `` (`${i}`) ``, `(i.toString())`, `(i + '')` — correctness/each-index-key. */
48
48
  indexKey?: boolean;
49
+ /**
50
+ * The import the block iterates, set on an unkeyed or index-keyed block over an imported binding
51
+ * (`xs`, or `ns.xs` of `import * as ns`) the component only reads. Core cannot see the module
52
+ * behind it; a collector that can drops the block when that export is a constant list.
53
+ */
54
+ importedList?: {
55
+ source: string;
56
+ imported: string;
57
+ };
49
58
  }
50
59
  /** An `$effect(...)` / `$effect.pre(...)` call in a component's instance script. */
51
60
  interface EffectFact {
@@ -172,6 +181,8 @@ interface AriaElementFact {
172
181
  /** Set when the element also carries a spread attribute — its full attribute set is
173
182
  * unknowable, so required-prop presence checks must treat it as satisfied (a11y/required-aria-props). */
174
183
  hasSpread?: true;
184
+ /** Set when the element carries a `use:` action, which may set `role` at runtime (svelte-dnd-action's handles do). */
185
+ hasAction?: true;
175
186
  }
176
187
  /**
177
188
  * Every element in a component with its literal attribute names — the input for the rules that
@@ -238,12 +249,15 @@ interface ComponentFacts {
238
249
  * architecture/route-component-import). `type` marks a declaration that contributes **no runtime
239
250
  * value binding** — either `import type …`, or one whose every specifier is inline-typed
240
251
  * (`import { type A } from …`). A specifier-less side-effect import is not marked: it still loads
241
- * the module. Optional, so existing external constructors of `ComponentFacts` are unaffected.
252
+ * the module. `named` marks a value declaration binding only named exports — no default,
253
+ * `default as`, or namespace — so it cannot render an imported component. Both optional, so
254
+ * existing external constructors of `ComponentFacts` are unaffected.
242
255
  */
243
256
  importSpans: {
244
257
  source: string;
245
258
  line: number;
246
259
  type?: true;
260
+ named?: true;
247
261
  }[];
248
262
  /** Value `import * as X from '<bare pkg>'` namespace imports (type-only excluded) — performance/namespace-import. */
249
263
  namespaceImports: {
@@ -374,6 +388,67 @@ declare function emptyComponentFacts(file: string): ComponentFacts;
374
388
  */
375
389
  declare function collectComponentFacts(rt: Runtime, cwd: string): Promise<ComponentFacts[]>;
376
390
  //#endregion
391
+ //#region src/head.d.ts
392
+ /**
393
+ * A normalized head tag. The mode-independent boundary (design §8): the static
394
+ * SourceHeadProvider (CLI, via the runtime-abstracted `HeadProvider` below) and
395
+ * the rendered collector (`@svelte-vitals/vite`, build-time Node) both emit
396
+ * these, so rules never need to know which mode produced them.
397
+ */
398
+ interface HeadTag {
399
+ kind: 'title' | 'meta' | 'link' | 'jsonld' | 'script';
400
+ /** <meta name="...">. */
401
+ name?: string;
402
+ /** <meta property="..."> (e.g. og:image). */
403
+ property?: string;
404
+ /** <link rel="...">. */
405
+ rel?: string;
406
+ /** <link as="..."> keyword (e.g. 'font') when statically literal; undefined when absent or dynamically bound. */
407
+ as?: string;
408
+ /** True when a <link> has an `as` attribute at all (literal or dynamic). Distinguishes "no as" from "dynamic as". */
409
+ hasAs?: boolean;
410
+ /** True when a <link> has a `crossorigin` attribute (presence only; value is irrelevant to the checks). */
411
+ hasCrossorigin?: boolean;
412
+ /** True when a <meta name="robots"> literal content contains `noindex`/`none`. Undefined when dynamic or absent. */
413
+ noindex?: boolean;
414
+ /** Literal `<script type="application/ld+json">` content, set only when the script is static. Undefined when dynamic. */
415
+ jsonld?: string;
416
+ /** Literal visible text of a static <title> or <meta name="description"> content, set only when static. Undefined when dynamic. */
417
+ text?: string;
418
+ /** Literal `hreflang` of a `<link rel="alternate">` (e.g. 'en', 'en-US', 'x-default'). Undefined when dynamic/absent. */
419
+ hreflang?: string;
420
+ /** Literal href (link) / src (script) URL when static — used for third-party origin analysis (performance/preconnect). */
421
+ href?: string;
422
+ /** True for a render-blocking `<script src>` in <head> (no defer/async/module) (performance/render-blocking-script). */
423
+ blocking?: boolean;
424
+ /** Rendered only in the browser, by a component loaded with `import()` (static mode): absent from a server-rendered route's HTML. */
425
+ clientOnly?: true;
426
+ /** Where this tag was set relative to the route. Never 'none' (absence = no tag). */
427
+ presence: Exclude<Presence, 'none'>;
428
+ /** Whether the tag's value is static/dynamic/absent (design §4). */
429
+ value: Value;
430
+ /** Source file the tag came from (static mode); unset on a rendered head. */
431
+ file?: string;
432
+ }
433
+ /** Resolved effective head for a single route (design §8). */
434
+ interface ResolvedHead {
435
+ /** Route path, e.g. '/blog/[slug]'. */
436
+ route: string;
437
+ /** Which provider produced this. */
438
+ source: 'static' | 'rendered';
439
+ /** Effective head tags after layout-chain composition. */
440
+ tags: HeadTag[];
441
+ /** Representative source file for the route (used for issue locations). */
442
+ file: string;
443
+ }
444
+ /**
445
+ * Whether a `type` attribute (undefined = absent) makes a `<script>` a classic,
446
+ * render-blocking-capable script. Per the HTML spec, absent and the literal empty string are
447
+ * classic; any other value is ASCII-whitespace-stripped and must match a JavaScript MIME type —
448
+ * so a whitespace-only `type` is a data block, not a classic script.
449
+ */
450
+ declare function isClassicScriptType(type: string | undefined): boolean;
451
+ //#endregion
377
452
  //#region src/types.d.ts
378
453
  type Severity = 'critical' | 'warning' | 'info';
379
454
  /** Where a head tag is set, relative to the route being evaluated (design §4). */
@@ -414,6 +489,13 @@ interface KitAlias {
414
489
  * is how Kit stops the plain key from swallowing the nested specifiers.
415
490
  */
416
491
  match: 'prefix' | 'contents' | 'exact';
492
+ /** Appended after the matched rest of a `contents` specifier: the text after `*` in an exports pattern target (`./src/*.js`). */
493
+ suffix?: string;
494
+ /**
495
+ * The directory the entry's targets belong to, when it is wider than `replacement`: a workspace
496
+ * package's directory, so relative imports between its files resolve above the project root.
497
+ */
498
+ root?: string;
417
499
  }
418
500
  /** Project-wide facts precomputed by the runtime layer for project-scope rules (design §10). */
419
501
  interface Project {
@@ -454,6 +536,18 @@ interface Project {
454
536
  * list is never empty: `$lib` is always prepended.
455
537
  */
456
538
  kitAliases?: KitAlias[];
539
+ /**
540
+ * `kitAliases` plus the workspace packages the app's package.json declares, which component
541
+ * resolution (a route's composition, and each-key's imported lists) follows. Absent when the app
542
+ * declares none. Rules that resolve imports read `kitAliases`.
543
+ */
544
+ componentAliases?: KitAlias[];
545
+ /**
546
+ * `componentAliases` (else `kitAliases`) plus the Svelte packages installed in `node_modules` that
547
+ * the app declares. Only the `<head>`/heading walk reads it, so the a11y composition and each-key
548
+ * stay on `componentAliases`. Absent when no such package is installed.
549
+ */
550
+ headAliases?: KitAlias[];
457
551
  /**
458
552
  * Whether `src/app.html` opens with `<!doctype html>` (a11y/doctype). Set from the same read
459
553
  * as `htmlLang`; absent when the file wasn't read (missing or unreadable) — the rule stays
@@ -467,6 +561,11 @@ interface Project {
467
561
  }[];
468
562
  /** Distinct lowercased tag names inside `app.html`'s `<body>` (a11y/required-element's presence set; static mode). */
469
563
  appHtmlBodyTags?: string[];
564
+ /**
565
+ * The shell's own literal `<title>`, `<meta name|property>` (except charset/viewport) and
566
+ * `<link rel="canonical">`, rendered on every route beside `%sveltekit.head%` (static mode).
567
+ */
568
+ appHtmlHeadTags?: Omit<HeadTag, 'presence' | 'file'>[];
470
569
  }
471
570
  declare const defaultProject: Project;
472
571
  /** A concrete, agent-actionable remediation for a finding (design §10, issue #18). */
@@ -601,65 +700,6 @@ declare function formatMarkdownReport(results: Result[], config: Config, meta: {
601
700
  version: string;
602
701
  }): string;
603
702
  //#endregion
604
- //#region src/head.d.ts
605
- /**
606
- * A normalized head tag. The mode-independent boundary (design §8): the static
607
- * SourceHeadProvider (CLI, via the runtime-abstracted `HeadProvider` below) and
608
- * the rendered collector (`@svelte-vitals/vite`, build-time Node) both emit
609
- * these, so rules never need to know which mode produced them.
610
- */
611
- interface HeadTag {
612
- kind: 'title' | 'meta' | 'link' | 'jsonld' | 'script';
613
- /** <meta name="...">. */
614
- name?: string;
615
- /** <meta property="..."> (e.g. og:image). */
616
- property?: string;
617
- /** <link rel="...">. */
618
- rel?: string;
619
- /** <link as="..."> keyword (e.g. 'font') when statically literal; undefined when absent or dynamically bound. */
620
- as?: string;
621
- /** True when a <link> has an `as` attribute at all (literal or dynamic). Distinguishes "no as" from "dynamic as". */
622
- hasAs?: boolean;
623
- /** True when a <link> has a `crossorigin` attribute (presence only; value is irrelevant to the checks). */
624
- hasCrossorigin?: boolean;
625
- /** True when a <meta name="robots"> literal content contains `noindex`/`none`. Undefined when dynamic or absent. */
626
- noindex?: boolean;
627
- /** Literal `<script type="application/ld+json">` content, set only when the script is static. Undefined when dynamic. */
628
- jsonld?: string;
629
- /** Literal visible text of a static <title> or <meta name="description"> content, set only when static. Undefined when dynamic. */
630
- text?: string;
631
- /** Literal `hreflang` of a `<link rel="alternate">` (e.g. 'en', 'en-US', 'x-default'). Undefined when dynamic/absent. */
632
- hreflang?: string;
633
- /** Literal href (link) / src (script) URL when static — used for third-party origin analysis (performance/preconnect). */
634
- href?: string;
635
- /** True for a render-blocking `<script src>` in <head> (no defer/async/module) (performance/render-blocking-script). */
636
- blocking?: boolean;
637
- /** Where this tag was set relative to the route. Never 'none' (absence = no tag). */
638
- presence: Exclude<Presence, 'none'>;
639
- /** Whether the tag's value is static/dynamic/absent (design §4). */
640
- value: Value;
641
- /** Source file the tag came from (static mode); unset on a rendered head. */
642
- file?: string;
643
- }
644
- /** Resolved effective head for a single route (design §8). */
645
- interface ResolvedHead {
646
- /** Route path, e.g. '/blog/[slug]'. */
647
- route: string;
648
- /** Which provider produced this. */
649
- source: 'static' | 'rendered';
650
- /** Effective head tags after layout-chain composition. */
651
- tags: HeadTag[];
652
- /** Representative source file for the route (used for issue locations). */
653
- file: string;
654
- }
655
- /**
656
- * Whether a `type` attribute (undefined = absent) makes a `<script>` a classic,
657
- * render-blocking-capable script. Per the HTML spec, absent and the literal empty string are
658
- * classic; any other value is ASCII-whitespace-stripped and must match a JavaScript MIME type —
659
- * so a whitespace-only `type` is a data block, not a classic script.
660
- */
661
- declare function isClassicScriptType(type: string | undefined): boolean;
662
- //#endregion
663
703
  //#region src/images.d.ts
664
704
  /**
665
705
  * A normalized <img> occurrence — the mode-independent boundary for Performance
@@ -674,52 +714,23 @@ interface ImageInfo {
674
714
  hasAlt: boolean;
675
715
  /** True when the <img> has a literal `loading="lazy"` (performance/lcp-image). Dynamic/spread → false. */
676
716
  lazy: boolean;
677
- /** True when the <img> has a `srcset` attribute (performance/responsive-image). */
717
+ /** True when the <img>, or a `<source>` of its `<picture>`, has a `srcset` attribute (performance/responsive-image). */
678
718
  hasSrcset: boolean;
719
+ /** True when the <img>'s src is known to be an SVG (`isSvgSrc`; performance/responsive-image). */
720
+ svg?: boolean;
679
721
  /** 1-based source line, or 0 if unknown. */
680
722
  line: number;
681
723
  /** Source file the <img> came from. */
682
724
  file: string;
683
725
  }
726
+ /** A `.svg` path (query and fragment ignored) or an inline `data:image/svg+xml` URI. */
727
+ declare function isSvgSrc(src: string): boolean;
684
728
  /** Resolved <img> elements for a single route (page + layout chain). */
685
729
  interface ResolvedImages {
686
730
  route: string;
687
731
  images: ImageInfo[];
688
732
  }
689
733
  //#endregion
690
- //#region src/headings.d.ts
691
- /**
692
- * A normalized page-body heading occurrence — the mode-independent boundary for
693
- * the heading-hierarchy rule (mirrors images.ts). Both providers collect these
694
- * so seo/single-h1 never needs to know which mode produced them.
695
- */
696
- interface HeadingInfo {
697
- /** Heading level 1–6 (the `n` in <hn>). */
698
- level: number;
699
- /** 1-based source line, or 0 if unknown (rendered mode does not track lines). */
700
- line: number;
701
- /** Source file the heading came from. */
702
- file: string;
703
- }
704
- /** Resolved page-body headings for a single route (page + layout chain). */
705
- interface ResolvedHeadings {
706
- route: string;
707
- headings: HeadingInfo[];
708
- /**
709
- * Headings found in child components rendered (transitively) by this route's
710
- * chain files — source mode only; absent in rendered mode. Kept separate from
711
- * `headings` because their position in document order is unknown: safe for
712
- * counting (seo/single-h1), unusable for outline order (seo/heading-level-skip).
713
- */
714
- componentHeadings?: HeadingInfo[];
715
- /**
716
- * This route renders a `<svelte:element>` that may be a heading whose level is not
717
- * statically determinable (`this={`h${n}`}`, an identifier, …) — source mode only.
718
- * Counting stays as-is; only the "no <h1> anywhere" claim becomes unsafe to make.
719
- */
720
- dynamicHeading?: boolean;
721
- }
722
- //#endregion
723
734
  //#region src/a11y.d.ts
724
735
  /** One step of a template branch address: which exclusive block, and which arm of it. */
725
736
  interface BranchStep {
@@ -871,6 +882,48 @@ declare function isTopFragment(id: string): boolean;
871
882
  */
872
883
  declare function stripTextDirective(fragment: string): string;
873
884
  //#endregion
885
+ //#region src/headings.d.ts
886
+ /**
887
+ * A normalized page-body heading occurrence — the mode-independent boundary for
888
+ * the heading-hierarchy rule (mirrors images.ts). Both providers collect these
889
+ * so seo/single-h1 never needs to know which mode produced them.
890
+ */
891
+ interface HeadingInfo {
892
+ /** Heading level 1–6 (the `n` in <hn>). */
893
+ level: number;
894
+ /** 1-based source line, or 0 if unknown (rendered mode does not track lines). */
895
+ line: number;
896
+ /** Source file the heading came from. */
897
+ file: string;
898
+ /**
899
+ * The `{#if}`/`{#await}`/`<svelte:boundary>` arms it sits in (source mode; absent when
900
+ * unconditional), including those of the component usages and layout `{@render children()}`
901
+ * above it. Group numbers are route-wide: each file instance has its own range.
902
+ */
903
+ path?: BranchStep[];
904
+ }
905
+ /** Resolved page-body headings for a single route (page + layout chain). */
906
+ interface ResolvedHeadings {
907
+ route: string;
908
+ headings: HeadingInfo[];
909
+ /**
910
+ * Headings found in child components rendered (transitively) by this route's
911
+ * chain files — source mode only; absent in rendered mode. Kept separate from
912
+ * `headings` because their position in document order is unknown: safe for
913
+ * counting (seo/single-h1), unusable for outline order (seo/heading-level-skip).
914
+ */
915
+ componentHeadings?: HeadingInfo[];
916
+ /**
917
+ * This route may render a heading whose level is not statically determinable: a
918
+ * `<svelte:element>` (`this={`h${n}`}`, an identifier, …), or a component that cannot be
919
+ * followed but is given a literal `h1` element prop (`<Heading tag="h1">`) — source mode only.
920
+ * Counting stays as-is; only the "no <h1> anywhere" claim becomes unsafe to make.
921
+ */
922
+ dynamicHeading?: boolean;
923
+ /** `dynamicHeading`, but from a component loaded with `import()` — source-mode collection folds it in only on routes never server-rendered. */
924
+ clientOnlyHeading?: boolean;
925
+ }
926
+ //#endregion
874
927
  //#region src/kit-module.d.ts
875
928
  /**
876
929
  * Facts parsed from one SvelteKit route/hooks file for the SSR shared-state rules
@@ -937,10 +990,14 @@ interface KitModuleFacts {
937
990
  ssrDisabled?: {
938
991
  line: number;
939
992
  };
993
+ /** Set when this file exports `ssr` as anything but a literal `false` (`true`, a computed value, a re-export) — it may turn SSR back on under a layout's `ssr = false` (see `appSsrDisabled`, `routeNeverSsr`). */
994
+ ssrEnabled?: true;
940
995
  /** Set when this file disables client-side rendering via `export const csr = false` (inline or same-file alias export). With no client runtime, a universal load only runs during SSR — performance/load-waterfall's browser-waterfall premise doesn't hold. */
941
996
  csrDisabled?: {
942
997
  line: number;
943
998
  };
999
+ /** Set when the exported `load` redirects or throws `error()` on every call — every path through its body reaches a `redirect()`/`error()` before any `return`, directly or through a same-file top-level function that always does (see `loadNeverRenders` in kit-module-parse.ts). A `+page` module carrying it means the route never renders its own page. */
1000
+ loadNeverRenders?: true;
944
1001
  /** Sequential-await analysis of the exported `load` function (performance/load-waterfall, performance/sequential-awaits): 1-based lines of await sites that depend on an earlier await's result, and of sites independent of all earlier awaits. Set only when at least one list is non-empty. */
945
1002
  loadWaterfalls?: {
946
1003
  dependentLines: number[];
@@ -953,6 +1010,10 @@ interface KitModuleFacts {
953
1010
  /** Set when the file could not be READ — an environment problem, not a malformed module. */
954
1011
  readFailed?: true;
955
1012
  }
1013
+ /** The rule-context fields the per-route SSR resolution reads. */
1014
+ type SsrScope = Pick<RuleContext, 'kitModules' | 'components' | 'sourceFiles'>;
1015
+ /** Whether a `+page`/`+layout` file (module or component) belongs to a route that is never server-rendered. */
1016
+ declare function routeNeverSsr(file: string, scope: SsrScope): boolean;
956
1017
  //#endregion
957
1018
  //#region src/config-apply.d.ts
958
1019
  /** The severity a setting selects: `'off'`, an explicit severity, or undefined (leave the built-in). */
@@ -969,12 +1030,12 @@ declare function selectRules(rules: Rule[], config: Config): Rule[];
969
1030
  declare function withFailedRulesOff(config: Config, failedRuleIds: readonly string[]): Config;
970
1031
  /**
971
1032
  * The rules that only pay off for a page that appears in a search result, turned off by
972
- * `seo: { indexable: false }`. `seo/single-h1` and `seo/robots-txt` are deliberately absent:
973
- * a primary heading is document structure either way, and a `noindex` meta is only read after
974
- * the page is crawled, so robots.txt still does real work. Design:
1033
+ * `seo: { indexable: false }` — plus `seo/indexability`, whose "is this noindex intentional?"
1034
+ * the switch answers. Every other SEO rule is deliberately absent, and a test fails on an SEO
1035
+ * rule classified neither way. Design:
975
1036
  * docs/superpowers/specs/2026-09-21-noindex-seo-rules-design.md.
976
1037
  */
977
- declare const SEARCH_RESULT_RULES: readonly ["seo/canonical-url", "seo/og-title", "seo/og-description", "seo/og-image", "seo/og-url", "seo/twitter-card", "seo/json-ld", "seo/sitemap-xml", "seo/sitemap-in-robots", "seo/title-length", "seo/description-length"];
1038
+ declare const SEARCH_RESULT_RULES: readonly ["seo/canonical-url", "seo/og-title", "seo/og-description", "seo/og-image", "seo/og-url", "seo/twitter-card", "seo/json-ld", "seo/sitemap-xml", "seo/sitemap-in-robots", "seo/title-length", "seo/description-length", "seo/description-presence", "seo/duplicate-title", "seo/duplicate-description", "seo/hreflang", "seo/ssr-disabled", "seo/indexability"];
978
1039
  /**
979
1040
  * Expand `seo: { indexable: false }` into the `'off'` entries a user writes by hand today, so
980
1041
  * nothing downstream needs a second notion of "not counted". The caller's own map is spread
@@ -1286,4 +1347,4 @@ declare function formatJsonReport(results: Result[], config: Config, meta: {
1286
1347
  version: string;
1287
1348
  }, ruleIds?: readonly string[], examined?: Record<string, Record<string, number>>, skipped?: JsonReport['skipped']): string;
1288
1349
  //#endregion
1289
- export { formatMarkdownReport as $, A11yOccurrenceInfo as A, OrphanEffectFact as At, decodeFragmentId as B, compileOverrides as C, Value as Ct, withFailedRulesOff as D, ComponentFacts as Dt, settingSeverity as E, defineConfig as Et, IDREF_ATTRS as F, skippedFileWarnings as Ft, stripTextDirective as G, isTopFragment as H, LandmarkInput as I, Runtime as It, ImageInfo as J, HeadingInfo as K, NAMING_ATTRS as L, withReadLimit as Lt, ANCESTRY_DEPENDENT_TAGS as M, SuppressionDirective as Mt, ASIDE_DEMOTING_TAGS as N, collectComponentFacts as Nt, withIndexableOff as O, EachBlockFact as Ot, BranchStep as P, emptyComponentFacts as Pt, isClassicScriptType as Q, ResolvedA11y as R, SEARCH_RESULT_RULES as S, TreatDynamicAs as St, selectRules as T, defaultProject as Tt, resolveLandmark as U, foldOccurrences as V, splitTokens as W, HeadTag as X, ResolvedImages as Y, ResolvedHead as Z, isPlainObject as _, RuleOverride as _t, HealthResult as a, hasFailureAtOrAbove as at, validateRuleSetting as b, Scope as bt, ScoreResult as c, Category as ct, Rule as d, Fix as dt, formatGithubReport as et, RuleContext as f, KitAlias as ft, RuleOptionsSpec as g, RuleOptions as gt, RuleOptionSpec as h, Result as ht, formatJsonReport as i, effectiveSeverity as it, A11ySkipCause as j, SourceSpan as jt, KitModuleFacts as k, EffectFact as kt, computeHealth as l, Config as lt, isPenalized as m, Project as mt, RuleEvidence as n, Summary as nt, ScoreModel as o, summarize as ot, docsUrlFor as p, Presence as pt, ResolvedHeadings as q, buildJsonReport as r, classify as rt, ScoreOptions as s, CATEGORIES as st, JsonReport as t, Classification as tt, computeScore as u, Detection as ut, resolveRuleOptions as v, RuleSetting as vt, formatFailedRuleWarning as w, defaultConfig as wt, CompiledOverride as x, Severity as xt, shouldSkipRangeCheck as y, RuleSettingObject as yt, SECTIONING_TAGS as z };
1350
+ export { formatGithubReport as $, routeNeverSsr as A, EachBlockFact as At, NAMING_ATTRS as B, compileOverrides as C, defaultConfig as Ct, withFailedRulesOff as D, ResolvedHead as Dt, settingSeverity as E, HeadTag as Et, ANCESTRY_DEPENDENT_TAGS as F, collectComponentFacts as Ft, isTopFragment as G, SECTIONING_TAGS as H, ASIDE_DEMOTING_TAGS as I, emptyComponentFacts as It, stripTextDirective as J, resolveLandmark as K, BranchStep as L, skippedFileWarnings as Lt, ResolvedHeadings as M, OrphanEffectFact as Mt, A11yOccurrenceInfo as N, SourceSpan as Nt, withIndexableOff as O, isClassicScriptType as Ot, A11ySkipCause as P, SuppressionDirective as Pt, formatMarkdownReport as Q, IDREF_ATTRS as R, Runtime as Rt, SEARCH_RESULT_RULES as S, Value as St, selectRules as T, defineConfig as Tt, decodeFragmentId as U, ResolvedA11y as V, foldOccurrences as W, ResolvedImages as X, ImageInfo as Y, isSvgSrc as Z, isPlainObject as _, RuleSetting as _t, HealthResult as a, summarize as at, validateRuleSetting as b, Severity as bt, ScoreResult as c, Config as ct, Rule as d, KitAlias as dt, Classification as et, RuleContext as f, Presence as ft, RuleOptionsSpec as g, RuleOverride as gt, RuleOptionSpec as h, RuleOptions as ht, formatJsonReport as i, hasFailureAtOrAbove as it, HeadingInfo as j, EffectFact as jt, KitModuleFacts as k, ComponentFacts as kt, computeHealth as l, Detection as lt, isPenalized as m, Result as mt, RuleEvidence as n, classify as nt, ScoreModel as o, CATEGORIES as ot, docsUrlFor as p, Project as pt, splitTokens as q, buildJsonReport as r, effectiveSeverity as rt, ScoreOptions as s, Category as st, JsonReport as t, Summary as tt, computeScore as u, Fix as ut, resolveRuleOptions as v, RuleSettingObject as vt, formatFailedRuleWarning as w, defaultProject as wt, CompiledOverride as x, TreatDynamicAs as xt, shouldSkipRangeCheck as y, Scope as yt, LandmarkInput as z, withReadLimit as zt };