30 lines
894 B
JavaScript
30 lines
894 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var GetIntrinsic = require('get-intrinsic');
|
||
|
var hasPropertyDescriptors = require('has-property-descriptors')();
|
||
|
|
||
|
var $TypeError = require('es-errors/type');
|
||
|
var $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);
|
||
|
|
||
|
var iterProto = require('iterator.prototype');
|
||
|
var callBound = require('call-bind/callBound');
|
||
|
|
||
|
var $isPrototypeOf = callBound('Object.prototype.isPrototypeOf');
|
||
|
|
||
|
var $Iterator = typeof Iterator === 'function' ? Iterator : function Iterator() {
|
||
|
if (
|
||
|
!(this instanceof Iterator)
|
||
|
|| this.constructor === Iterator
|
||
|
|| !$isPrototypeOf(Iterator, this.constructor)
|
||
|
) {
|
||
|
throw new $TypeError('`Iterator` can not be called or constructed directly');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
if ($Iterator.prototype !== iterProto) {
|
||
|
$Iterator.prototype = iterProto;
|
||
|
}
|
||
|
$defineProperty($Iterator, 'prototype', { writable: false });
|
||
|
|
||
|
module.exports = $Iterator;
|