diff --git a/README.md b/README.md index ae29dedc6aff..36ec1019d37a 100644 --- a/README.md +++ b/README.md @@ -2400,8 +2400,8 @@ for (let x of Math.seededPRNG({ seed: 42 })) { if (x > .8) break; } ``` -##### [`Symbol.patternMatch` for pattern matching](https://github.com/tc39/proposal-pattern-matching)[⬆](#index) -Module [`esnext.symbol.pattern-match`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.symbol.pattern-match.js). +##### [`Symbol.matcher` for pattern matching](https://github.com/tc39/proposal-pattern-matching)[⬆](#index) +Module [`esnext.symbol.matcher`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.symbol.matcher.js). ```js class Symbol { static patternMatch: @@patternMatch; @@ -2410,7 +2410,7 @@ class Symbol { [*CommonJS entry points:*](#commonjs-api) ```js core-js/proposals/pattern-matching -core-js(-pure)/features/symbol/pattern-match +core-js(-pure)/features/symbol/matcher ``` ##### [Object iteration](https://github.com/tc39/proposal-object-iteration)[⬆](#index) Modules [`esnext.object.iterate-keys`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.object.iterate-keys.js), [`esnext.object.iterate-values`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.object.iterate-values.js), [`esnext.object.iterate-entries`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.object.iterate-entries.js). diff --git a/packages/core-js-compat/src/data.js b/packages/core-js-compat/src/data.js index dc862a1df801..2d5c19c16928 100644 --- a/packages/core-js-compat/src/data.js +++ b/packages/core-js-compat/src/data.js @@ -1504,10 +1504,13 @@ const data = { }, 'esnext.symbol.dispose': { }, + 'esnext.symbol.matcher': { + }, 'esnext.symbol.metadata': { }, 'esnext.symbol.observable': { }, + // TODO: Remove from `core-js@4` 'esnext.symbol.pattern-match': { }, // TODO: Remove from `core-js@4` diff --git a/packages/core-js-compat/src/modules-by-versions.js b/packages/core-js-compat/src/modules-by-versions.js index 3112d33e6d6c..7888a3b3902c 100644 --- a/packages/core-js-compat/src/modules-by-versions.js +++ b/packages/core-js-compat/src/modules-by-versions.js @@ -84,6 +84,7 @@ module.exports = { 'esnext.object.has-own', ], 3.12: [ + 'esnext.symbol.matcher', 'esnext.symbol.metadata', ], }; diff --git a/packages/core-js/features/symbol/index.js b/packages/core-js/features/symbol/index.js index 0335e1bd496d..28dc4b29f629 100644 --- a/packages/core-js/features/symbol/index.js +++ b/packages/core-js/features/symbol/index.js @@ -1,8 +1,10 @@ var parent = require('../../es/symbol'); require('../../modules/esnext.symbol.async-dispose'); require('../../modules/esnext.symbol.dispose'); +require('../../modules/esnext.symbol.matcher'); require('../../modules/esnext.symbol.metadata'); require('../../modules/esnext.symbol.observable'); +// TODO: Remove from `core-js@4` require('../../modules/esnext.symbol.pattern-match'); // TODO: Remove from `core-js@4` require('../../modules/esnext.symbol.replace-all'); diff --git a/packages/core-js/features/symbol/matcher.js b/packages/core-js/features/symbol/matcher.js new file mode 100644 index 000000000000..3c1d220427f5 --- /dev/null +++ b/packages/core-js/features/symbol/matcher.js @@ -0,0 +1,4 @@ +require('../../modules/esnext.symbol.matcher'); +var WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped'); + +module.exports = WrappedWellKnownSymbolModule.f('matcher'); diff --git a/packages/core-js/features/symbol/pattern-match.js b/packages/core-js/features/symbol/pattern-match.js index 98ffbb0f1e58..cf3a668d9e63 100644 --- a/packages/core-js/features/symbol/pattern-match.js +++ b/packages/core-js/features/symbol/pattern-match.js @@ -1,3 +1,4 @@ +// TODO: Remove from `core-js@4` require('../../modules/esnext.symbol.pattern-match'); var WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped'); diff --git a/packages/core-js/modules/esnext.symbol.matcher.js b/packages/core-js/modules/esnext.symbol.matcher.js new file mode 100644 index 000000000000..3a5d1d892667 --- /dev/null +++ b/packages/core-js/modules/esnext.symbol.matcher.js @@ -0,0 +1,5 @@ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.matcher` well-known symbol +// https://github.com/tc39/proposal-pattern-matching +defineWellKnownSymbol('matcher'); diff --git a/packages/core-js/modules/esnext.symbol.pattern-match.js b/packages/core-js/modules/esnext.symbol.pattern-match.js index 01200639cf5b..56ef0b4ed967 100644 --- a/packages/core-js/modules/esnext.symbol.pattern-match.js +++ b/packages/core-js/modules/esnext.symbol.pattern-match.js @@ -1,3 +1,4 @@ +// TODO: remove from `core-js@4` var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); // `Symbol.patternMatch` well-known symbol diff --git a/packages/core-js/proposals/pattern-matching.js b/packages/core-js/proposals/pattern-matching.js index b8b6967c3bdf..c34b801d6c94 100644 --- a/packages/core-js/proposals/pattern-matching.js +++ b/packages/core-js/proposals/pattern-matching.js @@ -1,2 +1,4 @@ // https://github.com/tc39/proposal-pattern-matching +require('../modules/esnext.symbol.matcher'); +// TODO: remove from `core-js@4` require('../modules/esnext.symbol.pattern-match'); diff --git a/tests/commonjs.js b/tests/commonjs.js index 2195599c6122..3b8c6faf4e8a 100644 --- a/tests/commonjs.js +++ b/tests/commonjs.js @@ -297,6 +297,7 @@ for (PATH of ['core-js-pure', 'core-js']) { ok(load('features/symbol/is-concat-spreadable')); ok(load('features/symbol/iterator')); ok(load('features/symbol/match')); + ok(load('features/symbol/matcher')); ok(load('features/symbol/match-all')); ok(load('features/symbol/metadata')); ok(load('features/symbol/replace')); diff --git a/tests/compat/tests.js b/tests/compat/tests.js index df69b3b39c44..145b21598e49 100644 --- a/tests/compat/tests.js +++ b/tests/compat/tests.js @@ -1431,12 +1431,16 @@ GLOBAL.tests = { 'esnext.symbol.dispose': function () { return Symbol.dispose; }, + 'esnext.symbol.matcher': function () { + return Symbol.matcher; + }, 'esnext.symbol.metadata': function () { return Symbol.metadata; }, 'esnext.symbol.observable': function () { return Symbol.observable; }, + // TODO: Remove from `core-js@4` 'esnext.symbol.pattern-match': function () { return Symbol.patternMatch; }, diff --git a/tests/pure/esnext.symbol.matcher.js b/tests/pure/esnext.symbol.matcher.js new file mode 100644 index 000000000000..19910bb9167f --- /dev/null +++ b/tests/pure/esnext.symbol.matcher.js @@ -0,0 +1,6 @@ +import Symbol from 'core-js-pure/features/symbol'; + +QUnit.test('Symbol.matcher', assert => { + assert.ok('matcher' in Symbol, 'Symbol.matcher available'); + assert.ok(Object(Symbol.matcher) instanceof Symbol, 'Symbol.matcher is symbol'); +}); diff --git a/tests/tests/esnext.symbol.matcher.js b/tests/tests/esnext.symbol.matcher.js new file mode 100644 index 000000000000..cbffa2b97777 --- /dev/null +++ b/tests/tests/esnext.symbol.matcher.js @@ -0,0 +1,13 @@ +import { DESCRIPTORS } from '../helpers/constants'; + +QUnit.test('Symbol.matcher', assert => { + assert.ok('matcher' in Symbol, 'Symbol.matcher available'); + assert.nonEnumerable(Symbol, 'matcher'); + assert.ok(Object(Symbol.matcher) instanceof Symbol, 'Symbol.matcher is symbol'); + if (DESCRIPTORS) { + const descriptor = Object.getOwnPropertyDescriptor(Symbol, 'matcher'); + assert.ok(!descriptor.enumerble, 'non-enumerable'); + assert.ok(!descriptor.writable, 'non-writable'); + assert.ok(!descriptor.configurable, 'non-configurable'); + } +});