'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var call = require('../internals/function-call'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var getIteratorDirect = require('../internals/get-iterator-direct'); 
 | 
var notANaN = require('../internals/not-a-nan'); 
 | 
var toPositiveInteger = require('../internals/to-positive-integer'); 
 | 
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy'); 
 | 
var createIterResultObject = require('../internals/create-iter-result-object'); 
 | 
var IS_PURE = require('../internals/is-pure'); 
 | 
  
 | 
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) { 
 | 
  var state = this; 
 | 
  
 | 
  return new Promise(function (resolve, reject) { 
 | 
    var doneAndReject = function (error) { 
 | 
      state.done = true; 
 | 
      reject(error); 
 | 
    }; 
 | 
  
 | 
    var loop = function () { 
 | 
      try { 
 | 
        Promise.resolve(anObject(call(state.next, state.iterator))).then(function (step) { 
 | 
          try { 
 | 
            if (anObject(step).done) { 
 | 
              state.done = true; 
 | 
              resolve(createIterResultObject(undefined, true)); 
 | 
            } else if (state.remaining) { 
 | 
              state.remaining--; 
 | 
              loop(); 
 | 
            } else resolve(createIterResultObject(step.value, false)); 
 | 
          } catch (err) { doneAndReject(err); } 
 | 
        }, doneAndReject); 
 | 
      } catch (error) { doneAndReject(error); } 
 | 
    }; 
 | 
  
 | 
    loop(); 
 | 
  }); 
 | 
}); 
 | 
  
 | 
// `AsyncIterator.prototype.drop` method 
 | 
// https://github.com/tc39/proposal-async-iterator-helpers 
 | 
$({ target: 'AsyncIterator', proto: true, real: true, forced: IS_PURE }, { 
 | 
  drop: function drop(limit) { 
 | 
    anObject(this); 
 | 
    var remaining = toPositiveInteger(notANaN(+limit)); 
 | 
    return new AsyncIteratorProxy(getIteratorDirect(this), { 
 | 
      remaining: remaining 
 | 
    }); 
 | 
  } 
 | 
}); 
 |