massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / modules / es.string.match-all.js
1 'use strict';
2 /* eslint-disable es/no-string-prototype-matchall -- safe */
3 var $ = require('../internals/export');
4 var global = require('../internals/global');
5 var call = require('../internals/function-call');
6 var uncurryThis = require('../internals/function-uncurry-this');
7 var createIteratorConstructor = require('../internals/create-iterator-constructor');
8 var requireObjectCoercible = require('../internals/require-object-coercible');
9 var toLength = require('../internals/to-length');
10 var toString = require('../internals/to-string');
11 var anObject = require('../internals/an-object');
12 var classof = require('../internals/classof-raw');
13 var isPrototypeOf = require('../internals/object-is-prototype-of');
14 var isRegExp = require('../internals/is-regexp');
15 var regExpFlags = require('../internals/regexp-flags');
16 var getMethod = require('../internals/get-method');
17 var redefine = require('../internals/redefine');
18 var fails = require('../internals/fails');
19 var wellKnownSymbol = require('../internals/well-known-symbol');
20 var speciesConstructor = require('../internals/species-constructor');
21 var advanceStringIndex = require('../internals/advance-string-index');
22 var regExpExec = require('../internals/regexp-exec-abstract');
23 var InternalStateModule = require('../internals/internal-state');
24 var IS_PURE = require('../internals/is-pure');
25
26 var MATCH_ALL = wellKnownSymbol('matchAll');
27 var REGEXP_STRING = 'RegExp String';
28 var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';
29 var setInternalState = InternalStateModule.set;
30 var getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);
31 var RegExpPrototype = RegExp.prototype;
32 var TypeError = global.TypeError;
33 var getFlags = uncurryThis(regExpFlags);
34 var stringIndexOf = uncurryThis(''.indexOf);
35 var un$MatchAll = uncurryThis(''.matchAll);
36
37 var WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {
38   un$MatchAll('a', /./);
39 });
40
41 var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {
42   setInternalState(this, {
43     type: REGEXP_STRING_ITERATOR,
44     regexp: regexp,
45     string: string,
46     global: $global,
47     unicode: fullUnicode,
48     done: false
49   });
50 }, REGEXP_STRING, function next() {
51   var state = getInternalState(this);
52   if (state.done) return { value: undefined, done: true };
53   var R = state.regexp;
54   var S = state.string;
55   var match = regExpExec(R, S);
56   if (match === null) return { value: undefined, done: state.done = true };
57   if (state.global) {
58     if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);
59     return { value: match, done: false };
60   }
61   state.done = true;
62   return { value: match, done: false };
63 });
64
65 var $matchAll = function (string) {
66   var R = anObject(this);
67   var S = toString(string);
68   var C, flagsValue, flags, matcher, $global, fullUnicode;
69   C = speciesConstructor(R, RegExp);
70   flagsValue = R.flags;
71   if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {
72     flagsValue = getFlags(R);
73   }
74   flags = flagsValue === undefined ? '' : toString(flagsValue);
75   matcher = new C(C === RegExp ? R.source : R, flags);
76   $global = !!~stringIndexOf(flags, 'g');
77   fullUnicode = !!~stringIndexOf(flags, 'u');
78   matcher.lastIndex = toLength(R.lastIndex);
79   return new $RegExpStringIterator(matcher, S, $global, fullUnicode);
80 };
81
82 // `String.prototype.matchAll` method
83 // https://tc39.es/ecma262/#sec-string.prototype.matchall
84 $({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {
85   matchAll: function matchAll(regexp) {
86     var O = requireObjectCoercible(this);
87     var flags, S, matcher, rx;
88     if (regexp != null) {
89       if (isRegExp(regexp)) {
90         flags = toString(requireObjectCoercible('flags' in RegExpPrototype
91           ? regexp.flags
92           : getFlags(regexp)
93         ));
94         if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');
95       }
96       if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
97       matcher = getMethod(regexp, MATCH_ALL);
98       if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;
99       if (matcher) return call(matcher, regexp, O);
100     } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
101     S = toString(O);
102     rx = new RegExp(regexp, 'g');
103     return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);
104   }
105 });
106
107 IS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);