{"version":3,"sources":["../src/metadata-route.ts","../src/components/error-page.ts","../src/theme/server-runtime.ts"],"sourcesContent":["import { omitFarmResponseBody } from \"./response-body\";\n\nexport type ApplicationMetadataRouteKind = \"sitemap\" | \"robots\" | \"manifest\";\n\nexport namespace MetadataRoute {\n  export type SitemapChangeFrequency =\n    | \"always\"\n    | \"hourly\"\n    | \"daily\"\n    | \"weekly\"\n    | \"monthly\"\n    | \"yearly\"\n    | \"never\";\n\n  export interface SitemapEntry {\n    url: string;\n    lastModified?: string | Date;\n    changeFrequency?: SitemapChangeFrequency;\n    priority?: number;\n    alternates?: {\n      languages?: Record<string, string>;\n    };\n  }\n\n  export type Sitemap = SitemapEntry[];\n\n  export interface RobotsRule {\n    userAgent: string | string[];\n    allow?: string | string[];\n    disallow?: string | string[];\n    crawlDelay?: number;\n  }\n\n  export interface Robots {\n    rules: RobotsRule | RobotsRule[];\n    sitemap?: string | string[];\n    host?: string;\n  }\n\n  export interface ManifestIcon {\n    src: string;\n    sizes?: string;\n    type?: string;\n    purpose?: string;\n  }\n\n  export interface Manifest {\n    name?: string;\n    short_name?: string;\n    description?: string;\n    id?: string;\n    start_url?: string;\n    scope?: string;\n    display?: \"fullscreen\" | \"standalone\" | \"minimal-ui\" | \"browser\" | string;\n    orientation?: string;\n    background_color?: string;\n    theme_color?: string;\n    lang?: string;\n    dir?: \"ltr\" | \"rtl\" | \"auto\";\n    categories?: string[];\n    icons?: ManifestIcon[];\n    [key: string]: unknown;\n  }\n}\n\nexport interface MetadataRouteContext {\n  request: Request;\n  params: Record<string, string>;\n  searchParams: URLSearchParams;\n  /** The concrete route-segment path that owns the metadata file. */\n  path: string;\n}\n\nexport interface FarmMetadataRouteModule {\n  revalidate?: number | false;\n}\n\nexport interface FarmMetadataRouteResponseOptions {\n  method?: string;\n}\n\nfunction isResponse(value: unknown): value is Response {\n  return (\n    typeof Response !== \"undefined\" &&\n    (value instanceof Response ||\n      Boolean(\n        value &&\n        typeof value === \"object\" &&\n        typeof (value as Response).arrayBuffer === \"function\" &&\n        (value as Response).headers,\n      ))\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction resolveCacheControl(revalidate: number | false | undefined): string {\n  if (revalidate === false) {\n    return \"public, max-age=31536000, immutable\";\n  }\n  if (typeof revalidate === \"number\" && Number.isFinite(revalidate) && revalidate > 0) {\n    return `public, s-maxage=${Math.floor(revalidate)}, stale-while-revalidate=300`;\n  }\n  return \"public, max-age=0, must-revalidate\";\n}\n\nfunction escapeXml(value: unknown): string {\n  return String(value)\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nfunction serializeSitemap(value: unknown): string {\n  if (!Array.isArray(value)) {\n    throw new TypeError(\"sitemap.ts must return an array or a Response\");\n  }\n\n  const entries = value.map((candidate, index) => {\n    if (!isRecord(candidate) || typeof candidate.url !== \"string\" || !candidate.url) {\n      throw new TypeError(`sitemap.ts entry ${index} must include a non-empty url`);\n    }\n    return candidate as unknown as MetadataRoute.SitemapEntry;\n  });\n  const hasLanguageAlternates = entries.some(\n    (entry) => entry.alternates?.languages && Object.keys(entry.alternates.languages).length > 0,\n  );\n  const namespace = hasLanguageAlternates ? ' xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"' : \"\";\n  const lines = [\n    '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n    `<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"${namespace}>`,\n  ];\n\n  for (const entry of entries) {\n    lines.push(\"  <url>\", `    <loc>${escapeXml(entry.url)}</loc>`);\n    if (entry.lastModified !== undefined) {\n      const lastModified =\n        entry.lastModified instanceof Date ? entry.lastModified.toISOString() : entry.lastModified;\n      lines.push(`    <lastmod>${escapeXml(lastModified)}</lastmod>`);\n    }\n    if (entry.changeFrequency) {\n      lines.push(`    <changefreq>${escapeXml(entry.changeFrequency)}</changefreq>`);\n    }\n    if (entry.priority !== undefined) {\n      lines.push(`    <priority>${escapeXml(entry.priority)}</priority>`);\n    }\n    for (const [language, href] of Object.entries(entry.alternates?.languages || {})) {\n      lines.push(\n        `    <xhtml:link rel=\"alternate\" hreflang=\"${escapeXml(language)}\" href=\"${escapeXml(href)}\" />`,\n      );\n    }\n    lines.push(\"  </url>\");\n  }\n\n  lines.push(\"</urlset>\");\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n  return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n\nfunction serializeRobots(value: unknown): string {\n  if (!isRecord(value)) {\n    throw new TypeError(\"robots.ts must return a robots object or a Response\");\n  }\n\n  const robots = value as unknown as MetadataRoute.Robots;\n  const rules = toArray(robots.rules);\n  if (rules.length === 0) {\n    throw new TypeError(\"robots.ts must return at least one rule\");\n  }\n\n  const sections = rules.map((rule, index) => {\n    if (!isRecord(rule)) {\n      throw new TypeError(`robots.ts rule ${index} must be an object`);\n    }\n    const userAgents = toArray(rule.userAgent).filter(\n      (userAgent): userAgent is string => typeof userAgent === \"string\" && Boolean(userAgent),\n    );\n    if (userAgents.length === 0) {\n      throw new TypeError(`robots.ts rule ${index} must include a userAgent`);\n    }\n\n    const lines = userAgents.map((userAgent) => `User-agent: ${userAgent}`);\n    for (const allow of toArray(rule.allow)) lines.push(`Allow: ${allow}`);\n    for (const disallow of toArray(rule.disallow)) lines.push(`Disallow: ${disallow}`);\n    if (rule.crawlDelay !== undefined) lines.push(`Crawl-delay: ${rule.crawlDelay}`);\n    return lines.join(\"\\n\");\n  });\n\n  const globalLines = [\n    ...toArray(robots.sitemap).map((sitemap) => `Sitemap: ${sitemap}`),\n    ...(robots.host ? [`Host: ${robots.host}`] : []),\n  ];\n  return `${[...sections, ...(globalLines.length ? [globalLines.join(\"\\n\")] : [])].join(\"\\n\\n\")}\\n`;\n}\n\nfunction serializeManifest(value: unknown): string {\n  if (!isRecord(value)) {\n    throw new TypeError(\"manifest.ts must return a manifest object or a Response\");\n  }\n  return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\n/** @internal */\nexport function createFarmMetadataRouteResponse(\n  kind: ApplicationMetadataRouteKind,\n  value: unknown,\n  routeModule: FarmMetadataRouteModule = {},\n  options: FarmMetadataRouteResponseOptions = {},\n): Response {\n  const method = (options.method || \"GET\").toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return new Response(null, { status: 405, headers: { Allow: \"GET, HEAD\" } });\n  }\n\n  if (isResponse(value)) {\n    return method === \"HEAD\" ? omitFarmResponseBody(value) : value;\n  }\n\n  const body =\n    kind === \"sitemap\"\n      ? serializeSitemap(value)\n      : kind === \"robots\"\n        ? serializeRobots(value)\n        : serializeManifest(value);\n  const contentType =\n    kind === \"sitemap\"\n      ? \"application/xml; charset=utf-8\"\n      : kind === \"robots\"\n        ? \"text/plain; charset=utf-8\"\n        : \"application/manifest+json; charset=utf-8\";\n\n  return new Response(method === \"HEAD\" ? null : body, {\n    headers: {\n      \"Content-Type\": contentType,\n      \"Cache-Control\": resolveCacheControl(routeModule.revalidate),\n      \"X-Content-Type-Options\": \"nosniff\",\n    },\n  });\n}\n","import { DEFAULT_ERROR_STYLES } from \"./error-styles\";\n\nexport { DEFAULT_ERROR_STYLES } from \"./error-styles\";\n\nconst ERROR_STATUS_TEXT: Record<number, string> = {\n  400: \"Bad Request\",\n  401: \"Unauthorized\",\n  402: \"Payment Required\",\n  403: \"Forbidden\",\n  404: \"Not Found\",\n  405: \"Method Not Allowed\",\n  406: \"Not Acceptable\",\n  408: \"Request Timeout\",\n  409: \"Conflict\",\n  410: \"Gone\",\n  411: \"Length Required\",\n  412: \"Precondition Failed\",\n  413: \"Content Too Large\",\n  414: \"URI Too Long\",\n  415: \"Unsupported Media Type\",\n  416: \"Range Not Satisfiable\",\n  418: \"I'm a Teapot\",\n  422: \"Unprocessable Content\",\n  423: \"Locked\",\n  424: \"Failed Dependency\",\n  425: \"Too Early\",\n  426: \"Upgrade Required\",\n  428: \"Precondition Required\",\n  429: \"Too Many Requests\",\n  431: \"Request Header Fields Too Large\",\n  451: \"Unavailable For Legal Reasons\",\n  500: \"Internal Server Error\",\n  501: \"Not Implemented\",\n  502: \"Bad Gateway\",\n  503: \"Service Unavailable\",\n  504: \"Gateway Timeout\",\n  505: \"HTTP Version Not Supported\",\n  506: \"Variant Also Negotiates\",\n  507: \"Insufficient Storage\",\n  508: \"Loop Detected\",\n  510: \"Not Extended\",\n  511: \"Network Authentication Required\",\n};\n\nconst ERROR_TITLES: Record<number, string> = {\n  400: \"This request could not be completed\",\n  401: \"Authentication is required\",\n  403: \"You do not have access to this page\",\n  404: \"This page could not be found\",\n  405: \"This request method is not supported\",\n  408: \"The request took too long\",\n  409: \"The request conflicts with the current state\",\n  410: \"This resource is no longer available\",\n  413: \"The request is too large\",\n  422: \"The request could not be processed\",\n  429: \"Too many requests were sent\",\n  500: \"Something went wrong\",\n  501: \"This operation is not implemented\",\n  502: \"An upstream service returned an invalid response\",\n  503: \"The service is temporarily unavailable\",\n  504: \"An upstream service took too long to respond\",\n};\n\nconst ERROR_PUBLIC_MESSAGES: Record<number, string> = {\n  400: \"Check the request details, then try again.\",\n  401: \"Sign in and try this request again.\",\n  403: \"Use an account with the required permissions or return home.\",\n  404: \"Check the address or return to the home page.\",\n  405: \"Use a supported request method and try again.\",\n  408: \"Try the request again in a moment.\",\n  409: \"Refresh the page, review the latest state, and try again.\",\n  410: \"Return home to continue browsing.\",\n  413: \"Reduce the request size and try again.\",\n  422: \"Review the request data and try again.\",\n  429: \"Wait a moment before trying again.\",\n  500: \"The application ran into an unexpected problem. Try again in a moment.\",\n  501: \"This operation is not available yet.\",\n  502: \"Try again after the upstream service recovers.\",\n  503: \"Try again in a moment.\",\n  504: \"Try again after the upstream service recovers.\",\n};\n\nexport interface DefaultErrorSourceLine {\n  number: number;\n  content: string;\n  highlight?: boolean;\n}\nexport interface DefaultErrorSourceFrame {\n  file: string;\n  line: number;\n  column: number;\n  lines: DefaultErrorSourceLine[];\n}\n\nexport interface DefaultErrorPageOptions {\n  statusCode?: number;\n  statusText?: string;\n  requestPath?: string;\n  method?: string;\n  message?: string;\n  errorName?: string;\n  stack?: string;\n  sourceFrame?: DefaultErrorSourceFrame;\n  development?: boolean;\n  farmVersion?: string;\n  nodeVersion?: string;\n  mode?: string;\n}\n\nfunction escapeHtml(value: unknown): string {\n  return String(value ?? \"\")\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nfunction serializeJsonForHtml(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction normalizeErrorStatus(status: unknown): number | undefined {\n  const value = typeof status === \"string\" && status.trim() ? Number(status) : status;\n  return typeof value === \"number\" && Number.isInteger(value) && value >= 400 && value <= 599\n    ? value\n    : undefined;\n}\n\nexport function resolveDefaultErrorStatus(error: unknown): number {\n  if (error && typeof error === \"object\") {\n    const candidate = error as { status?: unknown; statusCode?: unknown };\n    return (\n      normalizeErrorStatus(candidate.status) ?? normalizeErrorStatus(candidate.statusCode) ?? 500\n    );\n  }\n  return 500;\n}\n\nexport function getDefaultErrorStatusText(statusCode: number): string {\n  return ERROR_STATUS_TEXT[statusCode] || (statusCode >= 500 ? \"Server Error\" : \"Request Error\");\n}\n\nexport function getDefaultErrorTitle(statusCode: number): string {\n  return (\n    ERROR_TITLES[statusCode] ||\n    (statusCode >= 500\n      ? \"The server could not complete the request\"\n      : \"The request could not be completed\")\n  );\n}\n\nfunction getDefaultErrorPublicMessage(statusCode: number): string {\n  return ERROR_PUBLIC_MESSAGES[statusCode] || \"Try again or return to the home page.\";\n}\n\nfunction createSourceFrameMarkup(sourceFrame?: DefaultErrorSourceFrame): string {\n  if (!sourceFrame) {\n    return `<p class=\"farm-default-error__details-empty\">Source location is unavailable. Copy the debug report to inspect the filtered stack trace.</p>`;\n  }\n\n  const lines = sourceFrame.lines\n    .map(\n      (line) =>\n        `<span class=\"farm-default-error__source-line${line.highlight ? \" farm-default-error__source-line--active\" : \"\"}\"><span class=\"farm-default-error__source-gutter\">${line.highlight ? \"&gt;\" : \"&nbsp;\"} ${line.number}</span><span class=\"farm-default-error__source-text\">${escapeHtml(line.content || \" \")}</span></span>`,\n    )\n    .join(\"\\n\");\n\n  return `<div class=\"farm-default-error__source\"><p class=\"farm-default-error__source-path\">${escapeHtml(sourceFrame.file)}:${sourceFrame.line}:${sourceFrame.column}</p><pre class=\"farm-default-error__source-code\" tabindex=\"0\"><code>${lines}</code></pre></div>`;\n}\n\nfunction createDebugReport(\n  options: Required<Pick<DefaultErrorPageOptions, \"statusCode\">> & DefaultErrorPageOptions,\n): string {\n  const statusText = options.statusText || getDefaultErrorStatusText(options.statusCode);\n  const sourceFrame = options.sourceFrame;\n  const source = sourceFrame\n    ? [\n        `\\`${sourceFrame.file}:${sourceFrame.line}:${sourceFrame.column}\\``,\n        \"\",\n        \"```text\",\n        ...sourceFrame.lines.map(\n          (line) =>\n            `${line.highlight ? \">\" : \" \"} ${String(line.number).padStart(4, \" \")} | ${line.content}`,\n        ),\n        \"```\",\n      ].join(\"\\n\")\n    : \"Source frame unavailable.\";\n\n  return [\n    \"# Farm.js debug report\",\n    \"\",\n    \"## Error\",\n    `- Status: ${options.statusCode} ${statusText}`,\n    `- Name: ${options.errorName || \"Error\"}`,\n    `- Message: ${options.message || getDefaultErrorPublicMessage(options.statusCode)}`,\n    `- Request: ${(options.method || \"GET\").toUpperCase()} ${options.requestPath || \"/\"}`,\n    \"\",\n    \"## Runtime\",\n    `- Farm.js: ${options.farmVersion || \"unknown\"}`,\n    `- Node.js: ${options.nodeVersion || \"unknown\"}`,\n    `- Mode: ${options.mode || \"development\"}`,\n    \"\",\n    \"## Source\",\n    source,\n    \"\",\n    \"## Filtered stack\",\n    \"```text\",\n    options.stack || \"Stack trace unavailable.\",\n    \"```\",\n  ].join(\"\\n\");\n}\n\nconst ERROR_PAGE_SCRIPT = `<script>(function(){var root=document.querySelector(\"[data-farm-default-error]\");if(!root)return;var retry=root.querySelector(\"[data-farm-error-retry]\");var back=root.querySelector(\"[data-farm-error-back]\");if(retry)retry.addEventListener(\"click\",function(){window.location.reload()});if(back)back.addEventListener(\"click\",function(){if(window.history.length>1){window.history.back()}else{window.location.assign(\"/\")}})})();</script>`;\nconst ERROR_COPY_SCRIPT = `<script>(function(){var root=document.querySelector(\"[data-farm-default-error]\");var copy=root&&root.querySelector(\"[data-farm-error-copy]\");var report=document.getElementById(\"farm-default-error-report\");if(!copy||!report)return;copy.addEventListener(\"click\",async function(){var value=\"\";try{value=JSON.parse(report.textContent||'\"\"')}catch(_error){value=report.textContent||\"\"}try{if(navigator.clipboard&&window.isSecureContext){await navigator.clipboard.writeText(value)}else{var area=document.createElement(\"textarea\");area.value=value;area.setAttribute(\"readonly\",\"\");area.style.position=\"fixed\";area.style.opacity=\"0\";document.body.appendChild(area);area.select();document.execCommand(\"copy\");area.remove()}var label=copy.querySelector(\"[data-farm-error-copy-label]\");var status=copy.querySelector(\"[data-farm-error-copy-status]\");if(label)label.textContent=\"COPIED\";if(status)status.textContent=\"Debug report copied\";window.setTimeout(function(){if(label)label.textContent=\"COPY DEBUG REPORT\";if(status)status.textContent=\"\"},1800)}catch(_error){var status=copy.querySelector(\"[data-farm-error-copy-status]\");if(status)status.textContent=\"Unable to copy the debug report\"}})})();</script>`;\n\nconst ERROR_DOCS_ICON = `<svg class=\"farm-default-error__docs-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M2.75 2.75h3.5A1.75 1.75 0 0 1 8 4.5v8.75a1.75 1.75 0 0 0-1.75-1.75h-3.5v-8.75Z\"/><path d=\"M13.25 2.75h-3.5A1.75 1.75 0 0 0 8 4.5v8.75a1.75 1.75 0 0 1 1.75-1.75h3.5v-8.75Z\"/></svg>`;\n\nexport function createDefaultErrorMarkup(options: DefaultErrorPageOptions = {}): string {\n  const statusCode = normalizeErrorStatus(options.statusCode) ?? 500;\n  const statusText = options.statusText || getDefaultErrorStatusText(statusCode);\n  const development = options.development === true;\n  const title = getDefaultErrorTitle(statusCode);\n  const message =\n    development && options.message ? options.message : getDefaultErrorPublicMessage(statusCode);\n  const requestPath = options.requestPath || \"/\";\n  const method = (options.method || \"GET\").toUpperCase();\n  const isServerError = statusCode >= 500;\n  const details = development\n    ? `<section class=\"farm-default-error__details\" aria-labelledby=\"farm-default-error-details-title\"><div class=\"farm-default-error__details-header\"><h2 id=\"farm-default-error-details-title\" class=\"farm-default-error__details-title\">Technical details</h2></div>${createSourceFrameMarkup(options.sourceFrame)}<p class=\"farm-default-error__meta\">Farm.js v${escapeHtml(options.farmVersion || \"unknown\")} · ${escapeHtml(options.mode || \"development\")} · Node.js ${escapeHtml(options.nodeVersion || \"unknown\")}</p></section>`\n    : \"\";\n  const report = development\n    ? `<script id=\"farm-default-error-report\" type=\"application/json\">${serializeJsonForHtml(createDebugReport({ ...options, statusCode, statusText, requestPath, method }))}</script>${ERROR_COPY_SCRIPT}`\n    : \"\";\n\n  const primaryAction = isServerError\n    ? `<button class=\"farm-default-error__action farm-default-error__action--primary\" type=\"button\" data-farm-error-retry>TRY AGAIN</button>`\n    : `<button class=\"farm-default-error__action farm-default-error__action--primary\" type=\"button\" data-farm-error-back>GO BACK</button>`;\n  const debugAction = development\n    ? `<span class=\"farm-default-error__footer-divider\" aria-hidden=\"true\">/</span><button class=\"farm-default-error__footer-action\" type=\"button\" data-farm-error-copy><span data-farm-error-copy-label>COPY DEBUG REPORT</span><span class=\"farm-default-error__sr-only\" aria-live=\"polite\" data-farm-error-copy-status></span></button>`\n    : \"\";\n\n  return `<style>${DEFAULT_ERROR_STYLES}</style><main class=\"farm-default-error${development ? \" farm-default-error--development\" : \"\"}\" data-farm-default-error role=\"alert\" aria-labelledby=\"farm-default-error-title\" aria-describedby=\"farm-default-error-description\"><div class=\"farm-default-error__frame\"><div class=\"farm-default-error__brand\" aria-hidden=\"true\"><span>FARM.JS</span><span class=\"farm-default-error__brand-divider\">/</span><span>ERROR</span></div><div class=\"farm-default-error__content\"><p class=\"farm-default-error__status\"><span class=\"farm-default-error__status-mark\" aria-hidden=\"true\"></span><span>${statusCode}</span><span class=\"farm-default-error__status-divider\" aria-hidden=\"true\">/</span><span>${escapeHtml(statusText)}</span></p><header class=\"farm-default-error__summary\"><h1 id=\"farm-default-error-title\" class=\"farm-default-error__title\">${escapeHtml(title)}</h1><p id=\"farm-default-error-description\" class=\"farm-default-error__message\">${escapeHtml(message)}</p></header><div class=\"farm-default-error__actions\">${primaryAction}<a class=\"farm-default-error__action\" href=\"/\">RETURN HOME</a></div><section class=\"farm-default-error__panel\" aria-label=\"Error information\"><div class=\"farm-default-error__row\"><span class=\"farm-default-error__label\">Request</span><span class=\"farm-default-error__value\">${escapeHtml(method)} ${escapeHtml(requestPath)}</span></div><div class=\"farm-default-error__row\"><span class=\"farm-default-error__label\">Status</span><span class=\"farm-default-error__value\">${statusCode} ${escapeHtml(statusText)}</span></div>${details}</section></div><footer class=\"farm-default-error__footer\"><a class=\"farm-default-error__footer-action\" href=\"https://farm.js.dev/docs\" target=\"_blank\" rel=\"noopener noreferrer\">${ERROR_DOCS_ICON}<span>VIEW DOCUMENTATION</span></a>${debugAction}</footer></div>${report}${ERROR_PAGE_SCRIPT}</main>`;\n}\n","import { resolveFarmThemeConfig } from \"./config\";\nimport type {\n  FarmThemeConfig,\n  FarmThemePreference,\n  FarmThemeRuntime,\n  ResolvedFarmThemeConfig,\n} from \"./types\";\n\nconst THEME_SCRIPT_ID = \"farm-theme-script\";\nconst THEME_STYLE_ID = \"farm-theme-style\";\n\ndeclare global {\n  interface Window {\n    __FARM_THEME__?: FarmThemeRuntime;\n  }\n}\n\nexport interface FarmThemeDocumentParts {\n  attributes: string;\n  head: string;\n}\n\nexport function createFarmThemeDocumentParts(\n  input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n  serverTheme?: FarmThemePreference,\n): FarmThemeDocumentParts {\n  const config = resolveFarmThemeConfig(input, basePath);\n  if (!config.enabled) return { attributes: \"\", head: \"\" };\n\n  const hydrationTheme = serverTheme ?? config.default;\n  const initialTheme = hydrationTheme === \"system\" ? \"light\" : hydrationTheme;\n  const script = createFarmThemeBootstrapScript(config, hydrationTheme);\n\n  return {\n    attributes: ` data-theme=\"${initialTheme}\"`,\n    head: `<style id=\"${THEME_STYLE_ID}\">:root[data-theme=\"light\"]{color-scheme:light}:root[data-theme=\"dark\"]{color-scheme:dark}</style><script id=\"${THEME_SCRIPT_ID}\">${script}</script>`,\n  };\n}\n\nexport function createFarmThemeBootstrapScript(\n  config: ResolvedFarmThemeConfig,\n  serverTheme: FarmThemePreference = config.default,\n): string {\n  return `(function(config,serverTheme){\nvar isTheme=function(value){return value===\"light\"||value===\"dark\"||value===\"system\";};\nvar decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};\nvar readCookie=function(){var entries=document.cookie.split(\";\");for(var index=0;index<entries.length;index++){var entry=entries[index];var separator=entry.indexOf(\"=\");if(separator<0)continue;if(decode(entry.slice(0,separator).trim())===config.storageKey)return decode(entry.slice(separator+1).trim());}};\nvar media=window.matchMedia(\"(prefers-color-scheme: dark)\");\nvar resolveTheme=function(theme){return theme===\"system\"?(media.matches?\"dark\":\"light\"):theme;};\nvar storedTheme=readCookie();\nvar preference=isTheme(storedTheme)?storedTheme:config.default;\nvar serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme===\"system\"?undefined:serverTheme,mounted:false};\nvar apply=function(){var resolvedTheme=resolveTheme(preference);document.documentElement.dataset.theme=resolvedTheme;var snapshot={theme:preference,resolvedTheme:resolvedTheme,mounted:true};if(window.__FARM_THEME__)window.__FARM_THEME__.snapshot=snapshot;return snapshot;};\nvar emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent(\"farm:themechange\",{detail:snapshot}));};\nvar persist=function(theme){var secure=window.location.protocol===\"https:\"?\"; Secure\":\"\";document.cookie=encodeURIComponent(config.storageKey)+\"=\"+encodeURIComponent(theme)+\"; Path=\"+config.cookiePath+\"; Max-Age=31536000; SameSite=Lax\"+secure;try{localStorage.setItem(config.storageKey,theme);}catch(_error){}};\nvar setTheme=function(theme){if(!isTheme(theme))throw new TypeError(\"Unknown FARMJS theme: \"+String(theme));preference=theme;persist(theme);emit();};\nvar initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};\nwindow.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};\ndocument.documentElement.dataset.theme=initialSnapshot.resolvedTheme;\nvar handleSystemChange=function(){if(preference===\"system\")emit();};\nif(typeof media.addEventListener===\"function\")media.addEventListener(\"change\",handleSystemChange);else if(typeof media.addListener===\"function\")media.addListener(handleSystemChange);\nwindow.addEventListener(\"storage\",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});\n})(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;\n}\n\nexport function applyFarmThemeDocument(\n  html: string,\n  input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n  serverTheme?: FarmThemePreference,\n): string {\n  const parts = createFarmThemeDocumentParts(input, basePath, serverTheme);\n  if (!parts.head) return html;\n\n  let output = html.replace(/<html([^>]*)>/i, (_match, attributes: string) => {\n    const nextAttributes = attributes.replace(/\\sdata-theme=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+)/i, \"\");\n    return `<html${nextAttributes}${parts.attributes}>`;\n  });\n\n  if (!output.includes(`id=\"${THEME_SCRIPT_ID}\"`)) {\n    output = output.replace(/<head([^>]*)>/i, `<head$1>${parts.head}`);\n  }\n\n  return output;\n}\n\nfunction serializeInlineValue(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n"],"mappings":"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","names":[]}