babel-plugin-polyfill-corejs3
Advanced tools
Comparing version 0.8.1 to 0.8.2
@@ -5,7 +5,4 @@ "use strict"; | ||
exports.StaticProperties = exports.PromiseDependenciesWithIterators = exports.PromiseDependencies = exports.InstanceProperties = exports.CommonIterators = exports.BuiltIns = void 0; | ||
var _data = _interopRequireDefault(require("../core-js-compat/data.js")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
const polyfillsOrder = {}; | ||
@@ -15,3 +12,2 @@ Object.keys(_data.default).forEach((name, index) => { | ||
}); | ||
const define = (pure, global, name = global[0], exclude) => { | ||
@@ -25,5 +21,3 @@ return { | ||
}; | ||
const typed = name => define(null, [name, ...TypedArrayDependencies]); | ||
const ArrayNatureIterators = ["es.array.iterator", "web.dom-collections.iterator"]; | ||
@@ -47,3 +41,3 @@ const CommonIterators = ["es.string.iterator", ...ArrayNatureIterators]; | ||
const DOMExceptionDependencies = ["web.dom-exception.constructor", "web.dom-exception.stack", "web.dom-exception.to-string-tag", "es.error.to-string"]; | ||
const URLSearchParamsDependencies = ["web.url-search-params", "web.url-search-params.size", ...CommonIteratorsWithTag]; | ||
const URLSearchParamsDependencies = ["web.url-search-params", "web.url-search-params.delete", "web.url-search-params.has", "web.url-search-params.size", ...CommonIteratorsWithTag]; | ||
const AsyncIteratorDependencies = ["esnext.async-iterator.constructor", ...PromiseDependencies]; | ||
@@ -213,2 +207,3 @@ const AsyncIteratorProblemMethods = ["esnext.async-iterator.every", "esnext.async-iterator.filter", "esnext.async-iterator.find", "esnext.async-iterator.flat-map", "esnext.async-iterator.for-each", "esnext.async-iterator.map", "esnext.async-iterator.reduce", "esnext.async-iterator.some"]; | ||
getPrototypeOf: define("object/get-prototype-of", ["es.object.get-prototype-of"]), | ||
groupBy: define("object/group-by", ["esnext.object.group-by", "es.object.create"]), | ||
hasOwn: define("object/has-own", ["es.object.has-own"]), | ||
@@ -230,3 +225,4 @@ is: define("object/is", ["es.object.is"]), | ||
race: define(null, PromiseDependenciesWithIterators), | ||
try: define(null, ["esnext.promise.try", ...PromiseDependenciesWithIterators]) | ||
try: define(null, ["esnext.promise.try", ...PromiseDependencies]), | ||
withResolvers: define(null, ["esnext.promise.with-resolvers", ...PromiseDependencies]) | ||
}, | ||
@@ -275,3 +271,5 @@ Reflect: { | ||
isRegistered: define("symbol/is-registered", ["esnext.symbol.is-registered", "es.symbol"]), | ||
isRegisteredSymbol: define("symbol/is-registered-symbol", ["esnext.symbol.is-registered-symbol", "es.symbol"]), | ||
isWellKnown: define("symbol/is-well-known", ["esnext.symbol.is-well-known", "es.symbol"]), | ||
isWellKnownSymbol: define("symbol/is-well-known-symbol", ["esnext.symbol.is-well-known-symbol", "es.symbol"]), | ||
iterator: define("symbol/iterator", ["es.symbol.iterator", ...CommonIteratorsWithTag]), | ||
@@ -282,3 +280,3 @@ keyFor: define("symbol/key-for", [], "es.symbol"), | ||
matchAll: define("symbol/match-all", ["es.symbol.match-all", "es.string.match-all"]), | ||
metadata: define("symbol/metadata", ["esnext.symbol.metadata"]), | ||
metadata: define("symbol/metadata", ["esnext.symbol.metadata", "esnext.function.metadata"]), | ||
metadataKey: define("symbol/metadata-key", ["esnext.symbol.metadata-key"]), | ||
@@ -324,3 +322,4 @@ observable: define("symbol/observable", ["esnext.symbol.observable"]), | ||
asIndexedPairs: define("instance/asIndexedPairs", ["esnext.async-iterator.as-indexed-pairs", ...AsyncIteratorDependencies, "esnext.iterator.as-indexed-pairs", ...IteratorDependencies]), | ||
at: define("instance/at", [// TODO: We should introduce overloaded instance methods definition | ||
at: define("instance/at", [ | ||
// TODO: We should introduce overloaded instance methods definition | ||
// Before that is implemented, the `esnext.string.at` must be the first | ||
@@ -348,3 +347,4 @@ // In pure mode, the provider resolves the descriptor as a "pure" `esnext.string.at` | ||
entries: define("instance/entries", ArrayNatureIteratorsWithTag), | ||
every: define("instance/every", ["es.array.every", "esnext.async-iterator.every", // TODO: add async iterator dependencies when we support sub-dependencies | ||
every: define("instance/every", ["es.array.every", "esnext.async-iterator.every", | ||
// TODO: add async iterator dependencies when we support sub-dependencies | ||
// esnext.async-iterator.every depends on es.promise | ||
@@ -379,3 +379,3 @@ // but we don't want to pull es.promise when esnext.async-iterator is disabled | ||
indexOf: define("instance/index-of", ["es.array.index-of"]), | ||
isWellFormed: define("instance/is-well-formed", ["esnext.string.is-well-formed"]), | ||
isWellFormed: define("instance/is-well-formed", ["es.string.is-well-formed"]), | ||
italic: define(null, ["es.string.italics"]), | ||
@@ -429,3 +429,3 @@ join: define(null, ["es.array.join"]), | ||
toString: define(null, ["es.object.to-string", "es.error.to-string", "es.date.to-string", "es.regexp.to-string"]), | ||
toWellFormed: define("instance/to-well-formed", ["esnext.string.to-well-formed"]), | ||
toWellFormed: define("instance/to-well-formed", ["es.string.to-well-formed"]), | ||
trim: define("instance/trim", ["es.string.trim"]), | ||
@@ -432,0 +432,0 @@ trimEnd: define("instance/trim-end", ["es.string.trim-end"]), |
@@ -5,27 +5,14 @@ "use strict"; | ||
exports.default = void 0; | ||
var _data = _interopRequireDefault(require("../core-js-compat/data.js")); | ||
var _shippedProposals = _interopRequireDefault(require("./shipped-proposals")); | ||
var _getModulesListForTargetVersion = _interopRequireDefault(require("../core-js-compat/get-modules-list-for-target-version.js")); | ||
var _builtInDefinitions = require("./built-in-definitions"); | ||
var _usageFilters = _interopRequireDefault(require("./usage-filters")); | ||
var _babel = _interopRequireWildcard(require("@babel/core")); | ||
var _utils = require("./utils"); | ||
var _helperDefinePolyfillProvider = _interopRequireDefault(require("@babel/helper-define-polyfill-provider")); | ||
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } | ||
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
const { | ||
@@ -37,3 +24,2 @@ types: t | ||
const uniqueObjects = ["array", "string", "iterator", "async-iterator", "dom-collections"].map(v => new RegExp(`[a-z]*\\.${v}\\..*`)); | ||
const esnextFallback = (name, cb) => { | ||
@@ -46,3 +32,2 @@ if (cb(name)) return true; | ||
}; | ||
var _default = (0, _helperDefinePolyfillProvider.default)(function ({ | ||
@@ -74,7 +59,5 @@ getUtils, | ||
const available = new Set((0, _getModulesListForTargetVersion.default)(version)); | ||
function getCoreJSPureBase(useProposalBase) { | ||
return useBabelRuntime ? useProposalBase ? `${_utils.BABEL_RUNTIME}/core-js` : `${_utils.BABEL_RUNTIME}/core-js-stable` : useProposalBase ? "core-js-pure/features" : "core-js-pure/stable"; | ||
} | ||
function maybeInjectGlobalImpl(name, utils) { | ||
@@ -86,6 +69,4 @@ if (shouldInjectPolyfill(name)) { | ||
} | ||
return false; | ||
} | ||
function maybeInjectGlobal(names, utils, fallback = true) { | ||
@@ -100,3 +81,2 @@ for (const name of names) { | ||
} | ||
function maybeInjectPure(desc, hint, utils, object) { | ||
@@ -108,3 +88,2 @@ if (desc.pure && !(object && desc.exclude && desc.exclude.includes(object)) && esnextFallback(desc.name, shouldInjectPolyfill)) { | ||
let useProposalBase = false; | ||
if (proposals || shippedProposals && name.startsWith("esnext.")) { | ||
@@ -115,3 +94,2 @@ useProposalBase = true; | ||
} | ||
const coreJSPureBase = getCoreJSPureBase(useProposalBase); | ||
@@ -121,14 +99,11 @@ return utils.injectDefaultImport(`${coreJSPureBase}/${desc.pure}${ext}`, hint); | ||
} | ||
function isFeatureStable(name) { | ||
if (name.startsWith("esnext.")) { | ||
const esName = `es.${name.slice(7)}`; // If its imaginative esName is not in latest compat data, it means | ||
const esName = `es.${name.slice(7)}`; | ||
// If its imaginative esName is not in latest compat data, it means | ||
// the proposal is not stage 4 | ||
return esName in _data.default; | ||
} | ||
return true; | ||
} | ||
return { | ||
@@ -138,14 +113,10 @@ name: "corejs3", | ||
polyfills: _data.default, | ||
filterPolyfills(name) { | ||
if (!available.has(name)) return false; | ||
if (proposals || method === "entry-global") return true; | ||
if (shippedProposals && _shippedProposals.default.has(name)) { | ||
return true; | ||
} | ||
return isFeatureStable(name); | ||
}, | ||
entryGlobal(meta, utils, path) { | ||
@@ -155,3 +126,2 @@ if (meta.kind !== "import") return; | ||
if (!modules) return; | ||
if (modules.length === 1 && meta.source === (0, _utils.coreJSModule)(modules[0]) && shouldInjectPolyfill(modules[0])) { | ||
@@ -163,3 +133,2 @@ // Avoid infinite loop: do not replace imports with a new copy of | ||
} | ||
const modulesSet = new Set(modules); | ||
@@ -169,7 +138,5 @@ const filteredModules = modules.filter(module => { | ||
const stable = module.replace("esnext.", "es."); | ||
if (modulesSet.has(stable) && shouldInjectPolyfill(stable)) { | ||
return false; | ||
} | ||
return true; | ||
@@ -180,3 +147,2 @@ }); | ||
}, | ||
usageGlobal(meta, utils, path) { | ||
@@ -187,3 +153,2 @@ const resolved = resolve(meta); | ||
let deps = resolved.desc.global; | ||
if (resolved.kind !== "global" && "object" in meta && meta.object && meta.placement === "prototype") { | ||
@@ -193,6 +158,4 @@ const low = meta.object.toLowerCase(); | ||
} | ||
maybeInjectGlobal(deps, utils); | ||
}, | ||
usagePure(meta, utils, path) { | ||
@@ -207,7 +170,5 @@ if (meta.kind === "in") { | ||
} | ||
if (path.parentPath.isUnaryExpression({ | ||
operator: "delete" | ||
})) return; | ||
if (meta.kind === "property") { | ||
@@ -218,7 +179,5 @@ // We can't compile destructuring and updateExpression. | ||
if (path.parentPath.isUpdateExpression()) return; | ||
if (t.isSuper(path.node.object)) { | ||
return; | ||
} | ||
if (meta.key === "Symbol.iterator") { | ||
@@ -230,3 +189,2 @@ if (!shouldInjectPolyfill("es.symbol.iterator")) return; | ||
} = path; | ||
if (t.isCallExpression(parent, { | ||
@@ -244,11 +202,8 @@ callee: node | ||
} | ||
return; | ||
} | ||
} | ||
let resolved = resolve(meta); | ||
if (!resolved) return; | ||
if ((0, _usageFilters.default)(resolved.desc, path)) return; | ||
if (useBabelRuntime && resolved.desc.pure && resolved.desc.pure.slice(-6) === "/index") { | ||
@@ -262,3 +217,2 @@ // Remove /index, since it doesn't exist in @babel/runtime-corejs3s | ||
} | ||
if (resolved.kind === "global") { | ||
@@ -268,7 +222,9 @@ const id = maybeInjectPure(resolved.desc, resolved.name, utils); | ||
} else if (resolved.kind === "static") { | ||
const id = maybeInjectPure(resolved.desc, resolved.name, utils, // @ts-expect-error | ||
const id = maybeInjectPure(resolved.desc, resolved.name, utils, | ||
// @ts-expect-error | ||
meta.object); | ||
if (id) path.replaceWith(id); | ||
} else if (resolved.kind === "instance") { | ||
const id = maybeInjectPure(resolved.desc, `${resolved.name}InstanceProperty`, utils, // @ts-expect-error | ||
const id = maybeInjectPure(resolved.desc, `${resolved.name}InstanceProperty`, utils, | ||
// @ts-expect-error | ||
meta.object); | ||
@@ -279,3 +235,2 @@ if (!id) return; | ||
} = path; | ||
if (t.isCallExpression(path.parent, { | ||
@@ -290,3 +245,2 @@ callee: node | ||
}, | ||
visitor: method === "usage-global" && { | ||
@@ -297,3 +251,2 @@ // import("foo") | ||
const utils = getUtils(path); | ||
if (isWebpack) { | ||
@@ -307,3 +260,2 @@ // Webpack uses Promise.all to handle dynamic import. | ||
}, | ||
// (async function () { }).finally(...) | ||
@@ -315,3 +267,2 @@ Function(path) { | ||
}, | ||
// for-of, [a, b] = c | ||
@@ -321,3 +272,2 @@ "ForOfStatement|ArrayPattern"(path) { | ||
}, | ||
// [...spread] | ||
@@ -329,3 +279,2 @@ SpreadElement(path) { | ||
}, | ||
// yield* | ||
@@ -337,7 +286,5 @@ YieldExpression(path) { | ||
} | ||
} | ||
}; | ||
}); | ||
exports.default = _default; |
@@ -5,6 +5,4 @@ "use strict"; | ||
exports.default = void 0; | ||
// This file is automatically generated by scripts/build-corejs3-shipped-proposals.mjs | ||
var _default = new Set(["esnext.array.from-async", "esnext.array.group", "esnext.array.group-to-map", "esnext.array-buffer.detached", "esnext.array-buffer.transfer", "esnext.array-buffer.transfer-to-fixed-length", "esnext.json.is-raw-json", "esnext.json.parse", "esnext.json.raw-json", "esnext.set.difference.v2", "esnext.set.intersection.v2", "esnext.set.is-disjoint-from.v2", "esnext.set.is-subset-of.v2", "esnext.set.is-superset-of.v2", "esnext.set.symmetric-difference.v2", "esnext.set.union.v2", "esnext.string.is-well-formed", "esnext.string.to-well-formed"]); | ||
var _default = new Set(["esnext.array.from-async", "esnext.array.group", "esnext.array.group-to-map", "esnext.array-buffer.detached", "esnext.array-buffer.transfer", "esnext.array-buffer.transfer-to-fixed-length", "esnext.json.is-raw-json", "esnext.json.parse", "esnext.json.raw-json", "esnext.set.difference.v2", "esnext.set.intersection.v2", "esnext.set.is-disjoint-from.v2", "esnext.set.is-subset-of.v2", "esnext.set.is-superset-of.v2", "esnext.set.symmetric-difference.v2", "esnext.set.union.v2"]); | ||
exports.default = _default; |
@@ -5,13 +5,8 @@ "use strict"; | ||
exports.default = canSkipPolyfill; | ||
var _babel = _interopRequireWildcard(require("@babel/core")); | ||
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } | ||
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } | ||
const { | ||
types: t | ||
} = _babel.default || _babel; | ||
function canSkipPolyfill(desc, path) { | ||
@@ -22,3 +17,2 @@ const { | ||
} = path; | ||
switch (desc.name) { | ||
@@ -25,0 +19,0 @@ case "es.string.split": |
@@ -9,13 +9,7 @@ "use strict"; | ||
exports.isCoreJSSource = isCoreJSSource; | ||
var _babel = _interopRequireWildcard(require("@babel/core")); | ||
var _entries = _interopRequireDefault(require("../core-js-compat/entries.js")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } | ||
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } | ||
const { | ||
@@ -26,3 +20,2 @@ types: t | ||
exports.BABEL_RUNTIME = BABEL_RUNTIME; | ||
function callMethod(path, id) { | ||
@@ -33,3 +26,2 @@ const { | ||
let context1, context2; | ||
if (t.isIdentifier(object)) { | ||
@@ -42,7 +34,5 @@ context1 = object; | ||
} | ||
path.replaceWith(t.memberExpression(t.callExpression(id, [context2]), t.identifier("call"))); | ||
path.parentPath.unshiftContainer("arguments", context1); | ||
} | ||
function isCoreJSSource(source) { | ||
@@ -52,12 +42,9 @@ if (typeof source === "string") { | ||
} | ||
return Object.prototype.hasOwnProperty.call(_entries.default, source) && _entries.default[source]; | ||
} | ||
function coreJSModule(name) { | ||
return `core-js/modules/${name}.js`; | ||
} | ||
function coreJSPureHelper(name, useBabelRuntime, ext) { | ||
return useBabelRuntime ? `${BABEL_RUNTIME}/core-js/${name}${ext}` : `core-js-pure/features/${name}.js`; | ||
} |
{ | ||
"name": "babel-plugin-polyfill-corejs3", | ||
"version": "0.8.1", | ||
"version": "0.8.2", | ||
"description": "A Babel plugin to inject imports to core-js@3 polyfills", | ||
@@ -29,15 +29,15 @@ "repository": { | ||
"dependencies": { | ||
"@babel/helper-define-polyfill-provider": "^0.4.0", | ||
"core-js-compat": "^3.30.1" | ||
"@babel/helper-define-polyfill-provider": "^0.4.1", | ||
"core-js-compat": "^3.31.0" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "^7.17.8", | ||
"@babel/helper-plugin-test-runner": "^7.16.7", | ||
"@babel/plugin-syntax-dynamic-import": "^7.8.3", | ||
"@babel/plugin-transform-classes": "^7.16.7", | ||
"@babel/plugin-transform-for-of": "^7.16.7", | ||
"@babel/plugin-transform-modules-commonjs": "^7.17.7", | ||
"@babel/plugin-transform-spread": "^7.16.7", | ||
"core-js": "^3.30.1", | ||
"core-js-pure": "^3.30.1" | ||
"@babel/core": "^7.22.6", | ||
"@babel/helper-plugin-test-runner": "^7.22.5", | ||
"@babel/plugin-transform-class-properties": "^7.22.5", | ||
"@babel/plugin-transform-classes": "^7.22.6", | ||
"@babel/plugin-transform-for-of": "^7.22.5", | ||
"@babel/plugin-transform-modules-commonjs": "^7.22.5", | ||
"@babel/plugin-transform-spread": "^7.22.5", | ||
"core-js": "^3.31.0", | ||
"core-js-pure": "^3.31.0" | ||
}, | ||
@@ -47,3 +47,3 @@ "peerDependencies": { | ||
}, | ||
"gitHead": "4b3c67a6a946df756123952a0033dc4426696131" | ||
"gitHead": "74956db5d547985ac8e60bf1af56f4c61af12e4e" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
182134
1521