| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 'use strict';var GetIntrinsic = require('get-intrinsic');var hasSymbols = require('has-symbols')();var $TypeError = GetIntrinsic('%TypeError%');var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);var AdvanceStringIndex = require('./AdvanceStringIndex');var CreateIterResultObject = require('./CreateIterResultObject');var CreateMethodProperty = require('./CreateMethodProperty');var Get = require('./Get');var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');var RegExpExec = require('./RegExpExec');var Set = require('./Set');var ToLength = require('./ToLength');var ToString = require('./ToString');var Type = require('./Type');var SLOT = require('internal-slot');var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {	if (Type(S) !== 'String') {		throw new $TypeError('`S` must be a string');	}	if (Type(global) !== 'Boolean') {		throw new $TypeError('`global` must be a boolean');	}	if (Type(fullUnicode) !== 'Boolean') {		throw new $TypeError('`fullUnicode` must be a boolean');	}	SLOT.set(this, '[[IteratingRegExp]]', R);	SLOT.set(this, '[[IteratedString]]', S);	SLOT.set(this, '[[Global]]', global);	SLOT.set(this, '[[Unicode]]', fullUnicode);	SLOT.set(this, '[[Done]]', false);};if (IteratorPrototype) {	RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);}var RegExpStringIteratorNext = function next() {	var O = this; // eslint-disable-line no-invalid-this	if (Type(O) !== 'Object') {		throw new $TypeError('receiver must be an object');	}	if (		!(O instanceof RegExpStringIterator)        || !SLOT.has(O, '[[IteratingRegExp]]')        || !SLOT.has(O, '[[IteratedString]]')        || !SLOT.has(O, '[[Global]]')        || !SLOT.has(O, '[[Unicode]]')        || !SLOT.has(O, '[[Done]]')	) {		throw new $TypeError('"this" value must be a RegExpStringIterator instance');	}	if (SLOT.get(O, '[[Done]]')) {		return CreateIterResultObject(undefined, true);	}	var R = SLOT.get(O, '[[IteratingRegExp]]');	var S = SLOT.get(O, '[[IteratedString]]');	var global = SLOT.get(O, '[[Global]]');	var fullUnicode = SLOT.get(O, '[[Unicode]]');	var match = RegExpExec(R, S);	if (match === null) {		SLOT.set(O, '[[Done]]', true);		return CreateIterResultObject(undefined, true);	}	if (global) {		var matchStr = ToString(Get(match, '0'));		if (matchStr === '') {			var thisIndex = ToLength(Get(R, 'lastIndex'));			var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);			Set(R, 'lastIndex', nextIndex, true);		}		return CreateIterResultObject(match, false);	}	SLOT.set(O, '[[Done]]', true);	return CreateIterResultObject(match, false);};CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);if (hasSymbols) {	if (Symbol.toStringTag) {		if ($defineProperty) {			$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {				configurable: true,				enumerable: false,				value: 'RegExp String Iterator',				writable: false			});		} else {			RegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';		}	}	if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {		var iteratorFn = function SymbolIterator() {			return this;		};		CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);	}}// https://262.ecma-international.org/11.0/#sec-createregexpstringiteratormodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {	// assert R.global === global && R.unicode === fullUnicode?	return new RegExpStringIterator(R, S, global, fullUnicode);};
 |