diff --git a/spec/operators/multicast-spec.ts b/spec/operators/multicast-spec.ts index afbd6ff019..4f45e31fc4 100644 --- a/spec/operators/multicast-spec.ts +++ b/spec/operators/multicast-spec.ts @@ -1,20 +1,21 @@ import { expect } from 'chai'; import * as Rx from '../../src/Rx'; -import { hot, cold, expectObservable, expectSubscriptions } from '../helpers/marble-testing'; +import { hot, cold, expectObservable, expectSubscriptions, time } from '../helpers/marble-testing'; declare const type: Function; declare const asDiagram: Function; +declare const rxTestScheduler: Rx.TestScheduler; const Observable = Rx.Observable; const Subject = Rx.Subject; const ReplaySubject = Rx.ReplaySubject; /** @test {multicast} */ describe('Observable.prototype.multicast', () => { - asDiagram('multicast(() => new Subject())')('should mirror a simple source Observable', () => { + asDiagram('multicast(() => new Subject())')('should mirror a simple source Observable', () => { const source = cold('--1-2---3-4--5-|'); const sourceSubs = '^ !'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const expected = '--1-2---3-4--5-|'; expectObservable(multicasted).toBe(expected); @@ -23,12 +24,12 @@ describe('Observable.prototype.multicast', () => { multicasted.connect(); }); - it('should accept Subjects', (done: MochaDone) => { + it('should accept Subjects', (done) => { const expected = [1, 2, 3, 4]; const connectable = Observable.of(1, 2, 3, 4).multicast(new Subject()); - connectable.subscribe((x: number) => { expect(x).to.equal(expected.shift()); }, + connectable.subscribe((x) => { expect(x).to.equal(expected.shift()); }, (x) => { done(new Error('should not be called')); }, () => { @@ -38,7 +39,7 @@ describe('Observable.prototype.multicast', () => { connectable.connect(); }); - it('should multicast a ConnectableObservable', (done: MochaDone) => { + it('should multicast a ConnectableObservable', (done) => { const expected = [1, 2, 3, 4]; const source = new Subject(); @@ -55,7 +56,7 @@ describe('Observable.prototype.multicast', () => { source.complete(); replayed.do({ - next(x: number) { + next(x) { expect(x).to.equal(expected.shift()); }, complete() { @@ -65,12 +66,12 @@ describe('Observable.prototype.multicast', () => { .subscribe(null, done, done); }); - it('should accept Subject factory functions', (done: MochaDone) => { + it('should accept Subject factory functions', (done) => { const expected = [1, 2, 3, 4]; const connectable = Observable.of(1, 2, 3, 4).multicast(() => new Subject()); - connectable.subscribe((x: number) => { expect(x).to.equal(expected.shift()); }, + connectable.subscribe((x) => { expect(x).to.equal(expected.shift()); }, (x) => { done(new Error('should not be called')); }, () => { @@ -85,8 +86,8 @@ describe('Observable.prototype.multicast', () => { const sourceSubs = ['^ !', ' ^ !', ' ^ !']; - const multicasted = source.multicast(() => new Subject(), - x => x.zip(x, (a: string, b: string) => (parseInt(a) + parseInt(b)).toString())); + const multicasted = source.multicast(() => new Subject(), + x => x.zip(x, (a, b) => (parseInt(a) + parseInt(b)).toString())); const subscriber1 = hot('a| ').mergeMapTo(multicasted); const expected1 = '-2-4-6----8-|'; const subscriber2 = hot(' b| ').mergeMapTo(multicasted); @@ -105,8 +106,8 @@ describe('Observable.prototype.multicast', () => { const sourceSubs = ['^ !', ' ^ !', ' ^ !']; - const multicasted = source.multicast(() => new Subject(), - x => x.zip(x, (a: string, b: string) => (parseInt(a) + parseInt(b)).toString())); + const multicasted = source.multicast(() => new Subject(), + x => x.zip(x, (a, b) => (parseInt(a) + parseInt(b)).toString())); const expected1 = '-2-4-6----8-|'; const expected2 = ' -2-4-6----8-|'; const expected3 = ' -2-4-6----8-|'; @@ -125,7 +126,7 @@ describe('Observable.prototype.multicast', () => { const sourceSubs = ['^ !', ' ^ !', ' ^ !']; - const multicasted = source.multicast(() => new ReplaySubject(1), + const multicasted = source.multicast(() => new ReplaySubject(1), x => x.concat(x.takeLast(1))); const expected1 = '-1-2-3----4-(4|)'; const expected2 = ' -1-2-3----4-(4|)'; @@ -142,8 +143,8 @@ describe('Observable.prototype.multicast', () => { it('should do nothing if connect is not called, despite subscriptions', () => { const source = cold('--1-2---3-4--5-|'); - const sourceSubs = []; - const multicasted = source.multicast(() => new Subject()); + const sourceSubs: string[] = []; + const multicasted = source.multicast(() => new Subject()); const expected = '-'; expectObservable(multicasted).toBe(expected); @@ -153,7 +154,7 @@ describe('Observable.prototype.multicast', () => { it('should multicast the same values to multiple observers', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ !'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const subscriber1 = hot('a| ').mergeMapTo(multicasted); const expected1 = '-1-2-3----4-|'; const subscriber2 = hot(' b| ').mergeMapTo(multicasted); @@ -172,7 +173,7 @@ describe('Observable.prototype.multicast', () => { it('should multicast an error from the source to multiple observers', () => { const source = cold('-1-2-3----4-#'); const sourceSubs = '^ !'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const subscriber1 = hot('a| ').mergeMapTo(multicasted); const expected1 = '-1-2-3----4-#'; const subscriber2 = hot(' b| ').mergeMapTo(multicasted); @@ -192,7 +193,7 @@ describe('Observable.prototype.multicast', () => { 'but is unsubscribed explicitly and early', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const unsub = ' u '; const subscriber1 = hot('a| ').mergeMapTo(multicasted); const expected1 = '-1-2-3---- '; @@ -207,7 +208,7 @@ describe('Observable.prototype.multicast', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -219,7 +220,7 @@ describe('Observable.prototype.multicast', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; const multicasted = source - .mergeMap((x: string) => Observable.of(x)) + .mergeMap((x) => Observable.of(x)) .multicast(() => new Subject()); const subscriber1 = hot('a| ').mergeMapTo(multicasted); const expected1 = '-1-2-3---- '; @@ -235,7 +236,7 @@ describe('Observable.prototype.multicast', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -246,7 +247,7 @@ describe('Observable.prototype.multicast', () => { it('should multicast an empty source', () => { const source = cold('|'); const sourceSubs = '(^!)'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const expected = '|'; expectObservable(multicasted).toBe(expected); @@ -258,7 +259,7 @@ describe('Observable.prototype.multicast', () => { it('should multicast a never source', () => { const source = cold('-'); const sourceSubs = '^'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const expected = '-'; expectObservable(multicasted).toBe(expected); @@ -270,7 +271,7 @@ describe('Observable.prototype.multicast', () => { it('should multicast a throw source', () => { const source = cold('#'); const sourceSubs = '(^!)'; - const multicasted = source.multicast(() => new Subject()); + const multicasted = source.multicast(() => new Subject()); const expected = '#'; expectObservable(multicasted).toBe(expected); @@ -283,7 +284,7 @@ describe('Observable.prototype.multicast', () => { it('should connect when first subscriber subscribes', () => { const source = cold( '-1-2-3----4-|'); const sourceSubs = ' ^ !'; - const multicasted = source.multicast(() => new Subject()).refCount(); + const multicasted = source.multicast(() => new Subject()).refCount(); const subscriber1 = hot(' a| ').mergeMapTo(multicasted); const expected1 = ' -1-2-3----4-|'; const subscriber2 = hot(' b| ').mergeMapTo(multicasted); @@ -300,7 +301,7 @@ describe('Observable.prototype.multicast', () => { it('should disconnect when last subscriber unsubscribes', () => { const source = cold( '-1-2-3----4-|'); const sourceSubs = ' ^ ! '; - const multicasted = source.multicast(() => new Subject()).refCount(); + const multicasted = source.multicast(() => new Subject()).refCount(); const subscriber1 = hot(' a| ').mergeMapTo(multicasted); const unsub1 = ' ! '; const expected1 = ' -1-2-3-- '; @@ -314,7 +315,7 @@ describe('Observable.prototype.multicast', () => { }); it('should be retryable when cold source is synchronous', () => { - function subjectFactory() { return new Subject(); } + function subjectFactory() { return new Subject(); } const source = cold('(123#)'); const multicasted = source.multicast(subjectFactory).refCount(); const subscribe1 = 's '; @@ -370,7 +371,7 @@ describe('Observable.prototype.multicast', () => { }); it('should be repeatable when cold source is synchronous', () => { - function subjectFactory() { return new Subject(); } + function subjectFactory() { return new Subject(); } const source = cold('(123|)'); const multicasted = source.multicast(subjectFactory).refCount(); const subscribe1 = 's '; @@ -430,7 +431,7 @@ describe('Observable.prototype.multicast', () => { }); it('should be retryable', () => { - function subjectFactory() { return new Subject(); } + function subjectFactory() { return new Subject(); } const source = cold('-1-2-3----4-# '); const sourceSubs = ['^ ! ', ' ^ ! ', @@ -472,7 +473,7 @@ describe('Observable.prototype.multicast', () => { }); it('should be repeatable', () => { - function subjectFactory() { return new Subject(); } + function subjectFactory() { return new Subject(); } const source = cold('-1-2-3----4-| '); const sourceSubs = ['^ ! ', ' ^ ! ', @@ -518,12 +519,12 @@ describe('Observable.prototype.multicast', () => { }); }); - it('should multicast one observable to multiple observers', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should multicast one observable to multiple observers', (done) => { + const results1: string[] = []; + const results2: string[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -533,14 +534,14 @@ describe('Observable.prototype.multicast', () => { }); const connectable = source.multicast(() => { - return new Subject(); + return new Subject(); }); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results1.push(x); }); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -562,7 +563,7 @@ describe('Observable.prototype.multicast', () => { const source = Observable.from([1, 2, 3, 4]).multicast(subject); - source.subscribe((x: number) => { + source.subscribe((x) => { expect(x).to.equal(expected[i++]); }); @@ -571,19 +572,19 @@ describe('Observable.prototype.multicast', () => { }); describe('when given a subject factory', () => { - it('should allow you to reconnect by subscribing again', (done: MochaDone) => { + it('should allow you to reconnect by subscribing again', (done) => { const expected = [1, 2, 3, 4]; let i = 0; const source = Observable.of(1, 2, 3, 4).multicast(() => new Subject()); - source.subscribe((x: number) => { + source.subscribe((x) => { expect(x).to.equal(expected[i++]); }, null, () => { i = 0; - source.subscribe((x: number) => { + source.subscribe((x) => { expect(x).to.equal(expected[i++]); }, null, done); @@ -594,7 +595,7 @@ describe('Observable.prototype.multicast', () => { }); it('should not throw ObjectUnsubscribedError when used in ' + - 'a switchMap', (done: MochaDone) => { + 'a switchMap', (done) => { const source = Observable.of(1, 2, 3) .multicast(() => new Subject()) .refCount(); @@ -602,8 +603,8 @@ describe('Observable.prototype.multicast', () => { const expected = ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']; Observable.of('a', 'b', 'c') - .switchMap((letter: string) => source.map((n: number) => String(letter + n))) - .subscribe((x: string) => { + .switchMap((letter) => source.map((n) => String(letter + n))) + .subscribe((x) => { expect(x).to.equal(expected.shift()); }, (x) => { done(new Error('should not be called')); @@ -616,7 +617,7 @@ describe('Observable.prototype.multicast', () => { describe('when given a subject', () => { it('should not throw ObjectUnsubscribedError when used in ' + - 'a switchMap', (done: MochaDone) => { + 'a switchMap', (done) => { const source = Observable.of(1, 2, 3) .multicast(new Subject()) .refCount(); @@ -624,8 +625,8 @@ describe('Observable.prototype.multicast', () => { const expected = ['a1', 'a2', 'a3']; Observable.of('a', 'b', 'c') - .switchMap((letter: string) => source.map((n: number) => String(letter + n))) - .subscribe((x: string) => { + .switchMap((letter) => source.map((n) => String(letter + n))) + .subscribe((x) => { expect(x).to.equal(expected.shift()); }, (x) => { done(new Error('should not be called')); diff --git a/spec/operators/publish-spec.ts b/spec/operators/publish-spec.ts index 9354ee76cd..9110f2c2e8 100644 --- a/spec/operators/publish-spec.ts +++ b/spec/operators/publish-spec.ts @@ -3,7 +3,7 @@ import * as Rx from '../../src/Rx'; import { hot, cold, expectObservable, expectSubscriptions } from '../helpers/marble-testing'; declare function asDiagram(arg: string): Function; -declare const type; +declare const type: Function; const Observable = Rx.Observable; @@ -31,7 +31,7 @@ describe('Observable.prototype.publish', () => { it('should do nothing if connect is not called, despite subscriptions', () => { const source = cold('--1-2---3-4--5-|'); - const sourceSubs = []; + const sourceSubs: string[] = []; const published = source.publish(); const expected = '-'; @@ -115,7 +115,7 @@ describe('Observable.prototype.publish', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -127,7 +127,7 @@ describe('Observable.prototype.publish', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; const published = source - .mergeMap((x: any) => Observable.of(x)) + .mergeMap((x) => Observable.of(x)) .publish(); const subscriber1 = hot('a| ').mergeMapTo(published); const expected1 = '-1-2-3---- '; @@ -143,7 +143,7 @@ describe('Observable.prototype.publish', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -220,12 +220,12 @@ describe('Observable.prototype.publish', () => { }); }); - it('should emit completed when subscribed after completed', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should emit completed when subscribed after completed', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -236,7 +236,7 @@ describe('Observable.prototype.publish', () => { const connectable = source.publish(); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results1.push(x); }); @@ -249,7 +249,7 @@ describe('Observable.prototype.publish', () => { expect(results2).to.deep.equal([]); expect(subscriptions).to.equal(1); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results2.push(x); }, (x) => { done(new Error('should not be called')); @@ -295,12 +295,12 @@ describe('Observable.prototype.publish', () => { published.connect(); }); - it('should multicast one observable to multiple observers', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should multicast one observable to multiple observers', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -311,11 +311,11 @@ describe('Observable.prototype.publish', () => { const connectable = source.publish(); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results1.push(x); }); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -355,7 +355,7 @@ describe('Observable.prototype.publish', () => { /* tslint:disable:no-unused-variable */ const source = Rx.Observable.of(1, 2, 3); // TODO: https://github.com/ReactiveX/rxjs/issues/2972 - const result: Rx.ConnectableObservable = Rx.operators.publish()(source); + const result: Rx.ConnectableObservable = Rx.operators.publish()(source); /* tslint:enable:no-unused-variable */ }); diff --git a/spec/operators/publishBehavior-spec.ts b/spec/operators/publishBehavior-spec.ts index c6ed1d5c43..01f87bf602 100644 --- a/spec/operators/publishBehavior-spec.ts +++ b/spec/operators/publishBehavior-spec.ts @@ -3,7 +3,7 @@ import * as Rx from '../../src/Rx'; import { hot, cold, expectObservable, expectSubscriptions } from '../helpers/marble-testing'; declare function asDiagram(arg: string): Function; -declare const type; +declare const type: Function; const Observable = Rx.Observable; @@ -31,7 +31,7 @@ describe('Observable.prototype.publishBehavior', () => { it('should only emit default value if connect is not called, despite subscriptions', () => { const source = cold('--1-2---3-4--5-|'); - const sourceSubs = []; + const sourceSubs: string[] = []; const published = source.publishBehavior('0'); const expected = '0'; @@ -96,7 +96,7 @@ describe('Observable.prototype.publishBehavior', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -108,7 +108,7 @@ describe('Observable.prototype.publishBehavior', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; const published = source - .mergeMap((x: any) => Observable.of(x)) + .mergeMap((x) => Observable.of(x)) .publishBehavior('0'); const subscriber1 = hot('a| ').mergeMapTo(published); const expected1 = '01-2-3---- '; @@ -124,7 +124,7 @@ describe('Observable.prototype.publishBehavior', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -201,12 +201,12 @@ describe('Observable.prototype.publishBehavior', () => { }); }); - it('should emit completed when subscribed after completed', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should emit completed when subscribed after completed', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -276,12 +276,12 @@ describe('Observable.prototype.publishBehavior', () => { published.connect(); }); - it('should multicast one observable to multiple observers', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should multicast one observable to multiple observers', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -291,7 +291,7 @@ describe('Observable.prototype.publishBehavior', () => { const connectable = source.publishBehavior(0); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results1.push(x); }); @@ -301,7 +301,7 @@ describe('Observable.prototype.publishBehavior', () => { expect(results2).to.deep.equal([]); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -311,10 +311,10 @@ describe('Observable.prototype.publishBehavior', () => { done(); }); - it('should follow the RxJS 4 behavior and emit nothing to observer after completed', (done: MochaDone) => { - const results = []; + it('should follow the RxJS 4 behavior and emit nothing to observer after completed', (done) => { + const results: number[] = []; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { observer.next(1); observer.next(2); observer.next(3); @@ -326,7 +326,7 @@ describe('Observable.prototype.publishBehavior', () => { connectable.connect(); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results.push(x); }); diff --git a/spec/operators/publishLast-spec.ts b/spec/operators/publishLast-spec.ts index 8d66b1ff37..da863045cb 100644 --- a/spec/operators/publishLast-spec.ts +++ b/spec/operators/publishLast-spec.ts @@ -3,7 +3,7 @@ import * as Rx from '../../src/Rx'; import { hot, cold, expectObservable, expectSubscriptions } from '../helpers/marble-testing'; declare function asDiagram(arg: string): Function; -declare const type; +declare const type: Function; const Observable = Rx.Observable; @@ -31,7 +31,7 @@ describe('Observable.prototype.publishLast', () => { it('should do nothing if connect is not called, despite subscriptions', () => { const source = cold('--1-2---3-4--5-|'); - const sourceSubs = []; + const sourceSubs: string[] = []; const published = source.publishLast(); const expected = '-'; @@ -96,7 +96,7 @@ describe('Observable.prototype.publishLast', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -108,7 +108,7 @@ describe('Observable.prototype.publishLast', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; const published = source - .mergeMap((x: string) => Observable.of(x)) + .mergeMap((x) => Observable.of(x)) .publishLast(); const subscriber1 = hot('a| ').mergeMapTo(published); const expected1 = '---------- '; @@ -124,7 +124,7 @@ describe('Observable.prototype.publishLast', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -220,12 +220,12 @@ describe('Observable.prototype.publishLast', () => { published.connect(); }); - it('should multicast one observable to multiple observers', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should multicast one observable to multiple observers', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -236,11 +236,11 @@ describe('Observable.prototype.publishLast', () => { const connectable = source.publishLast(); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results1.push(x); }); - connectable.subscribe((x: any) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -266,7 +266,7 @@ describe('Observable.prototype.publishLast', () => { /* tslint:disable:no-unused-variable */ const source = Rx.Observable.of(1, 2, 3); // TODO: https://github.com/ReactiveX/rxjs/issues/2972 - const result: Rx.ConnectableObservable = Rx.operators.publishLast()(source); + const result: Rx.ConnectableObservable<{}> = Rx.operators.publishLast()(source); /* tslint:enable:no-unused-variable */ }); }); diff --git a/spec/operators/publishReplay-spec.ts b/spec/operators/publishReplay-spec.ts index b0b99ae426..ba70605883 100644 --- a/spec/operators/publishReplay-spec.ts +++ b/spec/operators/publishReplay-spec.ts @@ -1,9 +1,10 @@ import { expect } from 'chai'; import * as Rx from '../../src/Rx'; import { hot, cold, expectObservable, expectSubscriptions } from '../helpers/marble-testing'; +import { throwError } from '../../src/internal/observable/throwError'; declare function asDiagram(arg: string): Function; -declare const type; +declare const type: Function; const Observable = Rx.Observable; @@ -31,7 +32,7 @@ describe('Observable.prototype.publishReplay', () => { it('should do nothing if connect is not called, despite subscriptions', () => { const source = cold('--1-2---3-4--5-|'); - const sourceSubs = []; + const sourceSubs: string[] = []; const published = source.publishReplay(1); const expected = '-'; @@ -115,7 +116,7 @@ describe('Observable.prototype.publishReplay', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -127,7 +128,7 @@ describe('Observable.prototype.publishReplay', () => { const source = cold('-1-2-3----4-|'); const sourceSubs = '^ ! '; const published = source - .mergeMap((x: any) => Observable.of(x)) + .mergeMap((x) => Observable.of(x)) .publishReplay(1); const subscriber1 = hot('a| ').mergeMapTo(published); const expected1 = '-1-2-3---- '; @@ -143,7 +144,7 @@ describe('Observable.prototype.publishReplay', () => { expectSubscriptions(source.subscriptions).toBe(sourceSubs); // Set up unsubscription action - let connection; + let connection: Rx.Subscription; expectObservable(hot(unsub).do(() => { connection.unsubscribe(); })).toBe(unsub); @@ -220,12 +221,12 @@ describe('Observable.prototype.publishReplay', () => { }); }); - it('should multicast one observable to multiple observers', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should multicast one observable to multiple observers', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -236,10 +237,10 @@ describe('Observable.prototype.publishReplay', () => { const connectable = source.publishReplay(); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results1.push(x); }); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -254,12 +255,12 @@ describe('Observable.prototype.publishReplay', () => { done(); }); - it('should replay as many events as specified by the bufferSize', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should replay as many events as specified by the bufferSize', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -270,7 +271,7 @@ describe('Observable.prototype.publishReplay', () => { const connectable = source.publishReplay(2); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results1.push(x); }); @@ -279,7 +280,7 @@ describe('Observable.prototype.publishReplay', () => { connectable.connect(); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results2.push(x); }); @@ -291,11 +292,11 @@ describe('Observable.prototype.publishReplay', () => { it('should emit replayed values and resubscribe to the source when ' + 'reconnected without source completion', () => { - const results1 = []; - const results2 = []; + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -305,7 +306,7 @@ describe('Observable.prototype.publishReplay', () => { }); const connectable = source.publishReplay(2); - const subscription1 = connectable.subscribe((x: number) => { + const subscription1 = connectable.subscribe((x) => { results1.push(x); }); @@ -319,7 +320,7 @@ describe('Observable.prototype.publishReplay', () => { expect(results2).to.deep.equal([]); expect(subscriptions).to.equal(1); - const subscription2 = connectable.subscribe((x: number) => { + const subscription2 = connectable.subscribe((x) => { results2.push(x); }); @@ -331,12 +332,12 @@ describe('Observable.prototype.publishReplay', () => { expect(subscriptions).to.equal(2); }); - it('should emit replayed values plus completed when subscribed after completed', (done: MochaDone) => { - const results1 = []; - const results2 = []; + it('should emit replayed values plus completed when subscribed after completed', (done) => { + const results1: number[] = []; + const results2: number[] = []; let subscriptions = 0; - const source = new Observable((observer: Rx.Observer) => { + const source = new Observable((observer) => { subscriptions++; observer.next(1); observer.next(2); @@ -347,7 +348,7 @@ describe('Observable.prototype.publishReplay', () => { const connectable = source.publishReplay(2); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results1.push(x); }); @@ -360,7 +361,7 @@ describe('Observable.prototype.publishReplay', () => { expect(results2).to.deep.equal([]); expect(subscriptions).to.equal(1); - connectable.subscribe((x: number) => { + connectable.subscribe((x) => { results2.push(x); }, (x) => { done(new Error('should not be called')); @@ -409,7 +410,7 @@ describe('Observable.prototype.publishReplay', () => { it('should mirror a simple source Observable with selector', () => { const values = {a: 2, b: 4, c: 6, d: 8}; - const selector = observable => observable.map(v => 2 * v); + const selector = (observable: Rx.Observable) => observable.map(v => 2 * +v); const source = cold('--1-2---3-4---|'); const sourceSubs = '^ !'; const published = source.publishReplay(1, Number.POSITIVE_INFINITY, selector); @@ -434,7 +435,7 @@ describe('Observable.prototype.publishReplay', () => { it('should emit an error when the selector returns an Observable that emits an error', () => { const error = "It's broken"; const innerObservable = cold('--5-6----#', undefined, error); - const selector = observable => observable.mergeMapTo(innerObservable); + const selector = (observable: Rx.Observable) => observable.mergeMapTo(innerObservable); const source = cold('--1--2---3---|'); const sourceSubs = '^ !'; const published = source.publishReplay(1, Number.POSITIVE_INFINITY, selector); @@ -468,7 +469,7 @@ describe('Observable.prototype.publishReplay', () => { it('should emit error when the selector returns Observable.throw', () => { const error = "It's broken"; - const selector = () => Observable.throw(error); + const selector = () => throwError(error); const source = cold('--1--2---3---|'); const sourceSubs = '(^!)'; const published = source.publishReplay(1, Number.POSITIVE_INFINITY, selector); @@ -503,7 +504,7 @@ describe('Observable.prototype.publishReplay', () => { /* tslint:disable:no-unused-variable */ const source = Rx.Observable.of(1, 2, 3); // TODO: https://github.com/ReactiveX/rxjs/issues/2972 - const result: Rx.ConnectableObservable = Rx.operators.publishReplay(1)(source); + const result: Rx.ConnectableObservable = Rx.operators.publishReplay(1)(source); /* tslint:enable:no-unused-variable */ }); diff --git a/src/internal/operators/multicast.ts b/src/internal/operators/multicast.ts index 2dbe4bfce8..ba5f20159d 100644 --- a/src/internal/operators/multicast.ts +++ b/src/internal/operators/multicast.ts @@ -7,7 +7,9 @@ import { FactoryOrValue, MonoTypeOperatorFunction, OperatorFunction, UnaryFuncti /* tslint:disable:max-line-length */ export function multicast(subjectOrSubjectFactory: FactoryOrValue>): UnaryFunction, ConnectableObservable>; +export function multicast(SubjectFactory: (this: Observable) => Subject): UnaryFunction, ConnectableObservable>; export function multicast(SubjectFactory: (this: Observable) => Subject, selector?: MonoTypeOperatorFunction): MonoTypeOperatorFunction; +export function multicast(SubjectFactory: (this: Observable) => Subject): UnaryFunction, ConnectableObservable>; export function multicast(SubjectFactory: (this: Observable) => Subject, selector?: OperatorFunction): OperatorFunction; /* tslint:enable:max-line-length */ diff --git a/src/internal/operators/publish.ts b/src/internal/operators/publish.ts index 25c8b8e543..b727666818 100644 --- a/src/internal/operators/publish.ts +++ b/src/internal/operators/publish.ts @@ -6,8 +6,8 @@ import { MonoTypeOperatorFunction, OperatorFunction, UnaryFunction } from '../.. /* tslint:disable:max-line-length */ export function publish(): UnaryFunction, ConnectableObservable>; -export function publish(selector: MonoTypeOperatorFunction): MonoTypeOperatorFunction; export function publish(selector: OperatorFunction): OperatorFunction; +export function publish(selector: MonoTypeOperatorFunction): MonoTypeOperatorFunction; /* tslint:enable:max-line-length */ /** diff --git a/src/internal/operators/publishReplay.ts b/src/internal/operators/publishReplay.ts index 9b18f6c217..d81a33bb1c 100644 --- a/src/internal/operators/publishReplay.ts +++ b/src/internal/operators/publishReplay.ts @@ -7,14 +7,14 @@ import { UnaryFunction, MonoTypeOperatorFunction, OperatorFunction } from '../.. /* tslint:disable:max-line-length */ export function publishReplay(bufferSize?: number, windowTime?: number, scheduler?: IScheduler): UnaryFunction, ConnectableObservable>; -export function publishReplay(bufferSize?: number, windowTime?: number, selector?: MonoTypeOperatorFunction, scheduler?: IScheduler): MonoTypeOperatorFunction; export function publishReplay(bufferSize?: number, windowTime?: number, selector?: OperatorFunction, scheduler?: IScheduler): OperatorFunction; +export function publishReplay(bufferSize?: number, windowTime?: number, selector?: MonoTypeOperatorFunction, scheduler?: IScheduler): MonoTypeOperatorFunction; /* tslint:enable:max-line-length */ export function publishReplay(bufferSize?: number, windowTime?: number, selectorOrScheduler?: IScheduler | OperatorFunction, - scheduler?: IScheduler): UnaryFunction, ConnectableObservable | Observable> { + scheduler?: IScheduler): UnaryFunction, ConnectableObservable> { if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') { scheduler = selectorOrScheduler; @@ -23,5 +23,5 @@ export function publishReplay(bufferSize?: number, const selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined; const subject = new ReplaySubject(bufferSize, windowTime, scheduler); - return (source: Observable) => multicast(() => subject, selector)(source) as Observable | ConnectableObservable; + return (source: Observable) => multicast(() => subject, selector)(source) as ConnectableObservable; } diff --git a/src/internal/patching/operator/multicast.ts b/src/internal/patching/operator/multicast.ts index d84d6ae620..0396f60fcf 100644 --- a/src/internal/patching/operator/multicast.ts +++ b/src/internal/patching/operator/multicast.ts @@ -6,8 +6,10 @@ import { FactoryOrValue, MonoTypeOperatorFunction, OperatorFunction } from '../. /* tslint:disable:max-line-length */ export function multicast(this: Observable, subjectOrSubjectFactory: FactoryOrValue>): ConnectableObservable; -export function multicast(SubjectFactory: (this: Observable) => Subject, selector?: MonoTypeOperatorFunction): Observable; -export function multicast(SubjectFactory: (this: Observable) => Subject, selector?: OperatorFunction): Observable; +export function multicast(SubjectFactory: (this: Observable) => Subject): ConnectableObservable; +export function multicast(SubjectFactory: (this: Observable) => Subject, selector: MonoTypeOperatorFunction): Observable; +export function multicast(SubjectFactory: (this: Observable) => Subject): ConnectableObservable; +export function multicast(SubjectFactory: (this: Observable) => Subject, selector: OperatorFunction): Observable; /* tslint:enable:max-line-length */ /** @@ -105,6 +107,6 @@ export function multicast(SubjectFactory: (this: Observable) => Subject * @owner Observable */ export function multicast(this: Observable, subjectOrSubjectFactory: Subject | (() => Subject), - selector?: (source: Observable) => Observable): Observable | ConnectableObservable { + selector?: (source: Observable) => Observable): ConnectableObservable | Observable { return higherOrder(subjectOrSubjectFactory, selector)(this); } diff --git a/src/internal/patching/operator/publish.ts b/src/internal/patching/operator/publish.ts index 796f521c35..cd7a0b5a87 100644 --- a/src/internal/patching/operator/publish.ts +++ b/src/internal/patching/operator/publish.ts @@ -5,8 +5,8 @@ import { publish as higherOrder } from '../../operators/publish'; /* tslint:disable:max-line-length */ export function publish(this: Observable): ConnectableObservable; -export function publish(this: Observable, selector: (source: Observable) => Observable): Observable; export function publish(this: Observable, selector: (source: Observable) => Observable): Observable; +export function publish(this: Observable, selector: (source: Observable) => Observable): Observable; /* tslint:enable:max-line-length */ /** diff --git a/src/internal/patching/operator/publishReplay.ts b/src/internal/patching/operator/publishReplay.ts index e0266febe1..4406b6f99b 100644 --- a/src/internal/patching/operator/publishReplay.ts +++ b/src/internal/patching/operator/publishReplay.ts @@ -6,8 +6,8 @@ import { OperatorFunction, MonoTypeOperatorFunction } from '../../../internal/ty /* tslint:disable:max-line-length */ export function publishReplay(this: Observable, bufferSize?: number, windowTime?: number, scheduler?: IScheduler): ConnectableObservable; -export function publishReplay(this: Observable, bufferSize?: number, windowTime?: number, selector?: MonoTypeOperatorFunction, scheduler?: IScheduler): Observable; export function publishReplay(this: Observable, bufferSize?: number, windowTime?: number, selector?: OperatorFunction): Observable; +export function publishReplay(this: Observable, bufferSize?: number, windowTime?: number, selector?: MonoTypeOperatorFunction, scheduler?: IScheduler): Observable; /* tslint:enable:max-line-length */ /**