| 1234567891011121314151617181920212223242526272829303132333435363738 | 'use strict';var InternalStateModule = require('../internals/internal-state');var createIteratorConstructor = require('../internals/iterator-create-constructor');var createIterResultObject = require('../internals/create-iter-result-object');var hasOwn = require('../internals/has-own-property');var objectKeys = require('../internals/object-keys');var toObject = require('../internals/to-object');var OBJECT_ITERATOR = 'Object Iterator';var setInternalState = InternalStateModule.set;var getInternalState = InternalStateModule.getterFor(OBJECT_ITERATOR);module.exports = createIteratorConstructor(function ObjectIterator(source, mode) {  var object = toObject(source);  setInternalState(this, {    type: OBJECT_ITERATOR,    mode: mode,    object: object,    keys: objectKeys(object),    index: 0  });}, 'Object', function next() {  var state = getInternalState(this);  var keys = state.keys;  while (true) {    if (keys === null || state.index >= keys.length) {      state.object = state.keys = null;      return createIterResultObject(undefined, true);    }    var key = keys[state.index++];    var object = state.object;    if (!hasOwn(object, key)) continue;    switch (state.mode) {      case 'keys': return createIterResultObject(key, false);      case 'values': return createIterResultObject(object[key], false);    } /* entries */ return createIterResultObject([key, object[key]], false);  }});
 |