@farm.js/core 0.1.0-beta.75 → 0.1.0-beta.76

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 (57) hide show
  1. package/dist/agent-runtime.cjs +7 -0
  2. package/dist/agent-runtime.cjs.map +1 -1
  3. package/dist/agent-runtime.mjs +7 -0
  4. package/dist/agent-runtime.mjs.map +1 -1
  5. package/dist/{app-BkCh7H09.d.mts → app-Bq-Tr90H.d.mts} +2 -0
  6. package/dist/{app-CZIEOZIa.d.ts → app-CQ6uhLEj.d.ts} +2 -0
  7. package/dist/{chunk-TWN6IBIL.mjs → chunk-ENS436YL.mjs} +2 -2
  8. package/dist/{chunk-IIKQBOGZ.mjs → chunk-MV5WATSI.mjs} +2 -2
  9. package/dist/{chunk-IIKQBOGZ.mjs.map → chunk-MV5WATSI.mjs.map} +1 -1
  10. package/dist/{chunk-S6FO7OXA.mjs → chunk-NN6KJF7I.mjs} +52 -7
  11. package/dist/chunk-NN6KJF7I.mjs.map +1 -0
  12. package/dist/{chunk-DKD7DGTE.mjs → chunk-OL7GH5ZC.mjs} +2 -2
  13. package/dist/{chunk-UGK7TW2V.mjs → chunk-P57PPOQL.mjs} +18 -6
  14. package/dist/chunk-P57PPOQL.mjs.map +1 -0
  15. package/dist/client/lifecycle.mjs +2 -2
  16. package/dist/client-plugins.cjs +1 -1
  17. package/dist/client-plugins.cjs.map +1 -1
  18. package/dist/client-plugins.mjs +2 -2
  19. package/dist/client.cjs +1 -1
  20. package/dist/client.cjs.map +1 -1
  21. package/dist/client.mjs +2 -2
  22. package/dist/index.cjs +75 -11
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.mts +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.mjs +5 -5
  27. package/dist/internal/build-runtime.cjs +58 -6
  28. package/dist/internal/build-runtime.cjs.map +1 -1
  29. package/dist/internal/build-runtime.mjs +3 -3
  30. package/dist/internal/client-runtime.cjs +1 -1
  31. package/dist/internal/client-runtime.cjs.map +1 -1
  32. package/dist/internal/client-runtime.mjs +2 -2
  33. package/dist/internal/product-telemetry-runtime.cjs +1 -1
  34. package/dist/internal/product-telemetry-runtime.cjs.map +1 -1
  35. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  36. package/dist/plugin.cjs +51 -6
  37. package/dist/plugin.cjs.map +1 -1
  38. package/dist/plugin.mjs +2 -2
  39. package/dist/server-plugins.cjs +17 -5
  40. package/dist/server-plugins.cjs.map +1 -1
  41. package/dist/server-plugins.mjs +1 -1
  42. package/dist/server.cjs +68 -11
  43. package/dist/server.cjs.map +1 -1
  44. package/dist/server.d.mts +1 -1
  45. package/dist/server.d.ts +1 -1
  46. package/dist/server.mjs +3 -3
  47. package/dist/version.cjs +1 -1
  48. package/dist/version.cjs.map +1 -1
  49. package/dist/version.mjs +1 -1
  50. package/dist/vite.cjs +51 -6
  51. package/dist/vite.cjs.map +1 -1
  52. package/dist/vite.mjs +2 -2
  53. package/package.json +1 -1
  54. package/dist/chunk-S6FO7OXA.mjs.map +0 -1
  55. package/dist/chunk-UGK7TW2V.mjs.map +0 -1
  56. /package/dist/{chunk-TWN6IBIL.mjs.map → chunk-ENS436YL.mjs.map} +0 -0
  57. /package/dist/{chunk-DKD7DGTE.mjs.map → chunk-OL7GH5ZC.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createClientPluginManager,
3
3
  installChunkErrorRecovery
4
- } from "../chunk-TWN6IBIL.mjs";
4
+ } from "../chunk-ENS436YL.mjs";
5
5
  import {
6
6
  searchParamsToObject
7
7
  } from "../chunk-DD7QQZZO.mjs";
@@ -9,7 +9,7 @@ import {
9
9
  setFarmTrailingSlashPreference
10
10
  } from "../chunk-RCNUKRBF.mjs";
11
11
  import "../chunk-FXG2PS27.mjs";
12
- import "../chunk-IIKQBOGZ.mjs";
12
+ import "../chunk-MV5WATSI.mjs";
13
13
  import {
14
14
  __name
15
15
  } from "../chunk-CGILA3WO.mjs";
