source: trip-planner-front/node_modules/core-js/modules/es.regexp.constructor.js@ e29cc2e

Last change on this file since e29cc2e was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 6.1 KB
Line 
1var DESCRIPTORS = require('../internals/descriptors');
2var global = require('../internals/global');
3var isForced = require('../internals/is-forced');
4var inheritIfRequired = require('../internals/inherit-if-required');
5var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
6var defineProperty = require('../internals/object-define-property').f;
7var getOwnPropertyNames = require('../internals/object-get-own-property-names').f;
8var isRegExp = require('../internals/is-regexp');
9var toString = require('../internals/to-string');
10var getFlags = require('../internals/regexp-flags');
11var stickyHelpers = require('../internals/regexp-sticky-helpers');
12var redefine = require('../internals/redefine');
13var fails = require('../internals/fails');
14var has = require('../internals/has');
15var enforceInternalState = require('../internals/internal-state').enforce;
16var setSpecies = require('../internals/set-species');
17var wellKnownSymbol = require('../internals/well-known-symbol');
18var UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');
19var UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');
20
21var MATCH = wellKnownSymbol('match');
22var NativeRegExp = global.RegExp;
23var RegExpPrototype = NativeRegExp.prototype;
24// TODO: Use only propper RegExpIdentifierName
25var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
26var re1 = /a/g;
27var re2 = /a/g;
28
29// "new" should create a new object, old webkit bug
30var CORRECT_NEW = new NativeRegExp(re1) !== re1;
31
32var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
33
34var BASE_FORCED = DESCRIPTORS &&
35 (!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
36 re2[MATCH] = false;
37 // RegExp constructor can alter flags and IsRegExp works correct with @@match
38 return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';
39 }));
40
41var handleDotAll = function (string) {
42 var length = string.length;
43 var index = 0;
44 var result = '';
45 var brackets = false;
46 var chr;
47 for (; index <= length; index++) {
48 chr = string.charAt(index);
49 if (chr === '\\') {
50 result += chr + string.charAt(++index);
51 continue;
52 }
53 if (!brackets && chr === '.') {
54 result += '[\\s\\S]';
55 } else {
56 if (chr === '[') {
57 brackets = true;
58 } else if (chr === ']') {
59 brackets = false;
60 } result += chr;
61 }
62 } return result;
63};
64
65var handleNCG = function (string) {
66 var length = string.length;
67 var index = 0;
68 var result = '';
69 var named = [];
70 var names = {};
71 var brackets = false;
72 var ncg = false;
73 var groupid = 0;
74 var groupname = '';
75 var chr;
76 for (; index <= length; index++) {
77 chr = string.charAt(index);
78 if (chr === '\\') {
79 chr = chr + string.charAt(++index);
80 } else if (chr === ']') {
81 brackets = false;
82 } else if (!brackets) switch (true) {
83 case chr === '[':
84 brackets = true;
85 break;
86 case chr === '(':
87 if (IS_NCG.test(string.slice(index + 1))) {
88 index += 2;
89 ncg = true;
90 }
91 result += chr;
92 groupid++;
93 continue;
94 case chr === '>' && ncg:
95 if (groupname === '' || has(names, groupname)) {
96 throw new SyntaxError('Invalid capture group name');
97 }
98 names[groupname] = true;
99 named.push([groupname, groupid]);
100 ncg = false;
101 groupname = '';
102 continue;
103 }
104 if (ncg) groupname += chr;
105 else result += chr;
106 } return [result, named];
107};
108
109// `RegExp` constructor
110// https://tc39.es/ecma262/#sec-regexp-constructor
111if (isForced('RegExp', BASE_FORCED)) {
112 var RegExpWrapper = function RegExp(pattern, flags) {
113 var thisIsRegExp = this instanceof RegExpWrapper;
114 var patternIsRegExp = isRegExp(pattern);
115 var flagsAreUndefined = flags === undefined;
116 var groups = [];
117 var rawPattern = pattern;
118 var rawFlags, dotAll, sticky, handled, result, state;
119
120 if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
121 return pattern;
122 }
123
124 if (patternIsRegExp || pattern instanceof RegExpWrapper) {
125 pattern = pattern.source;
126 if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern);
127 }
128
129 pattern = pattern === undefined ? '' : toString(pattern);
130 flags = flags === undefined ? '' : toString(flags);
131 rawPattern = pattern;
132
133 if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {
134 dotAll = !!flags && flags.indexOf('s') > -1;
135 if (dotAll) flags = flags.replace(/s/g, '');
136 }
137
138 rawFlags = flags;
139
140 if (UNSUPPORTED_Y && 'sticky' in re1) {
141 sticky = !!flags && flags.indexOf('y') > -1;
142 if (sticky) flags = flags.replace(/y/g, '');
143 }
144
145 if (UNSUPPORTED_NCG) {
146 handled = handleNCG(pattern);
147 pattern = handled[0];
148 groups = handled[1];
149 }
150
151 result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);
152
153 if (dotAll || sticky || groups.length) {
154 state = enforceInternalState(result);
155 if (dotAll) {
156 state.dotAll = true;
157 state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);
158 }
159 if (sticky) state.sticky = true;
160 if (groups.length) state.groups = groups;
161 }
162
163 if (pattern !== rawPattern) try {
164 // fails in old engines, but we have no alternatives for unsupported regex syntax
165 createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);
166 } catch (error) { /* empty */ }
167
168 return result;
169 };
170
171 var proxy = function (key) {
172 key in RegExpWrapper || defineProperty(RegExpWrapper, key, {
173 configurable: true,
174 get: function () { return NativeRegExp[key]; },
175 set: function (it) { NativeRegExp[key] = it; }
176 });
177 };
178
179 for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {
180 proxy(keys[index++]);
181 }
182
183 RegExpPrototype.constructor = RegExpWrapper;
184 RegExpWrapper.prototype = RegExpPrototype;
185 redefine(global, 'RegExp', RegExpWrapper);
186}
187
188// https://tc39.es/ecma262/#sec-get-regexp-@@species
189setSpecies('RegExp');
Note: See TracBrowser for help on using the repository browser.