massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / internals / object-iterator.js
1 'use strict';
2 var InternalStateModule = require('../internals/internal-state');
3 var createIteratorConstructor = require('../internals/create-iterator-constructor');
4 var hasOwn = require('../internals/has-own-property');
5 var objectKeys = require('../internals/object-keys');
6 var toObject = require('../internals/to-object');
7
8 var OBJECT_ITERATOR = 'Object Iterator';
9 var setInternalState = InternalStateModule.set;
10 var getInternalState = InternalStateModule.getterFor(OBJECT_ITERATOR);
11
12 module.exports = createIteratorConstructor(function ObjectIterator(source, mode) {
13   var object = toObject(source);
14   setInternalState(this, {
15     type: OBJECT_ITERATOR,
16     mode: mode,
17     object: object,
18     keys: objectKeys(object),
19     index: 0
20   });
21 }, 'Object', function next() {
22   var state = getInternalState(this);
23   var keys = state.keys;
24   while (true) {
25     if (keys === null || state.index >= keys.length) {
26       state.object = state.keys = null;
27       return { value: undefined, done: true };
28     }
29     var key = keys[state.index++];
30     var object = state.object;
31     if (!hasOwn(object, key)) continue;
32     switch (state.mode) {
33       case 'keys': return { value: key, done: false };
34       case 'values': return { value: object[key], done: false };
35     } /* entries */ return { value: [key, object[key]], done: false };
36   }
37 });