404

[ Avaa Bypassed ]




Upload:

Command:

botdev@3.16.124.181: ~ $
import { Subject } from '../Subject';
import { Operator } from '../Operator';
import { async } from '../scheduler/async';
import { Subscriber } from '../Subscriber';
import { Observable } from '../Observable';
import { Subscription } from '../Subscription';
import { isNumeric } from '../util/isNumeric';
import { isScheduler } from '../util/isScheduler';
import { OperatorFunction, SchedulerLike, SchedulerAction } from '../types';

/**
 * Branch out the source Observable values as a nested Observable periodically
 * in time.
 *
 * <span class="informal">It's like {@link bufferTime}, but emits a nested
 * Observable instead of an array.</span>
 *
 * ![](windowTime.png)
 *
 * Returns an Observable that emits windows of items it collects from the source
 * Observable. The output Observable starts a new window periodically, as
 * determined by the `windowCreationInterval` argument. It emits each window
 * after a fixed timespan, specified by the `windowTimeSpan` argument. When the
 * source Observable completes or encounters an error, the output Observable
 * emits the current window and propagates the notification from the source
 * Observable. If `windowCreationInterval` is not provided, the output
 * Observable starts a new window when the previous window of duration
 * `windowTimeSpan` completes. If `maxWindowCount` is provided, each window
 * will emit at most fixed number of values. Window will complete immediately
 * after emitting last value and next one still will open as specified by
 * `windowTimeSpan` and `windowCreationInterval` arguments.
 *
 * ## Examples
 * In every window of 1 second each, emit at most 2 click events
 * ```ts
 * import { fromEvent } from 'rxjs';
 * import { windowTime, map, mergeAll, take } from 'rxjs/operators';
 *
 * const clicks = fromEvent(document, 'click');
 * const result = clicks.pipe(
 *   windowTime(1000),
 *   map(win => win.pipe(take(2))), // each window has at most 2 emissions
 *   mergeAll(),                    // flatten the Observable-of-Observables
 * );
 * result.subscribe(x => console.log(x));
 * ```
 *
 * Every 5 seconds start a window 1 second long, and emit at most 2 click events per window
 * ```ts
 * import { fromEvent } from 'rxjs';
 * import { windowTime, map, mergeAll, take } from 'rxjs/operators';
 *
 * const clicks = fromEvent(document, 'click');
 * const result = clicks.pipe(
 *   windowTime(1000, 5000),
 *   map(win => win.pipe(take(2))), // each window has at most 2 emissions
 *   mergeAll(),                    // flatten the Observable-of-Observables
 * );
 * result.subscribe(x => console.log(x));
 * ```
 *
 * Same as example above but with maxWindowCount instead of take
 * ```ts
 * import { fromEvent } from 'rxjs';
 * import { windowTime, mergeAll } from 'rxjs/operators';
 *
 * const clicks = fromEvent(document, 'click');
 * const result = clicks.pipe(
 *   windowTime(1000, 5000, 2), // each window has still at most 2 emissions
 *   mergeAll(),                // flatten the Observable-of-Observables
 * );
 * result.subscribe(x => console.log(x));
 * ```
 *
 * @see {@link window}
 * @see {@link windowCount}
 * @see {@link windowToggle}
 * @see {@link windowWhen}
 * @see {@link bufferTime}
 *
 * @param {number} windowTimeSpan The amount of time to fill each window.
 * @param {number} [windowCreationInterval] The interval at which to start new
 * windows.
 * @param {number} [maxWindowSize=Number.POSITIVE_INFINITY] Max number of
 * values each window can emit before completion.
 * @param {SchedulerLike} [scheduler=async] The scheduler on which to schedule the
 * intervals that determine window boundaries.
 * @return {Observable<Observable<T>>} An observable of windows, which in turn
 * are Observables.
 * @method windowTime
 * @owner Observable
 */
