@farm.js/core 0.1.0-beta.64 → 0.1.0-beta.65

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 (137) hide show
  1. package/dist/agent-runtime.cjs +2 -0
  2. package/dist/agent-runtime.cjs.map +1 -1
  3. package/dist/agent-runtime.d.mts +2 -2
  4. package/dist/agent-runtime.d.ts +2 -2
  5. package/dist/agent-runtime.mjs +1 -1
  6. package/dist/{app-CXD_2F0_.d.ts → app-BNcok8cp.d.ts} +4 -4
  7. package/dist/{app-CDOe7z8C.d.mts → app-J5WfOI54.d.mts} +4 -4
  8. package/dist/app-markdown.d.mts +3 -3
  9. package/dist/app-markdown.d.ts +3 -3
  10. package/dist/{chunk-72PXP3EO.mjs → chunk-2O67SLNB.mjs} +2 -2
  11. package/dist/{chunk-HSHHUDHL.mjs → chunk-4R7TBTJL.mjs} +2 -2
  12. package/dist/{chunk-6HUGGEFE.mjs → chunk-5TLXU6MG.mjs} +2 -2
  13. package/dist/chunk-5TLXU6MG.mjs.map +1 -0
  14. package/dist/{chunk-4XQQVESH.mjs → chunk-ECLBGYGZ.mjs} +2 -2
  15. package/dist/{chunk-4N2Y3PLJ.mjs → chunk-H5D6FDSG.mjs} +6 -6
  16. package/dist/{chunk-CYEPGSVA.mjs → chunk-Q7ZTEADY.mjs} +2 -2
  17. package/dist/{chunk-CYEPGSVA.mjs.map → chunk-Q7ZTEADY.mjs.map} +1 -1
  18. package/dist/{chunk-TAGCUUUE.mjs → chunk-R6UV2YLL.mjs} +5 -5
  19. package/dist/{chunk-PFMBMZP7.mjs → chunk-RUCTQDNI.mjs} +2 -2
  20. package/dist/{chunk-O7JLZXUV.mjs → chunk-S35F2MY7.mjs} +2 -9
  21. package/dist/chunk-S35F2MY7.mjs.map +1 -0
  22. package/dist/{chunk-GPGQCUNC.mjs → chunk-VQYZ6JT6.mjs} +2 -2
  23. package/dist/{chunk-GPGQCUNC.mjs.map → chunk-VQYZ6JT6.mjs.map} +1 -1
  24. package/dist/{chunk-SDCCR55N.mjs → chunk-VSDJ4EX2.mjs} +2 -2
  25. package/dist/{chunk-VEMZQ66A.mjs → chunk-YHYS4POL.mjs} +3 -1
  26. package/dist/{chunk-VEMZQ66A.mjs.map → chunk-YHYS4POL.mjs.map} +1 -1
  27. package/dist/client/lifecycle.mjs +2 -2
  28. package/dist/{client-plugins-CkZgBOOM.d.mts → client-plugins-D1wDIJjS.d.mts} +1 -1
  29. package/dist/{client-plugins-C-PSOtea.d.ts → client-plugins-DvLyPAe2.d.ts} +1 -1
  30. package/dist/client-plugins.cjs +1 -1
  31. package/dist/client-plugins.cjs.map +1 -1
  32. package/dist/client-plugins.d.mts +2 -2
  33. package/dist/client-plugins.d.ts +2 -2
  34. package/dist/client-plugins.mjs +2 -2
  35. package/dist/client.cjs +1 -1
  36. package/dist/client.cjs.map +1 -1
  37. package/dist/client.d.mts +5 -5
  38. package/dist/client.d.ts +5 -5
  39. package/dist/client.mjs +2 -2
  40. package/dist/config.d.mts +2 -2
  41. package/dist/config.d.ts +2 -2
  42. package/dist/{devtools-2FEBZ7RN.mjs → devtools-5BSQV6GL.mjs} +3 -3
  43. package/dist/docs.cjs +2 -0
  44. package/dist/docs.cjs.map +1 -1
  45. package/dist/docs.mjs +3 -3
  46. package/dist/index.cjs +6 -11
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.mts +10 -10
  49. package/dist/index.d.ts +10 -10
  50. package/dist/index.mjs +12 -12
  51. package/dist/integrations.cjs +2 -0
  52. package/dist/integrations.cjs.map +1 -1
  53. package/dist/integrations.d.mts +2 -2
  54. package/dist/integrations.d.ts +2 -2
  55. package/dist/integrations.mjs +1 -1
  56. package/dist/internal/build-runtime.cjs +4 -9
  57. package/dist/internal/build-runtime.cjs.map +1 -1
  58. package/dist/internal/build-runtime.d.mts +4 -4
  59. package/dist/internal/build-runtime.d.ts +4 -4
  60. package/dist/internal/build-runtime.mjs +8 -8
  61. package/dist/internal/client-runtime.cjs +1 -1
  62. package/dist/internal/client-runtime.cjs.map +1 -1
  63. package/dist/internal/client-runtime.mjs +2 -2
  64. package/dist/internal/config-runtime.cjs +2 -0
  65. package/dist/internal/config-runtime.cjs.map +1 -1
  66. package/dist/internal/config-runtime.d.mts +3 -3
  67. package/dist/internal/config-runtime.d.ts +3 -3
  68. package/dist/internal/config-runtime.mjs +2 -2
  69. package/dist/internal/production-runtime.cjs +3 -1
  70. package/dist/internal/production-runtime.cjs.map +1 -1
  71. package/dist/internal/production-runtime.d.mts +7 -7
  72. package/dist/internal/production-runtime.d.ts +7 -7
  73. package/dist/internal/production-runtime.mjs +3 -1
  74. package/dist/internal/production-runtime.mjs.map +1 -1
  75. package/dist/{metadata-route-DsGastBa.d.ts → metadata-route-BqEz7r1K.d.ts} +1 -1
  76. package/dist/{metadata-route-Cp4wPM4w.d.mts → metadata-route-DdVou1J2.d.mts} +1 -1
  77. package/dist/middleware.cjs +2 -9
  78. package/dist/middleware.cjs.map +1 -1
  79. package/dist/middleware.d.mts +4 -4
  80. package/dist/middleware.d.ts +4 -4
  81. package/dist/middleware.mjs +3 -3
  82. package/dist/plugin.cjs +4 -9
  83. package/dist/plugin.cjs.map +1 -1
  84. package/dist/plugin.d.mts +2 -2
  85. package/dist/plugin.d.ts +2 -2
  86. package/dist/plugin.mjs +5 -5
  87. package/dist/{production-runtime-BZFqIn8J.d.mts → production-runtime-8nfBJO3d.d.mts} +2 -2
  88. package/dist/{production-runtime-DSqh4YXr.d.ts → production-runtime-BqDGTzlt.d.ts} +2 -2
  89. package/dist/{render-plan-fCFoTM4r.d.ts → render-plan-31JfM9Wy.d.ts} +1 -1
  90. package/dist/{render-plan-uBR98RLY.d.mts → render-plan-DpTGGrJg.d.mts} +1 -1
  91. package/dist/renderer-client.d.mts +4 -4
  92. package/dist/renderer-client.d.ts +4 -4
  93. package/dist/{request-B165X1nu.d.mts → request-BKx8aFMD.d.mts} +1 -1
  94. package/dist/{request-CLZ9Aa86.d.ts → request-CdPtgIYB.d.ts} +1 -1
  95. package/dist/request.d.mts +3 -3
  96. package/dist/request.d.ts +3 -3
  97. package/dist/routes.d.mts +2 -2
  98. package/dist/routes.d.ts +2 -2
  99. package/dist/server-plugins.d.mts +3 -3
  100. package/dist/server-plugins.d.ts +3 -3
  101. package/dist/server-query.cjs +1 -1
  102. package/dist/server-query.cjs.map +1 -1
  103. package/dist/server-query.mjs +1 -1
  104. package/dist/server.cjs +5 -10
  105. package/dist/server.cjs.map +1 -1
  106. package/dist/server.d.mts +8 -8
  107. package/dist/server.d.ts +8 -8
  108. package/dist/server.mjs +7 -7
  109. package/dist/{spa-router-EgElBa3J.d.mts → spa-router-BHufQUlC.d.mts} +1 -1
  110. package/dist/{spa-router-cdXv8ZrK.d.ts → spa-router-Cd233yg5.d.ts} +1 -1
  111. package/dist/testing.d.mts +2 -2
  112. package/dist/testing.d.ts +2 -2
  113. package/dist/{utils-Cf5JwlaG.d.ts → utils-Csf77Qu9.d.ts} +1 -1
  114. package/dist/{utils-d_Dur6jw.d.mts → utils-PJft6eJm.d.mts} +1 -1
  115. package/dist/version.cjs +1 -1
  116. package/dist/version.cjs.map +1 -1
  117. package/dist/version.mjs +1 -1
  118. package/dist/vite.cjs +4 -9
  119. package/dist/vite.cjs.map +1 -1
  120. package/dist/vite.d.mts +2 -2
  121. package/dist/vite.d.ts +2 -2
  122. package/dist/vite.mjs +4 -4
  123. package/dist/{workflows-CusFV6mn.d.mts → workflows-CkDu_SeN.d.mts} +2 -1
  124. package/dist/{workflows-CusFV6mn.d.ts → workflows-CkDu_SeN.d.ts} +2 -1
  125. package/dist/workflows.d.mts +1 -1
  126. package/dist/workflows.d.ts +1 -1
  127. package/package.json +1 -1
  128. package/dist/chunk-6HUGGEFE.mjs.map +0 -1
  129. package/dist/chunk-O7JLZXUV.mjs.map +0 -1
  130. /package/dist/{chunk-72PXP3EO.mjs.map → chunk-2O67SLNB.mjs.map} +0 -0
  131. /package/dist/{chunk-HSHHUDHL.mjs.map → chunk-4R7TBTJL.mjs.map} +0 -0
  132. /package/dist/{chunk-4XQQVESH.mjs.map → chunk-ECLBGYGZ.mjs.map} +0 -0
  133. /package/dist/{chunk-4N2Y3PLJ.mjs.map → chunk-H5D6FDSG.mjs.map} +0 -0
  134. /package/dist/{chunk-TAGCUUUE.mjs.map → chunk-R6UV2YLL.mjs.map} +0 -0
  135. /package/dist/{chunk-PFMBMZP7.mjs.map → chunk-RUCTQDNI.mjs.map} +0 -0
  136. /package/dist/{chunk-SDCCR55N.mjs.map → chunk-VSDJ4EX2.mjs.map} +0 -0
  137. /package/dist/{devtools-2FEBZ7RN.mjs.map → devtools-5BSQV6GL.mjs.map} +0 -0
