Skip to content

Commit f6a4250

Browse files
committed
feat: minor correction and updated headers merge logic
1 parent 4055476 commit f6a4250

File tree

3 files changed

+15
-16
lines changed

3 files changed

+15
-16
lines changed

src/index.ts

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
AfterSourceHookFunctionPayload,
2626
BeforeSourceHookFunctionPayload,
2727
PLUGIN_HOOKS_ERROR_CODES,
28+
UpdateRequestFn,
2829
} from './types';
2930
import getBeforeSourceHookHandler from './handleBeforeSourceHooks';
3031
import type { YogaLogger, Plugin, YogaInitialContext } from 'graphql-yoga';
@@ -207,27 +208,19 @@ export default async function hooksPlugin(config: PluginConfig): Promise<HooksPl
207208
};
208209

209210
// Provide callback to update request
210-
const updateRequest = (modifications: RequestInit) => {
211+
const updateRequest: UpdateRequestFn = (modifications: RequestInit) => {
211212
const { headers: newHeaders, ...otherModifications } = modifications;
212-
213-
// Handle header merging properly
213+
// Handle header merging
214214
if (newHeaders) {
215215
const originalHeaders = options.headers || {};
216-
let mergedHeaders: Record<string, string> = {};
217-
218-
// Handle different header formats
219216
if (originalHeaders instanceof Headers) {
220-
originalHeaders.forEach((value, key) => {
221-
mergedHeaders[key] = value;
222-
});
223-
} else if (originalHeaders && typeof originalHeaders === 'object') {
224-
mergedHeaders = { ...(originalHeaders as Record<string, string>) };
217+
const headersObj = Object.fromEntries(originalHeaders.entries());
218+
options.headers = { ...headersObj, ...newHeaders };
219+
} else {
220+
options.headers = { ...originalHeaders, ...newHeaders };
225221
}
226-
// Merge new headers
227-
Object.assign(mergedHeaders, newHeaders);
228-
options.headers = mergedHeaders;
229222
}
230-
// Apply other modifications (including body with modified query)
223+
// Apply other modifications
231224
Object.assign(options, otherModifications);
232225
};
233226

src/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,10 @@ export enum HookStatus {
145145
ERROR = 'ERROR',
146146
}
147147

148+
/**
149+
* Type for the updateRequest callback function
150+
*/
151+
export type UpdateRequestFn = (modifications: RequestInit) => void;
152+
148153
// Export error codes for uniform error handling
149154
export { PLUGIN_HOOKS_ERROR_CODES, type PluginHooksErrorCode } from './errors';

src/utils/hookResolver.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import type {
1717
HookConfig,
1818
HookFunction,
1919
MemoizedFns,
20+
UpdateRequestFn,
2021
} from '../types';
2122
//@ts-expect-error The dynamic import is a workaround for cjs
2223
import importFn from '../dynamicImport';
@@ -57,7 +58,7 @@ export interface SourceHookExecConfig {
5758
payload: BeforeSourceHookFunctionPayload | AfterSourceHookFunctionPayload;
5859
hookType: 'beforeSource' | 'afterSource';
5960
sourceName: string;
60-
updateRequest?: (modifications: RequestInit) => void; // Optional callback for beforeSource
61+
updateRequest?: UpdateRequestFn; // Optional callback for beforeSource
6162
}
6263

6364
async function getHookFunction(

0 commit comments

Comments
 (0)