@svelte-vitals/core 0.30.0 → 0.31.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.
Files changed (3) hide show
  1. package/dist/index.d.ts +200 -14
  2. package/dist/index.js +774 -65
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -17,6 +17,33 @@ interface Detection {
17
17
  presence: Presence;
18
18
  value: Value;
19
19
  }
20
+ /**
21
+ * One compiled SvelteKit alias entry, in the order Kit builds them (`get_config_aliases` in
22
+ * `@sveltejs/kit/src/exports/vite/utils.js`): `$lib` first, then `kit.alias` in declaration
23
+ * order. Resolution takes the FIRST matching entry, exactly as Vite's alias plugin does, so
24
+ * **position is precedence** — the list is never sorted and a longer `find` never wins on
25
+ * length alone.
26
+ */
27
+ interface KitAlias {
28
+ /** The alias key, with any trailing `/*` removed. */
29
+ find: string;
30
+ /**
31
+ * The project-relative target: posixified, with any trailing `/*` and any trailing slashes
32
+ * removed. `null` when the config's value is not a string literal — such an entry still
33
+ * matches (holding its position and its mode) but resolves to undefined, so a specifier we
34
+ * cannot resolve stays unresolved instead of falling through to a later entry.
35
+ */
36
+ replacement: string | null;
37
+ /**
38
+ * How `find` matches a specifier, mirroring Kit's three compiled entry shapes:
39
+ * - `prefix` — `spec === find` or `spec.startsWith(find + '/')`; a plain key.
40
+ * - `contents` — `spec.startsWith(find + '/')` only; from a `key/*` key, which Kit
41
+ * documents as matching "the contents of a directory, not the directory itself".
42
+ * - `exact` — `spec === find` only; a plain key whose `key/*` form is ALSO declared, which
43
+ * is how Kit stops the plain key from swallowing the nested specifiers.
44
+ */
45
+ match: 'prefix' | 'contents' | 'exact';
46
+ }
20
47
  /** Project-wide facts precomputed by the runtime layer for project-scope rules (design §10). */
21
48
  interface Project {
22
49
  hasRobotsTxt: boolean;
@@ -47,6 +74,13 @@ interface Project {
47
74
  value?: string;
48
75
  file: string;
49
76
  };
77
+ /**
78
+ * The project's compiled SvelteKit alias entries, in Kit's own order (`$lib` first), read from
79
+ * `svelte.config.{js,ts}`. Absent means no config was read — resolution then falls back to
80
+ * `$lib` → `src/lib`, which is what this analyzer assumed unconditionally before. A collected
81
+ * list is never empty: `$lib` is always prepended.
82
+ */
83
+ kitAliases?: KitAlias[];
50
84
  }
51
85
  declare const defaultProject: Project;
52
86
  /** A concrete, agent-actionable remediation for a finding (design §10, issue #18). */