@@ -31,7 +31,7 @@ __export(product_telemetry_exports, {
31
31
  module.exports = __toCommonJS(product_telemetry_exports);
32
32
 
33
33
  // package.json
34
- var version = "0.1.0-beta.75";
34
+ var version = "0.1.0-beta.76";
35
35
 
36
36
  // src/version.ts
37
37
  var FARM_VERSION = version;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/product-telemetry.ts","../../package.json","../../src/version.ts"],"sourcesContent":["import { FARM_VERSION } from \"./version\";\n\nexport const FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = 1 as const;\nexport const FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = \"production_site_active\" as const;\nexport const FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = \"@farm.js/core\" as const;\n\nconst DEFAULT_SITE_TELEMETRY_ENDPOINT = \"https://farmjs.dev/api/telemetry/v1/sites\";\nconst REQUEST_TIMEOUT_MS = 3_000;\nconst REPORT_INTERVAL_MS = 24 * 60 * 60 * 1_000;\nconst RETRY_INTERVAL_MS = 5 * 60 * 1_000;\nconst MAX_ORIGINS_PER_INSTANCE = 32;\nconst SAFE_DETAIL_PATTERN = /^[0-9A-Za-z._-]{1,64}$/;\n\nexport interface FarmProductionSiteTelemetryPayload {\n schemaVersion: typeof FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION;\n eventType: typeof FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE;\n siteUrl: string;\n packageName: typeof FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME;\n packageVersion: string;\n renderer: string;\n deployTarget: string;\n}\n\ninterface FarmProductionSiteReporterOptions {\n renderer: string;\n deployTarget?: string;\n endpoint?: string;\n fetch?: typeof fetch;\n now?: () => number;\n reportIntervalMs?: number;\n retryIntervalMs?: number;\n}\n\ninterface OriginReportState {\n pending?: Promise<void>;\n nextReportAt: number;\n}\n\nexport interface FarmProductionSiteReporter {\n report(requestUrl: string | URL, waitUntil?: (promise: Promise<unknown>) => void): void;\n}\n\n/**\n * Reduce an automatically observed request URL to a public HTTPS origin.\n * Request paths, query strings, hashes, and credentials are never returned.\n */\nexport function detectFarmProductionSiteOrigin(value: string | URL): string | undefined {\n try {\n const url = value instanceof URL ? value : new URL(value);\n return normalizeFarmProductionSiteOrigin(url.origin);\n } catch {\n return undefined;\n }\n}\n\n/** Normalize and validate the origin-only value accepted by the ingestion service. */\nexport function normalizeFarmProductionSiteOrigin(value: string): string | undefined {\n const candidate = value.trim();\n if (!candidate || candidate.length > 2_048) return undefined;\n\n try {\n const url = new URL(candidate);\n const hostname = url.hostname.toLowerCase();\n const isIpv4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(hostname);\n const isIpv6 = hostname.startsWith(\"[\") && hostname.endsWith(\"]\");\n const isLocal =\n hostname === \"localhost\" || hostname.endsWith(\".localhost\") || hostname.endsWith(\".local\");\n const isSingleLabel = !hostname.includes(\".\");\n\n if (\n url.protocol !== \"https:\" ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n url.pathname !== \"/\" ||\n isIpv4 ||\n isIpv6 ||\n isLocal ||\n isSingleLabel ||\n hostname.endsWith(\".\")\n ) {\n return undefined;\n }\n\n return url.origin;\n } catch {\n return undefined;\n }\n}\n\nexport function createFarmProductionSiteReporter(\n options: FarmProductionSiteReporterOptions,\n): FarmProductionSiteReporter {\n const now = options.now ?? Date.now;\n const reportIntervalMs = options.reportIntervalMs ?? REPORT_INTERVAL_MS;\n const retryIntervalMs = options.retryIntervalMs ?? RETRY_INTERVAL_MS;\n const send = options.fetch ?? globalThis.fetch;\n const reportStates = new Map<string, OriginReportState>();\n\n return {\n report(requestUrl, waitUntil) {\n if (productionTelemetryDisabled()) return;\n\n const siteUrl = detectFarmProductionSiteOrigin(requestUrl);\n if (!siteUrl) return;\n\n let state = reportStates.get(siteUrl);\n if (!state) {\n if (reportStates.size >= MAX_ORIGINS_PER_INSTANCE) return;\n state = { nextReportAt: 0 };\n reportStates.set(siteUrl, state);\n }\n\n const attemptedAt = now();\n if (state.pending || attemptedAt < state.nextReportAt) return;\n\n state.nextReportAt = attemptedAt + reportIntervalMs;\n const payload: FarmProductionSiteTelemetryPayload = {\n schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,\n eventType: FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,\n siteUrl,\n packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,\n packageVersion: sanitizeDetail(FARM_VERSION, \"unknown\"),\n renderer: sanitizeDetail(options.renderer, \"custom\"),\n deployTarget: sanitizeDetail(options.deployTarget, \"custom\"),\n };\n state.pending = deliver(send, resolveSiteTelemetryEndpoint(options.endpoint), payload)\n .then((delivered) => {\n if (!delivered) state.nextReportAt = now() + retryIntervalMs;\n })\n .catch(() => {\n state.nextReportAt = now() + retryIntervalMs;\n })\n .finally(() => {\n state.pending = undefined;\n });\n\n if (waitUntil) {\n try {\n waitUntil(state.pending);\n } catch {\n // Delivery remains best-effort if a platform rejects background work.\n }\n } else {\n void state.pending;\n }\n },\n };\n}\n\nasync function deliver(\n send: typeof fetch,\n endpoint: string,\n payload: FarmProductionSiteTelemetryPayload,\n): Promise<boolean> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n timeout.unref?.();\n try {\n const response = await send(endpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n if (!response.ok) {\n debug(`production-site check-in rejected with HTTP ${response.status}`);\n return false;\n }\n try {\n const result = (await response.json()) as { stored?: unknown };\n if (result && result.stored === false) {\n debug(\"production-site check-in was accepted but not stored\");\n return false;\n }\n } catch {\n // A successful empty response is also a valid acknowledgement.\n }\n return true;\n } catch {\n debug(\"production-site check-in failed\");\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction resolveSiteTelemetryEndpoint(explicit?: string): string {\n const candidate = explicit || process.env.FARM_TELEMETRY_SITE_ENDPOINT;\n if (!candidate) return DEFAULT_SITE_TELEMETRY_ENDPOINT;\n\n try {\n const url = new URL(candidate);\n const isLocal = [\"localhost\", \"127.0.0.1\", \"::1\"].includes(url.hostname);\n if (url.protocol === \"https:\" || (url.protocol === \"http:\" && isLocal)) {\n return url.toString();\n }\n } catch {\n // Fall through to the Farm-owned endpoint.\n }\n return DEFAULT_SITE_TELEMETRY_ENDPOINT;\n}\n\nfunction productionTelemetryDisabled(): boolean {\n if (process.env.DO_NOT_TRACK !== undefined && !isFalse(process.env.DO_NOT_TRACK)) return true;\n if (isTrue(process.env.FARM_TELEMETRY_DISABLED)) return true;\n return isFalse(process.env.FARM_TELEMETRY);\n}\n\nfunction sanitizeDetail(value: string | undefined, fallback: string): string {\n return value && SAFE_DETAIL_PATTERN.test(value) ? value : fallback;\n}\n\nfunction isTrue(value: string | undefined): boolean {\n return value !== undefined && [\"1\", \"true\", \"yes\", \"on\"].includes(value.toLowerCase());\n}\n\nfunction isFalse(value: string | undefined): boolean {\n return value !== undefined && [\"0\", \"false\", \"no\", \"off\"].includes(value.toLowerCase());\n}\n\nfunction debug(message: string): void {\n if (!isTrue(process.env.FARM_TELEMETRY_DEBUG)) return;\n process.stderr.write(`[farm.telemetry] ${message}\\n`);\n}\n","{\n \"name\": \"@farm.js/core\",\n \"version\": \"0.1.0-beta.75\",\n \"description\": \"Core Farm.js framework for modern integrated apps\",\n \"keywords\": [\n \"@farm.js/core\",\n \"framework\",\n \"react\",\n \"rsc\",\n \"server-components\",\n \"ssr\",\n \"vite\"\n ],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/farming-labs/farm.js\",\n \"directory\": \"packages/farm\"\n },\n \"files\": [\n \"dist\",\n \"types\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"middleware\": [\n \"./types/middleware.d.ts\",\n \"./dist/middleware.d.ts\"\n ],\n \"version\": [\n \"./dist/version.d.ts\"\n ],\n \"router\": [\n \"./dist/router.d.ts\"\n ],\n \"routes\": [\n \"./dist/routes.d.ts\"\n ],\n \"storage\": [\n \"./dist/storage.d.ts\"\n ],\n \"integrations\": [\n \"./dist/integrations.d.ts\"\n ],\n \"cache\": [\n \"./dist/cache.d.ts\"\n ],\n \"deferred\": [\n \"./dist/deferred.d.ts\"\n ],\n \"after\": [\n \"./dist/after.d.ts\"\n ],\n \"navigation\": [\n \"./dist/navigation.d.ts\"\n ],\n \"headers\": [\n \"./dist/headers.d.ts\"\n ],\n \"theme\": [\n \"./dist/theme/index.d.ts\"\n ],\n \"theme/client\": [\n \"./dist/theme/client.d.ts\"\n ],\n \"theme/runtime\": [\n \"./dist/theme/runtime.d.ts\"\n ],\n \"theme/server\": [\n \"./dist/theme/server.d.ts\"\n ],\n \"docs\": [\n \"./dist/docs.d.ts\"\n ],\n \"markdown\": [\n \"./dist/markdown.d.ts\"\n ],\n \"app-markdown\": [\n \"./dist/app-markdown.d.ts\"\n ],\n \"observability\": [\n \"./dist/observability.d.ts\"\n ],\n \"instrumentation\": [\n \"./dist/instrumentation.d.ts\"\n ],\n \"workflows\": [\n \"./dist/workflows.d.ts\"\n ],\n \"cron\": [\n \"./dist/cron.d.ts\"\n ],\n \"server-fn\": [\n \"./dist/server-fn.d.ts\"\n ],\n \"server-fn/client\": [\n \"./dist/server-fn-client.d.ts\"\n ],\n \"server-query\": [\n \"./dist/server-query.d.ts\"\n ],\n \"server-query/client\": [\n \"./dist/server-query-client.d.ts\"\n ],\n \"server-action-security\": [\n \"./dist/server-action-security.d.ts\"\n ],\n \"deployment\": [\n \"./dist/deployment.d.ts\"\n ],\n \"env\": [\n \"./dist/env.d.ts\"\n ],\n \"env-types\": [\n \"./dist/env-types.d.ts\"\n ],\n \"environment\": [\n \"./dist/environment.d.ts\"\n ],\n \"environment/vite\": [\n \"./dist/environment/vite.d.ts\"\n ],\n \"font\": [\n \"./dist/font.d.ts\"\n ],\n \"testing\": [\n \"./dist/testing.d.ts\"\n ],\n \"agent-runtime\": [\n \"./dist/agent-runtime.d.ts\"\n ],\n \"css\": [\n \"./types/css.d.ts\"\n ],\n \"image\": [\n \"./types/image.d.ts\",\n \"./dist/image.d.ts\"\n ],\n \"image/server\": [\n \"./dist/image/server.d.ts\"\n ],\n \"image/sharp\": [\n \"./dist/image/sharp.d.ts\"\n ],\n \"i18n\": [\n \"./dist/i18n/index.d.ts\"\n ],\n \"i18n/server\": [\n \"./dist/i18n/server.d.ts\"\n ],\n \"i18n/client\": [\n \"./dist/i18n/client.d.ts\"\n ],\n \"internal/production-runtime\": [\n \"./dist/internal/production-runtime.d.ts\"\n ],\n \"internal/product-telemetry-runtime\": [\n \"./dist/internal/product-telemetry-runtime.d.ts\"\n ],\n \"internal/metadata-image-runtime\": [\n \"./dist/internal/metadata-image-runtime.d.ts\"\n ],\n \"internal/client-runtime\": [\n \"./dist/internal/client-runtime.d.ts\"\n ],\n \"internal/isolated-boundary\": [\n \"./dist/internal/isolated-boundary.d.ts\"\n ],\n \"internal/build-runtime\": [\n \"./dist/internal/build-runtime.d.ts\"\n ],\n \"internal/config-runtime\": [\n \"./dist/internal/config-runtime.d.ts\"\n ],\n \"internal/production-node-env\": [\n \"./dist/internal/production-node-env.d.ts\"\n ],\n \"config\": [\n \"./dist/config.d.ts\"\n ],\n \"renderer\": [\n \"./dist/renderer.d.ts\"\n ],\n \"renderer-client\": [\n \"./dist/renderer-client.d.ts\"\n ],\n \"api\": [\n \"./types/api.d.ts\",\n \"./dist/api.d.ts\"\n ],\n \"api/route-manager\": [\n \"./dist/api/route-manager.d.ts\"\n ],\n \"api/runtime\": [\n \"./dist/api/runtime.d.ts\"\n ],\n \"request\": [\n \"./dist/request.d.ts\"\n ],\n \"client\": [\n \"./types/client.d.ts\",\n \"./dist/client.d.ts\"\n ],\n \"client/lifecycle\": [\n \"./dist/client/lifecycle.d.ts\"\n ],\n \"server\": [\n \"./dist/server.d.ts\"\n ],\n \"vite\": [\n \"./dist/vite.d.ts\"\n ],\n \"plugin\": [\n \"./dist/plugin.d.ts\"\n ],\n \"query\": [\n \"./dist/query/index.d.ts\"\n ],\n \"*\": [\n \"./dist/*.d.ts\"\n ]\n }\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./version\": {\n \"types\": \"./dist/version.d.ts\",\n \"import\": \"./dist/version.mjs\",\n \"require\": \"./dist/version.cjs\"\n },\n \"./config\": {\n \"types\": \"./dist/config.d.ts\",\n \"import\": \"./dist/config.mjs\",\n \"require\": \"./dist/config.cjs\"\n },\n \"./renderer\": {\n \"types\": \"./dist/renderer.d.ts\",\n \"import\": \"./dist/renderer.mjs\",\n \"require\": \"./dist/renderer.cjs\"\n },\n \"./renderer-client\": {\n \"types\": \"./dist/renderer-client.d.ts\",\n \"import\": \"./dist/renderer-client.mjs\",\n \"require\": \"./dist/renderer-client.cjs\"\n },\n \"./renderer/react/server\": {\n \"types\": \"./dist/renderer/react/server.d.ts\",\n \"import\": \"./dist/renderer/react/server.mjs\",\n \"require\": \"./dist/renderer/react/server.cjs\"\n },\n \"./renderer/react/client\": {\n \"types\": \"./dist/renderer/react/client.d.ts\",\n \"import\": \"./dist/renderer/react/client.mjs\",\n \"require\": \"./dist/renderer/react/client.cjs\"\n },\n \"./renderer/react/vite\": {\n \"types\": \"./dist/renderer/react/vite.d.ts\",\n \"import\": \"./dist/renderer/react/vite.mjs\",\n \"require\": \"./dist/renderer/react/vite.cjs\"\n },\n \"./server\": {\n \"types\": \"./dist/server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.cjs\"\n },\n \"./client\": {\n \"types\": \"./types/client.d.ts\",\n \"import\": \"./dist/client.mjs\",\n \"require\": \"./dist/client.cjs\"\n },\n \"./client/lifecycle\": {\n \"types\": \"./dist/client/lifecycle.d.ts\",\n \"import\": \"./dist/client/lifecycle.mjs\",\n \"require\": \"./dist/client/lifecycle.cjs\"\n },\n \"./storage\": {\n \"types\": \"./dist/storage.d.ts\",\n \"import\": \"./dist/storage.mjs\",\n \"require\": \"./dist/storage.cjs\"\n },\n \"./integrations\": {\n \"types\": \"./dist/integrations.d.ts\",\n \"import\": \"./dist/integrations.mjs\",\n \"require\": \"./dist/integrations.cjs\"\n },\n \"./cache\": {\n \"types\": \"./dist/cache.d.ts\",\n \"import\": \"./dist/cache.mjs\",\n \"require\": \"./dist/cache.cjs\"\n },\n \"./deferred\": {\n \"types\": \"./dist/deferred.d.ts\",\n \"import\": \"./dist/deferred.mjs\",\n \"require\": \"./dist/deferred.cjs\"\n },\n \"./after\": {\n \"types\": \"./dist/after.d.ts\",\n \"import\": \"./dist/after.mjs\",\n \"require\": \"./dist/after.cjs\"\n },\n \"./navigation\": {\n \"types\": \"./dist/navigation.d.ts\",\n \"import\": \"./dist/navigation.mjs\",\n \"require\": \"./dist/navigation.cjs\"\n },\n \"./headers\": {\n \"types\": \"./dist/headers.d.ts\",\n \"import\": \"./dist/headers.mjs\",\n \"require\": \"./dist/headers.cjs\"\n },\n \"./theme\": {\n \"types\": \"./dist/theme/index.d.ts\",\n \"import\": \"./dist/theme/index.mjs\",\n \"require\": \"./dist/theme/index.cjs\"\n },\n \"./theme/client\": {\n \"types\": \"./dist/theme/client.d.ts\",\n \"import\": \"./dist/theme/client.mjs\",\n \"require\": \"./dist/theme/client.cjs\"\n },\n \"./theme/runtime\": {\n \"types\": \"./dist/theme/runtime.d.ts\",\n \"import\": \"./dist/theme/runtime.mjs\",\n \"require\": \"./dist/theme/runtime.cjs\"\n },\n \"./theme/server\": {\n \"types\": \"./dist/theme/server.d.ts\",\n \"import\": \"./dist/theme/server.mjs\",\n \"require\": \"./dist/theme/server.cjs\"\n },\n \"./docs\": {\n \"types\": \"./dist/docs.d.ts\",\n \"import\": \"./dist/docs.mjs\",\n \"require\": \"./dist/docs.cjs\"\n },\n \"./markdown\": {\n \"types\": \"./dist/markdown.d.ts\",\n \"import\": \"./dist/markdown.mjs\",\n \"require\": \"./dist/markdown.cjs\"\n },\n \"./app-markdown\": {\n \"types\": \"./dist/app-markdown.d.ts\",\n \"import\": \"./dist/app-markdown.mjs\",\n \"require\": \"./dist/app-markdown.cjs\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability.d.ts\",\n \"import\": \"./dist/observability.mjs\",\n \"require\": \"./dist/observability.cjs\"\n },\n \"./instrumentation\": {\n \"types\": \"./dist/instrumentation.d.ts\",\n \"import\": \"./dist/instrumentation.mjs\",\n \"require\": \"./dist/instrumentation.cjs\"\n },\n \"./workflows\": {\n \"types\": \"./dist/workflows.d.ts\",\n \"import\": \"./dist/workflows.mjs\",\n \"require\": \"./dist/workflows.cjs\"\n },\n \"./cron\": {\n \"types\": \"./dist/cron.d.ts\",\n \"import\": \"./dist/cron.mjs\",\n \"require\": \"./dist/cron.cjs\"\n },\n \"./server-fn\": {\n \"types\": \"./dist/server-fn.d.ts\",\n \"import\": \"./dist/server-fn.mjs\",\n \"require\": \"./dist/server-fn.cjs\"\n },\n \"./server-fn/client\": {\n \"types\": \"./dist/server-fn-client.d.ts\",\n \"import\": \"./dist/server-fn-client.mjs\",\n \"require\": \"./dist/server-fn-client.cjs\"\n },\n \"./server-query\": {\n \"types\": \"./dist/server-query.d.ts\",\n \"import\": \"./dist/server-query.mjs\",\n \"require\": \"./dist/server-query.cjs\"\n },\n \"./server-query/client\": {\n \"types\": \"./dist/server-query-client.d.ts\",\n \"import\": \"./dist/server-query-client.mjs\",\n \"require\": \"./dist/server-query-client.cjs\"\n },\n \"./server-action-security\": {\n \"types\": \"./dist/server-action-security.d.ts\",\n \"import\": \"./dist/server-action-security.mjs\",\n \"require\": \"./dist/server-action-security.cjs\"\n },\n \"./deployment\": {\n \"types\": \"./dist/deployment.d.ts\",\n \"import\": \"./dist/deployment.mjs\",\n \"require\": \"./dist/deployment.cjs\"\n },\n \"./env\": {\n \"types\": \"./dist/env.d.ts\",\n \"import\": \"./dist/env.mjs\",\n \"require\": \"./dist/env.cjs\"\n },\n \"./env-types\": {\n \"types\": \"./dist/env-types.d.ts\",\n \"import\": \"./dist/env-types.mjs\",\n \"require\": \"./dist/env-types.cjs\"\n },\n \"./environment\": {\n \"types\": \"./dist/environment.d.ts\",\n \"import\": \"./dist/environment.mjs\",\n \"require\": \"./dist/environment.cjs\"\n },\n \"./environment/vite\": {\n \"types\": \"./dist/environment/vite.d.ts\",\n \"import\": \"./dist/environment/vite.mjs\",\n \"require\": \"./dist/environment/vite.cjs\"\n },\n \"./font\": {\n \"types\": \"./dist/font.d.ts\",\n \"import\": \"./dist/font.mjs\",\n \"require\": \"./dist/font.cjs\"\n },\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.mjs\",\n \"require\": \"./dist/vite.cjs\"\n },\n \"./plugin\": {\n \"types\": \"./dist/plugin.d.ts\",\n \"import\": \"./dist/plugin.mjs\",\n \"require\": \"./dist/plugin.cjs\"\n },\n \"./plugin/server\": {\n \"types\": \"./dist/server-plugins.d.ts\",\n \"import\": \"./dist/server-plugins.mjs\",\n \"require\": \"./dist/server-plugins.cjs\"\n },\n \"./plugin/client\": {\n \"types\": \"./dist/client-plugins.d.ts\",\n \"import\": \"./dist/client-plugins.mjs\",\n \"require\": \"./dist/client-plugins.cjs\"\n },\n \"./query\": {\n \"types\": \"./dist/query/index.d.ts\",\n \"import\": \"./dist/query/index.mjs\",\n \"require\": \"./dist/query/index.cjs\"\n },\n \"./query/parsers\": {\n \"types\": \"./dist/query/parsers.d.ts\",\n \"import\": \"./dist/query/parsers.mjs\",\n \"require\": \"./dist/query/parsers.cjs\"\n },\n \"./query/client\": {\n \"types\": \"./dist/query/client.d.ts\",\n \"import\": \"./dist/query/client.mjs\",\n \"require\": \"./dist/query/client.cjs\"\n },\n \"./query/server\": {\n \"types\": \"./dist/query/server.d.ts\",\n \"import\": \"./dist/query/server.mjs\",\n \"require\": \"./dist/query/server.cjs\"\n },\n \"./middleware\": {\n \"types\": \"./dist/middleware.d.ts\",\n \"import\": \"./dist/middleware.mjs\",\n \"require\": \"./dist/middleware.cjs\"\n },\n \"./api\": {\n \"types\": \"./dist/api.d.ts\",\n \"import\": \"./dist/api.mjs\",\n \"require\": \"./dist/api.cjs\"\n },\n \"./api/route-manager\": {\n \"types\": \"./dist/api/route-manager.d.ts\",\n \"import\": \"./dist/api/route-manager.mjs\",\n \"require\": \"./dist/api/route-manager.cjs\"\n },\n \"./api/runtime\": {\n \"types\": \"./dist/api/runtime.d.ts\",\n \"import\": \"./dist/api/runtime.mjs\",\n \"require\": \"./dist/api/runtime.cjs\"\n },\n \"./request\": {\n \"types\": \"./dist/request.d.ts\",\n \"import\": \"./dist/request.mjs\",\n \"require\": \"./dist/request.cjs\"\n },\n \"./router\": {\n \"types\": \"./dist/router.d.ts\",\n \"import\": \"./dist/router.mjs\",\n \"require\": \"./dist/router.cjs\"\n },\n \"./routes\": {\n \"types\": \"./dist/routes.d.ts\",\n \"import\": \"./dist/routes.mjs\",\n \"require\": \"./dist/routes.cjs\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing.d.ts\",\n \"import\": \"./dist/testing.mjs\",\n \"require\": \"./dist/testing.cjs\"\n },\n \"./agent-runtime\": {\n \"types\": \"./dist/agent-runtime.d.ts\",\n \"import\": \"./dist/agent-runtime.mjs\",\n \"require\": \"./dist/agent-runtime.cjs\"\n },\n \"./css\": {\n \"types\": \"./types/css.d.ts\"\n },\n \"./image\": {\n \"types\": \"./types/image.d.ts\",\n \"import\": \"./dist/image.mjs\",\n \"require\": \"./dist/image.cjs\"\n },\n \"./image/server\": {\n \"types\": \"./dist/image/server.d.ts\",\n \"import\": \"./dist/image/server.mjs\",\n \"require\": \"./dist/image/server.cjs\"\n },\n \"./image/sharp\": {\n \"types\": \"./dist/image/sharp.d.ts\",\n \"import\": \"./dist/image/sharp.mjs\",\n \"require\": \"./dist/image/sharp.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.mjs\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./i18n/server\": {\n \"types\": \"./dist/i18n/server.d.ts\",\n \"import\": \"./dist/i18n/server.mjs\",\n \"require\": \"./dist/i18n/server.cjs\"\n },\n \"./i18n/client\": {\n \"types\": \"./dist/i18n/client.d.ts\",\n \"import\": \"./dist/i18n/client.mjs\",\n \"require\": \"./dist/i18n/client.cjs\"\n },\n \"./internal/production-runtime\": {\n \"types\": \"./dist/internal/production-runtime.d.ts\",\n \"import\": \"./dist/internal/production-runtime.mjs\",\n \"require\": \"./dist/internal/production-runtime.cjs\"\n },\n \"./internal/product-telemetry-runtime\": {\n \"types\": \"./dist/internal/product-telemetry-runtime.d.ts\",\n \"import\": \"./dist/internal/product-telemetry-runtime.mjs\",\n \"require\": \"./dist/internal/product-telemetry-runtime.cjs\"\n },\n \"./internal/metadata-image-runtime\": {\n \"types\": \"./dist/internal/metadata-image-runtime.d.ts\",\n \"import\": \"./dist/internal/metadata-image-runtime.mjs\",\n \"require\": \"./dist/internal/metadata-image-runtime.cjs\"\n },\n \"./internal/client-runtime\": {\n \"types\": \"./dist/internal/client-runtime.d.ts\",\n \"import\": \"./dist/internal/client-runtime.mjs\",\n \"require\": \"./dist/internal/client-runtime.cjs\"\n },\n \"./internal/isolated-boundary\": {\n \"types\": \"./dist/internal/isolated-boundary.d.ts\",\n \"import\": \"./dist/internal/isolated-boundary.mjs\",\n \"require\": \"./dist/internal/isolated-boundary.cjs\"\n },\n \"./internal/build-runtime\": {\n \"types\": \"./dist/internal/build-runtime.d.ts\",\n \"import\": \"./dist/internal/build-runtime.mjs\",\n \"require\": \"./dist/internal/build-runtime.cjs\"\n },\n \"./internal/config-runtime\": {\n \"types\": \"./dist/internal/config-runtime.d.ts\",\n \"import\": \"./dist/internal/config-runtime.mjs\",\n \"require\": \"./dist/internal/config-runtime.cjs\"\n },\n \"./internal/production-node-env\": {\n \"types\": \"./dist/internal/production-node-env.d.ts\",\n \"import\": \"./dist/internal/production-node-env.mjs\",\n \"require\": \"./dist/internal/production-node-env.cjs\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:runtime\": \"tsup --config tsup.runtime.config.ts\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:coverage\": \"vitest --coverage\",\n \"lint\": \"biome lint .\",\n \"lint:fix\": \"biome lint --write .\",\n \"format\": \"biome format --write .\",\n \"type-check\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\"\n },\n \"dependencies\": {\n \"@farming-labs/docs\": \"^0.2.44\",\n \"@farming-labs/orm\": \"0.0.62\",\n \"@farming-labs/orm-runtime\": \"0.0.62\",\n \"@formatjs/icu-messageformat-parser\": \"3.5.15\",\n \"@jridgewell/trace-mapping\": \"0.3.31\",\n \"@mdx-js/mdx\": \"^3.1.1\",\n \"@opentelemetry/api\": \"1.9.1\",\n \"@scalar/api-reference\": \"^1.38.1\",\n \"@scalar/openapi-parser\": \"^0.22.3\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@vercel/og\": \"0.11.1\",\n \"@vitejs/plugin-react\": \"^4.2.1\",\n \"better-call\": \"^1.0.19\",\n \"db0\": \"^0.3.4\",\n \"esbuild\": \"^0.28.0\",\n \"fast-glob\": \"^3.3.2\",\n \"h3\": \"2.0.1-rc.5\",\n \"image-size\": \"^2.0.2\",\n \"intl-messageformat\": \"11.2.12\",\n \"marked\": \"^12.0.2\",\n \"nitro\": \"3.0.1-alpha.0\",\n \"pg\": \"^8.20.0\",\n \"picocolors\": \"^1.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"sirv\": \"^2.0.4\",\n \"sugar-high\": \"^0.9.5\",\n \"supports-color\": \"^10.2.2\",\n \"tailwindcss\": \"4.1.18\",\n \"unstorage\": \"^2.0.0-alpha.3\",\n \"vite\": \"^5.0.10\",\n \"zod\": \"^4.1.12\"\n },\n \"devDependencies\": {\n \"@clerk/react\": \"^6.1.0\",\n \"@farm.js/otel\": \"workspace:*\",\n \"@farm.js/renderer-tests\": \"workspace:*\",\n \"@opentelemetry/sdk-node\": \"0.221.0\",\n \"@opentelemetry/sdk-trace-base\": \"2.10.0\",\n \"@types/react\": \"^18.2.45\",\n \"@types/react-dom\": \"^18.2.18\",\n \"@vitest/coverage-v8\": \"^3.2.7\",\n \"jsdom\": \"^25.0.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.3.3\",\n \"vitest\": \"^3.2.7\"\n },\n \"peerDependencies\": {\n \"react\": \"^18.2.0 || ^19.0.0\",\n \"react-dom\": \"^18.2.0 || ^19.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"react\": {\n \"optional\": true\n },\n \"react-dom\": {\n \"optional\": true\n }\n },\n \"optionalDependencies\": {\n \"rolldown\": \"1.2.0\",\n \"sharp\": \"^0.34.5\",\n \"vite-rolldown\": \"npm:vite@8.1.5\"\n }\n}\n","import { version } from \"../package.json\";\n\nexport const FARM_VERSION = version;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/product-telemetry.ts","../../package.json","../../src/version.ts"],"sourcesContent":["import { FARM_VERSION } from \"./version\";\n\nexport const FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = 1 as const;\nexport const FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = \"production_site_active\" as const;\nexport const FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = \"@farm.js/core\" as const;\n\nconst DEFAULT_SITE_TELEMETRY_ENDPOINT = \"https://farmjs.dev/api/telemetry/v1/sites\";\nconst REQUEST_TIMEOUT_MS = 3_000;\nconst REPORT_INTERVAL_MS = 24 * 60 * 60 * 1_000;\nconst RETRY_INTERVAL_MS = 5 * 60 * 1_000;\nconst MAX_ORIGINS_PER_INSTANCE = 32;\nconst SAFE_DETAIL_PATTERN = /^[0-9A-Za-z._-]{1,64}$/;\n\nexport interface FarmProductionSiteTelemetryPayload {\n schemaVersion: typeof FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION;\n eventType: typeof FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE;\n siteUrl: string;\n packageName: typeof FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME;\n packageVersion: string;\n renderer: string;\n deployTarget: string;\n}\n\ninterface FarmProductionSiteReporterOptions {\n renderer: string;\n deployTarget?: string;\n endpoint?: string;\n fetch?: typeof fetch;\n now?: () => number;\n reportIntervalMs?: number;\n retryIntervalMs?: number;\n}\n\ninterface OriginReportState {\n pending?: Promise<void>;\n nextReportAt: number;\n}\n\nexport interface FarmProductionSiteReporter {\n report(requestUrl: string | URL, waitUntil?: (promise: Promise<unknown>) => void): void;\n}\n\n/**\n * Reduce an automatically observed request URL to a public HTTPS origin.\n * Request paths, query strings, hashes, and credentials are never returned.\n */\nexport function detectFarmProductionSiteOrigin(value: string | URL): string | undefined {\n try {\n const url = value instanceof URL ? value : new URL(value);\n return normalizeFarmProductionSiteOrigin(url.origin);\n } catch {\n return undefined;\n }\n}\n\n/** Normalize and validate the origin-only value accepted by the ingestion service. */\nexport function normalizeFarmProductionSiteOrigin(value: string): string | undefined {\n const candidate = value.trim();\n if (!candidate || candidate.length > 2_048) return undefined;\n\n try {\n const url = new URL(candidate);\n const hostname = url.hostname.toLowerCase();\n const isIpv4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(hostname);\n const isIpv6 = hostname.startsWith(\"[\") && hostname.endsWith(\"]\");\n const isLocal =\n hostname === \"localhost\" || hostname.endsWith(\".localhost\") || hostname.endsWith(\".local\");\n const isSingleLabel = !hostname.includes(\".\");\n\n if (\n url.protocol !== \"https:\" ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n url.pathname !== \"/\" ||\n isIpv4 ||\n isIpv6 ||\n isLocal ||\n isSingleLabel ||\n hostname.endsWith(\".\")\n ) {\n return undefined;\n }\n\n return url.origin;\n } catch {\n return undefined;\n }\n}\n\nexport function createFarmProductionSiteReporter(\n options: FarmProductionSiteReporterOptions,\n): FarmProductionSiteReporter {\n const now = options.now ?? Date.now;\n const reportIntervalMs = options.reportIntervalMs ?? REPORT_INTERVAL_MS;\n const retryIntervalMs = options.retryIntervalMs ?? RETRY_INTERVAL_MS;\n const send = options.fetch ?? globalThis.fetch;\n const reportStates = new Map<string, OriginReportState>();\n\n return {\n report(requestUrl, waitUntil) {\n if (productionTelemetryDisabled()) return;\n\n const siteUrl = detectFarmProductionSiteOrigin(requestUrl);\n if (!siteUrl) return;\n\n let state = reportStates.get(siteUrl);\n if (!state) {\n if (reportStates.size >= MAX_ORIGINS_PER_INSTANCE) return;\n state = { nextReportAt: 0 };\n reportStates.set(siteUrl, state);\n }\n\n const attemptedAt = now();\n if (state.pending || attemptedAt < state.nextReportAt) return;\n\n state.nextReportAt = attemptedAt + reportIntervalMs;\n const payload: FarmProductionSiteTelemetryPayload = {\n schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,\n eventType: FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,\n siteUrl,\n packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,\n packageVersion: sanitizeDetail(FARM_VERSION, \"unknown\"),\n renderer: sanitizeDetail(options.renderer, \"custom\"),\n deployTarget: sanitizeDetail(options.deployTarget, \"custom\"),\n };\n state.pending = deliver(send, resolveSiteTelemetryEndpoint(options.endpoint), payload)\n .then((delivered) => {\n if (!delivered) state.nextReportAt = now() + retryIntervalMs;\n })\n .catch(() => {\n state.nextReportAt = now() + retryIntervalMs;\n })\n .finally(() => {\n state.pending = undefined;\n });\n\n if (waitUntil) {\n try {\n waitUntil(state.pending);\n } catch {\n // Delivery remains best-effort if a platform rejects background work.\n }\n } else {\n void state.pending;\n }\n },\n };\n}\n\nasync function deliver(\n send: typeof fetch,\n endpoint: string,\n payload: FarmProductionSiteTelemetryPayload,\n): Promise<boolean> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n timeout.unref?.();\n try {\n const response = await send(endpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n if (!response.ok) {\n debug(`production-site check-in rejected with HTTP ${response.status}`);\n return false;\n }\n try {\n const result = (await response.json()) as { stored?: unknown };\n if (result && result.stored === false) {\n debug(\"production-site check-in was accepted but not stored\");\n return false;\n }\n } catch {\n // A successful empty response is also a valid acknowledgement.\n }\n return true;\n } catch {\n debug(\"production-site check-in failed\");\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction resolveSiteTelemetryEndpoint(explicit?: string): string {\n const candidate = explicit || process.env.FARM_TELEMETRY_SITE_ENDPOINT;\n if (!candidate) return DEFAULT_SITE_TELEMETRY_ENDPOINT;\n\n try {\n const url = new URL(candidate);\n const isLocal = [\"localhost\", \"127.0.0.1\", \"::1\"].includes(url.hostname);\n if (url.protocol === \"https:\" || (url.protocol === \"http:\" && isLocal)) {\n return url.toString();\n }\n } catch {\n // Fall through to the Farm-owned endpoint.\n }\n return DEFAULT_SITE_TELEMETRY_ENDPOINT;\n}\n\nfunction productionTelemetryDisabled(): boolean {\n if (process.env.DO_NOT_TRACK !== undefined && !isFalse(process.env.DO_NOT_TRACK)) return true;\n if (isTrue(process.env.FARM_TELEMETRY_DISABLED)) return true;\n return isFalse(process.env.FARM_TELEMETRY);\n}\n\nfunction sanitizeDetail(value: string | undefined, fallback: string): string {\n return value && SAFE_DETAIL_PATTERN.test(value) ? value : fallback;\n}\n\nfunction isTrue(value: string | undefined): boolean {\n return value !== undefined && [\"1\", \"true\", \"yes\", \"on\"].includes(value.toLowerCase());\n}\n\nfunction isFalse(value: string | undefined): boolean {\n return value !== undefined && [\"0\", \"false\", \"no\", \"off\"].includes(value.toLowerCase());\n}\n\nfunction debug(message: string): void {\n if (!isTrue(process.env.FARM_TELEMETRY_DEBUG)) return;\n process.stderr.write(`[farm.telemetry] ${message}\\n`);\n}\n","{\n \"name\": \"@farm.js/core\",\n \"version\": \"0.1.0-beta.76\",\n \"description\": \"Core Farm.js framework for modern integrated apps\",\n \"keywords\": [\n \"@farm.js/core\",\n \"framework\",\n \"react\",\n \"rsc\",\n \"server-components\",\n \"ssr\",\n \"vite\"\n ],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/farming-labs/farm.js\",\n \"directory\": \"packages/farm\"\n },\n \"files\": [\n \"dist\",\n \"types\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"middleware\": [\n \"./types/middleware.d.ts\",\n \"./dist/middleware.d.ts\"\n ],\n \"version\": [\n \"./dist/version.d.ts\"\n ],\n \"router\": [\n \"./dist/router.d.ts\"\n ],\n \"routes\": [\n \"./dist/routes.d.ts\"\n ],\n \"storage\": [\n \"./dist/storage.d.ts\"\n ],\n \"integrations\": [\n \"./dist/integrations.d.ts\"\n ],\n \"cache\": [\n \"./dist/cache.d.ts\"\n ],\n \"deferred\": [\n \"./dist/deferred.d.ts\"\n ],\n \"after\": [\n \"./dist/after.d.ts\"\n ],\n \"navigation\": [\n \"./dist/navigation.d.ts\"\n ],\n \"headers\": [\n \"./dist/headers.d.ts\"\n ],\n \"theme\": [\n \"./dist/theme/index.d.ts\"\n ],\n \"theme/client\": [\n \"./dist/theme/client.d.ts\"\n ],\n \"theme/runtime\": [\n \"./dist/theme/runtime.d.ts\"\n ],\n \"theme/server\": [\n \"./dist/theme/server.d.ts\"\n ],\n \"docs\": [\n \"./dist/docs.d.ts\"\n ],\n \"markdown\": [\n \"./dist/markdown.d.ts\"\n ],\n \"app-markdown\": [\n \"./dist/app-markdown.d.ts\"\n ],\n \"observability\": [\n \"./dist/observability.d.ts\"\n ],\n \"instrumentation\": [\n \"./dist/instrumentation.d.ts\"\n ],\n \"workflows\": [\n \"./dist/workflows.d.ts\"\n ],\n \"cron\": [\n \"./dist/cron.d.ts\"\n ],\n \"server-fn\": [\n \"./dist/server-fn.d.ts\"\n ],\n \"server-fn/client\": [\n \"./dist/server-fn-client.d.ts\"\n ],\n \"server-query\": [\n \"./dist/server-query.d.ts\"\n ],\n \"server-query/client\": [\n \"./dist/server-query-client.d.ts\"\n ],\n \"server-action-security\": [\n \"./dist/server-action-security.d.ts\"\n ],\n \"deployment\": [\n \"./dist/deployment.d.ts\"\n ],\n \"env\": [\n \"./dist/env.d.ts\"\n ],\n \"env-types\": [\n \"./dist/env-types.d.ts\"\n ],\n \"environment\": [\n \"./dist/environment.d.ts\"\n ],\n \"environment/vite\": [\n \"./dist/environment/vite.d.ts\"\n ],\n \"font\": [\n \"./dist/font.d.ts\"\n ],\n \"testing\": [\n \"./dist/testing.d.ts\"\n ],\n \"agent-runtime\": [\n \"./dist/agent-runtime.d.ts\"\n ],\n \"css\": [\n \"./types/css.d.ts\"\n ],\n \"image\": [\n \"./types/image.d.ts\",\n \"./dist/image.d.ts\"\n ],\n \"image/server\": [\n \"./dist/image/server.d.ts\"\n ],\n \"image/sharp\": [\n \"./dist/image/sharp.d.ts\"\n ],\n \"i18n\": [\n \"./dist/i18n/index.d.ts\"\n ],\n \"i18n/server\": [\n \"./dist/i18n/server.d.ts\"\n ],\n \"i18n/client\": [\n \"./dist/i18n/client.d.ts\"\n ],\n \"internal/production-runtime\": [\n \"./dist/internal/production-runtime.d.ts\"\n ],\n \"internal/product-telemetry-runtime\": [\n \"./dist/internal/product-telemetry-runtime.d.ts\"\n ],\n \"internal/metadata-image-runtime\": [\n \"./dist/internal/metadata-image-runtime.d.ts\"\n ],\n \"internal/client-runtime\": [\n \"./dist/internal/client-runtime.d.ts\"\n ],\n \"internal/isolated-boundary\": [\n \"./dist/internal/isolated-boundary.d.ts\"\n ],\n \"internal/build-runtime\": [\n \"./dist/internal/build-runtime.d.ts\"\n ],\n \"internal/config-runtime\": [\n \"./dist/internal/config-runtime.d.ts\"\n ],\n \"internal/production-node-env\": [\n \"./dist/internal/production-node-env.d.ts\"\n ],\n \"config\": [\n \"./dist/config.d.ts\"\n ],\n \"renderer\": [\n \"./dist/renderer.d.ts\"\n ],\n \"renderer-client\": [\n \"./dist/renderer-client.d.ts\"\n ],\n \"api\": [\n \"./types/api.d.ts\",\n \"./dist/api.d.ts\"\n ],\n \"api/route-manager\": [\n \"./dist/api/route-manager.d.ts\"\n ],\n \"api/runtime\": [\n \"./dist/api/runtime.d.ts\"\n ],\n \"request\": [\n \"./dist/request.d.ts\"\n ],\n \"client\": [\n \"./types/client.d.ts\",\n \"./dist/client.d.ts\"\n ],\n \"client/lifecycle\": [\n \"./dist/client/lifecycle.d.ts\"\n ],\n \"server\": [\n \"./dist/server.d.ts\"\n ],\n \"vite\": [\n \"./dist/vite.d.ts\"\n ],\n \"plugin\": [\n \"./dist/plugin.d.ts\"\n ],\n \"query\": [\n \"./dist/query/index.d.ts\"\n ],\n \"*\": [\n \"./dist/*.d.ts\"\n ]\n }\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./version\": {\n \"types\": \"./dist/version.d.ts\",\n \"import\": \"./dist/version.mjs\",\n \"require\": \"./dist/version.cjs\"\n },\n \"./config\": {\n \"types\": \"./dist/config.d.ts\",\n \"import\": \"./dist/config.mjs\",\n \"require\": \"./dist/config.cjs\"\n },\n \"./renderer\": {\n \"types\": \"./dist/renderer.d.ts\",\n \"import\": \"./dist/renderer.mjs\",\n \"require\": \"./dist/renderer.cjs\"\n },\n \"./renderer-client\": {\n \"types\": \"./dist/renderer-client.d.ts\",\n \"import\": \"./dist/renderer-client.mjs\",\n \"require\": \"./dist/renderer-client.cjs\"\n },\n \"./renderer/react/server\": {\n \"types\": \"./dist/renderer/react/server.d.ts\",\n \"import\": \"./dist/renderer/react/server.mjs\",\n \"require\": \"./dist/renderer/react/server.cjs\"\n },\n \"./renderer/react/client\": {\n \"types\": \"./dist/renderer/react/client.d.ts\",\n \"import\": \"./dist/renderer/react/client.mjs\",\n \"require\": \"./dist/renderer/react/client.cjs\"\n },\n \"./renderer/react/vite\": {\n \"types\": \"./dist/renderer/react/vite.d.ts\",\n \"import\": \"./dist/renderer/react/vite.mjs\",\n \"require\": \"./dist/renderer/react/vite.cjs\"\n },\n \"./server\": {\n \"types\": \"./dist/server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.cjs\"\n },\n \"./client\": {\n \"types\": \"./types/client.d.ts\",\n \"import\": \"./dist/client.mjs\",\n \"require\": \"./dist/client.cjs\"\n },\n \"./client/lifecycle\": {\n \"types\": \"./dist/client/lifecycle.d.ts\",\n \"import\": \"./dist/client/lifecycle.mjs\",\n \"require\": \"./dist/client/lifecycle.cjs\"\n },\n \"./storage\": {\n \"types\": \"./dist/storage.d.ts\",\n \"import\": \"./dist/storage.mjs\",\n \"require\": \"./dist/storage.cjs\"\n },\n \"./integrations\": {\n \"types\": \"./dist/integrations.d.ts\",\n \"import\": \"./dist/integrations.mjs\",\n \"require\": \"./dist/integrations.cjs\"\n },\n \"./cache\": {\n \"types\": \"./dist/cache.d.ts\",\n \"import\": \"./dist/cache.mjs\",\n \"require\": \"./dist/cache.cjs\"\n },\n \"./deferred\": {\n \"types\": \"./dist/deferred.d.ts\",\n \"import\": \"./dist/deferred.mjs\",\n \"require\": \"./dist/deferred.cjs\"\n },\n \"./after\": {\n \"types\": \"./dist/after.d.ts\",\n \"import\": \"./dist/after.mjs\",\n \"require\": \"./dist/after.cjs\"\n },\n \"./navigation\": {\n \"types\": \"./dist/navigation.d.ts\",\n \"import\": \"./dist/navigation.mjs\",\n \"require\": \"./dist/navigation.cjs\"\n },\n \"./headers\": {\n \"types\": \"./dist/headers.d.ts\",\n \"import\": \"./dist/headers.mjs\",\n \"require\": \"./dist/headers.cjs\"\n },\n \"./theme\": {\n \"types\": \"./dist/theme/index.d.ts\",\n \"import\": \"./dist/theme/index.mjs\",\n \"require\": \"./dist/theme/index.cjs\"\n },\n \"./theme/client\": {\n \"types\": \"./dist/theme/client.d.ts\",\n \"import\": \"./dist/theme/client.mjs\",\n \"require\": \"./dist/theme/client.cjs\"\n },\n \"./theme/runtime\": {\n \"types\": \"./dist/theme/runtime.d.ts\",\n \"import\": \"./dist/theme/runtime.mjs\",\n \"require\": \"./dist/theme/runtime.cjs\"\n },\n \"./theme/server\": {\n \"types\": \"./dist/theme/server.d.ts\",\n \"import\": \"./dist/theme/server.mjs\",\n \"require\": \"./dist/theme/server.cjs\"\n },\n \"./docs\": {\n \"types\": \"./dist/docs.d.ts\",\n \"import\": \"./dist/docs.mjs\",\n \"require\": \"./dist/docs.cjs\"\n },\n \"./markdown\": {\n \"types\": \"./dist/markdown.d.ts\",\n \"import\": \"./dist/markdown.mjs\",\n \"require\": \"./dist/markdown.cjs\"\n },\n \"./app-markdown\": {\n \"types\": \"./dist/app-markdown.d.ts\",\n \"import\": \"./dist/app-markdown.mjs\",\n \"require\": \"./dist/app-markdown.cjs\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability.d.ts\",\n \"import\": \"./dist/observability.mjs\",\n \"require\": \"./dist/observability.cjs\"\n },\n \"./instrumentation\": {\n \"types\": \"./dist/instrumentation.d.ts\",\n \"import\": \"./dist/instrumentation.mjs\",\n \"require\": \"./dist/instrumentation.cjs\"\n },\n \"./workflows\": {\n \"types\": \"./dist/workflows.d.ts\",\n \"import\": \"./dist/workflows.mjs\",\n \"require\": \"./dist/workflows.cjs\"\n },\n \"./cron\": {\n \"types\": \"./dist/cron.d.ts\",\n \"import\": \"./dist/cron.mjs\",\n \"require\": \"./dist/cron.cjs\"\n },\n \"./server-fn\": {\n \"types\": \"./dist/server-fn.d.ts\",\n \"import\": \"./dist/server-fn.mjs\",\n \"require\": \"./dist/server-fn.cjs\"\n },\n \"./server-fn/client\": {\n \"types\": \"./dist/server-fn-client.d.ts\",\n \"import\": \"./dist/server-fn-client.mjs\",\n \"require\": \"./dist/server-fn-client.cjs\"\n },\n \"./server-query\": {\n \"types\": \"./dist/server-query.d.ts\",\n \"import\": \"./dist/server-query.mjs\",\n \"require\": \"./dist/server-query.cjs\"\n },\n \"./server-query/client\": {\n \"types\": \"./dist/server-query-client.d.ts\",\n \"import\": \"./dist/server-query-client.mjs\",\n \"require\": \"./dist/server-query-client.cjs\"\n },\n \"./server-action-security\": {\n \"types\": \"./dist/server-action-security.d.ts\",\n \"import\": \"./dist/server-action-security.mjs\",\n \"require\": \"./dist/server-action-security.cjs\"\n },\n \"./deployment\": {\n \"types\": \"./dist/deployment.d.ts\",\n \"import\": \"./dist/deployment.mjs\",\n \"require\": \"./dist/deployment.cjs\"\n },\n \"./env\": {\n \"types\": \"./dist/env.d.ts\",\n \"import\": \"./dist/env.mjs\",\n \"require\": \"./dist/env.cjs\"\n },\n \"./env-types\": {\n \"types\": \"./dist/env-types.d.ts\",\n \"import\": \"./dist/env-types.mjs\",\n \"require\": \"./dist/env-types.cjs\"\n },\n \"./environment\": {\n \"types\": \"./dist/environment.d.ts\",\n \"import\": \"./dist/environment.mjs\",\n \"require\": \"./dist/environment.cjs\"\n },\n \"./environment/vite\": {\n \"types\": \"./dist/environment/vite.d.ts\",\n \"import\": \"./dist/environment/vite.mjs\",\n \"require\": \"./dist/environment/vite.cjs\"\n },\n \"./font\": {\n \"types\": \"./dist/font.d.ts\",\n \"import\": \"./dist/font.mjs\",\n \"require\": \"./dist/font.cjs\"\n },\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.mjs\",\n \"require\": \"./dist/vite.cjs\"\n },\n \"./plugin\": {\n \"types\": \"./dist/plugin.d.ts\",\n \"import\": \"./dist/plugin.mjs\",\n \"require\": \"./dist/plugin.cjs\"\n },\n \"./plugin/server\": {\n \"types\": \"./dist/server-plugins.d.ts\",\n \"import\": \"./dist/server-plugins.mjs\",\n \"require\": \"./dist/server-plugins.cjs\"\n },\n \"./plugin/client\": {\n \"types\": \"./dist/client-plugins.d.ts\",\n \"import\": \"./dist/client-plugins.mjs\",\n \"require\": \"./dist/client-plugins.cjs\"\n },\n \"./query\": {\n \"types\": \"./dist/query/index.d.ts\",\n \"import\": \"./dist/query/index.mjs\",\n \"require\": \"./dist/query/index.cjs\"\n },\n \"./query/parsers\": {\n \"types\": \"./dist/query/parsers.d.ts\",\n \"import\": \"./dist/query/parsers.mjs\",\n \"require\": \"./dist/query/parsers.cjs\"\n },\n \"./query/client\": {\n \"types\": \"./dist/query/client.d.ts\",\n \"import\": \"./dist/query/client.mjs\",\n \"require\": \"./dist/query/client.cjs\"\n },\n \"./query/server\": {\n \"types\": \"./dist/query/server.d.ts\",\n \"import\": \"./dist/query/server.mjs\",\n \"require\": \"./dist/query/server.cjs\"\n },\n \"./middleware\": {\n \"types\": \"./dist/middleware.d.ts\",\n \"import\": \"./dist/middleware.mjs\",\n \"require\": \"./dist/middleware.cjs\"\n },\n \"./api\": {\n \"types\": \"./dist/api.d.ts\",\n \"import\": \"./dist/api.mjs\",\n \"require\": \"./dist/api.cjs\"\n },\n \"./api/route-manager\": {\n \"types\": \"./dist/api/route-manager.d.ts\",\n \"import\": \"./dist/api/route-manager.mjs\",\n \"require\": \"./dist/api/route-manager.cjs\"\n },\n \"./api/runtime\": {\n \"types\": \"./dist/api/runtime.d.ts\",\n \"import\": \"./dist/api/runtime.mjs\",\n \"require\": \"./dist/api/runtime.cjs\"\n },\n \"./request\": {\n \"types\": \"./dist/request.d.ts\",\n \"import\": \"./dist/request.mjs\",\n \"require\": \"./dist/request.cjs\"\n },\n \"./router\": {\n \"types\": \"./dist/router.d.ts\",\n \"import\": \"./dist/router.mjs\",\n \"require\": \"./dist/router.cjs\"\n },\n \"./routes\": {\n \"types\": \"./dist/routes.d.ts\",\n \"import\": \"./dist/routes.mjs\",\n \"require\": \"./dist/routes.cjs\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing.d.ts\",\n \"import\": \"./dist/testing.mjs\",\n \"require\": \"./dist/testing.cjs\"\n },\n \"./agent-runtime\": {\n \"types\": \"./dist/agent-runtime.d.ts\",\n \"import\": \"./dist/agent-runtime.mjs\",\n \"require\": \"./dist/agent-runtime.cjs\"\n },\n \"./css\": {\n \"types\": \"./types/css.d.ts\"\n },\n \"./image\": {\n \"types\": \"./types/image.d.ts\",\n \"import\": \"./dist/image.mjs\",\n \"require\": \"./dist/image.cjs\"\n },\n \"./image/server\": {\n \"types\": \"./dist/image/server.d.ts\",\n \"import\": \"./dist/image/server.mjs\",\n \"require\": \"./dist/image/server.cjs\"\n },\n \"./image/sharp\": {\n \"types\": \"./dist/image/sharp.d.ts\",\n \"import\": \"./dist/image/sharp.mjs\",\n \"require\": \"./dist/image/sharp.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.mjs\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./i18n/server\": {\n \"types\": \"./dist/i18n/server.d.ts\",\n \"import\": \"./dist/i18n/server.mjs\",\n \"require\": \"./dist/i18n/server.cjs\"\n },\n \"./i18n/client\": {\n \"types\": \"./dist/i18n/client.d.ts\",\n \"import\": \"./dist/i18n/client.mjs\",\n \"require\": \"./dist/i18n/client.cjs\"\n },\n \"./internal/production-runtime\": {\n \"types\": \"./dist/internal/production-runtime.d.ts\",\n \"import\": \"./dist/internal/production-runtime.mjs\",\n \"require\": \"./dist/internal/production-runtime.cjs\"\n },\n \"./internal/product-telemetry-runtime\": {\n \"types\": \"./dist/internal/product-telemetry-runtime.d.ts\",\n \"import\": \"./dist/internal/product-telemetry-runtime.mjs\",\n \"require\": \"./dist/internal/product-telemetry-runtime.cjs\"\n },\n \"./internal/metadata-image-runtime\": {\n \"types\": \"./dist/internal/metadata-image-runtime.d.ts\",\n \"import\": \"./dist/internal/metadata-image-runtime.mjs\",\n \"require\": \"./dist/internal/metadata-image-runtime.cjs\"\n },\n \"./internal/client-runtime\": {\n \"types\": \"./dist/internal/client-runtime.d.ts\",\n \"import\": \"./dist/internal/client-runtime.mjs\",\n \"require\": \"./dist/internal/client-runtime.cjs\"\n },\n \"./internal/isolated-boundary\": {\n \"types\": \"./dist/internal/isolated-boundary.d.ts\",\n \"import\": \"./dist/internal/isolated-boundary.mjs\",\n \"require\": \"./dist/internal/isolated-boundary.cjs\"\n },\n \"./internal/build-runtime\": {\n \"types\": \"./dist/internal/build-runtime.d.ts\",\n \"import\": \"./dist/internal/build-runtime.mjs\",\n \"require\": \"./dist/internal/build-runtime.cjs\"\n },\n \"./internal/config-runtime\": {\n \"types\": \"./dist/internal/config-runtime.d.ts\",\n \"import\": \"./dist/internal/config-runtime.mjs\",\n \"require\": \"./dist/internal/config-runtime.cjs\"\n },\n \"./internal/production-node-env\": {\n \"types\": \"./dist/internal/production-node-env.d.ts\",\n \"import\": \"./dist/internal/production-node-env.mjs\",\n \"require\": \"./dist/internal/production-node-env.cjs\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:runtime\": \"tsup --config tsup.runtime.config.ts\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:coverage\": \"vitest --coverage\",\n \"lint\": \"biome lint .\",\n \"lint:fix\": \"biome lint --write .\",\n \"format\": \"biome format --write .\",\n \"type-check\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\"\n },\n \"dependencies\": {\n \"@farming-labs/docs\": \"^0.2.44\",\n \"@farming-labs/orm\": \"0.0.62\",\n \"@farming-labs/orm-runtime\": \"0.0.62\",\n \"@formatjs/icu-messageformat-parser\": \"3.5.15\",\n \"@jridgewell/trace-mapping\": \"0.3.31\",\n \"@mdx-js/mdx\": \"^3.1.1\",\n \"@opentelemetry/api\": \"1.9.1\",\n \"@scalar/api-reference\": \"^1.38.1\",\n \"@scalar/openapi-parser\": \"^0.22.3\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@vercel/og\": \"0.11.1\",\n \"@vitejs/plugin-react\": \"^4.2.1\",\n \"better-call\": \"^1.0.19\",\n \"db0\": \"^0.3.4\",\n \"esbuild\": \"^0.28.0\",\n \"fast-glob\": \"^3.3.2\",\n \"h3\": \"2.0.1-rc.5\",\n \"image-size\": \"^2.0.2\",\n \"intl-messageformat\": \"11.2.12\",\n \"marked\": \"^12.0.2\",\n \"nitro\": \"3.0.1-alpha.0\",\n \"pg\": \"^8.20.0\",\n \"picocolors\": \"^1.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"sirv\": \"^2.0.4\",\n \"sugar-high\": \"^0.9.5\",\n \"supports-color\": \"^10.2.2\",\n \"tailwindcss\": \"4.1.18\",\n \"unstorage\": \"^2.0.0-alpha.3\",\n \"vite\": \"^5.0.10\",\n \"zod\": \"^4.1.12\"\n },\n \"devDependencies\": {\n \"@clerk/react\": \"^6.1.0\",\n \"@farm.js/otel\": \"workspace:*\",\n \"@farm.js/renderer-tests\": \"workspace:*\",\n \"@opentelemetry/sdk-node\": \"0.221.0\",\n \"@opentelemetry/sdk-trace-base\": \"2.10.0\",\n \"@types/react\": \"^18.2.45\",\n \"@types/react-dom\": \"^18.2.18\",\n \"@vitest/coverage-v8\": \"^3.2.7\",\n \"jsdom\": \"^25.0.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.3.3\",\n \"vitest\": \"^3.2.7\"\n },\n \"peerDependencies\": {\n \"react\": \"^18.2.0 || ^19.0.0\",\n \"react-dom\": \"^18.2.0 || ^19.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"react\": {\n \"optional\": true\n },\n \"react-dom\": {\n \"optional\": true\n }\n },\n \"optionalDependencies\": {\n \"rolldown\": \"1.2.0\",\n \"sharp\": \"^0.34.5\",\n \"vite-rolldown\": \"npm:vite@8.1.5\"\n }\n}\n","import { version } from \"../package.json\";\n\nexport const FARM_VERSION = version;\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  FARM_VERSION
3
- } from "../chunk-IIKQBOGZ.mjs";
3
+ } from "../chunk-MV5WATSI.mjs";
4
4
  import {
5
5
  __name
6
6
  } from "../chunk-CGILA3WO.mjs";