@@ -1,17 +1,17 @@
1
1
  export { _runWithAfterRequest } from '../after.mjs';
2
- import { R as ResolvedFarmServerConfig } from '../workflows-CusFV6mn.mjs';
3
- export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as resolveFarmServerConfig } from '../workflows-CusFV6mn.mjs';
4
- export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-B165X1nu.mjs';
2
+ import { R as ResolvedFarmServerConfig } from '../workflows-CkDu_SeN.mjs';
3
+ export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as readFarmRequestBody, a as resolveFarmServerConfig } from '../workflows-CkDu_SeN.mjs';
4
+ export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-BKx8aFMD.mjs';
5
5
  export { configureFarmCache, createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from '../cache.mjs';
6
6
  export { c as createFarmLocaleCookie, g as getFarmLocaleVaryHeaders } from '../resolver-D1V41j5Y.mjs';
7
7
  export { localizeFarmHref, localizeFarmPathname, stripFarmLocaleFromPathname } from '../i18n/index.mjs';
8
- export { a as addMetadataImageReference, c as createFarmMetadataRouteResponse, m as mergeMetadata, r as renderMetadataHead } from '../metadata-route-Cp4wPM4w.mjs';
9
- export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-BZFqIn8J.mjs';
8
+ export { a as addMetadataImageReference, c as createFarmMetadataRouteResponse, m as mergeMetadata, r as renderMetadataHead } from '../metadata-route-DdVou1J2.mjs';
9
+ export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-8nfBJO3d.mjs';
10
10
  export { g as getFarmRedirectError, i as isFarmNotFoundError, a as isFarmRedirectError } from '../navigation-errors-Dvwpzaer.mjs';
11
11
  export { configureFarmObservability, emitFarmEvent, runWithFarmRequestSpan } from '../observability.mjs';
12
12
  export { f as createFarmInstrumentationLifecycle, r as resolveFarmInstrumentationRuntime } from '../instrumentation-runtime-CE06JLHZ.mjs';
13
- import { F as FarmConfig, g as FarmContextFactoryInput } from '../client-plugins-CkZgBOOM.mjs';
14
- export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-CkZgBOOM.mjs';
13
+ import { F as FarmConfig, g as FarmContextFactoryInput } from '../client-plugins-D1wDIJjS.mjs';
14
+ export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-D1wDIJjS.mjs';
15
15
  export { _setDefaultFarmThemeConfig, getTheme } from '../theme/server.mjs';
16
16
  import { c as FarmThemeRuntime, d as FarmThemeConfig, R as ResolvedFarmThemeConfig, a as FarmThemePreference } from '../types-DQnyD3VD.mjs';
17
17
  export { s as searchParamsToObject } from '../search-params-bIHjAtKZ.mjs';
@@ -1,17 +1,17 @@
1
1
  export { _runWithAfterRequest } from '../after.js';
2
- import { R as ResolvedFarmServerConfig } from '../workflows-CusFV6mn.js';
3
- export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as resolveFarmServerConfig } from '../workflows-CusFV6mn.js';
4
- export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-CLZ9Aa86.js';
2
+ import { R as ResolvedFarmServerConfig } from '../workflows-CkDu_SeN.js';
3
+ export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as readFarmRequestBody, a as resolveFarmServerConfig } from '../workflows-CkDu_SeN.js';
4
+ export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-CdPtgIYB.js';
5
5
  export { configureFarmCache, createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from '../cache.js';
6
6
  export { c as createFarmLocaleCookie, g as getFarmLocaleVaryHeaders } from '../resolver-DjsNlgad.js';
7
7
  export { localizeFarmHref, localizeFarmPathname, stripFarmLocaleFromPathname } from '../i18n/index.js';
8
- export { a as addMetadataImageReference, c as createFarmMetadataRouteResponse, m as mergeMetadata, r as renderMetadataHead } from '../metadata-route-DsGastBa.js';
9
- export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-DSqh4YXr.js';
8
+ export { a as addMetadataImageReference, c as createFarmMetadataRouteResponse, m as mergeMetadata, r as renderMetadataHead } from '../metadata-route-BqEz7r1K.js';
9
+ export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-BqDGTzlt.js';
10
10
  export { g as getFarmRedirectError, i as isFarmNotFoundError, a as isFarmRedirectError } from '../navigation-errors-Dvwpzaer.js';
11
11
  export { configureFarmObservability, emitFarmEvent, runWithFarmRequestSpan } from '../observability.js';
12
12
  export { f as createFarmInstrumentationLifecycle, r as resolveFarmInstrumentationRuntime } from '../instrumentation-runtime-CE06JLHZ.js';
13
- import { F as FarmConfig, g as FarmContextFactoryInput } from '../client-plugins-C-PSOtea.js';
14
- export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-C-PSOtea.js';
13
+ import { F as FarmConfig, g as FarmContextFactoryInput } from '../client-plugins-DvLyPAe2.js';
14
+ export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-DvLyPAe2.js';
15
15
  export { _setDefaultFarmThemeConfig, getTheme } from '../theme/server.js';
16
16
  import { c as FarmThemeRuntime, d as FarmThemeConfig, R as ResolvedFarmThemeConfig, a as FarmThemePreference } from '../types-DQnyD3VD.js';
17
17
  export { s as searchParamsToObject } from '../search-params-bIHjAtKZ.js';
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  applyProductionMiddlewareHeaders,
3
3
  createProductionMiddlewareRunner
4
- } from "../chunk-6HUGGEFE.mjs";
4
+ } from "../chunk-5TLXU6MG.mjs";
5
5
  import {
6
6
  createFarmInstrumentationLifecycle,
7
7
  resolveFarmInstrumentationRuntime
@@ -51,6 +51,7 @@ import {
51
51
  import {
52
52
  bufferFarmRequestBody,
53
53
  createFarmRequestBodyErrorResponse,
54
+ readFarmRequestBody,
54
55
  resolveFarmServerConfig
55
56
  } from "../chunk-YTMDIHQN.mjs";
56
57
  import {
@@ -333,6 +334,7 @@ export {
333
334
  manageFarmLinkHeaderPreloads,
334
335
  mergeMetadata,
335
336
  normalizeRevalidatePath,
337
+ readFarmRequestBody,
336
338
  renderMetadataHead,
337
339
  reportFarmPreloadWarnings,
338
340
  resolveDefaultErrorStatus,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/production-lifecycle.ts","../../src/nitro/production-runtime.ts"],"sourcesContent":["import type { ResolvedFarmServerConfig } from \"./server-http\";\n\nexport type FarmProductionLifecycleState = \"starting\" | \"ready\" | \"draining\" | \"failed\" | \"closed\";\n\nexport interface FarmProductionLifecycleOptions {\n server: ResolvedFarmServerConfig;\n start?: () => void | Promise<void>;\n close?: (reason: string) => void | Promise<void>;\n}\n\nexport interface FarmResponseCompletionContext {\n onResponseFinished?: (callback: () => void) => void;\n}\n\nexport interface FarmProductionLifecycle {\n readonly state: FarmProductionLifecycleState;\n readonly activeRequests: number;\n start(): Promise<void>;\n beginDrain(reason?: string): void;\n waitForIdle(timeoutMs?: number): Promise<boolean>;\n close(reason?: string): Promise<void>;\n handleHealthRequest(request: Request): Promise<Response | null>;\n runRequest(\n handler: () => Response | Promise<Response>,\n context?: FarmResponseCompletionContext,\n ): Promise<Response>;\n}\n\nexport function createFarmProductionLifecycle(\n options: FarmProductionLifecycleOptions,\n): FarmProductionLifecycle {\n let state: FarmProductionLifecycleState = \"starting\";\n let activeRequests = 0;\n let startPromise: Promise<void> | undefined;\n let closePromise: Promise<void> | undefined;\n const idleWaiters = new Set<() => void>();\n\n const notifyIdle = () => {\n if (activeRequests !== 0) return;\n for (const resolve of idleWaiters) resolve();\n idleWaiters.clear();\n };\n\n const start = async () => {\n if (state === \"ready\") return;\n if (startPromise) return startPromise;\n if (state === \"draining\" || state === \"closed\") {\n throw new Error(\"Farm production runtime is shutting down\");\n }\n if (state === \"failed\") {\n throw new Error(\"Farm production runtime failed to start\");\n }\n\n startPromise = Promise.resolve()\n .then(() => options.start?.())\n .then(\n () => {\n if (state === \"starting\") state = \"ready\";\n },\n (error) => {\n state = \"failed\";\n throw error;\n },\n );\n return startPromise;\n };\n\n const beginDrain = (_reason = \"production-server-draining\") => {\n if (state === \"closed\" || state === \"failed\") return;\n state = \"draining\";\n };\n\n const waitForIdle = async (\n timeoutMs = options.server.gracefulShutdownTimeout,\n ): Promise<boolean> => {\n if (activeRequests === 0) return true;\n\n return await new Promise<boolean>((resolve) => {\n let settled = false;\n const finish = (drained: boolean) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n idleWaiters.delete(onIdle);\n resolve(drained);\n };\n const onIdle = () => finish(true);\n const timeout = setTimeout(() => finish(false), timeoutMs);\n timeout.unref?.();\n idleWaiters.add(onIdle);\n });\n };\n\n const close = async (reason = \"production-server-closed\") => {\n if (closePromise) return closePromise;\n beginDrain(reason);\n closePromise = Promise.resolve()\n .then(() => options.close?.(reason))\n .then(\n () => {\n state = \"closed\";\n },\n (error) => {\n state = \"closed\";\n throw error;\n },\n );\n return closePromise;\n };\n\n const handleHealthRequest = async (request: Request): Promise<Response | null> => {\n const health = options.server.health;\n if (!health.enabled) return null;\n\n const pathname = new URL(request.url).pathname.replace(/\\/+$/, \"\") || \"/\";\n const isLiveness = pathname === health.livenessPath;\n const isReadiness = pathname === health.readinessPath;\n if (!isLiveness && !isReadiness) return null;\n\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return new Response(null, {\n status: 405,\n headers: createHealthHeaders({ allow: \"GET, HEAD\" }),\n });\n }\n\n if (isReadiness && state === \"starting\") {\n try {\n await start();\n } catch {\n // The readiness response below intentionally does not expose startup details.\n }\n }\n\n const healthy = isLiveness ? state !== \"failed\" && state !== \"closed\" : state === \"ready\";\n const body =\n request.method === \"HEAD\" ? null : JSON.stringify({ status: healthy ? \"ok\" : \"unavailable\" });\n return new Response(body, {\n status: healthy ? 200 : 503,\n headers: createHealthHeaders(healthy ? undefined : { retryAfter: \"1\" }),\n });\n };\n\n const runRequest = async (\n handler: () => Response | Promise<Response>,\n context: FarmResponseCompletionContext = {},\n ): Promise<Response> => {\n if (state === \"draining\" || state === \"closed\") return createDrainingResponse();\n await start();\n if (state !== \"ready\") return createDrainingResponse();\n\n activeRequests++;\n let finished = false;\n const finish = () => {\n if (finished) return;\n finished = true;\n activeRequests--;\n notifyIdle();\n };\n\n try {\n const response = await handler();\n return trackResponseCompletion(response, finish, context.onResponseFinished);\n } catch (error) {\n finish();\n throw error;\n }\n };\n\n return {\n get state() {\n return state;\n },\n get activeRequests() {\n return activeRequests;\n },\n start,\n beginDrain,\n waitForIdle,\n close,\n handleHealthRequest,\n runRequest,\n };\n}\n\nfunction createHealthHeaders(options: { allow?: string; retryAfter?: string } = {}): Headers {\n const headers = new Headers({\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-content-type-options\": \"nosniff\",\n });\n if (options.allow) headers.set(\"allow\", options.allow);\n if (options.retryAfter) headers.set(\"retry-after\", options.retryAfter);\n return headers;\n}\n\nfunction createDrainingResponse(): Response {\n return new Response(\"Service Unavailable\", {\n status: 503,\n headers: {\n \"cache-control\": \"no-store\",\n connection: \"close\",\n \"content-type\": \"text/plain; charset=utf-8\",\n \"retry-after\": \"1\",\n \"x-content-type-options\": \"nosniff\",\n },\n });\n}\n\nfunction trackResponseCompletion(\n response: Response,\n finish: () => void,\n onResponseFinished?: (callback: () => void) => void,\n): Response {\n if (onResponseFinished) {\n try {\n onResponseFinished(finish);\n return response;\n } catch {\n // Fall through to Web Stream tracking when an adapter rejects registration.\n }\n }\n\n if (!response.body || response.bodyUsed || response.body.locked) {\n finish();\n return response;\n }\n\n const reader = response.body.getReader();\n const body = new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const result = await reader.read();\n if (result.done) {\n finish();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n finish();\n controller.error(error);\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n finish();\n }\n },\n });\n\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n","export { _runWithAfterRequest } from \"../after\";\nexport {\n bufferFarmRequestBody,\n createFarmRequestBodyErrorResponse,\n resolveFarmServerConfig,\n} from \"../server-http\";\nexport { createFarmProductionLifecycle } from \"../production-lifecycle\";\nexport { _runWithCurrentRequest, getCurrentRequest } from \"../server/request\";\nexport {\n configureFarmCache,\n createFarmCacheKey,\n getFarmDataCache,\n normalizeRevalidatePath,\n} from \"../cache\";\nexport { createFarmLocaleCookie, getFarmLocaleVaryHeaders } from \"../i18n/resolver\";\nexport {\n localizeFarmHref,\n localizeFarmPathname,\n stripFarmLocaleFromPathname,\n} from \"../i18n/routing\";\nexport { addMetadataImageReference, mergeMetadata, renderMetadataHead } from \"../metadata\";\nexport { createFarmMetadataRouteResponse } from \"../metadata-route\";\nexport {\n applyProductionMiddlewareHeaders,\n createProductionMiddlewareRunner,\n} from \"../middleware/production-runtime\";\nexport { _runWithMiddlewareContext, _runWithMiddlewareData } from \"../middleware/server\";\nexport {\n getFarmRedirectError,\n isFarmNotFoundError,\n isFarmRedirectError,\n} from \"../navigation-errors\";\nexport {\n configureFarmObservability,\n emitFarmEvent,\n runWithFarmRequestSpan,\n} from \"../observability\";\nexport {\n createFarmInstrumentationLifecycle,\n resolveFarmInstrumentationRuntime,\n} from \"../instrumentation-runtime\";\nexport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nexport { _setDefaultFarmThemeConfig, getTheme } from \"../theme/server\";\nexport { applyFarmThemeDocument, createFarmThemeDocumentParts } from \"../theme/server-runtime\";\nexport {\n createDefaultErrorMarkup,\n getDefaultErrorStatusText,\n resolveDefaultErrorStatus,\n} from \"../components/error-page\";\nexport {\n manageFarmDocumentPreloads,\n manageFarmHtmlPreloads,\n manageFarmLinkHeaderPreloads,\n reportFarmPreloadWarnings,\n} from \"../preload\";\nexport { searchParamsToObject } from \"../search-params\";\n\nexport function appendFarmLinkHeader(headers: Headers, value: string): void {\n const current = headers.get(\"Link\");\n if (!current) {\n headers.set(\"Link\", value);\n return;\n }\n if (current !== value && !current.endsWith(`, ${value}`)) {\n headers.set(\"Link\", `${current}, ${value}`);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/production-lifecycle.ts","../../src/nitro/production-runtime.ts"],"sourcesContent":["import type { ResolvedFarmServerConfig } from \"./server-http\";\n\nexport type FarmProductionLifecycleState = \"starting\" | \"ready\" | \"draining\" | \"failed\" | \"closed\";\n\nexport interface FarmProductionLifecycleOptions {\n server: ResolvedFarmServerConfig;\n start?: () => void | Promise<void>;\n close?: (reason: string) => void | Promise<void>;\n}\n\nexport interface FarmResponseCompletionContext {\n onResponseFinished?: (callback: () => void) => void;\n}\n\nexport interface FarmProductionLifecycle {\n readonly state: FarmProductionLifecycleState;\n readonly activeRequests: number;\n start(): Promise<void>;\n beginDrain(reason?: string): void;\n waitForIdle(timeoutMs?: number): Promise<boolean>;\n close(reason?: string): Promise<void>;\n handleHealthRequest(request: Request): Promise<Response | null>;\n runRequest(\n handler: () => Response | Promise<Response>,\n context?: FarmResponseCompletionContext,\n ): Promise<Response>;\n}\n\nexport function createFarmProductionLifecycle(\n options: FarmProductionLifecycleOptions,\n): FarmProductionLifecycle {\n let state: FarmProductionLifecycleState = \"starting\";\n let activeRequests = 0;\n let startPromise: Promise<void> | undefined;\n let closePromise: Promise<void> | undefined;\n const idleWaiters = new Set<() => void>();\n\n const notifyIdle = () => {\n if (activeRequests !== 0) return;\n for (const resolve of idleWaiters) resolve();\n idleWaiters.clear();\n };\n\n const start = async () => {\n if (state === \"ready\") return;\n if (startPromise) return startPromise;\n if (state === \"draining\" || state === \"closed\") {\n throw new Error(\"Farm production runtime is shutting down\");\n }\n if (state === \"failed\") {\n throw new Error(\"Farm production runtime failed to start\");\n }\n\n startPromise = Promise.resolve()\n .then(() => options.start?.())\n .then(\n () => {\n if (state === \"starting\") state = \"ready\";\n },\n (error) => {\n state = \"failed\";\n throw error;\n },\n );\n return startPromise;\n };\n\n const beginDrain = (_reason = \"production-server-draining\") => {\n if (state === \"closed\" || state === \"failed\") return;\n state = \"draining\";\n };\n\n const waitForIdle = async (\n timeoutMs = options.server.gracefulShutdownTimeout,\n ): Promise<boolean> => {\n if (activeRequests === 0) return true;\n\n return await new Promise<boolean>((resolve) => {\n let settled = false;\n const finish = (drained: boolean) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n idleWaiters.delete(onIdle);\n resolve(drained);\n };\n const onIdle = () => finish(true);\n const timeout = setTimeout(() => finish(false), timeoutMs);\n timeout.unref?.();\n idleWaiters.add(onIdle);\n });\n };\n\n const close = async (reason = \"production-server-closed\") => {\n if (closePromise) return closePromise;\n beginDrain(reason);\n closePromise = Promise.resolve()\n .then(() => options.close?.(reason))\n .then(\n () => {\n state = \"closed\";\n },\n (error) => {\n state = \"closed\";\n throw error;\n },\n );\n return closePromise;\n };\n\n const handleHealthRequest = async (request: Request): Promise<Response | null> => {\n const health = options.server.health;\n if (!health.enabled) return null;\n\n const pathname = new URL(request.url).pathname.replace(/\\/+$/, \"\") || \"/\";\n const isLiveness = pathname === health.livenessPath;\n const isReadiness = pathname === health.readinessPath;\n if (!isLiveness && !isReadiness) return null;\n\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return new Response(null, {\n status: 405,\n headers: createHealthHeaders({ allow: \"GET, HEAD\" }),\n });\n }\n\n if (isReadiness && state === \"starting\") {\n try {\n await start();\n } catch {\n // The readiness response below intentionally does not expose startup details.\n }\n }\n\n const healthy = isLiveness ? state !== \"failed\" && state !== \"closed\" : state === \"ready\";\n const body =\n request.method === \"HEAD\" ? null : JSON.stringify({ status: healthy ? \"ok\" : \"unavailable\" });\n return new Response(body, {\n status: healthy ? 200 : 503,\n headers: createHealthHeaders(healthy ? undefined : { retryAfter: \"1\" }),\n });\n };\n\n const runRequest = async (\n handler: () => Response | Promise<Response>,\n context: FarmResponseCompletionContext = {},\n ): Promise<Response> => {\n if (state === \"draining\" || state === \"closed\") return createDrainingResponse();\n await start();\n if (state !== \"ready\") return createDrainingResponse();\n\n activeRequests++;\n let finished = false;\n const finish = () => {\n if (finished) return;\n finished = true;\n activeRequests--;\n notifyIdle();\n };\n\n try {\n const response = await handler();\n return trackResponseCompletion(response, finish, context.onResponseFinished);\n } catch (error) {\n finish();\n throw error;\n }\n };\n\n return {\n get state() {\n return state;\n },\n get activeRequests() {\n return activeRequests;\n },\n start,\n beginDrain,\n waitForIdle,\n close,\n handleHealthRequest,\n runRequest,\n };\n}\n\nfunction createHealthHeaders(options: { allow?: string; retryAfter?: string } = {}): Headers {\n const headers = new Headers({\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-content-type-options\": \"nosniff\",\n });\n if (options.allow) headers.set(\"allow\", options.allow);\n if (options.retryAfter) headers.set(\"retry-after\", options.retryAfter);\n return headers;\n}\n\nfunction createDrainingResponse(): Response {\n return new Response(\"Service Unavailable\", {\n status: 503,\n headers: {\n \"cache-control\": \"no-store\",\n connection: \"close\",\n \"content-type\": \"text/plain; charset=utf-8\",\n \"retry-after\": \"1\",\n \"x-content-type-options\": \"nosniff\",\n },\n });\n}\n\nfunction trackResponseCompletion(\n response: Response,\n finish: () => void,\n onResponseFinished?: (callback: () => void) => void,\n): Response {\n if (onResponseFinished) {\n try {\n onResponseFinished(finish);\n return response;\n } catch {\n // Fall through to Web Stream tracking when an adapter rejects registration.\n }\n }\n\n if (!response.body || response.bodyUsed || response.body.locked) {\n finish();\n return response;\n }\n\n const reader = response.body.getReader();\n const body = new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const result = await reader.read();\n if (result.done) {\n finish();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n finish();\n controller.error(error);\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n finish();\n }\n },\n });\n\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n","export { _runWithAfterRequest } from \"../after\";\nexport {\n bufferFarmRequestBody,\n createFarmRequestBodyErrorResponse,\n readFarmRequestBody,\n resolveFarmServerConfig,\n} from \"../server-http\";\nexport { createFarmProductionLifecycle } from \"../production-lifecycle\";\nexport { _runWithCurrentRequest, getCurrentRequest } from \"../server/request\";\nexport {\n configureFarmCache,\n createFarmCacheKey,\n getFarmDataCache,\n normalizeRevalidatePath,\n} from \"../cache\";\nexport { createFarmLocaleCookie, getFarmLocaleVaryHeaders } from \"../i18n/resolver\";\nexport {\n localizeFarmHref,\n localizeFarmPathname,\n stripFarmLocaleFromPathname,\n} from \"../i18n/routing\";\nexport { addMetadataImageReference, mergeMetadata, renderMetadataHead } from \"../metadata\";\nexport { createFarmMetadataRouteResponse } from \"../metadata-route\";\nexport {\n applyProductionMiddlewareHeaders,\n createProductionMiddlewareRunner,\n} from \"../middleware/production-runtime\";\nexport { _runWithMiddlewareContext, _runWithMiddlewareData } from \"../middleware/server\";\nexport {\n getFarmRedirectError,\n isFarmNotFoundError,\n isFarmRedirectError,\n} from \"../navigation-errors\";\nexport {\n configureFarmObservability,\n emitFarmEvent,\n runWithFarmRequestSpan,\n} from \"../observability\";\nexport {\n createFarmInstrumentationLifecycle,\n resolveFarmInstrumentationRuntime,\n} from \"../instrumentation-runtime\";\nexport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nexport { _setDefaultFarmThemeConfig, getTheme } from \"../theme/server\";\nexport { applyFarmThemeDocument, createFarmThemeDocumentParts } from \"../theme/server-runtime\";\nexport {\n createDefaultErrorMarkup,\n getDefaultErrorStatusText,\n resolveDefaultErrorStatus,\n} from \"../components/error-page\";\nexport {\n manageFarmDocumentPreloads,\n manageFarmHtmlPreloads,\n manageFarmLinkHeaderPreloads,\n reportFarmPreloadWarnings,\n} from \"../preload\";\nexport { searchParamsToObject } from \"../search-params\";\n\nexport function appendFarmLinkHeader(headers: Headers, value: string): void {\n const current = headers.get(\"Link\");\n if (!current) {\n headers.set(\"Link\", value);\n return;\n }\n if (current !== value && !current.endsWith(`, ${value}`)) {\n headers.set(\"Link\", `${current}, ${value}`);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { x as Metadata } from './client-plugins-C-PSOtea.js';
1
+ import { x as Metadata } from './client-plugins-DvLyPAe2.js';
2
2
 
3
3
  type MetadataImageKind = "opengraph" | "twitter";
4
4
  interface FarmMetadataImageReference {
@@ -1,4 +1,4 @@
1
- import { x as Metadata } from './client-plugins-CkZgBOOM.mjs';
1
+ import { x as Metadata } from './client-plugins-D1wDIJjS.mjs';
2
2
 
3
3
  type MetadataImageKind = "opengraph" | "twitter";
4
4
  interface FarmMetadataImageReference {
@@ -426,7 +426,7 @@ function parseCookies(cookieHeader) {
426
426
  __name(parseCookies, "parseCookies");
427
427
  function serializeCookie(name, value, options = {}) {
428
428
  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
429
- if (options.maxAge) {
429
+ if (options.maxAge != null) {
430
430
  cookie += `; Max-Age=${options.maxAge}`;
431
431
  }
432
432
  if (options.expires) {
@@ -489,13 +489,6 @@ function createContext(req, res, viteServer, parent) {
489
489
  const data = parent?.data ? new Map(parent.data) : /* @__PURE__ */ new Map();
490
490
  const locals = parent?.locals ? new Map(parent.locals) : /* @__PURE__ */ new Map();
491
491
  const cookies = new CookieJarImpl(req, res);
492
- Object.entries(req.headers).forEach(([key, value]) => {
493
- if (typeof value === "string") {
494
- headers.set(key, value);
495
- } else if (Array.isArray(value)) {
496
- headers.set(key, value.join(", "));
497
- }
498
- });
499
492
  if (parent?.headers) {
500
493
  for (const [key, value] of Object.entries(parent.headers)) {
501
494
  headers.set(key, value);
@@ -1811,7 +1804,7 @@ function parseCookies2(cookieHeader) {
1811
1804
  __name(parseCookies2, "parseCookies");
1812
1805
  function serializeCookie2(name, value, options = {}) {
1813
1806
  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
1814
- if (options.maxAge) cookie += `; Max-Age=${options.maxAge}`;
1807
+ if (options.maxAge != null) cookie += `; Max-Age=${options.maxAge}`;
1815
1808
  if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
1816
1809
  cookie += `; Path=${options.path || "/"}`;
1817
1810
  if (options.domain) cookie += `; Domain=${options.domain}`;