diff --git a/packages/queryable/behaviors/caching.ts b/packages/queryable/behaviors/caching.ts index d5baabd82..c88d402b4 100644 --- a/packages/queryable/behaviors/caching.ts +++ b/packages/queryable/behaviors/caching.ts @@ -97,7 +97,7 @@ export function Caching(props?: ICachingProps): TimelinePipe { if (cached === null) { // if we don't have a cached result we need to get it after the request is sent. Get the raw value (un-parsed) to store into cache - this.on.rawData(noInherit(async function (response) { + instance.on.rawData(noInherit(async function (response) { setCachedValue(response); })); diff --git a/packages/queryable/behaviors/parsers.ts b/packages/queryable/behaviors/parsers.ts index 5313faa38..6fe2fe264 100644 --- a/packages/queryable/behaviors/parsers.ts +++ b/packages/queryable/behaviors/parsers.ts @@ -26,7 +26,7 @@ export function TextParse(): TimelinePipe { export function BlobParse(): TimelinePipe { return parseBinderWithErrorCheck( async (response) => { - const binaryResponseBody = parseToAtob(await response.clone().text()); + const binaryResponseBody = parseToAtob(await response.text()); // handle batch responses for things that are base64, like photos https://github.com/pnp/pnpjs/issues/2825 if(binaryResponseBody){ // Create an array buffer from the binary string @@ -123,7 +123,12 @@ export function parseBinderWithErrorCheck(impl: (r: Response) => Promise): instance.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { if (response.ok && typeof result === "undefined") { - result = await impl(response); + const respClone = response.clone(); + + // https://github.com/node-fetch/node-fetch?tab=readme-ov-file#custom-highwatermark + const [implResult, raw] = await Promise.all([impl(response), respClone.text()]); + result = implResult; + (instance).emit.rawData(raw); } return [url, response, result]; diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index bc30a0158..b1db19f6f 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -180,10 +180,6 @@ export class Queryable extends Timeline implements IQu let response = await this.emit.send(requestUrl, init); log("Emitted send"); - log("Emitting rawData"); - this.emit.rawData(await response.clone().text()); - log("Emitted rawData"); - log("Emitting parse"); [requestUrl, response, result] = await this.emit.parse(requestUrl, response, result); log("Emitted parse");