@farm.js/core 0.1.0-beta.18 → 0.1.0-beta.20
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.map +1 -1
- package/dist/agent-runtime.mjs +1 -1
- package/dist/{chunk-XFYFRBX5.mjs → chunk-4KTN2BLF.mjs} +2 -2
- package/dist/{chunk-XFYFRBX5.mjs.map → chunk-4KTN2BLF.mjs.map} +1 -1
- package/dist/{chunk-TWOCKYU7.mjs → chunk-5VHPEW6N.mjs} +2 -2
- package/dist/{chunk-ZCTTYTRZ.mjs → chunk-7BX7NEA7.mjs} +2 -2
- package/dist/{chunk-PWLQWGXD.mjs → chunk-TMZEK265.mjs} +14 -5
- package/dist/chunk-TMZEK265.mjs.map +1 -0
- package/dist/{chunk-6OKRBYDC.mjs → chunk-UNDUIGWC.mjs} +33 -15
- package/dist/chunk-UNDUIGWC.mjs.map +1 -0
- package/dist/{chunk-DGJPXXVL.mjs → chunk-ZRMJY4G2.mjs} +6 -6
- package/dist/{chunk-SBLHLAE3.mjs → chunk-ZYDQS2TT.mjs} +88 -5
- package/dist/chunk-ZYDQS2TT.mjs.map +1 -0
- package/dist/{devtools-NVNCOYRJ.mjs → devtools-4RDGBT72.mjs} +3 -3
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +3 -3
- package/dist/index.cjs +136 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +9 -7
- package/dist/index.mjs.map +1 -1
- package/dist/integrations.cjs +82 -4
- package/dist/integrations.cjs.map +1 -1
- package/dist/integrations.mjs +3 -1
- package/dist/internal/build-runtime.cjs +134 -20
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.mjs +7 -7
- package/dist/internal/config-runtime.cjs +75 -4
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.mjs +2 -2
- package/dist/plugin.cjs +62 -15
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.mjs +4 -4
- package/dist/server.cjs +138 -20
- package/dist/server.cjs.map +1 -1
- package/dist/server.mjs +5 -5
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +25 -3
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-6OKRBYDC.mjs.map +0 -1
- package/dist/chunk-PWLQWGXD.mjs.map +0 -1
- package/dist/chunk-SBLHLAE3.mjs.map +0 -1
- /package/dist/{chunk-TWOCKYU7.mjs.map → chunk-5VHPEW6N.mjs.map} +0 -0
- /package/dist/{chunk-ZCTTYTRZ.mjs.map → chunk-7BX7NEA7.mjs.map} +0 -0
- /package/dist/{chunk-DGJPXXVL.mjs.map → chunk-ZRMJY4G2.mjs.map} +0 -0
- /package/dist/{devtools-NVNCOYRJ.mjs.map → devtools-4RDGBT72.mjs.map} +0 -0
|
@@ -4,11 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
clearRequestContext,
|
|
6
6
|
deleteRequestContext,
|
|
7
|
+
getFarmPluginIntegrationContext,
|
|
7
8
|
getRequestContext,
|
|
8
9
|
getRequestContextSnapshot,
|
|
9
10
|
hasRequestContext,
|
|
10
11
|
setRequestContext
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZYDQS2TT.mjs";
|
|
12
13
|
import {
|
|
13
14
|
__name
|
|
14
15
|
} from "./chunk-CGILA3WO.mjs";
|
|
@@ -79,10 +80,14 @@ var _PluginManager = class _PluginManager {
|
|
|
79
80
|
}
|
|
80
81
|
};
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
+
createPluginHookContext(plugin, context = this.context) {
|
|
84
|
+
const integration = getFarmPluginIntegrationContext(plugin);
|
|
85
|
+
return integration ? { ...context, integration } : context;
|
|
86
|
+
}
|
|
87
|
+
createRequestHookContext(target, plugin) {
|
|
83
88
|
const requestContext = this.context.requestContext;
|
|
84
89
|
return {
|
|
85
|
-
...this.
|
|
90
|
+
...this.createPluginHookContext(plugin),
|
|
86
91
|
req: {
|
|
87
92
|
set(key, value, options) {
|
|
88
93
|
requestContext.set(target, key, value, options);
|
|
@@ -125,7 +130,7 @@ var _PluginManager = class _PluginManager {
|
|
|
125
130
|
return {
|
|
126
131
|
...this.createStateHookContext(plugin),
|
|
127
132
|
request,
|
|
128
|
-
req: this.createRequestHookContext(request).req,
|
|
133
|
+
req: this.createRequestHookContext(request, plugin).req,
|
|
129
134
|
kind: options.kind ?? "request",
|
|
130
135
|
route: options.route,
|
|
131
136
|
signal: request.signal,
|
|
@@ -191,7 +196,7 @@ var _PluginManager = class _PluginManager {
|
|
|
191
196
|
}
|
|
192
197
|
createStateHookContext(plugin, context = this.context) {
|
|
193
198
|
return {
|
|
194
|
-
...context,
|
|
199
|
+
...this.createPluginHookContext(plugin, context),
|
|
195
200
|
state: this.pluginStates.get(plugin)
|
|
196
201
|
};
|
|
197
202
|
}
|
|
@@ -319,14 +324,14 @@ var _PluginManager = class _PluginManager {
|
|
|
319
324
|
}
|
|
320
325
|
return hooks;
|
|
321
326
|
}
|
|
322
|
-
getHookContext(hookName, args) {
|
|
327
|
+
getHookContext(plugin, hookName, args) {
|
|
323
328
|
if (hookName === "beforeRequest" || hookName === "afterResponse" || hookName === "beforeApiHandler") {
|
|
324
329
|
const target = args[0];
|
|
325
330
|
if (target && typeof target === "object") {
|
|
326
|
-
return this.createRequestHookContext(target);
|
|
331
|
+
return this.createRequestHookContext(target, plugin);
|
|
327
332
|
}
|
|
328
333
|
}
|
|
329
|
-
return this.
|
|
334
|
+
return this.createPluginHookContext(plugin);
|
|
330
335
|
}
|
|
331
336
|
addPlugin(plugin) {
|
|
332
337
|
this.plugins.push(plugin);
|
|
@@ -375,7 +380,7 @@ var _PluginManager = class _PluginManager {
|
|
|
375
380
|
for (const plugin of this.getSortedPlugins()) {
|
|
376
381
|
if (!plugin.setup) continue;
|
|
377
382
|
const state = await plugin.setup({
|
|
378
|
-
...this.
|
|
383
|
+
...this.createPluginHookContext(plugin),
|
|
379
384
|
env: getResolvedEnv()
|
|
380
385
|
});
|
|
381
386
|
this.pluginStates.set(plugin, state);
|
|
@@ -546,7 +551,7 @@ var _PluginManager = class _PluginManager {
|
|
|
546
551
|
const plugins = this.getSortedPlugins();
|
|
547
552
|
for (const plugin of plugins) {
|
|
548
553
|
for (const hook of this.getPluginHooks(plugin, hookName)) {
|
|
549
|
-
const hookContext = this.getHookContext(hookName, args);
|
|
554
|
+
const hookContext = this.getHookContext(plugin, hookName, args);
|
|
550
555
|
const result = await hook.apply(plugin, [...args, hookContext]);
|
|
551
556
|
if (result !== void 0) {
|
|
552
557
|
return result;
|
|
@@ -560,7 +565,7 @@ var _PluginManager = class _PluginManager {
|
|
|
560
565
|
for (const plugin of plugins) {
|
|
561
566
|
for (const hook of this.getPluginHooks(plugin, hookName)) {
|
|
562
567
|
const hookArgs = [value, ...args];
|
|
563
|
-
const hookContext = this.getHookContext(hookName, hookArgs);
|
|
568
|
+
const hookContext = this.getHookContext(plugin, hookName, hookArgs);
|
|
564
569
|
const result = await hook.apply(plugin, [...hookArgs, hookContext]);
|
|
565
570
|
if (result !== void 0) {
|
|
566
571
|
if (hookName === "beforeApiHandler" && result !== value && value && result && typeof value === "object" && typeof result === "object") {
|
|
@@ -573,11 +578,15 @@ var _PluginManager = class _PluginManager {
|
|
|
573
578
|
return value;
|
|
574
579
|
}
|
|
575
580
|
async runHookParallel(hookName, ...args) {
|
|
581
|
+
return this.runHookParallelFiltered(hookName, () => true, ...args);
|
|
582
|
+
}
|
|
583
|
+
/** @internal Runs hooks for only the plugins selected by the runtime adapter. */
|
|
584
|
+
async runHookParallelFiltered(hookName, include, ...args) {
|
|
576
585
|
if (hookName === "shutdown" && !this.runtimeShutdownHooksRunning) {
|
|
577
586
|
await this.closeRuntime(args[0]?.reason);
|
|
578
587
|
return false;
|
|
579
588
|
}
|
|
580
|
-
const plugins = this.getSortedPlugins();
|
|
589
|
+
const plugins = this.getSortedPlugins().filter(include);
|
|
581
590
|
const sequentialHooks = /* @__PURE__ */ new Set([
|
|
582
591
|
"ready",
|
|
583
592
|
"shutdown",
|
|
@@ -600,7 +609,7 @@ var _PluginManager = class _PluginManager {
|
|
|
600
609
|
return true;
|
|
601
610
|
}
|
|
602
611
|
}
|
|
603
|
-
const hookContext = this.getHookContext(hookName, args);
|
|
612
|
+
const hookContext = this.getHookContext(plugin, hookName, args);
|
|
604
613
|
try {
|
|
605
614
|
await hook.apply(plugin, [...args, hookContext]);
|
|
606
615
|
} catch (error) {
|
|
@@ -622,7 +631,7 @@ var _PluginManager = class _PluginManager {
|
|
|
622
631
|
const promises = [];
|
|
623
632
|
for (const plugin of plugins) {
|
|
624
633
|
for (const hook of this.getPluginHooks(plugin, hookName)) {
|
|
625
|
-
const hookContext = this.getHookContext(hookName, args);
|
|
634
|
+
const hookContext = this.getHookContext(plugin, hookName, args);
|
|
626
635
|
promises.push(hook.apply(plugin, [...args, hookContext]));
|
|
627
636
|
}
|
|
628
637
|
}
|
|
@@ -646,10 +655,19 @@ function definePlugin(plugin) {
|
|
|
646
655
|
return plugin;
|
|
647
656
|
}
|
|
648
657
|
__name(definePlugin, "definePlugin");
|
|
658
|
+
((definePlugin2) => {
|
|
659
|
+
function forIntegration() {
|
|
660
|
+
return /* @__PURE__ */ __name(function defineBoundPlugin(plugin) {
|
|
661
|
+
return plugin;
|
|
662
|
+
}, "defineBoundPlugin");
|
|
663
|
+
}
|
|
664
|
+
definePlugin2.forIntegration = forIntegration;
|
|
665
|
+
__name(forIntegration, "forIntegration");
|
|
666
|
+
})(definePlugin || (definePlugin = {}));
|
|
649
667
|
|
|
650
668
|
export {
|
|
651
669
|
FarmRuntimeShutdownError,
|
|
652
670
|
PluginManager,
|
|
653
671
|
definePlugin
|
|
654
672
|
};
|
|
655
|
-
//# sourceMappingURL=chunk-
|
|
673
|
+
//# sourceMappingURL=chunk-UNDUIGWC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { FarmConfig, FarmRequest, FarmResponse } from \"./types\";\nimport type { ViteDevServer } from \"vite\";\nimport type { FarmClientPlugin } from \"./client/plugin\";\nimport { getResolvedEnv, type ResolvedFarmEnv } from \"./env\";\nimport {\n clearRequestContext,\n deleteRequestContext,\n getRequestContext,\n getRequestContextSnapshot,\n hasRequestContext,\n setRequestContext,\n} from \"./request-context\";\nimport { getFarmPluginIntegrationContext } from \"./plugin-integration-context\";\n\ntype MaybePromise<T> = T | Promise<T>;\ndeclare const FARM_PLUGIN_INTEGRATION_INSTANCE: unique symbol;\n\nexport interface FarmPluginIntegrationContext<TInstance = unknown> {\n /** Key used to register the integration in farm.config.ts. */\n readonly key: string;\n readonly category: string;\n readonly type: string;\n readonly instance: TInstance;\n readonly serverRuntime: boolean;\n}\n\nexport class FarmRuntimeShutdownError extends Error {\n readonly errors: readonly unknown[];\n\n constructor(message: string, errors: readonly unknown[]) {\n super(message);\n this.name = \"FarmRuntimeShutdownError\";\n this.errors = errors;\n }\n}\n\nexport interface PluginRequestContext {\n set: (\n target: FarmRequest | Request,\n key: string,\n value: any,\n options?: { exposeToPage?: boolean },\n ) => void;\n get: <T = any>(target: FarmRequest | Request, key: string) => T | undefined;\n has: (target: FarmRequest | Request, key: string) => boolean;\n delete: (target: FarmRequest | Request, key: string) => boolean;\n clear: (target: FarmRequest | Request) => void;\n getAll: (target: FarmRequest | Request, options?: { exposedOnly?: boolean }) => Map<string, any>;\n}\n\nexport interface FarmRequestStore {\n set(key: string, value: unknown, options?: { exposeToPage?: boolean }): void;\n get<T = unknown>(key: string): T | undefined;\n has(key: string): boolean;\n delete(key: string): boolean;\n clear(): void;\n snapshot(options?: { exposedOnly?: boolean }): Map<string, unknown>;\n}\n\nexport interface FarmPluginContext<TIntegrationInstance = unknown> {\n config: FarmConfig;\n viteServer?: ViteDevServer;\n isDev: boolean;\n isProd: boolean;\n /** The owning integration when this plugin is contributed through `integration.plugins`. */\n readonly integration?: Readonly<FarmPluginIntegrationContext<TIntegrationInstance>>;\n /** Register resource cleanup that must run when the application runtime closes. */\n lifecycle: FarmPluginLifecycle;\n /** @deprecated Use `ctx.req` inside request hooks. */\n requestContext: PluginRequestContext;\n}\n\nexport interface FarmPluginLifecycle {\n /**\n * Register a database, storage, queue, or other resource disposer.\n * Disposers run once in reverse registration order after plugin shutdown hooks.\n */\n onShutdown(dispose: () => void | Promise<void>): () => void;\n}\n\nexport interface FarmRequestPluginContext<\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n /** Request-scoped values for the current hook invocation. */\n readonly req: FarmRequestStore;\n}\n\nexport interface RouteDiscoveredPayload {\n kind: \"page\" | \"layout\";\n pattern: string;\n modulePath: string;\n}\n\nexport interface RoutesGeneratedPayload {\n routes: RouteDiscoveredPayload[];\n pageCount: number;\n layoutCount: number;\n}\n\nexport interface MiddlewareDiscoveredPayload {\n path: string;\n filePath: string;\n handlerCount: number;\n}\n\nexport interface APIRouteDiscoveredPayload {\n path: string;\n filePath: string;\n methods: string[];\n}\n\nexport interface RouteMatchPayload {\n pathname: string;\n method?: string;\n}\n\nexport interface RouteMatchResultPayload {\n pathname: string;\n matched: boolean;\n routePattern: string | null;\n params: Record<string, string>;\n layoutPatterns: string[];\n}\n\nexport interface RenderLifecyclePayload {\n pathname: string;\n method: string;\n routePattern: string | null;\n params: Record<string, string>;\n}\n\nexport interface APIHandlerLifecyclePayload {\n pathname: string;\n method: string;\n routePath?: string;\n}\n\nexport interface ErrorLifecyclePayload {\n phase: string;\n error: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface HMRUpdatePayload {\n file: string;\n modules: string[];\n}\n\nexport interface BundleLifecyclePayload {\n root: string;\n preset: string;\n universal: boolean;\n distDir: string;\n outputDir?: string;\n}\n\nexport interface BundleResultPayload extends BundleLifecyclePayload {\n success: boolean;\n}\n\nexport interface NitroBuildLifecyclePayload {\n root: string;\n preset: string;\n distDir: string;\n outputDir: string;\n}\n\nexport interface ShutdownPayload {\n reason: string;\n}\n\nexport type FarmPluginRuntimeKind =\n | \"request\"\n | \"page\"\n | \"api\"\n | \"action\"\n | \"integration\"\n | \"docs\"\n | \"asset\"\n | (string & {});\n\nexport interface FarmPluginRouteRuntimePayload {\n pathname: string;\n pattern?: string | null;\n params?: Record<string, string>;\n}\n\nexport interface FarmPluginSetupContext<\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n env: ResolvedFarmEnv;\n}\n\nexport interface FarmPluginStateContext<\n TState = unknown,\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n state: TState;\n}\n\nexport interface FarmPluginRuntimeBaseEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> extends FarmPluginStateContext<TState, TIntegrationInstance> {\n request: Request;\n /** Request-scoped values shared by plugin hooks. */\n req: FarmRequestStore;\n kind: FarmPluginRuntimeKind;\n route?: FarmPluginRouteRuntimePayload;\n signal: AbortSignal;\n waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginRuntimeContextEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> = FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeBeforeEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance> {\n ctx: Readonly<TRequestContext>;\n}\n\nexport interface FarmPluginRuntimeAfterEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n response: Response;\n durationMs: number;\n}\n\nexport interface FarmPluginRuntimeErrorEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n error: unknown;\n durationMs: number;\n}\n\nexport type FarmPluginRuntimeStartEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> = FarmPluginStateContext<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeCloseEvent<TState = unknown, TIntegrationInstance = unknown>\n extends FarmPluginStateContext<TState, TIntegrationInstance>, ShutdownPayload {}\n\nexport interface FarmPluginRuntimeHooks<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> {\n start?(event: FarmPluginRuntimeStartEvent<TState, TIntegrationInstance>): MaybePromise<void>;\n context?(\n event: FarmPluginRuntimeContextEvent<TState, TIntegrationInstance>,\n ): MaybePromise<TRequestContext>;\n before?(\n event: FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance>,\n ): MaybePromise<Request | Response | void>;\n after?(\n event: FarmPluginRuntimeAfterEvent<TState, TRequestContext, TIntegrationInstance>,\n ): MaybePromise<Response | void>;\n error?(\n event: FarmPluginRuntimeErrorEvent<TState, TRequestContext, TIntegrationInstance>,\n ): MaybePromise<void>;\n close?(event: FarmPluginRuntimeCloseEvent<TState, TIntegrationInstance>): MaybePromise<void>;\n}\n\nexport interface FarmPluginRuntimeRequestOptions {\n kind?: FarmPluginRuntimeKind;\n route?: FarmPluginRouteRuntimePayload;\n waitUntil?: (promise: Promise<unknown>) => void;\n}\n\nexport type FarmPluginRuntimeRequestHandler = (request: Request) => MaybePromise<Response>;\n\nexport interface FarmPluginRuntimeSession {\n request: Request;\n response?: Response;\n ctx: Readonly<Record<string, unknown>>;\n startedAt: number;\n options: FarmPluginRuntimeRequestOptions;\n waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginDiscoveredRoute =\n | RouteDiscoveredPayload\n | ({ kind: \"middleware\" } & MiddlewareDiscoveredPayload)\n | ({ kind: \"api\" } & APIRouteDiscoveredPayload);\n\nexport interface FarmPluginRouterHooks<TState = unknown, TIntegrationInstance = unknown> {\n discovered?(\n route: FarmPluginDiscoveredRoute,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n generated?(\n routes: RoutesGeneratedPayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n before?(\n route: RouteMatchPayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n after?(\n result: RouteMatchResultPayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginRenderHooks<TState = unknown, TIntegrationInstance = unknown> {\n before?(\n render: RenderLifecyclePayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n html?(\n html: string,\n render: RenderLifecyclePayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<string | void>;\n}\n\nexport interface FarmPluginBuildHooks<TState = unknown, TIntegrationInstance = unknown> {\n before?(\n bundle: BundleLifecyclePayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n configure?(\n buildConfig: any,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<any>;\n after?(\n result: BundleResultPayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginDevHooks<TState = unknown, TIntegrationInstance = unknown> {\n server?(\n viteServer: ViteDevServer,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n update?(\n update: HMRUpdatePayload,\n context: FarmPluginStateContext<TState, TIntegrationInstance>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginClientConfig<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPlugin<TState, TPublic> {\n /** Explicitly public, JSON-safe data embedded in the browser bundle. */\n public?: TPublic;\n}\n\nexport interface FarmPlugin<\n TState = any,\n TRequestContext extends object = Record<string, unknown>,\n TClientState = any,\n TClientPublic = any,\n TIntegrationInstance = unknown,\n> {\n name: string;\n version?: string;\n enforce?: \"pre\" | \"post\";\n\n /** Transform Farm config before it is resolved. */\n configure?: (\n config: FarmConfig,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => MaybePromise<FarmConfig | void>;\n /** Initialize private plugin state once for this plugin manager. */\n setup?: (context: FarmPluginSetupContext<TIntegrationInstance>) => MaybePromise<TState>;\n\n runtime?: FarmPluginRuntimeHooks<TState, TRequestContext, TIntegrationInstance>;\n router?: FarmPluginRouterHooks<TState, TIntegrationInstance>;\n render?: FarmPluginRenderHooks<TState, TIntegrationInstance>;\n build?: FarmPluginBuildHooks<TState, TIntegrationInstance>;\n dev?: FarmPluginDevHooks<TState, TIntegrationInstance>;\n /** Optional browser lifecycle for this logical plugin. */\n client?: FarmPluginClientConfig<TClientState, TClientPublic>;\n\n /** @internal Carries the expected integration instance type without runtime data. */\n readonly [FARM_PLUGIN_INTEGRATION_INSTANCE]?: (instance: TIntegrationInstance) => void;\n\n /** @deprecated Use `setup` instead. */\n init?: (context: FarmPluginContext<TIntegrationInstance>) => void | Promise<void>;\n /** @deprecated Use `runtime.start` instead. */\n ready?: (context: FarmPluginContext<TIntegrationInstance>) => void | Promise<void>;\n /** @deprecated Use `dev.server` instead. */\n devServerCreated?: (\n viteServer: ViteDevServer,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n\n /** @deprecated Use `configure` instead. */\n config?: (\n config: FarmConfig,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => FarmConfig | Promise<FarmConfig>;\n configResolved?: (\n config: FarmConfig,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.before` instead. */\n buildStart?: (context: FarmPluginContext<TIntegrationInstance>) => void | Promise<void>;\n /** @deprecated Use `build.after` instead. */\n buildEnd?: (context: FarmPluginContext<TIntegrationInstance>) => void | Promise<void>;\n\n /** @deprecated Use `router.discovered` instead. */\n routeDiscovered?: (\n route: RouteDiscoveredPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.generated` instead. */\n routesGenerated?: (\n routes: RoutesGeneratedPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.discovered` instead. */\n middlewareDiscovered?: (\n middleware: MiddlewareDiscoveredPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.discovered` instead. */\n apiRouteDiscovered?: (\n route: APIRouteDiscoveredPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.before` instead. */\n beforeRouteMatch?: (\n route: RouteMatchPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.after` instead. */\n afterRouteMatch?: (\n result: RouteMatchResultPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `render.before` instead. */\n beforeRender?: (\n render: RenderLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `render.html` instead. */\n afterRender?: (\n html: string,\n render: RenderLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => string | Promise<string> | void | Promise<void>;\n /** @deprecated Use `runtime.before` instead. */\n beforeApiHandler?: (\n request: Request,\n api: APIHandlerLifecyclePayload,\n context: FarmRequestPluginContext<TIntegrationInstance>,\n ) => Request | Promise<Request> | void | Promise<void>;\n /** @deprecated Use `runtime.after` instead. */\n afterApiHandler?: (\n response: Response,\n api: APIHandlerLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => Response | Promise<Response> | void | Promise<void>;\n onError?: (\n error: ErrorLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `dev.update` instead. */\n hmrUpdate?: (\n update: HMRUpdatePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.before` instead. */\n beforeBundle?: (\n bundle: BundleLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.after` instead. */\n afterBundle?: (\n result: BundleResultPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.configure` instead. */\n beforeNitroBuild?: (\n nitroConfig: any,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => any | Promise<any>;\n afterNitroBuild?: (\n payload: NitroBuildLifecyclePayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use `runtime.close` instead. */\n shutdown?: (\n payload: ShutdownPayload,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n\n /** @deprecated Use the Web Request based `runtime.before` hook instead. */\n beforeRequest?: (\n req: FarmRequest,\n res: FarmResponse,\n context: FarmRequestPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n /** @deprecated Use the Web Response based `runtime.after` hook instead. */\n afterResponse?: (\n req: FarmRequest,\n res: FarmResponse,\n context: FarmRequestPluginContext<TIntegrationInstance>,\n ) => void | Promise<void>;\n\n // Transform hooks\n /** @deprecated Use `render.html` instead. */\n transformHTML?: (\n html: string,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => string | Promise<string>;\n /** @deprecated Use `render.before` or `render.html` instead. */\n transformPage?: (\n component: any,\n context: FarmPluginContext<TIntegrationInstance>,\n ) => any | Promise<any>;\n}\n\nexport class PluginManager {\n private plugins: FarmPlugin[] = [];\n private hookPresence = new Map<keyof FarmPlugin, boolean>();\n private runtimeHookPresence = new Map<\"context\" | \"before\" | \"after\" | \"error\", boolean>();\n private context: FarmPluginContext;\n private pluginStates = new Map<FarmPlugin, unknown>();\n private setupComplete = false;\n private initialized = false;\n private runtimeReady = false;\n private runtimeClosed = false;\n private runtimeStartPromise?: Promise<void>;\n private runtimeClosePromise?: Promise<void>;\n private runtimeShutdownHooksRunning = false;\n private runtimeDisposers: Array<() => void | Promise<void>> = [];\n private runtimeRequestContexts = new WeakMap<Request, Readonly<Record<string, unknown>>>();\n private failedRuntimeSessions = new WeakSet<FarmPluginRuntimeSession>();\n\n constructor(context: Omit<FarmPluginContext, \"requestContext\" | \"lifecycle\">) {\n this.context = {\n ...context,\n lifecycle: {\n onShutdown: (dispose) => {\n if (typeof dispose !== \"function\") {\n throw new TypeError(\"Farm lifecycle.onShutdown requires a cleanup function\");\n }\n if (this.runtimeClosePromise || this.runtimeClosed) {\n throw new Error(\"Farm runtime cleanup cannot be registered after shutdown begins\");\n }\n\n this.runtimeDisposers.push(dispose);\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const index = this.runtimeDisposers.indexOf(dispose);\n if (index >= 0) this.runtimeDisposers.splice(index, 1);\n };\n },\n },\n requestContext: {\n set(target, key, value, options) {\n setRequestContext(target as object, key, value, options);\n },\n get(target, key) {\n return getRequestContext(target as object, key);\n },\n has(target, key) {\n return hasRequestContext(target as object, key);\n },\n delete(target, key) {\n return deleteRequestContext(target as object, key);\n },\n clear(target) {\n clearRequestContext(target as object);\n },\n getAll(target, options) {\n return getRequestContextSnapshot(target as object, options);\n },\n },\n };\n }\n\n private createPluginHookContext(\n plugin: FarmPlugin,\n context: FarmPluginContext = this.context,\n ): FarmPluginContext {\n const integration = getFarmPluginIntegrationContext(plugin);\n return integration ? { ...context, integration } : context;\n }\n\n private createRequestHookContext(\n target: FarmRequest | Request,\n plugin: FarmPlugin,\n ): FarmRequestPluginContext {\n const requestContext = this.context.requestContext;\n\n return {\n ...this.createPluginHookContext(plugin),\n req: {\n set(key, value, options) {\n requestContext.set(target, key, value, options);\n },\n get(key) {\n return requestContext.get(target, key);\n },\n has(key) {\n return requestContext.has(target, key);\n },\n delete(key) {\n return requestContext.delete(target, key);\n },\n clear() {\n requestContext.clear(target);\n },\n snapshot(options) {\n return requestContext.getAll(target, options);\n },\n },\n };\n }\n\n private copyRequestStore(source: FarmRequest | Request, target: FarmRequest | Request): void {\n const requestContext = this.context.requestContext;\n const values = requestContext.getAll(source);\n const exposed = requestContext.getAll(source, { exposedOnly: true });\n\n for (const [key, value] of values) {\n requestContext.set(target, key, value, {\n exposeToPage: exposed.has(key),\n });\n }\n }\n\n private copyRuntimeRequestContext(source: Request, target: Request): void {\n const runtimeContext = this.runtimeRequestContexts.get(source);\n if (runtimeContext) {\n this.runtimeRequestContexts.set(target, runtimeContext);\n }\n }\n\n private createRuntimeBaseEvent(\n plugin: FarmPlugin,\n request: Request,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): FarmPluginRuntimeBaseEvent {\n return {\n ...this.createStateHookContext(plugin),\n request,\n req: this.createRequestHookContext(request, plugin).req,\n kind: options.kind ?? \"request\",\n route: options.route,\n signal: request.signal,\n waitUntil,\n };\n }\n\n private async createRuntimeRequestContext(\n request: Request,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): Promise<Readonly<Record<string, unknown>>> {\n const values: Record<string, unknown> = {};\n const owners = new Map<string, string>();\n\n for (const plugin of this.getSortedPlugins()) {\n const createContext = plugin.runtime?.context;\n if (!createContext) continue;\n\n const result = await createContext(\n this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n );\n if (result === undefined) continue;\n if (!result || typeof result !== \"object\" || Array.isArray(result)) {\n throw new TypeError(`Farm plugin \"${plugin.name}\" runtime.context must return an object`);\n }\n\n for (const [key, value] of Object.entries(result)) {\n const owner = owners.get(key);\n if (owner) {\n throw new Error(\n `Farm plugin context key \"${key}\" from \"${plugin.name}\" conflicts with \"${owner}\"`,\n );\n }\n owners.set(key, plugin.name);\n values[key] = value;\n }\n }\n\n const runtimeContext = Object.freeze(values);\n this.runtimeRequestContexts.set(request, runtimeContext);\n return runtimeContext;\n }\n\n private async runRuntimeErrorHooks(\n request: Request,\n error: unknown,\n ctx: Readonly<Record<string, unknown>>,\n durationMs: number,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): Promise<void> {\n for (const plugin of this.getSortedPlugins()) {\n const onError = plugin.runtime?.error;\n if (!onError) continue;\n\n try {\n await onError({\n ...this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n ctx,\n error,\n durationMs,\n });\n } catch (hookError) {\n console.error(`Farm plugin \"${plugin.name}\" runtime.error failed:`, hookError);\n }\n }\n\n try {\n await this.runHookParallel(\"onError\", {\n phase: \"runtime\",\n error,\n meta: {\n kind: options.kind ?? \"request\",\n pathname: new URL(request.url).pathname,\n durationMs,\n },\n });\n } catch (hookError) {\n console.error(\"Farm plugin onError hook failed:\", hookError);\n }\n }\n\n private createStateHookContext(\n plugin: FarmPlugin,\n context: FarmPluginContext = this.context,\n ): FarmPluginStateContext {\n return {\n ...this.createPluginHookContext(plugin, context),\n state: this.pluginStates.get(plugin),\n };\n }\n\n private getPluginHooks(\n plugin: FarmPlugin,\n hookName: keyof FarmPlugin,\n ): Array<(...args: any[]) => any> {\n const hooks: Array<(...args: any[]) => any> = [];\n const legacyHook = plugin[hookName];\n if (typeof legacyHook === \"function\") {\n hooks.push(legacyHook);\n }\n\n const withState = (context: FarmPluginContext) => this.createStateHookContext(plugin, context);\n\n switch (hookName) {\n case \"config\":\n if (plugin.configure) {\n hooks.push((config: FarmConfig, context: FarmPluginContext) =>\n plugin.configure?.(config, context),\n );\n }\n break;\n case \"ready\":\n if (plugin.runtime?.start) {\n hooks.push((context: FarmPluginContext) => plugin.runtime?.start?.(withState(context)));\n }\n break;\n case \"shutdown\":\n if (plugin.runtime?.close) {\n hooks.push((payload: ShutdownPayload, context: FarmPluginContext) =>\n plugin.runtime?.close?.({\n ...withState(context),\n reason: payload.reason,\n }),\n );\n }\n break;\n case \"routeDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: RouteDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.(route, withState(context)),\n );\n }\n break;\n case \"middlewareDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: MiddlewareDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.({ kind: \"middleware\", ...route }, withState(context)),\n );\n }\n break;\n case \"apiRouteDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: APIRouteDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.({ kind: \"api\", ...route }, withState(context)),\n );\n }\n break;\n case \"routesGenerated\":\n if (plugin.router?.generated) {\n hooks.push((routes: RoutesGeneratedPayload, context: FarmPluginContext) =>\n plugin.router?.generated?.(routes, withState(context)),\n );\n }\n break;\n case \"beforeRouteMatch\":\n if (plugin.router?.before) {\n hooks.push((route: RouteMatchPayload, context: FarmPluginContext) =>\n plugin.router?.before?.(route, withState(context)),\n );\n }\n break;\n case \"afterRouteMatch\":\n if (plugin.router?.after) {\n hooks.push((result: RouteMatchResultPayload, context: FarmPluginContext) =>\n plugin.router?.after?.(result, withState(context)),\n );\n }\n break;\n case \"beforeRender\":\n if (plugin.render?.before) {\n hooks.push((render: RenderLifecyclePayload, context: FarmPluginContext) =>\n plugin.render?.before?.(render, withState(context)),\n );\n }\n break;\n case \"afterRender\":\n if (plugin.render?.html) {\n hooks.push((html: string, render: RenderLifecyclePayload, context: FarmPluginContext) =>\n plugin.render?.html?.(html, render, withState(context)),\n );\n }\n break;\n case \"beforeBundle\":\n if (plugin.build?.before) {\n hooks.push((bundle: BundleLifecyclePayload, context: FarmPluginContext) =>\n plugin.build?.before?.(bundle, withState(context)),\n );\n }\n break;\n case \"beforeNitroBuild\":\n if (plugin.build?.configure) {\n hooks.push((buildConfig: any, context: FarmPluginContext) =>\n plugin.build?.configure?.(buildConfig, withState(context)),\n );\n }\n break;\n case \"afterBundle\":\n if (plugin.build?.after) {\n hooks.push((result: BundleResultPayload, context: FarmPluginContext) =>\n plugin.build?.after?.(result, withState(context)),\n );\n }\n break;\n case \"devServerCreated\":\n if (plugin.dev?.server) {\n hooks.push((server: ViteDevServer, context: FarmPluginContext) =>\n plugin.dev?.server?.(server, withState(context)),\n );\n }\n break;\n case \"hmrUpdate\":\n if (plugin.dev?.update) {\n hooks.push((update: HMRUpdatePayload, context: FarmPluginContext) =>\n plugin.dev?.update?.(update, withState(context)),\n );\n }\n break;\n }\n\n return hooks;\n }\n\n private getHookContext(\n plugin: FarmPlugin,\n hookName: keyof FarmPlugin,\n args: any[],\n ): FarmPluginContext {\n if (\n hookName === \"beforeRequest\" ||\n hookName === \"afterResponse\" ||\n hookName === \"beforeApiHandler\"\n ) {\n const target = args[0];\n if (target && typeof target === \"object\") {\n return this.createRequestHookContext(target, plugin);\n }\n }\n\n return this.createPluginHookContext(plugin);\n }\n\n addPlugin(plugin: FarmPlugin) {\n this.plugins.push(plugin);\n this.hookPresence.clear();\n this.runtimeHookPresence.clear();\n }\n\n addPlugins(plugins: FarmPlugin[]) {\n for (const plugin of plugins) {\n this.addPlugin(plugin);\n }\n }\n\n getPlugins(): FarmPlugin[] {\n return [...this.plugins];\n }\n\n getSortedPlugins(): FarmPlugin[] {\n const pre = this.plugins.filter((p) => p.enforce === \"pre\");\n const normal = this.plugins.filter((p) => !p.enforce);\n const post = this.plugins.filter((p) => p.enforce === \"post\");\n return [...pre, ...normal, ...post];\n }\n\n hasHook(hookName: keyof FarmPlugin): boolean {\n const cached = this.hookPresence.get(hookName);\n if (cached !== undefined) return cached;\n\n const present = this.plugins.some((plugin) => this.getPluginHooks(plugin, hookName).length > 0);\n this.hookPresence.set(hookName, present);\n return present;\n }\n\n hasRuntimeHook(hookName: \"context\" | \"before\" | \"after\" | \"error\"): boolean {\n const cached = this.runtimeHookPresence.get(hookName);\n if (cached !== undefined) return cached;\n\n const present = this.plugins.some((plugin) => typeof plugin.runtime?.[hookName] === \"function\");\n this.runtimeHookPresence.set(hookName, present);\n return present;\n }\n\n hasRuntimeRequestHooks(): boolean {\n return (\n this.hasRuntimeHook(\"context\") ||\n this.hasRuntimeHook(\"before\") ||\n this.hasRuntimeHook(\"after\") ||\n this.hasRuntimeHook(\"error\")\n );\n }\n\n copyRequestContext(source: FarmRequest | Request, target: FarmRequest | Request): void {\n this.copyRequestStore(source, target);\n if (source instanceof Request && target instanceof Request) {\n this.copyRuntimeRequestContext(source, target);\n }\n }\n\n async setupPlugins(): Promise<void> {\n if (this.setupComplete) return;\n\n for (const plugin of this.getSortedPlugins()) {\n if (!plugin.setup) continue;\n const state = await plugin.setup({\n ...this.createPluginHookContext(plugin),\n env: getResolvedEnv(),\n });\n this.pluginStates.set(plugin, state);\n }\n\n this.setupComplete = true;\n }\n\n async startRuntime(): Promise<void> {\n if (this.runtimeReady) return;\n if (this.runtimeStartPromise) return this.runtimeStartPromise;\n\n this.runtimeStartPromise = (async () => {\n if (!this.initialized) {\n await this.runHookParallel(\"init\");\n }\n await this.setupPlugins();\n if (!this.runtimeReady) {\n await this.runHookParallel(\"ready\");\n }\n })();\n\n try {\n await this.runtimeStartPromise;\n } catch (error) {\n this.runtimeStartPromise = undefined;\n throw error;\n }\n }\n\n async closeRuntime(reason = \"runtime-closed\"): Promise<void> {\n if (this.runtimeClosePromise) return this.runtimeClosePromise;\n if (this.runtimeClosed) return;\n\n this.runtimeClosePromise = (async () => {\n const errors: unknown[] = [];\n this.runtimeShutdownHooksRunning = true;\n try {\n await this.runHookParallel(\"shutdown\", { reason });\n } catch (error) {\n if (error instanceof FarmRuntimeShutdownError) errors.push(...error.errors);\n else errors.push(error);\n } finally {\n this.runtimeShutdownHooksRunning = false;\n }\n\n const disposers = this.runtimeDisposers.splice(0).reverse();\n for (const dispose of disposers) {\n try {\n await dispose();\n } catch (error) {\n errors.push(error);\n }\n }\n\n this.runtimeClosed = true;\n if (errors.length > 0) {\n throw new FarmRuntimeShutdownError(\"Farm runtime shutdown failed\", errors);\n }\n })();\n return this.runtimeClosePromise;\n }\n\n async beginRuntimeRequest(\n request: Request,\n options: FarmPluginRuntimeRequestOptions = {},\n ): Promise<FarmPluginRuntimeSession> {\n await this.startRuntime();\n\n const startedAt = Date.now();\n const waitUntil = options.waitUntil\n ? (promise: Promise<unknown>) => options.waitUntil?.(Promise.resolve(promise))\n : (promise: Promise<unknown>) => {\n void Promise.resolve(promise).catch(() => {});\n };\n let activeRequest = request;\n let runtimeContext: Readonly<Record<string, unknown>> = Object.freeze({});\n\n try {\n runtimeContext = await this.createRuntimeRequestContext(activeRequest, options, waitUntil);\n\n let response: Response | undefined;\n for (const plugin of this.getSortedPlugins()) {\n const before = plugin.runtime?.before;\n if (!before) continue;\n\n const result = await before({\n ...this.createRuntimeBaseEvent(plugin, activeRequest, options, waitUntil),\n ctx: runtimeContext,\n });\n\n if (result instanceof Request) {\n this.copyRequestStore(activeRequest, result);\n this.copyRuntimeRequestContext(activeRequest, result);\n activeRequest = result;\n continue;\n }\n if (result instanceof Response) {\n response = result;\n break;\n }\n if (result !== undefined) {\n throw new TypeError(\n `Farm plugin \"${plugin.name}\" runtime.before must return a Request, Response, or undefined`,\n );\n }\n }\n\n return {\n request: activeRequest,\n response,\n ctx: runtimeContext,\n startedAt,\n options,\n waitUntil,\n };\n } catch (error) {\n await this.runRuntimeErrorHooks(\n activeRequest,\n error,\n runtimeContext,\n Date.now() - startedAt,\n options,\n waitUntil,\n );\n throw error;\n }\n }\n\n async endRuntimeRequest(\n session: FarmPluginRuntimeSession,\n initialResponse: Response,\n ): Promise<Response> {\n let response = initialResponse;\n\n try {\n for (const plugin of this.getSortedPlugins()) {\n const after = plugin.runtime?.after;\n if (!after) continue;\n\n const result = await after({\n ...this.createRuntimeBaseEvent(\n plugin,\n session.request,\n session.options,\n session.waitUntil,\n ),\n ctx: session.ctx,\n response,\n durationMs: Date.now() - session.startedAt,\n });\n if (result !== undefined) {\n if (!(result instanceof Response)) {\n throw new TypeError(\n `Farm plugin \"${plugin.name}\" runtime.after must return a Response or undefined`,\n );\n }\n response = result;\n }\n }\n\n return response;\n } catch (error) {\n await this.failRuntimeRequest(session, error);\n throw error;\n }\n }\n\n async failRuntimeRequest(session: FarmPluginRuntimeSession, error: unknown): Promise<void> {\n if (this.failedRuntimeSessions.has(session)) return;\n this.failedRuntimeSessions.add(session);\n await this.runRuntimeErrorHooks(\n session.request,\n error,\n session.ctx,\n Date.now() - session.startedAt,\n session.options,\n session.waitUntil,\n );\n }\n\n async runRuntimeRequest(\n request: Request,\n handler: FarmPluginRuntimeRequestHandler,\n options: FarmPluginRuntimeRequestOptions = {},\n ): Promise<Response> {\n const session = await this.beginRuntimeRequest(request, options);\n try {\n const response = session.response ?? (await handler(session.request));\n if (!(response instanceof Response)) {\n throw new TypeError(\"Farm plugin runtime handlers must return a Response\");\n }\n return await this.endRuntimeRequest(session, response);\n } catch (error) {\n await this.failRuntimeRequest(session, error);\n throw error;\n }\n }\n\n async runHook<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<any> {\n const plugins = this.getSortedPlugins();\n\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookContext = this.getHookContext(plugin, hookName, args);\n const result = await (hook as any).apply(plugin, [...args, hookContext]);\n if (result !== undefined) {\n return result;\n }\n }\n }\n }\n\n async runHookSerial<K extends keyof FarmPlugin>(\n hookName: K,\n initialValue: any,\n ...args: any[]\n ): Promise<any> {\n const plugins = this.getSortedPlugins();\n let value = initialValue;\n\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookArgs = [value, ...args];\n const hookContext = this.getHookContext(plugin, hookName, hookArgs);\n const result = await (hook as any).apply(plugin, [...hookArgs, hookContext]);\n if (result !== undefined) {\n if (\n hookName === \"beforeApiHandler\" &&\n result !== value &&\n value &&\n result &&\n typeof value === \"object\" &&\n typeof result === \"object\"\n ) {\n this.copyRequestStore(value as FarmRequest | Request, result as FarmRequest | Request);\n }\n value = result;\n }\n }\n }\n\n return value;\n }\n\n async runHookParallel<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<boolean> {\n return this.runHookParallelFiltered(hookName, () => true, ...args);\n }\n\n /** @internal Runs hooks for only the plugins selected by the runtime adapter. */\n async runHookParallelFiltered<K extends keyof FarmPlugin>(\n hookName: K,\n include: (plugin: FarmPlugin) => boolean,\n ...args: any[]\n ): Promise<boolean> {\n if (hookName === \"shutdown\" && !this.runtimeShutdownHooksRunning) {\n await this.closeRuntime(args[0]?.reason);\n return false;\n }\n\n const plugins = this.getSortedPlugins().filter(include);\n\n // Run selected hooks sequentially for deterministic execution and short-circuiting.\n const sequentialHooks = new Set<keyof FarmPlugin>([\n \"ready\",\n \"shutdown\",\n \"beforeRequest\",\n \"afterResponse\",\n \"beforeApiHandler\",\n \"afterApiHandler\",\n \"beforeRouteMatch\",\n \"afterRouteMatch\",\n \"beforeRender\",\n \"afterRender\",\n ]);\n\n if (sequentialHooks.has(hookName)) {\n const shutdownErrors: unknown[] = [];\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n // Check if response is already sent (only for beforeRequest)\n if (hookName === \"beforeRequest\") {\n const res = args[1];\n if (res && res.writableEnded) {\n return true;\n }\n }\n\n const hookContext = this.getHookContext(plugin, hookName, args);\n try {\n await (hook as any).apply(plugin, [...args, hookContext]);\n } catch (error) {\n if (hookName !== \"shutdown\") throw error;\n shutdownErrors.push(error);\n }\n\n // Check again after plugin execution (only for beforeRequest)\n if (hookName === \"beforeRequest\") {\n const res = args[1];\n if (res && res.writableEnded) {\n return true;\n }\n }\n }\n }\n if (hookName === \"shutdown\" && shutdownErrors.length > 0) {\n throw new FarmRuntimeShutdownError(\"Farm plugin shutdown hooks failed\", shutdownErrors);\n }\n } else {\n // Run other hooks in parallel\n const promises: Promise<any>[] = [];\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookContext = this.getHookContext(plugin, hookName, args);\n promises.push((hook as any).apply(plugin, [...args, hookContext]));\n }\n }\n await Promise.all(promises);\n }\n\n if (hookName === \"init\") this.initialized = true;\n if (hookName === \"ready\") this.runtimeReady = true;\n\n return false;\n }\n\n updateContext(updates: Partial<FarmPluginContext>) {\n this.context = {\n ...this.context,\n ...updates,\n requestContext: this.context.requestContext,\n };\n }\n}\n\nexport function definePlugin<\n TState = undefined,\n TRequestContext extends object = Record<string, never>,\n TClientState = unknown,\n TClientPublic = undefined,\n TIntegrationInstance = unknown,\n>(\n plugin: FarmPlugin<TState, TRequestContext, TClientState, TClientPublic, TIntegrationInstance>,\n): FarmPlugin<TState, TRequestContext, TClientState, TClientPublic, TIntegrationInstance> {\n return plugin;\n}\n\nexport namespace definePlugin {\n /** Bind an integration instance type while preserving inference for plugin state and context. */\n export function forIntegration<TIntegrationInstance>() {\n return function defineBoundPlugin<\n TState = undefined,\n TRequestContext extends object = Record<string, never>,\n TClientState = unknown,\n TClientPublic = undefined,\n >(\n plugin: FarmPlugin<\n TState,\n TRequestContext,\n TClientState,\n TClientPublic,\n TIntegrationInstance\n >,\n ): FarmPlugin<TState, TRequestContext, TClientState, TClientPublic, TIntegrationInstance> {\n return plugin;\n };\n }\n}\nexport { farmPlugin } from \"./vite\";\n"],"mappings":"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","names":["definePlugin"]}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
FARM_DOCS_LAST_MODIFIED_MANIFEST,
|
|
10
10
|
createFarmDocsLastModifiedManifest,
|
|
11
11
|
getFarmDocsRouteTypeEntries
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5VHPEW6N.mjs";
|
|
13
13
|
import {
|
|
14
14
|
generateFarmDocsSearchClientRuntime,
|
|
15
15
|
isFarmDocsSearchEnabled,
|
|
@@ -18,10 +18,10 @@ import {
|
|
|
18
18
|
import {
|
|
19
19
|
hasCustomFarmRouteContext,
|
|
20
20
|
resolveDeployOutputPath
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7BX7NEA7.mjs";
|
|
22
22
|
import {
|
|
23
23
|
PluginManager
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-UNDUIGWC.mjs";
|
|
25
25
|
import {
|
|
26
26
|
DEFAULT_NOT_FOUND_STYLES,
|
|
27
27
|
createFarmApp,
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
mergeFarmFontCss,
|
|
34
34
|
mergeFarmViteConfig,
|
|
35
35
|
resolveRouteRenderingConfigFromFile
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-TMZEK265.mjs";
|
|
37
37
|
import {
|
|
38
38
|
farmEnvironmentFunctionsPlugin
|
|
39
39
|
} from "./chunk-V6WE6JSZ.mjs";
|
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
} from "./chunk-GXASWWJU.mjs";
|
|
63
63
|
import {
|
|
64
64
|
getFarmIntegrationPluginServerRuntime
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-ZYDQS2TT.mjs";
|
|
66
66
|
import {
|
|
67
67
|
APIRouteManager
|
|
68
68
|
} from "./chunk-KALXVY5L.mjs";
|
|
@@ -6990,4 +6990,4 @@ __name(buildNitro, "buildNitro");
|
|
|
6990
6990
|
export {
|
|
6991
6991
|
build
|
|
6992
6992
|
};
|
|
6993
|
-
//# sourceMappingURL=chunk-
|
|
6993
|
+
//# sourceMappingURL=chunk-ZRMJY4G2.mjs.map
|
|
@@ -15,6 +15,20 @@ import {
|
|
|
15
15
|
__name
|
|
16
16
|
} from "./chunk-CGILA3WO.mjs";
|
|
17
17
|
|
|
18
|
+
// src/plugin-integration-context.ts
|
|
19
|
+
var FARM_PLUGIN_INTEGRATION_CONTEXT = /* @__PURE__ */ Symbol.for("@farm.js/core/plugin-integration-context");
|
|
20
|
+
function setFarmPluginIntegrationContext(plugin, integration) {
|
|
21
|
+
Object.defineProperty(plugin, FARM_PLUGIN_INTEGRATION_CONTEXT, {
|
|
22
|
+
value: integration
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
__name(setFarmPluginIntegrationContext, "setFarmPluginIntegrationContext");
|
|
26
|
+
function getFarmPluginIntegrationContext(plugin) {
|
|
27
|
+
const value = plugin[FARM_PLUGIN_INTEGRATION_CONTEXT];
|
|
28
|
+
return value && typeof value === "object" ? value : void 0;
|
|
29
|
+
}
|
|
30
|
+
__name(getFarmPluginIntegrationContext, "getFarmPluginIntegrationContext");
|
|
31
|
+
|
|
18
32
|
// src/request-context.ts
|
|
19
33
|
var REQUEST_CONTEXT_STORE_KEY = /* @__PURE__ */ Symbol.for("farm.requestContextStore");
|
|
20
34
|
function getRequestContextStore() {
|
|
@@ -95,11 +109,17 @@ __name(defineIntegrationSchema, "defineIntegrationSchema");
|
|
|
95
109
|
var FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME = /* @__PURE__ */ Symbol.for(
|
|
96
110
|
"@farm.js/core/integration-plugin-server-runtime"
|
|
97
111
|
);
|
|
112
|
+
var FARM_INTEGRATION_PLUGIN_OWNER = /* @__PURE__ */ Symbol.for("@farm.js/core/integration-plugin-owner");
|
|
98
113
|
function getFarmIntegrationPluginServerRuntime(plugin) {
|
|
99
114
|
const value = plugin[FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME];
|
|
100
115
|
return typeof value === "boolean" ? value : void 0;
|
|
101
116
|
}
|
|
102
117
|
__name(getFarmIntegrationPluginServerRuntime, "getFarmIntegrationPluginServerRuntime");
|
|
118
|
+
function getFarmIntegrationPluginOwner(plugin) {
|
|
119
|
+
const value = plugin[FARM_INTEGRATION_PLUGIN_OWNER];
|
|
120
|
+
return value && typeof value === "object" ? value : void 0;
|
|
121
|
+
}
|
|
122
|
+
__name(getFarmIntegrationPluginOwner, "getFarmIntegrationPluginOwner");
|
|
103
123
|
function defineTypedIntegrationRoute(method, path, input) {
|
|
104
124
|
return {
|
|
105
125
|
path,
|
|
@@ -259,14 +279,75 @@ function resolveIntegrationPlugins(integrations) {
|
|
|
259
279
|
if (!integration || !isFarmIntegration(integration)) {
|
|
260
280
|
continue;
|
|
261
281
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
282
|
+
const owner = createIntegrationPluginOwner(key, integration, "lifecycle");
|
|
283
|
+
plugins.push(withIntegrationPluginOwner(createIntegrationPlugin(key, integration), owner));
|
|
284
|
+
plugins.push(...resolveIntegrationPluginContributions(key, integration));
|
|
266
285
|
}
|
|
267
286
|
return plugins;
|
|
268
287
|
}
|
|
269
288
|
__name(resolveIntegrationPlugins, "resolveIntegrationPlugins");
|
|
289
|
+
function resolveIntegrationPluginContributions(key, integration) {
|
|
290
|
+
const contributions = integration.plugins;
|
|
291
|
+
if (!contributions) return [];
|
|
292
|
+
if (!Array.isArray(contributions)) {
|
|
293
|
+
throw new TypeError(`Integration "${key}" plugins must be an array`);
|
|
294
|
+
}
|
|
295
|
+
const names = /* @__PURE__ */ new Set();
|
|
296
|
+
return contributions.map((plugin, index) => {
|
|
297
|
+
if (!plugin || typeof plugin !== "object" || typeof plugin.name !== "string") {
|
|
298
|
+
throw new TypeError(`Integration "${key}" plugin at index ${index} is invalid`);
|
|
299
|
+
}
|
|
300
|
+
const name = plugin.name.trim();
|
|
301
|
+
if (!name) {
|
|
302
|
+
throw new TypeError(`Integration "${key}" plugin at index ${index} requires a name`);
|
|
303
|
+
}
|
|
304
|
+
if (names.has(name)) {
|
|
305
|
+
throw new Error(`Integration "${key}" contributes duplicate plugin name "${name}"`);
|
|
306
|
+
}
|
|
307
|
+
names.add(name);
|
|
308
|
+
return withIntegrationPluginOwner(
|
|
309
|
+
plugin,
|
|
310
|
+
createIntegrationPluginOwner(key, integration, "contribution"),
|
|
311
|
+
createIntegrationPluginContext(key, integration)
|
|
312
|
+
);
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
__name(resolveIntegrationPluginContributions, "resolveIntegrationPluginContributions");
|
|
316
|
+
function createIntegrationPluginOwner(key, integration, source) {
|
|
317
|
+
return Object.freeze({
|
|
318
|
+
key,
|
|
319
|
+
category: integration.category,
|
|
320
|
+
type: integration.type,
|
|
321
|
+
source,
|
|
322
|
+
serverRuntime: integration.serverRuntime !== false
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
__name(createIntegrationPluginOwner, "createIntegrationPluginOwner");
|
|
326
|
+
function createIntegrationPluginContext(key, integration) {
|
|
327
|
+
return Object.freeze({
|
|
328
|
+
key,
|
|
329
|
+
category: integration.category,
|
|
330
|
+
type: integration.type,
|
|
331
|
+
instance: integration.instance,
|
|
332
|
+
serverRuntime: integration.serverRuntime !== false
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
__name(createIntegrationPluginContext, "createIntegrationPluginContext");
|
|
336
|
+
function withIntegrationPluginOwner(plugin, owner, integration) {
|
|
337
|
+
const descriptors = Object.getOwnPropertyDescriptors(plugin);
|
|
338
|
+
Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_OWNER);
|
|
339
|
+
Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME);
|
|
340
|
+
const ownedPlugin = Object.create(Object.getPrototypeOf(plugin), descriptors);
|
|
341
|
+
Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_OWNER, { value: owner });
|
|
342
|
+
Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {
|
|
343
|
+
value: owner.serverRuntime
|
|
344
|
+
});
|
|
345
|
+
if (integration) {
|
|
346
|
+
setFarmPluginIntegrationContext(ownedPlugin, integration);
|
|
347
|
+
}
|
|
348
|
+
return ownedPlugin;
|
|
349
|
+
}
|
|
350
|
+
__name(withIntegrationPluginOwner, "withIntegrationPluginOwner");
|
|
270
351
|
function getIntegrationProviders(integrations) {
|
|
271
352
|
if (!integrations) {
|
|
272
353
|
return [];
|
|
@@ -1903,6 +1984,7 @@ function normalizeMatcher(matcher) {
|
|
|
1903
1984
|
__name(normalizeMatcher, "normalizeMatcher");
|
|
1904
1985
|
|
|
1905
1986
|
export {
|
|
1987
|
+
getFarmPluginIntegrationContext,
|
|
1906
1988
|
setRequestContext,
|
|
1907
1989
|
getRequestContext,
|
|
1908
1990
|
hasRequestContext,
|
|
@@ -1912,6 +1994,7 @@ export {
|
|
|
1912
1994
|
FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY,
|
|
1913
1995
|
defineIntegrationSchema,
|
|
1914
1996
|
getFarmIntegrationPluginServerRuntime,
|
|
1997
|
+
getFarmIntegrationPluginOwner,
|
|
1915
1998
|
createIntegrationRoute,
|
|
1916
1999
|
integrationRoute,
|
|
1917
2000
|
defineIntegration,
|
|
@@ -1928,4 +2011,4 @@ export {
|
|
|
1928
2011
|
getRegisteredIntegrationAPIManifest,
|
|
1929
2012
|
dispatchIntegrationRequest
|
|
1930
2013
|
};
|
|
1931
|
-
//# sourceMappingURL=chunk-
|
|
2014
|
+
//# sourceMappingURL=chunk-ZYDQS2TT.mjs.map
|