core-js 3.18.2 → 3.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/date/to-primitive.js +2 -3
- package/es/date/to-string.js +2 -4
- package/es/instance/at.js +6 -5
- package/es/instance/bind.js +3 -2
- package/es/instance/code-point-at.js +4 -3
- package/es/instance/concat.js +3 -2
- package/es/instance/copy-within.js +3 -2
- package/es/instance/ends-with.js +4 -3
- package/es/instance/entries.js +3 -2
- package/es/instance/every.js +3 -2
- package/es/instance/fill.js +3 -2
- package/es/instance/filter.js +3 -2
- package/es/instance/find-index.js +3 -2
- package/es/instance/find.js +3 -2
- package/es/instance/flags.js +2 -1
- package/es/instance/flat-map.js +3 -2
- package/es/instance/flat.js +3 -2
- package/es/instance/for-each.js +3 -2
- package/es/instance/includes.js +6 -5
- package/es/instance/index-of.js +3 -2
- package/es/instance/keys.js +3 -2
- package/es/instance/last-index-of.js +3 -2
- package/es/instance/map.js +3 -2
- package/es/instance/match-all.js +4 -3
- package/es/instance/pad-end.js +4 -3
- package/es/instance/pad-start.js +4 -3
- package/es/instance/reduce-right.js +3 -2
- package/es/instance/reduce.js +3 -2
- package/es/instance/repeat.js +4 -3
- package/es/instance/replace-all.js +4 -3
- package/es/instance/reverse.js +3 -2
- package/es/instance/slice.js +3 -2
- package/es/instance/some.js +3 -2
- package/es/instance/sort.js +3 -2
- package/es/instance/splice.js +3 -2
- package/es/instance/starts-with.js +4 -3
- package/es/instance/trim-end.js +4 -3
- package/es/instance/trim-left.js +4 -3
- package/es/instance/trim-right.js +4 -3
- package/es/instance/trim-start.js +4 -3
- package/es/instance/trim.js +4 -3
- package/es/instance/values.js +3 -2
- package/es/json/stringify.js +4 -3
- package/es/promise/all-settled.js +2 -1
- package/es/promise/any.js +2 -1
- package/es/regexp/flags.js +3 -4
- package/es/regexp/match.js +2 -1
- package/es/regexp/replace.js +2 -1
- package/es/regexp/search.js +2 -1
- package/es/regexp/split.js +2 -1
- package/es/regexp/test.js +2 -3
- package/es/regexp/to-string.js +2 -3
- package/es/string/iterator.js +2 -5
- package/features/instance/at.js +6 -5
- package/features/instance/code-points.js +4 -3
- package/features/instance/filter-out.js +3 -2
- package/features/instance/filter-reject.js +3 -2
- package/features/instance/find-last-index.js +3 -2
- package/features/instance/find-last.js +3 -2
- package/features/instance/group-by.js +3 -2
- package/features/instance/unique-by.js +3 -2
- package/features/map/from.js +3 -2
- package/features/map/group-by.js +2 -1
- package/features/map/key-by.js +2 -1
- package/features/map/of.js +3 -2
- package/features/promise/try.js +2 -1
- package/features/set/from.js +3 -2
- package/features/set/of.js +3 -2
- package/features/weak-map/from.js +3 -2
- package/features/weak-map/of.js +3 -2
- package/features/weak-set/from.js +3 -2
- package/features/weak-set/of.js +3 -2
- package/internals/a-callable.js +3 -0
- package/internals/a-constructor.js +3 -0
- package/internals/a-possible-prototype.js +5 -1
- package/internals/an-instance.js +8 -3
- package/internals/an-object.js +4 -0
- package/internals/array-buffer-native.js +1 -1
- package/internals/array-buffer-non-extensible.js +10 -0
- package/internals/array-buffer-view-core.js +3 -2
- package/internals/array-buffer.js +29 -16
- package/internals/array-from-async.js +1 -1
- package/internals/array-from.js +6 -2
- package/internals/array-group-by.js +6 -3
- package/internals/array-iteration-from-last.js +1 -1
- package/internals/array-iteration.js +5 -4
- package/internals/array-last-index-of.js +2 -1
- package/internals/array-reduce.js +3 -0
- package/internals/array-slice-simple.js +17 -0
- package/internals/array-slice.js +3 -0
- package/internals/array-sort.js +10 -11
- package/internals/array-species-constructor.js +2 -0
- package/internals/array-unique-by.js +13 -9
- package/internals/async-from-sync-iterator.js +4 -3
- package/internals/async-iterator-create-proxy.js +4 -3
- package/internals/async-iterator-iteration.js +5 -2
- package/internals/classof-raw.js +5 -2
- package/internals/classof.js +3 -0
- package/internals/clear-error-stack.js +20 -0
- package/internals/collection-add-all.js +3 -2
- package/internals/collection-delete-all.js +3 -2
- package/internals/collection-from.js +7 -4
- package/internals/collection-of.js +3 -4
- package/internals/collection-strong.js +11 -9
- package/internals/collection-weak.js +10 -6
- package/internals/collection.js +8 -7
- package/internals/composite-key.js +9 -2
- package/internals/create-html.js +3 -1
- package/internals/date-to-iso-string.js +23 -13
- package/internals/date-to-primitive.js +3 -0
- package/internals/define-iterator.js +2 -1
- package/internals/engine-v8-version.js +10 -4
- package/internals/entry-unbind.js +3 -5
- package/internals/error-stack-installable.js +10 -0
- package/internals/export.js +1 -1
- package/internals/fix-regexp-well-known-symbol-logic.js +5 -3
- package/internals/flatten-into-array.js +4 -1
- package/internals/function-apply.js +9 -0
- package/internals/function-bind-context.js +5 -17
- package/internals/function-bind.js +15 -9
- package/internals/function-call.js +5 -0
- package/internals/function-uncurry-this.js +12 -0
- package/internals/get-async-iterator.js +2 -1
- package/internals/get-iterator.js +7 -2
- package/internals/get-map-iterator.js +3 -1
- package/internals/get-set-iterator.js +3 -1
- package/internals/get-substitution.js +10 -7
- package/internals/has-own-property.js +3 -2
- package/internals/host-report-errors.js +1 -1
- package/internals/ieee754.js +24 -6
- package/internals/indexed-object.js +5 -2
- package/internals/inspect-source.js +3 -2
- package/internals/install-error-cause.js +1 -1
- package/internals/internal-metadata.js +4 -7
- package/internals/internal-state.js +9 -7
- package/internals/is-callable.js +1 -1
- package/internals/is-constructor.js +6 -4
- package/internals/is-iterable.js +4 -2
- package/internals/is-object.js +1 -1
- package/internals/is-symbol.js +6 -2
- package/internals/iterate.js +14 -6
- package/internals/iterator-close.js +2 -1
- package/internals/iterator-create-proxy.js +4 -3
- package/internals/map-emplace.js +8 -3
- package/internals/map-upsert.js +12 -4
- package/internals/math-scale.js +9 -12
- package/internals/microtask.js +6 -4
- package/internals/normalize-string-argument.js +5 -0
- package/internals/not-a-regexp.js +3 -0
- package/internals/number-parse-float.js +8 -6
- package/internals/number-parse-int.js +4 -2
- package/internals/numeric-range-iterator.js +4 -0
- package/internals/object-assign.js +5 -2
- package/internals/object-define-properties.js +3 -1
- package/internals/object-define-property.js +2 -0
- package/internals/object-get-own-property-descriptor.js +2 -1
- package/internals/object-get-own-property-names-external.js +4 -4
- package/internals/object-get-prototype-of.js +2 -1
- package/internals/object-is-extensible.js +16 -0
- package/internals/object-is-prototype-of.js +3 -0
- package/internals/object-keys-internal.js +5 -2
- package/internals/object-set-prototype-of.js +4 -3
- package/internals/object-to-array.js +7 -3
- package/internals/ordinary-to-primitive.js +7 -3
- package/internals/own-keys.js +4 -1
- package/internals/reflect-metadata.js +9 -3
- package/internals/regexp-exec-abstract.js +6 -2
- package/internals/regexp-exec.js +20 -16
- package/internals/regexp-sticky-helpers.js +14 -2
- package/internals/require-object-coercible.js +4 -0
- package/internals/set-global.js +4 -2
- package/internals/shared.js +1 -1
- package/internals/string-multibyte.js +13 -4
- package/internals/string-pad.js +6 -3
- package/internals/string-punycode-to-ascii.js +34 -20
- package/internals/string-repeat.js +3 -0
- package/internals/string-trim.js +4 -2
- package/internals/task.js +11 -11
- package/internals/this-number-value.js +2 -4
- package/internals/to-index.js +3 -0
- package/internals/to-object.js +3 -0
- package/internals/to-offset.js +3 -0
- package/internals/to-positive-integer.js +3 -0
- package/internals/to-primitive.js +4 -1
- package/internals/to-property-key.js +1 -1
- package/internals/to-string.js +3 -0
- package/internals/try-to-string.js +4 -0
- package/internals/typed-array-constructor.js +10 -6
- package/internals/typed-array-from.js +4 -3
- package/internals/uid.js +4 -1
- package/internals/well-known-symbol.js +5 -1
- package/modules/es.aggregate-error.js +27 -11
- package/modules/es.array-buffer.slice.js +8 -4
- package/modules/es.array.concat.js +2 -0
- package/modules/es.array.index-of.js +7 -5
- package/modules/es.array.join.js +3 -2
- package/modules/es.array.of.js +3 -1
- package/modules/es.array.reduce.js +2 -1
- package/modules/es.array.reverse.js +3 -2
- package/modules/es.array.slice.js +4 -2
- package/modules/es.array.sort.js +7 -4
- package/modules/es.array.splice.js +2 -0
- package/modules/es.date.get-year.js +3 -2
- package/modules/es.date.now.js +6 -1
- package/modules/es.date.set-year.js +6 -4
- package/modules/es.date.to-primitive.js +2 -1
- package/modules/es.date.to-string.js +5 -4
- package/modules/es.escape.js +12 -5
- package/modules/es.function.has-instance.js +3 -2
- package/modules/es.function.name.js +5 -3
- package/modules/es.json.stringify.js +18 -7
- package/modules/es.map.js +1 -1
- package/modules/es.number.constructor.js +12 -7
- package/modules/es.number.to-fixed.js +19 -13
- package/modules/es.number.to-precision.js +6 -5
- package/modules/es.object.is-extensible.js +4 -10
- package/modules/es.object.is-frozen.js +6 -2
- package/modules/es.object.is-sealed.js +6 -2
- package/modules/es.promise.all-settled.js +2 -2
- package/modules/es.promise.any.js +5 -4
- package/modules/es.promise.js +22 -18
- package/modules/es.reflect.apply.js +4 -10
- package/modules/es.reflect.construct.js +10 -5
- package/modules/es.reflect.get.js +2 -1
- package/modules/es.reflect.is-extensible.js +2 -4
- package/modules/es.reflect.set.js +2 -1
- package/modules/es.regexp.constructor.js +26 -16
- package/modules/es.regexp.dot-all.js +5 -1
- package/modules/es.regexp.flags.js +4 -2
- package/modules/es.regexp.sticky.js +7 -3
- package/modules/es.regexp.test.js +7 -3
- package/modules/es.regexp.to-string.js +8 -5
- package/modules/es.set.js +1 -1
- package/modules/es.string.at-alternative.js +4 -1
- package/modules/es.string.ends-with.js +6 -4
- package/modules/es.string.from-code-point.js +7 -4
- package/modules/es.string.includes.js +8 -2
- package/modules/es.string.match-all.js +25 -19
- package/modules/es.string.match.js +2 -1
- package/modules/es.string.raw.js +6 -6
- package/modules/es.string.replace-all.js +19 -13
- package/modules/es.string.replace.js +19 -12
- package/modules/es.string.search.js +2 -1
- package/modules/es.string.split.js +23 -16
- package/modules/es.string.starts-with.js +6 -4
- package/modules/es.string.substr.js +3 -2
- package/modules/es.symbol.description.js +20 -12
- package/modules/es.symbol.js +34 -21
- package/modules/es.typed-array.copy-within.js +4 -2
- package/modules/es.typed-array.fill.js +9 -2
- package/modules/es.typed-array.iterator.js +7 -6
- package/modules/es.typed-array.join.js +3 -3
- package/modules/es.typed-array.last-index-of.js +3 -2
- package/modules/es.typed-array.reduce-right.js +2 -1
- package/modules/es.typed-array.reduce.js +2 -1
- package/modules/es.typed-array.set.js +2 -0
- package/modules/es.typed-array.slice.js +2 -2
- package/modules/es.typed-array.sort.js +13 -28
- package/modules/es.typed-array.to-locale-string.js +7 -2
- package/modules/es.typed-array.to-string.js +3 -2
- package/modules/es.unescape.js +14 -9
- package/modules/es.weak-map.js +15 -15
- package/modules/esnext.array.is-template-object.js +1 -1
- package/modules/esnext.async-iterator.as-indexed-pairs.js +2 -1
- package/modules/esnext.async-iterator.constructor.js +1 -1
- package/modules/esnext.async-iterator.drop.js +2 -1
- package/modules/esnext.async-iterator.filter.js +2 -1
- package/modules/esnext.async-iterator.flat-map.js +3 -2
- package/modules/esnext.async-iterator.from.js +4 -4
- package/modules/esnext.async-iterator.map.js +2 -1
- package/modules/esnext.async-iterator.reduce.js +4 -1
- package/modules/esnext.async-iterator.take.js +4 -2
- package/modules/esnext.composite-key.js +5 -1
- package/modules/esnext.composite-symbol.js +3 -2
- package/modules/esnext.iterator.as-indexed-pairs.js +2 -1
- package/modules/esnext.iterator.constructor.js +1 -1
- package/modules/esnext.iterator.drop.js +4 -2
- package/modules/esnext.iterator.filter.js +2 -1
- package/modules/esnext.iterator.flat-map.js +7 -3
- package/modules/esnext.iterator.from.js +4 -4
- package/modules/esnext.iterator.map.js +2 -1
- package/modules/esnext.iterator.reduce.js +3 -0
- package/modules/esnext.iterator.take.js +2 -1
- package/modules/esnext.map.delete-all.js +2 -4
- package/modules/esnext.map.emplace.js +2 -2
- package/modules/esnext.map.every.js +1 -1
- package/modules/esnext.map.filter.js +5 -4
- package/modules/esnext.map.find-key.js +1 -1
- package/modules/esnext.map.find.js +1 -1
- package/modules/esnext.map.group-by.js +6 -2
- package/modules/esnext.map.includes.js +1 -1
- package/modules/esnext.map.key-by.js +2 -1
- package/modules/esnext.map.map-keys.js +5 -4
- package/modules/esnext.map.map-values.js +5 -4
- package/modules/esnext.map.reduce.js +3 -0
- package/modules/esnext.map.some.js +1 -1
- package/modules/esnext.map.update-or-insert.js +2 -2
- package/modules/esnext.map.update.js +11 -4
- package/modules/esnext.map.upsert.js +2 -2
- package/modules/esnext.math.seeded-prng.js +3 -1
- package/modules/esnext.number.from-string.js +12 -3
- package/modules/esnext.observable.js +14 -9
- package/modules/esnext.reflect.get-metadata-keys.js +5 -10
- package/modules/esnext.set.add-all.js +2 -4
- package/modules/esnext.set.delete-all.js +2 -4
- package/modules/esnext.set.difference.js +3 -2
- package/modules/esnext.set.every.js +1 -1
- package/modules/esnext.set.filter.js +4 -3
- package/modules/esnext.set.find.js +1 -1
- package/modules/esnext.set.intersection.js +3 -2
- package/modules/esnext.set.is-disjoint-from.js +3 -2
- package/modules/esnext.set.is-subset-of.js +3 -2
- package/modules/esnext.set.is-superset-of.js +3 -2
- package/modules/esnext.set.join.js +9 -4
- package/modules/esnext.set.map.js +5 -4
- package/modules/esnext.set.reduce.js +3 -0
- package/modules/esnext.set.some.js +1 -1
- package/modules/esnext.set.symmetric-difference.js +3 -2
- package/modules/esnext.typed-array.from-async.js +0 -1
- package/modules/esnext.typed-array.unique-by.js +4 -2
- package/modules/esnext.weak-map.delete-all.js +2 -4
- package/modules/esnext.weak-map.emplace.js +2 -2
- package/modules/esnext.weak-map.upsert.js +2 -2
- package/modules/esnext.weak-set.add-all.js +2 -4
- package/modules/esnext.weak-set.delete-all.js +2 -4
- package/modules/web.timers.js +5 -4
- package/modules/web.url-search-params.js +122 -104
- package/modules/web.url.js +664 -628
- package/modules/web.url.to-json.js +2 -1
- package/package.json +2 -2
- package/stable/instance/entries.js +6 -4
- package/stable/instance/for-each.js +6 -4
- package/stable/instance/keys.js +6 -4
- package/stable/instance/values.js +6 -4
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
var $ = require('../internals/export');
|
|
3
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
3
4
|
var notARegExp = require('../internals/not-a-regexp');
|
|
4
5
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
5
6
|
var toString = require('../internals/to-string');
|
|
6
7
|
var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
|
|
7
8
|
|
|
9
|
+
var stringIndexOf = uncurryThis(''.indexOf);
|
|
10
|
+
|
|
8
11
|
// `String.prototype.includes` method
|
|
9
12
|
// https://tc39.es/ecma262/#sec-string.prototype.includes
|
|
10
13
|
$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
|
|
11
14
|
includes: function includes(searchString /* , position = 0 */) {
|
|
12
|
-
return !!~
|
|
13
|
-
|
|
15
|
+
return !!~stringIndexOf(
|
|
16
|
+
toString(requireObjectCoercible(this)),
|
|
17
|
+
toString(notARegExp(searchString)),
|
|
18
|
+
arguments.length > 1 ? arguments[1] : undefined
|
|
19
|
+
);
|
|
14
20
|
}
|
|
15
21
|
});
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/* eslint-disable es/no-string-prototype-matchall -- safe */
|
|
3
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');
|
|
4
7
|
var createIteratorConstructor = require('../internals/create-iterator-constructor');
|
|
5
8
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
6
9
|
var toLength = require('../internals/to-length');
|
|
7
10
|
var toString = require('../internals/to-string');
|
|
8
11
|
var anObject = require('../internals/an-object');
|
|
9
12
|
var classof = require('../internals/classof-raw');
|
|
13
|
+
var isPrototypeOf = require('../internals/object-is-prototype-of');
|
|
10
14
|
var isRegExp = require('../internals/is-regexp');
|
|
11
|
-
var
|
|
15
|
+
var regExpFlags = require('../internals/regexp-flags');
|
|
12
16
|
var getMethod = require('../internals/get-method');
|
|
13
17
|
var redefine = require('../internals/redefine');
|
|
14
18
|
var fails = require('../internals/fails');
|
|
@@ -25,19 +29,21 @@ var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';
|
|
|
25
29
|
var setInternalState = InternalStateModule.set;
|
|
26
30
|
var getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);
|
|
27
31
|
var RegExpPrototype = RegExp.prototype;
|
|
28
|
-
var
|
|
32
|
+
var TypeError = global.TypeError;
|
|
33
|
+
var getFlags = uncurryThis(regExpFlags);
|
|
34
|
+
var stringIndexOf = uncurryThis(''.indexOf);
|
|
35
|
+
var un$MatchAll = uncurryThis(''.matchAll);
|
|
29
36
|
|
|
30
|
-
var WORKS_WITH_NON_GLOBAL_REGEX = !!
|
|
31
|
-
'a'
|
|
37
|
+
var WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {
|
|
38
|
+
un$MatchAll('a', /./);
|
|
32
39
|
});
|
|
33
40
|
|
|
34
|
-
|
|
35
|
-
var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, global, fullUnicode) {
|
|
41
|
+
var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {
|
|
36
42
|
setInternalState(this, {
|
|
37
43
|
type: REGEXP_STRING_ITERATOR,
|
|
38
44
|
regexp: regexp,
|
|
39
45
|
string: string,
|
|
40
|
-
global: global,
|
|
46
|
+
global: $global,
|
|
41
47
|
unicode: fullUnicode,
|
|
42
48
|
done: false
|
|
43
49
|
});
|
|
@@ -59,18 +65,18 @@ var $RegExpStringIterator = createIteratorConstructor(function RegExpStringItera
|
|
|
59
65
|
var $matchAll = function (string) {
|
|
60
66
|
var R = anObject(this);
|
|
61
67
|
var S = toString(string);
|
|
62
|
-
var C, flagsValue, flags, matcher, global, fullUnicode;
|
|
68
|
+
var C, flagsValue, flags, matcher, $global, fullUnicode;
|
|
63
69
|
C = speciesConstructor(R, RegExp);
|
|
64
70
|
flagsValue = R.flags;
|
|
65
|
-
if (flagsValue === undefined && R
|
|
66
|
-
flagsValue =
|
|
71
|
+
if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {
|
|
72
|
+
flagsValue = getFlags(R);
|
|
67
73
|
}
|
|
68
74
|
flags = flagsValue === undefined ? '' : toString(flagsValue);
|
|
69
75
|
matcher = new C(C === RegExp ? R.source : R, flags);
|
|
70
|
-
global = !!~flags
|
|
71
|
-
fullUnicode = !!~flags
|
|
76
|
+
$global = !!~stringIndexOf(flags, 'g');
|
|
77
|
+
fullUnicode = !!~stringIndexOf(flags, 'u');
|
|
72
78
|
matcher.lastIndex = toLength(R.lastIndex);
|
|
73
|
-
return new $RegExpStringIterator(matcher, S, global, fullUnicode);
|
|
79
|
+
return new $RegExpStringIterator(matcher, S, $global, fullUnicode);
|
|
74
80
|
};
|
|
75
81
|
|
|
76
82
|
// `String.prototype.matchAll` method
|
|
@@ -83,18 +89,18 @@ $({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {
|
|
|
83
89
|
if (isRegExp(regexp)) {
|
|
84
90
|
flags = toString(requireObjectCoercible('flags' in RegExpPrototype
|
|
85
91
|
? regexp.flags
|
|
86
|
-
:
|
|
92
|
+
: getFlags(regexp)
|
|
87
93
|
));
|
|
88
|
-
if (!~flags
|
|
94
|
+
if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');
|
|
89
95
|
}
|
|
90
|
-
if (WORKS_WITH_NON_GLOBAL_REGEX) return
|
|
96
|
+
if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
|
|
91
97
|
matcher = getMethod(regexp, MATCH_ALL);
|
|
92
98
|
if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;
|
|
93
|
-
if (matcher) return
|
|
94
|
-
} else if (WORKS_WITH_NON_GLOBAL_REGEX) return
|
|
99
|
+
if (matcher) return call(matcher, regexp, O);
|
|
100
|
+
} else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
|
|
95
101
|
S = toString(O);
|
|
96
102
|
rx = new RegExp(regexp, 'g');
|
|
97
|
-
return IS_PURE ? $matchAll
|
|
103
|
+
return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);
|
|
98
104
|
}
|
|
99
105
|
});
|
|
100
106
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var call = require('../internals/function-call');
|
|
2
3
|
var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
|
|
3
4
|
var anObject = require('../internals/an-object');
|
|
4
5
|
var toLength = require('../internals/to-length');
|
|
@@ -16,7 +17,7 @@ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNa
|
|
|
16
17
|
function match(regexp) {
|
|
17
18
|
var O = requireObjectCoercible(this);
|
|
18
19
|
var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);
|
|
19
|
-
return matcher ?
|
|
20
|
+
return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));
|
|
20
21
|
},
|
|
21
22
|
// `RegExp.prototype[@@match]` method
|
|
22
23
|
// https://tc39.es/ecma262/#sec-regexp.prototype-@@match
|
package/modules/es.string.raw.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
var $ = require('../internals/export');
|
|
2
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
2
3
|
var toIndexedObject = require('../internals/to-indexed-object');
|
|
3
4
|
var toObject = require('../internals/to-object');
|
|
4
5
|
var toString = require('../internals/to-string');
|
|
5
6
|
var lengthOfArrayLike = require('../internals/length-of-array-like');
|
|
6
7
|
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var join = ArrayPrototype.join;
|
|
8
|
+
var push = uncurryThis([].push);
|
|
9
|
+
var join = uncurryThis([].join);
|
|
10
10
|
|
|
11
11
|
// `String.raw` method
|
|
12
12
|
// https://tc39.es/ecma262/#sec-string.raw
|
|
@@ -18,9 +18,9 @@ $({ target: 'String', stat: true }, {
|
|
|
18
18
|
var elements = [];
|
|
19
19
|
var i = 0;
|
|
20
20
|
while (literalSegments > i) {
|
|
21
|
-
push
|
|
22
|
-
if (i === literalSegments) return join
|
|
23
|
-
if (i < argumentsLength) push
|
|
21
|
+
push(elements, toString(rawTemplate[i++]));
|
|
22
|
+
if (i === literalSegments) return join(elements, '');
|
|
23
|
+
if (i < argumentsLength) push(elements, toString(arguments[i]));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
var $ = require('../internals/export');
|
|
3
|
+
var global = require('../internals/global');
|
|
4
|
+
var call = require('../internals/function-call');
|
|
5
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
3
6
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
4
7
|
var isCallable = require('../internals/is-callable');
|
|
5
8
|
var isRegExp = require('../internals/is-regexp');
|
|
6
9
|
var toString = require('../internals/to-string');
|
|
7
10
|
var getMethod = require('../internals/get-method');
|
|
8
|
-
var
|
|
11
|
+
var regExpFlags = require('../internals/regexp-flags');
|
|
9
12
|
var getSubstitution = require('../internals/get-substitution');
|
|
10
13
|
var wellKnownSymbol = require('../internals/well-known-symbol');
|
|
11
14
|
var IS_PURE = require('../internals/is-pure');
|
|
12
15
|
|
|
13
16
|
var REPLACE = wellKnownSymbol('replace');
|
|
14
17
|
var RegExpPrototype = RegExp.prototype;
|
|
18
|
+
var TypeError = global.TypeError;
|
|
19
|
+
var getFlags = uncurryThis(regExpFlags);
|
|
20
|
+
var indexOf = uncurryThis(''.indexOf);
|
|
21
|
+
var replace = uncurryThis(''.replace);
|
|
22
|
+
var stringSlice = uncurryThis(''.slice);
|
|
15
23
|
var max = Math.max;
|
|
16
24
|
|
|
17
25
|
var stringIndexOf = function (string, searchValue, fromIndex) {
|
|
18
26
|
if (fromIndex > string.length) return -1;
|
|
19
27
|
if (searchValue === '') return fromIndex;
|
|
20
|
-
return
|
|
28
|
+
return indexOf(string, searchValue, fromIndex);
|
|
21
29
|
};
|
|
22
30
|
|
|
23
31
|
// `String.prototype.replaceAll` method
|
|
@@ -34,15 +42,15 @@ $({ target: 'String', proto: true }, {
|
|
|
34
42
|
if (IS_REG_EXP) {
|
|
35
43
|
flags = toString(requireObjectCoercible('flags' in RegExpPrototype
|
|
36
44
|
? searchValue.flags
|
|
37
|
-
:
|
|
45
|
+
: getFlags(searchValue)
|
|
38
46
|
));
|
|
39
|
-
if (!~
|
|
47
|
+
if (!~indexOf(flags, 'g')) throw TypeError('`.replaceAll` does not allow non-global regexes');
|
|
40
48
|
}
|
|
41
49
|
replacer = getMethod(searchValue, REPLACE);
|
|
42
50
|
if (replacer) {
|
|
43
|
-
return
|
|
51
|
+
return call(replacer, searchValue, O, replaceValue);
|
|
44
52
|
} else if (IS_PURE && IS_REG_EXP) {
|
|
45
|
-
return toString(O)
|
|
53
|
+
return replace(toString(O), searchValue, replaceValue);
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
56
|
string = toString(O);
|
|
@@ -53,17 +61,15 @@ $({ target: 'String', proto: true }, {
|
|
|
53
61
|
advanceBy = max(1, searchLength);
|
|
54
62
|
position = stringIndexOf(string, searchString, 0);
|
|
55
63
|
while (position !== -1) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
result += string.slice(endOfLastMatch, position) + replacement;
|
|
64
|
+
replacement = functionalReplace
|
|
65
|
+
? toString(replaceValue(searchString, position, string))
|
|
66
|
+
: getSubstitution(searchString, string, position, [], undefined, replaceValue);
|
|
67
|
+
result += stringSlice(string, endOfLastMatch, position) + replacement;
|
|
62
68
|
endOfLastMatch = position + searchLength;
|
|
63
69
|
position = stringIndexOf(string, searchString, position + advanceBy);
|
|
64
70
|
}
|
|
65
71
|
if (endOfLastMatch < string.length) {
|
|
66
|
-
result += string
|
|
72
|
+
result += stringSlice(string, endOfLastMatch);
|
|
67
73
|
}
|
|
68
74
|
return result;
|
|
69
75
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var apply = require('../internals/function-apply');
|
|
3
|
+
var call = require('../internals/function-call');
|
|
4
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
2
5
|
var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
|
|
3
6
|
var fails = require('../internals/fails');
|
|
4
7
|
var anObject = require('../internals/an-object');
|
|
@@ -16,6 +19,10 @@ var wellKnownSymbol = require('../internals/well-known-symbol');
|
|
|
16
19
|
var REPLACE = wellKnownSymbol('replace');
|
|
17
20
|
var max = Math.max;
|
|
18
21
|
var min = Math.min;
|
|
22
|
+
var concat = uncurryThis([].concat);
|
|
23
|
+
var push = uncurryThis([].push);
|
|
24
|
+
var stringIndexOf = uncurryThis(''.indexOf);
|
|
25
|
+
var stringSlice = uncurryThis(''.slice);
|
|
19
26
|
|
|
20
27
|
var maybeToString = function (it) {
|
|
21
28
|
return it === undefined ? it : String(it);
|
|
@@ -58,8 +65,8 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
58
65
|
var O = requireObjectCoercible(this);
|
|
59
66
|
var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);
|
|
60
67
|
return replacer
|
|
61
|
-
?
|
|
62
|
-
:
|
|
68
|
+
? call(replacer, searchValue, O, replaceValue)
|
|
69
|
+
: call(nativeReplace, toString(O), searchValue, replaceValue);
|
|
63
70
|
},
|
|
64
71
|
// `RegExp.prototype[@@replace]` method
|
|
65
72
|
// https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
|
|
@@ -68,9 +75,9 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
68
75
|
var S = toString(string);
|
|
69
76
|
|
|
70
77
|
if (
|
|
71
|
-
typeof replaceValue
|
|
72
|
-
replaceValue
|
|
73
|
-
replaceValue
|
|
78
|
+
typeof replaceValue == 'string' &&
|
|
79
|
+
stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
|
|
80
|
+
stringIndexOf(replaceValue, '$<') === -1
|
|
74
81
|
) {
|
|
75
82
|
var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
|
|
76
83
|
if (res.done) return res.value;
|
|
@@ -89,7 +96,7 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
89
96
|
var result = regExpExec(rx, S);
|
|
90
97
|
if (result === null) break;
|
|
91
98
|
|
|
92
|
-
|
|
99
|
+
push(results, result);
|
|
93
100
|
if (!global) break;
|
|
94
101
|
|
|
95
102
|
var matchStr = toString(result[0]);
|
|
@@ -109,21 +116,21 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
109
116
|
// but for some reason `nativeSlice.call(result, 1, result.length)` (called in
|
|
110
117
|
// the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
|
|
111
118
|
// causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
|
|
112
|
-
for (var j = 1; j < result.length; j++)
|
|
119
|
+
for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
|
|
113
120
|
var namedCaptures = result.groups;
|
|
114
121
|
if (functionalReplace) {
|
|
115
|
-
var replacerArgs = [matched]
|
|
116
|
-
if (namedCaptures !== undefined)
|
|
117
|
-
var replacement = toString(
|
|
122
|
+
var replacerArgs = concat([matched], captures, position, S);
|
|
123
|
+
if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);
|
|
124
|
+
var replacement = toString(apply(replaceValue, undefined, replacerArgs));
|
|
118
125
|
} else {
|
|
119
126
|
replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
|
|
120
127
|
}
|
|
121
128
|
if (position >= nextSourcePosition) {
|
|
122
|
-
accumulatedResult += S
|
|
129
|
+
accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
|
|
123
130
|
nextSourcePosition = position + matched.length;
|
|
124
131
|
}
|
|
125
132
|
}
|
|
126
|
-
return accumulatedResult + S
|
|
133
|
+
return accumulatedResult + stringSlice(S, nextSourcePosition);
|
|
127
134
|
}
|
|
128
135
|
];
|
|
129
136
|
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var call = require('../internals/function-call');
|
|
2
3
|
var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
|
|
3
4
|
var anObject = require('../internals/an-object');
|
|
4
5
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
@@ -15,7 +16,7 @@ fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCal
|
|
|
15
16
|
function search(regexp) {
|
|
16
17
|
var O = requireObjectCoercible(this);
|
|
17
18
|
var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);
|
|
18
|
-
return searcher ?
|
|
19
|
+
return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
|
|
19
20
|
},
|
|
20
21
|
// `RegExp.prototype[@@search]` method
|
|
21
22
|
// https://tc39.es/ecma262/#sec-regexp.prototype-@@search
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var apply = require('../internals/function-apply');
|
|
3
|
+
var call = require('../internals/function-call');
|
|
4
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
2
5
|
var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
|
|
3
6
|
var isRegExp = require('../internals/is-regexp');
|
|
4
7
|
var anObject = require('../internals/an-object');
|
|
@@ -8,15 +11,19 @@ var advanceStringIndex = require('../internals/advance-string-index');
|
|
|
8
11
|
var toLength = require('../internals/to-length');
|
|
9
12
|
var toString = require('../internals/to-string');
|
|
10
13
|
var getMethod = require('../internals/get-method');
|
|
14
|
+
var arraySlice = require('../internals/array-slice-simple');
|
|
11
15
|
var callRegExpExec = require('../internals/regexp-exec-abstract');
|
|
12
16
|
var regexpExec = require('../internals/regexp-exec');
|
|
13
17
|
var stickyHelpers = require('../internals/regexp-sticky-helpers');
|
|
14
18
|
var fails = require('../internals/fails');
|
|
15
19
|
|
|
16
20
|
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
|
|
17
|
-
var arrayPush = [].push;
|
|
18
|
-
var min = Math.min;
|
|
19
21
|
var MAX_UINT32 = 0xFFFFFFFF;
|
|
22
|
+
var min = Math.min;
|
|
23
|
+
var $push = [].push;
|
|
24
|
+
var exec = uncurryThis(/./.exec);
|
|
25
|
+
var push = uncurryThis($push);
|
|
26
|
+
var stringSlice = uncurryThis(''.slice);
|
|
20
27
|
|
|
21
28
|
// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
|
|
22
29
|
// Weex JS has frozen built-in prototypes, so use try / catch wrapper
|
|
@@ -50,7 +57,7 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
50
57
|
if (separator === undefined) return [string];
|
|
51
58
|
// If `separator` is not a regex, use native split
|
|
52
59
|
if (!isRegExp(separator)) {
|
|
53
|
-
return
|
|
60
|
+
return call(nativeSplit, string, separator, lim);
|
|
54
61
|
}
|
|
55
62
|
var output = [];
|
|
56
63
|
var flags = (separator.ignoreCase ? 'i' : '') +
|
|
@@ -61,11 +68,11 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
61
68
|
// Make `global` and avoid `lastIndex` issues by working with a copy
|
|
62
69
|
var separatorCopy = new RegExp(separator.source, flags + 'g');
|
|
63
70
|
var match, lastIndex, lastLength;
|
|
64
|
-
while (match =
|
|
71
|
+
while (match = call(regexpExec, separatorCopy, string)) {
|
|
65
72
|
lastIndex = separatorCopy.lastIndex;
|
|
66
73
|
if (lastIndex > lastLastIndex) {
|
|
67
|
-
|
|
68
|
-
if (match.length > 1 && match.index < string.length)
|
|
74
|
+
push(output, stringSlice(string, lastLastIndex, match.index));
|
|
75
|
+
if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));
|
|
69
76
|
lastLength = match[0].length;
|
|
70
77
|
lastLastIndex = lastIndex;
|
|
71
78
|
if (output.length >= lim) break;
|
|
@@ -73,14 +80,14 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
73
80
|
if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
|
|
74
81
|
}
|
|
75
82
|
if (lastLastIndex === string.length) {
|
|
76
|
-
if (lastLength || !separatorCopy
|
|
77
|
-
} else
|
|
78
|
-
return output.length > lim ? output
|
|
83
|
+
if (lastLength || !exec(separatorCopy, '')) push(output, '');
|
|
84
|
+
} else push(output, stringSlice(string, lastLastIndex));
|
|
85
|
+
return output.length > lim ? arraySlice(output, 0, lim) : output;
|
|
79
86
|
};
|
|
80
87
|
// Chakra, V8
|
|
81
88
|
} else if ('0'.split(undefined, 0).length) {
|
|
82
89
|
internalSplit = function (separator, limit) {
|
|
83
|
-
return separator === undefined && limit === 0 ? [] :
|
|
90
|
+
return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);
|
|
84
91
|
};
|
|
85
92
|
} else internalSplit = nativeSplit;
|
|
86
93
|
|
|
@@ -91,8 +98,8 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
91
98
|
var O = requireObjectCoercible(this);
|
|
92
99
|
var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);
|
|
93
100
|
return splitter
|
|
94
|
-
?
|
|
95
|
-
:
|
|
101
|
+
? call(splitter, separator, O, limit)
|
|
102
|
+
: call(internalSplit, toString(O), separator, limit);
|
|
96
103
|
},
|
|
97
104
|
// `RegExp.prototype[@@split]` method
|
|
98
105
|
// https://tc39.es/ecma262/#sec-regexp.prototype-@@split
|
|
@@ -125,7 +132,7 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
125
132
|
var A = [];
|
|
126
133
|
while (q < S.length) {
|
|
127
134
|
splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
|
|
128
|
-
var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S
|
|
135
|
+
var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);
|
|
129
136
|
var e;
|
|
130
137
|
if (
|
|
131
138
|
z === null ||
|
|
@@ -133,16 +140,16 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
|
|
|
133
140
|
) {
|
|
134
141
|
q = advanceStringIndex(S, q, unicodeMatching);
|
|
135
142
|
} else {
|
|
136
|
-
|
|
143
|
+
push(A, stringSlice(S, p, q));
|
|
137
144
|
if (A.length === lim) return A;
|
|
138
145
|
for (var i = 1; i <= z.length - 1; i++) {
|
|
139
|
-
|
|
146
|
+
push(A, z[i]);
|
|
140
147
|
if (A.length === lim) return A;
|
|
141
148
|
}
|
|
142
149
|
q = p = e;
|
|
143
150
|
}
|
|
144
151
|
}
|
|
145
|
-
|
|
152
|
+
push(A, stringSlice(S, p));
|
|
146
153
|
return A;
|
|
147
154
|
}
|
|
148
155
|
];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
var $ = require('../internals/export');
|
|
3
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
3
4
|
var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
|
|
4
5
|
var toLength = require('../internals/to-length');
|
|
5
6
|
var toString = require('../internals/to-string');
|
|
@@ -9,7 +10,8 @@ var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
|
|
|
9
10
|
var IS_PURE = require('../internals/is-pure');
|
|
10
11
|
|
|
11
12
|
// eslint-disable-next-line es/no-string-prototype-startswith -- safe
|
|
12
|
-
var $
|
|
13
|
+
var un$StartsWith = uncurryThis(''.startsWith);
|
|
14
|
+
var stringSlice = uncurryThis(''.slice);
|
|
13
15
|
var min = Math.min;
|
|
14
16
|
|
|
15
17
|
var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');
|
|
@@ -27,8 +29,8 @@ $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGE
|
|
|
27
29
|
notARegExp(searchString);
|
|
28
30
|
var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
|
|
29
31
|
var search = toString(searchString);
|
|
30
|
-
return $
|
|
31
|
-
? $
|
|
32
|
-
: that
|
|
32
|
+
return un$StartsWith
|
|
33
|
+
? un$StartsWith(that, search, index)
|
|
34
|
+
: stringSlice(that, index, index + search.length) === search;
|
|
33
35
|
}
|
|
34
36
|
});
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
var $ = require('../internals/export');
|
|
3
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
3
4
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
4
5
|
var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
|
|
5
6
|
var toString = require('../internals/to-string');
|
|
6
7
|
|
|
7
|
-
var
|
|
8
|
+
var stringSlice = uncurryThis(''.slice);
|
|
8
9
|
var max = Math.max;
|
|
9
10
|
var min = Math.min;
|
|
10
11
|
|
|
@@ -24,6 +25,6 @@ $({ target: 'String', proto: true, forced: FORCED }, {
|
|
|
24
25
|
intLength = length === undefined ? size : toIntegerOrInfinity(length);
|
|
25
26
|
if (intLength <= 0 || intLength === Infinity) return '';
|
|
26
27
|
intEnd = min(intStart + intLength, size);
|
|
27
|
-
return intStart >= intEnd ? '' :
|
|
28
|
+
return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd);
|
|
28
29
|
}
|
|
29
30
|
});
|
|
@@ -4,43 +4,51 @@
|
|
|
4
4
|
var $ = require('../internals/export');
|
|
5
5
|
var DESCRIPTORS = require('../internals/descriptors');
|
|
6
6
|
var global = require('../internals/global');
|
|
7
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
7
8
|
var hasOwn = require('../internals/has-own-property');
|
|
8
9
|
var isCallable = require('../internals/is-callable');
|
|
9
|
-
var
|
|
10
|
+
var isPrototypeOf = require('../internals/object-is-prototype-of');
|
|
11
|
+
var toString = require('../internals/to-string');
|
|
10
12
|
var defineProperty = require('../internals/object-define-property').f;
|
|
11
13
|
var copyConstructorProperties = require('../internals/copy-constructor-properties');
|
|
12
14
|
|
|
13
15
|
var NativeSymbol = global.Symbol;
|
|
16
|
+
var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
|
|
14
17
|
|
|
15
|
-
if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in
|
|
18
|
+
if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||
|
|
16
19
|
// Safari 12 bug
|
|
17
20
|
NativeSymbol().description !== undefined
|
|
18
21
|
)) {
|
|
19
22
|
var EmptyStringDescriptionStore = {};
|
|
20
23
|
// wrap Symbol constructor for correct work with undefined description
|
|
21
24
|
var SymbolWrapper = function Symbol() {
|
|
22
|
-
var description = arguments.length < 1 || arguments[0] === undefined ? undefined :
|
|
23
|
-
var result = this
|
|
25
|
+
var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);
|
|
26
|
+
var result = isPrototypeOf(SymbolPrototype, this)
|
|
24
27
|
? new NativeSymbol(description)
|
|
25
28
|
// in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
|
|
26
29
|
: description === undefined ? NativeSymbol() : NativeSymbol(description);
|
|
27
30
|
if (description === '') EmptyStringDescriptionStore[result] = true;
|
|
28
31
|
return result;
|
|
29
32
|
};
|
|
33
|
+
|
|
30
34
|
copyConstructorProperties(SymbolWrapper, NativeSymbol);
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
SymbolWrapper.prototype = SymbolPrototype;
|
|
36
|
+
SymbolPrototype.constructor = SymbolWrapper;
|
|
33
37
|
|
|
34
|
-
var
|
|
35
|
-
var
|
|
38
|
+
var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
|
|
39
|
+
var symbolToString = uncurryThis(SymbolPrototype.toString);
|
|
40
|
+
var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);
|
|
36
41
|
var regexp = /^Symbol\((.*)\)[^)]+$/;
|
|
37
|
-
|
|
42
|
+
var replace = uncurryThis(''.replace);
|
|
43
|
+
var stringSlice = uncurryThis(''.slice);
|
|
44
|
+
|
|
45
|
+
defineProperty(SymbolPrototype, 'description', {
|
|
38
46
|
configurable: true,
|
|
39
47
|
get: function description() {
|
|
40
|
-
var symbol =
|
|
41
|
-
var string = symbolToString
|
|
48
|
+
var symbol = symbolValueOf(this);
|
|
49
|
+
var string = symbolToString(symbol);
|
|
42
50
|
if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
|
|
43
|
-
var desc =
|
|
51
|
+
var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');
|
|
44
52
|
return desc === '' ? undefined : desc;
|
|
45
53
|
}
|
|
46
54
|
});
|