source: trip-planner-front/node_modules/rxjs/_esm2015/internal/operators/windowTime.js@ 6a3a178

Last change on this file since 6a3a178 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 5.1 KB
Line 
1import { Subject } from '../Subject';
2import { async } from '../scheduler/async';
3import { Subscriber } from '../Subscriber';
4import { isNumeric } from '../util/isNumeric';
5import { isScheduler } from '../util/isScheduler';
6export function windowTime(windowTimeSpan) {
7 let scheduler = async;
8 let windowCreationInterval = null;
9 let maxWindowSize = Number.POSITIVE_INFINITY;
10 if (isScheduler(arguments[3])) {
11 scheduler = arguments[3];
12 }
13 if (isScheduler(arguments[2])) {
14 scheduler = arguments[2];
15 }
16 else if (isNumeric(arguments[2])) {
17 maxWindowSize = Number(arguments[2]);
18 }
19 if (isScheduler(arguments[1])) {
20 scheduler = arguments[1];
21 }
22 else if (isNumeric(arguments[1])) {
23 windowCreationInterval = Number(arguments[1]);
24 }
25 return function windowTimeOperatorFunction(source) {
26 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
27 };
28}
29class WindowTimeOperator {
30 constructor(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
31 this.windowTimeSpan = windowTimeSpan;
32 this.windowCreationInterval = windowCreationInterval;
33 this.maxWindowSize = maxWindowSize;
34 this.scheduler = scheduler;
35 }
36 call(subscriber, source) {
37 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
38 }
39}
40class CountedSubject extends Subject {
41 constructor() {
42 super(...arguments);
43 this._numberOfNextedValues = 0;
44 }
45 next(value) {
46 this._numberOfNextedValues++;
47 super.next(value);
48 }
49 get numberOfNextedValues() {
50 return this._numberOfNextedValues;
51 }
52}
53class WindowTimeSubscriber extends Subscriber {
54 constructor(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
55 super(destination);
56 this.destination = destination;
57 this.windowTimeSpan = windowTimeSpan;
58 this.windowCreationInterval = windowCreationInterval;
59 this.maxWindowSize = maxWindowSize;
60 this.scheduler = scheduler;
61 this.windows = [];
62 const window = this.openWindow();
63 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
64 const closeState = { subscriber: this, window, context: null };
65 const creationState = { windowTimeSpan, windowCreationInterval, subscriber: this, scheduler };
66 this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
67 this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
68 }
69 else {
70 const timeSpanOnlyState = { subscriber: this, window, windowTimeSpan };
71 this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
72 }
73 }
74 _next(value) {
75 const windows = this.windows;
76 const len = windows.length;
77 for (let i = 0; i < len; i++) {
78 const window = windows[i];
79 if (!window.closed) {
80 window.next(value);
81 if (window.numberOfNextedValues >= this.maxWindowSize) {
82 this.closeWindow(window);
83 }
84 }
85 }
86 }
87 _error(err) {
88 const windows = this.windows;
89 while (windows.length > 0) {
90 windows.shift().error(err);
91 }
92 this.destination.error(err);
93 }
94 _complete() {
95 const windows = this.windows;
96 while (windows.length > 0) {
97 const window = windows.shift();
98 if (!window.closed) {
99 window.complete();
100 }
101 }
102 this.destination.complete();
103 }
104 openWindow() {
105 const window = new CountedSubject();
106 this.windows.push(window);
107 const destination = this.destination;
108 destination.next(window);
109 return window;
110 }
111 closeWindow(window) {
112 window.complete();
113 const windows = this.windows;
114 windows.splice(windows.indexOf(window), 1);
115 }
116}
117function dispatchWindowTimeSpanOnly(state) {
118 const { subscriber, windowTimeSpan, window } = state;
119 if (window) {
120 subscriber.closeWindow(window);
121 }
122 state.window = subscriber.openWindow();
123 this.schedule(state, windowTimeSpan);
124}
125function dispatchWindowCreation(state) {
126 const { windowTimeSpan, subscriber, scheduler, windowCreationInterval } = state;
127 const window = subscriber.openWindow();
128 const action = this;
129 let context = { action, subscription: null };
130 const timeSpanState = { subscriber, window, context };
131 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
132 action.add(context.subscription);
133 action.schedule(state, windowCreationInterval);
134}
135function dispatchWindowClose(state) {
136 const { subscriber, window, context } = state;
137 if (context && context.action && context.subscription) {
138 context.action.remove(context.subscription);
139 }
140 subscriber.closeWindow(window);
141}
142//# sourceMappingURL=windowTime.js.map
Note: See TracBrowser for help on using the repository browser.