diff --git a/docs_app/src/assets/images/marble-diagrams/pairs.png b/docs_app/src/assets/images/marble-diagrams/pairs.png deleted file mode 100644 index 4a514e0cd3a..00000000000 Binary files a/docs_app/src/assets/images/marble-diagrams/pairs.png and /dev/null differ diff --git a/spec-dtslint/operators/pairs-spec.ts b/spec-dtslint/operators/pairs-spec.ts deleted file mode 100644 index 8f56ce364ef..00000000000 --- a/spec-dtslint/operators/pairs-spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** @prettier */ -import { pairs, asyncScheduler } from 'rxjs'; - -describe('pairs', () => { - it('should work unscheduled', () => { - const o1 = pairs({ foo: 1, bar: 2 }); // $ExpectType Observable<["foo" | "bar", number]> - const o2 = pairs([1, 2, 3, 4]); // $ExpectType Observable<[string, number]> - const o3 = pairs(123); // $ExpectType Observable<[never, never]> - const o4 = pairs('blah'); // $ExpectType Observable<[string, string]> - const o5 = pairs({}); // $ExpectType Observable<[never, never]> - const o6 = pairs(true); // $ExpectType Observable<[never, never]> - const o7 = pairs(null); // $ExpectError - const o8 = pairs(undefined); // $ExpectError - }); - - it('should work scheduled', () => { - const o1 = pairs({ foo: 1, bar: 2 }, asyncScheduler); // $ExpectType Observable<["foo" | "bar", number]> - const o2 = pairs([1, 2, 3, 4], asyncScheduler); // $ExpectType Observable<[string, number]> - const o3 = pairs(123, asyncScheduler); // $ExpectType Observable<[never, never]> - const o4 = pairs('blah', asyncScheduler); // $ExpectType Observable<[string, string]> - const o5 = pairs({}, asyncScheduler); // $ExpectType Observable<[never, never]> - const o6 = pairs(true, asyncScheduler); // $ExpectType Observable<[never, never]> - const o7 = pairs(null, asyncScheduler); // $ExpectError - const o8 = pairs(undefined, asyncScheduler); // $ExpectError - }); -}); diff --git a/spec/index-spec.ts b/spec/index-spec.ts index 53d56a4a835..117f8b9fbbb 100644 --- a/spec/index-spec.ts +++ b/spec/index-spec.ts @@ -65,7 +65,6 @@ describe('index', () => { expect(index.merge).to.exist; expect(index.of).to.exist; expect(index.onErrorResumeNext).to.exist; - expect(index.pairs).to.exist; expect(index.race).to.exist; expect(index.range).to.exist; expect(index.throwError).to.exist; diff --git a/spec/observables/pairs-spec.ts b/spec/observables/pairs-spec.ts deleted file mode 100644 index 078b96f9f3a..00000000000 --- a/spec/observables/pairs-spec.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** @prettier */ -import { expect } from 'chai'; -import { TestScheduler } from 'rxjs/testing'; -import { pairs } from 'rxjs'; -import { observableMatcher } from '../helpers/observableMatcher'; - -describe('pairs', () => { - let rxTestScheduler: TestScheduler; - - beforeEach(() => { - rxTestScheduler = new TestScheduler(observableMatcher); - }); - - it('should create an observable emits key-value pair', () => { - rxTestScheduler.run(({ expectObservable }) => { - const e1 = pairs({ a: 1, b: 2 }); - const expected = '(ab|)'; - const values = { - a: ['a', 1], - b: ['b', 2], - }; - - expectObservable(e1).toBe(expected, values); - }); - }); - - it('should create an observable without scheduler', (done) => { - let expected = [ - ['a', 1], - ['b', 2], - ['c', 3], - ]; - - pairs({ a: 1, b: 2, c: 3 }).subscribe({ - next: (x) => { - expect(x).to.deep.equal(expected.shift()); - }, - error: (x) => { - done(new Error('should not be called')); - }, - complete: () => { - expect(expected).to.be.empty; - done(); - }, - }); - }); - - it('should work with empty object', () => { - rxTestScheduler.run(({ expectObservable }) => { - const e1 = pairs({}); - const expected = '|'; - - expectObservable(e1).toBe(expected); - }); - }); -}); diff --git a/src/index.ts b/src/index.ts index b76cca1a779..50d85a3eff4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -73,7 +73,6 @@ export { interval } from './internal/observable/interval'; export { merge } from './internal/observable/merge'; export { of } from './internal/observable/of'; export { onErrorResumeNext } from './internal/observable/onErrorResumeNext'; -export { pairs } from './internal/observable/pairs'; export { partition } from './internal/observable/partition'; export { race } from './internal/observable/race'; export { range } from './internal/observable/range'; diff --git a/src/internal/observable/pairs.ts b/src/internal/observable/pairs.ts deleted file mode 100644 index 4dafb9ffb83..00000000000 --- a/src/internal/observable/pairs.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Observable } from '../Observable'; -import { SchedulerLike } from '../types'; -import { from } from './from'; - -/** - * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8. - */ -export function pairs(arr: readonly T[], scheduler?: SchedulerLike): Observable<[string, T]>; -/** - * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8. - */ -export function pairs>(obj: O, scheduler?: SchedulerLike): Observable<[keyof O, O[keyof O]]>; -/** - * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8. - */ -export function pairs(iterable: Iterable, scheduler?: SchedulerLike): Observable<[string, T]>; -/** - * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8. - */ -export function pairs( - n: number | bigint | boolean | ((...args: any[]) => any) | symbol, - scheduler?: SchedulerLike -): Observable<[never, never]>; - -/** - * Convert an object into an Observable of `[key, value]` pairs. - * - * Turn entries of an object into a stream. - * - * ![](pairs.png) - * - * `pairs` takes an arbitrary object and returns an Observable that emits arrays. Each - * emitted array has exactly two elements - the first is a key from the object - * and the second is a value corresponding to that key. Keys are extracted from - * an object via `Object.keys` function, which means that they will be only - * enumerable keys that are present on an object directly - not ones inherited - * via prototype chain. - * - * By default, these arrays are emitted synchronously. To change that you can - * pass a {@link SchedulerLike} as a second argument to `pairs`. - * - * ## Example - * - * Converts an object to an Observable - * - * ```ts - * import { pairs } from 'rxjs'; - * - * const obj = { - * foo: 42, - * bar: 56, - * baz: 78 - * }; - * - * pairs(obj).subscribe({ - * next: value => console.log(value), - * complete: () => console.log('Complete!') - * }); - * - * // Logs: - * // ['foo', 42] - * // ['bar', 56] - * // ['baz', 78] - * // 'Complete!' - * ``` - * - * ### Object.entries required - * - * In IE, you will need to polyfill `Object.entries` in order to use this. - * [MDN has a polyfill here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) - * - * @param {Object} obj The object to inspect and turn into an - * Observable sequence. - * @param {Scheduler} [scheduler] An optional IScheduler to schedule - * when resulting Observable will emit values. - * @returns {(Observable>)} An observable sequence of - * [key, value] pairs from the object. - * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8. - */ -export function pairs(obj: any, scheduler?: SchedulerLike) { - return from(Object.entries(obj), scheduler as any); -}