diff --git a/.changeset/popular-chefs-laugh.md b/.changeset/popular-chefs-laugh.md new file mode 100644 index 0000000..b40b782 --- /dev/null +++ b/.changeset/popular-chefs-laugh.md @@ -0,0 +1,6 @@ +--- +"@grammarly/focal-atom": minor +"@grammarly/focal": minor +--- + +Update peer dependency to include rxjs versions up to 7.x diff --git a/packages/examples/all/package.json b/packages/examples/all/package.json index 2c18b8e..cc37432 100644 --- a/packages/examples/all/package.json +++ b/packages/examples/all/package.json @@ -33,7 +33,7 @@ "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "redbox-react": "^1.3.0", - "rxjs": "6.3.3", + "rxjs": "^7.8.1", "style-loader": "^1.0.0", "todomvc-app-css": "^2.0.6", "ts-loader": "8.2.0", diff --git a/packages/examples/todomvc/package.json b/packages/examples/todomvc/package.json index c9ab6cc..c872ad3 100644 --- a/packages/examples/todomvc/package.json +++ b/packages/examples/todomvc/package.json @@ -32,7 +32,7 @@ "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "redbox-react": "^1.3.0", - "rxjs": "6.3.3", + "rxjs": "^7.8.1", "todomvc-app-css": "^2.0.6", "ts-loader": "8.2.0", "typescript": "^4.7.4", diff --git a/packages/focal-atom/package.json b/packages/focal-atom/package.json index bad0300..87f01a2 100644 --- a/packages/focal-atom/package.json +++ b/packages/focal-atom/package.json @@ -89,11 +89,11 @@ "@types/jest": "^24.0.20", "@types/node": "^18.0.0", "jest": "^28.1.1", - "rxjs": "6.3.3", + "rxjs": "^7.8.1", "ts-jest": "^28.0.5", "typescript": "^4.7.4" }, "peerDependencies": { - "rxjs": ">= 6.3.3 < 7.0.0-0" + "rxjs": ">= 6.3.3 < 8.0.0-0" } } diff --git a/packages/focal-atom/src/atom/base.ts b/packages/focal-atom/src/atom/base.ts index 1b64ae2..145e6fa 100644 --- a/packages/focal-atom/src/atom/base.ts +++ b/packages/focal-atom/src/atom/base.ts @@ -2,7 +2,16 @@ import { Lens, Prism, PropExpr } from './../lens' import { Option } from './../utils' import { structEq } from './../equals' -import { Observable, Subscriber, Subscription, BehaviorSubject, combineLatest } from 'rxjs' +import { Observable, Subscription, BehaviorSubject, combineLatest, Observer } from 'rxjs' + +/** Parameters of the implementation of the overloaded `Subscribable.subscribe` method. */ +type SubscribeParameters = readonly [ + observerOrNext?: Partial> | ((value: T) => void), +] | readonly [ + next?: ((value: T) => void) | null, + error?: ((error: any) => void) | null, + complete?: (() => void) | null +] /** * Read-only atom. @@ -371,7 +380,13 @@ class LensedAtom extends AbstractAtom { private _refCount = 0 // Rx method overrides - _subscribe(subscriber: Subscriber) { + subscribe(observerOrNext?: Partial> | ((value: TDest) => void)): Subscription + subscribe( + next?: ((value: TDest) => void) | null, + error?: ((error: any) => void) | null, + complete?: (() => void) | null + ): Subscription + subscribe(...args: SubscribeParameters) { if (!this._subscription) { this._subscription = this._source.subscribe(x => this._onSourceValue(x)) } @@ -383,7 +398,7 @@ class LensedAtom extends AbstractAtom { this._subscription = null } }) - sub.add(super._subscribe(subscriber)) + sub.add(super.subscribe(...(args as [Observer]))) return sub } @@ -440,7 +455,13 @@ class AtomViewImpl extends AbstractReadOnlyAtom { private _refCount = 0 // Rx method overrides - _subscribe(subscriber: Subscriber) { + subscribe(observerOrNext?: Partial> | ((value: TDest) => void)): Subscription + subscribe( + next?: ((value: TDest) => void) | null, + error?: ((error: any) => void) | null, + complete?: (() => void) | null + ): Subscription + subscribe(...args: SubscribeParameters) { if (!this._subscription) { this._subscription = this._source.subscribe(x => this._onSourceValue(x)) } @@ -452,7 +473,7 @@ class AtomViewImpl extends AbstractReadOnlyAtom { this._subscription = null } }) - sub.add(super._subscribe(subscriber)) + sub.add(super.subscribe(...(args as [Observer]))) return sub } @@ -510,7 +531,13 @@ export class CombinedAtomViewImpl extends AbstractReadOnlyAtom private _refCount = 0 // Rx method overrides - _subscribe(subscriber: Subscriber) { + subscribe(observerOrNext?: Partial> | ((value: TResult) => void)): Subscription + subscribe( + next?: ((value: TResult) => void) | null, + error?: ((error: any) => void) | null, + complete?: (() => void) | null + ): Subscription + subscribe(...args: SubscribeParameters) { if (!this._subscription) { this._subscription = combineLatest(this._sources) .subscribe(xs => this._onSourceValues(xs)) @@ -523,7 +550,7 @@ export class CombinedAtomViewImpl extends AbstractReadOnlyAtom this._subscription = null } }) - sub.add(super._subscribe(subscriber)) + sub.add(super.subscribe(...(args as [Observer]))) return sub } diff --git a/packages/focal-atom/test/atom.test.ts b/packages/focal-atom/test/atom.test.ts index 544f6a3..60722a4 100644 --- a/packages/focal-atom/test/atom.test.ts +++ b/packages/focal-atom/test/atom.test.ts @@ -744,7 +744,7 @@ describe('atom', () => { describe('fromObservable', () => { test('emits atom', async () => { const a = await Atom.fromObservable(from([1])).pipe(take(1)).toPromise() - expect(a.get()).toEqual(1) + expect(a?.get()).toEqual(1) }) test('emits atom once', async () => { @@ -755,7 +755,7 @@ describe('atom', () => { from(['hello']) ).pipe(take(2), toArray()).toPromise() - expect(a[1]).toEqual('hello') + expect(a?.[1]).toEqual('hello') }) test('does not subscribe to source immediately', () => { diff --git a/packages/focal/package.json b/packages/focal/package.json index 26e3c78..f8ca6a5 100644 --- a/packages/focal/package.json +++ b/packages/focal/package.json @@ -93,7 +93,7 @@ "jest-environment-jsdom": "^28.1.1", "react": "^18.0.0", "react-dom": "^18.0.0", - "rxjs": "6.3.3", + "rxjs": "^7.8.1", "ts-jest": "^28.0.5", "typescript": "^4.7.4" }, @@ -105,6 +105,6 @@ "@types/react-dom": ">= 18.0.0 < 19.0.0-0", "react": ">= 18.0.0 < 19.0.0-0", "react-dom": ">= 18.0.0 < 19.0.0-0", - "rxjs": ">= 6.3.3 < 7.0.0-0" + "rxjs": ">= 6.3.3 < 8.0.0-0" } } diff --git a/packages/focal/src/react/react.ts b/packages/focal/src/react/react.ts index 2b2878e..b94bc10 100644 --- a/packages/focal/src/react/react.ts +++ b/packages/focal/src/react/react.ts @@ -606,9 +606,12 @@ export function classes( filterClassNames(cs || []).map(x => // @TODO optimize: unnecessary Observable.of // can we actually already just remove this? - !(x instanceof Observable) ? of(x) : x + + // we check if x is a string because after `filterClassNames` + // it can be only a string as non-observable value; otherwise it is an `ObservableInput` + typeof x === 'string' ? of(x) : x ), - (...cs: ClassNameLike[]) => { + (...cs) => { const filtered = filterClassNames(cs || []) return filtered.length > 0 diff --git a/packages/test/package.json b/packages/test/package.json index 8b6d6fa..96b491d 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -28,7 +28,7 @@ "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "redbox-react": "^1.3.0", - "rxjs": "6.3.3", + "rxjs": "^7.8.1", "todomvc-app-css": "^2.0.6", "ts-loader": "8.2.0", "typescript": "^4.7.4", diff --git a/yarn.lock b/yarn.lock index afb9d2a..8bfa8b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5115,12 +5115,12 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: - tslib "^1.9.0" + tslib "^2.1.0" safe-array-concat@^1.0.1: version "1.0.1" @@ -5779,11 +5779,16 @@ ts-loader@8.2.0: micromatch "^4.0.0" semver "^7.3.4" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslint@5.20.0: version "5.20.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.0.tgz#fac93bfa79568a5a24e7be9cdde5e02b02d00ec1"