529d8e55884c90d1de92cdb6ac37bdedfddbb176d21791911e88b16bbaa4e013d78e1be70d01e535807223e4c75851c788e090b9ea8d68b11f0196c4239080 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { Observable } from '../Observable';
  2. import { SchedulerLike } from '../types';
  3. import { from } from './from';
  4. /**
  5. * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.
  6. */
  7. export function pairs<T>(arr: readonly T[], scheduler?: SchedulerLike): Observable<[string, T]>;
  8. /**
  9. * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.
  10. */
  11. export function pairs<O extends Record<string, unknown>>(obj: O, scheduler?: SchedulerLike): Observable<[keyof O, O[keyof O]]>;
  12. /**
  13. * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.
  14. */
  15. export function pairs<T>(iterable: Iterable<T>, scheduler?: SchedulerLike): Observable<[string, T]>;
  16. /**
  17. * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.
  18. */
  19. export function pairs(
  20. n: number | bigint | boolean | ((...args: any[]) => any) | symbol,
  21. scheduler?: SchedulerLike
  22. ): Observable<[never, never]>;
  23. /**
  24. * Convert an object into an Observable of `[key, value]` pairs.
  25. *
  26. * <span class="informal">Turn entries of an object into a stream.</span>
  27. *
  28. * ![](pairs.png)
  29. *
  30. * `pairs` takes an arbitrary object and returns an Observable that emits arrays. Each
  31. * emitted array has exactly two elements - the first is a key from the object
  32. * and the second is a value corresponding to that key. Keys are extracted from
  33. * an object via `Object.keys` function, which means that they will be only
  34. * enumerable keys that are present on an object directly - not ones inherited
  35. * via prototype chain.
  36. *
  37. * By default, these arrays are emitted synchronously. To change that you can
  38. * pass a {@link SchedulerLike} as a second argument to `pairs`.
  39. *
  40. * ## Example
  41. *
  42. * Converts an object to an Observable
  43. *
  44. * ```ts
  45. * import { pairs } from 'rxjs';
  46. *
  47. * const obj = {
  48. * foo: 42,
  49. * bar: 56,
  50. * baz: 78
  51. * };
  52. *
  53. * pairs(obj).subscribe({
  54. * next: value => console.log(value),
  55. * complete: () => console.log('Complete!')
  56. * });
  57. *
  58. * // Logs:
  59. * // ['foo', 42]
  60. * // ['bar', 56]
  61. * // ['baz', 78]
  62. * // 'Complete!'
  63. * ```
  64. *
  65. * ### Object.entries required
  66. *
  67. * In IE, you will need to polyfill `Object.entries` in order to use this.
  68. * [MDN has a polyfill here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)
  69. *
  70. * @param obj The object to inspect and turn into an Observable sequence.
  71. * @param scheduler An optional IScheduler to schedule when resulting
  72. * Observable will emit values.
  73. * @returns An observable sequence of [key, value] pairs from the object.
  74. * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.
  75. */
  76. export function pairs(obj: any, scheduler?: SchedulerLike) {
  77. return from(Object.entries(obj), scheduler as any);
  78. }