@svelte-vitals/core 0.45.0 → 0.47.0

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/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { ap as CATEGORIES, e as Category, i as Config, aq as Detection, F as Fix, J as JsonReport, ar as Presence, d as Result, as as RuleEvidence, at as RuleOptions, au as RuleOverride, av as RuleSetting, aw as RuleSettingObject, ax as ScoreModel, f as Severity, ay as Summary, az as TreatDynamicAs, V as Value, aA as defineConfig, a0 as formatGithubReport, a2 as formatMarkdownReport, a3 as hasFailureAtOrAbove, ak as summarize } from './index-DbUx4tlY.js';
1
+ export { aq as CATEGORIES, f as Category, b as Config, ar as Detection, F as Fix, J as JsonReport, as as Presence, R as Result, at as RuleEvidence, au as RuleOptions, av as RuleOverride, aw as RuleSetting, ax as RuleSettingObject, ay as ScoreModel, g as Severity, az as Summary, aA as TreatDynamicAs, V as Value, aB as defineConfig, a1 as formatGithubReport, a3 as formatMarkdownReport, a4 as hasFailureAtOrAbove, al as summarize } from './index-Qrw_f9HP.js';
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  formatMarkdownReport,
6
6
  hasFailureAtOrAbove,
7
7
  summarize
