message: refactor(skipWhile): smaller impl
diff: +/** @prettier */
  import { Observable } from '../Observable';
  -import { Operator } from '../Operator';
  import { Subscriber } from '../Subscriber';
  -import { MonoTypeOperatorFunction, TeardownLogic } from '../types';
  +import { MonoTypeOperatorFunction } from '../types';
  import { lift } from '../util/lift';
  +import { OperatorSubscriber } from './OperatorSubscriber';
  /**
  * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds
  @@ -16,49 +17,13 @@ import { lift } from '../util/lift';
  * @name skipWhile
  */
  export function skipWhile<T>(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction<T> {
  - return (source: Observable<T>) => lift(source, new SkipWhileOperator(predicate));
  -}
  -
  -class SkipWhileOperator<T> implements Operator<T, T> {
  - constructor(private predicate: (value: T, index: number) => boolean) {
  - }
  -
  - call(subscriber: Subscriber<T>, source: any): TeardownLogic {
  - return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
  - }
  -}
  -
  -/**
  - * We need this JSDoc comment for affecting ESDoc.
  - * @ignore
  - * @extends {Ignored}
  - */
  -class SkipWhileSubscriber<T> extends Subscriber<T> {
  - private skipping: boolean = true;
  - private index: number = 0;
  -
  - constructor(destination: Subscriber<T>,
  - private predicate: (value: T, index: number) => boolean) {
  - super(destination);
  - }
  -
  - protected _next(value: T): void {
  - const destination = this.destination;
  - if (this.skipping) {
  - this.tryCallPredicate(value);
  - }
  -
  - if (!this.skipping) {
  - destination.next(value);
  - }
  - }
  -
  - private tryCallPredicate(value: T): void {
  - try {
  - const result = this.predicate(value, this.index++);
  - this.skipping = Boolean(result);
  - } catch (err) {
  - this.destination.error(err);
  - }
  - }
  + return (source: Observable<T>) =>
  + lift(source, function (this: Subscriber<T>, source: Observable<T>) {
  + const subscriber = this;
  + let taking = false;
  + let index = 0;
  + source.subscribe(
  + new OperatorSubscriber(subscriber, (value) => (taking || (taking = !predicate(value, index++))) && subscriber.next(value))
  + );
  + });
  }
  