@farm.js/core 0.1.0-beta.21 → 0.1.0-beta.23
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/after.d.mts +25 -0
- package/dist/after.d.ts +25 -0
- package/dist/agent-runtime.d.mts +97 -0
- package/dist/agent-runtime.d.ts +97 -0
- package/dist/api/route-manager.d.mts +68 -0
- package/dist/api/route-manager.d.ts +68 -0
- package/dist/api/runtime.d.mts +3 -0
- package/dist/api/runtime.d.ts +3 -0
- package/dist/api.cjs +22 -19
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.mts +50 -0
- package/dist/api.d.ts +50 -0
- package/dist/api.mjs +2 -1
- package/dist/app-CTFnOJaI.d.ts +308 -0
- package/dist/app-DA6ospIq.d.mts +308 -0
- package/dist/app-markdown.d.mts +25 -0
- package/dist/app-markdown.d.ts +25 -0
- package/dist/cache.d.mts +192 -0
- package/dist/cache.d.ts +192 -0
- package/dist/{chunk-MIUW47JX.mjs → chunk-2PEJGY5V.mjs} +15 -20
- package/dist/chunk-2PEJGY5V.mjs.map +1 -0
- package/dist/{chunk-RIXKJPGI.mjs → chunk-42325TLU.mjs} +2 -2
- package/dist/chunk-4IVNW5QD.mjs +82 -0
- package/dist/chunk-4IVNW5QD.mjs.map +1 -0
- package/dist/{chunk-I3UWA2P2.mjs → chunk-5NOVWCFL.mjs} +2 -2
- package/dist/chunk-5NOVWCFL.mjs.map +1 -0
- package/dist/chunk-D42BNPZH.mjs +79 -0
- package/dist/chunk-D42BNPZH.mjs.map +1 -0
- package/dist/{chunk-LLPN5SEZ.mjs → chunk-DVPRBMU2.mjs} +2 -2
- package/dist/{chunk-VIC7NJ77.mjs → chunk-FJGTYLCO.mjs} +67 -20
- package/dist/chunk-FJGTYLCO.mjs.map +1 -0
- package/dist/chunk-GIELMNBG.mjs +15 -0
- package/dist/chunk-GIELMNBG.mjs.map +1 -0
- package/dist/chunk-GQVQESLY.mjs +25 -0
- package/dist/chunk-GQVQESLY.mjs.map +1 -0
- package/dist/chunk-H53KVQUU.mjs +48 -0
- package/dist/chunk-H53KVQUU.mjs.map +1 -0
- package/dist/chunk-HCGQYYHI.mjs +1 -0
- package/dist/chunk-HCGQYYHI.mjs.map +1 -0
- package/dist/{chunk-4EATUJFO.mjs → chunk-ICTGDDV4.mjs} +20 -22
- package/dist/chunk-ICTGDDV4.mjs.map +1 -0
- package/dist/{chunk-UCYWGN2P.mjs → chunk-OHNSROHS.mjs} +1 -1
- package/dist/{chunk-FRPWCMMG.mjs → chunk-SBWOTAX4.mjs} +63 -2
- package/dist/chunk-SBWOTAX4.mjs.map +1 -0
- package/dist/{chunk-FKKM7HVF.mjs → chunk-TX54PXAJ.mjs} +109 -58
- package/dist/chunk-TX54PXAJ.mjs.map +1 -0
- package/dist/{chunk-CEVMYGDL.mjs → chunk-YD5IRKVS.mjs} +13 -9
- package/dist/chunk-YD5IRKVS.mjs.map +1 -0
- package/dist/chunk-recovery-lnQFzcQP.d.mts +26 -0
- package/dist/chunk-recovery-lnQFzcQP.d.ts +26 -0
- package/dist/client-BT1mFQas.d.mts +447 -0
- package/dist/client-Nn0q4eO4.d.ts +447 -0
- package/dist/client-cache-CIlyBlmx.d.ts +6 -0
- package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
- package/dist/client-plugins-CCilIb_G.d.mts +2092 -0
- package/dist/client-plugins-DuuleQKk.d.ts +2092 -0
- package/dist/client-plugins.d.mts +25 -0
- package/dist/client-plugins.d.ts +25 -0
- package/dist/client.cjs +122 -35
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.mts +454 -0
- package/dist/client.d.ts +454 -0
- package/dist/client.mjs +13 -2
- package/dist/config.d.mts +32 -0
- package/dist/config.d.ts +32 -0
- package/dist/cron.d.mts +78 -0
- package/dist/cron.d.ts +78 -0
- package/dist/deferred.d.mts +42 -0
- package/dist/deferred.d.ts +42 -0
- package/dist/deployment.d.mts +36 -0
- package/dist/deployment.d.ts +36 -0
- package/dist/{devtools-52FYXIEK.mjs → devtools-326RBQCN.mjs} +7 -6
- package/dist/{devtools-52FYXIEK.mjs.map → devtools-326RBQCN.mjs.map} +1 -1
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.d.mts +80 -0
- package/dist/docs.d.ts +80 -0
- package/dist/docs.mjs +6 -5
- package/dist/env-types.d.mts +12 -0
- package/dist/env-types.d.ts +12 -0
- package/dist/env.d.mts +45 -0
- package/dist/env.d.ts +45 -0
- package/dist/environment/vite.d.mts +22 -0
- package/dist/environment/vite.d.ts +22 -0
- package/dist/environment.d.mts +18 -0
- package/dist/environment.d.ts +18 -0
- package/dist/font.d.mts +95 -0
- package/dist/font.d.ts +95 -0
- package/dist/headers.d.mts +22 -0
- package/dist/headers.d.ts +22 -0
- package/dist/i18n/client.d.mts +32 -0
- package/dist/i18n/client.d.ts +32 -0
- package/dist/i18n/index.d.mts +20 -0
- package/dist/i18n/index.d.ts +20 -0
- package/dist/i18n/server.d.mts +30 -0
- package/dist/i18n/server.d.ts +30 -0
- package/dist/image/server.d.mts +37 -0
- package/dist/image/server.d.ts +37 -0
- package/dist/image/sharp.d.mts +7 -0
- package/dist/image/sharp.d.ts +7 -0
- package/dist/image-config-Duob7wER.d.mts +50 -0
- package/dist/image-config-Duob7wER.d.ts +50 -0
- package/dist/image.d.mts +39 -0
- package/dist/image.d.ts +39 -0
- package/dist/index.cjs +496 -123
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +480 -0
- package/dist/index.d.ts +480 -0
- package/dist/index.mjs +70 -52
- package/dist/index.mjs.map +1 -1
- package/dist/integration-api-CHT2OKAf.d.mts +93 -0
- package/dist/integration-api-CHT2OKAf.d.ts +93 -0
- package/dist/integrations.d.mts +25 -0
- package/dist/integrations.d.ts +25 -0
- package/dist/internal/build-runtime.cjs +386 -83
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.d.mts +42 -0
- package/dist/internal/build-runtime.d.ts +42 -0
- package/dist/internal/build-runtime.mjs +17 -13
- package/dist/internal/client-runtime.d.mts +17 -0
- package/dist/internal/client-runtime.d.ts +17 -0
- package/dist/internal/config-runtime.cjs +41 -0
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.d.mts +42 -0
- package/dist/internal/config-runtime.d.ts +42 -0
- package/dist/internal/config-runtime.mjs +5 -4
- package/dist/internal/metadata-image-runtime.d.mts +25 -0
- package/dist/internal/metadata-image-runtime.d.ts +25 -0
- package/dist/internal/production-node-env.d.mts +12 -0
- package/dist/internal/production-node-env.d.ts +12 -0
- package/dist/internal/production-runtime.cjs +178 -0
- package/dist/internal/production-runtime.cjs.map +1 -1
- package/dist/internal/production-runtime.d.mts +80 -0
- package/dist/internal/production-runtime.d.ts +80 -0
- package/dist/internal/production-runtime.mjs +13 -1
- package/dist/internal/production-runtime.mjs.map +1 -1
- package/dist/island-CfGru1MO.d.mts +9 -0
- package/dist/island-CfGru1MO.d.ts +9 -0
- package/dist/markdown.d.mts +60 -0
- package/dist/markdown.d.ts +60 -0
- package/dist/metadata-DyPRG0wX.d.ts +22 -0
- package/dist/metadata-_GHcAySx.d.mts +22 -0
- package/dist/middleware.cjs +17 -17
- package/dist/middleware.cjs.map +1 -1
- package/dist/middleware.d.mts +172 -0
- package/dist/middleware.d.ts +172 -0
- package/dist/middleware.mjs +3 -2
- package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
- package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
- package/dist/navigation.d.mts +14 -0
- package/dist/navigation.d.ts +14 -0
- package/dist/observability.d.mts +335 -0
- package/dist/observability.d.ts +335 -0
- package/dist/params-BALtrRim.d.ts +15 -0
- package/dist/params-ry-lxqmy.d.mts +15 -0
- package/dist/plugin-BJDf43dc.d.mts +165 -0
- package/dist/plugin-BJDf43dc.d.ts +165 -0
- package/dist/plugin.cjs +261 -62
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.mts +25 -0
- package/dist/plugin.d.ts +25 -0
- package/dist/plugin.mjs +13 -9
- package/dist/production-runtime-C4cO3esK.d.mts +81 -0
- package/dist/production-runtime-DrEy8kBO.d.ts +81 -0
- package/dist/query/client.d.mts +61 -0
- package/dist/query/client.d.ts +61 -0
- package/dist/query/index.d.mts +90 -0
- package/dist/query/index.d.ts +90 -0
- package/dist/query/parsers.d.mts +25 -0
- package/dist/query/parsers.d.ts +25 -0
- package/dist/query/server.d.mts +55 -0
- package/dist/query/server.d.ts +55 -0
- package/dist/request-B2PpOxYK.d.mts +6 -0
- package/dist/request-D40lt6aN.d.ts +6 -0
- package/dist/request.d.mts +26 -0
- package/dist/request.d.ts +26 -0
- package/dist/resolver-DJqjLMg_.d.mts +14 -0
- package/dist/resolver-IH4RmPEl.d.ts +14 -0
- package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
- package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
- package/dist/router.d.mts +36 -0
- package/dist/router.d.ts +36 -0
- package/dist/routes.d.mts +227 -0
- package/dist/routes.d.ts +227 -0
- package/dist/runtime-Bpp-c28k.d.ts +231 -0
- package/dist/runtime-Cxpq6xZN.d.mts +27 -0
- package/dist/runtime-Q3u74Nbq.d.mts +231 -0
- package/dist/runtime-bv63eUiO.d.ts +27 -0
- package/dist/server-action-security.d.mts +45 -0
- package/dist/server-action-security.d.ts +45 -0
- package/dist/server-fn-client.d.mts +33 -0
- package/dist/server-fn-client.d.ts +33 -0
- package/dist/server-fn-error-DDh14a0V.d.mts +26 -0
- package/dist/server-fn-error-DDh14a0V.d.ts +26 -0
- package/dist/server-fn.d.mts +121 -0
- package/dist/server-fn.d.ts +121 -0
- package/dist/server-plugins.d.mts +58 -0
- package/dist/server-plugins.d.ts +58 -0
- package/dist/server-query-client.d.mts +51 -0
- package/dist/server-query-client.d.ts +51 -0
- package/dist/server-query.d.mts +37 -0
- package/dist/server-query.d.ts +37 -0
- package/dist/server.cjs +285 -85
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +53 -0
- package/dist/server.d.ts +53 -0
- package/dist/server.mjs +26 -31
- package/dist/server.mjs.map +1 -1
- package/dist/storage.d.mts +52 -0
- package/dist/storage.d.ts +52 -0
- package/dist/testing.d.mts +104 -0
- package/dist/testing.d.ts +104 -0
- package/dist/theme/client.cjs +115 -0
- package/dist/theme/client.cjs.map +1 -0
- package/dist/theme/client.d.mts +17 -0
- package/dist/theme/client.d.ts +17 -0
- package/dist/theme/client.mjs +16 -0
- package/dist/theme/client.mjs.map +1 -0
- package/dist/theme/index.cjs +71 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.d.mts +6 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.mjs +9 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/theme/server.cjs +191 -0
- package/dist/theme/server.cjs.map +1 -0
- package/dist/theme/server.d.mts +8 -0
- package/dist/theme/server.d.ts +8 -0
- package/dist/theme/server.mjs +18 -0
- package/dist/theme/server.mjs.map +1 -0
- package/dist/transport-BmbGTXA5.d.mts +49 -0
- package/dist/transport-BmbGTXA5.d.ts +49 -0
- package/dist/types-BMxWr97v.d.mts +81 -0
- package/dist/types-BMxWr97v.d.ts +81 -0
- package/dist/types-CsR8fpgF.d.mts +30 -0
- package/dist/types-CsR8fpgF.d.ts +30 -0
- package/dist/types-D1A6-XvH.d.mts +73 -0
- package/dist/types-D1A6-XvH.d.ts +73 -0
- package/dist/types-DTzm4TCl.d.mts +78 -0
- package/dist/types-DTzm4TCl.d.ts +78 -0
- package/dist/utils-3sQgfkya.d.ts +23 -0
- package/dist/utils-Bop7bly-.d.mts +23 -0
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.mts +3 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +285 -64
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.mts +25 -0
- package/dist/vite.d.ts +25 -0
- package/dist/vite.mjs +13 -9
- package/dist/workflows-CusFV6mn.d.mts +153 -0
- package/dist/workflows-CusFV6mn.d.ts +153 -0
- package/dist/workflows.d.mts +1 -0
- package/dist/workflows.d.ts +1 -0
- package/package.json +25 -1
- package/dist/chunk-4EATUJFO.mjs.map +0 -1
- package/dist/chunk-CEVMYGDL.mjs.map +0 -1
- package/dist/chunk-FKKM7HVF.mjs.map +0 -1
- package/dist/chunk-FRPWCMMG.mjs.map +0 -1
- package/dist/chunk-I3UWA2P2.mjs.map +0 -1
- package/dist/chunk-MIUW47JX.mjs.map +0 -1
- package/dist/chunk-VIC7NJ77.mjs.map +0 -1
- /package/dist/{chunk-RIXKJPGI.mjs.map → chunk-42325TLU.mjs.map} +0 -0
- /package/dist/{chunk-LLPN5SEZ.mjs.map → chunk-DVPRBMU2.mjs.map} +0 -0
- /package/dist/{chunk-UCYWGN2P.mjs.map → chunk-OHNSROHS.mjs.map} +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
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-B2PpOxYK.mjs';
|
|
5
|
+
export { configureFarmCache, createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from '../cache.mjs';
|
|
6
|
+
export { c as createFarmLocaleCookie, g as getFarmLocaleVaryHeaders } from '../resolver-DJqjLMg_.mjs';
|
|
7
|
+
export { localizeFarmHref, localizeFarmPathname, stripFarmLocaleFromPathname } from '../i18n/index.mjs';
|
|
8
|
+
export { a as addMetadataImageReference, m as mergeMetadata, r as renderMetadataHead } from '../metadata-_GHcAySx.mjs';
|
|
9
|
+
export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-C4cO3esK.mjs';
|
|
10
|
+
export { g as getFarmRedirectError, i as isFarmNotFoundError, a as isFarmRedirectError } from '../navigation-errors-Dvwpzaer.mjs';
|
|
11
|
+
export { configureFarmObservability, emitFarmEvent } from '../observability.mjs';
|
|
12
|
+
import { F as FarmConfig, e as FarmContextFactoryInput } from '../client-plugins-CCilIb_G.mjs';
|
|
13
|
+
export { a9 as manageFarmDocumentPreloads, aa as manageFarmHtmlPreloads, ab as manageFarmLinkHeaderPreloads, ac as reportFarmPreloadWarnings } from '../client-plugins-CCilIb_G.mjs';
|
|
14
|
+
export { _setDefaultFarmThemeConfig, getTheme } from '../theme/server.mjs';
|
|
15
|
+
import { F as FarmThemeRuntime, d as FarmThemeConfig, R as ResolvedFarmThemeConfig, b as FarmThemePreference } from '../types-CsR8fpgF.mjs';
|
|
16
|
+
import 'node:http';
|
|
17
|
+
import '../types-BMxWr97v.mjs';
|
|
18
|
+
import '../plugin-BJDf43dc.mjs';
|
|
19
|
+
import 'react';
|
|
20
|
+
import 'http';
|
|
21
|
+
import '../types-D1A6-XvH.mjs';
|
|
22
|
+
import 'db0';
|
|
23
|
+
import 'unstorage';
|
|
24
|
+
import '../integration-api-CHT2OKAf.mjs';
|
|
25
|
+
import '@farming-labs/orm';
|
|
26
|
+
import '../types-DTzm4TCl.mjs';
|
|
27
|
+
import '@farming-labs/docs';
|
|
28
|
+
import '../markdown.mjs';
|
|
29
|
+
import 'vite';
|
|
30
|
+
import '../cron.mjs';
|
|
31
|
+
import '../env.mjs';
|
|
32
|
+
import '../server-action-security.mjs';
|
|
33
|
+
import '../server-fn-error-DDh14a0V.mjs';
|
|
34
|
+
import '../image-config-Duob7wER.mjs';
|
|
35
|
+
import '../route-runtime-DoOHzCAD.mjs';
|
|
36
|
+
import '../font.mjs';
|
|
37
|
+
|
|
38
|
+
type FarmProductionLifecycleState = "starting" | "ready" | "draining" | "failed" | "closed";
|
|
39
|
+
interface FarmProductionLifecycleOptions {
|
|
40
|
+
server: ResolvedFarmServerConfig;
|
|
41
|
+
start?: () => void | Promise<void>;
|
|
42
|
+
close?: (reason: string) => void | Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
interface FarmResponseCompletionContext {
|
|
45
|
+
onResponseFinished?: (callback: () => void) => void;
|
|
46
|
+
}
|
|
47
|
+
interface FarmProductionLifecycle {
|
|
48
|
+
readonly state: FarmProductionLifecycleState;
|
|
49
|
+
readonly activeRequests: number;
|
|
50
|
+
start(): Promise<void>;
|
|
51
|
+
beginDrain(reason?: string): void;
|
|
52
|
+
waitForIdle(timeoutMs?: number): Promise<boolean>;
|
|
53
|
+
close(reason?: string): Promise<void>;
|
|
54
|
+
handleHealthRequest(request: Request): Promise<Response | null>;
|
|
55
|
+
runRequest(handler: () => Response | Promise<Response>, context?: FarmResponseCompletionContext): Promise<Response>;
|
|
56
|
+
}
|
|
57
|
+
declare function createFarmProductionLifecycle(options: FarmProductionLifecycleOptions): FarmProductionLifecycle;
|
|
58
|
+
|
|
59
|
+
declare const FARM_ROUTE_CONTEXT_SYMBOL: unique symbol;
|
|
60
|
+
type FarmRouteContextCarrier<TContext = unknown> = {
|
|
61
|
+
[FARM_ROUTE_CONTEXT_SYMBOL]?: TContext;
|
|
62
|
+
};
|
|
63
|
+
declare function resolveFarmRouteContext(config: Pick<FarmConfig, "context">, input: FarmContextFactoryInput): Promise<unknown>;
|
|
64
|
+
declare function withFarmRouteContext<TProps extends object, TContext>(props: TProps, context: TContext | undefined): TProps & FarmRouteContextCarrier<TContext>;
|
|
65
|
+
|
|
66
|
+
declare global {
|
|
67
|
+
interface Window {
|
|
68
|
+
__FARM_THEME__?: FarmThemeRuntime;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
interface FarmThemeDocumentParts {
|
|
72
|
+
attributes: string;
|
|
73
|
+
head: string;
|
|
74
|
+
}
|
|
75
|
+
declare function createFarmThemeDocumentParts(input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined, basePath?: string, serverTheme?: FarmThemePreference): FarmThemeDocumentParts;
|
|
76
|
+
declare function applyFarmThemeDocument(html: string, input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined, basePath?: string, serverTheme?: FarmThemePreference): string;
|
|
77
|
+
|
|
78
|
+
declare function appendFarmLinkHeader(headers: Headers, value: string): void;
|
|
79
|
+
|
|
80
|
+
export { appendFarmLinkHeader, applyFarmThemeDocument, createFarmProductionLifecycle, createFarmThemeDocumentParts, resolveFarmRouteContext, withFarmRouteContext };
|
|
@@ -0,0 +1,80 @@
|
|
|
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-D40lt6aN.js';
|
|
5
|
+
export { configureFarmCache, createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from '../cache.js';
|
|
6
|
+
export { c as createFarmLocaleCookie, g as getFarmLocaleVaryHeaders } from '../resolver-IH4RmPEl.js';
|
|
7
|
+
export { localizeFarmHref, localizeFarmPathname, stripFarmLocaleFromPathname } from '../i18n/index.js';
|
|
8
|
+
export { a as addMetadataImageReference, m as mergeMetadata, r as renderMetadataHead } from '../metadata-DyPRG0wX.js';
|
|
9
|
+
export { _ as _runWithMiddlewareContext, b as _runWithMiddlewareData, a as applyProductionMiddlewareHeaders, c as createProductionMiddlewareRunner } from '../production-runtime-DrEy8kBO.js';
|
|
10
|
+
export { g as getFarmRedirectError, i as isFarmNotFoundError, a as isFarmRedirectError } from '../navigation-errors-Dvwpzaer.js';
|
|
11
|
+
export { configureFarmObservability, emitFarmEvent } from '../observability.js';
|
|
12
|
+
import { F as FarmConfig, e as FarmContextFactoryInput } from '../client-plugins-DuuleQKk.js';
|
|
13
|
+
export { a9 as manageFarmDocumentPreloads, aa as manageFarmHtmlPreloads, ab as manageFarmLinkHeaderPreloads, ac as reportFarmPreloadWarnings } from '../client-plugins-DuuleQKk.js';
|
|
14
|
+
export { _setDefaultFarmThemeConfig, getTheme } from '../theme/server.js';
|
|
15
|
+
import { F as FarmThemeRuntime, d as FarmThemeConfig, R as ResolvedFarmThemeConfig, b as FarmThemePreference } from '../types-CsR8fpgF.js';
|
|
16
|
+
import 'node:http';
|
|
17
|
+
import '../types-BMxWr97v.js';
|
|
18
|
+
import '../plugin-BJDf43dc.js';
|
|
19
|
+
import 'react';
|
|
20
|
+
import 'http';
|
|
21
|
+
import '../types-D1A6-XvH.js';
|
|
22
|
+
import 'db0';
|
|
23
|
+
import 'unstorage';
|
|
24
|
+
import '../integration-api-CHT2OKAf.js';
|
|
25
|
+
import '@farming-labs/orm';
|
|
26
|
+
import '../types-DTzm4TCl.js';
|
|
27
|
+
import '@farming-labs/docs';
|
|
28
|
+
import '../markdown.js';
|
|
29
|
+
import 'vite';
|
|
30
|
+
import '../cron.js';
|
|
31
|
+
import '../env.js';
|
|
32
|
+
import '../server-action-security.js';
|
|
33
|
+
import '../server-fn-error-DDh14a0V.js';
|
|
34
|
+
import '../image-config-Duob7wER.js';
|
|
35
|
+
import '../route-runtime-DoOHzCAD.js';
|
|
36
|
+
import '../font.js';
|
|
37
|
+
|
|
38
|
+
type FarmProductionLifecycleState = "starting" | "ready" | "draining" | "failed" | "closed";
|
|
39
|
+
interface FarmProductionLifecycleOptions {
|
|
40
|
+
server: ResolvedFarmServerConfig;
|
|
41
|
+
start?: () => void | Promise<void>;
|
|
42
|
+
close?: (reason: string) => void | Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
interface FarmResponseCompletionContext {
|
|
45
|
+
onResponseFinished?: (callback: () => void) => void;
|
|
46
|
+
}
|
|
47
|
+
interface FarmProductionLifecycle {
|
|
48
|
+
readonly state: FarmProductionLifecycleState;
|
|
49
|
+
readonly activeRequests: number;
|
|
50
|
+
start(): Promise<void>;
|
|
51
|
+
beginDrain(reason?: string): void;
|
|
52
|
+
waitForIdle(timeoutMs?: number): Promise<boolean>;
|
|
53
|
+
close(reason?: string): Promise<void>;
|
|
54
|
+
handleHealthRequest(request: Request): Promise<Response | null>;
|
|
55
|
+
runRequest(handler: () => Response | Promise<Response>, context?: FarmResponseCompletionContext): Promise<Response>;
|
|
56
|
+
}
|
|
57
|
+
declare function createFarmProductionLifecycle(options: FarmProductionLifecycleOptions): FarmProductionLifecycle;
|
|
58
|
+
|
|
59
|
+
declare const FARM_ROUTE_CONTEXT_SYMBOL: unique symbol;
|
|
60
|
+
type FarmRouteContextCarrier<TContext = unknown> = {
|
|
61
|
+
[FARM_ROUTE_CONTEXT_SYMBOL]?: TContext;
|
|
62
|
+
};
|
|
63
|
+
declare function resolveFarmRouteContext(config: Pick<FarmConfig, "context">, input: FarmContextFactoryInput): Promise<unknown>;
|
|
64
|
+
declare function withFarmRouteContext<TProps extends object, TContext>(props: TProps, context: TContext | undefined): TProps & FarmRouteContextCarrier<TContext>;
|
|
65
|
+
|
|
66
|
+
declare global {
|
|
67
|
+
interface Window {
|
|
68
|
+
__FARM_THEME__?: FarmThemeRuntime;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
interface FarmThemeDocumentParts {
|
|
72
|
+
attributes: string;
|
|
73
|
+
head: string;
|
|
74
|
+
}
|
|
75
|
+
declare function createFarmThemeDocumentParts(input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined, basePath?: string, serverTheme?: FarmThemePreference): FarmThemeDocumentParts;
|
|
76
|
+
declare function applyFarmThemeDocument(html: string, input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined, basePath?: string, serverTheme?: FarmThemePreference): string;
|
|
77
|
+
|
|
78
|
+
declare function appendFarmLinkHeader(headers: Headers, value: string): void;
|
|
79
|
+
|
|
80
|
+
export { appendFarmLinkHeader, applyFarmThemeDocument, createFarmProductionLifecycle, createFarmThemeDocumentParts, resolveFarmRouteContext, withFarmRouteContext };
|
|
@@ -4,20 +4,27 @@ import {
|
|
|
4
4
|
} from "../chunk-DXV2Y4HU.mjs";
|
|
5
5
|
import {
|
|
6
6
|
addMetadataImageReference,
|
|
7
|
+
applyFarmThemeDocument,
|
|
8
|
+
createFarmThemeDocumentParts,
|
|
7
9
|
mergeMetadata,
|
|
8
10
|
renderMetadataHead
|
|
9
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-SBWOTAX4.mjs";
|
|
10
12
|
import {
|
|
11
13
|
getFarmRedirectError,
|
|
12
14
|
isFarmNotFoundError,
|
|
13
15
|
isFarmRedirectError
|
|
14
16
|
} from "../chunk-7HO6AEOP.mjs";
|
|
17
|
+
import {
|
|
18
|
+
_setDefaultFarmThemeConfig,
|
|
19
|
+
getTheme
|
|
20
|
+
} from "../chunk-4IVNW5QD.mjs";
|
|
15
21
|
import {
|
|
16
22
|
manageFarmDocumentPreloads,
|
|
17
23
|
manageFarmHtmlPreloads,
|
|
18
24
|
manageFarmLinkHeaderPreloads,
|
|
19
25
|
reportFarmPreloadWarnings
|
|
20
26
|
} from "../chunk-7ZVN3YZI.mjs";
|
|
27
|
+
import "../chunk-H53KVQUU.mjs";
|
|
21
28
|
import {
|
|
22
29
|
_runWithMiddlewareContext,
|
|
23
30
|
_runWithMiddlewareData
|
|
@@ -43,6 +50,7 @@ import {
|
|
|
43
50
|
getCurrentRequest
|
|
44
51
|
} from "../chunk-RHIFZZUI.mjs";
|
|
45
52
|
import "../chunk-LM2YNO4U.mjs";
|
|
53
|
+
import "../chunk-GQVQESLY.mjs";
|
|
46
54
|
import {
|
|
47
55
|
localizeFarmHref,
|
|
48
56
|
localizeFarmPathname,
|
|
@@ -278,8 +286,10 @@ export {
|
|
|
278
286
|
_runWithCurrentRequest,
|
|
279
287
|
_runWithMiddlewareContext,
|
|
280
288
|
_runWithMiddlewareData,
|
|
289
|
+
_setDefaultFarmThemeConfig,
|
|
281
290
|
addMetadataImageReference,
|
|
282
291
|
appendFarmLinkHeader,
|
|
292
|
+
applyFarmThemeDocument,
|
|
283
293
|
applyProductionMiddlewareHeaders,
|
|
284
294
|
bufferFarmRequestBody,
|
|
285
295
|
configureFarmCache,
|
|
@@ -288,12 +298,14 @@ export {
|
|
|
288
298
|
createFarmLocaleCookie,
|
|
289
299
|
createFarmProductionLifecycle,
|
|
290
300
|
createFarmRequestBodyErrorResponse,
|
|
301
|
+
createFarmThemeDocumentParts,
|
|
291
302
|
createProductionMiddlewareRunner,
|
|
292
303
|
emitFarmEvent,
|
|
293
304
|
getCurrentRequest,
|
|
294
305
|
getFarmDataCache,
|
|
295
306
|
getFarmLocaleVaryHeaders,
|
|
296
307
|
getFarmRedirectError,
|
|
308
|
+
getTheme,
|
|
297
309
|
isFarmNotFoundError,
|
|
298
310
|
isFarmRedirectError,
|
|
299
311
|
localizeFarmHref,
|
|
@@ -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 {\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 { configureFarmObservability, emitFarmEvent } from \"../observability\";\nexport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nexport {\n manageFarmDocumentPreloads,\n manageFarmHtmlPreloads,\n manageFarmLinkHeaderPreloads,\n reportFarmPreloadWarnings,\n} from \"../preload\";\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 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 {\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 { configureFarmObservability, emitFarmEvent } from \"../observability\";\nexport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nexport { _setDefaultFarmThemeConfig, getTheme } from \"../theme/server\";\nexport { applyFarmThemeDocument, createFarmThemeDocumentParts } from \"../theme/server-runtime\";\nexport {\n manageFarmDocumentPreloads,\n manageFarmHtmlPreloads,\n manageFarmLinkHeaderPreloads,\n reportFarmPreloadWarnings,\n} from \"../preload\";\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":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Controls when Farm loads and hydrates a server-rendered client boundary.
|
|
3
|
+
*
|
|
4
|
+
* `load` is the compatibility-first default. The deferred strategies keep the
|
|
5
|
+
* server-rendered HTML visible while postponing the boundary's JavaScript.
|
|
6
|
+
*/
|
|
7
|
+
type FarmIslandStrategy = "load" | "interaction" | "visible" | "idle";
|
|
8
|
+
|
|
9
|
+
export type { FarmIslandStrategy as F };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Controls when Farm loads and hydrates a server-rendered client boundary.
|
|
3
|
+
*
|
|
4
|
+
* `load` is the compatibility-first default. The deferred strategies keep the
|
|
5
|
+
* server-rendered HTML visible while postponing the boundary's JavaScript.
|
|
6
|
+
*/
|
|
7
|
+
type FarmIslandStrategy = "load" | "interaction" | "visible" | "idle";
|
|
8
|
+
|
|
9
|
+
export type { FarmIslandStrategy as F };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
type FarmMarkdownRouteInput = string | {
|
|
2
|
+
route: string;
|
|
3
|
+
title?: string;
|
|
4
|
+
cache?: number | false;
|
|
5
|
+
};
|
|
6
|
+
interface FarmMarkdownUserConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Enable generated markdown representations for React pages.
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Routes that may expose generated markdown. Every page is exposed by default.
|
|
14
|
+
*/
|
|
15
|
+
expose?: boolean | FarmMarkdownRouteInput[];
|
|
16
|
+
/** @deprecated Use `expose`. */
|
|
17
|
+
routes?: FarmMarkdownRouteInput[];
|
|
18
|
+
cache?: number | false;
|
|
19
|
+
includeMetadata?: boolean;
|
|
20
|
+
}
|
|
21
|
+
interface FarmMarkdownResolvedRoute {
|
|
22
|
+
route: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
cache?: number | false;
|
|
25
|
+
}
|
|
26
|
+
interface FarmMarkdownResolvedConfig {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
expose: true | FarmMarkdownResolvedRoute[];
|
|
29
|
+
cache: number | false;
|
|
30
|
+
includeMetadata: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface FarmMarkdownMirrorTarget {
|
|
33
|
+
pathname: string;
|
|
34
|
+
route: FarmMarkdownResolvedRoute | null;
|
|
35
|
+
}
|
|
36
|
+
interface ResolveMarkdownMirrorTargetOptions {
|
|
37
|
+
accept?: string | null;
|
|
38
|
+
}
|
|
39
|
+
interface CreateMarkdownMirrorResponseOptions {
|
|
40
|
+
request: Request;
|
|
41
|
+
config?: FarmMarkdownResolvedConfig;
|
|
42
|
+
routeExists?: (pathname: string) => boolean;
|
|
43
|
+
renderPage: (request: Request) => Response | Promise<Response>;
|
|
44
|
+
}
|
|
45
|
+
interface ApplyMarkdownNegotiationHeadersOptions {
|
|
46
|
+
config?: FarmMarkdownResolvedConfig;
|
|
47
|
+
pathname: string;
|
|
48
|
+
}
|
|
49
|
+
declare function resolveMarkdownConfig(config: FarmMarkdownUserConfig | boolean | undefined): FarmMarkdownResolvedConfig;
|
|
50
|
+
declare function resolveMarkdownMirrorTarget(config: FarmMarkdownResolvedConfig | undefined, pathname: string, options?: ResolveMarkdownMirrorTargetOptions): FarmMarkdownMirrorTarget | null;
|
|
51
|
+
declare function createMarkdownMirrorResponse(options: CreateMarkdownMirrorResponseOptions): Promise<Response | null>;
|
|
52
|
+
declare function applyMarkdownNegotiationHeaders(response: Response, options: ApplyMarkdownNegotiationHeadersOptions): Response;
|
|
53
|
+
declare function htmlToMarkdown(html: string, options?: {
|
|
54
|
+
title?: string;
|
|
55
|
+
sourcePath?: string;
|
|
56
|
+
includeMetadata?: boolean;
|
|
57
|
+
}): string;
|
|
58
|
+
declare function requestAcceptsMarkdown(accept: string | null | undefined): boolean;
|
|
59
|
+
|
|
60
|
+
export { type ApplyMarkdownNegotiationHeadersOptions, type CreateMarkdownMirrorResponseOptions, type FarmMarkdownMirrorTarget, type FarmMarkdownResolvedConfig, type FarmMarkdownResolvedRoute, type FarmMarkdownRouteInput, type FarmMarkdownUserConfig, type ResolveMarkdownMirrorTargetOptions, applyMarkdownNegotiationHeaders, createMarkdownMirrorResponse, htmlToMarkdown, requestAcceptsMarkdown, resolveMarkdownConfig, resolveMarkdownMirrorTarget };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
type FarmMarkdownRouteInput = string | {
|
|
2
|
+
route: string;
|
|
3
|
+
title?: string;
|
|
4
|
+
cache?: number | false;
|
|
5
|
+
};
|
|
6
|
+
interface FarmMarkdownUserConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Enable generated markdown representations for React pages.
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Routes that may expose generated markdown. Every page is exposed by default.
|
|
14
|
+
*/
|
|
15
|
+
expose?: boolean | FarmMarkdownRouteInput[];
|
|
16
|
+
/** @deprecated Use `expose`. */
|
|
17
|
+
routes?: FarmMarkdownRouteInput[];
|
|
18
|
+
cache?: number | false;
|
|
19
|
+
includeMetadata?: boolean;
|
|
20
|
+
}
|
|
21
|
+
interface FarmMarkdownResolvedRoute {
|
|
22
|
+
route: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
cache?: number | false;
|
|
25
|
+
}
|
|
26
|
+
interface FarmMarkdownResolvedConfig {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
expose: true | FarmMarkdownResolvedRoute[];
|
|
29
|
+
cache: number | false;
|
|
30
|
+
includeMetadata: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface FarmMarkdownMirrorTarget {
|
|
33
|
+
pathname: string;
|
|
34
|
+
route: FarmMarkdownResolvedRoute | null;
|
|
35
|
+
}
|
|
36
|
+
interface ResolveMarkdownMirrorTargetOptions {
|
|
37
|
+
accept?: string | null;
|
|
38
|
+
}
|
|
39
|
+
interface CreateMarkdownMirrorResponseOptions {
|
|
40
|
+
request: Request;
|
|
41
|
+
config?: FarmMarkdownResolvedConfig;
|
|
42
|
+
routeExists?: (pathname: string) => boolean;
|
|
43
|
+
renderPage: (request: Request) => Response | Promise<Response>;
|
|
44
|
+
}
|
|
45
|
+
interface ApplyMarkdownNegotiationHeadersOptions {
|
|
46
|
+
config?: FarmMarkdownResolvedConfig;
|
|
47
|
+
pathname: string;
|
|
48
|
+
}
|
|
49
|
+
declare function resolveMarkdownConfig(config: FarmMarkdownUserConfig | boolean | undefined): FarmMarkdownResolvedConfig;
|
|
50
|
+
declare function resolveMarkdownMirrorTarget(config: FarmMarkdownResolvedConfig | undefined, pathname: string, options?: ResolveMarkdownMirrorTargetOptions): FarmMarkdownMirrorTarget | null;
|
|
51
|
+
declare function createMarkdownMirrorResponse(options: CreateMarkdownMirrorResponseOptions): Promise<Response | null>;
|
|
52
|
+
declare function applyMarkdownNegotiationHeaders(response: Response, options: ApplyMarkdownNegotiationHeadersOptions): Response;
|
|
53
|
+
declare function htmlToMarkdown(html: string, options?: {
|
|
54
|
+
title?: string;
|
|
55
|
+
sourcePath?: string;
|
|
56
|
+
includeMetadata?: boolean;
|
|
57
|
+
}): string;
|
|
58
|
+
declare function requestAcceptsMarkdown(accept: string | null | undefined): boolean;
|
|
59
|
+
|
|
60
|
+
export { type ApplyMarkdownNegotiationHeadersOptions, type CreateMarkdownMirrorResponseOptions, type FarmMarkdownMirrorTarget, type FarmMarkdownResolvedConfig, type FarmMarkdownResolvedRoute, type FarmMarkdownRouteInput, type FarmMarkdownUserConfig, type ResolveMarkdownMirrorTargetOptions, applyMarkdownNegotiationHeaders, createMarkdownMirrorResponse, htmlToMarkdown, requestAcceptsMarkdown, resolveMarkdownConfig, resolveMarkdownMirrorTarget };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { w as Metadata } from './client-plugins-DuuleQKk.js';
|
|
2
|
+
|
|
3
|
+
type MetadataImageKind = "opengraph" | "twitter";
|
|
4
|
+
interface FarmMetadataImageReference {
|
|
5
|
+
kind: MetadataImageKind;
|
|
6
|
+
href: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
contentType?: string;
|
|
11
|
+
}
|
|
12
|
+
interface RenderedMetadataHead {
|
|
13
|
+
title: string;
|
|
14
|
+
tags: string;
|
|
15
|
+
hasFavicon: boolean;
|
|
16
|
+
}
|
|
17
|
+
type MetadataRecord = Metadata & Record<string, any>;
|
|
18
|
+
declare function mergeMetadata(base: MetadataRecord | undefined, next: MetadataRecord | undefined): MetadataRecord;
|
|
19
|
+
declare function addMetadataImageReference(metadata: MetadataRecord, reference: FarmMetadataImageReference): MetadataRecord;
|
|
20
|
+
declare function renderMetadataHead(metadata: MetadataRecord | undefined): RenderedMetadataHead;
|
|
21
|
+
|
|
22
|
+
export { type MetadataImageKind as M, addMetadataImageReference as a, mergeMetadata as m, renderMetadataHead as r };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { w as Metadata } from './client-plugins-CCilIb_G.mjs';
|
|
2
|
+
|
|
3
|
+
type MetadataImageKind = "opengraph" | "twitter";
|
|
4
|
+
interface FarmMetadataImageReference {
|
|
5
|
+
kind: MetadataImageKind;
|
|
6
|
+
href: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
contentType?: string;
|
|
11
|
+
}
|
|
12
|
+
interface RenderedMetadataHead {
|
|
13
|
+
title: string;
|
|
14
|
+
tags: string;
|
|
15
|
+
hasFavicon: boolean;
|
|
16
|
+
}
|
|
17
|
+
type MetadataRecord = Metadata & Record<string, any>;
|
|
18
|
+
declare function mergeMetadata(base: MetadataRecord | undefined, next: MetadataRecord | undefined): MetadataRecord;
|
|
19
|
+
declare function addMetadataImageReference(metadata: MetadataRecord, reference: FarmMetadataImageReference): MetadataRecord;
|
|
20
|
+
declare function renderMetadataHead(metadata: MetadataRecord | undefined): RenderedMetadataHead;
|
|
21
|
+
|
|
22
|
+
export { type MetadataImageKind as M, addMetadataImageReference as a, mergeMetadata as m, renderMetadataHead as r };
|
package/dist/middleware.cjs
CHANGED
|
@@ -968,6 +968,13 @@ function normalizePathname(pathname) {
|
|
|
968
968
|
}
|
|
969
969
|
__name(normalizePathname, "normalizePathname");
|
|
970
970
|
|
|
971
|
+
// src/cli-colors.ts
|
|
972
|
+
var import_picocolors = __toESM(require("picocolors"));
|
|
973
|
+
function createCliColors(interactive = process.stdout.isTTY === true) {
|
|
974
|
+
return import_picocolors.default.createColors(interactive);
|
|
975
|
+
}
|
|
976
|
+
__name(createCliColors, "createCliColors");
|
|
977
|
+
|
|
971
978
|
// src/middleware/manager.ts
|
|
972
979
|
function isMiddlewareResponse(value) {
|
|
973
980
|
return value instanceof Response;
|
|
@@ -1125,23 +1132,16 @@ var _MiddlewareManager = class _MiddlewareManager {
|
|
|
1125
1132
|
if (applicable.length === 0) {
|
|
1126
1133
|
return false;
|
|
1127
1134
|
}
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
].join(" ");
|
|
1139
|
-
console.log(log);
|
|
1140
|
-
} catch {
|
|
1141
|
-
console.log(
|
|
1142
|
-
`[FARM] [MIDDLEWARE] [${method}] Executing ${pathname} (${applicable.length} middleware)`
|
|
1143
|
-
);
|
|
1144
|
-
}
|
|
1135
|
+
const pc = createCliColors();
|
|
1136
|
+
const log = [
|
|
1137
|
+
pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
|
|
1138
|
+
pc.dim("[") + pc.bold(pc.magenta("MIDDLEWARE")) + pc.dim("]"),
|
|
1139
|
+
pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
|
|
1140
|
+
pc.gray("Executing middleware: "),
|
|
1141
|
+
pc.gray(pathname),
|
|
1142
|
+
pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`)
|
|
1143
|
+
].join(" ");
|
|
1144
|
+
console.log(log);
|
|
1145
1145
|
for (const entry of applicable) {
|
|
1146
1146
|
const { mw, routeMatch } = entry;
|
|
1147
1147
|
const configMatch = mw.config ? this.matchesConfig(routePathname, mw.config, ctx) : { matched: true };
|