package/dist/plugin.cjs CHANGED
@@ -16320,6 +16320,25 @@ var fs4 = __toESM(require("fs"));
16320
16320
  var path12 = __toESM(require("path"));
16321
16321
  init_utils();
16322
16322
 
16323
+ // src/server/dev-styles.ts
16324
+ var STYLE_EXTENSIONS = /\.(css|scss|sass|less|styl|stylus)(?:$|\?)/;
16325
+ var ALREADY_LINKED = "/src/app/globals.css";
16326
+ function collectDevStylesheetUrls(modules) {
16327
+ const seen = /* @__PURE__ */ new Set();
16328
+ for (const mod of modules) {
16329
+ const id = mod.id ?? mod.file ?? "";
16330
+ if (!STYLE_EXTENSIONS.test(id)) continue;
16331
+ if (id.includes(".module.")) continue;
16332
+ const url = mod.url;
16333
+ if (!url || !url.startsWith("/")) continue;
16334
+ const bare = url.split("?")[0];
16335
+ if (bare === ALREADY_LINKED) continue;
16336
+ seen.add(bare);
16337
+ }
16338
+ return [...seen].sort();
16339
+ }
16340
+ __name(collectDevStylesheetUrls, "collectDevStylesheetUrls");
16341
+
16323
16342
  // src/server/full-document.ts
