From 1a989cda0547342eb452114d0b825b5df9b9b8df Mon Sep 17 00:00:00 2001 From: JLarky Date: Thu, 2 Mar 2023 21:25:25 -0700 Subject: [PATCH 1/4] fix mergeRequestInits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mergeRequestInits basically only returns empty object 🤷 --- packages/bling/src/utils/utils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/bling/src/utils/utils.ts b/packages/bling/src/utils/utils.ts index 9d74d8a..8c73b79 100644 --- a/packages/bling/src/utils/utils.ts +++ b/packages/bling/src/utils/utils.ts @@ -156,11 +156,9 @@ export function mergeHeaders(...objs: (Headers | HeadersInit | undefined)[]) { } export function mergeRequestInits(...objs: (RequestInit | undefined)[]) { - return Object.assign.call(null, [ - {}, - ...objs, - { headers: mergeHeaders(...objs.map((o) => o && o.headers)) }, - ]) + return Object.assign.call(null, {}, ...objs, { + headers: mergeHeaders(...objs.map((o) => o && o.headers)), + }) } export async function parseResponse(response: Response) { From ead0f3b9bf8a5151a3be806e1cfe9ea97ade4e5c Mon Sep 17 00:00:00 2001 From: JLarky Date: Thu, 2 Mar 2023 21:56:13 -0700 Subject: [PATCH 2/4] do not send body for GET --- packages/bling/src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bling/src/client.ts b/packages/bling/src/client.ts index 0af8bbb..7b49bac 100644 --- a/packages/bling/src/client.ts +++ b/packages/bling/src/client.ts @@ -78,7 +78,7 @@ const fetchMethods: CreateClientFetcherMethods = { resolvedHref, mergeRequestInits( baseInit, - payloadInit, + method === 'POST' ? payloadInit : undefined, defaultOpts?.request, opts?.request, ), From e9209fc183ca65f4b9eee84af3c7b2f5e0045bc1 Mon Sep 17 00:00:00 2001 From: JLarky Date: Thu, 2 Mar 2023 21:57:00 -0700 Subject: [PATCH 3/4] use `for in` instead of Object.assign - new Request satisfies RequestInit but you can't easily iterate over it - https://stackoverflow.com/a/75623336/74167 --- packages/bling/src/utils/utils.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/bling/src/utils/utils.ts b/packages/bling/src/utils/utils.ts index 8c73b79..74d36a3 100644 --- a/packages/bling/src/utils/utils.ts +++ b/packages/bling/src/utils/utils.ts @@ -156,9 +156,15 @@ export function mergeHeaders(...objs: (Headers | HeadersInit | undefined)[]) { } export function mergeRequestInits(...objs: (RequestInit | undefined)[]) { - return Object.assign.call(null, {}, ...objs, { - headers: mergeHeaders(...objs.map((o) => o && o.headers)), - }) + const out = {} as Record + for (const obj of objs) { + if (!obj) continue + for (const key in obj) { + out[key as keyof RequestInit] = obj[key as keyof RequestInit] + } + } + out.headers = mergeHeaders(...objs.map((o) => o && o.headers)) + return out as RequestInit } export async function parseResponse(response: Response) { From 386241e642657ef6efdb0842d1f9767bb103fe9f Mon Sep 17 00:00:00 2001 From: JLarky Date: Thu, 2 Mar 2023 22:04:34 -0700 Subject: [PATCH 4/4] use the same approach in mergeFetchOpts - I haven't tested that --- packages/bling/src/utils/utils.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/bling/src/utils/utils.ts b/packages/bling/src/utils/utils.ts index 74d36a3..6ac406e 100644 --- a/packages/bling/src/utils/utils.ts +++ b/packages/bling/src/utils/utils.ts @@ -208,13 +208,9 @@ export async function parseResponse(response: Response) { } export function mergeFetchOpts(...objs: (FetchFnCtxOptions | undefined)[]) { - return Object.assign.call(null, [ - {}, - ...objs, - { - request: mergeRequestInits(...objs.map((o) => o && o.request)), - }, - ]) + return Object.assign.call(null, {}, ...objs, { + request: mergeRequestInits(...objs.map((o) => o && o.request)), + }) } export function payloadRequestInit(