diff --git a/.changeset/pretty-terms-fix.md b/.changeset/pretty-terms-fix.md new file mode 100644 index 00000000000..3f0b06e5578 --- /dev/null +++ b/.changeset/pretty-terms-fix.md @@ -0,0 +1,16 @@ +--- +"@apollo/client": patch +--- + +Remove newly exported response iterator helpers that caused problems on some installs where `@types/node` was not available. + +**IMPORTANT** + +The following exports were added in version 3.8.0 that are removed with this patch. + +- `isAsyncIterableIterator` +- `isBlob` +- `isNodeReadableStream` +- `isNodeResponse` +- `isReadableStream` +- `isStreamableBlob` diff --git a/src/__tests__/__snapshots__/exports.ts.snap b/src/__tests__/__snapshots__/exports.ts.snap index e0dea8d0ba5..a26810bd632 100644 --- a/src/__tests__/__snapshots__/exports.ts.snap +++ b/src/__tests__/__snapshots__/exports.ts.snap @@ -427,8 +427,6 @@ Array [ "hasDirectives", "isApolloPayloadResult", "isArray", - "isAsyncIterableIterator", - "isBlob", "isDocumentNode", "isExecutionPatchIncrementalResult", "isExecutionPatchInitialResult", @@ -436,16 +434,12 @@ Array [ "isField", "isInlineFragment", "isMutationOperation", - "isNodeReadableStream", - "isNodeResponse", "isNonEmptyArray", "isNonNullObject", "isPlainObject", "isQueryOperation", - "isReadableStream", "isReference", "isStatefulPromise", - "isStreamableBlob", "isSubscriptionOperation", "iterateObserversSafely", "makeReference", diff --git a/src/link/http/__tests__/responseIteratorNoAsyncIterator.ts b/src/link/http/__tests__/responseIteratorNoAsyncIterator.ts index bab9a6024d5..2224b3c2cbe 100644 --- a/src/link/http/__tests__/responseIteratorNoAsyncIterator.ts +++ b/src/link/http/__tests__/responseIteratorNoAsyncIterator.ts @@ -15,10 +15,10 @@ import { Readable } from "stream"; // which do not execute when isAsyncIterableIterator is true // See: https://github.com/facebook/jest/issues/2582#issuecomment-655110424 -jest.mock("../../../utilities/common/responseIterator", () => ({ +jest.mock("../../../utilities/index.js", () => ({ __esModule: true, - ...jest.requireActual("../../../utilities/common/responseIterator"), - isAsyncIterableIterator: jest.fn(() => false), + ...jest.requireActual("../../../utilities/index.js"), + canUseAsyncIteratorSymbol: false, })); const sampleDeferredQuery = gql` diff --git a/src/link/http/responseIterator.ts b/src/link/http/responseIterator.ts index 3bcea8a863c..d629c99e7e7 100644 --- a/src/link/http/responseIterator.ts +++ b/src/link/http/responseIterator.ts @@ -4,20 +4,43 @@ */ import type { Response as NodeResponse } from "node-fetch"; -import { - isAsyncIterableIterator, - isBlob, - isNodeResponse, - isNodeReadableStream, - isReadableStream, - isStreamableBlob, -} from "../../utilities/index.js"; +import type { Readable as NodeReadableStream } from "stream"; +import { canUseAsyncIteratorSymbol } from "../../utilities/index.js"; import asyncIterator from "./iterators/async.js"; import nodeStreamIterator from "./iterators/nodeStream.js"; import promiseIterator from "./iterators/promise.js"; import readerIterator from "./iterators/reader.js"; +function isNodeResponse(value: any): value is NodeResponse { + return !!(value as NodeResponse).body; +} + +function isReadableStream(value: any): value is ReadableStream { + return !!(value as ReadableStream).getReader; +} + +function isAsyncIterableIterator( + value: any +): value is AsyncIterableIterator { + return !!( + canUseAsyncIteratorSymbol && + (value as AsyncIterableIterator)[Symbol.asyncIterator] + ); +} + +function isStreamableBlob(value: any): value is Blob { + return !!(value as Blob).stream; +} + +function isBlob(value: any): value is Blob { + return !!(value as Blob).arrayBuffer; +} + +function isNodeReadableStream(value: any): value is NodeReadableStream { + return !!(value as NodeReadableStream).pipe; +} + export function responseIterator( response: Response | NodeResponse ): AsyncIterableIterator { diff --git a/src/utilities/common/responseIterator.ts b/src/utilities/common/responseIterator.ts deleted file mode 100644 index 4e552816f94..00000000000 --- a/src/utilities/common/responseIterator.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { Response as NodeResponse } from "node-fetch"; -import type { Readable as NodeReadableStream } from "stream"; -import { canUseAsyncIteratorSymbol } from "./canUse.js"; - -export function isNodeResponse(value: any): value is NodeResponse { - return !!(value as NodeResponse).body; -} - -export function isReadableStream(value: any): value is ReadableStream { - return !!(value as ReadableStream).getReader; -} - -export function isAsyncIterableIterator( - value: any -): value is AsyncIterableIterator { - return !!( - canUseAsyncIteratorSymbol && - (value as AsyncIterableIterator)[Symbol.asyncIterator] - ); -} - -export function isStreamableBlob(value: any): value is Blob { - return !!(value as Blob).stream; -} - -export function isBlob(value: any): value is Blob { - return !!(value as Blob).arrayBuffer; -} - -export function isNodeReadableStream(value: any): value is NodeReadableStream { - return !!(value as NodeReadableStream).pipe; -} diff --git a/src/utilities/index.ts b/src/utilities/index.ts index de8cc10e99f..6462f639fea 100644 --- a/src/utilities/index.ts +++ b/src/utilities/index.ts @@ -119,7 +119,6 @@ export * from "./common/compact.js"; export * from "./common/makeUniqueId.js"; export * from "./common/stringifyForDisplay.js"; export * from "./common/mergeOptions.js"; -export * from "./common/responseIterator.js"; export * from "./common/incrementalResult.js"; export { omitDeep } from "./common/omitDeep.js";