import { type SiteIcon, type SiteDefaults } from "../model/SiteConfig.js"; import { parseMimeAccept } from "../model/MediaMimeAccept.js"; /** * Synchronous fail-fast for `siteDefaults`. Throws * `InvalidSiteDefaultsError` when any declared locale fails BCP 47 * canonicalization. Throws `InvalidMediaPurposesError` when any * declared `media.purposes` entry's `name` fails the slug pattern, * its `required` mime list is empty, or its `maxBytes` map is * missing entries for any required mime. Throws `InvalidSiteIconsError` * when a declared site icon cannot be served safely. Brand / title / * description / origin are not validated — only the fields whose values * carry semantics the runtime depends on. * * Lives in spec (not runtime) because it's pure validation against * the `SiteConfig` contract — no env, no DB. Runtime calls this during * storage preparation so a typo in `siteDefaults` rejects deployment * before the runtime accepts traffic. */ export declare class InvalidSiteDefaultsError extends Error { readonly invalidLocales: ReadonlyArray; constructor(invalidLocales: ReadonlyArray); } export interface MediaPurposeIssue { readonly name: string; readonly reason: "invalid-slug" | "empty-required" | "empty-required-slot" | "overlapping-slot-mimes" | "maxBytes-missing-mime" | "maxBytes-non-positive"; readonly detail?: string; } export declare class InvalidMediaPurposesError extends Error { readonly issues: ReadonlyArray; constructor(issues: ReadonlyArray); } export declare class InvalidSiteIconsError extends Error { readonly invalidIcons: ReadonlyArray; constructor(invalidIcons: ReadonlyArray); } export declare function assertSiteDefaultsCanonical(defaults: SiteDefaults | undefined): void; export { parseMimeAccept }; //# sourceMappingURL=SiteDefaultsValidator.d.ts.map