diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24f377f893..a61a1b53f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## [7.5.2](https://github.com/reactivex/rxjs/compare/7.5.1...7.5.2) (2022-01-11)
+
+### Bug Fixes
+
+- operators that ignore input values now use `unknown` rather than `any`, which should resolve issues with eslint no-unsafe-argument ([#6738](https://github.com/reactivex/rxjs/issues/6738)) ([67cb317](https://github.com/reactivex/rxjs/commit/67cb317a7a6b9fdbd3d2e8fdbc2ac9ac7e57179c)), closes [#6536](https://github.com/reactivex/rxjs/issues/6536)
+- **ajax:** crossDomain flag deprecated and properly reported to consumers ([#6710](https://github.com/reactivex/rxjs/issues/6710)) ([7fd0575](https://github.com/reactivex/rxjs/commit/7fd05756c595dddb288b732b00a90fcfb2a9080a)), closes [#6663](https://github.com/reactivex/rxjs/issues/6663)
+
## [7.5.1](https://github.com/reactivex/rxjs/compare/7.5.0...7.5.1) (2021-12-28)
### Bug Fixes
diff --git a/README.md b/README.md
index 24de33ab0b..910eef75ab 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-#
RxJS: Reactive Extensions For JavaScript
+#
RxJS: Reactive Extensions For JavaScript

[](http://badge.fury.io/js/rxjs)
@@ -36,15 +36,29 @@ By contributing or commenting on issues in this repository, whether you've read
### ES6 via npm
-```sh
+```shell
npm install rxjs
```
-It's recommended to pull in the Observable creation methods you need directly from `'rxjs'` as shown below with `range`. And you can pull in any operator you need from one spot, under `'rxjs/operators'`.
+It's recommended to pull in the Observable creation methods you need directly from `'rxjs'` as shown below with `range`.
+If you're using RxJS version 7.2 or above, you can pull in any operator you need from the same spot, `'rxjs'`.
```ts
-import { range } from "rxjs";
-import { map, filter } from "rxjs/operators";
+import { range, filter, map } from 'rxjs';
+
+range(1, 200)
+ .pipe(
+ filter(x => x % 2 === 1),
+ map(x => x + x)
+ )
+ .subscribe(x => console.log(x));
+```
+
+If you're using RxJS version below 7.2, you can pull in any operator you need from one spot, under `'rxjs/operators'`.
+
+```ts
+import { range } from 'rxjs';
+import { filter, map } from 'rxjs/operators';
range(1, 200)
.pipe(
@@ -64,7 +78,7 @@ The global namespace for rxjs is `rxjs`:
```js
const { range } = rxjs;
-const { map, filter } = rxjs.operators;
+const { filter, map } = rxjs.operators;
range(1, 200)
.pipe(
diff --git a/api_guard/dist/types/index.d.ts b/api_guard/dist/types/index.d.ts
index 7cfc595493..1a14efdf38 100644
--- a/api_guard/dist/types/index.d.ts
+++ b/api_guard/dist/types/index.d.ts
@@ -108,8 +108,8 @@ export declare function concatMap>(project: (v
export declare function concatMap>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction>;
export declare function concatMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
-export declare function concatMapTo>(observable: O): OperatorFunction>;
-export declare function concatMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
+export declare function concatMapTo>(observable: O): OperatorFunction>;
+export declare function concatMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
export declare function concatMapTo>(observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
export declare function concatWith(...otherSources: [...ObservableInputTuple]): OperatorFunction;
@@ -314,7 +314,7 @@ export declare type Head = ((...args: X) => any) exten
export declare function identity(x: T): T;
-export declare function ignoreElements(): OperatorFunction;
+export declare function ignoreElements(): OperatorFunction;
export declare function iif(condition: () => boolean, trueResult: ObservableInput, falseResult: ObservableInput): Observable;
@@ -340,7 +340,7 @@ export declare function lastValueFrom(source: Observable): Promise;
export declare function map(project: (value: T, index: number) => R): OperatorFunction;
export declare function map(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction;
-export declare function mapTo(value: R): OperatorFunction;
+export declare function mapTo(value: R): OperatorFunction;
export declare function mapTo(value: R): OperatorFunction;
export declare function materialize(): OperatorFunction & ObservableNotification>;
@@ -358,7 +358,7 @@ export declare function mergeMap>(project: (va
export declare function mergeMap>(project: (value: T, index: number) => O, resultSelector: undefined, concurrent?: number): OperatorFunction>;
export declare function mergeMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction;
-export declare function mergeMapTo>(innerObservable: O, concurrent?: number): OperatorFunction>;
+export declare function mergeMapTo>(innerObservable: O, concurrent?: number): OperatorFunction>;
export declare function mergeMapTo>(innerObservable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction;
export declare function mergeScan(accumulator: (acc: R, value: T, index: number) => ObservableInput, seed: R, concurrent?: number): OperatorFunction;
@@ -729,8 +729,8 @@ export declare function switchMap>(project: (v
export declare function switchMap>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction>;
export declare function switchMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
-export declare function switchMapTo>(observable: O): OperatorFunction>;
-export declare function switchMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
+export declare function switchMapTo>(observable: O): OperatorFunction>;
+export declare function switchMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
export declare function switchMapTo>(observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
export declare function switchScan>(accumulator: (acc: R, value: T, index: number) => O, seed: R): OperatorFunction>;
diff --git a/api_guard/dist/types/operators/index.d.ts b/api_guard/dist/types/operators/index.d.ts
index 034286c140..4d673c5b08 100644
--- a/api_guard/dist/types/operators/index.d.ts
+++ b/api_guard/dist/types/operators/index.d.ts
@@ -45,8 +45,8 @@ export declare function concatMap>(project: (v
export declare function concatMap>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction>;
export declare function concatMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
-export declare function concatMapTo>(observable: O): OperatorFunction>;
-export declare function concatMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
+export declare function concatMapTo>(observable: O): OperatorFunction>;
+export declare function concatMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
export declare function concatMapTo>(observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
export declare function concatWith(...otherSources: [...ObservableInputTuple]): OperatorFunction;
@@ -144,7 +144,7 @@ export interface GroupByOptionsWithElement {
element: (value: T) => E;
}
-export declare function ignoreElements(): OperatorFunction;
+export declare function ignoreElements(): OperatorFunction;
export declare function isEmpty(): OperatorFunction;
@@ -157,7 +157,7 @@ export declare function last(predicate: (value: T, index: number, sour
export declare function map(project: (value: T, index: number) => R): OperatorFunction;
export declare function map(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction;
-export declare function mapTo(value: R): OperatorFunction;
+export declare function mapTo(value: R): OperatorFunction;
export declare function mapTo(value: R): OperatorFunction;
export declare function materialize(): OperatorFunction & ObservableNotification>;
@@ -175,7 +175,7 @@ export declare function mergeMap>(project: (va
export declare function mergeMap>(project: (value: T, index: number) => O, resultSelector: undefined, concurrent?: number): OperatorFunction>;
export declare function mergeMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction;
-export declare function mergeMapTo>(innerObservable: O, concurrent?: number): OperatorFunction>;
+export declare function mergeMapTo>(innerObservable: O, concurrent?: number): OperatorFunction>;
export declare function mergeMapTo>(innerObservable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction;
export declare function mergeScan(accumulator: (acc: R, value: T, index: number) => ObservableInput, seed: R, concurrent?: number): OperatorFunction;
@@ -300,8 +300,8 @@ export declare function switchMap>(project: (v
export declare function switchMap>(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction>;
export declare function switchMap>(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
-export declare function switchMapTo>(observable: O): OperatorFunction>;
-export declare function switchMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
+export declare function switchMapTo>(observable: O): OperatorFunction>;
+export declare function switchMapTo>(observable: O, resultSelector: undefined): OperatorFunction>;
export declare function switchMapTo>(observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R): OperatorFunction;
export declare function switchScan>(accumulator: (acc: R, value: T, index: number) => O, seed: R): OperatorFunction>;
diff --git a/docs_app/assets/Rx_Logo_S.png b/docs_app/assets/Rx_Logo_S.png
deleted file mode 100644
index 752fac1e2d..0000000000
Binary files a/docs_app/assets/Rx_Logo_S.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/audit.png b/docs_app/assets/images/marble-diagrams/audit.png
deleted file mode 100644
index ceca809ff0..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/audit.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/audit.svg b/docs_app/assets/images/marble-diagrams/audit.svg
deleted file mode 100644
index 2c510189d6..0000000000
--- a/docs_app/assets/images/marble-diagrams/audit.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs_app/assets/images/marble-diagrams/auditTime.png b/docs_app/assets/images/marble-diagrams/auditTime.png
deleted file mode 100644
index a259f2bcc9..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/auditTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/buffer.png b/docs_app/assets/images/marble-diagrams/buffer.png
deleted file mode 100644
index ccc9c33e35..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/buffer.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/bufferCount.png b/docs_app/assets/images/marble-diagrams/bufferCount.png
deleted file mode 100644
index 36afdf75b7..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/bufferCount.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/bufferTime.png b/docs_app/assets/images/marble-diagrams/bufferTime.png
deleted file mode 100644
index ae8c9dfc22..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/bufferTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/bufferToggle.png b/docs_app/assets/images/marble-diagrams/bufferToggle.png
deleted file mode 100644
index 7257358745..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/bufferToggle.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/bufferWhen.png b/docs_app/assets/images/marble-diagrams/bufferWhen.png
deleted file mode 100644
index 6165954d4d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/bufferWhen.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/catch.png b/docs_app/assets/images/marble-diagrams/catch.png
deleted file mode 100644
index f47e4f8e10..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/catch.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/combineAll.png b/docs_app/assets/images/marble-diagrams/combineAll.png
deleted file mode 100644
index d9d240f183..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/combineAll.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/combineLatest.png b/docs_app/assets/images/marble-diagrams/combineLatest.png
deleted file mode 100644
index 528041fd86..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/combineLatest.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/concat.png b/docs_app/assets/images/marble-diagrams/concat.png
deleted file mode 100644
index dce8453f04..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/concat.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/concatAll.png b/docs_app/assets/images/marble-diagrams/concatAll.png
deleted file mode 100644
index 687cdfa728..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/concatAll.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/concatAll.svg b/docs_app/assets/images/marble-diagrams/concatAll.svg
deleted file mode 100755
index f7a5258ab7..0000000000
--- a/docs_app/assets/images/marble-diagrams/concatAll.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs_app/assets/images/marble-diagrams/concatMap.png b/docs_app/assets/images/marble-diagrams/concatMap.png
deleted file mode 100644
index 38dfa20821..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/concatMap.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/concatMapTo.png b/docs_app/assets/images/marble-diagrams/concatMapTo.png
deleted file mode 100644
index 10f60435e3..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/concatMapTo.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/count.png b/docs_app/assets/images/marble-diagrams/count.png
deleted file mode 100644
index 0cf88b2ebd..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/count.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/debounce.png b/docs_app/assets/images/marble-diagrams/debounce.png
deleted file mode 100644
index 91ed9bb1cf..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/debounce.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/debounce.svg b/docs_app/assets/images/marble-diagrams/debounce.svg
deleted file mode 100644
index 689f7ef820..0000000000
--- a/docs_app/assets/images/marble-diagrams/debounce.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs_app/assets/images/marble-diagrams/debounceTime.png b/docs_app/assets/images/marble-diagrams/debounceTime.png
deleted file mode 100644
index c3e9efa633..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/debounceTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/defaultIfEmpty.png b/docs_app/assets/images/marble-diagrams/defaultIfEmpty.png
deleted file mode 100644
index c76ccce12f..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/defaultIfEmpty.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/defer.png b/docs_app/assets/images/marble-diagrams/defer.png
deleted file mode 100644
index 3eea61346d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/defer.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/delay.png b/docs_app/assets/images/marble-diagrams/delay.png
deleted file mode 100644
index 4f296f32c0..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/delay.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/delayWhen.png b/docs_app/assets/images/marble-diagrams/delayWhen.png
deleted file mode 100644
index c766728d64..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/delayWhen.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/dematerialize.png b/docs_app/assets/images/marble-diagrams/dematerialize.png
deleted file mode 100644
index 0799abeb52..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/dematerialize.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/elementAt.png b/docs_app/assets/images/marble-diagrams/elementAt.png
deleted file mode 100644
index 3cd67518a6..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/elementAt.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/empty.png b/docs_app/assets/images/marble-diagrams/empty.png
deleted file mode 100644
index e2928ddb59..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/empty.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/endWith.png b/docs_app/assets/images/marble-diagrams/endWith.png
deleted file mode 100644
index 54c983eb47..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/endWith.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/every.png b/docs_app/assets/images/marble-diagrams/every.png
deleted file mode 100644
index 63bcebc60c..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/every.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/exhaust.png b/docs_app/assets/images/marble-diagrams/exhaust.png
deleted file mode 100644
index bd193bc950..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/exhaust.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/exhaustMap.png b/docs_app/assets/images/marble-diagrams/exhaustMap.png
deleted file mode 100644
index df128b4d1c..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/exhaustMap.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/expand.png b/docs_app/assets/images/marble-diagrams/expand.png
deleted file mode 100644
index 0f97e282f5..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/expand.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/filter.png b/docs_app/assets/images/marble-diagrams/filter.png
deleted file mode 100644
index 7dabb61267..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/filter.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/find.png b/docs_app/assets/images/marble-diagrams/find.png
deleted file mode 100644
index 343b826190..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/find.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/findIndex.png b/docs_app/assets/images/marble-diagrams/findIndex.png
deleted file mode 100644
index abf1d2a029..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/findIndex.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/first.png b/docs_app/assets/images/marble-diagrams/first.png
deleted file mode 100644
index 0fc0625b25..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/first.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/forkJoin.png b/docs_app/assets/images/marble-diagrams/forkJoin.png
deleted file mode 100644
index 913993717d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/forkJoin.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/from.png b/docs_app/assets/images/marble-diagrams/from.png
deleted file mode 100644
index ab7d00cd78..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/from.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/fromEvent.png b/docs_app/assets/images/marble-diagrams/fromEvent.png
deleted file mode 100644
index 452280f9ef..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/fromEvent.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/fromEventPattern.png b/docs_app/assets/images/marble-diagrams/fromEventPattern.png
deleted file mode 100644
index 3e9d4d77d2..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/fromEventPattern.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/generate.png b/docs_app/assets/images/marble-diagrams/generate.png
deleted file mode 100644
index 10b9a34a19..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/generate.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/groupBy.png b/docs_app/assets/images/marble-diagrams/groupBy.png
deleted file mode 100644
index 29b80110df..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/groupBy.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/ignoreElements.png b/docs_app/assets/images/marble-diagrams/ignoreElements.png
deleted file mode 100644
index 6dcb3a21b4..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/ignoreElements.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/interval.png b/docs_app/assets/images/marble-diagrams/interval.png
deleted file mode 100644
index e7bbe99b5f..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/interval.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/isEmpty.png b/docs_app/assets/images/marble-diagrams/isEmpty.png
deleted file mode 100644
index e3154db7f7..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/isEmpty.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/last.png b/docs_app/assets/images/marble-diagrams/last.png
deleted file mode 100644
index e2078e3262..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/last.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/map.png b/docs_app/assets/images/marble-diagrams/map.png
deleted file mode 100644
index c08038065e..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/map.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/mapTo.png b/docs_app/assets/images/marble-diagrams/mapTo.png
deleted file mode 100644
index 4f47644cf1..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/mapTo.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/materialize.png b/docs_app/assets/images/marble-diagrams/materialize.png
deleted file mode 100644
index c8a71319a9..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/materialize.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/max.png b/docs_app/assets/images/marble-diagrams/max.png
deleted file mode 100644
index 017f6c7200..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/max.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/merge.png b/docs_app/assets/images/marble-diagrams/merge.png
deleted file mode 100644
index 4785ecb253..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/merge.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/mergeAll.png b/docs_app/assets/images/marble-diagrams/mergeAll.png
deleted file mode 100644
index 12c4be9ea3..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/mergeAll.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/mergeMap.png b/docs_app/assets/images/marble-diagrams/mergeMap.png
deleted file mode 100644
index 730b5f07db..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/mergeMap.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/mergeMapTo.png b/docs_app/assets/images/marble-diagrams/mergeMapTo.png
deleted file mode 100644
index 5fbac90eac..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/mergeMapTo.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/min.png b/docs_app/assets/images/marble-diagrams/min.png
deleted file mode 100644
index 53a4d05b87..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/min.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/multicast.png b/docs_app/assets/images/marble-diagrams/multicast.png
deleted file mode 100644
index 9b8fce695f..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/multicast.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/never.png b/docs_app/assets/images/marble-diagrams/never.png
deleted file mode 100644
index 96300cab53..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/never.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/of.png b/docs_app/assets/images/marble-diagrams/of.png
deleted file mode 100644
index 2013dcaf7d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/of.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/onErrorResumeNext.png b/docs_app/assets/images/marble-diagrams/onErrorResumeNext.png
deleted file mode 100644
index 878fac849d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/onErrorResumeNext.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/pairs.png b/docs_app/assets/images/marble-diagrams/pairs.png
deleted file mode 100644
index 4a514e0cd3..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/pairs.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/pairwise.png b/docs_app/assets/images/marble-diagrams/pairwise.png
deleted file mode 100644
index 4d32f71998..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/pairwise.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/partition.png b/docs_app/assets/images/marble-diagrams/partition.png
deleted file mode 100644
index ffd3b6b525..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/partition.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/pluck.png b/docs_app/assets/images/marble-diagrams/pluck.png
deleted file mode 100644
index 9ddfcbe5ea..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/pluck.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/publish.png b/docs_app/assets/images/marble-diagrams/publish.png
deleted file mode 100644
index 0834f221bb..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/publish.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/publishLast.png b/docs_app/assets/images/marble-diagrams/publishLast.png
deleted file mode 100644
index 854cd36c3d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/publishLast.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/race.png b/docs_app/assets/images/marble-diagrams/race.png
deleted file mode 100644
index 84dcf0c90a..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/race.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/range.png b/docs_app/assets/images/marble-diagrams/range.png
deleted file mode 100644
index 17dbd736c3..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/range.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/reduce.png b/docs_app/assets/images/marble-diagrams/reduce.png
deleted file mode 100644
index 3988fafdd2..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/reduce.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/refCount.png b/docs_app/assets/images/marble-diagrams/refCount.png
deleted file mode 100644
index 57b0328a10..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/refCount.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/repeat.png b/docs_app/assets/images/marble-diagrams/repeat.png
deleted file mode 100644
index 9ef4598b7d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/repeat.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/repeatWhen.png b/docs_app/assets/images/marble-diagrams/repeatWhen.png
deleted file mode 100644
index 33f84a3ba6..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/repeatWhen.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/retry.png b/docs_app/assets/images/marble-diagrams/retry.png
deleted file mode 100644
index 7a44168b27..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/retry.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/retryWhen.png b/docs_app/assets/images/marble-diagrams/retryWhen.png
deleted file mode 100644
index a886f19f84..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/retryWhen.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/sample.png b/docs_app/assets/images/marble-diagrams/sample.png
deleted file mode 100644
index f5da6f0801..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/sample.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/sampleTime.png b/docs_app/assets/images/marble-diagrams/sampleTime.png
deleted file mode 100644
index f6e7f62466..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/sampleTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/scan.png b/docs_app/assets/images/marble-diagrams/scan.png
deleted file mode 100644
index dd361b38f7..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/scan.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/sequenceEqual.png b/docs_app/assets/images/marble-diagrams/sequenceEqual.png
deleted file mode 100644
index f0b648de19..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/sequenceEqual.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/share.png b/docs_app/assets/images/marble-diagrams/share.png
deleted file mode 100644
index a73805d8d3..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/share.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/single.png b/docs_app/assets/images/marble-diagrams/single.png
deleted file mode 100644
index f6a28d2e9c..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/single.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/skip.png b/docs_app/assets/images/marble-diagrams/skip.png
deleted file mode 100644
index 855b81d897..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/skip.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/skipLast.png b/docs_app/assets/images/marble-diagrams/skipLast.png
deleted file mode 100644
index 8c98d68cd4..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/skipLast.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/skipUntil.png b/docs_app/assets/images/marble-diagrams/skipUntil.png
deleted file mode 100644
index c782223d97..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/skipUntil.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/skipWhile.png b/docs_app/assets/images/marble-diagrams/skipWhile.png
deleted file mode 100644
index e740672ec7..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/skipWhile.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/startWith.png b/docs_app/assets/images/marble-diagrams/startWith.png
deleted file mode 100644
index de31f98bce..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/startWith.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/subscribeOn.png b/docs_app/assets/images/marble-diagrams/subscribeOn.png
deleted file mode 100644
index 618e7a77f5..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/subscribeOn.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/switchAll.png b/docs_app/assets/images/marble-diagrams/switchAll.png
deleted file mode 100644
index ed3223a173..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/switchAll.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/switchMap.png b/docs_app/assets/images/marble-diagrams/switchMap.png
deleted file mode 100644
index 721b30bd9e..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/switchMap.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/switchMapTo.png b/docs_app/assets/images/marble-diagrams/switchMapTo.png
deleted file mode 100644
index f255242789..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/switchMapTo.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/take.png b/docs_app/assets/images/marble-diagrams/take.png
deleted file mode 100644
index 8ef188dcdf..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/take.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/takeLast.png b/docs_app/assets/images/marble-diagrams/takeLast.png
deleted file mode 100644
index a92c41be75..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/takeLast.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/takeUntil.png b/docs_app/assets/images/marble-diagrams/takeUntil.png
deleted file mode 100644
index eba960e63d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/takeUntil.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/takeWhile.png b/docs_app/assets/images/marble-diagrams/takeWhile.png
deleted file mode 100644
index 2e1e1830bf..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/takeWhile.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/tap.png b/docs_app/assets/images/marble-diagrams/tap.png
deleted file mode 100644
index 1ea11d3d32..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/tap.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/throttle.png b/docs_app/assets/images/marble-diagrams/throttle.png
deleted file mode 100644
index 18a69a0697..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/throttle.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/throttle.svg b/docs_app/assets/images/marble-diagrams/throttle.svg
deleted file mode 100644
index ee250face1..0000000000
--- a/docs_app/assets/images/marble-diagrams/throttle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs_app/assets/images/marble-diagrams/throttleTime.png b/docs_app/assets/images/marble-diagrams/throttleTime.png
deleted file mode 100644
index 23954c5a06..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/throttleTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/throw.png b/docs_app/assets/images/marble-diagrams/throw.png
deleted file mode 100644
index befdd36961..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/throw.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/throwIfEmpty.png b/docs_app/assets/images/marble-diagrams/throwIfEmpty.png
deleted file mode 100644
index a463ec0af7..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/throwIfEmpty.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/timeinterval.png b/docs_app/assets/images/marble-diagrams/timeinterval.png
deleted file mode 100644
index 4f24523525..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/timeinterval.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/timeout.png b/docs_app/assets/images/marble-diagrams/timeout.png
deleted file mode 100644
index 8b1d99c483..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/timeout.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/timeoutWith.png b/docs_app/assets/images/marble-diagrams/timeoutWith.png
deleted file mode 100644
index 1fee9b9341..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/timeoutWith.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/timer.png b/docs_app/assets/images/marble-diagrams/timer.png
deleted file mode 100644
index 2299f1c285..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/timer.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/timestamp.png b/docs_app/assets/images/marble-diagrams/timestamp.png
deleted file mode 100644
index f2895b4305..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/timestamp.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/toArray.png b/docs_app/assets/images/marble-diagrams/toArray.png
deleted file mode 100644
index 0c8cb4e128..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/toArray.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/window.png b/docs_app/assets/images/marble-diagrams/window.png
deleted file mode 100644
index 1fbe7c963d..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/window.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/windowCount.png b/docs_app/assets/images/marble-diagrams/windowCount.png
deleted file mode 100644
index 6ebbaada90..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/windowCount.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/windowTime.png b/docs_app/assets/images/marble-diagrams/windowTime.png
deleted file mode 100644
index 7c3adcb948..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/windowTime.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/windowToggle.png b/docs_app/assets/images/marble-diagrams/windowToggle.png
deleted file mode 100644
index 4d8489513c..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/windowToggle.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/windowWhen.png b/docs_app/assets/images/marble-diagrams/windowWhen.png
deleted file mode 100644
index 0d3f93812a..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/windowWhen.png and /dev/null differ
diff --git a/docs_app/assets/images/marble-diagrams/withLatestFrom.png b/docs_app/assets/images/marble-diagrams/withLatestFrom.png
deleted file mode 100644
index 499cacbaff..0000000000
Binary files a/docs_app/assets/images/marble-diagrams/withLatestFrom.png and /dev/null differ
diff --git a/docs_app/content/deprecations/multicasting.md b/docs_app/content/deprecations/multicasting.md
index 2d5ee9c900..2e77adc612 100644
--- a/docs_app/content/deprecations/multicasting.md
+++ b/docs_app/content/deprecations/multicasting.md
@@ -34,7 +34,8 @@ Instead of creating a [ConnectableObservable](/api/index/class/ConnectableObserv
```ts
-import { ConnectableObservable, Subject, timer } from 'rxjs';
+import { ConnectableObservable, timer, Subject } from 'rxjs';
+
// deprecated
const tick$ = new ConnectableObservable(
timer(1_000),
@@ -44,7 +45,8 @@ tick$.connect();
```ts
-import { connectable, Subject, timer } from 'rxjs';
+import { connectable, timer, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject()
@@ -56,7 +58,8 @@ In situations in which the `refCount` method is used, the [share](/api/operators
```ts
-import { ConnectableObservable, Subject, timer } from 'rxjs';
+import { ConnectableObservable, timer, Subject } from 'rxjs';
+
// deprecated
const tick$ = new ConnectableObservable(
timer(1_000),
@@ -66,8 +69,8 @@ const tick$ = new ConnectableObservable(
```ts
-import { Subject, timer } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({ connector: () => new Subject() })
@@ -80,8 +83,8 @@ Where [multicast](/api/operators/multicast) is called with a subject factory, ca
```ts
-import { ConnectableObservable, timer, Subject } from 'rxjs';
-import { multicast } from 'rxjs/operators';
+import { timer, multicast, Subject, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
multicast(() => new Subject())
@@ -91,6 +94,7 @@ const tick$ = timer(1_000).pipe(
```ts
import { connectable, timer, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject()
@@ -101,8 +105,8 @@ Where [multicast](/api/operators/multicast) is called with a subject instance, i
```ts
-import { ConnectableObservable, timer, Subject } from 'rxjs';
-import { multicast } from 'rxjs/operators';
+import { timer, multicast, Subject, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
multicast(new Subject())
@@ -112,6 +116,7 @@ const tick$ = timer(1_000).pipe(
```ts
import { connectable, timer, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject(),
@@ -123,8 +128,8 @@ Where [multicast](/api/operators/multicast) is used in conjunction with [refCoun
```ts
-import { timer, Subject } from 'rxjs';
-import { multicast, refCount } from 'rxjs/operators';
+import { timer, multicast, Subject, refCount } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
multicast(() => new Subject()),
@@ -134,8 +139,8 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, Subject } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({ connector: () => new Subject() })
@@ -146,8 +151,8 @@ Where [multicast](/api/operators/multicast) is used with a selector, it can be r
```ts
-import { timer, combineLatest } from 'rxjs';
-import { multicast } from 'rxjs/operators';
+import { timer, multicast, Subject, combineLatest } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
multicast(
@@ -159,8 +164,8 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, combineLatest } from 'rxjs';
-import { connect } from 'rxjs/operators';
+import { timer, connect, combineLatest, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]), {
@@ -175,8 +180,8 @@ If you're using [publish](/api/operators/publish) to create a [ConnectableObserv
```ts
-import { ConnectableObservable, timer } from 'rxjs';
-import { publish } from 'rxjs/operators';
+import { timer, publish, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publish()
@@ -185,7 +190,8 @@ const tick$ = timer(1_000).pipe(
```ts
-import { connectable, timer } from 'rxjs';
+import { connectable, timer, Subject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject(),
@@ -197,8 +203,8 @@ And if [refCount](/api/operators/refCount) is being applied to the result of [pu
```ts
-import { timer } from 'rxjs';
-import { publish, refCount } from 'rxjs/operators';
+import { timer, publish, refCount } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publish(),
@@ -208,14 +214,14 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
resetOnError: false,
resetOnComplete: false,
- resetOnRefCountZero: false,
+ resetOnRefCountZero: false
})
);
```
@@ -224,8 +230,8 @@ If [publish](/api/operators/publish) is being called with a selector, you can us
```ts
-import { timer, combineLatest } from 'rxjs';
-import { publish } from 'rxjs/operators';
+import { timer, publish, combineLatest } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publish((source) => combineLatest([source, source]))
@@ -234,8 +240,8 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, combineLatest } from 'rxjs';
-import { connect } from 'rxjs/operators';
+import { timer, connect, combineLatest } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]))
@@ -248,8 +254,8 @@ If you're using [publishBehavior](/api/operators/publishBehavior) to create a [C
```ts
-import { ConnectableObservable, timer } from 'rxjs';
-import { publishBehavior } from 'rxjs/operators';
+import { timer, publishBehavior, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishBehavior(0)
@@ -259,6 +265,7 @@ const tick$ = timer(1_000).pipe(
```ts
import { connectable, timer, BehaviorSubject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new BehaviorSubject(0),
@@ -270,8 +277,8 @@ And if [refCount](/api/operators/refCount) is being applied to the result of [pu
```ts
-import { timer } from 'rxjs';
-import { publishBehavior, refCount } from 'rxjs/operators';
+import { timer, publishBehavior, refCount } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishBehavior(0),
@@ -281,15 +288,15 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, BehaviorSubject } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share, BehaviorSubject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new BehaviorSubject(0),
resetOnError: false,
resetOnComplete: false,
- resetOnRefCountZero: false,
+ resetOnRefCountZero: false
})
);
```
@@ -300,8 +307,8 @@ If you're using [publishLast](/api/operators/publishLast) to create a [Connectab
```ts
-import { ConnectableObservable, timer } from 'rxjs';
-import { publishLast } from 'rxjs/operators';
+import { timer, publishLast, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishLast()
@@ -311,6 +318,7 @@ const tick$ = timer(1_000).pipe(
```ts
import { connectable, timer, AsyncSubject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new AsyncSubject(),
@@ -322,8 +330,8 @@ And if [refCount](/api/operators/refCount) is being applied to the result of [pu
```ts
-import { timer } from 'rxjs';
-import { publishLast, refCount } from 'rxjs/operators';
+import { timer, publishLast, refCount } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishLast(),
@@ -333,15 +341,15 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, AsyncSubject } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share, AsyncSubject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new AsyncSubject(),
resetOnError: false,
resetOnComplete: false,
- resetOnRefCountZero: false,
+ resetOnRefCountZero: false
})
);
```
@@ -352,8 +360,8 @@ If you're using [publishReplay](/api/operators/publishReplay) to create a [Conne
```ts
-import { ConnectableObservable, timer } from 'rxjs';
-import { publishReplay } from 'rxjs/operators';
+import { timer, publishReplay, ConnectableObservable } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1)
@@ -363,6 +371,7 @@ const tick$ = timer(1_000).pipe(
```ts
import { connectable, timer, ReplaySubject } from 'rxjs';
+
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new ReplaySubject(1),
@@ -374,8 +383,8 @@ And if [refCount](/api/operators/refCount) is being applied to the result of [pu
```ts
-import { timer } from 'rxjs';
-import { publishReplay, refCount } from 'rxjs/operators';
+import { timer, publishReplay, refCount } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1),
@@ -385,15 +394,15 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, ReplaySubject } from 'rxjs';
-import { share } from 'rxjs/operators';
+import { timer, share, ReplaySubject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new ReplaySubject(1),
resetOnError: false,
resetOnComplete: false,
- resetOnRefCountZero: false,
+ resetOnRefCountZero: false
})
);
```
@@ -402,8 +411,8 @@ If [publishReplay](/api/operators/publishReplay) is being called with a selector
```ts
-import { timer, combineLatest } from 'rxjs';
-import { publishReplay } from 'rxjs/operators';
+import { timer, publishReplay, combineLatest } from 'rxjs';
+
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1, undefined, (source) => combineLatest([source, source]))
@@ -412,8 +421,8 @@ const tick$ = timer(1_000).pipe(
```ts
-import { timer, combineLatest, ReplaySubject } from 'rxjs';
-import { connect } from 'rxjs/operators';
+import { timer, connect, combineLatest, ReplaySubject } from 'rxjs';
+
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]), {
diff --git a/docs_app/content/deprecations/resultSelector.md b/docs_app/content/deprecations/resultSelector.md
index 4fe676ff79..9f28940bdd 100644
--- a/docs_app/content/deprecations/resultSelector.md
+++ b/docs_app/content/deprecations/resultSelector.md
@@ -28,24 +28,16 @@ There were two reasons for actually deprecating those parameters:
Instead of using the `resultSelector` Argument, you can leverage the [`map`](/api/operators/map) operator on the inner Observable:
+
```ts
-
-import {fromEvent, interval} from 'rxjs';
-import {switchMap, map} from 'rxjs/operators';
+import { fromEvent, switchMap, interval, map } from 'rxjs';
// deprecated
fromEvent(document, 'click').pipe(
- switchMap(x => interval(0, 1000), (x) => x+1)
+ switchMap((x) => interval(1000), (_, x) => x + 1)
);
// suggested change
fromEvent(document, 'click').pipe(
- switchMap(x => interval(0, 1000).pipe(
- map(x => x+1)
- ))
+ switchMap((x) => interval(1000).pipe(map((x) => x + 1)))
);
```
-
-
-
-
-
diff --git a/docs_app/content/deprecations/scheduler-argument.md b/docs_app/content/deprecations/scheduler-argument.md
index d9d80e6597..5ce868b543 100644
--- a/docs_app/content/deprecations/scheduler-argument.md
+++ b/docs_app/content/deprecations/scheduler-argument.md
@@ -55,8 +55,7 @@ concat(of('hello '), of('World'), asyncScheduler).subscribe((x) => console.log(x
To work around this deprecation you can leverage the [`scheduled`](/api/index/function/scheduled) function.
```ts
-import { scheduled, of, asyncScheduler } from 'rxjs';
-import { concatAll } from 'rxjs/operators';
+import { scheduled, of, asyncScheduler, concatAll } from 'rxjs';
scheduled([of('hello '), of('World')], asyncScheduler)
.pipe(concatAll())
@@ -78,8 +77,7 @@ combineLatest(of('hello '), of('World'), asyncScheduler).subscribe(console.log);
would become:
```ts
-import { scheduled, of, asyncScheduler } from 'rxjs';
-import { combineLatestAll } from 'rxjs/operators';
+import { scheduled, of, asyncScheduler, combineLatestAll } from 'rxjs';
scheduled([of('hello '), of('World')], asyncScheduler)
.pipe(combineLatestAll())
diff --git a/docs_app/content/deprecations/to-promise.md b/docs_app/content/deprecations/to-promise.md
index 40a616b2c4..40fce4a0bc 100644
--- a/docs_app/content/deprecations/to-promise.md
+++ b/docs_app/content/deprecations/to-promise.md
@@ -31,8 +31,7 @@ the return type change), while the `lastValueFrom` will reject with the {@link E
### Example
```ts
-import { interval, lastValueFrom } from 'rxjs';
-import { take } from 'rxjs/operators';
+import { interval, take, lastValueFrom } from 'rxjs';
async function execute() {
const source$ = interval(2000).pipe(take(10));
diff --git a/docs_app/content/guide/operators.md b/docs_app/content/guide/operators.md
index 01f779bea2..171a7d6168 100644
--- a/docs_app/content/guide/operators.md
+++ b/docs_app/content/guide/operators.md
@@ -17,8 +17,7 @@ A Pipeable Operator is essentially a pure function which takes one Observable as
For example, the operator called [`map`](/api/operators/map) is analogous to the Array method of the same name. Just as `[1, 2, 3].map(x => x * x)` will yield `[1, 4, 9]`, the Observable created like this:
```ts
-import { of } from 'rxjs';
-import { map } from 'rxjs/operators';
+import { of, map } from 'rxjs';
of(1, 2, 3)
.pipe(map((x) => x * x))
@@ -33,8 +32,7 @@ of(1, 2, 3)
will emit `1`, `4`, `9`. Another useful operator is [`first`](/api/operators/first):
```ts
-import { of } from 'rxjs';
-import { first } from 'rxjs/operators';
+import { of, first } from 'rxjs';
of(1, 2, 3)
.pipe(first())
@@ -270,8 +268,7 @@ If there is a commonly used sequence of operators in your code, use the `pipe()`
For example, you could make a function that discarded odd values and doubled even values like this:
```ts
-import { pipe } from 'rxjs';
-import { filter, map } from 'rxjs/operators';
+import { pipe, filter, map } from 'rxjs';
function discardOddDoubleEven() {
return pipe(
diff --git a/docs_app/content/guide/overview.md b/docs_app/content/guide/overview.md
index 0f43f2813b..23dc95a2cf 100644
--- a/docs_app/content/guide/overview.md
+++ b/docs_app/content/guide/overview.md
@@ -46,12 +46,11 @@ document.addEventListener('click', () => console.log(`Clicked ${++count} times`)
Using RxJS you isolate the state.
```ts
-import { fromEvent } from 'rxjs';
-import { scan } from 'rxjs/operators';
+import { fromEvent, scan } from 'rxjs';
fromEvent(document, 'click')
- .pipe(scan(count => count + 1, 0))
- .subscribe(count => console.log(`Clicked ${count} times`));
+ .pipe(scan((count) => count + 1, 0))
+ .subscribe((count) => console.log(`Clicked ${count} times`));
```
The **scan** operator works just like **reduce** for arrays. It takes a value which is exposed to a callback. The returned value of the callback will then become the next value exposed the next time the callback runs.
@@ -77,15 +76,14 @@ document.addEventListener('click', () => {
With RxJS:
```ts
-import { fromEvent } from 'rxjs';
-import { throttleTime, scan } from 'rxjs/operators';
+import { fromEvent, throttleTime, scan } from 'rxjs';
fromEvent(document, 'click')
.pipe(
throttleTime(1000),
- scan(count => count + 1, 0)
+ scan((count) => count + 1, 0)
)
- .subscribe(count => console.log(`Clicked ${count} times`));
+ .subscribe((count) => console.log(`Clicked ${count} times`));
```
Other flow control operators are [**filter**](../api/operators/filter), [**delay**](../api/operators/delay), [**debounceTime**](../api/operators/debounceTime), [**take**](../api/operators/take), [**takeUntil**](../api/operators/takeUntil), [**distinct**](../api/operators/distinct), [**distinctUntilChanged**](../api/operators/distinctUntilChanged) etc.
@@ -100,7 +98,7 @@ Here's how you can add the current mouse x position for every click, in plain Ja
let count = 0;
const rate = 1000;
let lastClick = Date.now() - rate;
-document.addEventListener('click', event => {
+document.addEventListener('click', (event) => {
if (Date.now() - lastClick >= rate) {
count += event.clientX;
console.log(count);
@@ -112,16 +110,15 @@ document.addEventListener('click', event => {
With RxJS:
```ts
-import { fromEvent } from 'rxjs';
-import { throttleTime, map, scan } from 'rxjs/operators';
+import { fromEvent, throttleTime, map, scan } from 'rxjs';
fromEvent(document, 'click')
.pipe(
throttleTime(1000),
- map(event => event.clientX),
+ map((event) => event.clientX),
scan((count, clientX) => count + clientX, 0)
)
- .subscribe(count => console.log(count));
+ .subscribe((count) => console.log(count));
```
Other value producing operators are [**pluck**](../api/operators/pluck), [**pairwise**](../api/operators/pairwise), [**sample**](../api/operators/sample) etc.
diff --git a/docs_app/content/guide/scheduler.md b/docs_app/content/guide/scheduler.md
index 3aa88c4e7a..38de9d45d4 100644
--- a/docs_app/content/guide/scheduler.md
+++ b/docs_app/content/guide/scheduler.md
@@ -10,9 +10,9 @@
In the example below, we take the usual simple Observable that emits values `1`, `2`, `3` synchronously, and use the operator `observeOn` to specify the `async` scheduler to use for delivering those values.
+
```ts
-import { Observable, asyncScheduler } from 'rxjs';
-import { observeOn } from 'rxjs/operators';
+import { Observable, observeOn, asyncScheduler } from 'rxjs';
const observable = new Observable((observer) => {
observer.next(1);
@@ -26,14 +26,14 @@ const observable = new Observable((observer) => {
console.log('just before subscribe');
observable.subscribe({
next(x) {
- console.log('got value ' + x)
+ console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
- console.log('done');
- }
+ console.log('done');
+ },
});
console.log('just after subscribe');
```
@@ -51,11 +51,11 @@ done
Notice how the notifications `got value...` were delivered after `just after subscribe`, which is different to the default behavior we have seen so far. This is because `observeOn(asyncScheduler)` introduces a proxy Observer between `new Observable` and the final Observer. Let's rename some identifiers to make that distinction obvious in the example code:
+
```ts
-import { Observable, asyncScheduler } from 'rxjs';
-import { observeOn } from 'rxjs/operators';
+import { Observable, observeOn, asyncScheduler } from 'rxjs';
-var observable = new Observable((proxyObserver) => {
+const observable = new Observable((proxyObserver) => {
proxyObserver.next(1);
proxyObserver.next(2);
proxyObserver.next(3);
@@ -64,16 +64,16 @@ var observable = new Observable((proxyObserver) => {
observeOn(asyncScheduler)
);
-var finalObserver = {
+const finalObserver = {
next(x) {
- console.log('got value ' + x)
+ console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
- console.log('done');
- }
+ console.log('done');
+ },
};
console.log('just before subscribe');
@@ -83,6 +83,7 @@ console.log('just after subscribe');
The `proxyObserver` is created in `observeOn(asyncScheduler)`, and its `next(val)` function is approximately the following:
+
```ts
const proxyObserver = {
next(val) {
@@ -94,31 +95,30 @@ const proxyObserver = {
},
// ...
-}
+};
```
The `async` Scheduler operates with a `setTimeout` or `setInterval`, even if the given `delay` was zero. As usual, in JavaScript, `setTimeout(fn, 0)` is known to run the function `fn` earliest on the next event loop iteration. This explains why `got value 1` is delivered to the `finalObserver` after `just after subscribe` happened.
-The `schedule()` method of a Scheduler takes a `delay` argument, which refers to a quantity of time relative to the Scheduler's own internal clock. A Scheduler's clock need not have any relation to the actual wall-clock time. This is how temporal operators like `delay` operate not on actual time, but on time dictated by the Scheduler's clock. This is specially useful in testing, where a *virtual time Scheduler* may be used to fake wall-clock time while in reality executing scheduled tasks synchronously.
+The `schedule()` method of a Scheduler takes a `delay` argument, which refers to a quantity of time relative to the Scheduler's own internal clock. A Scheduler's clock need not have any relation to the actual wall-clock time. This is how temporal operators like `delay` operate not on actual time, but on time dictated by the Scheduler's clock. This is specially useful in testing, where a _virtual time Scheduler_ may be used to fake wall-clock time while in reality executing scheduled tasks synchronously.
## Scheduler Types
The `async` Scheduler is one of the built-in schedulers provided by RxJS. Each of these can be created and returned by using static properties of the `Scheduler` object.
-| Scheduler | Purpose |
-| --- | --- |
-| `null` | By not passing any scheduler, notifications are delivered synchronously and recursively. Use this for constant-time operations or tail recursive operations. |
-| `queueScheduler` | Schedules on a queue in the current event frame (trampoline scheduler). Use this for iteration operations. |
-| `asapScheduler` | Schedules on the micro task queue, which is the same queue used for promises. Basically after the current job, but before the next job. Use this for asynchronous conversions. |
-| `asyncScheduler` | Schedules work with `setInterval`. Use this for time-based operations. |
-| `animationFrameScheduler` | Schedules task that will happen just before next browser content repaint. Can be used to create smooth browser animations.|
-
+| Scheduler | Purpose |
+| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `null` | By not passing any scheduler, notifications are delivered synchronously and recursively. Use this for constant-time operations or tail recursive operations. |
+| `queueScheduler` | Schedules on a queue in the current event frame (trampoline scheduler). Use this for iteration operations. |
+| `asapScheduler` | Schedules on the micro task queue, which is the same queue used for promises. Basically after the current job, but before the next job. Use this for asynchronous conversions. |
+| `asyncScheduler` | Schedules work with `setInterval`. Use this for time-based operations. |
+| `animationFrameScheduler` | Schedules task that will happen just before next browser content repaint. Can be used to create smooth browser animations. |
## Using Schedulers
-You may have already used schedulers in your RxJS code without explicitly stating the type of schedulers to be used. This is because all Observable operators that deal with concurrency have optional schedulers. If you do not provide the scheduler, RxJS will pick a default scheduler by using the principle of least concurrency. This means that the scheduler which introduces the least amount of concurrency that satisfies the needs of the operator is chosen. For example, for operators returning an observable with a finite and small number of messages, RxJS uses no Scheduler, i.e. `null` or `undefined`. For operators returning a potentially large or infinite number of messages, `queue` Scheduler is used. For operators which use timers, `async` is used.
+You may have already used schedulers in your RxJS code without explicitly stating the type of schedulers to be used. This is because all Observable operators that deal with concurrency have optional schedulers. If you do not provide the scheduler, RxJS will pick a default scheduler by using the principle of least concurrency. This means that the scheduler which introduces the least amount of concurrency that satisfies the needs of the operator is chosen. For example, for operators returning an observable with a finite and small number of messages, RxJS uses no Scheduler, i.e. `null` or `undefined`. For operators returning a potentially large or infinite number of messages, `queue` Scheduler is used. For operators which use timers, `async` is used.
-Because RxJS uses the least concurrency scheduler, you can pick a different scheduler if you want to introduce concurrency for performance purpose. To specify a particular scheduler, you can use those operator methods that take a scheduler, e.g., `from([10, 20, 30], asyncScheduler)`.
+Because RxJS uses the least concurrency scheduler, you can pick a different scheduler if you want to introduce concurrency for performance purpose. To specify a particular scheduler, you can use those operator methods that take a scheduler, e.g., `from([10, 20, 30], asyncScheduler)`.
**Static creation operators usually take a Scheduler as argument.** For instance, `from(array, scheduler)` lets you specify the Scheduler to use when delivering each notification converted from the `array`. It is usually the last argument to the operator. The following static creation operators take a Scheduler argument:
diff --git a/docs_app/content/guide/subject.md b/docs_app/content/guide/subject.md
index 5c281f413f..2938b633d9 100644
--- a/docs_app/content/guide/subject.md
+++ b/docs_app/content/guide/subject.md
@@ -18,10 +18,10 @@ import { Subject } from 'rxjs';
const subject = new Subject();
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
subject.next(1);
@@ -42,10 +42,10 @@ import { Subject, from } from 'rxjs';
const subject = new Subject();
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
const observable = from([1, 2, 3]);
@@ -74,8 +74,7 @@ A "multicasted Observable" passes notifications through a Subject which may have
Under the hood, this is how the `multicast` operator works: Observers subscribe to an underlying Subject, and the Subject subscribes to the source Observable. The following example is similar to the previous example which used `observable.subscribe(subject)`:
```ts
-import { from, Subject } from 'rxjs';
-import { multicast } from 'rxjs/operators';
+import { from, Subject, multicast } from 'rxjs';
const source = from([1, 2, 3]);
const subject = new Subject();
@@ -83,10 +82,10 @@ const multicasted = source.pipe(multicast(subject));
// These are, under the hood, `subject.subscribe({...})`:
multicasted.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
multicasted.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
// This is, under the hood, `source.subscribe(subject)`:
@@ -95,11 +94,11 @@ multicasted.connect();
`multicast` returns an Observable that looks like a normal Observable, but works like a Subject when it comes to subscribing. `multicast` returns a `ConnectableObservable`, which is simply an Observable with the `connect()` method.
-The `connect()` method is important to determine exactly when the shared Observable execution will start. Because `connect()` does `source.subscribe(subject)` under the hood, `connect()` returns a Subscription, which you can unsubscribe from in order to cancel the shared Observable execution.
+The `connect()` method is important to determine exactly when the shared Observable execution will start. Because `connect()` does `source.subscribe(subject)` under the hood, `connect()` returns a Subscription, which you can unsubscribe from in order to cancel the shared Observable execution.
### Reference counting
-Calling `connect()` manually and handling the Subscription is often cumbersome. Usually, we want to *automatically* connect when the first Observer arrives, and automatically cancel the shared execution when the last Observer unsubscribes.
+Calling `connect()` manually and handling the Subscription is often cumbersome. Usually, we want to _automatically_ connect when the first Observer arrives, and automatically cancel the shared execution when the last Observer unsubscribes.
Consider the following example where subscriptions occur as outlined by this list:
@@ -108,17 +107,16 @@ Consider the following example where subscriptions occur as outlined by this lis
3. The `next` value `0` is delivered to the first Observer
4. Second Observer subscribes to the multicasted Observable
5. The `next` value `1` is delivered to the first Observer
-5. The `next` value `1` is delivered to the second Observer
-1. First Observer unsubscribes from the multicasted Observable
-5. The `next` value `2` is delivered to the second Observer
-1. Second Observer unsubscribes from the multicasted Observable
-1. **The connection to the multicasted Observable is unsubscribed**
+6. The `next` value `1` is delivered to the second Observer
+7. First Observer unsubscribes from the multicasted Observable
+8. The `next` value `2` is delivered to the second Observer
+9. Second Observer unsubscribes from the multicasted Observable
+10. **The connection to the multicasted Observable is unsubscribed**
To achieve that with explicit calls to `connect()`, we write the following code:
```ts
-import { interval, Subject } from 'rxjs';
-import { multicast } from 'rxjs/operators';
+import { interval, Subject, multicast } from 'rxjs';
const source = interval(500);
const subject = new Subject();
@@ -126,7 +124,7 @@ const multicasted = source.pipe(multicast(subject));
let subscription1, subscription2, subscriptionConnect;
subscription1 = multicasted.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
// We should call `connect()` here, because the first
// subscriber to `multicasted` is interested in consuming values
@@ -134,7 +132,7 @@ subscriptionConnect = multicasted.connect();
setTimeout(() => {
subscription2 = multicasted.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
}, 600);
@@ -157,8 +155,7 @@ If we wish to avoid explicit calls to `connect()`, we can use ConnectableObserva
Below is an example:
```ts
-import { interval, Subject } from 'rxjs';
-import { multicast, refCount } from 'rxjs/operators';
+import { interval, Subject, multicast, refCount } from 'rxjs';
const source = interval(500);
const subject = new Subject();
@@ -169,13 +166,13 @@ let subscription1, subscription2;
// it is the first subscriber to `refCounted`
console.log('observerA subscribed');
subscription1 = refCounted.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
setTimeout(() => {
console.log('observerB subscribed');
subscription2 = refCounted.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
}, 600);
@@ -217,14 +214,14 @@ import { BehaviorSubject } from 'rxjs';
const subject = new BehaviorSubject(0); // 0 is the initial value
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
subject.next(1);
subject.next(2);
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
subject.next(3);
@@ -240,7 +237,7 @@ subject.next(3);
## ReplaySubject
-A `ReplaySubject` is similar to a `BehaviorSubject` in that it can send old values to new subscribers, but it can also *record* a part of the Observable execution.
+A `ReplaySubject` is similar to a `BehaviorSubject` in that it can send old values to new subscribers, but it can also _record_ a part of the Observable execution.
A `ReplaySubject` records multiple values from the Observable execution and replays them to new subscribers.
@@ -251,7 +248,7 @@ import { ReplaySubject } from 'rxjs';
const subject = new ReplaySubject(3); // buffer 3 values for new subscribers
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
subject.next(1);
@@ -260,7 +257,7 @@ subject.next(3);
subject.next(4);
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
subject.next(5);
@@ -277,15 +274,16 @@ subject.next(5);
// observerB: 5
```
-You can also specify a *window time* in milliseconds, besides of the buffer size, to determine how old the recorded values can be. In the following example we use a large buffer size of `100`, but a window time parameter of just `500` milliseconds.
+You can also specify a _window time_ in milliseconds, besides of the buffer size, to determine how old the recorded values can be. In the following example we use a large buffer size of `100`, but a window time parameter of just `500` milliseconds.
+
```ts
import { ReplaySubject } from 'rxjs';
const subject = new ReplaySubject(100, 500 /* windowTime */);
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
let i = 1;
@@ -293,7 +291,7 @@ setInterval(() => subject.next(i++), 200);
setTimeout(() => {
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
}, 1000);
@@ -320,7 +318,7 @@ import { AsyncSubject } from 'rxjs';
const subject = new AsyncSubject();
subject.subscribe({
- next: (v) => console.log(`observerA: ${v}`)
+ next: (v) => console.log(`observerA: ${v}`),
});
subject.next(1);
@@ -329,7 +327,7 @@ subject.next(3);
subject.next(4);
subject.subscribe({
- next: (v) => console.log(`observerB: ${v}`)
+ next: (v) => console.log(`observerB: ${v}`),
});
subject.next(5);
@@ -342,7 +340,6 @@ subject.complete();
The AsyncSubject is similar to the [`last()`](/api/operators/last) operator, in that it waits for the `complete` notification in order to deliver a single value.
-
## Void subject
Sometimes the emitted value doesn't matter as much as the fact that a value was emitted.
@@ -371,10 +368,10 @@ import { Subject } from 'rxjs';
const subject = new Subject(); // Shorthand for Subject
subject.subscribe({
- next: () => console.log('One second has passed')
+ next: () => console.log('One second has passed'),
});
setTimeout(() => subject.next(), 1000);
```
-Before version 7, the default type of Subject values was `any`. `Subject` disables type checking of the emitted values, whereas `Subject` prevents accidental access to the emitted value. If you want the old behavior, then replace `Subject` with `Subject`.
\ No newline at end of file
+Before version 7, the default type of Subject values was `any`. `Subject` disables type checking of the emitted values, whereas `Subject` prevents accidental access to the emitted value. If you want the old behavior, then replace `Subject` with `Subject`.
diff --git a/docs_app/content/guide/testing/marble-testing.md b/docs_app/content/guide/testing/marble-testing.md
index 303f20330b..51e79878b3 100644
--- a/docs_app/content/guide/testing/marble-testing.md
+++ b/docs_app/content/guide/testing/marble-testing.md
@@ -10,7 +10,7 @@ We can test our _asynchronous_ RxJS code _synchronously_ and deterministically b
```ts
import { TestScheduler } from 'rxjs/testing';
-import { throttleTime } from 'rxjs/operators';
+import { throttleTime } from 'rxjs';
const testScheduler = new TestScheduler((actual, expected) => {
// asserting the two objects are equal - required
diff --git a/docs_app/package.json b/docs_app/package.json
index 87d09082f4..b5b72cb8de 100644
--- a/docs_app/package.json
+++ b/docs_app/package.json
@@ -116,7 +116,6 @@
"lighthouse": "^7.0.1",
"lodash": "^4.17.20",
"lunr": "^2.1.0",
- "mkdirp": "^0.5.1",
"protractor": "~7.0.0",
"rehype-slug": "^2.0.3",
"remark": "^12.0.1",
diff --git a/docs_app/src/assets/images/marble-diagrams/audit.png b/docs_app/src/assets/images/marble-diagrams/audit.png
deleted file mode 100644
index ceca809ff0..0000000000
Binary files a/docs_app/src/assets/images/marble-diagrams/audit.png and /dev/null differ
diff --git a/docs_app/src/assets/images/marble-diagrams/debounce.png b/docs_app/src/assets/images/marble-diagrams/debounce.png
deleted file mode 100644
index 91ed9bb1cf..0000000000
Binary files a/docs_app/src/assets/images/marble-diagrams/debounce.png and /dev/null differ
diff --git a/docs_app/src/assets/images/marble-diagrams/throttle.png b/docs_app/src/assets/images/marble-diagrams/throttle.png
deleted file mode 100644
index 18a69a0697..0000000000
Binary files a/docs_app/src/assets/images/marble-diagrams/throttle.png and /dev/null differ
diff --git a/docs_app/tools/transforms/angular-api-package/index.js b/docs_app/tools/transforms/angular-api-package/index.js
index 5217bb65c7..2cda9a5ba5 100644
--- a/docs_app/tools/transforms/angular-api-package/index.js
+++ b/docs_app/tools/transforms/angular-api-package/index.js
@@ -10,7 +10,7 @@ const Package = require('dgeni').Package;
const basePackage = require('../angular-base-package');
const typeScriptPackage = require('dgeni-packages/typescript');
const { API_SOURCE_PATH, API_TEMPLATES_PATH, MARBLE_IMAGES_PATH, MARBLE_IMAGES_WEB_PATH,
- MARBLE_IMAGES_OUTPUT_PATH, requireFolder } = require('../config');
+ requireFolder } = require('../config');
module.exports = new Package('angular-api', [basePackage, typeScriptPackage])
@@ -188,15 +188,13 @@ module.exports = new Package('angular-api', [basePackage, typeScriptPackage])
.config(function(embedMarbleDiagramsPostProcessor) {
embedMarbleDiagramsPostProcessor.marbleImagesPath = MARBLE_IMAGES_PATH;
- embedMarbleDiagramsPostProcessor.marbleImagesOutputPath = MARBLE_IMAGES_OUTPUT_PATH;
embedMarbleDiagramsPostProcessor.marbleImagesOutputWebPath = `/${MARBLE_IMAGES_WEB_PATH}`;
})
.config(function(convertToJsonProcessor, postProcessHtml, API_DOC_TYPES_TO_RENDER, API_DOC_TYPES, autoLinkCode, embedMarbleDiagramsPostProcessor) {
convertToJsonProcessor.docTypes = convertToJsonProcessor.docTypes.concat(API_DOC_TYPES_TO_RENDER);
postProcessHtml.docTypes = convertToJsonProcessor.docTypes.concat(API_DOC_TYPES_TO_RENDER);
- postProcessHtml.plugins = [embedMarbleDiagramsPostProcessor.process];
+ postProcessHtml.plugins.push(embedMarbleDiagramsPostProcessor.process);
autoLinkCode.docTypes = API_DOC_TYPES;
autoLinkCode.codeElements = ['code', 'code-example', 'code-pane'];
});
-
diff --git a/docs_app/tools/transforms/angular-api-package/post-processors/embedMarbleDiagrams.js b/docs_app/tools/transforms/angular-api-package/post-processors/embedMarbleDiagrams.js
index 7309502f33..266a762432 100644
--- a/docs_app/tools/transforms/angular-api-package/post-processors/embedMarbleDiagrams.js
+++ b/docs_app/tools/transforms/angular-api-package/post-processors/embedMarbleDiagrams.js
@@ -1,17 +1,14 @@
const fs = require('fs');
const path = require('path');
-const mkdirp = require('mkdirp');
const visit = require('unist-util-visit');
const is = require('hast-util-is-element');
/**
* Find pre-rendered marble diagrams and override their
`src` attributes in docs.
- * You need to run `npm run tests2png` in rxjs root to generate marble diagrams into `tmp/docs/img`
*/
-module.exports = function embedMarbleDiagramsPostProcessor(log) {
+module.exports = function embedMarbleDiagramsPostProcessor() {
const service = {
marbleImagesPath: null,
- marbleImagesOutputPath: null,
marbleImagesOutputWebPath: null,
process: () => {
return (tree) => {
@@ -23,18 +20,12 @@ module.exports = function embedMarbleDiagramsPostProcessor(log) {
if (fs.existsSync(expectedImgPath)) {
const operator = path.basename(src, path.extname(src));
const filename = path.basename(expectedImgPath);
- const targetPath = `${service.marbleImagesOutputPath}/${filename}`;
-
- mkdirp.sync(path.dirname(targetPath));
- fs.copyFileSync(expectedImgPath, targetPath);
props.src = `${service.marbleImagesOutputWebPath}/${filename}`;
props.width = '100%';
if (!props.alt) {
props.alt = `${operator} marble diagram`;
}
-
- log.debug(`Found ${expectedImgPath} and copying it to ${targetPath}`);
}
}
});
diff --git a/docs_app/tools/transforms/angular-base-package/index.js b/docs_app/tools/transforms/angular-base-package/index.js
index 85be858697..f42fff00c7 100644
--- a/docs_app/tools/transforms/angular-base-package/index.js
+++ b/docs_app/tools/transforms/angular-base-package/index.js
@@ -137,7 +137,7 @@ module.exports = new Package('angular-base', [
postProcessHtml.plugins = [
require('./post-processors/autolink-headings'),
addImageDimensions,
- require('./post-processors/h1-checker'),
+ // require('./post-processors/h1-checker'),
autoLinkCode,
];
})
diff --git a/docs_app/tools/transforms/angular-base-package/post-processors/auto-link-code.js b/docs_app/tools/transforms/angular-base-package/post-processors/auto-link-code.js
index 558a5705cb..18493f78da 100644
--- a/docs_app/tools/transforms/angular-base-package/post-processors/auto-link-code.js
+++ b/docs_app/tools/transforms/angular-base-package/post-processors/auto-link-code.js
@@ -24,56 +24,126 @@ module.exports = function autoLinkCode(getDocFromAlias) {
autoLinkCodeImpl.docTypes = [];
autoLinkCodeImpl.customFilters = [];
autoLinkCodeImpl.codeElements = ['code'];
+ autoLinkCodeImpl.ignoredLanguages = ['bash', 'sh', 'shell', 'json', 'markdown'];
+ autoLinkCodeImpl.failOnMissingDocPath = false;
+
return autoLinkCodeImpl;
- function autoLinkCodeImpl() {
- return (ast) => {
+ function autoLinkCodeImpl() {
+ return (ast, file) => {
visit(ast, 'element', (node, ancestors) => {
- // Only interested in code elements that are not inside links
- if (autoLinkCodeImpl.codeElements.some(elementType => is(node, elementType)) &&
- ancestors.every(ancestor => !is(ancestor, 'a'))) {
- visit(node, 'text', (node, ancestors) => {
- // Only interested in text nodes that are not inside links
- if (ancestors.every(ancestor => !is(ancestor, 'a'))) {
-
- const parent = ancestors[ancestors.length-1];
- const index = parent.children.indexOf(node);
-
- // Can we convert the whole text node into a doc link?
- const docs = getDocFromAlias(node.value);
- if (foundValidDoc(docs)) {
- parent.children.splice(index, 1, createLinkNode(docs[0], node.value));
- } else {
- // Parse the text for words that we can convert to links
- const nodes = textContent(node).split(/([A-Za-z0-9_.-]+)/)
- .filter(word => word.length)
- .map((word, index, words) => {
- // remove docs that fail the custom filter tests
- const filteredDocs = autoLinkCodeImpl.customFilters.reduce((docs, filter) => filter(docs, words, index), getDocFromAlias(word));
- return foundValidDoc(filteredDocs) ?
- createLinkNode(filteredDocs[0], word) : // Create a link wrapping the text node.
- { type: 'text', value: word }; // this is just text so push a new text node
- });
-
- // Replace the text node with the links and leftover text nodes
- Array.prototype.splice.apply(parent.children, [index, 1].concat(nodes));
- }
- }
- });
+ if (!isValidCodeElement(node, ancestors)) {
+ return;
}
+
+ visit(node, 'text', (node, ancestors) => {
+ const isInLink = isInsideLink(ancestors);
+ if (isInLink) {
+ return;
+ }
+
+ const parent = ancestors[ancestors.length - 1];
+ const index = parent.children.indexOf(node);
+
+ // Can we convert the whole text node into a doc link?
+ const docs = getFilteredDocsFromAlias([node.value], 0);
+ if (foundValidDoc(docs, node.value, file)) {
+ parent.children.splice(index, 1, createLinkNode(docs[0], node.value));
+ } else {
+ // Parse the text for words that we can convert to links
+ const nodes = getNodes(node, file);
+ // Replace the text node with the links and leftover text nodes
+ Array.prototype.splice.apply(parent.children, [index, 1].concat(nodes));
+ // Do not visit this node's children or the newly added nodes
+ return [visit.SKIP, index + nodes.length];
+ }
+ });
});
};
}
- function foundValidDoc(docs) {
- return docs.length === 1 && autoLinkCodeImpl.docTypes.indexOf(docs[0].docType) !== -1;
+
+ function isValidCodeElement(node, ancestors) {
+ // Only interested in code elements that:
+ // * do not have `no-auto-link` class
+ // * do not have an ignored language
+ // * are not inside links
+ const isCodeElement = autoLinkCodeImpl.codeElements.some(elementType => is(node, elementType));
+ const hasNoAutoLink =
+ node.properties.className && node.properties.className.includes('no-auto-link');
+ const isLanguageSupported =
+ !autoLinkCodeImpl.ignoredLanguages.includes(node.properties.language);
+ const isInLink = isInsideLink(ancestors);
+ return isCodeElement && !hasNoAutoLink && isLanguageSupported && !isInLink;
+ }
+
+ function isInsideLink(ancestors) {
+ return ancestors.some(ancestor => is(ancestor, 'a'));
+ }
+
+ function getFilteredDocsFromAlias(words, index) {
+ // Remove docs that fail the custom filter tests.
+ return autoLinkCodeImpl.customFilters.reduce(
+ (docs, filter) => filter(docs, words, index), getDocFromAlias(words[index]));
+ }
+
+ function getNodes(node, file) {
+ return textContent(node)
+ .split(/([A-Za-z0-9_.-]+)/)
+ .filter(word => word.length)
+ .map((word, index, words) => {
+ const filteredDocs = getFilteredDocsFromAlias(words, index);
+
+ return foundValidDoc(filteredDocs, word, file) ?
+ // Create a link wrapping the text node.
+ createLinkNode(filteredDocs[0], word) :
+ // this is just text so push a new text node
+ {type: 'text', value: word};
+ });
+ }
+
+ /**
+ * Validates the docs to be used to generate the links. The validation ensures
+ * that the docs are not `internal` and that the `docType` is supported. The `path`
+ * can be empty when the `API` is not public.
+ *
+ * @param {Array