16324
16343
  function stripContentsWrappers(markup) {
16325
16344
  let out = markup.replace(/^\s+/, "");
@@ -19781,7 +19800,7 @@ _setFarmThemeServerSnapshotResolver(() => {
19781
19800
  });
19782
19801
 
19783
19802
  // package.json
19784
- var version = "0.1.0-beta.75";
19803
+ var version = "0.1.0-beta.76";
19785
19804
 
19786
19805
  // src/version.ts
19787
19806
  var FARM_VERSION = version;
@@ -20152,6 +20171,18 @@ var _ServerRenderer = class _ServerRenderer {
20152
20171
  pageElement
20153
20172
  );
20154
20173
  }
20174
+ /// Stylesheets the app imported through JS (fontsource packages, component
20175
+ /// CSS) that the document must link alongside globals.css — see #658.
20176
+ collectDevStyleHrefs() {
20177
+ const graph = this.viteServer?.moduleGraph;
20178
+ if (!graph) return [];
20179
+ return collectDevStylesheetUrls(graph.idToModuleMap.values());
20180
+ }
20181
+ collectDevStyleLinks() {
20182
+ return this.collectDevStyleHrefs().map(
20183
+ (href) => `<link rel="stylesheet" href="${escapeHtmlAttribute2(href)}">`
20184
+ );
20185
+ }
20155
20186
  createLayoutBoundary(pattern, layoutElement) {
20156
20187
  return this.rendererRuntime.createElement(
20157
20188
  "div",
@@ -21366,7 +21397,11 @@ var _ServerRenderer = class _ServerRenderer {
21366
21397
  {
21367
21398
  tag: "link",
21368
21399
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
21369
- }
21400
+ },
21401
+ ...this.collectDevStyleHrefs().map((href) => ({
21402
+ tag: "link",
21403
+ attrs: { rel: "stylesheet", href }
21404
+ }))
21370
21405
  ]
21371
21406
  };
