From 3f1106a986ef72b1d2b0922eabfaabb90deed6a3 Mon Sep 17 00:00:00 2001 From: Denis Pushkarev Date: Wed, 30 Mar 2022 01:46:05 +0700 Subject: [PATCH] filter out stabilized proposals from the output --- CHANGELOG.md | 1 + packages/core-js-builder/index.js | 3 ++- packages/core-js-compat/compat.js | 4 +++- packages/core-js-compat/helpers.js | 13 +++++++++++++ scripts/bundle.mjs | 6 ------ 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b990aa87724e..c14ce84abadd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Changelog ##### Unreleased +- Stabilized proposals are filtered out from the `core-js-compat` / `core-js-builder` / `core-js-bundle` output. That mean that if the output contains, for example, `es.object.has-own`, the legacy shortcut to it, `esnext.object.has-own`, will not be added. - Fixed work of non-standard V8 `Error` features with wrapped `Error` constructors, [#1061](https://github.com/zloirock/core-js/issues/1061) - `null` and `undefined` allowed as the second argument of `structuredClone`, [#1056](https://github.com/zloirock/core-js/issues/1056) - Updated Electron 18.0 compat data mapping diff --git a/packages/core-js-builder/index.js b/packages/core-js-builder/index.js index 23088bdb3882..ab707e916e3f 100644 --- a/packages/core-js-builder/index.js +++ b/packages/core-js-builder/index.js @@ -12,6 +12,7 @@ const mkdirp = promisify(require('mkdirp')); const webpack = promisify(require('webpack')); const compat = require('core-js-compat/compat'); const modulesList = require('core-js-compat/modules'); +const { filterOutStabilizedProposals } = require('core-js-compat/helpers'); const { banner } = require('./config'); function normalizeSummary(unit = {}) { @@ -55,7 +56,7 @@ module.exports = async function ({ filter('delete', blacklist || exclude); // eslint-disable-next-line sonarjs/no-empty-collection -- false positive - modules = modulesList.filter(it => set.has(it)); + modules = filterOutStabilizedProposals(modulesList.filter(it => set.has(it))); if (targets) { const compatResult = compat({ targets, filter: modules }); diff --git a/packages/core-js-compat/compat.js b/packages/core-js-compat/compat.js index 5e5b0032946c..808fa835cbbf 100644 --- a/packages/core-js-compat/compat.js +++ b/packages/core-js-compat/compat.js @@ -1,5 +1,5 @@ 'use strict'; -const { compare, has, intersection } = require('./helpers'); +const { compare, filterOutStabilizedProposals, has, intersection } = require('./helpers'); const data = require('./data'); const getModulesListForTargetVersion = require('./get-modules-list-for-target-version'); const modules = require('./modules'); @@ -40,6 +40,8 @@ module.exports = function ({ targets, filter, version }) { $modules = $modules.filter(it => it.startsWith(filter)); } + $modules = filterOutStabilizedProposals($modules); + if (version) { $modules = intersection($modules, getModulesListForTargetVersion(version)); } diff --git a/packages/core-js-compat/helpers.js b/packages/core-js-compat/helpers.js index c3216e5c57d1..52fbf0654753 100644 --- a/packages/core-js-compat/helpers.js +++ b/packages/core-js-compat/helpers.js @@ -8,6 +8,18 @@ function compare(a, operator, b) { return cmp(semver(a), operator, semver(b)); } +function filterOutStabilizedProposals(modules) { + const modulesSet = new Set(modules); + + for (const $module of modulesSet) { + if ($module.startsWith('esnext.') && modulesSet.has($module.replace(/^esnext\./, 'es.'))) { + modulesSet.delete($module); + } + } + + return [...modulesSet]; +} + function intersection(list, order) { const set = list instanceof Set ? list : new Set(list); return order.filter(name => set.has(name)); @@ -22,6 +34,7 @@ function sortObjectByKey(object, fn) { module.exports = { compare, + filterOutStabilizedProposals, has, intersection, semver, diff --git a/scripts/bundle.mjs b/scripts/bundle.mjs index d632e9d9c113..20ba1f2a6378 100644 --- a/scripts/bundle.mjs +++ b/scripts/bundle.mjs @@ -51,8 +51,6 @@ bundle(DENO ? { targets: { deno: '1.0' }, exclude: [ 'esnext.array.filter-out', // obsolete - 'esnext.aggregate-error', // moved to stable ES - 'esnext.global-this', // moved to stable ES 'esnext.map.update-or-insert', // obsolete 'esnext.map.upsert', // obsolete 'esnext.math.iaddh', // withdrawn @@ -63,11 +61,7 @@ bundle(DENO ? { 'esnext.object.iterate-entries', // withdrawn 'esnext.object.iterate-keys', // withdrawn 'esnext.object.iterate-values', // withdrawn - 'esnext.promise.all-settled', // moved to stable ES - 'esnext.promise.any', // moved to stable ES 'esnext.string.at', // withdrawn - 'esnext.string.match-all', // moved to stable ES - 'esnext.string.replace-all', // moved to stable ES 'esnext.symbol.pattern-match', // is not a part of actual proposal, replaced by esnext.symbol.matcher 'esnext.symbol.replace-all', // obsolete 'esnext.typed-array.filter-out', // obsolete