From e6f01802424eac9d95cd045c6216750882d3e987 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 17 May 2021 13:19:22 +0200 Subject: [PATCH 1/2] core-api: updated Observable type to support interop Signed-off-by: Patrik Oldsberg --- packages/core-api/src/lib/subjects.ts | 8 ++++++++ packages/core-api/src/types.ts | 6 ++++-- .../src/testUtils/apis/ErrorApi/MockErrorApi.ts | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/core-api/src/lib/subjects.ts b/packages/core-api/src/lib/subjects.ts index 9ebde6ebbc..5239e460af 100644 --- a/packages/core-api/src/lib/subjects.ts +++ b/packages/core-api/src/lib/subjects.ts @@ -53,6 +53,10 @@ export class PublishSubject ZenObservable.SubscriptionObserver >(); + [Symbol.observable]() { + return this; + } + get closed() { return this.isClosed; } @@ -148,6 +152,10 @@ export class BehaviorSubject ZenObservable.SubscriptionObserver >(); + [Symbol.observable]() { + return this; + } + get closed() { return this.isClosed; } diff --git a/packages/core-api/src/types.ts b/packages/core-api/src/types.ts index 13a8a72570..8782280be0 100644 --- a/packages/core-api/src/types.ts +++ b/packages/core-api/src/types.ts @@ -39,7 +39,7 @@ export type Subscription = { /** * Value indicating whether the subscription is closed. */ - readonly closed: Boolean; + readonly closed: boolean; }; /** @@ -51,12 +51,14 @@ export type Subscription = { * using many different observable implementations, such as zen-observable or RxJS 5. */ export type Observable = { + [Symbol.observable](): Observable; + /** * Subscribes to this observable to start receiving new values. */ subscribe(observer: Observer): Subscription; subscribe( - onNext: (value: T) => void, + onNext?: (value: T) => void, onError?: (error: Error) => void, onComplete?: () => void, ): Subscription; diff --git a/packages/test-utils/src/testUtils/apis/ErrorApi/MockErrorApi.ts b/packages/test-utils/src/testUtils/apis/ErrorApi/MockErrorApi.ts index 7bf50314d0..b90646201a 100644 --- a/packages/test-utils/src/testUtils/apis/ErrorApi/MockErrorApi.ts +++ b/packages/test-utils/src/testUtils/apis/ErrorApi/MockErrorApi.ts @@ -32,6 +32,10 @@ type Waiter = { const nullObservable = { subscribe: () => ({ unsubscribe: () => {}, closed: true }), + + [Symbol.observable]() { + return this; + }, }; export class MockErrorApi implements ErrorApi { From 61c3f927cc765d881c2f3456cec8f5312431182f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 17 May 2021 13:27:57 +0200 Subject: [PATCH 2/2] changeset: added changesets for Observable type update Signed-off-by: Patrik Oldsberg --- .changeset/chatty-books-buy.md | 13 +++++++++++++ .changeset/sweet-colts-teach.md | 5 +++++ 2 files changed, 18 insertions(+) create mode 100644 .changeset/chatty-books-buy.md create mode 100644 .changeset/sweet-colts-teach.md diff --git a/.changeset/chatty-books-buy.md b/.changeset/chatty-books-buy.md new file mode 100644 index 0000000000..5cf8083bf7 --- /dev/null +++ b/.changeset/chatty-books-buy.md @@ -0,0 +1,13 @@ +--- +'@backstage/core-api': patch +--- + +Updated the `Observable` type to provide interoperability with `Symbol.observable`, making it compatible with at least `zen-observable` and `RxJS 7`. + +In cases where this change breaks tests that mocked the `Observable` type, the following addition to the mock should fix the breakage: + +```ts + [Symbol.observable]() { + return this; + }, +``` diff --git a/.changeset/sweet-colts-teach.md b/.changeset/sweet-colts-teach.md new file mode 100644 index 0000000000..863c90eaa3 --- /dev/null +++ b/.changeset/sweet-colts-teach.md @@ -0,0 +1,5 @@ +--- +'@backstage/test-utils': patch +--- + +Updated `MockErrorApi` to work with new `Observable` type in `@backstage/core`.