All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.javascript.jscomp.js.es6.util.makeasynciterator.js Maven / Gradle / Ivy

/*
 * Copyright 2016 The Closure Compiler Authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview Polyfill for for-of loops.
 */
'require es6/symbol';
'require es6/util/makeiterator';

/**
 * Creates an iterator for the given iterable.
 *
 * @param {string|!AsyncIterable|!Iterable|!Iterator|!Arguments} iterable
 * @return {!AsyncIteratorIterable}
 * @template T
 * @suppress {reportUnknownTypes}
 */
$jscomp.makeAsyncIterator = function(iterable) {
  var asyncIteratorFunction = (iterable)[Symbol.asyncIterator];
  if (asyncIteratorFunction !== undefined) {
    return asyncIteratorFunction.call(iterable);
  }
  return new $jscomp.AsyncIteratorFromSyncWrapper($jscomp.makeIterator(
      /** @type {string|!Iterable|!Iterator|!Arguments} */
      (iterable)));
};

/**
 *
 * @param {!Iterator} iterator
 * @constructor
 * @implements {AsyncIteratorIterable}
 * @template T
 * @suppress {reportUnknownTypes}
 */
$jscomp.AsyncIteratorFromSyncWrapper = function(iterator) {
  /**
   * @return {!AsyncIterator}
   */
  this[Symbol.asyncIterator] = function() {
    return this;
  };

  /**
   * @return {!Iterator>>}
   */
  this[Symbol.iterator] = function() {
    return iterator;
  };

  /**
   * @param {?=} param
   * @return {!Promise>}
   */
  this.next = function(param) {
    return Promise.resolve(iterator.next(param));
  };

  if (iterator['throw'] !== undefined) {
    /**
     * @param {?} param
     * @return {!Promise>}
     */
    this['throw'] = function(param) {
      return Promise.resolve(iterator['throw'](param));
    };
  }

  if (iterator['return'] !== undefined) {
    /**
     * @param {T} param
     * @return {!Promise>}
     */
    this['return'] = function(param) {
      return Promise.resolve(iterator['return'](param));
    };
  }
};




© 2015 - 2024 Weber Informatics LLC | Privacy Policy