8
- } from "./chunk-BCJZO532.js";
8
+ } from "./chunk-25TAKBFU.js";
9
9
  export {
10
10
  CATEGORIES,
11
11
  defineConfig,
@@ -1,7 +1,14 @@
1
- import { C as ComponentFacts, S as SuppressionDirective, R as Runtime, K as KitAlias, a as KitModuleFacts, V as Value, b as Rule, c as RuleContext, d as Result, e as Category, f as Severity, F as Fix, g as RuleOptionSpec, H as HeadTag, h as ResolvedHead, I as ImageInfo, i as Config, J as JsonReport } from './index-DbUx4tlY.js';
2
- export { A as A11yOccurrenceInfo, B as BranchStep, j as Classification, k as CompiledOverride, E as EachBlockFact, l as EffectFact, m as HeadProvider, n as HeadingInfo, o as HealthResult, p as IDREF_ATTRS, L as LANDMARK_ROLES, O as OrphanEffectFact, P as Project, q as READ_CONCURRENCY, r as ResolvedA11y, s as ResolvedHeadings, t as ResolvedImages, u as RuleOptionsSpec, v as Scope, w as ScoreOptions, x as ScoreResult, y as SourceSpan, z as applyOverrides, D as applyRuleSeverities, G as buildJsonReport, M as classify, N as compileOverrides, Q as computeHealth, T as computeScore, U as decodeFragmentId, W as defaultConfig, X as defaultProject, Y as docsUrlFor, Z as effectiveSeverity, _ as foldOccurrences, $ as formatFailedRuleWarning, a0 as formatGithubReport, a1 as formatJsonReport, a2 as formatMarkdownReport, a3 as hasFailureAtOrAbove, a4 as intOption, a5 as isMentionedAnywhere, a6 as isPenalized, a7 as isTopFragment, a8 as listOption, a9 as mapOption, aa as overrideMatches, ab as resolveRuleOptions, ac as scoresByCategory, ad as selectRules, ae as settingOptions, af as settingSeverity, ag as shouldSkipRangeCheck, ah as skippedFileWarnings, ai as splitTokens, aj as stripTextDirective, ak as summarize, al as validateRuleOptions, am as validateRuleSetting, an as withFailedRulesOff, ao as withReadLimit } from './index-DbUx4tlY.js';
1
+ import { S as SuppressionDirective, C as ComponentFacts, R as Result, a as Rule, b as Config, c as Runtime, K as KitAlias, d as KitModuleFacts, V as Value, e as RuleContext, f as Category, g as Severity, F as Fix, h as RuleOptionSpec, H as HeadTag, i as ResolvedHead, I as ImageInfo, J as JsonReport } from './index-Qrw_f9HP.js';
2
+ export { A as A11yOccurrenceInfo, j as A11ySkipCause, B as BranchStep, k as Classification, l as CompiledOverride, E as EachBlockFact, m as EffectFact, n as HeadProvider, o as HeadingInfo, p as HealthResult, q as IDREF_ATTRS, L as LANDMARK_ROLES, O as OrphanEffectFact, P as Project, r as READ_CONCURRENCY, s as ResolvedA11y, t as ResolvedHeadings, u as ResolvedImages, v as RuleOptionsSpec, w as Scope, x as ScoreOptions, y as ScoreResult, z as SourceSpan, D as applyOverrides, G as applyRuleSeverities, M as buildJsonReport, N as classify, Q as compileOverrides, T as computeHealth, U as computeScore, W as decodeFragmentId, X as defaultConfig, Y as defaultProject, Z as docsUrlFor, _ as effectiveSeverity, $ as foldOccurrences, a0 as formatFailedRuleWarning, a1 as formatGithubReport, a2 as formatJsonReport, a3 as formatMarkdownReport, a4 as hasFailureAtOrAbove, a5 as intOption, a6 as isMentionedAnywhere, a7 as isPenalized, a8 as isTopFragment, a9 as listOption, aa as mapOption, ab as overrideMatches, ac as resolveRuleOptions, ad as scoresByCategory, ae as selectRules, af as settingOptions, ag as settingSeverity, ah as shouldSkipRangeCheck, ai as skippedFileWarnings, aj as splitTokens, ak as stripTextDirective, al as summarize, am as validateRuleOptions, an as validateRuleSetting, ao as withFailedRulesOff, ap as withReadLimit } from './index-Qrw_f9HP.js';
3
3
  import { AST } from 'svelte/compiler';
4
4
 
5
+ /**
6
+ * Inline `svelte-vitals-disable-next-line` directives (issue #92). A plain text scan, not an
7
+ * AST walk, so `<script>` (`//`) and template (`<!-- -->`) comments are covered uniformly. The
8
+ * directive must be the entire content of its line; the suppressed line is directive-line + 1.
9
+ * Shared with the Kit-module parser (the security kit-module rules).
10
+ */
11
+ declare function collectSuppressions(source: string): SuppressionDirective[];
5
12
  /** What the per-file parsers produce — `ComponentFacts` minus `file`, with `suppressions` always present. */
6
13
  type ParsedFacts = Omit<ComponentFacts, 'file' | 'suppressions'> & {
7
14
  suppressions: SuppressionDirective[];
@@ -13,6 +20,33 @@ type ParsedFacts = Omit<ComponentFacts, 'file' | 'suppressions'> & {
13
20
  */
14
21
  declare function parseComponentFacts(source: string, filename: string): ParsedFacts;
15
22
 
23
+ /** File-relative-path → the inline directives collected from that file. */
24
+ type DirectiveIndex = ReadonlyMap<string, readonly SuppressionDirective[]>;
25
+ /**
26
+ * Apply inline `svelte-vitals-disable-next-line` directives to a finished result set — one
27
+ * mechanism, over `Result`s, so any rule that emits a line-anchored finding is covered by
28
+ * construction rather than by per-family wiring (design 2026-08-17).
29
+ *
30
+ * Runs on the output of `applyOverrides(applyRuleSeverities(...))`, so a directive silences
31
+ * whatever survived config, and every consumer downstream — scoring, `--fail-on`, the suppressions
32
+ * file, the reporters — sees the same suppressed set. `fileRule` keeps its own earlier filter and
33
+ * is unaffected: a result it already suppressed never arrives here, and its PASS is not penalized.
34
+ *
35
+ * A rule+route whose every penalized result was suppressed gains one PASS, located at the first
36
+ * suppressed result in emission order — the anchor the rules themselves use. Its message is the
37
+ * rule's `passLabel` when it declares one, else its `title`.
38
+ */
39
+ declare function applyInlineDirectives(results: readonly Result[], index: DirectiveIndex, rules: readonly Rule[], config: Config): Result[];
40
+ /**
41
+ * Directives naming a rule id that no rule declares. Unlike a directive that matches no finding —
42
+ * legitimate whenever the code was fixed, the rule turned off, or the run scoped — a misspelled id
43
+ * can never be right, so it is reported rather than silently suppressing nothing.
44
+ *
45
+ * Compared against every registered rule, not the selected ones: disabling a rule in config must
46
+ * not turn its directives into errors.
47
+ */
48
+ declare function unknownDirectiveIds(index: DirectiveIndex, rules: readonly Rule[]): string[];
49
+
16
50
  /**
17
51
  * Fallback facts for a file that fails to read or parse (dev tooling must never
18
52
  * throw). This is the single source of truth for the empty-facts shape — add new
@@ -626,6 +660,37 @@ declare const a11yPlaceholderLabelOption: Rule;
626
660
 
627
661
  declare const a11yRequireDatetime: Rule;
628
662
 
663
+ declare const a11yDeprecatedElement: Rule;
664
+
665
+ declare const a11yDeprecatedAttr: Rule;
666
+
667
+ declare const a11yDisallowedAriaProps: Rule;
668
+
669
+ declare const a11yDeprecatedAria: Rule;
670
+
671
+ declare const a11yDisallowedElement: Rule;
672
+
673
+ /**
674
+ * Content-model membership over the literal element tree
675
+ * (design 2026-08-20-permitted-contents-rule-design.md; measured
676
+ * 2026-08-20-permitted-contents-measured.md). Broken structure (closed containers, headings,
677
+ * structure-bound children) is `warning`; category mismatches are `info`.
678
+ */
679
+ declare const a11yPermittedContents: Rule;
680
+
681
+ /**
682
+ * a11y/required-element — every route must contain the elements the project declares (design
683
+ * 2026-08-19-config-driven-element-rules). Judged on the composed route: the layout chain, the page,
684
+ * every resolved component and the shell's `<body>`, because "`<main>` on every route" is a claim
685
+ * about the page the user sees, and a `+page.svelte` alone rarely holds it.
686
+ *
687
+ * Presence is open-world: an unresolved component can only add elements, so a route with every
688
+ * declared tag present passes however closed the world is. Absence needs the closed world for
689
+ * elements (`elementsClosed`), which spreads and expression ids do not disturb; a route missing a
690
+ * declared tag with the world open emits nothing.
691
+ */
692
+ declare const a11yRequiredElement: Rule;
693
+
629
694
  declare const a11yDoctype: Rule;
630
695
 
631
696
  /**
@@ -650,13 +715,15 @@ declare const a11yTopLevelLandmark: Rule;
650
715
  declare const a11yIdDuplication: Rule;
651
716
 
652
717
  /**
653
- * a11y/no-missing-id-ref — a `for`/`aria-labelledby`/`aria-describedby`/`aria-controls`/
654
- * `aria-activedescendant`/same-page `href="#…"` referencing an `id` absent from the composed
655
- * route. Universal ("no element anywhere defines this id") needs a closed world, so this rule
718
+ * a11y/no-missing-id-ref — an id-reference attribute (`IDREF_ATTRS`: HTML's `for`/`list`/`headers`/
719
+ * `form`/the popover and command targets, and every ARIA id-reference property) or a same-page
720
+ * `href="#…"` referencing an `id` absent from the composed route. Universal ("no element anywhere defines this id") needs a closed world, so this rule
656
721
  * runs only on routes `ctx.a11y[].fullyResolved` marks fully resolved — see the rule docs.
657
722
  */
658
723
  declare const a11yNoMissingIdRef: Rule;
659
724
 
725
+ declare const a11yUnverifiedIdRef: Rule;
726
+
660
727
  declare const allRules: Rule[];
661
728
 
662
729
  /** One configurable option of a rule, flattened for `svelte-vitals explain`'s output. */
@@ -667,6 +734,8 @@ interface RuleOptionInfo {
667
734
  default: number | readonly string[] | Readonly<Record<string, string>>;
668
735
  min?: number;
669
736
  max?: number;
737
+ /** For a `string-list` with a reserved grammar: what each entry must be, in words (the regex stays out of `explain --json`). */
738
+ pattern?: string;
670
739
  }
671
740
  interface RuleInfo {
672
741
  id: string;
@@ -864,4 +933,4 @@ declare function formatHtmlReport(results: Result[], config: Config, meta: {
864
933
  coreVersion?: string;
865
934
  }): string;
866
935
 
867
- export { APP_SCRIPT, APP_STYLE, type AppSnapshot, BAND_COLOR, CHILD_NODE_KEYS, ComponentFacts, type ConsoleReportOptions, type FailedRule, HeadTag, ImageInfo, KitAlias, KitModuleFacts, type Palette, ROBOTS_SOURCE_PATHS, type RawKitAliases, ResolvedHead, type RouteBadge, Rule, RuleContext, type RuleInfo, type RuleOptionInfo, RuleOptionSpec, Runtime, SITEMAP_SOURCE_PATHS, SVELTE_CONFIG_FILES, SuppressionDirective, VITE_CONFIG_FILES, type ViteKitConfigResult, a11yAccessibleName, a11yDoctype, a11yDuplicateLandmark, a11yIdDuplication, a11yInteractiveNesting, a11yInvalidAriaValue, a11yInvalidRole, a11yLabelHasControl, a11yNoMissingIdRef, a11yPlaceholderLabelOption, a11yRequireDatetime, a11yRequiredAriaProps, a11yTopLevelLandmark, a11yUnknownAriaAttribute, a11yUseList, allRules, architectureComponentSize, architectureDirectoryNaming, architectureDocLinkTarget, architecturePrivateScopeImport, architecturePropCount, architectureReservedDirectoryNames, architectureReservedNamePlacement, architectureRouteComponentImport, architectureUnitEntryFile, attrText, attrTextOf, attrValue, attrValueOf, buildHtmlDocument, collectComponentFacts, collectKitModuleFacts, collectSourceFiles, correctnessBasePathNavigation, correctnessCheckableBindValue, correctnessEachIndexKey, correctnessEachKey, correctnessEffectAsDerived, correctnessEffectAsOnMount, correctnessInstanceBrowserGlobal, correctnessNonreactiveBuiltinState, correctnessOrphanEffect, correctnessOrphanLifecycle, correctnessPropMutation, correctnessServerBrowserGlobal, correctnessStalePropDerivation, correctnessUnmutatedState, emptyComponentFacts, emptyKitModuleFacts, escapeHtml, explainRule, findAttr, findKitAliasesInSvelteConfig, findKitPathsBaseInSvelteConfig, findKitPathsBaseInViteConfig, findMinifyDisabled, formatAgentReport, formatConsoleReport, formatHtmlReport, formatSarifReport, headTagRule, imageRule, lineOf, linkRule, noColorPalette, parseComponentFacts, parseKitModuleFacts, parseSvelte, performanceFontPreloadCrossorigin, performanceHeavyImport, performanceImageDimensions, performanceImageLoadingHint, performanceLcpImage, performanceLoadWaterfall, performanceMinifyDisabled, performanceNamespaceImport, performancePreconnect, performancePreloadMissingAs, performanceRenderBlockingScript, performanceResponsiveImage, performanceSequentialAwaits, performanceStateRaw, renderAppShell, resolveKitAliases, resolveKitPathsBase, resolveRepoLocalPath, resolveRunesModuleSpecifier, runRules, safeHref, scoreBand, scoreColor, securityHandlerStateWrite, securityJavascriptUrl, securityRawHtml, securityServerModuleState, securitySharedStateImport, 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, terminalSafe, textFromNodes, valueFromNodes };
936
+ export { APP_SCRIPT, APP_STYLE, type AppSnapshot, BAND_COLOR, CHILD_NODE_KEYS, ComponentFacts, type ConsoleReportOptions, type DirectiveIndex, type FailedRule, HeadTag, ImageInfo, KitAlias, KitModuleFacts, type Palette, ROBOTS_SOURCE_PATHS, type RawKitAliases, ResolvedHead, type RouteBadge, Rule, RuleContext, type RuleInfo, type RuleOptionInfo, RuleOptionSpec, Runtime, SITEMAP_SOURCE_PATHS, SVELTE_CONFIG_FILES, SuppressionDirective, VITE_CONFIG_FILES, type ViteKitConfigResult, a11yAccessibleName, a11yDeprecatedAria, a11yDeprecatedAttr, a11yDeprecatedElement, a11yDisallowedAriaProps, a11yDisallowedElement, a11yDoctype, a11yDuplicateLandmark, a11yIdDuplication, a11yInteractiveNesting, a11yInvalidAriaValue, a11yInvalidRole, a11yLabelHasControl, a11yNoMissingIdRef, a11yPermittedContents, a11yPlaceholderLabelOption, a11yRequireDatetime, a11yRequiredAriaProps, a11yRequiredElement, a11yTopLevelLandmark, a11yUnknownAriaAttribute, a11yUnverifiedIdRef, a11yUseList, allRules, applyInlineDirectives, architectureComponentSize, architectureDirectoryNaming, architectureDocLinkTarget, architecturePrivateScopeImport, architecturePropCount, architectureReservedDirectoryNames, architectureReservedNamePlacement, architectureRouteComponentImport, architectureUnitEntryFile, attrText, attrTextOf, attrValue, attrValueOf, buildHtmlDocument, collectComponentFacts, collectKitModuleFacts, collectSourceFiles, collectSuppressions, correctnessBasePathNavigation, correctnessCheckableBindValue, correctnessEachIndexKey, correctnessEachKey, correctnessEffectAsDerived, correctnessEffectAsOnMount, correctnessInstanceBrowserGlobal, correctnessNonreactiveBuiltinState, correctnessOrphanEffect, correctnessOrphanLifecycle, correctnessPropMutation, correctnessServerBrowserGlobal, correctnessStalePropDerivation, correctnessUnmutatedState, emptyComponentFacts, emptyKitModuleFacts, escapeHtml, explainRule, findAttr, findKitAliasesInSvelteConfig, findKitPathsBaseInSvelteConfig, findKitPathsBaseInViteConfig, findMinifyDisabled, formatAgentReport, formatConsoleReport, formatHtmlReport, formatSarifReport, headTagRule, imageRule, lineOf, linkRule, noColorPalette, parseComponentFacts, parseKitModuleFacts, parseSvelte, performanceFontPreloadCrossorigin, performanceHeavyImport, performanceImageDimensions, performanceImageLoadingHint, performanceLcpImage, performanceLoadWaterfall, performanceMinifyDisabled, performanceNamespaceImport, performancePreconnect, performancePreloadMissingAs, performanceRenderBlockingScript, performanceResponsiveImage, performanceSequentialAwaits, performanceStateRaw, renderAppShell, resolveKitAliases, resolveKitPathsBase, resolveRepoLocalPath, resolveRunesModuleSpecifier, runRules, safeHref, scoreBand, scoreColor, securityHandlerStateWrite, securityJavascriptUrl, securityRawHtml, securityServerModuleState, securitySharedStateImport, 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, terminalSafe, textFromNodes, unknownDirectiveIds, valueFromNodes };
package/dist/internal.js CHANGED
@@ -4,6 +4,11 @@ import {
4
4
  LANDMARK_ROLES,
5
5
  SEVERITY_RANK,
6
6
  a11yAccessibleName,
7
+ a11yDeprecatedAria,
8
+ a11yDeprecatedAttr,
9
+ a11yDeprecatedElement,
10
+ a11yDisallowedAriaProps,
11
+ a11yDisallowedElement,
7
12
  a11yDoctype,
8
13
  a11yDuplicateLandmark,
9
14
  a11yIdDuplication,
@@ -12,11 +17,14 @@ import {
12
17
  a11yInvalidRole,
13
18
  a11yLabelHasControl,
14
19
  a11yNoMissingIdRef,
20
+ a11yPermittedContents,
15
21
  a11yPlaceholderLabelOption,
16
22
  a11yRequireDatetime,
17
23
  a11yRequiredAriaProps,
24
+ a11yRequiredElement,
18
25
  a11yTopLevelLandmark,
19
26
  a11yUnknownAriaAttribute,
27
+ a11yUnverifiedIdRef,
20
28
  a11yUseList,
21
29
  allRules,
22
30
  applyOverrides,
@@ -37,6 +45,7 @@ import {
37
45
  buildJsonReport,
38
46
  classify,
39
47
  collectNamedImportAliases,
48
+ collectSuppressions,
40
49
  collectTopLevelBindings,
41
50
  compileOverrides,
42
51
  computeHealth,
@@ -156,7 +165,58 @@ import {
156
165
  validateRuleSetting,
157
166
  valueFromNodes,
158
167
  withFailedRulesOff
159
- } from "./chunk-BCJZO532.js";
168
+ } from "./chunk-25TAKBFU.js";
169
+
170
+ // src/inline-directives.ts
171
+ function directiveFor(index, r) {
172
+ const line = r.line;
173
+ if (r.location === void 0 || line === void 0 || line <= 0) return void 0;
174
+ return (index.get(r.location) ?? []).find((d) => d.line === line && (!d.ruleIds || d.ruleIds.includes(r.id)));
175
+ }
176
+ function applyInlineDirectives(results, index, rules, config) {
177
+ const labels = new Map(rules.map((r) => [r.id, r.passLabel ?? r.title]));
178
+ const kept = [];
179
+ const silenced = /* @__PURE__ */ new Map();
180
+ const survived = /* @__PURE__ */ new Set();
181
+ for (const r of results) {
182
+ if (!isPenalized(r.detection, config.treatDynamicAs)) {
183
+ kept.push(r);
184
+ continue;
185
+ }
186
+ const key = `${r.id} ${r.route ?? ""}`;
187
+ if (directiveFor(index, r) !== void 0) {
188
+ if (!silenced.has(key)) silenced.set(key, r);
189
+ continue;
190
+ }
191
+ survived.add(key);
192
+ kept.push(r);
193
+ }
194
+ for (const [key, r] of silenced) {
195
+ if (survived.has(key)) continue;
196
+ kept.push({
197
+ id: r.id,
198
+ ...r.category ? { category: r.category } : {},
199
+ severity: r.severity,
200
+ detection: { presence: "own", value: "static" },
201
+ ...r.route !== void 0 ? { route: r.route } : {},
202
+ ...r.location !== void 0 ? { location: r.location } : {},
203
+ message: labels.get(r.id) ?? r.id
204
+ });
205
+ }
206
+ return kept;
207
+ }
208
+ function unknownDirectiveIds(index, rules) {
209
+ const known = new Set(rules.map((r) => r.id));
210
+ const seen = /* @__PURE__ */ new Set();
211
+ for (const [file, directives] of index) {
212
+ for (const d of directives) {
213
+ for (const id of d.ruleIds ?? []) {
214
+ if (!known.has(id)) seen.add(`${file}:${d.line - 1} disables unknown rule "${id}"`);
215
+ }
216
+ }
217
+ }
218
+ return [...seen].sort();
219
+ }
160
220
 
161
221
  // src/component.ts
162
222
  function skippedFileWarnings(facts) {
@@ -1561,6 +1621,11 @@ export {
1561
1621
  SVELTE_CONFIG_FILES,
1562
1622
  VITE_CONFIG_FILES,
1563
1623
  a11yAccessibleName,
1624
+ a11yDeprecatedAria,
1625
+ a11yDeprecatedAttr,
1626
+ a11yDeprecatedElement,
1627
+ a11yDisallowedAriaProps,
1628
+ a11yDisallowedElement,
1564
1629
  a11yDoctype,
1565
1630
  a11yDuplicateLandmark,
1566
1631
  a11yIdDuplication,
@@ -1569,13 +1634,17 @@ export {
1569
1634
  a11yInvalidRole,
1570
1635
  a11yLabelHasControl,
1571
1636
  a11yNoMissingIdRef,
1637
+ a11yPermittedContents,
1572
1638
  a11yPlaceholderLabelOption,
1573
1639
  a11yRequireDatetime,
1574
1640
  a11yRequiredAriaProps,
1641
+ a11yRequiredElement,
1575
1642
  a11yTopLevelLandmark,
1576
1643
  a11yUnknownAriaAttribute,
1644
+ a11yUnverifiedIdRef,
1577
1645
  a11yUseList,
1578
1646
  allRules,
1647
+ applyInlineDirectives,
1579
1648
  applyOverrides,
1580
1649
  applyRuleSeverities,
1581
1650
  architectureComponentSize,
@@ -1597,6 +1666,7 @@ export {
1597
1666
  collectComponentFacts,
1598
1667
  collectKitModuleFacts,
1599
1668
  collectSourceFiles,
1669
+ collectSuppressions,
1600
1670
  compileOverrides,
1601
1671
  computeHealth,
1602
1672
  computeScore,
@@ -1724,6 +1794,7 @@ export {
1724
1794
  summarize,
1725
1795
  terminalSafe,
1726
1796
  textFromNodes,
1797
+ unknownDirectiveIds,
1727
1798
  validateRuleOptions,
1728
1799
  validateRuleSetting,
1729
1800
  valueFromNodes,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svelte-vitals/core",
3
- "version": "0.45.0",
3
+ "version": "0.47.0",
4
4
  "description": "Shared, runtime-agnostic core for svelte-vitals (types, rule engine, scorer, reporter).",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  "svelte": "^5.56.9"
30
30
  },
31
31
  "devDependencies": {
32
+ "@markuplint/html-spec": "4.18.0",
32
33
  "@types/aria-query": "^5.0.4",
33
34
  "@types/estree": "^1.0.9",
34
35
  "@types/node": "^24.13.3",
@@ -51,6 +52,7 @@
51
52
  "build": "tsup",
52
53
  "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json --noEmit",
53
54
  "test": "vitest run",
54
- "gen:schema-vocab": "node scripts/gen-schema-vocab.js"
55
+ "gen:schema-vocab": "node scripts/gen-schema-vocab.js",
56
+ "gen:html-spec": "node scripts/gen-html-spec.js"
55
57
  }
56
58
  }