1 | import { Plugin as EnvelopPlugin, OnExecuteHook, OnSubscribeHook, PromiseOrValue, RegisterContextErrorHandler, SetSchemaFn } from '@envelop/core';
|
2 | import { ExecutionResult } from '@graphql-tools/utils';
|
3 | import { ServerAdapterPlugin, type ServerAdapterInitialContext } from '@whatwg-node/server';
|
4 | import { YogaServer } from '../server.js';
|
5 | import { FetchAPI, GraphQLHTTPExtensions, GraphQLParams, MaybeArray, YogaInitialContext } from '../types.js';
|
6 | export type Plugin<PluginContext extends Record<string, any> = {}, TServerContext extends Record<string, any> = {}, TUserContext = {}> = EnvelopPlugin<YogaInitialContext & PluginContext> & ServerAdapterPlugin<TServerContext> & {
|
7 | |
8 |
|
9 |
|
10 | onExecute?: OnExecuteHook<YogaInitialContext & PluginContext & TUserContext>;
|
11 | |
12 |
|
13 |
|
14 |
|
15 | onSubscribe?: OnSubscribeHook<YogaInitialContext & PluginContext & TUserContext>;
|
16 | |
17 |
|
18 |
|
19 | onPluginInit?: OnPluginInitHook<YogaInitialContext & PluginContext & TUserContext>;
|
20 | } & {
|
21 | |
22 |
|
23 |
|
24 |
|
25 |
|
26 | onYogaInit?: OnYogaInitHook<TServerContext>;
|
27 | |
28 |
|
29 |
|
30 |
|
31 |
|
32 | onRequestParse?: OnRequestParseHook<TServerContext>;
|
33 | |
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | onParams?: OnParamsHook<TServerContext>;
|
43 | |
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | onExecutionResult?: OnExecutionResultHook<TServerContext>;
|
53 | |
54 |
|
55 |
|
56 |
|
57 |
|
58 | onResultProcess?: OnResultProcess<TServerContext>;
|
59 | };
|
60 | export type OnYogaInitHook<TServerContext extends Record<string, any>> = (payload: OnYogaInitEventPayload<TServerContext>) => void;
|
61 | export type OnYogaInitEventPayload<TServerContext extends Record<string, any>> = {
|
62 | yoga: YogaServer<TServerContext, any>;
|
63 | };
|
64 | export type OnRequestParseHook<TServerContext> = (payload: OnRequestParseEventPayload<TServerContext>) => PromiseOrValue<void | OnRequestParseHookResult>;
|
65 | export type RequestParser = (request: Request) => PromiseOrValue<GraphQLParams> | PromiseOrValue<GraphQLParams[]>;
|
66 | export interface OnRequestParseEventPayload<TServerContext> {
|
67 | request: Request;
|
68 | url: URL;
|
69 | requestParser: RequestParser | undefined;
|
70 | serverContext: TServerContext & ServerAdapterInitialContext;
|
71 | setRequestParser: (parser: RequestParser) => void;
|
72 | }
|
73 | export type OnRequestParseHookResult = {
|
74 | onRequestParseDone?: OnRequestParseDoneHook;
|
75 | };
|
76 | export type OnRequestParseDoneHook = (payload: OnRequestParseDoneEventPayload) => PromiseOrValue<void>;
|
77 | export interface OnRequestParseDoneEventPayload {
|
78 | requestParserResult: GraphQLParams | GraphQLParams[];
|
79 | setRequestParserResult: (params: GraphQLParams | GraphQLParams[]) => void;
|
80 | }
|
81 | export type OnParamsHook<TServerContext> = (payload: OnParamsEventPayload<TServerContext>) => PromiseOrValue<void>;
|
82 | export interface OnParamsEventPayload<TServerContext = Record<string, unknown>> {
|
83 | request: Request;
|
84 | params: GraphQLParams;
|
85 | setParams: (params: GraphQLParams) => void;
|
86 | paramsHandler: ParamsHandler<TServerContext>;
|
87 | setParamsHandler: (handler: ParamsHandler<TServerContext>) => void;
|
88 | setResult: (result: ExecutionResult | AsyncIterable<ExecutionResult>) => void;
|
89 | fetchAPI: FetchAPI;
|
90 | context: TServerContext;
|
91 | }
|
92 | export interface ParamsHandlerPayload<TServerContext> {
|
93 | request: Request;
|
94 | params: GraphQLParams;
|
95 | context: TServerContext & ServerAdapterInitialContext & YogaInitialContext;
|
96 | }
|
97 | export type ParamsHandler<TServerContext> = (payload: ParamsHandlerPayload<TServerContext>) => PromiseOrValue<ExecutionResult | AsyncIterable<ExecutionResult>>;
|
98 | export type OnResultProcess<TServerContext> = (payload: OnResultProcessEventPayload<TServerContext>) => PromiseOrValue<void>;
|
99 | export type ExecutionResultWithSerializer<TData = any, TExtensions = any> = ExecutionResult<TData, TExtensions> & {
|
100 | stringify?: (result: ExecutionResult<TData, TExtensions>) => string;
|
101 | };
|
102 | export type OnExecutionResultHook<TServerContext> = (payload: OnExecutionResultEventPayload<TServerContext>) => PromiseOrValue<void>;
|
103 | export interface OnExecutionResultEventPayload<TServerContext> {
|
104 | request: Request;
|
105 | result: ExecutionResultWithSerializer | AsyncIterable<ExecutionResultWithSerializer> | undefined;
|
106 | setResult(result: ExecutionResultWithSerializer | AsyncIterable<ExecutionResultWithSerializer>): void;
|
107 | context: TServerContext & ServerAdapterInitialContext & YogaInitialContext;
|
108 | }
|
109 | export type ResultProcessorInput = MaybeArray<ExecutionResultWithSerializer> | AsyncIterable<ExecutionResultWithSerializer<any, {
|
110 | http?: GraphQLHTTPExtensions;
|
111 | }>>;
|
112 | export type ResultProcessor = (result: ResultProcessorInput, fetchAPI: FetchAPI, acceptedMediaType: string) => PromiseOrValue<Response>;
|
113 | export interface OnResultProcessEventPayload<TServerContext> {
|
114 | request: Request;
|
115 | result: ResultProcessorInput;
|
116 | setResult(result: ResultProcessorInput): void;
|
117 | resultProcessor?: ResultProcessor;
|
118 | acceptableMediaTypes: string[];
|
119 | setResultProcessor(resultProcessor: ResultProcessor, acceptedMediaType: string): void;
|
120 | serverContext: TServerContext & ServerAdapterInitialContext;
|
121 | }
|
122 |
|
123 |
|
124 |
|
125 | export type OnPluginInitEventPayload<PluginContext extends Record<string, any>> = {
|
126 | |
127 |
|
128 |
|
129 | addPlugin: (newPlugin: Plugin<PluginContext>) => void;
|
130 | |
131 |
|
132 |
|
133 | plugins: Plugin<PluginContext>[];
|
134 | |
135 |
|
136 |
|
137 | setSchema: SetSchemaFn;
|
138 | |
139 |
|
140 |
|
141 | registerContextErrorHandler: RegisterContextErrorHandler;
|
142 | };
|
143 |
|
144 |
|
145 |
|
146 | export type OnPluginInitHook<ContextType extends Record<string, any>> = (options: OnPluginInitEventPayload<ContextType>) => void;
|