21372
21407
  for (const routeEntry of manifest.routes) {
@@ -21462,6 +21497,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
21462
21497
  rendererHead,
21463
21498
  renderFarmFontDevHead(this.config.root || process.cwd()),
21464
21499
  `<link rel="stylesheet" href="/src/app/globals.css">`,
21500
+ ...this.collectDevStyleLinks(),
21465
21501
  `<script type="module" src="/@vite/client"></script>`,
21466
21502
  rendererHydrationScript,
21467
21503
  bootstrapScript
@@ -21480,7 +21516,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
21480
21516
  ${documentTitleTag}${metaTags}${alternateTags}${rendererHead ? `
21481
21517
  ${rendererHead}` : ""}
21482
21518
  ${renderFarmFontDevHead(this.config.root || process.cwd())}
21483
- <link rel="stylesheet" href="/src/app/globals.css">
21519
+ <link rel="stylesheet" href="/src/app/globals.css">${this.collectDevStyleLinks().map((l) => `
21520
+ ${l}`).join("")}
21484
21521
  <script type="module" src="/@vite/client"></script>
21485
21522
  ${rendererHydrationScript}
21486
21523
  ${bootstrapScript}
@@ -21545,7 +21582,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
21545
21582
  {
21546
21583
  tag: "link",
21547
21584
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
21548
- }
21585
+ },
21586
+ ...this.collectDevStyleHrefs().map((href) => ({
21587
+ tag: "link",
21588
+ attrs: { rel: "stylesheet", href }
21589
+ }))
21549
21590
  ]
