123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 'use strict';
- // var Construct = require('es-abstract/2020/Construct');
- var Get = require('es-abstract/2020/Get');
- var Set = require('es-abstract/2020/Set');
- var SpeciesConstructor = require('es-abstract/2020/SpeciesConstructor');
- var ToLength = require('es-abstract/2020/ToLength');
- var ToString = require('es-abstract/2020/ToString');
- var Type = require('es-abstract/2020/Type');
- var flagsGetter = require('regexp.prototype.flags');
- var RegExpStringIterator = require('./helpers/RegExpStringIterator');
- var OrigRegExp = RegExp;
- var CreateRegExpStringIterator = function CreateRegExpStringIterator(R, S, global, fullUnicode) {
- if (Type(S) !== 'String') {
- throw new TypeError('"S" value must be a String');
- }
- if (Type(global) !== 'Boolean') {
- throw new TypeError('"global" value must be a Boolean');
- }
- if (Type(fullUnicode) !== 'Boolean') {
- throw new TypeError('"fullUnicode" value must be a Boolean');
- }
- var iterator = new RegExpStringIterator(R, S, global, fullUnicode);
- return iterator;
- };
- var supportsConstructingWithFlags = 'flags' in RegExp.prototype;
- var constructRegexWithFlags = function constructRegex(C, R) {
- var matcher;
- // workaround for older engines that lack RegExp.prototype.flags
- var flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));
- if (supportsConstructingWithFlags && typeof flags === 'string') {
- matcher = new C(R, flags);
- } else if (C === OrigRegExp) {
- // workaround for older engines that can not construct a RegExp with flags
- matcher = new C(R.source, flags);
- } else {
- matcher = new C(R, flags);
- }
- return { flags: flags, matcher: matcher };
- };
- var regexMatchAll = function SymbolMatchAll(string) {
- var R = this;
- if (Type(R) !== 'Object') {
- throw new TypeError('"this" value must be an Object');
- }
- var S = ToString(string);
- var C = SpeciesConstructor(R, OrigRegExp);
- var tmp = constructRegexWithFlags(C, R);
- // var flags = ToString(Get(R, 'flags'));
- var flags = tmp.flags;
- // var matcher = Construct(C, [R, flags]);
- var matcher = tmp.matcher;
- var lastIndex = ToLength(Get(R, 'lastIndex'));
- Set(matcher, 'lastIndex', lastIndex, true);
- var global = flags.indexOf('g') > -1;
- var fullUnicode = flags.indexOf('u') > -1;
- return CreateRegExpStringIterator(matcher, S, global, fullUnicode);
- };
- var defineP = Object.defineProperty;
- var gOPD = Object.getOwnPropertyDescriptor;
- if (defineP && gOPD) {
- var desc = gOPD(regexMatchAll, 'name');
- if (desc && desc.configurable) {
- defineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });
- }
- }
- module.exports = regexMatchAll;
|