Source: lib/util/functional.js

/*! @license
 * Shaka Player
 * Copyright 2016 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

goog.provide('shaka.util.Functional');

goog.require('shaka.util.Timer');

/**
 * @summary A set of functional utility functions.
 */
shaka.util.Functional = class {
  /**
   * Returns if the given value is not null; useful for filtering out null
   * values.
   *
   * @param {T} value
   * @return {boolean}
   * @template T
   */
  static isNotNull(value) {
    return value != null;
  }

  /**
   * Returns a Promise which is resolved only if |asyncProcess| is resolved, and
   * only if it is resolved in less than |seconds| seconds.
   *
   * If the returned Promise is resolved, it returns the same value as
   * |asyncProcess|.
   *
   * If |asyncProcess| fails, the returned Promise is rejected.
   * If |asyncProcess| takes too long, the returned Promise is rejected, but
   * |asyncProcess| is still allowed to complete.
   *
   * @param {number} seconds
   * @param {!Promise<T>} asyncProcess
   * @return {!Promise<T>}
   * @template T
   */
  static promiseWithTimeout(seconds, asyncProcess) {
    return Promise.race([
      asyncProcess,
      new Promise(((_, reject) => {
        new shaka.util.Timer(reject).tickAfter(seconds);
      })),
    ]);
  }

  /**
   * Returns a Promise which is resolved after the given number of seconds.
   *
   * @param {number} seconds
   * @return {!Promise}
   */
  static delay(seconds) {
    return new Promise((resolve) => {
      new shaka.util.Timer(resolve).tickAfter(seconds);
    });
  }
};