@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.
- package/dist/agent-runtime.cjs +2 -0
- package/dist/agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime.d.mts +2 -2
- package/dist/agent-runtime.d.ts +2 -2
- package/dist/agent-runtime.mjs +1 -1
- package/dist/{app-CXD_2F0_.d.ts → app-BNcok8cp.d.ts} +4 -4
- package/dist/{app-CDOe7z8C.d.mts → app-J5WfOI54.d.mts} +4 -4
- package/dist/app-markdown.d.mts +3 -3
- package/dist/app-markdown.d.ts +3 -3
- package/dist/{chunk-72PXP3EO.mjs → chunk-2O67SLNB.mjs} +2 -2
- package/dist/{chunk-HSHHUDHL.mjs → chunk-4R7TBTJL.mjs} +2 -2
- package/dist/{chunk-6HUGGEFE.mjs → chunk-5TLXU6MG.mjs} +2 -2
- package/dist/chunk-5TLXU6MG.mjs.map +1 -0
- package/dist/{chunk-4XQQVESH.mjs → chunk-ECLBGYGZ.mjs} +2 -2
- package/dist/{chunk-4N2Y3PLJ.mjs → chunk-H5D6FDSG.mjs} +6 -6
- package/dist/{chunk-CYEPGSVA.mjs → chunk-Q7ZTEADY.mjs} +2 -2
- package/dist/{chunk-CYEPGSVA.mjs.map → chunk-Q7ZTEADY.mjs.map} +1 -1
- package/dist/{chunk-TAGCUUUE.mjs → chunk-R6UV2YLL.mjs} +5 -5
- package/dist/{chunk-PFMBMZP7.mjs → chunk-RUCTQDNI.mjs} +2 -2
- package/dist/{chunk-O7JLZXUV.mjs → chunk-S35F2MY7.mjs} +2 -9
- package/dist/chunk-S35F2MY7.mjs.map +1 -0
- package/dist/{chunk-GPGQCUNC.mjs → chunk-VQYZ6JT6.mjs} +2 -2
- package/dist/{chunk-GPGQCUNC.mjs.map → chunk-VQYZ6JT6.mjs.map} +1 -1
- package/dist/{chunk-SDCCR55N.mjs → chunk-VSDJ4EX2.mjs} +2 -2
- package/dist/{chunk-VEMZQ66A.mjs → chunk-YHYS4POL.mjs} +3 -1
- package/dist/{chunk-VEMZQ66A.mjs.map → chunk-YHYS4POL.mjs.map} +1 -1
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-plugins-CkZgBOOM.d.mts → client-plugins-D1wDIJjS.d.mts} +1 -1
- package/dist/{client-plugins-C-PSOtea.d.ts → client-plugins-DvLyPAe2.d.ts} +1 -1
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.cjs.map +1 -1
- package/dist/client-plugins.d.mts +2 -2
- package/dist/client-plugins.d.ts +2 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +1 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +2 -2
- package/dist/config.d.mts +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/{devtools-2FEBZ7RN.mjs → devtools-5BSQV6GL.mjs} +3 -3
- package/dist/docs.cjs +2 -0
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +3 -3
- package/dist/index.cjs +6 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.mjs +12 -12
- package/dist/integrations.cjs +2 -0
- package/dist/integrations.cjs.map +1 -1
- package/dist/integrations.d.mts +2 -2
- package/dist/integrations.d.ts +2 -2
- package/dist/integrations.mjs +1 -1
- package/dist/internal/build-runtime.cjs +4 -9
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.d.mts +4 -4
- package/dist/internal/build-runtime.d.ts +4 -4
- package/dist/internal/build-runtime.mjs +8 -8
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.cjs.map +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +2 -0
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.d.mts +3 -3
- package/dist/internal/config-runtime.d.ts +3 -3
- package/dist/internal/config-runtime.mjs +2 -2
- package/dist/internal/production-runtime.cjs +3 -1
- package/dist/internal/production-runtime.cjs.map +1 -1
- package/dist/internal/production-runtime.d.mts +7 -7
- package/dist/internal/production-runtime.d.ts +7 -7
- package/dist/internal/production-runtime.mjs +3 -1
- package/dist/internal/production-runtime.mjs.map +1 -1
- package/dist/{metadata-route-DsGastBa.d.ts → metadata-route-BqEz7r1K.d.ts} +1 -1
- package/dist/{metadata-route-Cp4wPM4w.d.mts → metadata-route-DdVou1J2.d.mts} +1 -1
- package/dist/middleware.cjs +2 -9
- package/dist/middleware.cjs.map +1 -1
- package/dist/middleware.d.mts +4 -4
- package/dist/middleware.d.ts +4 -4
- package/dist/middleware.mjs +3 -3
- package/dist/plugin.cjs +4 -9
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.mts +2 -2
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.mjs +5 -5
- package/dist/{production-runtime-BZFqIn8J.d.mts → production-runtime-8nfBJO3d.d.mts} +2 -2
- package/dist/{production-runtime-DSqh4YXr.d.ts → production-runtime-BqDGTzlt.d.ts} +2 -2
- package/dist/{render-plan-fCFoTM4r.d.ts → render-plan-31JfM9Wy.d.ts} +1 -1
- package/dist/{render-plan-uBR98RLY.d.mts → render-plan-DpTGGrJg.d.mts} +1 -1
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/{request-B165X1nu.d.mts → request-BKx8aFMD.d.mts} +1 -1
- package/dist/{request-CLZ9Aa86.d.ts → request-CdPtgIYB.d.ts} +1 -1
- package/dist/request.d.mts +3 -3
- package/dist/request.d.ts +3 -3
- package/dist/routes.d.mts +2 -2
- package/dist/routes.d.ts +2 -2
- package/dist/server-plugins.d.mts +3 -3
- package/dist/server-plugins.d.ts +3 -3
- package/dist/server-query.cjs +1 -1
- package/dist/server-query.cjs.map +1 -1
- package/dist/server-query.mjs +1 -1
- package/dist/server.cjs +5 -10
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +8 -8
- package/dist/server.d.ts +8 -8
- package/dist/server.mjs +7 -7
- package/dist/{spa-router-EgElBa3J.d.mts → spa-router-BHufQUlC.d.mts} +1 -1
- package/dist/{spa-router-cdXv8ZrK.d.ts → spa-router-Cd233yg5.d.ts} +1 -1
- package/dist/testing.d.mts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/{utils-Cf5JwlaG.d.ts → utils-Csf77Qu9.d.ts} +1 -1
- package/dist/{utils-d_Dur6jw.d.mts → utils-PJft6eJm.d.mts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +4 -9
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.mts +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.mjs +4 -4
- package/dist/{workflows-CusFV6mn.d.mts → workflows-CkDu_SeN.d.mts} +2 -1
- package/dist/{workflows-CusFV6mn.d.ts → workflows-CkDu_SeN.d.ts} +2 -1
- package/dist/workflows.d.mts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-6HUGGEFE.mjs.map +0 -1
- package/dist/chunk-O7JLZXUV.mjs.map +0 -1
- /package/dist/{chunk-72PXP3EO.mjs.map → chunk-2O67SLNB.mjs.map} +0 -0
- /package/dist/{chunk-HSHHUDHL.mjs.map → chunk-4R7TBTJL.mjs.map} +0 -0
- /package/dist/{chunk-4XQQVESH.mjs.map → chunk-ECLBGYGZ.mjs.map} +0 -0
- /package/dist/{chunk-4N2Y3PLJ.mjs.map → chunk-H5D6FDSG.mjs.map} +0 -0
- /package/dist/{chunk-TAGCUUUE.mjs.map → chunk-R6UV2YLL.mjs.map} +0 -0
- /package/dist/{chunk-PFMBMZP7.mjs.map → chunk-RUCTQDNI.mjs.map} +0 -0
- /package/dist/{chunk-SDCCR55N.mjs.map → chunk-VSDJ4EX2.mjs.map} +0 -0
- /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-
|
|
3
|
-
export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as resolveFarmServerConfig } from '../workflows-
|
|
4
|
-
export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-
|
|
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-
|
|
9
|
-
export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-
|
|
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-
|
|
14
|
-
export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-
|
|
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-
|
|
3
|
-
export { b as bufferFarmRequestBody, c as createFarmRequestBodyErrorResponse, r as resolveFarmServerConfig } from '../workflows-
|
|
4
|
-
export { _ as _runWithCurrentRequest, g as getCurrentRequest } from '../request-
|
|
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-
|
|
9
|
-
export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-
|
|
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-
|
|
14
|
-
export { af as manageFarmDocumentPreloads, ag as manageFarmHtmlPreloads, ah as manageFarmLinkHeaderPreloads, ai as reportFarmPreloadWarnings } from '../client-plugins-
|
|
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-
|
|
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":[]}
|
package/dist/middleware.cjs
CHANGED
|
@@ -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}`;
|