import { Subscription } from '../Subscription'; 
 | 
import { SchedulerAction, SchedulerLike } from '../types'; 
 | 
  
 | 
export function executeSchedule( 
 | 
  parentSubscription: Subscription, 
 | 
  scheduler: SchedulerLike, 
 | 
  work: () => void, 
 | 
  delay: number, 
 | 
  repeat: true 
 | 
): void; 
 | 
export function executeSchedule( 
 | 
  parentSubscription: Subscription, 
 | 
  scheduler: SchedulerLike, 
 | 
  work: () => void, 
 | 
  delay?: number, 
 | 
  repeat?: false 
 | 
): Subscription; 
 | 
  
 | 
export function executeSchedule( 
 | 
  parentSubscription: Subscription, 
 | 
  scheduler: SchedulerLike, 
 | 
  work: () => void, 
 | 
  delay = 0, 
 | 
  repeat = false 
 | 
): Subscription | void { 
 | 
  const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction<any>) { 
 | 
    work(); 
 | 
    if (repeat) { 
 | 
      parentSubscription.add(this.schedule(null, delay)); 
 | 
    } else { 
 | 
      this.unsubscribe(); 
 | 
    } 
 | 
  }, delay); 
 | 
  
 | 
  parentSubscription.add(scheduleSubscription); 
 | 
  
 | 
  if (!repeat) { 
 | 
    // Because user-land scheduler implementations are unlikely to properly reuse 
 | 
    // Actions for repeat scheduling, we can't trust that the returned subscription 
 | 
    // will control repeat subscription scenarios. So we're trying to avoid using them 
 | 
    // incorrectly within this library. 
 | 
    return scheduleSubscription; 
 | 
  } 
 | 
} 
 |