@@ -152,7 +186,21 @@ interface Runtime {
152
186
  readFile(path: string): Promise<string>;
153
187
  /** Whether a path exists. */
154
188
  exists(path: string): Promise<boolean>;
155
- /** Glob relative to `cwd`, returning paths (adapter decides abs/rel convention). */
189
+ /**
190
+ * Paths matching `pattern`, relative to `cwd`.
191
+ *
192
+ * **Dot files and dot directories are excluded**, and an adapter must keep it that way: the
193
+ * directory-shaped Architecture rules derive their directory set from these paths, and one of them
194
+ * enumerates a parent's children exhaustively, so a `.server/` appearing here would be reported as
195
+ * an undeclared name. Both shipped adapters pass `dot: false`.
196
+ *
197
+ * **Every returned path is a file, never a directory**, and an adapter must keep that true too:
198
+ * `architecture/reserved-directory-names`' unit test takes a directory's immediate children from
199
+ * this same inventory and asks whether one of them is a file named after the directory, so an
200
+ * adapter that let a directory through here would let a bare `Card/Card` satisfy that test as if it
201
+ * were an entry file. Both shipped adapters get this for free from their glob library's default,
202
+ * which returns files only unless asked to include directories.
203
+ */
156
204
  glob(pattern: string, cwd: string): Promise<string[]>;
157
205
  /** Join path segments without depending on `node:path`. */
158
206
  join(...parts: string[]): string;
@@ -363,10 +411,17 @@ interface ComponentFacts {
363
411
  propCount: number;
364
412
  /** Module specifiers of every `import` in the instance + module scripts (performance/heavy-import). */
365
413
  imports: string[];
366
- /** Module specifiers of every `import`, each with its source line (performance/heavy-import). */
414
+ /**
415
+ * Module specifiers of every `import`, each with its source line (performance/heavy-import,
416
+ * architecture/route-component-import). `type` marks a declaration that contributes **no runtime
417
+ * value binding** — either `import type …`, or one whose every specifier is inline-typed
418
+ * (`import { type A } from …`). A specifier-less side-effect import is not marked: it still loads
419
+ * the module. Optional, so existing external constructors of `ComponentFacts` are unaffected.
420
+ */
367
421
  importSpans: {
368
422
  source: string;
369
423
  line: number;
424
+ type?: true;
370
425
  }[];
371
426
  /** Value `import * as X from '<bare pkg>'` namespace imports (type-only excluded) — performance/namespace-import. */
372
427
  namespaceImports: {
@@ -448,6 +503,21 @@ declare function emptyComponentFacts(file: string): ComponentFacts;
448
503
  */
449
504
  declare function collectComponentFacts(rt: Runtime, cwd: string): Promise<ComponentFacts[]>;
450
505
 
506
+ /**
507
+ * Every file under `src/`, as project-relative paths, sorted. Paths only — nothing is
508
+ * read, so this is the cheaper of the two passes over `src/` (the component collector
509
+ * already walks the same tree and reads every `.svelte`).
510
+ *
511
+ * Directory-shaped rules derive their directory set from these paths' ancestor prefixes
512
+ * rather than globbing a second time; see `architecture/unit-entry-file`. The list is
513
+ * sorted so anything that picks "the first file under a directory" is deterministic.
514
+ *
515
+ * Two properties of the result the directory-shaped rules depend on: a directory containing no file
516
+ * at any depth does not appear among these paths' ancestor prefixes and so does not exist as far as
517
+ * those rules are concerned, and dot directories never appear at all (see `Runtime.glob`).
518
+ */
519
+ declare function collectSourceFiles(rt: Runtime, cwd: string): Promise<string[]>;
520
+
451
521
  /**
452
522
  * Facts parsed from one SvelteKit route/hooks file for the SSR shared-state rules
453
523
  * (the security kit-module rules). Collected by `collectKitModuleFacts` (static/CLI + vite build mode).
@@ -514,19 +584,21 @@ interface KitModuleFacts {
514
584
 
515
585
  /**
516
586
  * Resolve an import specifier to a repo-relative `.svelte.ts`/`.svelte.js` path, or
517
- * undefined when it cannot be a runes module: `$lib/` maps to `src/lib/`, `./`/`../`
518
- * resolve against the importing file's directory; bare packages, other aliases, and
587
+ * undefined when it cannot be a runes module: delegates to `resolveRepoLocalPath` with
588
+ * `aliases` (defaulting to `$lib` `src/lib` when omitted), so a project's declared
589
+ * `kit.alias`/`kit.files.lib` resolve here exactly as they do at rule time; `./`/`../`
590
+ * resolve against the importing file's directory; bare packages, unmatched aliases, and
519
591
  * a relative specifier whose `..` segments escape the repo root are skipped. An
520
592
  * extensionless `…/x.svelte` specifier canonicalises to `….svelte.ts` (security/shared-state-import also
521
593
  * tries the `.js` sibling when matching).
522
594
  */
523
- declare function resolveRunesModuleSpecifier(spec: string, importerFile: string): string | undefined;
595
+ declare function resolveRunesModuleSpecifier(spec: string, importerFile: string, aliases?: readonly KitAlias[]): string | undefined;
524
596
  /**
525
597
  * Parse one SvelteKit route/hooks file's SSR shared-state facts (the security kit-module rules). Uses
526
598
  * the shared wrap parser (`parseModuleProgram`), so reported lines subtract the
527
599
  * 1-line wrap prefix; suppressions are scanned on the unwrapped source.
528
600
  */
529
- declare function parseKitModuleFacts(source: string, filename: string): Omit<KitModuleFacts, 'file' | 'kind'>;
601
+ declare function parseKitModuleFacts(source: string, filename: string, aliases?: readonly KitAlias[]): Omit<KitModuleFacts, 'file' | 'kind'>;
530
602
 
531
603
  /** Fallback facts for a Kit file that fails to read or parse (dev tooling must never throw). */
532
604
  declare function emptyKitModuleFacts(file: string, kind: KitModuleFacts['kind']): KitModuleFacts;
@@ -536,8 +608,11 @@ declare function emptyKitModuleFacts(file: string, kind: KitModuleFacts['kind'])
536
608
  * `src/hooks.server`. `src/lib/server/**` is deliberately NOT scanned — legitimate
537
609
  * module singletons (DB connections, clients) live there (design). A file that
538
610
  * fails to read or parse contributes empty facts instead of aborting the scan.
611
+ *
612
+ * `aliases` is the project's compiled alias list (`Project.kitAliases`); omitted,
613
+ * specifiers resolve through `$lib` → `src/lib` only.
539
614
  */
540
- declare function collectKitModuleFacts(rt: Runtime, cwd: string): Promise<KitModuleFacts[]>;
615
+ declare function collectKitModuleFacts(rt: Runtime, cwd: string, aliases?: readonly KitAlias[]): Promise<KitModuleFacts[]>;
541
616
 
542
617
  /**
543
618
  * The `build: { minify: false }` override, when present as a literal: returns the
@@ -566,6 +641,44 @@ type ViteKitConfigResult =
566
641
  value?: string;
567
642
  };
568
643
  };
644
+ /** `kit.alias` and `kit.files.lib` as written, before Kit compiles them into ordered entries. */
645
+ type RawKitAliases = {
646
+ /**
647
+ * `kit.alias` entries in declaration order, `value: null` where the config's value is not a
648
+ * string literal. **Undefined means the key set is unknowable** — a spread or a computed key
649
+ * puts an unknown key at a known position, and an unknown key could shadow anything after it,
650
+ * with no `find` to record that with. The caller then discards every user entry.
651
+ */
652
+ entries?: {
653
+ key: string;
654
+ value: string | null;
655
+ }[];
656
+ /**
657
+ * `kit.files.lib`, in three distinct states: **absent** (`undefined`) — there is no `lib`
658
+ * property, or `files` itself does not resolve to an object literal; a **literal** (the
659
+ * string) — `files.lib` is a string literal; **present but unreadable** (`null`) — the `lib`
660
+ * property exists but its value is not statically a string (e.g. a computed expression). The
661
+ * `null` state must not collapse into "absent": the caller cannot fall back to `src/lib`
662
+ * without risking a wrong answer, because the project may have moved `$lib` to something this
663
+ * parser simply couldn't read.
664
+ */
665
+ filesLib?: string | null;
666
+ };
667
+ /** `kit.alias` and `kit.files.lib` from a `svelte.config.{js,ts}` source. */
668
+ declare function findKitAliasesInSvelteConfig(source: string): RawKitAliases;
669
+ /**
670
+ * The project's compiled alias list, following SvelteKit's config precedence: options passed to
671
+ * the `sveltekit()` Vite plugin make `svelte.config` irrelevant (Kit logs "svelte.config.js is
672
+ * ignored when options are passed via your Vite config"), so aliases are read from
673
+ * `svelte.config` only when the Vite config carries no plugin config. Reading `kit.alias` out of
674
+ * a plugin config is deliberately not done — that costs reach, not correctness, and such a
675
+ * project keeps the resolver's default `$lib` behaviour. Undefined means "no config was read".
676
+ */
677
+ declare function resolveKitAliases(viteConfig: {
678
+ source: string;
679
+ } | undefined, svelteConfig: {
680
+ source: string;
681
+ } | undefined): KitAlias[] | undefined;
569
682
  /** `kit.paths.base` from a `svelte.config.{js,ts}` source. */
570
683
  declare function findKitPathsBaseInSvelteConfig(source: string): {
571
684
  value?: string;
@@ -716,6 +829,23 @@ declare function intOption(options: RuleOptions, key: string, fallback?: number)
716
829
  declare function listOption(options: RuleOptions, key: string): string[];
717
830
  /** As `intOption`, for a `string-map` option. */
718
831
  declare function mapOption(options: RuleOptions, key: string): Record<string, string>;
832
+ /**
833
+ * Whether any config layer so much as mentions `ruleId` — its `rules` entry, or any `overrides`
834
+ * entry's.
835
+ *
836
+ * A rule that is inert until declared can return early on `false` instead of resolving options once
837
+ * per target and discarding the result. That waste is not hypothetical: the three directory-shaped
838
+ * Architecture rules resolve per directory, so an unconfigured project pays it for every directory
839
+ * under `src/` three times over, on every dev-server save. Measured 2026-07-30 over a synthetic tree
840
+ * of 1,523 directories: 5.4 ms per analysis, for rules that are off by default and therefore produce
841
+ * nothing.
842
+ *
843
+ * Deliberately conservative. It asks only whether the rule is *mentioned*, not whether the mention
844
+ * resolves to a non-empty value, so a `'off'` severity with no options still answers `true` and the
845
+ * caller does its normal work. A cheaper-but-wrong version of this would make a rule skip work it
846
+ * owed; this one can only ever fail to save time.
847
+ */
848
+ declare function isMentionedAnywhere(config: Config, ruleId: string): boolean;
719
849
  /**
720
850
  * Effective options for a rule at a target: built-in defaults, then
721
851
  * `config.rules[ruleId].options`, then every matching `config.overrides` entry
@@ -799,6 +929,12 @@ interface RuleContext {
799
929
  components?: ComponentFacts[];
800
930
  /** Per-file SvelteKit route/hooks facts for the SSR shared-state rules (static/CLI + vite build mode only). */
801
931
  kitModules?: KitModuleFacts[];
932
+ /**
933
+ * Every file under `src/`, as project-relative paths, for directory-shaped Architecture rules
934
+ * (static/CLI + vite build mode only). Sorted — see `collectSourceFiles`, which is what both
935
+ * adapters use to build it.
936
+ */
937
+ sourceFiles?: string[];
802
938
  project: Project;
803
939
  config: Config;
804
940
  }
@@ -810,9 +946,9 @@ interface Rule {
810
946
  severity: Severity;
811
947
  /** 'route' = evaluated per route, 'project' = site-wide (design §10, §12). */
812
948
  scope: Scope;
813
- /** Why this rule matters — one or two sentences, surfaced by explain_rule (issue #24). */
949
+ /** Why this rule matters — one or two sentences, surfaced by `svelte-vitals explain` (issue #24). */
814
950
  rationale: string;
815
- /** Canonical remediation template, shared by findings and explain_rule (issue #24). */
951
+ /** Canonical remediation template, shared by findings and `svelte-vitals explain` (issue #24). */
816
952
  fix?: Fix;
817
953
  /** Configurable options for this rule; absent means the rule takes none. */
818
954
  options?: RuleOptionsSpec;
@@ -1073,6 +1209,49 @@ declare const architecturePropCount: Rule;
1073
1209
  */
1074
1210
  declare const architecturePrivateScopeImport: Rule;
1075
1211
 
1212
+ /**
1213
+ * architecture/unit-entry-file — a directory declared to be a unit must contain a file named
1214
+ * after it (design 2026-07-28). L3: the declarations come from the project's own `units`,
1215
+ * `pascalCaseUnits` and `exclude` options and are never inferred, so the rule is inert until then.
1216
+ *
1217
+ * The directory set is every ancestor path prefix of every file, so a directory holding only
1218
+ * subdirectories is checked too. Violations report at a file inside the directory rather than at
1219
+ * the directory, because `filterToChangedFiles` keeps only locations git lists as changed.
1220
+ */
1221
+ declare const architectureUnitEntryFile: Rule;
1222
+
1223
+ /**
1224
+ * architecture/directory-naming — a directory must be named in the casing its location declares
1225
+ * (design 2026-07-29). L3: the declarations come from the project's own `directories` and `exclude`
1226
+ * options and are never inferred, so the rule is inert until then.
1227
+ *
1228
+ * Violations report at a file inside the directory rather than at the directory, because
1229
+ * `filterToChangedFiles` keeps only locations git lists as changed and git never lists a directory.
1230
+ *
1231
+ * There are no pass results. `architecture/unit-entry-file` emits one per conforming unit and can
1232
+ * afford to, because it keys the pass on the unit's entry file — a `.svelte` path already present as
1233
+ * a score key. This rule's subject is the directory itself, with no such pre-existing key, and
1234
+ * `computeScore` seeds every distinct `route` at 100 and averages: a pass per directory would add
1235
+ * hundreds of 100s from one `'src/routes/**'` declaration and dilute every real finding.
1236
+ */
1237
+ declare const architectureDirectoryNaming: Rule;
1238
+
1239
+ /**
1240
+ * architecture/reserved-directory-names — a directory's immediate subdirectories may only take names
1241
+ * the project declared for that position (design 2026-07-29). L3: inert until a scope is declared.
1242
+ *
1243
+ * Two option maps, differing in what their key names. A `scopes` key names the parent directly. A
1244
+ * `unitScopes` key names a root, and the rule governs the children of whichever directories beneath
1245
+ * it are units — the shape a glob cannot reach, because units nest to arbitrary depth.
1246
+ *
1247
+ * There are no pass results. `computeScore` seeds every distinct `route` at 100 and averages, and the
1248
+ * subject here is a directory with no pre-existing score key, so a pass per directory would add
1249
+ * hundreds of 100s from one broad declaration and dilute every real finding.
1250
+ */
1251
+ declare const architectureReservedDirectoryNames: Rule;
1252
+
1253
+ declare const architectureRouteComponentImport: Rule;
1254
+
1076
1255
  declare const performanceHeavyImport: Rule;
1077
1256
 
1078
1257
  declare const performanceNamespaceImport: Rule;
@@ -1111,7 +1290,7 @@ declare const performanceStateRaw: Rule;
1111
1290
 
1112
1291
  declare const allRules: Rule[];
1113
1292
 
1114
- /** One configurable option of a rule, flattened for explain_rule's consumers. */
1293
+ /** One configurable option of a rule, flattened for `svelte-vitals explain`'s output. */
1115
1294
  interface RuleOptionInfo {
1116
1295
  name: string;
1117
1296
  /** `integer` replaces the default; `string-list`/`string-map` are ADDED to it. */
@@ -1135,7 +1314,7 @@ interface RuleInfo {
1135
1314
  */
1136
1315
  options?: RuleOptionInfo[];
1137
1316
  }
1138
- /** Look up a rule's static metadata for the MCP explain_rule tool (issue #24). Rule ids are matched exactly (case-sensitive, e.g. "seo/ssr-disabled"). */
1317
+ /** Look up a rule's static metadata, as `svelte-vitals explain` renders it (issue #24). Rule ids are matched exactly (case-sensitive, e.g. "seo/ssr-disabled"). */
1139
1318
  declare function explainRule(id: string): RuleInfo | undefined;
1140
1319
 
1141
1320
  interface HeadTagRuleOptions {
@@ -1147,7 +1326,7 @@ interface HeadTagRuleOptions {
1147
1326
  /** Short human label, e.g. 'description'. */
1148
1327
  label: string;
1149
1328
  recommendation: string;
1150
- /** Why this rule matters — surfaced by explain_rule (issue #24). */
1329
+ /** Why this rule matters — surfaced by `svelte-vitals explain` (issue #24). */
1151
1330
  rationale: string;
1152
1331
  /** Agent-actionable remediation attached to every finding (issue #18). */
1153
1332
  fix?: Fix;
@@ -1253,7 +1432,14 @@ interface ScoreModel {
1253
1432
  criticalCap: number | null;
1254
1433
  }
1255
1434
  interface ScoreResult {
1435
+ /** The score as displayed: `Math.floor(rawScore)`, so 100 means the deduction was exactly zero. */
1256
1436
  score: number;
1437
+ /**
1438
+ * The same score before flooring, after `sitePenalty` and the cap, clamped to `[0, 100]`. Exposed so
1439
+ * `computeHealth` can average unrounded values and floor once — averaging the displayed scores would
1440
+ * compose two roundings and move Health by up to two points.
1441
+ */
1442
+ rawScore: number;
1257
1443
  scoreModel: ScoreModel;
1258
1444
  }
1259
1445
  interface ScoreOptions {
@@ -1303,7 +1489,7 @@ interface JsonReport {
1303
1489
  }>;
1304
1490
  siteIssues: JsonIssue[];
1305
1491
  }
1306
- /** Build the structured JSON report object (design §7). Shared by the json reporter and the MCP `analyze` tool (issue #24). */
1492
+ /** Build the structured JSON report object (design §7). The shape the `json` reporter emits (issue #24). */
1307
1493
  declare function buildJsonReport(results: Result[], config: Config, meta: {
1308
1494
  version: string;
1309
1495
  }): JsonReport;
@@ -1402,4 +1588,4 @@ declare function escapeHtml(s: string): string;
1402
1588
  */
1403
1589
  declare function safeHref(url: string): string | null;
1404
1590
 
1405
- 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 Fix, type HeadProvider, type HeadTag, type HeadingInfo, type HealthResult, type ImageInfo, type JsonReport, type KitModuleFacts, type OrphanEffectFact, type Palette, type Presence, type Project, ROBOTS_SOURCE_PATHS, type ResolvedHead, type ResolvedHeadings, type ResolvedImages, type Result, type RouteBadge, type Rule, type RuleContext, 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, architecturePrivateScopeImport, architecturePropCount, attrText, attrTextOf, attrValue, attrValueOf, buildHtmlDocument, buildJsonReport, classify, collectComponentFacts, collectKitModuleFacts, 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, findKitPathsBaseInSvelteConfig, findKitPathsBaseInViteConfig, findMinifyDisabled, formatAgentReport, formatConsoleReport, formatGithubReport, formatHtmlReport, formatJsonReport, formatMarkdownReport, formatSarifReport, hasFailureAtOrAbove, headTagRule, imageRule, intOption, isPenalized, lineOf, linkRule, listOption, mapOption, noColorPalette, overrideMatches, parseComponentFacts, parseKitModuleFacts, performanceFontPreloadCrossorigin, performanceHeavyImport, performanceImageDimensions, performanceImageLoadingHint, performanceLcpImage, performanceLoadWaterfall, performanceMinifyDisabled, performanceNamespaceImport, performancePreconnect, performancePreloadMissingAs, performanceRenderBlockingScript, performanceResponsiveImage, performanceSequentialAwaits, performanceStateRaw, renderAppShell, resolveKitPathsBase, 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, textFromNodes, validateRuleOptions, validateRuleSetting, valueFromNodes };
1591
+ 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 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 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, architecturePrivateScopeImport, architecturePropCount, architectureReservedDirectoryNames, 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, 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, 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, textFromNodes, validateRuleOptions, validateRuleSetting, valueFromNodes };