@fncts/observable 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/BehaviorSubject.d.ts +2 -2
  2. package/Notification.d.ts +4 -4
  3. package/Observable/api/connect.d.ts +2 -2
  4. package/Observable/api/connectable.d.ts +2 -2
  5. package/Observable/api/fromEvent.d.ts +4 -0
  6. package/Observable/api/race.d.ts +2 -1
  7. package/Observable/api/raceWith.d.ts +2 -2
  8. package/Observable/api/repeatWhen.d.ts +5 -2
  9. package/Observable/api/retryWhen.d.ts +2 -3
  10. package/Observable/api/share.d.ts +5 -4
  11. package/Observable/api/window.d.ts +2 -2
  12. package/Observable/api/windowCount.d.ts +2 -2
  13. package/Observable/api/windowTime.d.ts +5 -5
  14. package/Observable/api/windowToggle.d.ts +3 -3
  15. package/Observable/api/windowWhen.d.ts +3 -3
  16. package/Observable/api.d.ts +189 -195
  17. package/Observable/definition.d.ts +8 -6
  18. package/ObservableRef/api.d.ts +63 -0
  19. package/ObservableRef/atomic.d.ts +32 -0
  20. package/ObservableRef/definition.d.ts +52 -0
  21. package/Operator.d.ts +2 -2
  22. package/_cjs/Action.cjs +0 -7
  23. package/_cjs/Action.cjs.map +1 -1
  24. package/_cjs/AnimationFrameAction.cjs +0 -12
  25. package/_cjs/AnimationFrameAction.cjs.map +1 -1
  26. package/_cjs/AnimationFrameScheduler.cjs +0 -12
  27. package/_cjs/AnimationFrameScheduler.cjs.map +1 -1
  28. package/_cjs/AsyncAction.cjs +0 -25
  29. package/_cjs/AsyncAction.cjs.map +1 -1
  30. package/_cjs/AsyncScheduler.cjs +2 -16
  31. package/_cjs/AsyncScheduler.cjs.map +1 -1
  32. package/_cjs/BehaviorSubject.cjs +1 -13
  33. package/_cjs/BehaviorSubject.cjs.map +1 -1
  34. package/_cjs/Notification.cjs +21 -40
  35. package/_cjs/Notification.cjs.map +1 -1
  36. package/_cjs/Observable/api/connect.cjs +12 -17
  37. package/_cjs/Observable/api/connect.cjs.map +1 -1
  38. package/_cjs/Observable/api/connectable.cjs +6 -18
  39. package/_cjs/Observable/api/connectable.cjs.map +1 -1
  40. package/_cjs/Observable/api/fromCallback.cjs +0 -15
  41. package/_cjs/Observable/api/fromCallback.cjs.map +1 -1
  42. package/_cjs/Observable/api/fromEvent.cjs +3 -5
  43. package/_cjs/Observable/api/fromEvent.cjs.map +1 -1
  44. package/_cjs/Observable/api/index.cjs +0 -28
  45. package/_cjs/Observable/api/index.cjs.map +1 -1
  46. package/_cjs/Observable/api/race.cjs +2 -12
  47. package/_cjs/Observable/api/race.cjs.map +1 -1
  48. package/_cjs/Observable/api/raceWith.cjs +8 -11
  49. package/_cjs/Observable/api/raceWith.cjs.map +1 -1
  50. package/_cjs/Observable/api/repeatWhen.cjs +44 -55
  51. package/_cjs/Observable/api/repeatWhen.cjs.map +1 -1
  52. package/_cjs/Observable/api/retryWhen.cjs +29 -45
  53. package/_cjs/Observable/api/retryWhen.cjs.map +1 -1
  54. package/_cjs/Observable/api/share.cjs +61 -77
  55. package/_cjs/Observable/api/share.cjs.map +1 -1
  56. package/_cjs/Observable/api/window.cjs +33 -39
  57. package/_cjs/Observable/api/window.cjs.map +1 -1
  58. package/_cjs/Observable/api/windowCount.cjs +40 -48
  59. package/_cjs/Observable/api/windowCount.cjs.map +1 -1
  60. package/_cjs/Observable/api/windowTime.cjs +60 -73
  61. package/_cjs/Observable/api/windowTime.cjs.map +1 -1
  62. package/_cjs/Observable/api/windowToggle.cjs +55 -71
  63. package/_cjs/Observable/api/windowToggle.cjs.map +1 -1
  64. package/_cjs/Observable/api/windowWhen.cjs +42 -52
  65. package/_cjs/Observable/api/windowWhen.cjs.map +1 -1
  66. package/_cjs/Observable/api.cjs +1260 -1485
  67. package/_cjs/Observable/api.cjs.map +1 -1
  68. package/_cjs/Observable/definition.cjs +9 -37
  69. package/_cjs/Observable/definition.cjs.map +1 -1
  70. package/_cjs/Observable/dom/animationFrames.cjs +0 -12
  71. package/_cjs/Observable/dom/animationFrames.cjs.map +1 -1
  72. package/_cjs/Observable.cjs +0 -38
  73. package/_cjs/Observable.cjs.map +1 -1
  74. package/_cjs/ObservableRef/api.cjs +160 -0
  75. package/_cjs/ObservableRef/api.cjs.map +1 -0
  76. package/_cjs/ObservableRef/atomic.cjs +93 -0
  77. package/_cjs/ObservableRef/atomic.cjs.map +1 -0
  78. package/_cjs/ObservableRef/definition.cjs +24 -0
  79. package/_cjs/ObservableRef/definition.cjs.map +1 -0
  80. package/_cjs/Operator.cjs +11 -21
  81. package/_cjs/Operator.cjs.map +1 -1
  82. package/_cjs/Scheduler.cjs +0 -18
  83. package/_cjs/Scheduler.cjs.map +1 -1
  84. package/_cjs/Subject.cjs +3 -50
  85. package/_cjs/Subject.cjs.map +1 -1
  86. package/_cjs/Subscriber.cjs +0 -32
  87. package/_cjs/Subscriber.cjs.map +1 -1
  88. package/_cjs/Subscription.cjs +0 -37
  89. package/_cjs/Subscription.cjs.map +1 -1
  90. package/_cjs/index.cjs +0 -28
  91. package/_cjs/internal/animationFrameProvider.cjs +0 -9
  92. package/_cjs/internal/animationFrameProvider.cjs.map +1 -1
  93. package/_cjs/internal/args.cjs +0 -6
  94. package/_cjs/internal/args.cjs.map +1 -1
  95. package/_cjs/internal/intervalProvider.cjs +0 -2
  96. package/_cjs/internal/intervalProvider.cjs.map +1 -1
  97. package/_cjs/internal/performanceTimestampProvider.cjs +0 -1
  98. package/_cjs/internal/performanceTimestampProvider.cjs.map +1 -1
  99. package/_cjs/internal/timeoutProvider.cjs +0 -2
  100. package/_cjs/internal/timeoutProvider.cjs.map +1 -1
  101. package/_cjs/internal/timestampProvider.cjs +0 -1
  102. package/_cjs/internal/timestampProvider.cjs.map +1 -1
  103. package/_cjs/internal/util.cjs +2 -21
  104. package/_cjs/internal/util.cjs.map +1 -1
  105. package/_mjs/Action.mjs +0 -3
  106. package/_mjs/Action.mjs.map +1 -1
  107. package/_mjs/AnimationFrameAction.mjs +0 -6
  108. package/_mjs/AnimationFrameAction.mjs.map +1 -1
  109. package/_mjs/AnimationFrameScheduler.mjs +0 -7
  110. package/_mjs/AnimationFrameScheduler.mjs.map +1 -1
  111. package/_mjs/AsyncAction.mjs +0 -17
  112. package/_mjs/AsyncAction.mjs.map +1 -1
  113. package/_mjs/AsyncScheduler.mjs +2 -10
  114. package/_mjs/AsyncScheduler.mjs.map +1 -1
  115. package/_mjs/BehaviorSubject.mjs +1 -8
  116. package/_mjs/BehaviorSubject.mjs.map +1 -1
  117. package/_mjs/Notification.mjs +18 -26
  118. package/_mjs/Notification.mjs.map +1 -1
  119. package/_mjs/Observable/api/connect.mjs +12 -11
  120. package/_mjs/Observable/api/connect.mjs.map +1 -1
  121. package/_mjs/Observable/api/connectable.mjs +6 -9
  122. package/_mjs/Observable/api/connectable.mjs.map +1 -1
  123. package/_mjs/Observable/api/fromCallback.mjs +0 -10
  124. package/_mjs/Observable/api/fromCallback.mjs.map +1 -1
  125. package/_mjs/Observable/api/fromEvent.mjs +3 -1
  126. package/_mjs/Observable/api/fromEvent.mjs.map +1 -1
  127. package/_mjs/Observable/api/index.mjs.map +1 -1
  128. package/_mjs/Observable/api/race.mjs +2 -6
  129. package/_mjs/Observable/api/race.mjs.map +1 -1
  130. package/_mjs/Observable/api/raceWith.mjs +7 -6
  131. package/_mjs/Observable/api/raceWith.mjs.map +1 -1
  132. package/_mjs/Observable/api/repeatWhen.mjs +44 -48
  133. package/_mjs/Observable/api/repeatWhen.mjs.map +1 -1
  134. package/_mjs/Observable/api/retryWhen.mjs +29 -37
  135. package/_mjs/Observable/api/retryWhen.mjs.map +1 -1
  136. package/_mjs/Observable/api/share.mjs +60 -70
  137. package/_mjs/Observable/api/share.mjs.map +1 -1
  138. package/_mjs/Observable/api/window.mjs +32 -33
  139. package/_mjs/Observable/api/window.mjs.map +1 -1
  140. package/_mjs/Observable/api/windowCount.mjs +39 -43
  141. package/_mjs/Observable/api/windowCount.mjs.map +1 -1
  142. package/_mjs/Observable/api/windowTime.mjs +59 -63
  143. package/_mjs/Observable/api/windowTime.mjs.map +1 -1
  144. package/_mjs/Observable/api/windowToggle.mjs +54 -62
  145. package/_mjs/Observable/api/windowToggle.mjs.map +1 -1
  146. package/_mjs/Observable/api/windowWhen.mjs +41 -45
  147. package/_mjs/Observable/api/windowWhen.mjs.map +1 -1
  148. package/_mjs/Observable/api.mjs +1186 -1311
  149. package/_mjs/Observable/api.mjs.map +1 -1
  150. package/_mjs/Observable/definition.mjs +9 -24
  151. package/_mjs/Observable/definition.mjs.map +1 -1
  152. package/_mjs/Observable/dom/animationFrames.mjs +0 -5
  153. package/_mjs/Observable/dom/animationFrames.mjs.map +1 -1
  154. package/_mjs/Observable.mjs +4 -4
  155. package/_mjs/Observable.mjs.map +1 -1
  156. package/_mjs/ObservableRef/api.mjs +141 -0
  157. package/_mjs/ObservableRef/api.mjs.map +1 -0
  158. package/_mjs/ObservableRef/atomic.mjs +82 -0
  159. package/_mjs/ObservableRef/atomic.mjs.map +1 -0
  160. package/_mjs/ObservableRef/definition.mjs +16 -0
  161. package/_mjs/ObservableRef/definition.mjs.map +1 -0
  162. package/_mjs/Operator.mjs +11 -12
  163. package/_mjs/Operator.mjs.map +1 -1
  164. package/_mjs/Scheduler.mjs +0 -9
  165. package/_mjs/Scheduler.mjs.map +1 -1
  166. package/_mjs/Subject.mjs +3 -37
  167. package/_mjs/Subject.mjs.map +1 -1
  168. package/_mjs/Subscriber.mjs +0 -20
  169. package/_mjs/Subscriber.mjs.map +1 -1
  170. package/_mjs/Subscription.mjs +0 -26
  171. package/_mjs/Subscription.mjs.map +1 -1
  172. package/_mjs/index.mjs.map +1 -1
  173. package/_mjs/internal/animationFrameProvider.mjs +0 -5
  174. package/_mjs/internal/animationFrameProvider.mjs.map +1 -1
  175. package/_mjs/internal/args.mjs +0 -2
  176. package/_mjs/internal/args.mjs.map +1 -1
  177. package/_mjs/internal/intervalProvider.mjs +0 -2
  178. package/_mjs/internal/intervalProvider.mjs.map +1 -1
  179. package/_mjs/internal/performanceTimestampProvider.mjs +0 -1
  180. package/_mjs/internal/performanceTimestampProvider.mjs.map +1 -1
  181. package/_mjs/internal/timeoutProvider.mjs +0 -2
  182. package/_mjs/internal/timeoutProvider.mjs.map +1 -1
  183. package/_mjs/internal/timestampProvider.mjs +0 -1
  184. package/_mjs/internal/timestampProvider.mjs.map +1 -1
  185. package/_mjs/internal/util.mjs +2 -7
  186. package/_mjs/internal/util.mjs.map +1 -1
  187. package/_src/Action.ts +0 -1
  188. package/_src/AnimationFrameAction.ts +0 -2
  189. package/_src/AnimationFrameScheduler.ts +2 -7
  190. package/_src/BehaviorSubject.ts +3 -3
  191. package/_src/Notification.ts +21 -23
  192. package/_src/Observable/api/connect.ts +12 -9
  193. package/_src/Observable/api/connectable.ts +6 -7
  194. package/_src/Observable/api/fromCallback.ts +0 -1
  195. package/_src/Observable/api/fromEvent.ts +3 -0
  196. package/_src/Observable/api/race.ts +15 -13
  197. package/_src/Observable/api/raceWith.ts +15 -14
  198. package/_src/Observable/api/repeatWhen.ts +51 -56
  199. package/_src/Observable/api/retryWhen.ts +38 -43
  200. package/_src/Observable/api/share.ts +63 -71
  201. package/_src/Observable/api/window.ts +36 -41
  202. package/_src/Observable/api/windowCount.ts +44 -51
  203. package/_src/Observable/api/windowTime.ts +69 -81
  204. package/_src/Observable/api/windowToggle.ts +69 -73
  205. package/_src/Observable/api/windowWhen.ts +49 -55
  206. package/_src/Observable/api.ts +1493 -1498
  207. package/_src/Observable/definition.ts +24 -18
  208. package/_src/Observable/dom/animationFrames.ts +16 -6
  209. package/_src/Observable/instances.ts +0 -23
  210. package/_src/Observable.ts +0 -2
  211. package/_src/ObservableRef/api.ts +169 -0
  212. package/_src/ObservableRef/atomic.ts +85 -0
  213. package/_src/ObservableRef/definition.ts +57 -0
  214. package/_src/Operator.ts +20 -15
  215. package/_src/Scheduler.ts +0 -6
  216. package/_src/Subject.ts +1 -1
  217. package/_src/Subscriber.ts +3 -2
  218. package/_src/global.ts +5 -1
  219. package/_src/internal/util.ts +8 -4
  220. package/global.d.ts +5 -1
  221. package/package.json +2 -2