21550
21591
  };
21551
21592
  for (const routeEntry of manifest.routes) {
@@ -21632,6 +21673,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
21632
21673
  { style: { display: "contents" } },
21633
21674
  element
21634
21675
  );
21676
+ const devStyleLinks = this.collectDevStyleLinks();
21635
21677
  const { pipe } = renderToPipeableStream2(streamRoot, {
21636
21678
  onShellReady() {
21637
21679
  const shellReadyMs = Date.now() - streamStartTime;
@@ -21653,7 +21695,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
21653
21695
  ${hasFavicon ? "" : '<link rel="icon" href="data:,">'}
21654
21696
  <title>${title}</title>${metaTags}${i18nAlternateTags}
21655
21697
  ${fontHead}
21656
- <link rel="stylesheet" href="/src/app/globals.css" />
21698
+ <link rel="stylesheet" href="/src/app/globals.css" />${devStyleLinks.map((l) => `
21699
+ ${l}`).join("")}
21657
21700
  <script type="module" src="/@vite/client"></script>
21658
21701
  ${propsScript}
21659
21702
  ${hydrationClickQueueScript}
@@ -21880,6 +21923,7 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
21880
21923
  alternateLinks,
21881
21924
  fontHead,
21882
21925
  `<link rel="stylesheet" href="/src/app/globals.css" />`,
21926
+ ...this.collectDevStyleLinks(),
21883
21927
  `<script type="module" src="/@vite/client"></script>`,
21884
21928
  rendererHydrationScript,
21885
21929
  integrationManifestScript
@@ -21897,7 +21941,8 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
21897
21941
  <link rel="icon" href="data:,">
21898
21942
  <title>${escapeHtmlAttribute2(documentTitle)}</title>${alternateLinks}
21899
21943
  ${fontHead}
21900
- <link rel="stylesheet" href="/src/app/globals.css" />
21944
+ <link rel="stylesheet" href="/src/app/globals.css" />${this.collectDevStyleLinks().map((l) => `
21945
+ ${l}`).join("")}
21901
21946
  <script type="module" src="/@vite/client"></script>
21902
21947
  ${rendererHydrationScript}
21903
21948
  ${integrationManifestScript}