export function windowTime<T>(windowTimeSpan: number,
                              scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;
export function windowTime<T>(windowTimeSpan: number,
                              windowCreationInterval: number,
                              scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;
export function windowTime<T>(windowTimeSpan: number,
                              windowCreationInterval: number,
                              maxWindowSize: number,
                              scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>;

export function windowTime<T>(windowTimeSpan: number): OperatorFunction<T, Observable<T>> {
  let scheduler: SchedulerLike = async;
  let windowCreationInterval: number = null;
  let maxWindowSize: number = Number.POSITIVE_INFINITY;

  if (isScheduler(arguments[3])) {
    scheduler = arguments[3];
  }

  if (isScheduler(arguments[2])) {
    scheduler = arguments[2];
  } else if (isNumeric(arguments[2])) {
    maxWindowSize = Number(arguments[2]);
  }

  if (isScheduler(arguments[1])) {
    scheduler = arguments[1];
  } else if (isNumeric(arguments[1])) {
    windowCreationInterval = Number(arguments[1]);
  }

  return function windowTimeOperatorFunction(source: Observable<T>) {
    return source.lift(new WindowTimeOperator<T>(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
  };
}

class WindowTimeOperator<T> implements Operator<T, Observable<T>> {

  constructor(private windowTimeSpan: number,
              private windowCreationInterval: number | null,
              private maxWindowSize: number,
              private scheduler: SchedulerLike) {
  }

  call(subscriber: Subscriber<Observable<T>>, source: any): any {
    return source.subscribe(new WindowTimeSubscriber(
      subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler
    ));
  }
}

interface CreationState<T> {
  windowTimeSpan: number;
  windowCreationInterval: number;
  subscriber: WindowTimeSubscriber<T>;
  scheduler: SchedulerLike;
}

interface TimeSpanOnlyState<T> {
    window: CountedSubject<T>;
    windowTimeSpan: number;
    subscriber: WindowTimeSubscriber<T>;
  }

interface CloseWindowContext<T> {
  action: SchedulerAction<CreationState<T>>;
  subscription: Subscription;
}

interface CloseState<T> {
  subscriber: WindowTimeSubscriber<T>;
  window: CountedSubject<T>;
  context: CloseWindowContext<T>;
}

class CountedSubject<T> extends Subject<T> {
  private _numberOfNextedValues: number = 0;

  next(value?: T): void {
    this._numberOfNextedValues++;
    super.next(value);
  }

  get numberOfNextedValues(): number {
    return this._numberOfNextedValues;
  }
}

/**
 * We need this JSDoc comment for affecting ESDoc.
 * @ignore
 * @extends {Ignored}
 */
class WindowTimeSubscriber<T> extends Subscriber<T> {
  private windows: CountedSubject<T>[] = [];

  constructor(protected destination: Subscriber<Observable<T>>,
              private windowTimeSpan: number,
              private windowCreationInterval: number | null,
              private maxWindowSize: number,
              private scheduler: SchedulerLike) {
    super(destination);

    const window = this.openWindow();
    if (windowCreationInterval !== null && windowCreationInterval >= 0) {
      const closeState: CloseState<T> = { subscriber: this, window, context: <any>null };
      const creationState: CreationState<T> = { windowTimeSpan, windowCreationInterval, subscriber: this, scheduler };
      this.add(scheduler.schedule<CloseState<T>>(dispatchWindowClose, windowTimeSpan, closeState));
      this.add(scheduler.schedule<CreationState<T>>(dispatchWindowCreation, windowCreationInterval, creationState));
    } else {
      const timeSpanOnlyState: TimeSpanOnlyState<T> = { subscriber: this, window, windowTimeSpan };
      this.add(scheduler.schedule<TimeSpanOnlyState<T>>(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
    }
  }

  protected _next(value: T): void {
    const windows = this.windows;
    const len = windows.length;
    for (let i = 0; i < len; i++) {
      const window = windows[i];
      if (!window.closed) {
        window.next(value);
        if (window.numberOfNextedValues >= this.maxWindowSize) {
          this.closeWindow(window);
        }
      }
    }
  }

  protected _error(err: any): void {
    const windows = this.windows;
    while (windows.length > 0) {
      windows.shift().error(err);
    }
    this.destination.error(err);
  }

  protected _complete(): void {
    const windows = this.windows;
    while (windows.length > 0) {
      const window = windows.shift();
      if (!window.closed) {
        window.complete();
      }
    }
    this.destination.complete();
  }

  public openWindow(): CountedSubject<T> {
    const window = new CountedSubject<T>();
    this.windows.push(window);
    const destination = this.destination;
    destination.next(window);
    return window;
  }

  public closeWindow(window: CountedSubject<T>): void {
    window.complete();
    const windows = this.windows;
    windows.splice(windows.indexOf(window), 1);
  }
}

function dispatchWindowTimeSpanOnly<T>(this: SchedulerAction<TimeSpanOnlyState<T>>, state: TimeSpanOnlyState<T>): void {
  const { subscriber, windowTimeSpan, window } = state;
  if (window) {
    subscriber.closeWindow(window);
  }
  state.window = subscriber.openWindow();
  this.schedule(state, windowTimeSpan);
}

function dispatchWindowCreation<T>(this: SchedulerAction<CreationState<T>>, state: CreationState<T>): void {
  const { windowTimeSpan, subscriber, scheduler, windowCreationInterval } = state;
  const window = subscriber.openWindow();
  const action = this;
  let context: CloseWindowContext<T> = { action, subscription: <any>null };
  const timeSpanState: CloseState<T> = { subscriber, window, context };
  context.subscription = scheduler.schedule<CloseState<T>>(dispatchWindowClose, windowTimeSpan, timeSpanState);
  action.add(context.subscription);
  action.schedule(state, windowCreationInterval);
}

function dispatchWindowClose<T>(state: CloseState<T>): void {
  const { subscriber, window, context } = state;
  if (context && context.action && context.subscription) {
    context.action.remove(context.subscription);
  }
  subscriber.closeWindow(window);
}

Filemanager

Name Type Size Permission Actions
audit.ts File 4.14 KB 0644
auditTime.ts File 2.38 KB 0644
buffer.ts File 2.54 KB 0644
bufferCount.ts File 4.46 KB 0644
bufferTime.ts File 8.51 KB 0644
bufferToggle.ts File 5.6 KB 0644
bufferWhen.ts File 3.89 KB 0644
catchError.ts File 4.72 KB 0644
combineAll.ts File 2.44 KB 0644
combineLatest.ts File 4.32 KB 0644
concat.ts File 2.18 KB 0644
concatAll.ts File 2.26 KB 0644
concatMap.ts File 3.4 KB 0644
concatMapTo.ts File 3.05 KB 0644
count.ts File 3.78 KB 0644
debounce.ts File 4.88 KB 0644
debounceTime.ts File 4.54 KB 0644
defaultIfEmpty.ts File 2.69 KB 0644
delay.ts File 5.09 KB 0644
delayWhen.ts File 7.7 KB 0644
dematerialize.ts File 2.58 KB 0644
distinct.ts File 4.22 KB 0644
distinctUntilChanged.ts File 3.76 KB 0644
distinctUntilKeyChanged.ts File 2.79 KB 0644
elementAt.ts File 2.56 KB 0644
endWith.ts File 4.06 KB 0644
every.ts File 2.54 KB 0644
exhaust.ts File 3.2 KB 0644
exhaustMap.ts File 5.64 KB 0644
expand.ts File 6.18 KB 0644
filter.ts File 3.69 KB 0644
finalize.ts File 1.3 KB 0644
find.ts File 3.81 KB 0644
findIndex.ts File 1.86 KB 0644
first.ts File 3.36 KB 0644
groupBy.ts File 9.95 KB 0644
ignoreElements.ts File 1.49 KB 0644
index.ts File 4.02 KB 0644
isEmpty.ts File 2.67 KB 0644
last.ts File 2.36 KB 0644
map.ts File 3.04 KB 0644
mapTo.ts File 1.9 KB 0644
materialize.ts File 3.25 KB 0644
max.ts File 1.54 KB 0644
merge.ts File 3.59 KB 0644
mergeAll.ts File 2.43 KB 0644
mergeMap.ts File 6.28 KB 0644
mergeMapTo.ts File 2.56 KB 0644
mergeScan.ts File 4.65 KB 0644
min.ts File 1.54 KB 0644
multicast.ts File 3.46 KB 0644
observeOn.ts File 5.17 KB 0644
onErrorResumeNext.ts File 8.18 KB 0644
pairwise.ts File 2.43 KB 0644
partition.ts File 2.68 KB 0644
pluck.ts File 3.07 KB 0644
publish.ts File 2.51 KB 0644
publishBehavior.ts File 589 B 0644
publishLast.ts File 2.06 KB 0644
publishReplay.ts File 1.47 KB 0644
race.ts File 1.85 KB 0644
reduce.ts File 3.71 KB 0644
refCount.ts File 5 KB 0644
repeat.ts File 3.03 KB 0644
repeatWhen.ts File 4.15 KB 0644
retry.ts File 2.74 KB 0644
retryWhen.ts File 3.45 KB 0644
sample.ts File 2.78 KB 0644
sampleTime.ts File 3.18 KB 0644
scan.ts File 4.13 KB 0644
sequenceEqual.ts File 5.16 KB 0644
share.ts File 1.02 KB 0644
shareReplay.ts File 4.19 KB 0644
single.ts File 3.79 KB 0644
skip.ts File 1.27 KB 0644
skipLast.ts File 2.81 KB 0644
skipUntil.ts File 3.81 KB 0644
skipWhile.ts File 1.95 KB 0644
startWith.ts File 4.35 KB 0644
subscribeOn.ts File 2.56 KB 0644
switchAll.ts File 1.99 KB 0644
switchMap.ts File 6.04 KB 0644
switchMapTo.ts File 2.56 KB 0644
take.ts File 2.74 KB 0644
takeLast.ts File 3.44 KB 0644
takeUntil.ts File 2.79 KB 0644
takeWhile.ts File 3.87 KB 0644
tap.ts File 5.33 KB 0644
throttle.ts File 4.83 KB 0644
throttleTime.ts File 5.83 KB 0644
throwIfEmpty.ts File 2.19 KB 0644
timeInterval.ts File 2.49 KB 0644
timeout.ts File 4.07 KB 0644
timeoutWith.ts File 6.13 KB 0644
timestamp.ts File 1.67 KB 0644
toArray.ts File 1.12 KB 0644
window.ts File 3.72 KB 0644
windowCount.ts File 4.82 KB 0644
windowTime.ts File 9.9 KB 0644
windowToggle.ts File 6.2 KB 0644
windowWhen.ts File 4.57 KB 0644
withLatestFrom.ts File 7.72 KB 0644
zip.ts File 3.35 KB 0644
zipAll.ts File 653 B 0644