@@ -1,56 +1,49 @@
1
1
  /**
2
- * @tsplus fluent fncts.observable.Observable windowCount
2
+ * @tsplus pipeable fncts.observable.Observable windowCount
3
3
  */
4
- export function windowCount_<R, E, A>(
5
- fa: Observable<R, E, A>,
6
- windowSize: number,
7
- startWindowEvery = 0,
8
- ): Observable<R, E, Observable<never, E, A>> {
9
- const startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;
10
-
11
- return operate_(fa, (source, subscriber) => {
12
- let windows = [new Subject<never, E, A>()];
13
- let count = 0;
14
-
15
- subscriber.next(windows[0]!.asObservable());
16
-
17
- source.subscribe(
18
- operatorSubscriber(
19
- subscriber,
20
- {
21
- next: (value) => {
22
- for (const window of windows) {
23
- window.next(value);
24
- }
25
-
26
- const c = count - windowSize + 1;
27
- if (c >= 0 && c % startEvery === 0) {
28
- windows.shift()!.complete();
29
- }
30
-
31
- if (++count && startEvery === 0) {
32
- const window = new Subject<never, E, A>();
33
- windows.push(window);
34
- subscriber.next(window.asObservable());
35
- }
4
+ export function windowCount(windowSize: number, startWindowEvery = 0) {
5
+ return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, Observable<never, E, A>> => {
6
+ const startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;
7
+ return fa.operate((source, subscriber, environment) => {
8
+ let windows = [new Subject<never, E, A>()];
9
+ let count = 0;
10
+ subscriber.next(windows[0]!.asObservable());
11
+ source.provideEnvironment(environment).subscribe(
12
+ operatorSubscriber(
13
+ subscriber,
14
+ {
15
+ next: (value) => {
16
+ for (const window of windows) {
17
+ window.next(value);
18
+ }
19
+ const c = count - windowSize + 1;
20
+ if (c >= 0 && c % startEvery === 0) {
21
+ windows.shift()!.complete();
22
+ }
23
+ if (++count && startEvery === 0) {
24
+ const window = new Subject<never, E, A>();
25
+ windows.push(window);
26
+ subscriber.next(window.asObservable());
27
+ }
28
+ },
29
+ complete: () => {
30
+ while (windows.length > 0) {
31
+ windows.shift()!.complete();
32
+ }
33
+ subscriber.complete();
34
+ },
35
+ error: (err) => {
36
+ while (windows.length > 0) {
37
+ windows.shift()!.error(err);
38
+ }
39
+ subscriber.error(err);
40
+ },
36
41
  },
37
- complete: () => {
38
- while (windows.length > 0) {
39
- windows.shift()!.complete();
40
- }
41
- subscriber.complete();
42
+ () => {
43
+ windows = null!;
42
44
  },
43
- error: (err) => {
44
- while (windows.length > 0) {
45
- windows.shift()!.error(err);
46
- }
47
- subscriber.error(err);
48
- },
49
- },
50
- () => {
51
- windows = null!;
52
- },
53
- ),
54
- );
55
- });
45
+ ),
46
+ );
47
+ });
48
+ };
56
49
  }
@@ -8,95 +8,83 @@ interface WindowRecord<R, E, A> {
8
8
  }
9
9
 
10
10
  /**
11
- * @tsplus fluent fncts.observable.Observable windowTime
11
+ * @tsplus pipeable fncts.observable.Observable windowTime
12
12
  */
13
- export function windowTime_<R, E, A>(
14
- fa: Observable<R, E, A>,
13
+ export function windowTime(
15
14
  windowTimeSpan: number,
16
15
  scheduler?: SchedulerLike,
17
- ): Observable<R, E, Observable<never, E, A>>;
18
- export function windowTime_<R, E, A>(
19
- fa: Observable<R, E, A>,
16
+ ): <R, E, A>(fa: Observable<R, E, A>) => Observable<R, E, Observable<never, E, A>>;
17
+ export function windowTime(
20
18
  windowTimeSpan: number,
21
19
  windowCreationInterval: number,
22
20
  scheduler?: SchedulerLike,
23
- ): Observable<R, E, Observable<never, E, A>>;
24
- export function windowTime_<R, E, A>(
25
- fa: Observable<R, E, A>,
21
+ ): <R, E, A>(fa: Observable<R, E, A>) => Observable<R, E, Observable<never, E, A>>;
22
+ export function windowTime(
26
23
  windowTimeSpan: number,
27
24
  windowCreationInterval: number,
28
25
  maxWindowSize: number,
29
26
  scheduler?: SchedulerLike,
30
- ): Observable<R, E, Observable<never, E, A>>;
31
- export function windowTime_<R, E, A>(
32
- fa: Observable<R, E, A>,
33
- windowTimeSpan: number,
34
- ...args: any[]
35
- ): Observable<R, E, Observable<never, E, A>> {
36
- const scheduler = popScheduler(args) ?? asyncScheduler;
37
- const windowCreationInterval: number | null = args[0] ?? null;
38
- const maxWindowSize: number = args[1] || Infinity;
39
-
40
- return operate_(fa, (source, subscriber) => {
41
- let windowRecords: WindowRecord<never, E, A>[] | null = [];
42
- let restartOnClose = false;
43
- const closeWindow = (record: { window: Subject<never, E, A>; subs: Subscription }) => {
44
- const { window, subs } = record;
45
- window.complete();
46
- subs.unsubscribe();
47
- arrayRemove(windowRecords, record);
48
- restartOnClose && startWindow();
49
- };
50
- const startWindow = () => {
51
- if (windowRecords) {
52
- const subs = new Subscription();
53
- subscriber.add(subs);
54
- const window = new Subject<never, E, A>();
55
- const record = {
56
- window,
57
- subs,
58
- seen: 0,
59
- };
60
- windowRecords.push(record);
61
- subscriber.next(window.asObservable());
62
- subs.add(scheduler.schedule(() => closeWindow(record), windowTimeSpan));
63
- }
64
- };
65
-
66
- windowCreationInterval !== null && windowCreationInterval >= 0
67
- ? subscriber.add(
68
- scheduler.schedule(function () {
69
- startWindow();
70
- !this.closed && subscriber.add(this.schedule(null, windowCreationInterval));
71
- }, windowCreationInterval),
72
- )
73
- : (restartOnClose = true);
74
-
75
- startWindow();
76
-
77
- const loop = (cb: (record: WindowRecord<never, E, A>) => void) => windowRecords!.slice().forEach(cb);
78
-
79
- const terminate = (cb: (consumer: Observer<E, any>) => void) => {
80
- loop(({ window }) => cb(window));
81
- cb(subscriber);
82
- subscriber.unsubscribe();
83
- };
84
-
85
- source.subscribe(
86
- operatorSubscriber(subscriber, {
87
- next: (value) => {
88
- loop((record) => {
89
- record.window.next(value);
90
- maxWindowSize <= ++record.seen && closeWindow(record);
91
- });
92
- },
93
- error: (err) => terminate((consumer) => consumer.error(err)),
94
- complete: () => terminate((consumer) => consumer.complete()),
95
- }),
96
- );
97
-
98
- return () => {
99
- windowRecords = null!;
100
- };
101
- });
27
+ ): <R, E, A>(fa: Observable<R, E, A>) => Observable<R, E, Observable<never, E, A>>;
28
+ export function windowTime(windowTimeSpan: number, ...args: any[]) {
29
+ return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, Observable<never, E, A>> => {
30
+ const scheduler = popScheduler(args) ?? asyncScheduler;
31
+ const windowCreationInterval: number | null = args[0] ?? null;
32
+ const maxWindowSize: number = args[1] || Infinity;
33
+ return fa.operate((source, subscriber, environment) => {
34
+ let windowRecords: WindowRecord<never, E, A>[] | null = [];
35
+ let restartOnClose = false;
36
+ const closeWindow = (record: { window: Subject<never, E, A>; subs: Subscription }) => {
37
+ const { window, subs } = record;
38
+ window.complete();
39
+ subs.unsubscribe();
40
+ arrayRemove(windowRecords, record);
41
+ restartOnClose && startWindow();
42
+ };
43
+ const startWindow = () => {
44
+ if (windowRecords) {
45
+ const subs = new Subscription();
46
+ subscriber.add(subs);
47
+ const window = new Subject<never, E, A>();
48
+ const record = {
49
+ window,
50
+ subs,
51
+ seen: 0,
52
+ };
53
+ windowRecords.push(record);
54
+ subscriber.next(window.asObservable());
55
+ subs.add(scheduler.schedule(() => closeWindow(record), windowTimeSpan));
56
+ }
57
+ };
58
+ windowCreationInterval !== null && windowCreationInterval >= 0
59
+ ? subscriber.add(
60
+ scheduler.schedule(function () {
61
+ startWindow();
62
+ !this.closed && subscriber.add(this.schedule(null, windowCreationInterval));
63
+ }, windowCreationInterval),
64
+ )
65
+ : (restartOnClose = true);
66
+ startWindow();
67
+ const loop = (cb: (record: WindowRecord<never, E, A>) => void) => windowRecords!.slice().forEach(cb);
68
+ const terminate = (cb: (consumer: Observer<E, any>) => void) => {
69
+ loop(({ window }) => cb(window));
70
+ cb(subscriber);
71
+ subscriber.unsubscribe();
72
+ };
73
+ source.provideEnvironment(environment).subscribe(
74
+ operatorSubscriber(subscriber, {
75
+ next: (value) => {
76
+ loop((record) => {
77
+ record.window.next(value);
78
+ maxWindowSize <= ++record.seen && closeWindow(record);
79
+ });
80
+ },
81
+ error: (err) => terminate((consumer) => consumer.error(err)),
82
+ complete: () => terminate((consumer) => consumer.complete()),
83
+ }),
84
+ );
85
+ return () => {
86
+ windowRecords = null!;
87
+ };
88
+ });
89
+ };
102
90
  }
@@ -1,84 +1,80 @@
1
1
  import { arrayRemove } from "@fncts/observable/internal/util";
2
2
 
3
3
  /**
4
- * @tsplus fluent fncts.observable.Observable windowToggle
4
+ * @tsplus pipeable fncts.observable.Observable windowToggle
5
5
  */
6
- export function windowToggle_<R, E, A, R1, E1, B, R2, E2>(
7
- fa: Observable<R, E, A>,
6
+ export function windowToggle<R1, E1, B, R2, E2>(
8
7
  openings: ObservableInput<R1, E1, B>,
9
8
  closingSelector: (openValue: B) => ObservableInput<R2, E2, any>,
10
- ): Observable<R | R1 | R2, E | E1 | E2, Observable<never, E, A>> {
11
- return operate_(fa, (source, subscriber) => {
12
- const windows: Subject<never, E, A>[] = [];
13
-
14
- const handleError = (err: Cause<E>) => {
15
- while (0 < windows.length) {
16
- windows.shift()!.error(err);
17
- }
18
- subscriber.error(err);
19
- };
20
-
21
- Observable.from(openings).subscribe(
22
- operatorSubscriber(subscriber, {
23
- next: (openValue) => {
24
- const window = new Subject<never, E, A>();
25
- windows.push(window);
26
- const closingSubscription = new Subscription();
27
- const closeWindow = () => {
28
- arrayRemove(windows, window);
29
- window.complete();
30
- closingSubscription.unsubscribe();
31
- };
32
-
33
- let closingNotifier: Observable<R2, E2, any>;
34
-
35
- try {
36
- closingNotifier = Observable.from(closingSelector(openValue));
37
- } catch (err) {
38
- handleError(Cause.halt(err));
39
- return;
40
- }
41
-
42
- subscriber.next(window.asObservable());
43
-
44
- closingSubscription.add(
45
- closingNotifier.subscribe(
46
- operatorSubscriber(subscriber, {
47
- next: closeWindow,
48
- complete: noop,
49
- error: closeWindow,
50
- }),
51
- ),
52
- );
53
- },
54
- complete: noop,
55
- }),
56
- );
57
-
58
- source.subscribe(
59
- operatorSubscriber(
60
- subscriber,
61
- {
62
- next: (value) => {
63
- const windowsCopy = windows.slice();
64
- for (const window of windowsCopy) {
65
- window.next(value);
66
- }
9
+ ) {
10
+ return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1 | R2, E | E1 | E2, Observable<never, E, A>> => {
11
+ return fa.operate((source, subscriber, environment) => {
12
+ const windows: Subject<never, E, A>[] = [];
13
+ const handleError = (err: Cause<E>) => {
14
+ while (0 < windows.length) {
15
+ windows.shift()!.error(err);
16
+ }
17
+ subscriber.error(err);
18
+ };
19
+ Observable.from(openings)
20
+ .provideEnvironment(environment)
21
+ .subscribe(
22
+ operatorSubscriber(subscriber, {
23
+ next: (openValue) => {
24
+ const window = new Subject<never, E, A>();
25
+ windows.push(window);
26
+ const closingSubscription = new Subscription();
27
+ const closeWindow = () => {
28
+ arrayRemove(windows, window);
29
+ window.complete();
30
+ closingSubscription.unsubscribe();
31
+ };
32
+ let closingNotifier: Observable<R2, E2, any>;
33
+ try {
34
+ closingNotifier = Observable.from(closingSelector(openValue));
35
+ } catch (err) {
36
+ handleError(Cause.halt(err));
37
+ return;
38
+ }
39
+ subscriber.next(window.asObservable());
40
+ closingSubscription.add(
41
+ closingNotifier.provideEnvironment(environment).subscribe(
42
+ operatorSubscriber(subscriber, {
43
+ next: closeWindow,
44
+ complete: noop,
45
+ error: closeWindow,
46
+ }),
47
+ ),
48
+ );
49
+ },
50
+ complete: noop,
51
+ }),
52
+ );
53
+ source.provideEnvironment(environment).subscribe(
54
+ operatorSubscriber(
55
+ subscriber,
56
+ {
57
+ next: (value) => {
58
+ const windowsCopy = windows.slice();
59
+ for (const window of windowsCopy) {
60
+ window.next(value);
61
+ }
62
+ },
63
+ error: handleError,
64
+ complete: () => {
65
+ while (0 < windows.length) {
66
+ windows.shift()!.complete();
67
+ }
68
+ subscriber.complete();
69
+ },
67
70
  },
68
- error: handleError,
69
- complete: () => {
71
+ () => {
70
72
  while (0 < windows.length) {
71
- windows.shift()!.complete();
73
+ windows.shift()!.unsubscribe();
72
74
  }
73
- subscriber.complete();
74
75
  },
75
- },
76
- () => {
77
- while (0 < windows.length) {
78
- windows.shift()!.unsubscribe();
79
- }
80
- },
81
- ),
82
- );
83
- });
76
+ ),
77
+ );
78
+ });
79
+ };
84
80
  }
@@ -1,59 +1,53 @@
1
1
  /**
2
- * @tsplus fluent fncts.observable.Observable windowWhen
2
+ * @tsplus pipeable fncts.observable.Observable windowWhen
3
3
  */
4
- export function windowWhen_<R, E, A>(
5
- fa: Observable<R, E, A>,
6
- closingSelector: () => ObservableInput<never, never, any>,
7
- ): Observable<R, E, Observable<never, E, A>> {
8
- return operate_(fa, (source, subscriber) => {
9
- let window: Subject<never, E, A> | null;
10
- let closingSubscriber: Subscriber<E, any> | undefined;
11
-
12
- const handleError = (err: Cause<E>) => {
13
- window!.error(err);
14
- subscriber.error(err);
15
- };
16
-
17
- const openWindow = () => {
18
- closingSubscriber?.unsubscribe();
19
- window?.complete();
20
- window = new Subject();
21
- subscriber.next(window.asObservable());
22
- let closingNotifier: Observable<never, never, any>;
23
- try {
24
- closingNotifier = Observable.from(closingSelector());
25
- } catch (err) {
26
- handleError(Cause.halt(err));
27
- return;
28
- }
29
-
30
- closingNotifier.subscribe(
31
- (closingSubscriber = operatorSubscriber(subscriber, {
32
- next: openWindow,
33
- complete: openWindow,
34
- error: handleError,
35
- })),
36
- );
37
- };
38
-
39
- openWindow();
40
-
41
- source.subscribe(
42
- operatorSubscriber(
43
- subscriber,
44
- {
45
- next: (value) => window!.next(value),
46
- error: handleError,
47
- complete: () => {
48
- window!.complete();
49
- subscriber.complete();
4
+ export function windowWhen(closingSelector: () => ObservableInput<never, never, any>) {
5
+ return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, Observable<never, E, A>> => {
6
+ return fa.operate((source, subscriber, environment) => {
7
+ let window: Subject<never, E, A> | null;
8
+ let closingSubscriber: Subscriber<E, any> | undefined;
9
+ const handleError = (err: Cause<E>) => {
10
+ window!.error(err);
11
+ subscriber.error(err);
12
+ };
13
+ const openWindow = () => {
14
+ closingSubscriber?.unsubscribe();
15
+ window?.complete();
16
+ window = new Subject();
17
+ subscriber.next(window.asObservable());
18
+ let closingNotifier: Observable<never, never, any>;
19
+ try {
20
+ closingNotifier = Observable.from(closingSelector());
21
+ } catch (err) {
22
+ handleError(Cause.halt(err));
23
+ return;
24
+ }
25
+ closingNotifier.subscribe(
26
+ (closingSubscriber = operatorSubscriber(subscriber, {
27
+ next: openWindow,
28
+ complete: openWindow,
29
+ error: handleError,
30
+ })),
31
+ );
32
+ };
33
+ openWindow();
34
+ source.provideEnvironment(environment).subscribe(
35
+ operatorSubscriber(
36
+ subscriber,
37
+ {
38
+ next: (value) => window!.next(value),
39
+ error: handleError,
40
+ complete: () => {
41
+ window!.complete();
42
+ subscriber.complete();
43
+ },
44
+ },
45
+ () => {
46
+ closingSubscriber?.unsubscribe();
47
+ window = null!;
50
48
  },
51
- },
52
- () => {
53
- closingSubscriber?.unsubscribe();
54
- window = null!;
55
- },
56
- ),
57
- );
58
- });
49
+ ),
50
+ );
51
+ });
52
+ };
59
53
  }