From aeab432759d284914bd66b35e0e8cdd29134b4d0 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 23 Aug 2021 20:01:26 -0400 Subject: [PATCH 1/3] Remove all traces of ZenObservable namespace. --- src/core/__tests__/QueryManager/links.ts | 6 +++--- src/core/__tests__/QueryManager/recycler.ts | 6 +++++- src/link/context/index.ts | 4 ++-- src/link/core/ApolloLink.ts | 4 ++-- src/link/http/__tests__/HttpLink.ts | 6 +++--- src/link/persisted-queries/index.ts | 9 +++++++-- src/link/retry/retryLink.ts | 10 +++++----- src/react/types/types.ts | 4 ++-- 8 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/core/__tests__/QueryManager/links.ts b/src/core/__tests__/QueryManager/links.ts index 83458658e01..e3024e75312 100644 --- a/src/core/__tests__/QueryManager/links.ts +++ b/src/core/__tests__/QueryManager/links.ts @@ -1,7 +1,7 @@ // externals import gql from 'graphql-tag'; -import { Observable } from '../../../utilities/observables/Observable'; +import { Observable, ObservableSubscription } from '../../../utilities/observables/Observable'; import { ApolloLink } from '../../../link/core'; import { InMemoryCache } from '../../../cache/inmemory/inMemoryCache'; @@ -104,7 +104,7 @@ describe('Link interactions', () => { }); let count = 0; - let four: ZenObservable.Subscription; + let four: ObservableSubscription; // first watch const one = observable.subscribe(result => count++); // second watch @@ -175,7 +175,7 @@ describe('Link interactions', () => { }); let count = 0; - let four: ZenObservable.Subscription; + let four: ObservableSubscription; // first watch const one = observable.subscribe(result => count++); // second watch diff --git a/src/core/__tests__/QueryManager/recycler.ts b/src/core/__tests__/QueryManager/recycler.ts index b2106411081..0a02cee0966 100644 --- a/src/core/__tests__/QueryManager/recycler.ts +++ b/src/core/__tests__/QueryManager/recycler.ts @@ -14,6 +14,7 @@ import { // core import { QueryManager } from '../../QueryManager'; import { ObservableQuery } from '../../ObservableQuery'; +import { ObservableSubscription } from '../../../utilities'; describe('Subscription lifecycles', () => { it('cleans up and reuses data like QueryRecycler wants', done => { @@ -48,7 +49,10 @@ describe('Subscription lifecycles', () => { fetchPolicy: 'cache-and-network', }); - const observableQueries: { observableQuery: ObservableQuery, subscription: ZenObservable.Subscription; }[] = []; + const observableQueries: Array<{ + observableQuery: ObservableQuery; + subscription: ObservableSubscription; + }> = []; const resubscribe = () => { const { observableQuery, subscription } = observableQueries.pop()!; diff --git a/src/link/context/index.ts b/src/link/context/index.ts index 67b94f13af6..8ae9b42d93e 100644 --- a/src/link/context/index.ts +++ b/src/link/context/index.ts @@ -1,5 +1,5 @@ import { ApolloLink, Operation, GraphQLRequest, NextLink } from '../core'; -import { Observable } from '../../utilities'; +import { Observable, ObservableSubscription } from '../../utilities'; export type ContextSetter = ( operation: GraphQLRequest, @@ -11,7 +11,7 @@ export function setContext(setter: ContextSetter): ApolloLink { const { ...request } = operation; return new Observable(observer => { - let handle: ZenObservable.Subscription; + let handle: ObservableSubscription; let closed = false; Promise.resolve(request) .then(req => setter(req, operation.getContext())) diff --git a/src/link/core/ApolloLink.ts b/src/link/core/ApolloLink.ts index 74483ab16fb..debfb54e165 100644 --- a/src/link/core/ApolloLink.ts +++ b/src/link/core/ApolloLink.ts @@ -1,6 +1,6 @@ import { InvariantError, invariant } from 'ts-invariant'; -import { Observable } from '../../utilities'; +import { Observable, Observer } from '../../utilities'; import { NextLink, Operation, @@ -143,7 +143,7 @@ export class ApolloLink { protected onError( error: any, - observer?: ZenObservable.Observer, + observer?: Observer, ): false | void { if (observer && observer.error) { observer.error(error); diff --git a/src/link/http/__tests__/HttpLink.ts b/src/link/http/__tests__/HttpLink.ts index d848021a36a..fc34a804198 100644 --- a/src/link/http/__tests__/HttpLink.ts +++ b/src/link/http/__tests__/HttpLink.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import fetchMock from 'fetch-mock'; import { print } from 'graphql'; -import { Observable } from '../../../utilities/observables/Observable'; +import { Observable, Observer, ObservableSubscription } from '../../../utilities/observables/Observable'; import { ApolloLink } from '../../core/ApolloLink'; import { execute } from '../../core/execute'; import { HttpLink } from '../HttpLink'; @@ -53,8 +53,8 @@ describe('HttpLink', () => { const data = { data: { hello: 'world' } }; const data2 = { data: { hello: 'everyone' } }; const mockError = { throws: new TypeError('mock me') }; - let subscriber: ZenObservable.Observer; - const subscriptions = new Set(); + let subscriber: Observer; + const subscriptions = new Set(); beforeEach(() => { fetchMock.restore(); diff --git a/src/link/persisted-queries/index.ts b/src/link/persisted-queries/index.ts index 2e57399d945..b2117e48b43 100644 --- a/src/link/persisted-queries/index.ts +++ b/src/link/persisted-queries/index.ts @@ -10,7 +10,12 @@ import { import { invariant } from 'ts-invariant'; import { ApolloLink, Operation } from '../core'; -import { Observable, Observer, compact } from '../../utilities'; +import { + Observable, + Observer, + ObservableSubscription, + compact, +} from '../../utilities'; export const VERSION = 1; @@ -147,7 +152,7 @@ export const createPersistedQueryLink = ( const { query } = operation; return new Observable((observer: Observer) => { - let subscription: ZenObservable.Subscription; + let subscription: ObservableSubscription; let retried = false; let originalFetchOptions: any; let setFetchOptions = false; diff --git a/src/link/retry/retryLink.ts b/src/link/retry/retryLink.ts index 46c36d50f64..1afa7ae9604 100644 --- a/src/link/retry/retryLink.ts +++ b/src/link/retry/retryLink.ts @@ -1,5 +1,5 @@ import { ApolloLink, Operation, FetchResult, NextLink } from '../core'; -import { Observable } from '../../utilities'; +import { Observable, Observer, ObservableSubscription } from '../../utilities'; import { DelayFunction, DelayFunctionOptions, @@ -34,8 +34,8 @@ class RetryableOperation { private error: any; private complete = false; private canceled = false; - private observers: (ZenObservable.Observer | null)[] = []; - private currentSubscription: ZenObservable.Subscription | null = null; + private observers: (Observer | null)[] = []; + private currentSubscription: ObservableSubscription | null = null; private timerId: number | undefined; constructor( @@ -51,7 +51,7 @@ class RetryableOperation { * If the operation has previously emitted other events, they will be * immediately triggered for the observer. */ - public subscribe(observer: ZenObservable.Observer) { + public subscribe(observer: Observer) { if (this.canceled) { throw new Error( `Subscribing to a retryable link that was canceled is not supported`, @@ -77,7 +77,7 @@ class RetryableOperation { * If no observers remain, the operation will stop retrying, and unsubscribe * from its downstream link. */ - public unsubscribe(observer: ZenObservable.Observer) { + public unsubscribe(observer: Observer) { const index = this.observers.indexOf(observer); if (index < 0) { throw new Error( diff --git a/src/react/types/types.ts b/src/react/types/types.ts index 3dbd527e6a0..36ba1993dc8 100644 --- a/src/react/types/types.ts +++ b/src/react/types/types.ts @@ -2,7 +2,7 @@ import { ReactNode } from 'react'; import { DocumentNode } from 'graphql'; import { TypedDocumentNode } from '@graphql-typed-document-node/core'; -import { Observable } from '../../utilities'; +import { Observable, ObservableSubscription } from '../../utilities'; import { FetchResult } from '../../link/core'; import { ApolloError } from '../../errors'; import { @@ -239,5 +239,5 @@ export interface SubscriptionDataOptions< export interface SubscriptionCurrentObservable { query?: Observable; - subscription?: ZenObservable.Subscription; + subscription?: ObservableSubscription; } From 4fc43f9ba19265ea84b7b4b505424f9401c5380e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 24 Aug 2021 13:26:37 -0400 Subject: [PATCH 2/3] Update to zen-observable-ts@1.2.0, removing @types/zen-observable. Includes https://github.com/apollographql/zen-observable-ts/pull/152. Should fix #8688. --- package-lock.json | 26 +++++++------------------- package.json | 2 +- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index e7c7dea9c8b..8a5bfa81707 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "symbol-observable": "^4.0.0", "ts-invariant": "^0.9.0", "tslib": "^2.3.0", - "zen-observable-ts": "^1.1.0" + "zen-observable-ts": "^1.2.0" }, "devDependencies": { "@babel/parser": "7.15.3", @@ -2429,11 +2429,6 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, - "node_modules/@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "node_modules/@wry/context": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.6.0.tgz", @@ -12055,11 +12050,10 @@ "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" }, "node_modules/zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.0.tgz", + "integrity": "sha512-3IklmJSChXaqAD2gPz6yKHThAnZL46D51x5EPpN/MHuPjrepVdSg3qI7f5fh1RT8Y+K46Owo9fpVuJiuJXLMMA==", "dependencies": { - "@types/zen-observable": "0.8.3", "zen-observable": "0.8.15" } } @@ -14043,11 +14037,6 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, - "@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "@wry/context": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.6.0.tgz", @@ -21702,11 +21691,10 @@ "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" }, "zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.0.tgz", + "integrity": "sha512-3IklmJSChXaqAD2gPz6yKHThAnZL46D51x5EPpN/MHuPjrepVdSg3qI7f5fh1RT8Y+K46Owo9fpVuJiuJXLMMA==", "requires": { - "@types/zen-observable": "0.8.3", "zen-observable": "0.8.15" } } diff --git a/package.json b/package.json index 3c9612d8499..54e4c20b02d 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "symbol-observable": "^4.0.0", "ts-invariant": "^0.9.0", "tslib": "^2.3.0", - "zen-observable-ts": "^1.1.0" + "zen-observable-ts": "^1.2.0" }, "devDependencies": { "@babel/parser": "7.15.3", From 9e69d06b67b5fc792e1ce45362991a61aec8eaeb Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 24 Aug 2021 15:24:10 -0400 Subject: [PATCH 3/3] Mention PR #8695 in CHANGELOG.md. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 508fb9ed302..72160e03cd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ - Calling `refetch` on a skipped query will have no effect (issue [#8270](https://github.com/apollographql/apollo-client/issues/8270)). - Prevent `onError` and `onCompleted` functions from firing continuously, and improving their polling behavior. +### Other Bugs Fixed + +- Update `zen-observable-ts` to eliminate transitive dependency on `@types/zen-observable`.
+ [@benjamn](https://github.com/benjamn) in [#8695](https://github.com/apollographql/apollo-client/pull/8695) + ## Apollo Client 3.4.9 (not yet released) ### Bug Fixes