core-js 3.18.1 → 3.19.1
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/configurator.js +7 -3
- 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/typed-array/methods.js +2 -0
- 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 +11 -10
- package/internals/array-buffer.js +31 -18
- package/internals/array-copy-within.js +2 -2
- package/internals/array-fill.js +2 -2
- package/internals/array-from-async.js +14 -9
- package/internals/array-from.js +8 -4
- package/internals/array-group-by.js +8 -5
- package/internals/array-includes.js +2 -2
- package/internals/array-iteration-from-last.js +3 -3
- package/internals/array-iteration.js +7 -6
- package/internals/array-last-index-of.js +6 -5
- package/internals/array-reduce.js +5 -2
- 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 +15 -11
- 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 +13 -9
- package/internals/collection.js +8 -7
- package/internals/composite-key.js +9 -2
- package/internals/copy-constructor-properties.js +2 -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/define-well-known-symbol.js +2 -2
- 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 +8 -4
- 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-name.js +2 -2
- 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 +10 -0
- package/internals/host-report-errors.js +1 -1
- package/internals/ieee754.js +4 -1
- 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 +8 -11
- package/internals/internal-state.js +13 -11
- package/internals/is-callable.js +1 -1
- package/internals/is-constructor.js +6 -4
- package/internals/is-data-descriptor.js +2 -2
- package/internals/is-integral-number.js +10 -0
- 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 +16 -8
- package/internals/iterator-close.js +2 -1
- package/internals/iterator-create-proxy.js +4 -3
- package/internals/length-of-array-like.js +7 -0
- 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 +3 -2
- package/internals/object-get-own-property-names-external.js +4 -4
- package/internals/object-get-prototype-of.js +4 -3
- package/internals/object-is-extensible.js +16 -0
- package/internals/object-is-prototype-of.js +3 -0
- package/internals/object-iterator.js +2 -2
- package/internals/object-keys-internal.js +7 -4
- 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/redefine.js +2 -2
- package/internals/reflect-metadata.js +9 -3
- package/internals/regexp-exec-abstract.js +6 -2
- package/internals/regexp-exec.js +19 -14
- package/internals/require-object-coercible.js +4 -0
- package/internals/set-global.js +4 -2
- package/internals/set-to-string-tag.js +2 -2
- package/internals/shared.js +1 -1
- package/internals/string-multibyte.js +15 -7
- package/internals/string-pad.js +7 -4
- package/internals/string-punycode-to-ascii.js +26 -14
- package/internals/string-repeat.js +5 -2
- package/internals/string-trim.js +4 -2
- package/internals/task.js +11 -11
- package/internals/this-number-value.js +2 -4
- package/internals/to-absolute-index.js +2 -2
- package/internals/to-index.js +5 -2
- package/internals/to-integer-or-infinity.js +10 -0
- package/internals/to-length.js +2 -2
- package/internals/to-object.js +3 -0
- package/internals/to-offset.js +3 -0
- package/internals/to-positive-integer.js +5 -2
- 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 +18 -14
- package/internals/typed-array-from.js +6 -5
- package/internals/uid.js +4 -1
- package/internals/well-known-symbol.js +8 -4
- package/modules/es.aggregate-error.js +29 -12
- package/modules/es.array-buffer.slice.js +8 -4
- package/modules/es.array.at.js +4 -4
- package/modules/es.array.concat.js +4 -2
- package/modules/es.array.flat-map.js +2 -2
- package/modules/es.array.flat.js +4 -4
- 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 +6 -4
- package/modules/es.array.sort.js +9 -6
- package/modules/es.array.splice.js +6 -4
- package/modules/es.date.get-year.js +3 -2
- package/modules/es.date.now.js +6 -1
- package/modules/es.date.set-year.js +8 -6
- 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 +4 -2
- package/modules/es.json.stringify.js +18 -7
- package/modules/es.map.js +1 -1
- package/modules/es.number.constructor.js +25 -19
- package/modules/es.number.is-integer.js +2 -2
- package/modules/es.number.is-safe-integer.js +2 -2
- package/modules/es.number.to-fixed.js +21 -15
- package/modules/es.number.to-precision.js +6 -5
- package/modules/es.object.has-own.js +1 -1
- 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 +25 -16
- package/modules/es.regexp.dot-all.js +5 -1
- package/modules/es.regexp.flags.js +4 -2
- package/modules/es.regexp.sticky.js +5 -1
- 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 +7 -5
- package/modules/es.string.ends-with.js +7 -5
- 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 +9 -8
- package/modules/es.string.replace-all.js +19 -13
- package/modules/es.string.replace.js +21 -14
- 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 +6 -5
- package/modules/es.symbol.description.js +22 -14
- package/modules/es.symbol.js +47 -33
- package/modules/es.typed-array.at.js +4 -4
- 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 +4 -2
- 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.array.last-index.js +2 -2
- package/modules/esnext.array.last-item.js +3 -3
- package/modules/esnext.async-iterator.as-indexed-pairs.js +2 -1
- package/modules/esnext.async-iterator.constructor.js +4 -4
- 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 +4 -4
- 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 +14 -5
- 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 +9 -3
- 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 +63 -54
- package/modules/web.url.js +110 -96
- 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
- package/internals/has.js +0 -7
- package/internals/is-integer.js +0 -9
- package/internals/to-integer.js +0 -8
|
@@ -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,9 +1,12 @@
|
|
|
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');
|
|
5
8
|
var isCallable = require('../internals/is-callable');
|
|
6
|
-
var
|
|
9
|
+
var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
|
|
7
10
|
var toLength = require('../internals/to-length');
|
|
8
11
|
var toString = require('../internals/to-string');
|
|
9
12
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
@@ -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]);
|
|
@@ -102,28 +109,28 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
102
109
|
result = results[i];
|
|
103
110
|
|
|
104
111
|
var matched = toString(result[0]);
|
|
105
|
-
var position = max(min(
|
|
112
|
+
var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
|
|
106
113
|
var captures = [];
|
|
107
114
|
// NOTE: This is equivalent to
|
|
108
115
|
// captures = result.slice(1).map(maybeToString)
|
|
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');
|
|
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
|
-
var
|
|
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
|
|
|
@@ -17,13 +18,13 @@ $({ target: 'String', proto: true, forced: FORCED }, {
|
|
|
17
18
|
substr: function substr(start, length) {
|
|
18
19
|
var that = toString(requireObjectCoercible(this));
|
|
19
20
|
var size = that.length;
|
|
20
|
-
var intStart =
|
|
21
|
+
var intStart = toIntegerOrInfinity(start);
|
|
21
22
|
var intLength, intEnd;
|
|
22
23
|
if (intStart === Infinity) intStart = 0;
|
|
23
24
|
if (intStart < 0) intStart = max(size + intStart, 0);
|
|
24
|
-
intLength = length === undefined ? size :
|
|
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
|
|
7
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
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
|
|
42
|
-
if (
|
|
43
|
-
var desc =
|
|
48
|
+
var symbol = symbolValueOf(this);
|
|
49
|
+
var string = symbolToString(symbol);
|
|
50
|
+
if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
|
|
51
|
+
var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');
|
|
44
52
|
return desc === '' ? undefined : desc;
|
|
45
53
|
}
|
|
46
54
|
});
|
package/modules/es.symbol.js
CHANGED
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
var $ = require('../internals/export');
|
|
3
3
|
var global = require('../internals/global');
|
|
4
4
|
var getBuiltIn = require('../internals/get-built-in');
|
|
5
|
+
var apply = require('../internals/function-apply');
|
|
6
|
+
var call = require('../internals/function-call');
|
|
7
|
+
var uncurryThis = require('../internals/function-uncurry-this');
|
|
5
8
|
var IS_PURE = require('../internals/is-pure');
|
|
6
9
|
var DESCRIPTORS = require('../internals/descriptors');
|
|
7
10
|
var NATIVE_SYMBOL = require('../internals/native-symbol');
|
|
8
11
|
var fails = require('../internals/fails');
|
|
9
|
-
var
|
|
12
|
+
var hasOwn = require('../internals/has-own-property');
|
|
10
13
|
var isArray = require('../internals/is-array');
|
|
11
14
|
var isCallable = require('../internals/is-callable');
|
|
12
15
|
var isObject = require('../internals/is-object');
|
|
16
|
+
var isPrototypeOf = require('../internals/object-is-prototype-of');
|
|
13
17
|
var isSymbol = require('../internals/is-symbol');
|
|
14
18
|
var anObject = require('../internals/an-object');
|
|
15
19
|
var toObject = require('../internals/to-object');
|
|
@@ -25,6 +29,7 @@ var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-
|
|
|
25
29
|
var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
|
|
26
30
|
var definePropertyModule = require('../internals/object-define-property');
|
|
27
31
|
var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
|
|
32
|
+
var arraySlice = require('../internals/array-slice');
|
|
28
33
|
var redefine = require('../internals/redefine');
|
|
29
34
|
var shared = require('../internals/shared');
|
|
30
35
|
var sharedKey = require('../internals/shared-key');
|
|
@@ -41,21 +46,28 @@ var HIDDEN = sharedKey('hidden');
|
|
|
41
46
|
var SYMBOL = 'Symbol';
|
|
42
47
|
var PROTOTYPE = 'prototype';
|
|
43
48
|
var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
|
|
49
|
+
|
|
44
50
|
var setInternalState = InternalStateModule.set;
|
|
45
51
|
var getInternalState = InternalStateModule.getterFor(SYMBOL);
|
|
52
|
+
|
|
46
53
|
var ObjectPrototype = Object[PROTOTYPE];
|
|
47
54
|
var $Symbol = global.Symbol;
|
|
55
|
+
var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
|
|
56
|
+
var TypeError = global.TypeError;
|
|
57
|
+
var QObject = global.QObject;
|
|
48
58
|
var $stringify = getBuiltIn('JSON', 'stringify');
|
|
49
59
|
var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
|
|
50
60
|
var nativeDefineProperty = definePropertyModule.f;
|
|
51
61
|
var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
|
|
52
62
|
var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
|
|
63
|
+
var push = uncurryThis([].push);
|
|
64
|
+
|
|
53
65
|
var AllSymbols = shared('symbols');
|
|
54
66
|
var ObjectPrototypeSymbols = shared('op-symbols');
|
|
55
67
|
var StringToSymbolRegistry = shared('string-to-symbol-registry');
|
|
56
68
|
var SymbolToStringRegistry = shared('symbol-to-string-registry');
|
|
57
69
|
var WellKnownSymbolsStore = shared('wks');
|
|
58
|
-
|
|
70
|
+
|
|
59
71
|
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
|
|
60
72
|
var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
|
|
61
73
|
|
|
@@ -74,7 +86,7 @@ var setSymbolDescriptor = DESCRIPTORS && fails(function () {
|
|
|
74
86
|
} : nativeDefineProperty;
|
|
75
87
|
|
|
76
88
|
var wrap = function (tag, description) {
|
|
77
|
-
var symbol = AllSymbols[tag] = nativeObjectCreate(
|
|
89
|
+
var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
|
|
78
90
|
setInternalState(symbol, {
|
|
79
91
|
type: SYMBOL,
|
|
80
92
|
tag: tag,
|
|
@@ -89,12 +101,12 @@ var $defineProperty = function defineProperty(O, P, Attributes) {
|
|
|
89
101
|
anObject(O);
|
|
90
102
|
var key = toPropertyKey(P);
|
|
91
103
|
anObject(Attributes);
|
|
92
|
-
if (
|
|
104
|
+
if (hasOwn(AllSymbols, key)) {
|
|
93
105
|
if (!Attributes.enumerable) {
|
|
94
|
-
if (!
|
|
106
|
+
if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
|
|
95
107
|
O[HIDDEN][key] = true;
|
|
96
108
|
} else {
|
|
97
|
-
if (
|
|
109
|
+
if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
|
|
98
110
|
Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
|
|
99
111
|
} return setSymbolDescriptor(O, key, Attributes);
|
|
100
112
|
} return nativeDefineProperty(O, key, Attributes);
|
|
@@ -105,7 +117,7 @@ var $defineProperties = function defineProperties(O, Properties) {
|
|
|
105
117
|
var properties = toIndexedObject(Properties);
|
|
106
118
|
var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
|
|
107
119
|
$forEach(keys, function (key) {
|
|
108
|
-
if (!DESCRIPTORS || $propertyIsEnumerable
|
|
120
|
+
if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
|
|
109
121
|
});
|
|
110
122
|
return O;
|
|
111
123
|
};
|
|
@@ -116,17 +128,18 @@ var $create = function create(O, Properties) {
|
|
|
116
128
|
|
|
117
129
|
var $propertyIsEnumerable = function propertyIsEnumerable(V) {
|
|
118
130
|
var P = toPropertyKey(V);
|
|
119
|
-
var enumerable =
|
|
120
|
-
if (this === ObjectPrototype &&
|
|
121
|
-
return enumerable || !
|
|
131
|
+
var enumerable = call(nativePropertyIsEnumerable, this, P);
|
|
132
|
+
if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
|
|
133
|
+
return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
|
|
134
|
+
? enumerable : true;
|
|
122
135
|
};
|
|
123
136
|
|
|
124
137
|
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
|
|
125
138
|
var it = toIndexedObject(O);
|
|
126
139
|
var key = toPropertyKey(P);
|
|
127
|
-
if (it === ObjectPrototype &&
|
|
140
|
+
if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
|
|
128
141
|
var descriptor = nativeGetOwnPropertyDescriptor(it, key);
|
|
129
|
-
if (descriptor &&
|
|
142
|
+
if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
|
|
130
143
|
descriptor.enumerable = true;
|
|
131
144
|
}
|
|
132
145
|
return descriptor;
|
|
@@ -136,7 +149,7 @@ var $getOwnPropertyNames = function getOwnPropertyNames(O) {
|
|
|
136
149
|
var names = nativeGetOwnPropertyNames(toIndexedObject(O));
|
|
137
150
|
var result = [];
|
|
138
151
|
$forEach(names, function (key) {
|
|
139
|
-
if (!
|
|
152
|
+
if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
|
|
140
153
|
});
|
|
141
154
|
return result;
|
|
142
155
|
};
|
|
@@ -146,8 +159,8 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
|
|
|
146
159
|
var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
|
|
147
160
|
var result = [];
|
|
148
161
|
$forEach(names, function (key) {
|
|
149
|
-
if (
|
|
150
|
-
|
|
162
|
+
if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
|
|
163
|
+
push(result, AllSymbols[key]);
|
|
151
164
|
}
|
|
152
165
|
});
|
|
153
166
|
return result;
|
|
@@ -157,19 +170,21 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
|
|
|
157
170
|
// https://tc39.es/ecma262/#sec-symbol-constructor
|
|
158
171
|
if (!NATIVE_SYMBOL) {
|
|
159
172
|
$Symbol = function Symbol() {
|
|
160
|
-
if (this
|
|
173
|
+
if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');
|
|
161
174
|
var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
|
|
162
175
|
var tag = uid(description);
|
|
163
176
|
var setter = function (value) {
|
|
164
|
-
if (this === ObjectPrototype)
|
|
165
|
-
if (
|
|
177
|
+
if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
|
|
178
|
+
if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
|
|
166
179
|
setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
|
|
167
180
|
};
|
|
168
181
|
if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
|
|
169
182
|
return wrap(tag, description);
|
|
170
183
|
};
|
|
171
184
|
|
|
172
|
-
|
|
185
|
+
SymbolPrototype = $Symbol[PROTOTYPE];
|
|
186
|
+
|
|
187
|
+
redefine(SymbolPrototype, 'toString', function toString() {
|
|
173
188
|
return getInternalState(this).tag;
|
|
174
189
|
});
|
|
175
190
|
|
|
@@ -189,7 +204,7 @@ if (!NATIVE_SYMBOL) {
|
|
|
189
204
|
|
|
190
205
|
if (DESCRIPTORS) {
|
|
191
206
|
// https://github.com/tc39/proposal-Symbol-description
|
|
192
|
-
nativeDefineProperty(
|
|
207
|
+
nativeDefineProperty(SymbolPrototype, 'description', {
|
|
193
208
|
configurable: true,
|
|
194
209
|
get: function description() {
|
|
195
210
|
return getInternalState(this).description;
|
|
@@ -214,7 +229,7 @@ $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
|
|
|
214
229
|
// https://tc39.es/ecma262/#sec-symbol.for
|
|
215
230
|
'for': function (key) {
|
|
216
231
|
var string = $toString(key);
|
|
217
|
-
if (
|
|
232
|
+
if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
|
|
218
233
|
var symbol = $Symbol(string);
|
|
219
234
|
StringToSymbolRegistry[string] = symbol;
|
|
220
235
|
SymbolToStringRegistry[symbol] = string;
|
|
@@ -224,7 +239,7 @@ $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
|
|
|
224
239
|
// https://tc39.es/ecma262/#sec-symbol.keyfor
|
|
225
240
|
keyFor: function keyFor(sym) {
|
|
226
241
|
if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
|
|
227
|
-
if (
|
|
242
|
+
if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
|
|
228
243
|
},
|
|
229
244
|
useSetter: function () { USE_SETTER = true; },
|
|
230
245
|
useSimple: function () { USE_SETTER = false; }
|
|
@@ -278,28 +293,27 @@ if ($stringify) {
|
|
|
278
293
|
$({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
|
|
279
294
|
// eslint-disable-next-line no-unused-vars -- required for `.length`
|
|
280
295
|
stringify: function stringify(it, replacer, space) {
|
|
281
|
-
var args =
|
|
282
|
-
var
|
|
283
|
-
var $replacer;
|
|
284
|
-
while (arguments.length > index) args.push(arguments[index++]);
|
|
285
|
-
$replacer = replacer;
|
|
296
|
+
var args = arraySlice(arguments);
|
|
297
|
+
var $replacer = replacer;
|
|
286
298
|
if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
|
|
287
299
|
if (!isArray(replacer)) replacer = function (key, value) {
|
|
288
|
-
if (isCallable($replacer)) value = $replacer
|
|
300
|
+
if (isCallable($replacer)) value = call($replacer, this, key, value);
|
|
289
301
|
if (!isSymbol(value)) return value;
|
|
290
302
|
};
|
|
291
303
|
args[1] = replacer;
|
|
292
|
-
return $stringify
|
|
304
|
+
return apply($stringify, null, args);
|
|
293
305
|
}
|
|
294
306
|
});
|
|
295
307
|
}
|
|
296
308
|
|
|
297
309
|
// `Symbol.prototype[@@toPrimitive]` method
|
|
298
310
|
// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
|
|
299
|
-
if (
|
|
300
|
-
var valueOf =
|
|
301
|
-
|
|
302
|
-
|
|
311
|
+
if (!SymbolPrototype[TO_PRIMITIVE]) {
|
|
312
|
+
var valueOf = SymbolPrototype.valueOf;
|
|
313
|
+
// eslint-disable-next-line no-unused-vars -- required for .length
|
|
314
|
+
redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {
|
|
315
|
+
// TODO: improve hint logic
|
|
316
|
+
return call(valueOf, this);
|
|
303
317
|
});
|
|
304
318
|
}
|
|
305
319
|
// `Symbol.prototype[@@toStringTag]` property
|