diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c00f8a9ea1..e0a05b9e42f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Changelog ##### Unreleased +- [`Set` methods proposal](https://github.com/tc39/proposal-set-methods): + - Removed sort from `Set.prototype.intersection`, [March 2023 TC39 meeting](https://github.com/babel/proposals/issues/87#issuecomment-1478610425), [proposal-set-methods/94](https://github.com/tc39/proposal-set-methods/pull/94) - [`Iterator.range` proposal](https://github.com/tc39/proposal-Number.range) moved to Stage 2, [March 2023 TC39 meeting](https://github.com/babel/proposals/issues/87#issuecomment-1480266760) - (Async) Explicit Resource Management proposals: - `(Async)DisposableStack.prototype.move` marks the original stack as disposed, [#1226](https://github.com/zloirock/core-js/issues/1226) diff --git a/packages/core-js-pure/override/internals/set-helpers.js b/packages/core-js-pure/override/internals/set-helpers.js index 6d6193fad57b..6fbbb9d7bec5 100644 --- a/packages/core-js-pure/override/internals/set-helpers.js +++ b/packages/core-js-pure/override/internals/set-helpers.js @@ -9,7 +9,5 @@ module.exports = { add: caller('add', 1), has: caller('has', 1), remove: caller('delete', 1), - proto: SetPrototype, - $has: SetPrototype.has, - $keys: SetPrototype.keys + proto: SetPrototype }; diff --git a/packages/core-js/internals/set-helpers.js b/packages/core-js/internals/set-helpers.js index f7e25f9f88ab..bbc99179ea8a 100644 --- a/packages/core-js/internals/set-helpers.js +++ b/packages/core-js/internals/set-helpers.js @@ -9,7 +9,5 @@ module.exports = { add: uncurryThis(SetPrototype.add), has: uncurryThis(SetPrototype.has), remove: uncurryThis(SetPrototype['delete']), - proto: SetPrototype, - $has: SetPrototype.has, - $keys: SetPrototype.keys + proto: SetPrototype }; diff --git a/packages/core-js/internals/set-intersection.js b/packages/core-js/internals/set-intersection.js index ca968280f756..fd926f2aab07 100644 --- a/packages/core-js/internals/set-intersection.js +++ b/packages/core-js/internals/set-intersection.js @@ -9,12 +9,6 @@ var iterateSimple = require('../internals/iterate-simple'); var Set = SetHelpers.Set; var add = SetHelpers.add; var has = SetHelpers.has; -var nativeHas = SetHelpers.$has; -var nativeKeys = SetHelpers.$keys; - -var isNativeSetRecord = function (record) { - return record.has === nativeHas && record.keys === nativeKeys; -}; // `Set.prototype.intersection` method // https://github.com/tc39/proposal-set-methods @@ -23,19 +17,10 @@ module.exports = function intersection(other) { var otherRec = getSetRecord(other); var result = new Set(); - // observable side effects - if (!isNativeSetRecord(otherRec) && size(O) > otherRec.size) { + if (size(O) > otherRec.size) { iterateSimple(otherRec.getIterator(), function (e) { if (has(O, e)) add(result, e); }); - - if (size(result) < 2) return result; - - var disordered = result; - result = new Set(); - iterateSet(O, function (e) { - if (has(disordered, e)) add(result, e); - }); } else { iterateSet(O, function (e) { if (otherRec.includes(e)) add(result, e); diff --git a/packages/core-js/modules/esnext.set.intersection.v2.js b/packages/core-js/modules/esnext.set.intersection.v2.js index 135acad786f2..c1551dfbe899 100644 --- a/packages/core-js/modules/esnext.set.intersection.v2.js +++ b/packages/core-js/modules/esnext.set.intersection.v2.js @@ -1,9 +1,15 @@ var $ = require('../internals/export'); +var fails = require('../internals/fails'); var intersection = require('../internals/set-intersection'); var setMethodAcceptSetLike = require('../internals/set-method-accept-set-like'); +var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () { + // eslint-disable-next-line es/no-array-from, es/no-set -- testing + return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) != '3,2'; +}); + // `Set.prototype.intersection` method // https://github.com/tc39/proposal-set-methods -$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('intersection') }, { +$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, { intersection: intersection }); diff --git a/tests/compat/tests.js b/tests/compat/tests.js index d57ee9539e00..d4924a8f06f7 100644 --- a/tests/compat/tests.js +++ b/tests/compat/tests.js @@ -1714,7 +1714,7 @@ GLOBAL.tests = { return Set.from; }, 'esnext.set.intersection.v2': function () { - return Set.prototype.intersection; + return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) == '3,2'; }, 'esnext.set.is-disjoint-from.v2': function () { return Set.prototype.isDisjointFrom; diff --git a/tests/unit-global/esnext.set.intersection.js b/tests/unit-global/esnext.set.intersection.js index 133767833bd2..9fc748c7fe1f 100644 --- a/tests/unit-global/esnext.set.intersection.js +++ b/tests/unit-global/esnext.set.intersection.js @@ -18,10 +18,10 @@ QUnit.test('Set#intersection', assert => { assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([4, 5]))), []); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([2, 3, 4]))), [2, 3]); - assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [2, 3]); + assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [3, 2]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1]))), [1, 2, 3]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1, 0]))), [1, 2, 3]); - assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [2, 3]); + assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [3, 2]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1]))), [1, 2, 3]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1, 0]))), [1, 2, 3]); diff --git a/tests/unit-pure/esnext.set.intersection.js b/tests/unit-pure/esnext.set.intersection.js index e69270a33403..b3ef35cd2dd1 100644 --- a/tests/unit-pure/esnext.set.intersection.js +++ b/tests/unit-pure/esnext.set.intersection.js @@ -19,10 +19,10 @@ QUnit.test('Set#intersection', assert => { assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([4, 5]))), []); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([2, 3, 4]))), [2, 3]); - assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [2, 3]); + assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [3, 2]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1]))), [1, 2, 3]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1, 0]))), [1, 2, 3]); - assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [2, 3]); + assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [3, 2]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1]))), [1, 2, 3]); assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1, 0]))), [1, 2, 3]);