Commit 0ae470fd authored by Rosanny Sihombing's avatar Rosanny Sihombing
Browse files

Merge branch 'MLAB-670' into 'testing'

Update required modules

See merge request !162
parents cad730bf d27c335f
Pipeline #6650 passed with stage
in 4 seconds
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FEATURES = void 0;
exports.enableFeature = enableFeature;
exports.isLoose = isLoose;
exports.shouldTransform = shouldTransform;
var _decorators = require("./decorators");
const FEATURES = Object.freeze({
fields: 1 << 1,
privateMethods: 1 << 2,
decorators: 1 << 3,
privateIn: 1 << 4,
staticBlocks: 1 << 5
});
exports.FEATURES = FEATURES;
const featuresSameLoose = new Map([[FEATURES.fields, "@babel/plugin-proposal-class-properties"], [FEATURES.privateMethods, "@babel/plugin-proposal-private-methods"], [FEATURES.privateIn, "@babel/plugin-proposal-private-property-in-object"]]);
const featuresKey = "@babel/plugin-class-features/featuresKey";
const looseKey = "@babel/plugin-class-features/looseKey";
const looseLowPriorityKey = "@babel/plugin-class-features/looseLowPriorityKey/#__internal__@babel/preset-env__please-overwrite-loose-instead-of-throwing";
function enableFeature(file, feature, loose) {
if (!hasFeature(file, feature) || canIgnoreLoose(file, feature)) {
file.set(featuresKey, file.get(featuresKey) | feature);
if (loose === "#__internal__@babel/preset-env__prefer-true-but-false-is-ok-if-it-prevents-an-error") {
setLoose(file, feature, true);
file.set(looseLowPriorityKey, file.get(looseLowPriorityKey) | feature);
} else if (loose === "#__internal__@babel/preset-env__prefer-false-but-true-is-ok-if-it-prevents-an-error") {
setLoose(file, feature, false);
file.set(looseLowPriorityKey, file.get(looseLowPriorityKey) | feature);
} else {
setLoose(file, feature, loose);
}
}
let resolvedLoose;
let higherPriorityPluginName;
for (const [mask, name] of featuresSameLoose) {
if (!hasFeature(file, mask)) continue;
const loose = isLoose(file, mask);
if (canIgnoreLoose(file, mask)) {
continue;
} else if (resolvedLoose === !loose) {
throw new Error("'loose' mode configuration must be the same for @babel/plugin-proposal-class-properties, " + "@babel/plugin-proposal-private-methods and " + "@babel/plugin-proposal-private-property-in-object (when they are enabled).");
} else {
resolvedLoose = loose;
higherPriorityPluginName = name;
}
}
if (resolvedLoose !== undefined) {
for (const [mask, name] of featuresSameLoose) {
if (hasFeature(file, mask) && isLoose(file, mask) !== resolvedLoose) {
setLoose(file, mask, resolvedLoose);
console.warn(`Though the "loose" option was set to "${!resolvedLoose}" in your @babel/preset-env ` + `config, it will not be used for ${name} since the "loose" mode option was set to ` + `"${resolvedLoose}" for ${higherPriorityPluginName}.\nThe "loose" option must be the ` + `same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods ` + `and @babel/plugin-proposal-private-property-in-object (when they are enabled): you can ` + `silence this warning by explicitly adding\n` + `\t["${name}", { "loose": ${resolvedLoose} }]\n` + `to the "plugins" section of your Babel config.`);
}
}
}
}
function hasFeature(file, feature) {
return !!(file.get(featuresKey) & feature);
}
function isLoose(file, feature) {
return !!(file.get(looseKey) & feature);
}
function setLoose(file, feature, loose) {
if (loose) file.set(looseKey, file.get(looseKey) | feature);else file.set(looseKey, file.get(looseKey) & ~feature);
file.set(looseLowPriorityKey, file.get(looseLowPriorityKey) & ~feature);
}
function canIgnoreLoose(file, feature) {
return !!(file.get(looseLowPriorityKey) & feature);
}
function shouldTransform(path, file) {
let decoratorPath = null;
let publicFieldPath = null;
let privateFieldPath = null;
let privateMethodPath = null;
let staticBlockPath = null;
if ((0, _decorators.hasOwnDecorators)(path.node)) {
decoratorPath = path.get("decorators.0");
}
for (const el of path.get("body.body")) {
if (!decoratorPath && (0, _decorators.hasOwnDecorators)(el.node)) {
decoratorPath = el.get("decorators.0");
}
if (!publicFieldPath && el.isClassProperty()) {
publicFieldPath = el;
}
if (!privateFieldPath && el.isClassPrivateProperty()) {
privateFieldPath = el;
}
if (!privateMethodPath && el.isClassPrivateMethod != null && el.isClassPrivateMethod()) {
privateMethodPath = el;
}
if (!staticBlockPath && el.isStaticBlock != null && el.isStaticBlock()) {
staticBlockPath = el;
}
}
if (decoratorPath && privateFieldPath) {
throw privateFieldPath.buildCodeFrameError("Private fields in decorated classes are not supported yet.");
}
if (decoratorPath && privateMethodPath) {
throw privateMethodPath.buildCodeFrameError("Private methods in decorated classes are not supported yet.");
}
if (decoratorPath && !hasFeature(file, FEATURES.decorators)) {
throw path.buildCodeFrameError("Decorators are not enabled." + "\nIf you are using " + '["@babel/plugin-proposal-decorators", { "version": "legacy" }], ' + 'make sure it comes *before* "@babel/plugin-proposal-class-properties" ' + "and enable loose mode, like so:\n" + '\t["@babel/plugin-proposal-decorators", { "version": "legacy" }]\n' + '\t["@babel/plugin-proposal-class-properties", { "loose": true }]');
}
if (privateMethodPath && !hasFeature(file, FEATURES.privateMethods)) {
throw privateMethodPath.buildCodeFrameError("Class private methods are not enabled. " + "Please add `@babel/plugin-proposal-private-methods` to your configuration.");
}
if ((publicFieldPath || privateFieldPath) && !hasFeature(file, FEATURES.fields) && !hasFeature(file, FEATURES.privateMethods)) {
throw path.buildCodeFrameError("Class fields are not enabled. " + "Please add `@babel/plugin-proposal-class-properties` to your configuration.");
}
if (staticBlockPath && !hasFeature(file, FEATURES.staticBlocks)) {
throw path.buildCodeFrameError("Static class blocks are not enabled. " + "Please add `@babel/plugin-proposal-class-static-block` to your configuration.");
}
if (decoratorPath || privateMethodPath || staticBlockPath) {
return true;
}
if ((publicFieldPath || privateFieldPath) && hasFeature(file, FEATURES.fields)) {
return true;
}
return false;
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.buildFieldsInitNodes = buildFieldsInitNodes;
exports.buildPrivateNamesMap = buildPrivateNamesMap;
exports.buildPrivateNamesNodes = buildPrivateNamesNodes;
exports.transformPrivateNamesUsage = transformPrivateNamesUsage;
var _core = require("@babel/core");
var _helperReplaceSupers = require("@babel/helper-replace-supers");
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
var _helperMemberExpressionToFunctions = require("@babel/helper-member-expression-to-functions");
var _helperOptimiseCallExpression = require("@babel/helper-optimise-call-expression");
var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
var ts = require("./typescript");
function buildPrivateNamesMap(props) {
const privateNamesMap = new Map();
for (const prop of props) {
if (prop.isPrivate()) {
const {
name
} = prop.node.key.id;
const update = privateNamesMap.has(name) ? privateNamesMap.get(name) : {
id: prop.scope.generateUidIdentifier(name),
static: prop.node.static,
method: !prop.isProperty()
};
if (prop.isClassPrivateMethod()) {
if (prop.node.kind === "get") {
update.getId = prop.scope.generateUidIdentifier(`get_${name}`);
} else if (prop.node.kind === "set") {
update.setId = prop.scope.generateUidIdentifier(`set_${name}`);
} else if (prop.node.kind === "method") {
update.methodId = prop.scope.generateUidIdentifier(name);
}
}
privateNamesMap.set(name, update);
}
}
return privateNamesMap;
}
function buildPrivateNamesNodes(privateNamesMap, privateFieldsAsProperties, state) {
const initNodes = [];
for (const [name, value] of privateNamesMap) {
const {
static: isStatic,
method: isMethod,
getId,
setId
} = value;
const isAccessor = getId || setId;
const id = _core.types.cloneNode(value.id);
let init;
if (privateFieldsAsProperties) {
init = _core.types.callExpression(state.addHelper("classPrivateFieldLooseKey"), [_core.types.stringLiteral(name)]);
} else if (!isStatic) {
init = _core.types.newExpression(_core.types.identifier(!isMethod || isAccessor ? "WeakMap" : "WeakSet"), []);
}
if (init) {
(0, _helperAnnotateAsPure.default)(init);
initNodes.push(_core.template.statement.ast`var ${id} = ${init}`);
}
}
return initNodes;
}
function privateNameVisitorFactory(visitor) {
const privateNameVisitor = Object.assign({}, visitor, {
Class(path) {
const {
privateNamesMap
} = this;
const body = path.get("body.body");
const visiblePrivateNames = new Map(privateNamesMap);
const redeclared = [];
for (const prop of body) {
if (!prop.isPrivate()) continue;
const {
name
} = prop.node.key.id;
visiblePrivateNames.delete(name);
redeclared.push(name);
}
if (!redeclared.length) {
return;
}
path.get("body").traverse(nestedVisitor, Object.assign({}, this, {
redeclared
}));
path.traverse(privateNameVisitor, Object.assign({}, this, {
privateNamesMap: visiblePrivateNames
}));
path.skipKey("body");
}
});
const nestedVisitor = _core.traverse.visitors.merge([Object.assign({}, visitor), _helperEnvironmentVisitor.default]);
return privateNameVisitor;
}
const privateNameVisitor = privateNameVisitorFactory({
PrivateName(path, {
noDocumentAll
}) {
const {
privateNamesMap,
redeclared
} = this;
const {
node,
parentPath
} = path;
if (!parentPath.isMemberExpression({
property: node
}) && !parentPath.isOptionalMemberExpression({
property: node
})) {
return;
}
const {
name
} = node.id;
if (!privateNamesMap.has(name)) return;
if (redeclared && redeclared.includes(name)) return;
this.handle(parentPath, noDocumentAll);
}
});
function unshadow(name, scope, innerBinding) {
while ((_scope = scope) != null && _scope.hasBinding(name) && !scope.bindingIdentifierEquals(name, innerBinding)) {
var _scope;
scope.rename(name);
scope = scope.parent;
}
}
const privateInVisitor = privateNameVisitorFactory({
BinaryExpression(path) {
const {
operator,
left,
right
} = path.node;
if (operator !== "in") return;
if (!_core.types.isPrivateName(left)) return;
const {
privateFieldsAsProperties,
privateNamesMap,
redeclared
} = this;
const {
name
} = left.id;
if (!privateNamesMap.has(name)) return;
if (redeclared && redeclared.includes(name)) return;
unshadow(this.classRef.name, path.scope, this.innerBinding);
if (privateFieldsAsProperties) {
const {
id
} = privateNamesMap.get(name);
path.replaceWith(_core.template.expression.ast`
Object.prototype.hasOwnProperty.call(${right}, ${_core.types.cloneNode(id)})
`);
return;
}
const {
id,
static: isStatic
} = privateNamesMap.get(name);
if (isStatic) {
path.replaceWith(_core.template.expression.ast`${right} === ${this.classRef}`);
return;
}
path.replaceWith(_core.template.expression.ast`${_core.types.cloneNode(id)}.has(${right})`);
}
});
const privateNameHandlerSpec = {
memoise(member, count) {
const {
scope
} = member;
const {
object
} = member.node;
const memo = scope.maybeGenerateMemoised(object);
if (!memo) {
return;
}
this.memoiser.set(object, memo, count);
},
receiver(member) {
const {
object
} = member.node;
if (this.memoiser.has(object)) {
return _core.types.cloneNode(this.memoiser.get(object));
}
return _core.types.cloneNode(object);
},
get(member) {
const {
classRef,
privateNamesMap,
file,
innerBinding
} = this;
const {
name
} = member.node.property.id;
const {
id,
static: isStatic,
method: isMethod,
methodId,
getId,
setId
} = privateNamesMap.get(name);
const isAccessor = getId || setId;
if (isStatic) {
const helperName = isMethod && !isAccessor ? "classStaticPrivateMethodGet" : "classStaticPrivateFieldSpecGet";
unshadow(classRef.name, member.scope, innerBinding);
return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id)]);
}
if (isMethod) {
if (isAccessor) {
if (!getId && setId) {
if (file.availableHelper("writeOnlyError")) {
return _core.types.sequenceExpression([this.receiver(member), _core.types.callExpression(file.addHelper("writeOnlyError"), [_core.types.stringLiteral(`#${name}`)])]);
}
console.warn(`@babel/helpers is outdated, update it to silence this warning.`);
}
return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), _core.types.cloneNode(id)]);
}
return _core.types.callExpression(file.addHelper("classPrivateMethodGet"), [this.receiver(member), _core.types.cloneNode(id), _core.types.cloneNode(methodId)]);
}
return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), _core.types.cloneNode(id)]);
},
boundGet(member) {
this.memoise(member, 1);
return _core.types.callExpression(_core.types.memberExpression(this.get(member), _core.types.identifier("bind")), [this.receiver(member)]);
},
set(member, value) {
const {
classRef,
privateNamesMap,
file
} = this;
const {
name
} = member.node.property.id;
const {
id,
static: isStatic,
method: isMethod,
setId,
getId
} = privateNamesMap.get(name);
const isAccessor = getId || setId;
if (isStatic) {
const helperName = isMethod && !isAccessor ? "classStaticPrivateMethodSet" : "classStaticPrivateFieldSpecSet";
return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id), value]);
}
if (isMethod) {
if (setId) {
return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), _core.types.cloneNode(id), value]);
}
return _core.types.sequenceExpression([this.receiver(member), value, _core.types.callExpression(file.addHelper("readOnlyError"), [_core.types.stringLiteral(`#${name}`)])]);
}
return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), _core.types.cloneNode(id), value]);
},
destructureSet(member) {
const {
classRef,
privateNamesMap,
file
} = this;
const {
name
} = member.node.property.id;
const {
id,
static: isStatic
} = privateNamesMap.get(name);
if (isStatic) {
try {
var helper = file.addHelper("classStaticPrivateFieldDestructureSet");
} catch (_unused) {
throw new Error("Babel can not transpile `[C.#p] = [0]` with @babel/helpers < 7.13.10, \n" + "please update @babel/helpers to the latest version.");
}
return _core.types.memberExpression(_core.types.callExpression(helper, [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id)]), _core.types.identifier("value"));
}
return _core.types.memberExpression(_core.types.callExpression(file.addHelper("classPrivateFieldDestructureSet"), [this.receiver(member), _core.types.cloneNode(id)]), _core.types.identifier("value"));
},
call(member, args) {
this.memoise(member, 1);
return (0, _helperOptimiseCallExpression.default)(this.get(member), this.receiver(member), args, false);
},
optionalCall(member, args) {
this.memoise(member, 1);
return (0, _helperOptimiseCallExpression.default)(this.get(member), this.receiver(member), args, true);
}
};
const privateNameHandlerLoose = {
get(member) {
const {
privateNamesMap,
file
} = this;
const {
object
} = member.node;
const {
name
} = member.node.property.id;
return _core.template.expression`BASE(REF, PROP)[PROP]`({
BASE: file.addHelper("classPrivateFieldLooseBase"),
REF: _core.types.cloneNode(object),
PROP: _core.types.cloneNode(privateNamesMap.get(name).id)
});
},
set() {
throw new Error("private name handler with loose = true don't need set()");
},
boundGet(member) {
return _core.types.callExpression(_core.types.memberExpression(this.get(member), _core.types.identifier("bind")), [_core.types.cloneNode(member.node.object)]);
},
simpleSet(member) {
return this.get(member);
},
destructureSet(member) {
return this.get(member);
},
call(member, args) {
return _core.types.callExpression(this.get(member), args);
},
optionalCall(member, args) {
return _core.types.optionalCallExpression(this.get(member), args, true);
}
};
function transformPrivateNamesUsage(ref, path, privateNamesMap, {
privateFieldsAsProperties,
noDocumentAll,
innerBinding
}, state) {
if (!privateNamesMap.size) return;
const body = path.get("body");
const handler = privateFieldsAsProperties ? privateNameHandlerLoose : privateNameHandlerSpec;
(0, _helperMemberExpressionToFunctions.default)(body, privateNameVisitor, Object.assign({
privateNamesMap,
classRef: ref,
file: state
}, handler, {
noDocumentAll,
innerBinding
}));
body.traverse(privateInVisitor, {
privateNamesMap,
classRef: ref,
file: state,
privateFieldsAsProperties,
innerBinding
});
}
function buildPrivateFieldInitLoose(ref, prop, privateNamesMap) {
const {
id
} = privateNamesMap.get(prop.node.key.id.name);
const value = prop.node.value || prop.scope.buildUndefinedNode();
return _core.template.statement.ast`
Object.defineProperty(${ref}, ${_core.types.cloneNode(id)}, {
// configurable is false by default
// enumerable is false by default
writable: true,
value: ${value}
});
`;
}
function buildPrivateInstanceFieldInitSpec(ref, prop, privateNamesMap, state) {
const {
id
} = privateNamesMap.get(prop.node.key.id.name);
const value = prop.node.value || prop.scope.buildUndefinedNode();
{
if (!state.availableHelper("classPrivateFieldInitSpec")) {
return _core.template.statement.ast`${_core.types.cloneNode(id)}.set(${ref}, {
// configurable is always false for private elements
// enumerable is always false for private elements
writable: true,
value: ${value},
})`;
}
}
const helper = state.addHelper("classPrivateFieldInitSpec");
return _core.template.statement.ast`${helper}(
${_core.types.thisExpression()},
${_core.types.cloneNode(id)},
{
writable: true,
value: ${value}
},
)`;
}
function buildPrivateStaticFieldInitSpec(prop, privateNamesMap) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
id,
getId,
setId,
initAdded
} = privateName;
const isAccessor = getId || setId;
if (!prop.isProperty() && (initAdded || !isAccessor)) return;
if (isAccessor) {
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
initAdded: true
}));
return _core.template.statement.ast`
var ${_core.types.cloneNode(id)} = {
// configurable is false by default
// enumerable is false by default
// writable is false by default
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
}
`;
}
const value = prop.node.value || prop.scope.buildUndefinedNode();
return _core.template.statement.ast`
var ${_core.types.cloneNode(id)} = {
// configurable is false by default
// enumerable is false by default
writable: true,
value: ${value}
};
`;
}
function buildPrivateMethodInitLoose(ref, prop, privateNamesMap) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
methodId,
id,
getId,
setId,
initAdded
} = privateName;
if (initAdded) return;
if (methodId) {
return _core.template.statement.ast`
Object.defineProperty(${ref}, ${id}, {
// configurable is false by default
// enumerable is false by default
// writable is false by default
value: ${methodId.name}
});
`;
}
const isAccessor = getId || setId;
if (isAccessor) {
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
initAdded: true
}));
return _core.template.statement.ast`
Object.defineProperty(${ref}, ${id}, {
// configurable is false by default
// enumerable is false by default
// writable is false by default
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
});
`;
}
}
function buildPrivateInstanceMethodInitSpec(ref, prop, privateNamesMap, state) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
getId,
setId,
initAdded
} = privateName;
if (initAdded) return;
const isAccessor = getId || setId;
if (isAccessor) {
return buildPrivateAccessorInitialization(ref, prop, privateNamesMap, state);
}
return buildPrivateInstanceMethodInitalization(ref, prop, privateNamesMap, state);
}
function buildPrivateAccessorInitialization(ref, prop, privateNamesMap, state) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
id,
getId,
setId
} = privateName;
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
initAdded: true
}));
{
if (!state.availableHelper("classPrivateFieldInitSpec")) {
return _core.template.statement.ast`
${id}.set(${ref}, {
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
});
`;
}
}
const helper = state.addHelper("classPrivateFieldInitSpec");
return _core.template.statement.ast`${helper}(
${_core.types.thisExpression()},
${_core.types.cloneNode(id)},
{
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
},
)`;
}
function buildPrivateInstanceMethodInitalization(ref, prop, privateNamesMap, state) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
id
} = privateName;
{
if (!state.availableHelper("classPrivateMethodInitSpec")) {
return _core.template.statement.ast`${id}.add(${ref})`;
}
}
const helper = state.addHelper("classPrivateMethodInitSpec");
return _core.template.statement.ast`${helper}(
${_core.types.thisExpression()},
${_core.types.cloneNode(id)}
)`;
}
function buildPublicFieldInitLoose(ref, prop) {
const {
key,
computed
} = prop.node;
const value = prop.node.value || prop.scope.buildUndefinedNode();
return _core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.memberExpression(ref, key, computed || _core.types.isLiteral(key)), value));
}
function buildPublicFieldInitSpec(ref, prop, state) {
const {
key,
computed
} = prop.node;
const value = prop.node.value || prop.scope.buildUndefinedNode();
return _core.types.expressionStatement(_core.types.callExpression(state.addHelper("defineProperty"), [ref, computed || _core.types.isLiteral(key) ? key : _core.types.stringLiteral(key.name), value]));
}
function buildPrivateStaticMethodInitLoose(ref, prop, state, privateNamesMap) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
id,
methodId,
getId,
setId,
initAdded
} = privateName;
if (initAdded) return;
const isAccessor = getId || setId;
if (isAccessor) {
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
initAdded: true
}));
return _core.template.statement.ast`
Object.defineProperty(${ref}, ${id}, {
// configurable is false by default
// enumerable is false by default
// writable is false by default
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
})
`;
}
return _core.template.statement.ast`
Object.defineProperty(${ref}, ${id}, {
// configurable is false by default
// enumerable is false by default
// writable is false by default
value: ${methodId.name}
});
`;
}
function buildPrivateMethodDeclaration(prop, privateNamesMap, privateFieldsAsProperties = false) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
const {
id,
methodId,
getId,
setId,
getterDeclared,
setterDeclared,
static: isStatic
} = privateName;
const {
params,
body,
generator,
async
} = prop.node;
const isGetter = getId && !getterDeclared && params.length === 0;
const isSetter = setId && !setterDeclared && params.length > 0;
let declId = methodId;
if (isGetter) {
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
getterDeclared: true
}));
declId = getId;
} else if (isSetter) {
privateNamesMap.set(prop.node.key.id.name, Object.assign({}, privateName, {
setterDeclared: true
}));
declId = setId;
} else if (isStatic && !privateFieldsAsProperties) {
declId = id;
}
return _core.types.functionDeclaration(_core.types.cloneNode(declId), params, body, generator, async);
}
const thisContextVisitor = _core.traverse.visitors.merge([{
ThisExpression(path, state) {
state.needsClassRef = true;
path.replaceWith(_core.types.cloneNode(state.classRef));
},
MetaProperty(path) {
const meta = path.get("meta");
const property = path.get("property");
const {
scope
} = path;
if (meta.isIdentifier({
name: "new"
}) && property.isIdentifier({
name: "target"
})) {
path.replaceWith(scope.buildUndefinedNode());
}
}
}, _helperEnvironmentVisitor.default]);
const innerReferencesVisitor = {
ReferencedIdentifier(path, state) {
if (path.scope.bindingIdentifierEquals(path.node.name, state.innerBinding)) {
state.needsClassRef = true;
path.node.name = state.classRef.name;
}
}
};
function replaceThisContext(path, ref, getSuperRef, file, isStaticBlock, constantSuper, innerBindingRef) {
var _state$classRef;
const state = {
classRef: ref,
needsClassRef: false,
innerBinding: innerBindingRef
};
const replacer = new _helperReplaceSupers.default({
methodPath: path,
constantSuper,
file,
refToPreserve: ref,
getSuperRef,
getObjectRef() {
state.needsClassRef = true;
return _core.types.isStaticBlock != null && _core.types.isStaticBlock(path.node) || path.node.static ? ref : _core.types.memberExpression(ref, _core.types.identifier("prototype"));
}
});
replacer.replace();
if (isStaticBlock || path.isProperty()) {
path.traverse(thisContextVisitor, state);
}
if (innerBindingRef != null && (_state$classRef = state.classRef) != null && _state$classRef.name && state.classRef.name !== (innerBindingRef == null ? void 0 : innerBindingRef.name)) {
path.traverse(innerReferencesVisitor, state);
}
return state.needsClassRef;
}
function isNameOrLength({
key,
computed
}) {
if (key.type === "Identifier") {
return !computed && (key.name === "name" || key.name === "length");
}
if (key.type === "StringLiteral") {
return key.value === "name" || key.value === "length";
}
return false;
}
function buildFieldsInitNodes(ref, superRef, props, privateNamesMap, state, setPublicClassFields, privateFieldsAsProperties, constantSuper, innerBindingRef) {
let needsClassRef = false;
let injectSuperRef;
const staticNodes = [];
const instanceNodes = [];
const pureStaticNodes = [];
const getSuperRef = _core.types.isIdentifier(superRef) ? () => superRef : () => {
var _injectSuperRef;
(_injectSuperRef = injectSuperRef) != null ? _injectSuperRef : injectSuperRef = props[0].scope.generateUidIdentifierBasedOnNode(superRef);
return injectSuperRef;
};
for (const prop of props) {
prop.isClassProperty() && ts.assertFieldTransformed(prop);
const isStatic = !(_core.types.isStaticBlock != null && _core.types.isStaticBlock(prop.node)) && prop.node.static;
const isInstance = !isStatic;
const isPrivate = prop.isPrivate();
const isPublic = !isPrivate;
const isField = prop.isProperty();
const isMethod = !isField;
const isStaticBlock = prop.isStaticBlock == null ? void 0 : prop.isStaticBlock();
if (isStatic || isMethod && isPrivate || isStaticBlock) {
const replaced = replaceThisContext(prop, ref, getSuperRef, state, isStaticBlock, constantSuper, innerBindingRef);
needsClassRef = needsClassRef || replaced;
}
switch (true) {
case isStaticBlock:
{
const blockBody = prop.node.body;
if (blockBody.length === 1 && _core.types.isExpressionStatement(blockBody[0])) {
staticNodes.push(blockBody[0]);
} else {
staticNodes.push(_core.template.statement.ast`(() => { ${blockBody} })()`);
}
break;
}
case isStatic && isPrivate && isField && privateFieldsAsProperties:
needsClassRef = true;
staticNodes.push(buildPrivateFieldInitLoose(_core.types.cloneNode(ref), prop, privateNamesMap));
break;
case isStatic && isPrivate && isField && !privateFieldsAsProperties:
needsClassRef = true;
staticNodes.push(buildPrivateStaticFieldInitSpec(prop, privateNamesMap));
break;
case isStatic && isPublic && isField && setPublicClassFields:
if (!isNameOrLength(prop.node)) {
needsClassRef = true;
staticNodes.push(buildPublicFieldInitLoose(_core.types.cloneNode(ref), prop));
break;
}
case isStatic && isPublic && isField && !setPublicClassFields:
needsClassRef = true;
staticNodes.push(buildPublicFieldInitSpec(_core.types.cloneNode(ref), prop, state));
break;
case isInstance && isPrivate && isField && privateFieldsAsProperties:
instanceNodes.push(buildPrivateFieldInitLoose(_core.types.thisExpression(), prop, privateNamesMap));
break;
case isInstance && isPrivate && isField && !privateFieldsAsProperties:
instanceNodes.push(buildPrivateInstanceFieldInitSpec(_core.types.thisExpression(), prop, privateNamesMap, state));
break;
case isInstance && isPrivate && isMethod && privateFieldsAsProperties:
instanceNodes.unshift(buildPrivateMethodInitLoose(_core.types.thisExpression(), prop, privateNamesMap));
pureStaticNodes.push(buildPrivateMethodDeclaration(prop, privateNamesMap, privateFieldsAsProperties));
break;
case isInstance && isPrivate && isMethod && !privateFieldsAsProperties:
instanceNodes.unshift(buildPrivateInstanceMethodInitSpec(_core.types.thisExpression(), prop, privateNamesMap, state));
pureStaticNodes.push(buildPrivateMethodDeclaration(prop, privateNamesMap, privateFieldsAsProperties));
break;
case isStatic && isPrivate && isMethod && !privateFieldsAsProperties:
needsClassRef = true;
staticNodes.unshift(buildPrivateStaticFieldInitSpec(prop, privateNamesMap));
pureStaticNodes.push(buildPrivateMethodDeclaration(prop, privateNamesMap, privateFieldsAsProperties));
break;
case isStatic && isPrivate && isMethod && privateFieldsAsProperties:
needsClassRef = true;
staticNodes.unshift(buildPrivateStaticMethodInitLoose(_core.types.cloneNode(ref), prop, state, privateNamesMap));
pureStaticNodes.push(buildPrivateMethodDeclaration(prop, privateNamesMap, privateFieldsAsProperties));
break;
case isInstance && isPublic && isField && setPublicClassFields:
instanceNodes.push(buildPublicFieldInitLoose(_core.types.thisExpression(), prop));
break;
case isInstance && isPublic && isField && !setPublicClassFields:
instanceNodes.push(buildPublicFieldInitSpec(_core.types.thisExpression(), prop, state));
break;
default:
throw new Error("Unreachable.");
}
}
return {
staticNodes: staticNodes.filter(Boolean),
instanceNodes: instanceNodes.filter(Boolean),
pureStaticNodes: pureStaticNodes.filter(Boolean),
wrapClass(path) {
for (const prop of props) {
prop.remove();
}
if (injectSuperRef) {
path.scope.push({
id: _core.types.cloneNode(injectSuperRef)
});
path.set("superClass", _core.types.assignmentExpression("=", injectSuperRef, path.node.superClass));
}
if (!needsClassRef) return path;
if (path.isClassExpression()) {
path.scope.push({
id: ref
});
path.replaceWith(_core.types.assignmentExpression("=", _core.types.cloneNode(ref), path.node));
} else if (!path.node.id) {
path.node.id = ref;
}
return path;
}
};
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "FEATURES", {
enumerable: true,
get: function () {
return _features.FEATURES;
}
});
exports.createClassFeaturePlugin = createClassFeaturePlugin;
Object.defineProperty(exports, "enableFeature", {
enumerable: true,
get: function () {
return _features.enableFeature;
}
});
Object.defineProperty(exports, "injectInitialization", {
enumerable: true,
get: function () {
return _misc.injectInitialization;
}
});
var _core = require("@babel/core");
var _helperFunctionName = require("@babel/helper-function-name");
var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
var _fields = require("./fields");
var _decorators = require("./decorators");
var _misc = require("./misc");
var _features = require("./features");
var _typescript = require("./typescript");
const version = "7.18.6".split(".").reduce((v, x) => v * 1e5 + +x, 0);
const versionKey = "@babel/plugin-class-features/version";
function createClassFeaturePlugin({
name,
feature,
loose,
manipulateOptions,
api = {
assumption: () => void 0
},
inherits
}) {
const setPublicClassFields = api.assumption("setPublicClassFields");
const privateFieldsAsProperties = api.assumption("privateFieldsAsProperties");
const constantSuper = api.assumption("constantSuper");
const noDocumentAll = api.assumption("noDocumentAll");
if (loose === true) {
const explicit = [];
if (setPublicClassFields !== undefined) {
explicit.push(`"setPublicClassFields"`);
}
if (privateFieldsAsProperties !== undefined) {
explicit.push(`"privateFieldsAsProperties"`);
}
if (explicit.length !== 0) {
console.warn(`[${name}]: You are using the "loose: true" option and you are` + ` explicitly setting a value for the ${explicit.join(" and ")}` + ` assumption${explicit.length > 1 ? "s" : ""}. The "loose" option` + ` can cause incompatibilities with the other class features` + ` plugins, so it's recommended that you replace it with the` + ` following top-level option:\n` + `\t"assumptions": {\n` + `\t\t"setPublicClassFields": true,\n` + `\t\t"privateFieldsAsProperties": true\n` + `\t}`);
}
}
return {
name,
manipulateOptions,
inherits,
pre(file) {
(0, _features.enableFeature)(file, feature, loose);
if (!file.get(versionKey) || file.get(versionKey) < version) {
file.set(versionKey, version);
}
},
visitor: {
Class(path, {
file
}) {
if (file.get(versionKey) !== version) return;
if (!(0, _features.shouldTransform)(path, file)) return;
if (path.isClassDeclaration()) (0, _typescript.assertFieldTransformed)(path);
const loose = (0, _features.isLoose)(file, feature);
let constructor;
const isDecorated = (0, _decorators.hasDecorators)(path.node);
const props = [];
const elements = [];
const computedPaths = [];
const privateNames = new Set();
const body = path.get("body");
for (const path of body.get("body")) {
if ((path.isClassProperty() || path.isClassMethod()) && path.node.computed) {
computedPaths.push(path);
}
if (path.isPrivate()) {
const {
name
} = path.node.key.id;
const getName = `get ${name}`;
const setName = `set ${name}`;
if (path.isClassPrivateMethod()) {
if (path.node.kind === "get") {
if (privateNames.has(getName) || privateNames.has(name) && !privateNames.has(setName)) {
throw path.buildCodeFrameError("Duplicate private field");
}
privateNames.add(getName).add(name);
} else if (path.node.kind === "set") {
if (privateNames.has(setName) || privateNames.has(name) && !privateNames.has(getName)) {
throw path.buildCodeFrameError("Duplicate private field");
}
privateNames.add(setName).add(name);
}
} else {
if (privateNames.has(name) && !privateNames.has(getName) && !privateNames.has(setName) || privateNames.has(name) && (privateNames.has(getName) || privateNames.has(setName))) {
throw path.buildCodeFrameError("Duplicate private field");
}
privateNames.add(name);
}
}
if (path.isClassMethod({
kind: "constructor"
})) {
constructor = path;
} else {
elements.push(path);
if (path.isProperty() || path.isPrivate() || path.isStaticBlock != null && path.isStaticBlock()) {
props.push(path);
}
}
}
{
if (!props.length && !isDecorated) return;
}
const innerBinding = path.node.id;
let ref;
if (!innerBinding || path.isClassExpression()) {
(0, _helperFunctionName.default)(path);
ref = path.scope.generateUidIdentifier("class");
} else {
ref = _core.types.cloneNode(path.node.id);
}
const privateNamesMap = (0, _fields.buildPrivateNamesMap)(props);
const privateNamesNodes = (0, _fields.buildPrivateNamesNodes)(privateNamesMap, privateFieldsAsProperties != null ? privateFieldsAsProperties : loose, file);
(0, _fields.transformPrivateNamesUsage)(ref, path, privateNamesMap, {
privateFieldsAsProperties: privateFieldsAsProperties != null ? privateFieldsAsProperties : loose,
noDocumentAll,
innerBinding
}, file);
let keysNodes, staticNodes, instanceNodes, pureStaticNodes, wrapClass;
{
if (isDecorated) {
staticNodes = pureStaticNodes = keysNodes = [];
({
instanceNodes,
wrapClass
} = (0, _decorators.buildDecoratedClass)(ref, path, elements, file));
} else {
keysNodes = (0, _misc.extractComputedKeys)(path, computedPaths, file);
({
staticNodes,
pureStaticNodes,
instanceNodes,
wrapClass
} = (0, _fields.buildFieldsInitNodes)(ref, path.node.superClass, props, privateNamesMap, file, setPublicClassFields != null ? setPublicClassFields : loose, privateFieldsAsProperties != null ? privateFieldsAsProperties : loose, constantSuper != null ? constantSuper : loose, innerBinding));
}
}
if (instanceNodes.length > 0) {
(0, _misc.injectInitialization)(path, constructor, instanceNodes, (referenceVisitor, state) => {
{
if (isDecorated) return;
}
for (const prop of props) {
if (_core.types.isStaticBlock != null && _core.types.isStaticBlock(prop.node) || prop.node.static) continue;
prop.traverse(referenceVisitor, state);
}
});
}
const wrappedPath = wrapClass(path);
wrappedPath.insertBefore([...privateNamesNodes, ...keysNodes]);
if (staticNodes.length > 0) {
wrappedPath.insertAfter(staticNodes);
}
if (pureStaticNodes.length > 0) {
wrappedPath.find(parent => parent.isStatement() || parent.isDeclaration()).insertAfter(pureStaticNodes);
}
},
ExportDefaultDeclaration(path, {
file
}) {
{
if (file.get(versionKey) !== version) return;
const decl = path.get("declaration");
if (decl.isClassDeclaration() && (0, _decorators.hasDecorators)(decl.node)) {
if (decl.node.id) {
(0, _helperSplitExportDeclaration.default)(path);
} else {
decl.node.type = "ClassExpression";
}
}
}
}
}
};
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extractComputedKeys = extractComputedKeys;
exports.injectInitialization = injectInitialization;
var _core = require("@babel/core");
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
const findBareSupers = _core.traverse.visitors.merge([{
Super(path) {
const {
node,
parentPath
} = path;
if (parentPath.isCallExpression({
callee: node
})) {
this.push(parentPath);
}
}
}, _helperEnvironmentVisitor.default]);
const referenceVisitor = {
"TSTypeAnnotation|TypeAnnotation"(path) {
path.skip();
},
ReferencedIdentifier(path, {
scope
}) {
if (scope.hasOwnBinding(path.node.name)) {
scope.rename(path.node.name);
path.skip();
}
}
};
function handleClassTDZ(path, state) {
if (state.classBinding && state.classBinding === path.scope.getBinding(path.node.name)) {
const classNameTDZError = state.file.addHelper("classNameTDZError");
const throwNode = _core.types.callExpression(classNameTDZError, [_core.types.stringLiteral(path.node.name)]);
path.replaceWith(_core.types.sequenceExpression([throwNode, path.node]));
path.skip();
}
}
const classFieldDefinitionEvaluationTDZVisitor = {
ReferencedIdentifier: handleClassTDZ
};
function injectInitialization(path, constructor, nodes, renamer) {
if (!nodes.length) return;
const isDerived = !!path.node.superClass;
if (!constructor) {
const newConstructor = _core.types.classMethod("constructor", _core.types.identifier("constructor"), [], _core.types.blockStatement([]));
if (isDerived) {
newConstructor.params = [_core.types.restElement(_core.types.identifier("args"))];
newConstructor.body.body.push(_core.template.statement.ast`super(...args)`);
}
[constructor] = path.get("body").unshiftContainer("body", newConstructor);
}
if (renamer) {
renamer(referenceVisitor, {
scope: constructor.scope
});
}
if (isDerived) {
const bareSupers = [];
constructor.traverse(findBareSupers, bareSupers);
let isFirst = true;
for (const bareSuper of bareSupers) {
if (isFirst) {
bareSuper.insertAfter(nodes);
isFirst = false;
} else {
bareSuper.insertAfter(nodes.map(n => _core.types.cloneNode(n)));
}
}
} else {
constructor.get("body").unshiftContainer("body", nodes);
}
}
function extractComputedKeys(path, computedPaths, file) {
const declarations = [];
const state = {
classBinding: path.node.id && path.scope.getBinding(path.node.id.name),
file
};
for (const computedPath of computedPaths) {
const computedKey = computedPath.get("key");
if (computedKey.isReferencedIdentifier()) {
handleClassTDZ(computedKey, state);
} else {
computedKey.traverse(classFieldDefinitionEvaluationTDZVisitor, state);
}
const computedNode = computedPath.node;
if (!computedKey.isConstantExpression()) {
const ident = path.scope.generateUidIdentifierBasedOnNode(computedNode.key);
path.scope.push({
id: ident,
kind: "let"
});
declarations.push(_core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.cloneNode(ident), computedNode.key)));
computedNode.key = _core.types.cloneNode(ident);
}
}
return declarations;
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.assertFieldTransformed = assertFieldTransformed;
function assertFieldTransformed(path) {
if (path.node.declare) {
throw path.buildCodeFrameError(`TypeScript 'declare' fields must first be transformed by ` + `@babel/plugin-transform-typescript.\n` + `If you have already enabled that plugin (or '@babel/preset-typescript'), make sure ` + `that it runs before any plugin related to additional class features:\n` + ` - @babel/plugin-proposal-class-properties\n` + ` - @babel/plugin-proposal-private-methods\n` + ` - @babel/plugin-proposal-decorators`);
}
}
\ No newline at end of file
{
"name": "@babel/helper-create-class-features-plugin",
"version": "7.18.6",
"author": "The Babel Team (https://babel.dev/team)",
"license": "MIT",
"description": "Compile class public and private fields, private methods and decorators to ES6",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-helper-create-class-features-plugin"
},
"main": "./lib/index.js",
"publishConfig": {
"access": "public"
},
"keywords": [
"babel",
"babel-plugin"
],
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-environment-visitor": "^7.18.6",
"@babel/helper-function-name": "^7.18.6",
"@babel/helper-member-expression-to-functions": "^7.18.6",
"@babel/helper-optimise-call-expression": "^7.18.6",
"@babel/helper-replace-supers": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
},
"devDependencies": {
"@babel/core": "^7.18.6",
"@babel/helper-plugin-test-runner": "^7.18.6",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/preset-env": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"type": "commonjs"
}
\ No newline at end of file
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# @babel/helper-create-regexp-features-plugin
> Compile ESNext Regular Expressions to ES5
See our website [@babel/helper-create-regexp-features-plugin](https://babeljs.io/docs/en/babel-helper-create-regexp-features-plugin) for more information.
## Install
Using npm:
```sh
npm install --save @babel/helper-create-regexp-features-plugin
```
or using yarn:
```sh
yarn add @babel/helper-create-regexp-features-plugin
```
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FEATURES = void 0;
exports.enableFeature = enableFeature;
exports.featuresKey = void 0;
exports.hasFeature = hasFeature;
exports.runtimeKey = void 0;
const FEATURES = Object.freeze({
unicodeFlag: 1 << 0,
dotAllFlag: 1 << 1,
unicodePropertyEscape: 1 << 2,
namedCaptureGroups: 1 << 3,
unicodeSetsFlag_syntax: 1 << 4,
unicodeSetsFlag: 1 << 5
});
exports.FEATURES = FEATURES;
const featuresKey = "@babel/plugin-regexp-features/featuresKey";
exports.featuresKey = featuresKey;
const runtimeKey = "@babel/plugin-regexp-features/runtimeKey";
exports.runtimeKey = runtimeKey;
function enableFeature(features, feature) {
return features | feature;
}
function hasFeature(features, feature) {
return !!(features & feature);
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createRegExpFeaturePlugin = createRegExpFeaturePlugin;
var _regexpuCore = require("regexpu-core");
var _features = require("./features");
var _util = require("./util");
var _core = require("@babel/core");
var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
const version = "7.18.6".split(".").reduce((v, x) => v * 1e5 + +x, 0);
const versionKey = "@babel/plugin-regexp-features/version";
function createRegExpFeaturePlugin({
name,
feature,
options = {},
manipulateOptions = () => {}
}) {
return {
name,
manipulateOptions,
pre() {
var _file$get;
const {
file
} = this;
const features = (_file$get = file.get(_features.featuresKey)) != null ? _file$get : 0;
let newFeatures = (0, _features.enableFeature)(features, _features.FEATURES[feature]);
const {
useUnicodeFlag,
runtime = true
} = options;
if (useUnicodeFlag === false) {
newFeatures = (0, _features.enableFeature)(newFeatures, _features.FEATURES.unicodeFlag);
}
if (newFeatures !== features) {
file.set(_features.featuresKey, newFeatures);
}
if (!runtime) {
file.set(_features.runtimeKey, false);
}
if (!file.has(versionKey) || file.get(versionKey) < version) {
file.set(versionKey, version);
}
},
visitor: {
RegExpLiteral(path) {
var _file$get2;
const {
node
} = path;
const {
file
} = this;
const features = file.get(_features.featuresKey);
const runtime = (_file$get2 = file.get(_features.runtimeKey)) != null ? _file$get2 : true;
const regexpuOptions = (0, _util.generateRegexpuOptions)(features);
if ((0, _util.canSkipRegexpu)(node, regexpuOptions)) return;
const namedCaptureGroups = {};
if (regexpuOptions.namedGroups === "transform") {
regexpuOptions.onNamedGroup = (name, index) => {
namedCaptureGroups[name] = index;
};
}
node.pattern = _regexpuCore(node.pattern, node.flags, regexpuOptions);
if (regexpuOptions.namedGroups === "transform" && Object.keys(namedCaptureGroups).length > 0 && runtime && !isRegExpTest(path)) {
const call = _core.types.callExpression(this.addHelper("wrapRegExp"), [node, _core.types.valueToNode(namedCaptureGroups)]);
(0, _helperAnnotateAsPure.default)(call);
path.replaceWith(call);
}
node.flags = (0, _util.transformFlags)(regexpuOptions, node.flags);
}
}
};
}
function isRegExpTest(path) {
return path.parentPath.isMemberExpression({
object: path.node,
computed: false
}) && path.parentPath.get("property").isIdentifier({
name: "test"
});
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canSkipRegexpu = canSkipRegexpu;
exports.generateRegexpuOptions = generateRegexpuOptions;
exports.transformFlags = transformFlags;
var _features = require("./features");
function generateRegexpuOptions(toTransform) {
const feat = (name, ok = "transform") => {
return (0, _features.hasFeature)(toTransform, _features.FEATURES[name]) ? ok : false;
};
return {
unicodeFlag: feat("unicodeFlag"),
unicodeSetsFlag: feat("unicodeSetsFlag") || feat("unicodeSetsFlag_syntax", "parse"),
dotAllFlag: feat("dotAllFlag"),
unicodePropertyEscapes: feat("unicodePropertyEscape"),
namedGroups: feat("namedCaptureGroups"),
onNamedGroup: () => {}
};
}
function canSkipRegexpu(node, options) {
const {
flags,
pattern
} = node;
if (flags.includes("v")) {
if (options.unicodeSetsFlag === "transform") return false;
}
if (flags.includes("u")) {
if (options.unicodeFlag === "transform") return false;
if (options.unicodePropertyEscapes === "transform" && /\\[pP]{/.test(pattern)) {
return false;
}
}
if (flags.includes("s")) {
if (options.dotAllFlag === "transform") return false;
}
if (options.namedGroups === "transform" && /\(\?<(?![=!])/.test(pattern)) {
return false;
}
return true;
}
function transformFlags(regexpuOptions, flags) {
if (regexpuOptions.unicodeSetsFlag === "transform") {
flags = flags.replace("v", "u");
}
if (regexpuOptions.unicodeFlag === "transform") {
flags = flags.replace("u", "");
}
if (regexpuOptions.dotAllFlag === "transform") {
flags = flags.replace("s", "");
}
return flags;
}
\ No newline at end of file
{
"name": "@babel/helper-create-regexp-features-plugin",
"version": "7.18.6",
"author": "The Babel Team (https://babel.dev/team)",
"license": "MIT",
"description": "Compile ESNext Regular Expressions to ES5",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-helper-create-regexp-features-plugin"
},
"main": "./lib/index.js",
"publishConfig": {
"access": "public"
},
"keywords": [
"babel",
"babel-plugin"
],
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"regexpu-core": "^5.1.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
},
"devDependencies": {
"@babel/core": "^7.18.6",
"@babel/helper-plugin-test-runner": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"type": "commonjs"
}
\ No newline at end of file
MIT License
Copyright (c) 2014-present Nicolò Ribaudo and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# @babel/helper-define-polyfill-provider
## Install
Using npm:
```sh
npm install --save-dev @babel/helper-define-polyfill-provider
```
or using yarn:
```sh
yarn add @babel/helper-define-polyfill-provider --dev
```
import { declare } from '@babel/helper-plugin-utils';
import _getTargets, { prettifyTargets, getInclusionReasons, isRequired } from '@babel/helper-compilation-targets';
import * as babel from '@babel/core';
const {
types: t$1,
template
} = babel.default || babel;
function intersection(a, b) {
const result = new Set();
a.forEach(v => b.has(v) && result.add(v));
return result;
}
function has$1(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
function resolveId(path) {
if (path.isIdentifier() && !path.scope.hasBinding(path.node.name,
/* noGlobals */
true)) {
return path.node.name;
}
const {
deopt
} = path.evaluate();
if (deopt && deopt.isIdentifier()) {
return deopt.node.name;
}
}
function resolveKey(path, computed = false) {
const {
node,
parent,
scope
} = path;
if (path.isStringLiteral()) return node.value;
const {
name
} = node;
const isIdentifier = path.isIdentifier();
if (isIdentifier && !(computed || parent.computed)) return name;
if (computed && path.isMemberExpression() && path.get("object").isIdentifier({
name: "Symbol"
}) && !scope.hasBinding("Symbol",
/* noGlobals */
true)) {
const sym = resolveKey(path.get("property"), path.node.computed);
if (sym) return "Symbol." + sym;
}
if (!isIdentifier || scope.hasBinding(name,
/* noGlobals */
true)) {
const {
value
} = path.evaluate();
if (typeof value === "string") return value;
}
}
function resolveSource(obj) {
if (obj.isMemberExpression() && obj.get("property").isIdentifier({
name: "prototype"
})) {
const id = resolveId(obj.get("object"));
if (id) {
return {
id,
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
const id = resolveId(obj);
if (id) {
return {
id,
placement: "static"
};
}
const {
value
} = obj.evaluate();
if (value !== undefined) {
return {
id: getType(value),
placement: "prototype"
};
} else if (obj.isRegExpLiteral()) {
return {
id: "RegExp",
placement: "prototype"
};
} else if (obj.isFunction()) {
return {
id: "Function",
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
function getImportSource({
node
}) {
if (node.specifiers.length === 0) return node.source.value;
}
function getRequireSource({
node
}) {
if (!t$1.isExpressionStatement(node)) return;
const {
expression
} = node;
const isRequire = t$1.isCallExpression(expression) && t$1.isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t$1.isStringLiteral(expression.arguments[0]);
if (isRequire) return expression.arguments[0].value;
}
function hoist(node) {
node._blockHoist = 3;
return node;
}
function createUtilsGetter(cache) {
return path => {
const prog = path.findParent(p => p.isProgram());
return {
injectGlobalImport(url) {
cache.storeAnonymous(prog, url, (isScript, source) => {
return isScript ? template.statement.ast`require(${source})` : t$1.importDeclaration([], source);
});
},
injectNamedImport(url, name, hint = name) {
return cache.storeNamed(prog, url, name, (isScript, source, name) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`
var ${id} = require(${source}).${name}
`) : t$1.importDeclaration([t$1.importSpecifier(id, name)], source),
name: id.name
};
});
},
injectDefaultImport(url, hint = url) {
return cache.storeNamed(prog, url, "default", (isScript, source) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`var ${id} = require(${source})`) : t$1.importDeclaration([t$1.importDefaultSpecifier(id)], source),
name: id.name
};
});
}
};
};
}
const {
types: t
} = babel.default || babel;
class ImportsCache {
constructor(resolver) {
this._imports = new WeakMap();
this._anonymousImports = new WeakMap();
this._lastImports = new WeakMap();
this._resolver = resolver;
}
storeAnonymous(programPath, url, // eslint-disable-next-line no-undef
getVal) {
const key = this._normalizeKey(programPath, url);
const imports = this._ensure(this._anonymousImports, programPath, Set);
if (imports.has(key)) return;
const node = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)));
imports.add(key);
this._injectImport(programPath, node);
}
storeNamed(programPath, url, name, getVal) {
const key = this._normalizeKey(programPath, url, name);
const imports = this._ensure(this._imports, programPath, Map);
if (!imports.has(key)) {
const {
node,
name: id
} = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)), t.identifier(name));
imports.set(key, id);
this._injectImport(programPath, node);
}
return t.identifier(imports.get(key));
}
_injectImport(programPath, node) {
let lastImport = this._lastImports.get(programPath);
if (lastImport && lastImport.node && // Sometimes the AST is modified and the "last import"
// we have has been replaced
lastImport.parent === programPath.node && lastImport.container === programPath.node.body) {
lastImport = lastImport.insertAfter(node);
} else {
lastImport = programPath.unshiftContainer("body", node);
}
lastImport = lastImport[lastImport.length - 1];
this._lastImports.set(programPath, lastImport);
/*
let lastImport;
programPath.get("body").forEach(path => {
if (path.isImportDeclaration()) lastImport = path;
if (
path.isExpressionStatement() &&
isRequireCall(path.get("expression"))
) {
lastImport = path;
}
if (
path.isVariableDeclaration() &&
path.get("declarations").length === 1 &&
(isRequireCall(path.get("declarations.0.init")) ||
(path.get("declarations.0.init").isMemberExpression() &&
isRequireCall(path.get("declarations.0.init.object"))))
) {
lastImport = path;
}
});*/
}
_ensure(map, programPath, Collection) {
let collection = map.get(programPath);
if (!collection) {
collection = new Collection();
map.set(programPath, collection);
}
return collection;
}
_normalizeKey(programPath, url, name = "") {
const {
sourceType
} = programPath.node; // If we rely on the imported binding (the "name" parameter), we also need to cache
// based on the sourceType. This is because the module transforms change the names
// of the import variables.
return `${name && sourceType}::${url}::${name}`;
}
}
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
function stringifyTargetsMultiline(targets) {
return JSON.stringify(prettifyTargets(targets), null, 2);
}
function patternToRegExp(pattern) {
if (pattern instanceof RegExp) return pattern;
try {
return new RegExp(`^${pattern}$`);
} catch {
return null;
}
}
function buildUnusedError(label, unused) {
if (!unused.length) return "";
return ` - The following "${label}" patterns didn't match any polyfill:\n` + unused.map(original => ` ${String(original)}\n`).join("");
}
function buldDuplicatesError(duplicates) {
if (!duplicates.size) return "";
return ` - The following polyfills were matched both by "include" and "exclude" patterns:\n` + Array.from(duplicates, name => ` ${name}\n`).join("");
}
function validateIncludeExclude(provider, polyfills, includePatterns, excludePatterns) {
let current;
const filter = pattern => {
const regexp = patternToRegExp(pattern);
if (!regexp) return false;
let matched = false;
for (const polyfill of polyfills) {
if (regexp.test(polyfill)) {
matched = true;
current.add(polyfill);
}
}
return !matched;
}; // prettier-ignore
const include = current = new Set();
const unusedInclude = Array.from(includePatterns).filter(filter); // prettier-ignore
const exclude = current = new Set();
const unusedExclude = Array.from(excludePatterns).filter(filter);
const duplicates = intersection(include, exclude);
if (duplicates.size > 0 || unusedInclude.length > 0 || unusedExclude.length > 0) {
throw new Error(`Error while validating the "${provider}" provider options:\n` + buildUnusedError("include", unusedInclude) + buildUnusedError("exclude", unusedExclude) + buldDuplicatesError(duplicates));
}
return {
include,
exclude
};
}
function applyMissingDependenciesDefaults(options, babelApi) {
const {
missingDependencies = {}
} = options;
if (missingDependencies === false) return false;
const caller = babelApi.caller(caller => caller == null ? void 0 : caller.name);
const {
log = "deferred",
inject = caller === "rollup-plugin-babel" ? "throw" : "import",
all = false
} = missingDependencies;
return {
log,
inject,
all
};
}
var usage = (callProvider => {
function property(object, key, placement, path) {
return callProvider({
kind: "property",
object,
key,
placement
}, path);
}
return {
// Symbol(), new Promise
ReferencedIdentifier(path) {
const {
node: {
name
},
scope
} = path;
if (scope.getBindingIdentifier(name)) return;
callProvider({
kind: "global",
name
}, path);
},
MemberExpression(path) {
const key = resolveKey(path.get("property"), path.node.computed);
if (!key || key === "prototype") return;
const object = path.get("object");
const binding = object.scope.getBinding(object.node.name);
if (binding && binding.path.isImportNamespaceSpecifier()) return;
const source = resolveSource(object);
return property(source.id, key, source.placement, path);
},
ObjectPattern(path) {
const {
parentPath,
parent
} = path;
let obj; // const { keys, values } = Object
if (parentPath.isVariableDeclarator()) {
obj = parentPath.get("init"); // ({ keys, values } = Object)
} else if (parentPath.isAssignmentExpression()) {
obj = parentPath.get("right"); // !function ({ keys, values }) {...} (Object)
// resolution does not work after properties transform :-(
} else if (parentPath.isFunction()) {
const grand = parentPath.parentPath;
if (grand.isCallExpression() || grand.isNewExpression()) {
if (grand.node.callee === parent) {
obj = grand.get("arguments")[path.key];
}
}
}
let id = null;
let placement = null;
if (obj) ({
id,
placement
} = resolveSource(obj));
for (const prop of path.get("properties")) {
if (prop.isObjectProperty()) {
const key = resolveKey(prop.get("key"));
if (key) property(id, key, placement, prop);
}
}
},
BinaryExpression(path) {
if (path.node.operator !== "in") return;
const source = resolveSource(path.get("right"));
const key = resolveKey(path.get("left"), true);
if (!key) return;
callProvider({
kind: "in",
object: source.id,
key,
placement: source.placement
}, path);
}
};
});
var entry = (callProvider => ({
ImportDeclaration(path) {
const source = getImportSource(path);
if (!source) return;
callProvider({
kind: "import",
source
}, path);
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = getRequireSource(bodyPath);
if (!source) return;
callProvider({
kind: "import",
source
}, bodyPath);
});
}
}));
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
throw new Error(`"absoluteImports" is not supported in bundles prepared for the browser.`);
} // eslint-disable-next-line no-unused-vars
function has(basedir, name) {
return true;
} // eslint-disable-next-line no-unused-vars
function logMissing(missingDeps) {} // eslint-disable-next-line no-unused-vars
function laterLogMissing(missingDeps) {}
const PossibleGlobalObjects = new Set(["global", "globalThis", "self", "window"]);
function createMetaResolver(polyfills) {
const {
static: staticP,
instance: instanceP,
global: globalP
} = polyfills;
return meta => {
if (meta.kind === "global" && globalP && has$1(globalP, meta.name)) {
return {
kind: "global",
desc: globalP[meta.name],
name: meta.name
};
}
if (meta.kind === "property" || meta.kind === "in") {
const {
placement,
object,
key
} = meta;
if (object && placement === "static") {
if (globalP && PossibleGlobalObjects.has(object) && has$1(globalP, key)) {
return {
kind: "global",
desc: globalP[key],
name: key
};
}
if (staticP && has$1(staticP, object) && has$1(staticP[object], key)) {
return {
kind: "static",
desc: staticP[object][key],
name: `${object}$${key}`
};
}
}
if (instanceP && has$1(instanceP, key)) {
return {
kind: "instance",
desc: instanceP[key],
name: `${key}`
};
}
}
};
}
const getTargets = _getTargets.default || _getTargets;
function resolveOptions(options, babelApi) {
const {
method,
targets: targetsOption,
ignoreBrowserslistConfig,
configPath,
debug,
shouldInjectPolyfill,
absoluteImports,
...providerOptions
} = options;
let methodName;
if (method === "usage-global") methodName = "usageGlobal";else if (method === "entry-global") methodName = "entryGlobal";else if (method === "usage-pure") methodName = "usagePure";else if (typeof method !== "string") {
throw new Error(".method must be a string");
} else {
throw new Error(`.method must be one of "entry-global", "usage-global"` + ` or "usage-pure" (received ${JSON.stringify(method)})`);
}
if (typeof shouldInjectPolyfill === "function") {
if (options.include || options.exclude) {
throw new Error(`.include and .exclude are not supported when using the` + ` .shouldInjectPolyfill function.`);
}
} else if (shouldInjectPolyfill != null) {
throw new Error(`.shouldInjectPolyfill must be a function, or undefined` + ` (received ${JSON.stringify(shouldInjectPolyfill)})`);
}
if (absoluteImports != null && typeof absoluteImports !== "boolean" && typeof absoluteImports !== "string") {
throw new Error(`.absoluteImports must be a boolean, a string, or undefined` + ` (received ${JSON.stringify(absoluteImports)})`);
}
let targets;
if ( // If any browserslist-related option is specified, fallback to the old
// behavior of not using the targets specified in the top-level options.
targetsOption || configPath || ignoreBrowserslistConfig) {
const targetsObj = typeof targetsOption === "string" || Array.isArray(targetsOption) ? {
browsers: targetsOption
} : targetsOption;
targets = getTargets(targetsObj, {
ignoreBrowserslistConfig,
configPath
});
} else {
targets = babelApi.targets();
}
return {
method,
methodName,
targets,
absoluteImports: absoluteImports != null ? absoluteImports : false,
shouldInjectPolyfill,
debug: !!debug,
providerOptions: providerOptions
};
}
function instantiateProvider(factory, options, missingDependencies, dirname, debugLog, babelApi) {
const {
method,
methodName,
targets,
debug,
shouldInjectPolyfill,
providerOptions,
absoluteImports
} = resolveOptions(options, babelApi);
const getUtils = createUtilsGetter(new ImportsCache(moduleName => resolve(dirname, moduleName, absoluteImports))); // eslint-disable-next-line prefer-const
let include, exclude;
let polyfillsSupport;
let polyfillsNames;
let filterPolyfills;
const depsCache = new Map();
const api = {
babel: babelApi,
getUtils,
method: options.method,
targets,
createMetaResolver,
shouldInjectPolyfill(name) {
if (polyfillsNames === undefined) {
throw new Error(`Internal error in the ${factory.name} provider: ` + `shouldInjectPolyfill() can't be called during initialization.`);
}
if (!polyfillsNames.has(name)) {
console.warn(`Internal error in the ${provider.name} provider: ` + `unknown polyfill "${name}".`);
}
if (filterPolyfills && !filterPolyfills(name)) return false;
let shouldInject = isRequired(name, targets, {
compatData: polyfillsSupport,
includes: include,
excludes: exclude
});
if (shouldInjectPolyfill) {
shouldInject = shouldInjectPolyfill(name, shouldInject);
if (typeof shouldInject !== "boolean") {
throw new Error(`.shouldInjectPolyfill must return a boolean.`);
}
}
return shouldInject;
},
debug(name) {
debugLog().found = true;
if (!debug || !name) return;
if (debugLog().polyfills.has(provider.name)) return;
debugLog().polyfills.set(name, polyfillsSupport && name && polyfillsSupport[name]);
},
assertDependency(name, version = "*") {
if (missingDependencies === false) return;
if (absoluteImports) {
// If absoluteImports is not false, we will try resolving
// the dependency and throw if it's not possible. We can
// skip the check here.
return;
}
const dep = version === "*" ? name : `${name}@^${version}`;
const found = missingDependencies.all ? false : mapGetOr(depsCache, `${name} :: ${dirname}`, () => has());
if (!found) {
debugLog().missingDeps.add(dep);
}
}
};
const provider = factory(api, providerOptions, dirname);
if (typeof provider[methodName] !== "function") {
throw new Error(`The "${provider.name || factory.name}" provider doesn't ` + `support the "${method}" polyfilling method.`);
}
if (Array.isArray(provider.polyfills)) {
polyfillsNames = new Set(provider.polyfills);
filterPolyfills = provider.filterPolyfills;
} else if (provider.polyfills) {
polyfillsNames = new Set(Object.keys(provider.polyfills));
polyfillsSupport = provider.polyfills;
filterPolyfills = provider.filterPolyfills;
} else {
polyfillsNames = new Set();
}
({
include,
exclude
} = validateIncludeExclude(provider.name || factory.name, polyfillsNames, providerOptions.include || [], providerOptions.exclude || []));
return {
debug,
method,
targets,
provider,
callProvider(payload, path) {
const utils = getUtils(path); // $FlowIgnore
provider[methodName](payload, utils, path);
}
};
}
function definePolyfillProvider(factory) {
return declare((babelApi, options, dirname) => {
babelApi.assertVersion(7);
const {
traverse
} = babelApi;
let debugLog;
const missingDependencies = applyMissingDependenciesDefaults(options, babelApi);
const {
debug,
method,
targets,
provider,
callProvider
} = instantiateProvider(factory, options, missingDependencies, dirname, () => debugLog, babelApi);
const createVisitor = method === "entry-global" ? entry : usage;
const visitor = provider.visitor ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor]) : createVisitor(callProvider);
if (debug && debug !== presetEnvSilentDebugHeader) {
console.log(`${provider.name}: \`DEBUG\` option`);
console.log(`\nUsing targets: ${stringifyTargetsMultiline(targets)}`);
console.log(`\nUsing polyfills with \`${method}\` method:`);
}
return {
name: "inject-polyfills",
visitor,
pre() {
var _provider$pre;
debugLog = {
polyfills: new Map(),
found: false,
providers: new Set(),
missingDeps: new Set()
}; // $FlowIgnore - Flow doesn't support optional calls
(_provider$pre = provider.pre) == null ? void 0 : _provider$pre.apply(this, arguments);
},
post() {
var _provider$post;
// $FlowIgnore - Flow doesn't support optional calls
(_provider$post = provider.post) == null ? void 0 : _provider$post.apply(this, arguments);
if (missingDependencies !== false) {
if (missingDependencies.log === "per-file") {
logMissing(debugLog.missingDeps);
} else {
laterLogMissing(debugLog.missingDeps);
}
}
if (!debug) return;
if (this.filename) console.log(`\n[${this.filename}]`);
if (debugLog.polyfills.size === 0) {
console.log(method === "entry-global" ? debugLog.found ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.` : `The entry point for the ${provider.name} polyfill has not been found.` : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`);
return;
}
if (method === "entry-global") {
console.log(`The ${provider.name} polyfill entry has been replaced with ` + `the following polyfills:`);
} else {
console.log(`The ${provider.name} polyfill added the following polyfills:`);
}
for (const [name, support] of debugLog.polyfills) {
if (support) {
const filteredTargets = getInclusionReasons(name, targets, support);
const formattedTargets = JSON.stringify(filteredTargets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
console.log(` ${name} ${formattedTargets}`);
} else {
console.log(` ${name}`);
}
}
}
};
});
}
function mapGetOr(map, key, getDefault) {
let val = map.get(key);
if (val === undefined) {
val = getDefault();
map.set(key, val);
}
return val;
}
export default definePolyfillProvider;
//# sourceMappingURL=index.browser.mjs.map
{"version":3,"file":"index.browser.mjs","sources":["../src/utils.js","../src/imports-cache.js","../src/debug-utils.js","../src/normalize-options.js","../src/visitors/usage.js","../src/visitors/entry.js","../src/browser/dependencies.js","../src/meta-resolver.js","../src/index.js"],"sourcesContent":["// @flow\n\nimport * as babel from \"@babel/core\";\nconst { types: t, template } = babel.default || babel;\nimport type NodePath from \"@babel/traverse\";\nimport type { Utils } from \"./types\";\nimport type ImportsCache from \"./imports-cache\";\n\nexport function intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set();\n a.forEach(v => b.has(v) && result.add(v));\n return result;\n}\n\nexport function has(object: Object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction getType(target: any): string {\n return Object.prototype.toString.call(target).slice(8, -1);\n}\n\nfunction resolveId(path) {\n if (\n path.isIdentifier() &&\n !path.scope.hasBinding(path.node.name, /* noGlobals */ true)\n ) {\n return path.node.name;\n }\n\n const { deopt } = path.evaluate();\n if (deopt && deopt.isIdentifier()) {\n return deopt.node.name;\n }\n}\n\nexport function resolveKey(path: NodePath, computed: boolean = false) {\n const { node, parent, scope } = path;\n if (path.isStringLiteral()) return node.value;\n const { name } = node;\n const isIdentifier = path.isIdentifier();\n if (isIdentifier && !(computed || parent.computed)) return name;\n\n if (\n computed &&\n path.isMemberExpression() &&\n path.get(\"object\").isIdentifier({ name: \"Symbol\" }) &&\n !scope.hasBinding(\"Symbol\", /* noGlobals */ true)\n ) {\n const sym = resolveKey(path.get(\"property\"), path.node.computed);\n if (sym) return \"Symbol.\" + sym;\n }\n\n if (!isIdentifier || scope.hasBinding(name, /* noGlobals */ true)) {\n const { value } = path.evaluate();\n if (typeof value === \"string\") return value;\n }\n}\n\nexport function resolveSource(obj: NodePath) {\n if (\n obj.isMemberExpression() &&\n obj.get(\"property\").isIdentifier({ name: \"prototype\" })\n ) {\n const id = resolveId(obj.get(\"object\"));\n\n if (id) {\n return { id, placement: \"prototype\" };\n }\n return { id: null, placement: null };\n }\n\n const id = resolveId(obj);\n if (id) {\n return { id, placement: \"static\" };\n }\n\n const { value } = obj.evaluate();\n if (value !== undefined) {\n return { id: getType(value), placement: \"prototype\" };\n } else if (obj.isRegExpLiteral()) {\n return { id: \"RegExp\", placement: \"prototype\" };\n } else if (obj.isFunction()) {\n return { id: \"Function\", placement: \"prototype\" };\n }\n\n return { id: null, placement: null };\n}\n\nexport function getImportSource({ node }: NodePath) {\n if (node.specifiers.length === 0) return node.source.value;\n}\n\nexport function getRequireSource({ node }: NodePath) {\n if (!t.isExpressionStatement(node)) return;\n const { expression } = node;\n const isRequire =\n t.isCallExpression(expression) &&\n t.isIdentifier(expression.callee) &&\n expression.callee.name === \"require\" &&\n expression.arguments.length === 1 &&\n t.isStringLiteral(expression.arguments[0]);\n if (isRequire) return expression.arguments[0].value;\n}\n\nfunction hoist(node: t.Node) {\n node._blockHoist = 3;\n return node;\n}\n\nexport function createUtilsGetter(cache: ImportsCache) {\n return (path: NodePath): Utils => {\n const prog = path.findParent(p => p.isProgram());\n\n return {\n injectGlobalImport(url) {\n cache.storeAnonymous(prog, url, (isScript, source) => {\n return isScript\n ? template.statement.ast`require(${source})`\n : t.importDeclaration([], source);\n });\n },\n injectNamedImport(url, name, hint = name) {\n return cache.storeNamed(prog, url, name, (isScript, source, name) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`\n var ${id} = require(${source}).${name}\n `)\n : t.importDeclaration([t.importSpecifier(id, name)], source),\n name: id.name,\n };\n });\n },\n injectDefaultImport(url, hint = url) {\n return cache.storeNamed(prog, url, \"default\", (isScript, source) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`var ${id} = require(${source})`)\n : t.importDeclaration([t.importDefaultSpecifier(id)], source),\n name: id.name,\n };\n });\n },\n };\n };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport * as babel from \"@babel/core\";\nconst { types: t } = babel.default || babel;\n\ntype StrMap<K> = Map<string, K>;\n\nexport default class ImportsCache {\n _imports: WeakMap<NodePath, StrMap<string>>;\n _anonymousImports: WeakMap<NodePath, Set<string>>;\n _lastImports: WeakMap<NodePath, NodePath>;\n _resolver: (url: string) => string;\n\n constructor(resolver: (url: string) => string) {\n this._imports = new WeakMap();\n this._anonymousImports = new WeakMap();\n this._lastImports = new WeakMap();\n this._resolver = resolver;\n }\n\n storeAnonymous(\n programPath: NodePath,\n url: string,\n // eslint-disable-next-line no-undef\n getVal: (isScript: boolean, source: t.StringLiteral) => t.Node,\n ) {\n const key = this._normalizeKey(programPath, url);\n const imports = this._ensure(this._anonymousImports, programPath, Set);\n\n if (imports.has(key)) return;\n\n const node = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n );\n imports.add(key);\n this._injectImport(programPath, node);\n }\n\n storeNamed(\n programPath: NodePath,\n url: string,\n name: string,\n getVal: (\n isScript: boolean,\n // eslint-disable-next-line no-undef\n source: t.StringLiteral,\n // eslint-disable-next-line no-undef\n name: t.Identifier,\n ) => { node: t.Node, name: string },\n ) {\n const key = this._normalizeKey(programPath, url, name);\n const imports = this._ensure(this._imports, programPath, Map);\n\n if (!imports.has(key)) {\n const { node, name: id } = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n t.identifier(name),\n );\n imports.set(key, id);\n this._injectImport(programPath, node);\n }\n\n return t.identifier(imports.get(key));\n }\n\n _injectImport(programPath: NodePath, node: t.Node) {\n let lastImport = this._lastImports.get(programPath);\n if (\n lastImport &&\n lastImport.node &&\n // Sometimes the AST is modified and the \"last import\"\n // we have has been replaced\n lastImport.parent === programPath.node &&\n lastImport.container === programPath.node.body\n ) {\n lastImport = lastImport.insertAfter(node);\n } else {\n lastImport = programPath.unshiftContainer(\"body\", node);\n }\n lastImport = lastImport[lastImport.length - 1];\n this._lastImports.set(programPath, lastImport);\n\n /*\n let lastImport;\n\n programPath.get(\"body\").forEach(path => {\n if (path.isImportDeclaration()) lastImport = path;\n if (\n path.isExpressionStatement() &&\n isRequireCall(path.get(\"expression\"))\n ) {\n lastImport = path;\n }\n if (\n path.isVariableDeclaration() &&\n path.get(\"declarations\").length === 1 &&\n (isRequireCall(path.get(\"declarations.0.init\")) ||\n (path.get(\"declarations.0.init\").isMemberExpression() &&\n isRequireCall(path.get(\"declarations.0.init.object\"))))\n ) {\n lastImport = path;\n }\n });*/\n }\n\n _ensure<C: Map<*, *> | Set<*>>(\n map: WeakMap<NodePath, C>,\n programPath: NodePath,\n Collection: Class<C>,\n ): C {\n let collection = map.get(programPath);\n if (!collection) {\n collection = new Collection();\n map.set(programPath, collection);\n }\n return collection;\n }\n\n _normalizeKey(programPath: NodePath, url: string, name: string = \"\"): string {\n const { sourceType } = programPath.node;\n\n // If we rely on the imported binding (the \"name\" parameter), we also need to cache\n // based on the sourceType. This is because the module transforms change the names\n // of the import variables.\n return `${name && sourceType}::${url}::${name}`;\n }\n}\n","// @flow\n\nimport { prettifyTargets } from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"./types\";\n\nexport const presetEnvSilentDebugHeader =\n \"#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets\";\n\nexport function stringifyTargetsMultiline(targets: Targets): string {\n return JSON.stringify(prettifyTargets(targets), null, 2);\n}\n\nexport function stringifyTargets(targets: Targets): string {\n return JSON.stringify(targets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n}\n","// @flow\n\nimport { intersection } from \"./utils\";\nimport type {\n Pattern,\n PluginOptions,\n MissingDependenciesOption,\n} from \"./types\";\n\nfunction patternToRegExp(pattern: Pattern): ?RegExp {\n if (pattern instanceof RegExp) return pattern;\n\n try {\n return new RegExp(`^${pattern}$`);\n } catch {\n return null;\n }\n}\n\nfunction buildUnusedError(label, unused) {\n if (!unused.length) return \"\";\n return (\n ` - The following \"${label}\" patterns didn't match any polyfill:\\n` +\n unused.map(original => ` ${String(original)}\\n`).join(\"\")\n );\n}\n\nfunction buldDuplicatesError(duplicates) {\n if (!duplicates.size) return \"\";\n return (\n ` - The following polyfills were matched both by \"include\" and \"exclude\" patterns:\\n` +\n Array.from(duplicates, name => ` ${name}\\n`).join(\"\")\n );\n}\n\nexport function validateIncludeExclude(\n provider: string,\n polyfills: Set<string>,\n includePatterns: Pattern[],\n excludePatterns: Pattern[],\n) {\n let current;\n const filter = pattern => {\n const regexp = patternToRegExp(pattern);\n if (!regexp) return false;\n\n let matched = false;\n for (const polyfill of polyfills) {\n if (regexp.test(polyfill)) {\n matched = true;\n current.add(polyfill);\n }\n }\n return !matched;\n };\n\n // prettier-ignore\n const include = current = new Set<string> ();\n const unusedInclude = Array.from(includePatterns).filter(filter);\n\n // prettier-ignore\n const exclude = current = new Set<string> ();\n const unusedExclude = Array.from(excludePatterns).filter(filter);\n\n const duplicates = intersection(include, exclude);\n\n if (\n duplicates.size > 0 ||\n unusedInclude.length > 0 ||\n unusedExclude.length > 0\n ) {\n throw new Error(\n `Error while validating the \"${provider}\" provider options:\\n` +\n buildUnusedError(\"include\", unusedInclude) +\n buildUnusedError(\"exclude\", unusedExclude) +\n buldDuplicatesError(duplicates),\n );\n }\n\n return { include, exclude };\n}\n\nexport function applyMissingDependenciesDefaults(\n options: PluginOptions,\n babelApi: Object,\n): MissingDependenciesOption {\n const { missingDependencies = {} } = options;\n if (missingDependencies === false) return false;\n\n const caller = babelApi.caller(caller => caller?.name);\n\n const {\n log = \"deferred\",\n inject = caller === \"rollup-plugin-babel\" ? \"throw\" : \"import\",\n all = false,\n } = missingDependencies;\n\n return { log, inject, all };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { resolveKey, resolveSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => {\n function property(object, key, placement, path) {\n return callProvider({ kind: \"property\", object, key, placement }, path);\n }\n\n return {\n // Symbol(), new Promise\n ReferencedIdentifier(path: NodePath) {\n const {\n node: { name },\n scope,\n } = path;\n if (scope.getBindingIdentifier(name)) return;\n\n callProvider({ kind: \"global\", name }, path);\n },\n\n MemberExpression(path: NodePath) {\n const key = resolveKey(path.get(\"property\"), path.node.computed);\n if (!key || key === \"prototype\") return;\n\n const object = path.get(\"object\");\n const binding = object.scope.getBinding(object.node.name);\n if (binding && binding.path.isImportNamespaceSpecifier()) return;\n\n const source = resolveSource(object);\n return property(source.id, key, source.placement, path);\n },\n\n ObjectPattern(path: NodePath) {\n const { parentPath, parent } = path;\n let obj;\n\n // const { keys, values } = Object\n if (parentPath.isVariableDeclarator()) {\n obj = parentPath.get(\"init\");\n // ({ keys, values } = Object)\n } else if (parentPath.isAssignmentExpression()) {\n obj = parentPath.get(\"right\");\n // !function ({ keys, values }) {...} (Object)\n // resolution does not work after properties transform :-(\n } else if (parentPath.isFunction()) {\n const grand = parentPath.parentPath;\n if (grand.isCallExpression() || grand.isNewExpression()) {\n if (grand.node.callee === parent) {\n obj = grand.get(\"arguments\")[path.key];\n }\n }\n }\n\n let id = null;\n let placement = null;\n if (obj) ({ id, placement } = resolveSource(obj));\n\n for (const prop of path.get(\"properties\")) {\n if (prop.isObjectProperty()) {\n const key = resolveKey(prop.get(\"key\"));\n if (key) property(id, key, placement, prop);\n }\n }\n },\n\n BinaryExpression(path: NodePath) {\n if (path.node.operator !== \"in\") return;\n\n const source = resolveSource(path.get(\"right\"));\n const key = resolveKey(path.get(\"left\"), true);\n\n if (!key) return;\n\n callProvider(\n {\n kind: \"in\",\n object: source.id,\n key,\n placement: source.placement,\n },\n path,\n );\n },\n };\n};\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { getImportSource, getRequireSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => ({\n ImportDeclaration(path: NodePath) {\n const source = getImportSource(path);\n if (!source) return;\n callProvider({ kind: \"import\", source }, path);\n },\n Program(path: NodePath) {\n path.get(\"body\").forEach(bodyPath => {\n const source = getRequireSource(bodyPath);\n if (!source) return;\n callProvider({ kind: \"import\", source }, bodyPath);\n });\n },\n});\n","// @flow\n\nexport function resolve(\n dirname: string,\n moduleName: string,\n absoluteImports: boolean | string,\n): string {\n if (absoluteImports === false) return moduleName;\n\n throw new Error(\n `\"absoluteImports\" is not supported in bundles prepared for the browser.`,\n );\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function has(basedir: string, name: string) {\n return true;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function logMissing(missingDeps: Set<string>) {}\n\n// eslint-disable-next-line no-unused-vars\nexport function laterLogMissing(missingDeps: Set<string>) {}\n","// @flow\n\nimport type {\n MetaDescriptor,\n ResolverPolyfills,\n ResolvedPolyfill,\n} from \"./types\";\n\nimport { has } from \"./utils\";\n\ntype ResolverFn<T> = (meta: MetaDescriptor) => void | ResolvedPolyfill<T>;\n\nconst PossibleGlobalObjects = new Set<string>([\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n]);\n\nexport default function createMetaResolver<T>(\n polyfills: ResolverPolyfills<T>,\n): ResolverFn<T> {\n const { static: staticP, instance: instanceP, global: globalP } = polyfills;\n\n return meta => {\n if (meta.kind === \"global\" && globalP && has(globalP, meta.name)) {\n return { kind: \"global\", desc: globalP[meta.name], name: meta.name };\n }\n\n if (meta.kind === \"property\" || meta.kind === \"in\") {\n const { placement, object, key } = meta;\n\n if (object && placement === \"static\") {\n if (globalP && PossibleGlobalObjects.has(object) && has(globalP, key)) {\n return { kind: \"global\", desc: globalP[key], name: key };\n }\n\n if (staticP && has(staticP, object) && has(staticP[object], key)) {\n return {\n kind: \"static\",\n desc: staticP[object][key],\n name: `${object}$${key}`,\n };\n }\n }\n\n if (instanceP && has(instanceP, key)) {\n return { kind: \"instance\", desc: instanceP[key], name: `${key}` };\n }\n }\n };\n}\n","// @flow\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath } from \"@babel/traverse\";\n\nimport _getTargets, {\n isRequired,\n getInclusionReasons,\n} from \"@babel/helper-compilation-targets\";\nconst getTargets = _getTargets.default || _getTargets;\n\nimport { createUtilsGetter } from \"./utils\";\nimport ImportsCache from \"./imports-cache\";\nimport {\n stringifyTargetsMultiline,\n presetEnvSilentDebugHeader,\n} from \"./debug-utils\";\nimport {\n validateIncludeExclude,\n applyMissingDependenciesDefaults,\n} from \"./normalize-options\";\n\nimport type {\n ProviderApi,\n MethodString,\n Targets,\n MetaDescriptor,\n PolyfillProvider,\n PluginOptions,\n ProviderOptions,\n} from \"./types\";\n\nimport * as v from \"./visitors\";\nimport * as deps from \"./node/dependencies\";\n\nimport createMetaResolver from \"./meta-resolver\";\n\nexport type { PolyfillProvider, MetaDescriptor, Utils, Targets } from \"./types\";\n\nfunction resolveOptions<Options>(\n options: PluginOptions,\n babelApi,\n): {\n method: MethodString,\n methodName: \"usageGlobal\" | \"entryGlobal\" | \"usagePure\",\n targets: Targets,\n debug: boolean,\n shouldInjectPolyfill: ?(name: string, shouldInject: boolean) => boolean,\n providerOptions: ProviderOptions<Options>,\n absoluteImports: string | boolean,\n} {\n const {\n method,\n targets: targetsOption,\n ignoreBrowserslistConfig,\n configPath,\n debug,\n shouldInjectPolyfill,\n absoluteImports,\n ...providerOptions\n } = options;\n\n let methodName;\n if (method === \"usage-global\") methodName = \"usageGlobal\";\n else if (method === \"entry-global\") methodName = \"entryGlobal\";\n else if (method === \"usage-pure\") methodName = \"usagePure\";\n else if (typeof method !== \"string\") {\n throw new Error(\".method must be a string\");\n } else {\n throw new Error(\n `.method must be one of \"entry-global\", \"usage-global\"` +\n ` or \"usage-pure\" (received ${JSON.stringify(method)})`,\n );\n }\n\n if (typeof shouldInjectPolyfill === \"function\") {\n if (options.include || options.exclude) {\n throw new Error(\n `.include and .exclude are not supported when using the` +\n ` .shouldInjectPolyfill function.`,\n );\n }\n } else if (shouldInjectPolyfill != null) {\n throw new Error(\n `.shouldInjectPolyfill must be a function, or undefined` +\n ` (received ${JSON.stringify(shouldInjectPolyfill)})`,\n );\n }\n\n if (\n absoluteImports != null &&\n typeof absoluteImports !== \"boolean\" &&\n typeof absoluteImports !== \"string\"\n ) {\n throw new Error(\n `.absoluteImports must be a boolean, a string, or undefined` +\n ` (received ${JSON.stringify(absoluteImports)})`,\n );\n }\n\n let targets;\n\n if (\n // If any browserslist-related option is specified, fallback to the old\n // behavior of not using the targets specified in the top-level options.\n targetsOption ||\n configPath ||\n ignoreBrowserslistConfig\n ) {\n const targetsObj =\n typeof targetsOption === \"string\" || Array.isArray(targetsOption)\n ? { browsers: targetsOption }\n : targetsOption;\n\n targets = getTargets(targetsObj, {\n ignoreBrowserslistConfig,\n configPath,\n });\n } else {\n targets = babelApi.targets();\n }\n\n return {\n method,\n methodName,\n targets,\n absoluteImports: absoluteImports ?? false,\n shouldInjectPolyfill,\n debug: !!debug,\n providerOptions: ((providerOptions: Object): ProviderOptions<Options>),\n };\n}\n\nfunction instantiateProvider<Options>(\n factory: PolyfillProvider<Options>,\n options: PluginOptions,\n missingDependencies,\n dirname,\n debugLog,\n babelApi,\n) {\n const {\n method,\n methodName,\n targets,\n debug,\n shouldInjectPolyfill,\n providerOptions,\n absoluteImports,\n } = resolveOptions<Options>(options, babelApi);\n\n const getUtils = createUtilsGetter(\n new ImportsCache(moduleName =>\n deps.resolve(dirname, moduleName, absoluteImports),\n ),\n );\n\n // eslint-disable-next-line prefer-const\n let include, exclude;\n let polyfillsSupport;\n let polyfillsNames;\n let filterPolyfills;\n\n const depsCache = new Map();\n\n const api: ProviderApi = {\n babel: babelApi,\n getUtils,\n method: options.method,\n targets,\n createMetaResolver,\n shouldInjectPolyfill(name) {\n if (polyfillsNames === undefined) {\n throw new Error(\n `Internal error in the ${factory.name} provider: ` +\n `shouldInjectPolyfill() can't be called during initialization.`,\n );\n }\n if (!polyfillsNames.has(name)) {\n console.warn(\n `Internal error in the ${provider.name} provider: ` +\n `unknown polyfill \"${name}\".`,\n );\n }\n\n if (filterPolyfills && !filterPolyfills(name)) return false;\n\n let shouldInject = isRequired(name, targets, {\n compatData: polyfillsSupport,\n includes: include,\n excludes: exclude,\n });\n\n if (shouldInjectPolyfill) {\n shouldInject = shouldInjectPolyfill(name, shouldInject);\n if (typeof shouldInject !== \"boolean\") {\n throw new Error(`.shouldInjectPolyfill must return a boolean.`);\n }\n }\n\n return shouldInject;\n },\n debug(name) {\n debugLog().found = true;\n\n if (!debug || !name) return;\n\n if (debugLog().polyfills.has(provider.name)) return;\n debugLog().polyfills.set(\n name,\n polyfillsSupport && name && polyfillsSupport[name],\n );\n },\n assertDependency(name, version = \"*\") {\n if (missingDependencies === false) return;\n if (absoluteImports) {\n // If absoluteImports is not false, we will try resolving\n // the dependency and throw if it's not possible. We can\n // skip the check here.\n return;\n }\n\n const dep = version === \"*\" ? name : `${name}@^${version}`;\n\n const found = missingDependencies.all\n ? false\n : mapGetOr(depsCache, `${name} :: ${dirname}`, () =>\n deps.has(dirname, name),\n );\n\n if (!found) {\n debugLog().missingDeps.add(dep);\n }\n },\n };\n\n const provider = factory(api, providerOptions, dirname);\n\n if (typeof provider[methodName] !== \"function\") {\n throw new Error(\n `The \"${provider.name || factory.name}\" provider doesn't ` +\n `support the \"${method}\" polyfilling method.`,\n );\n }\n\n if (Array.isArray(provider.polyfills)) {\n polyfillsNames = new Set(provider.polyfills);\n filterPolyfills = provider.filterPolyfills;\n } else if (provider.polyfills) {\n polyfillsNames = new Set(Object.keys(provider.polyfills));\n polyfillsSupport = provider.polyfills;\n filterPolyfills = provider.filterPolyfills;\n } else {\n polyfillsNames = new Set();\n }\n\n ({ include, exclude } = validateIncludeExclude(\n provider.name || factory.name,\n polyfillsNames,\n providerOptions.include || [],\n providerOptions.exclude || [],\n ));\n\n return {\n debug,\n method,\n targets,\n provider,\n callProvider(payload: MetaDescriptor, path: NodePath) {\n const utils = getUtils(path);\n // $FlowIgnore\n provider[methodName](payload, utils, path);\n },\n };\n}\n\nexport default function definePolyfillProvider<Options>(\n factory: PolyfillProvider<Options>,\n) {\n return declare((babelApi, options: PluginOptions, dirname: string) => {\n babelApi.assertVersion(7);\n const { traverse } = babelApi;\n\n let debugLog;\n\n const missingDependencies = applyMissingDependenciesDefaults(\n options,\n babelApi,\n );\n\n const {\n debug,\n method,\n targets,\n provider,\n callProvider,\n } = instantiateProvider<Options>(\n factory,\n options,\n missingDependencies,\n dirname,\n () => debugLog,\n babelApi,\n );\n\n const createVisitor = method === \"entry-global\" ? v.entry : v.usage;\n\n const visitor = provider.visitor\n ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor])\n : createVisitor(callProvider);\n\n if (debug && debug !== presetEnvSilentDebugHeader) {\n console.log(`${provider.name}: \\`DEBUG\\` option`);\n console.log(`\\nUsing targets: ${stringifyTargetsMultiline(targets)}`);\n console.log(`\\nUsing polyfills with \\`${method}\\` method:`);\n }\n\n return {\n name: \"inject-polyfills\",\n visitor,\n\n pre() {\n debugLog = {\n polyfills: new Map(),\n found: false,\n providers: new Set(),\n missingDeps: new Set(),\n };\n\n // $FlowIgnore - Flow doesn't support optional calls\n provider.pre?.apply(this, arguments);\n },\n post() {\n // $FlowIgnore - Flow doesn't support optional calls\n provider.post?.apply(this, arguments);\n\n if (missingDependencies !== false) {\n if (missingDependencies.log === \"per-file\") {\n deps.logMissing(debugLog.missingDeps);\n } else {\n deps.laterLogMissing(debugLog.missingDeps);\n }\n }\n\n if (!debug) return;\n\n if (this.filename) console.log(`\\n[${this.filename}]`);\n\n if (debugLog.polyfills.size === 0) {\n console.log(\n method === \"entry-global\"\n ? debugLog.found\n ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.`\n : `The entry point for the ${provider.name} polyfill has not been found.`\n : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`,\n );\n\n return;\n }\n\n if (method === \"entry-global\") {\n console.log(\n `The ${provider.name} polyfill entry has been replaced with ` +\n `the following polyfills:`,\n );\n } else {\n console.log(\n `The ${provider.name} polyfill added the following polyfills:`,\n );\n }\n\n for (const [name, support] of debugLog.polyfills) {\n if (support) {\n const filteredTargets = getInclusionReasons(name, targets, support);\n\n const formattedTargets = JSON.stringify(filteredTargets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n\n console.log(` ${name} ${formattedTargets}`);\n } else {\n console.log(` ${name}`);\n }\n }\n },\n };\n });\n}\n\nfunction mapGetOr(map, key, getDefault) {\n let val = map.get(key);\n if (val === undefined) {\n val = getDefault();\n map.set(key, val);\n }\n return val;\n}\n"],"names":["types","t","template","babel","default","intersection","a","b","result","Set","forEach","v","has","add","object","key","Object","prototype","hasOwnProperty","call","getType","target","toString","slice","resolveId","path","isIdentifier","scope","hasBinding","node","name","deopt","evaluate","resolveKey","computed","parent","isStringLiteral","value","isMemberExpression","get","sym","resolveSource","obj","id","placement","undefined","isRegExpLiteral","isFunction","getImportSource","specifiers","length","source","getRequireSource","isExpressionStatement","expression","isRequire","isCallExpression","callee","arguments","hoist","_blockHoist","createUtilsGetter","cache","prog","findParent","p","isProgram","injectGlobalImport","url","storeAnonymous","isScript","statement","ast","importDeclaration","injectNamedImport","hint","storeNamed","generateUidIdentifier","importSpecifier","injectDefaultImport","importDefaultSpecifier","ImportsCache","constructor","resolver","_imports","WeakMap","_anonymousImports","_lastImports","_resolver","programPath","getVal","_normalizeKey","imports","_ensure","sourceType","stringLiteral","_injectImport","Map","identifier","set","lastImport","container","body","insertAfter","unshiftContainer","map","Collection","collection","presetEnvSilentDebugHeader","stringifyTargetsMultiline","targets","JSON","stringify","prettifyTargets","patternToRegExp","pattern","RegExp","buildUnusedError","label","unused","original","String","join","buldDuplicatesError","duplicates","size","Array","from","validateIncludeExclude","provider","polyfills","includePatterns","excludePatterns","current","filter","regexp","matched","polyfill","test","include","unusedInclude","exclude","unusedExclude","Error","applyMissingDependenciesDefaults","options","babelApi","missingDependencies","caller","log","inject","all","callProvider","property","kind","ReferencedIdentifier","getBindingIdentifier","MemberExpression","binding","getBinding","isImportNamespaceSpecifier","ObjectPattern","parentPath","isVariableDeclarator","isAssignmentExpression","grand","isNewExpression","prop","isObjectProperty","BinaryExpression","operator","ImportDeclaration","Program","bodyPath","resolve","dirname","moduleName","absoluteImports","basedir","logMissing","missingDeps","laterLogMissing","PossibleGlobalObjects","createMetaResolver","static","staticP","instance","instanceP","global","globalP","meta","desc","getTargets","_getTargets","resolveOptions","method","targetsOption","ignoreBrowserslistConfig","configPath","debug","shouldInjectPolyfill","providerOptions","methodName","targetsObj","isArray","browsers","instantiateProvider","factory","debugLog","getUtils","deps","polyfillsSupport","polyfillsNames","filterPolyfills","depsCache","api","console","warn","shouldInject","isRequired","compatData","includes","excludes","found","assertDependency","version","dep","mapGetOr","keys","payload","utils","definePolyfillProvider","declare","assertVersion","traverse","createVisitor","visitor","visitors","merge","pre","providers","apply","post","filename","support","filteredTargets","getInclusionReasons","formattedTargets","replace","getDefault","val"],"mappings":"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"}
\ No newline at end of file
import { declare } from '@babel/helper-plugin-utils';
import _getTargets, { prettifyTargets, getInclusionReasons, isRequired } from '@babel/helper-compilation-targets';
import * as babel from '@babel/core';
import path from 'path';
import debounce from 'lodash.debounce';
import requireResolve from 'resolve';
import { createRequire } from 'module';
const {
types: t$1,
template
} = babel.default || babel;
function intersection(a, b) {
const result = new Set();
a.forEach(v => b.has(v) && result.add(v));
return result;
}
function has$1(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
function resolveId(path) {
if (path.isIdentifier() && !path.scope.hasBinding(path.node.name,
/* noGlobals */
true)) {
return path.node.name;
}
const {
deopt
} = path.evaluate();
if (deopt && deopt.isIdentifier()) {
return deopt.node.name;
}
}
function resolveKey(path, computed = false) {
const {
node,
parent,
scope
} = path;
if (path.isStringLiteral()) return node.value;
const {
name
} = node;
const isIdentifier = path.isIdentifier();
if (isIdentifier && !(computed || parent.computed)) return name;
if (computed && path.isMemberExpression() && path.get("object").isIdentifier({
name: "Symbol"
}) && !scope.hasBinding("Symbol",
/* noGlobals */
true)) {
const sym = resolveKey(path.get("property"), path.node.computed);
if (sym) return "Symbol." + sym;
}
if (!isIdentifier || scope.hasBinding(name,
/* noGlobals */
true)) {
const {
value
} = path.evaluate();
if (typeof value === "string") return value;
}
}
function resolveSource(obj) {
if (obj.isMemberExpression() && obj.get("property").isIdentifier({
name: "prototype"
})) {
const id = resolveId(obj.get("object"));
if (id) {
return {
id,
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
const id = resolveId(obj);
if (id) {
return {
id,
placement: "static"
};
}
const {
value
} = obj.evaluate();
if (value !== undefined) {
return {
id: getType(value),
placement: "prototype"
};
} else if (obj.isRegExpLiteral()) {
return {
id: "RegExp",
placement: "prototype"
};
} else if (obj.isFunction()) {
return {
id: "Function",
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
function getImportSource({
node
}) {
if (node.specifiers.length === 0) return node.source.value;
}
function getRequireSource({
node
}) {
if (!t$1.isExpressionStatement(node)) return;
const {
expression
} = node;
const isRequire = t$1.isCallExpression(expression) && t$1.isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t$1.isStringLiteral(expression.arguments[0]);
if (isRequire) return expression.arguments[0].value;
}
function hoist(node) {
node._blockHoist = 3;
return node;
}
function createUtilsGetter(cache) {
return path => {
const prog = path.findParent(p => p.isProgram());
return {
injectGlobalImport(url) {
cache.storeAnonymous(prog, url, (isScript, source) => {
return isScript ? template.statement.ast`require(${source})` : t$1.importDeclaration([], source);
});
},
injectNamedImport(url, name, hint = name) {
return cache.storeNamed(prog, url, name, (isScript, source, name) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`
var ${id} = require(${source}).${name}
`) : t$1.importDeclaration([t$1.importSpecifier(id, name)], source),
name: id.name
};
});
},
injectDefaultImport(url, hint = url) {
return cache.storeNamed(prog, url, "default", (isScript, source) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`var ${id} = require(${source})`) : t$1.importDeclaration([t$1.importDefaultSpecifier(id)], source),
name: id.name
};
});
}
};
};
}
const {
types: t
} = babel.default || babel;
class ImportsCache {
constructor(resolver) {
this._imports = new WeakMap();
this._anonymousImports = new WeakMap();
this._lastImports = new WeakMap();
this._resolver = resolver;
}
storeAnonymous(programPath, url, // eslint-disable-next-line no-undef
getVal) {
const key = this._normalizeKey(programPath, url);
const imports = this._ensure(this._anonymousImports, programPath, Set);
if (imports.has(key)) return;
const node = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)));
imports.add(key);
this._injectImport(programPath, node);
}
storeNamed(programPath, url, name, getVal) {
const key = this._normalizeKey(programPath, url, name);
const imports = this._ensure(this._imports, programPath, Map);
if (!imports.has(key)) {
const {
node,
name: id
} = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)), t.identifier(name));
imports.set(key, id);
this._injectImport(programPath, node);
}
return t.identifier(imports.get(key));
}
_injectImport(programPath, node) {
let lastImport = this._lastImports.get(programPath);
if (lastImport && lastImport.node && // Sometimes the AST is modified and the "last import"
// we have has been replaced
lastImport.parent === programPath.node && lastImport.container === programPath.node.body) {
lastImport = lastImport.insertAfter(node);
} else {
lastImport = programPath.unshiftContainer("body", node);
}
lastImport = lastImport[lastImport.length - 1];
this._lastImports.set(programPath, lastImport);
/*
let lastImport;
programPath.get("body").forEach(path => {
if (path.isImportDeclaration()) lastImport = path;
if (
path.isExpressionStatement() &&
isRequireCall(path.get("expression"))
) {
lastImport = path;
}
if (
path.isVariableDeclaration() &&
path.get("declarations").length === 1 &&
(isRequireCall(path.get("declarations.0.init")) ||
(path.get("declarations.0.init").isMemberExpression() &&
isRequireCall(path.get("declarations.0.init.object"))))
) {
lastImport = path;
}
});*/
}
_ensure(map, programPath, Collection) {
let collection = map.get(programPath);
if (!collection) {
collection = new Collection();
map.set(programPath, collection);
}
return collection;
}
_normalizeKey(programPath, url, name = "") {
const {
sourceType
} = programPath.node; // If we rely on the imported binding (the "name" parameter), we also need to cache
// based on the sourceType. This is because the module transforms change the names
// of the import variables.
return `${name && sourceType}::${url}::${name}`;
}
}
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
function stringifyTargetsMultiline(targets) {
return JSON.stringify(prettifyTargets(targets), null, 2);
}
function patternToRegExp(pattern) {
if (pattern instanceof RegExp) return pattern;
try {
return new RegExp(`^${pattern}$`);
} catch {
return null;
}
}
function buildUnusedError(label, unused) {
if (!unused.length) return "";
return ` - The following "${label}" patterns didn't match any polyfill:\n` + unused.map(original => ` ${String(original)}\n`).join("");
}
function buldDuplicatesError(duplicates) {
if (!duplicates.size) return "";
return ` - The following polyfills were matched both by "include" and "exclude" patterns:\n` + Array.from(duplicates, name => ` ${name}\n`).join("");
}
function validateIncludeExclude(provider, polyfills, includePatterns, excludePatterns) {
let current;
const filter = pattern => {
const regexp = patternToRegExp(pattern);
if (!regexp) return false;
let matched = false;
for (const polyfill of polyfills) {
if (regexp.test(polyfill)) {
matched = true;
current.add(polyfill);
}
}
return !matched;
}; // prettier-ignore
const include = current = new Set();
const unusedInclude = Array.from(includePatterns).filter(filter); // prettier-ignore
const exclude = current = new Set();
const unusedExclude = Array.from(excludePatterns).filter(filter);
const duplicates = intersection(include, exclude);
if (duplicates.size > 0 || unusedInclude.length > 0 || unusedExclude.length > 0) {
throw new Error(`Error while validating the "${provider}" provider options:\n` + buildUnusedError("include", unusedInclude) + buildUnusedError("exclude", unusedExclude) + buldDuplicatesError(duplicates));
}
return {
include,
exclude
};
}
function applyMissingDependenciesDefaults(options, babelApi) {
const {
missingDependencies = {}
} = options;
if (missingDependencies === false) return false;
const caller = babelApi.caller(caller => caller == null ? void 0 : caller.name);
const {
log = "deferred",
inject = caller === "rollup-plugin-babel" ? "throw" : "import",
all = false
} = missingDependencies;
return {
log,
inject,
all
};
}
var usage = (callProvider => {
function property(object, key, placement, path) {
return callProvider({
kind: "property",
object,
key,
placement
}, path);
}
return {
// Symbol(), new Promise
ReferencedIdentifier(path) {
const {
node: {
name
},
scope
} = path;
if (scope.getBindingIdentifier(name)) return;
callProvider({
kind: "global",
name
}, path);
},
MemberExpression(path) {
const key = resolveKey(path.get("property"), path.node.computed);
if (!key || key === "prototype") return;
const object = path.get("object");
const binding = object.scope.getBinding(object.node.name);
if (binding && binding.path.isImportNamespaceSpecifier()) return;
const source = resolveSource(object);
return property(source.id, key, source.placement, path);
},
ObjectPattern(path) {
const {
parentPath,
parent
} = path;
let obj; // const { keys, values } = Object
if (parentPath.isVariableDeclarator()) {
obj = parentPath.get("init"); // ({ keys, values } = Object)
} else if (parentPath.isAssignmentExpression()) {
obj = parentPath.get("right"); // !function ({ keys, values }) {...} (Object)
// resolution does not work after properties transform :-(
} else if (parentPath.isFunction()) {
const grand = parentPath.parentPath;
if (grand.isCallExpression() || grand.isNewExpression()) {
if (grand.node.callee === parent) {
obj = grand.get("arguments")[path.key];
}
}
}
let id = null;
let placement = null;
if (obj) ({
id,
placement
} = resolveSource(obj));
for (const prop of path.get("properties")) {
if (prop.isObjectProperty()) {
const key = resolveKey(prop.get("key"));
if (key) property(id, key, placement, prop);
}
}
},
BinaryExpression(path) {
if (path.node.operator !== "in") return;
const source = resolveSource(path.get("right"));
const key = resolveKey(path.get("left"), true);
if (!key) return;
callProvider({
kind: "in",
object: source.id,
key,
placement: source.placement
}, path);
}
};
});
var entry = (callProvider => ({
ImportDeclaration(path) {
const source = getImportSource(path);
if (!source) return;
callProvider({
kind: "import",
source
}, path);
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = getRequireSource(bodyPath);
if (!source) return;
callProvider({
kind: "import",
source
}, bodyPath);
});
}
}));
const nativeRequireResolve = parseFloat(process.versions.node) >= 8.9; // $FlowIgnore
const require = createRequire(import
/*::(_)*/
.meta.url); // eslint-disable-line
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
let basedir = dirname;
if (typeof absoluteImports === "string") {
basedir = path.resolve(basedir, absoluteImports);
}
try {
if (nativeRequireResolve) {
return require.resolve(moduleName, {
paths: [basedir]
});
} else {
return requireResolve.sync(moduleName, {
basedir
});
}
} catch (err) {
if (err.code !== "MODULE_NOT_FOUND") throw err; // $FlowIgnore
throw Object.assign(new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`), {
code: "BABEL_POLYFILL_NOT_FOUND",
polyfill: moduleName,
dirname
});
}
}
function has(basedir, name) {
try {
if (nativeRequireResolve) {
require.resolve(name, {
paths: [basedir]
});
} else {
requireResolve.sync(name, {
basedir
});
}
return true;
} catch {
return false;
}
}
function logMissing(missingDeps) {
if (missingDeps.size === 0) return;
const deps = Array.from(missingDeps).sort().join(" ");
console.warn("\nSome polyfills have been added but are not present in your dependencies.\n" + "Please run one of the following commands:\n" + `\tnpm install --save ${deps}\n` + `\tyarn add ${deps}\n`);
process.exitCode = 1;
}
let allMissingDeps = new Set();
const laterLogMissingDependencies = debounce(() => {
logMissing(allMissingDeps);
allMissingDeps = new Set();
}, 100);
function laterLogMissing(missingDeps) {
if (missingDeps.size === 0) return;
missingDeps.forEach(name => allMissingDeps.add(name));
laterLogMissingDependencies();
}
const PossibleGlobalObjects = new Set(["global", "globalThis", "self", "window"]);
function createMetaResolver(polyfills) {
const {
static: staticP,
instance: instanceP,
global: globalP
} = polyfills;
return meta => {
if (meta.kind === "global" && globalP && has$1(globalP, meta.name)) {
return {
kind: "global",
desc: globalP[meta.name],
name: meta.name
};
}
if (meta.kind === "property" || meta.kind === "in") {
const {
placement,
object,
key
} = meta;
if (object && placement === "static") {
if (globalP && PossibleGlobalObjects.has(object) && has$1(globalP, key)) {
return {
kind: "global",
desc: globalP[key],
name: key
};
}
if (staticP && has$1(staticP, object) && has$1(staticP[object], key)) {
return {
kind: "static",
desc: staticP[object][key],
name: `${object}$${key}`
};
}
}
if (instanceP && has$1(instanceP, key)) {
return {
kind: "instance",
desc: instanceP[key],
name: `${key}`
};
}
}
};
}
const getTargets = _getTargets.default || _getTargets;
function resolveOptions(options, babelApi) {
const {
method,
targets: targetsOption,
ignoreBrowserslistConfig,
configPath,
debug,
shouldInjectPolyfill,
absoluteImports,
...providerOptions
} = options;
let methodName;
if (method === "usage-global") methodName = "usageGlobal";else if (method === "entry-global") methodName = "entryGlobal";else if (method === "usage-pure") methodName = "usagePure";else if (typeof method !== "string") {
throw new Error(".method must be a string");
} else {
throw new Error(`.method must be one of "entry-global", "usage-global"` + ` or "usage-pure" (received ${JSON.stringify(method)})`);
}
if (typeof shouldInjectPolyfill === "function") {
if (options.include || options.exclude) {
throw new Error(`.include and .exclude are not supported when using the` + ` .shouldInjectPolyfill function.`);
}
} else if (shouldInjectPolyfill != null) {
throw new Error(`.shouldInjectPolyfill must be a function, or undefined` + ` (received ${JSON.stringify(shouldInjectPolyfill)})`);
}
if (absoluteImports != null && typeof absoluteImports !== "boolean" && typeof absoluteImports !== "string") {
throw new Error(`.absoluteImports must be a boolean, a string, or undefined` + ` (received ${JSON.stringify(absoluteImports)})`);
}
let targets;
if ( // If any browserslist-related option is specified, fallback to the old
// behavior of not using the targets specified in the top-level options.
targetsOption || configPath || ignoreBrowserslistConfig) {
const targetsObj = typeof targetsOption === "string" || Array.isArray(targetsOption) ? {
browsers: targetsOption
} : targetsOption;
targets = getTargets(targetsObj, {
ignoreBrowserslistConfig,
configPath
});
} else {
targets = babelApi.targets();
}
return {
method,
methodName,
targets,
absoluteImports: absoluteImports != null ? absoluteImports : false,
shouldInjectPolyfill,
debug: !!debug,
providerOptions: providerOptions
};
}
function instantiateProvider(factory, options, missingDependencies, dirname, debugLog, babelApi) {
const {
method,
methodName,
targets,
debug,
shouldInjectPolyfill,
providerOptions,
absoluteImports
} = resolveOptions(options, babelApi);
const getUtils = createUtilsGetter(new ImportsCache(moduleName => resolve(dirname, moduleName, absoluteImports))); // eslint-disable-next-line prefer-const
let include, exclude;
let polyfillsSupport;
let polyfillsNames;
let filterPolyfills;
const depsCache = new Map();
const api = {
babel: babelApi,
getUtils,
method: options.method,
targets,
createMetaResolver,
shouldInjectPolyfill(name) {
if (polyfillsNames === undefined) {
throw new Error(`Internal error in the ${factory.name} provider: ` + `shouldInjectPolyfill() can't be called during initialization.`);
}
if (!polyfillsNames.has(name)) {
console.warn(`Internal error in the ${provider.name} provider: ` + `unknown polyfill "${name}".`);
}
if (filterPolyfills && !filterPolyfills(name)) return false;
let shouldInject = isRequired(name, targets, {
compatData: polyfillsSupport,
includes: include,
excludes: exclude
});
if (shouldInjectPolyfill) {
shouldInject = shouldInjectPolyfill(name, shouldInject);
if (typeof shouldInject !== "boolean") {
throw new Error(`.shouldInjectPolyfill must return a boolean.`);
}
}
return shouldInject;
},
debug(name) {
debugLog().found = true;
if (!debug || !name) return;
if (debugLog().polyfills.has(provider.name)) return;
debugLog().polyfills.set(name, polyfillsSupport && name && polyfillsSupport[name]);
},
assertDependency(name, version = "*") {
if (missingDependencies === false) return;
if (absoluteImports) {
// If absoluteImports is not false, we will try resolving
// the dependency and throw if it's not possible. We can
// skip the check here.
return;
}
const dep = version === "*" ? name : `${name}@^${version}`;
const found = missingDependencies.all ? false : mapGetOr(depsCache, `${name} :: ${dirname}`, () => has(dirname, name));
if (!found) {
debugLog().missingDeps.add(dep);
}
}
};
const provider = factory(api, providerOptions, dirname);
if (typeof provider[methodName] !== "function") {
throw new Error(`The "${provider.name || factory.name}" provider doesn't ` + `support the "${method}" polyfilling method.`);
}
if (Array.isArray(provider.polyfills)) {
polyfillsNames = new Set(provider.polyfills);
filterPolyfills = provider.filterPolyfills;
} else if (provider.polyfills) {
polyfillsNames = new Set(Object.keys(provider.polyfills));
polyfillsSupport = provider.polyfills;
filterPolyfills = provider.filterPolyfills;
} else {
polyfillsNames = new Set();
}
({
include,
exclude
} = validateIncludeExclude(provider.name || factory.name, polyfillsNames, providerOptions.include || [], providerOptions.exclude || []));
return {
debug,
method,
targets,
provider,
callProvider(payload, path) {
const utils = getUtils(path); // $FlowIgnore
provider[methodName](payload, utils, path);
}
};
}
function definePolyfillProvider(factory) {
return declare((babelApi, options, dirname) => {
babelApi.assertVersion(7);
const {
traverse
} = babelApi;
let debugLog;
const missingDependencies = applyMissingDependenciesDefaults(options, babelApi);
const {
debug,
method,
targets,
provider,
callProvider
} = instantiateProvider(factory, options, missingDependencies, dirname, () => debugLog, babelApi);
const createVisitor = method === "entry-global" ? entry : usage;
const visitor = provider.visitor ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor]) : createVisitor(callProvider);
if (debug && debug !== presetEnvSilentDebugHeader) {
console.log(`${provider.name}: \`DEBUG\` option`);
console.log(`\nUsing targets: ${stringifyTargetsMultiline(targets)}`);
console.log(`\nUsing polyfills with \`${method}\` method:`);
}
return {
name: "inject-polyfills",
visitor,
pre() {
var _provider$pre;
debugLog = {
polyfills: new Map(),
found: false,
providers: new Set(),
missingDeps: new Set()
}; // $FlowIgnore - Flow doesn't support optional calls
(_provider$pre = provider.pre) == null ? void 0 : _provider$pre.apply(this, arguments);
},
post() {
var _provider$post;
// $FlowIgnore - Flow doesn't support optional calls
(_provider$post = provider.post) == null ? void 0 : _provider$post.apply(this, arguments);
if (missingDependencies !== false) {
if (missingDependencies.log === "per-file") {
logMissing(debugLog.missingDeps);
} else {
laterLogMissing(debugLog.missingDeps);
}
}
if (!debug) return;
if (this.filename) console.log(`\n[${this.filename}]`);
if (debugLog.polyfills.size === 0) {
console.log(method === "entry-global" ? debugLog.found ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.` : `The entry point for the ${provider.name} polyfill has not been found.` : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`);
return;
}
if (method === "entry-global") {
console.log(`The ${provider.name} polyfill entry has been replaced with ` + `the following polyfills:`);
} else {
console.log(`The ${provider.name} polyfill added the following polyfills:`);
}
for (const [name, support] of debugLog.polyfills) {
if (support) {
const filteredTargets = getInclusionReasons(name, targets, support);
const formattedTargets = JSON.stringify(filteredTargets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
console.log(` ${name} ${formattedTargets}`);
} else {
console.log(` ${name}`);
}
}
}
};
});
}
function mapGetOr(map, key, getDefault) {
let val = map.get(key);
if (val === undefined) {
val = getDefault();
map.set(key, val);
}
return val;
}
export default definePolyfillProvider;
//# sourceMappingURL=index.node.mjs.map
{"version":3,"file":"index.node.mjs","sources":["../src/utils.js","../src/imports-cache.js","../src/debug-utils.js","../src/normalize-options.js","../src/visitors/usage.js","../src/visitors/entry.js","../src/node/dependencies.js","../src/meta-resolver.js","../src/index.js"],"sourcesContent":["// @flow\n\nimport * as babel from \"@babel/core\";\nconst { types: t, template } = babel.default || babel;\nimport type NodePath from \"@babel/traverse\";\nimport type { Utils } from \"./types\";\nimport type ImportsCache from \"./imports-cache\";\n\nexport function intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set();\n a.forEach(v => b.has(v) && result.add(v));\n return result;\n}\n\nexport function has(object: Object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction getType(target: any): string {\n return Object.prototype.toString.call(target).slice(8, -1);\n}\n\nfunction resolveId(path) {\n if (\n path.isIdentifier() &&\n !path.scope.hasBinding(path.node.name, /* noGlobals */ true)\n ) {\n return path.node.name;\n }\n\n const { deopt } = path.evaluate();\n if (deopt && deopt.isIdentifier()) {\n return deopt.node.name;\n }\n}\n\nexport function resolveKey(path: NodePath, computed: boolean = false) {\n const { node, parent, scope } = path;\n if (path.isStringLiteral()) return node.value;\n const { name } = node;\n const isIdentifier = path.isIdentifier();\n if (isIdentifier && !(computed || parent.computed)) return name;\n\n if (\n computed &&\n path.isMemberExpression() &&\n path.get(\"object\").isIdentifier({ name: \"Symbol\" }) &&\n !scope.hasBinding(\"Symbol\", /* noGlobals */ true)\n ) {\n const sym = resolveKey(path.get(\"property\"), path.node.computed);\n if (sym) return \"Symbol.\" + sym;\n }\n\n if (!isIdentifier || scope.hasBinding(name, /* noGlobals */ true)) {\n const { value } = path.evaluate();\n if (typeof value === \"string\") return value;\n }\n}\n\nexport function resolveSource(obj: NodePath) {\n if (\n obj.isMemberExpression() &&\n obj.get(\"property\").isIdentifier({ name: \"prototype\" })\n ) {\n const id = resolveId(obj.get(\"object\"));\n\n if (id) {\n return { id, placement: \"prototype\" };\n }\n return { id: null, placement: null };\n }\n\n const id = resolveId(obj);\n if (id) {\n return { id, placement: \"static\" };\n }\n\n const { value } = obj.evaluate();\n if (value !== undefined) {\n return { id: getType(value), placement: \"prototype\" };\n } else if (obj.isRegExpLiteral()) {\n return { id: \"RegExp\", placement: \"prototype\" };\n } else if (obj.isFunction()) {\n return { id: \"Function\", placement: \"prototype\" };\n }\n\n return { id: null, placement: null };\n}\n\nexport function getImportSource({ node }: NodePath) {\n if (node.specifiers.length === 0) return node.source.value;\n}\n\nexport function getRequireSource({ node }: NodePath) {\n if (!t.isExpressionStatement(node)) return;\n const { expression } = node;\n const isRequire =\n t.isCallExpression(expression) &&\n t.isIdentifier(expression.callee) &&\n expression.callee.name === \"require\" &&\n expression.arguments.length === 1 &&\n t.isStringLiteral(expression.arguments[0]);\n if (isRequire) return expression.arguments[0].value;\n}\n\nfunction hoist(node: t.Node) {\n node._blockHoist = 3;\n return node;\n}\n\nexport function createUtilsGetter(cache: ImportsCache) {\n return (path: NodePath): Utils => {\n const prog = path.findParent(p => p.isProgram());\n\n return {\n injectGlobalImport(url) {\n cache.storeAnonymous(prog, url, (isScript, source) => {\n return isScript\n ? template.statement.ast`require(${source})`\n : t.importDeclaration([], source);\n });\n },\n injectNamedImport(url, name, hint = name) {\n return cache.storeNamed(prog, url, name, (isScript, source, name) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`\n var ${id} = require(${source}).${name}\n `)\n : t.importDeclaration([t.importSpecifier(id, name)], source),\n name: id.name,\n };\n });\n },\n injectDefaultImport(url, hint = url) {\n return cache.storeNamed(prog, url, \"default\", (isScript, source) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`var ${id} = require(${source})`)\n : t.importDeclaration([t.importDefaultSpecifier(id)], source),\n name: id.name,\n };\n });\n },\n };\n };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport * as babel from \"@babel/core\";\nconst { types: t } = babel.default || babel;\n\ntype StrMap<K> = Map<string, K>;\n\nexport default class ImportsCache {\n _imports: WeakMap<NodePath, StrMap<string>>;\n _anonymousImports: WeakMap<NodePath, Set<string>>;\n _lastImports: WeakMap<NodePath, NodePath>;\n _resolver: (url: string) => string;\n\n constructor(resolver: (url: string) => string) {\n this._imports = new WeakMap();\n this._anonymousImports = new WeakMap();\n this._lastImports = new WeakMap();\n this._resolver = resolver;\n }\n\n storeAnonymous(\n programPath: NodePath,\n url: string,\n // eslint-disable-next-line no-undef\n getVal: (isScript: boolean, source: t.StringLiteral) => t.Node,\n ) {\n const key = this._normalizeKey(programPath, url);\n const imports = this._ensure(this._anonymousImports, programPath, Set);\n\n if (imports.has(key)) return;\n\n const node = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n );\n imports.add(key);\n this._injectImport(programPath, node);\n }\n\n storeNamed(\n programPath: NodePath,\n url: string,\n name: string,\n getVal: (\n isScript: boolean,\n // eslint-disable-next-line no-undef\n source: t.StringLiteral,\n // eslint-disable-next-line no-undef\n name: t.Identifier,\n ) => { node: t.Node, name: string },\n ) {\n const key = this._normalizeKey(programPath, url, name);\n const imports = this._ensure(this._imports, programPath, Map);\n\n if (!imports.has(key)) {\n const { node, name: id } = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n t.identifier(name),\n );\n imports.set(key, id);\n this._injectImport(programPath, node);\n }\n\n return t.identifier(imports.get(key));\n }\n\n _injectImport(programPath: NodePath, node: t.Node) {\n let lastImport = this._lastImports.get(programPath);\n if (\n lastImport &&\n lastImport.node &&\n // Sometimes the AST is modified and the \"last import\"\n // we have has been replaced\n lastImport.parent === programPath.node &&\n lastImport.container === programPath.node.body\n ) {\n lastImport = lastImport.insertAfter(node);\n } else {\n lastImport = programPath.unshiftContainer(\"body\", node);\n }\n lastImport = lastImport[lastImport.length - 1];\n this._lastImports.set(programPath, lastImport);\n\n /*\n let lastImport;\n\n programPath.get(\"body\").forEach(path => {\n if (path.isImportDeclaration()) lastImport = path;\n if (\n path.isExpressionStatement() &&\n isRequireCall(path.get(\"expression\"))\n ) {\n lastImport = path;\n }\n if (\n path.isVariableDeclaration() &&\n path.get(\"declarations\").length === 1 &&\n (isRequireCall(path.get(\"declarations.0.init\")) ||\n (path.get(\"declarations.0.init\").isMemberExpression() &&\n isRequireCall(path.get(\"declarations.0.init.object\"))))\n ) {\n lastImport = path;\n }\n });*/\n }\n\n _ensure<C: Map<*, *> | Set<*>>(\n map: WeakMap<NodePath, C>,\n programPath: NodePath,\n Collection: Class<C>,\n ): C {\n let collection = map.get(programPath);\n if (!collection) {\n collection = new Collection();\n map.set(programPath, collection);\n }\n return collection;\n }\n\n _normalizeKey(programPath: NodePath, url: string, name: string = \"\"): string {\n const { sourceType } = programPath.node;\n\n // If we rely on the imported binding (the \"name\" parameter), we also need to cache\n // based on the sourceType. This is because the module transforms change the names\n // of the import variables.\n return `${name && sourceType}::${url}::${name}`;\n }\n}\n","// @flow\n\nimport { prettifyTargets } from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"./types\";\n\nexport const presetEnvSilentDebugHeader =\n \"#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets\";\n\nexport function stringifyTargetsMultiline(targets: Targets): string {\n return JSON.stringify(prettifyTargets(targets), null, 2);\n}\n\nexport function stringifyTargets(targets: Targets): string {\n return JSON.stringify(targets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n}\n","// @flow\n\nimport { intersection } from \"./utils\";\nimport type {\n Pattern,\n PluginOptions,\n MissingDependenciesOption,\n} from \"./types\";\n\nfunction patternToRegExp(pattern: Pattern): ?RegExp {\n if (pattern instanceof RegExp) return pattern;\n\n try {\n return new RegExp(`^${pattern}$`);\n } catch {\n return null;\n }\n}\n\nfunction buildUnusedError(label, unused) {\n if (!unused.length) return \"\";\n return (\n ` - The following \"${label}\" patterns didn't match any polyfill:\\n` +\n unused.map(original => ` ${String(original)}\\n`).join(\"\")\n );\n}\n\nfunction buldDuplicatesError(duplicates) {\n if (!duplicates.size) return \"\";\n return (\n ` - The following polyfills were matched both by \"include\" and \"exclude\" patterns:\\n` +\n Array.from(duplicates, name => ` ${name}\\n`).join(\"\")\n );\n}\n\nexport function validateIncludeExclude(\n provider: string,\n polyfills: Set<string>,\n includePatterns: Pattern[],\n excludePatterns: Pattern[],\n) {\n let current;\n const filter = pattern => {\n const regexp = patternToRegExp(pattern);\n if (!regexp) return false;\n\n let matched = false;\n for (const polyfill of polyfills) {\n if (regexp.test(polyfill)) {\n matched = true;\n current.add(polyfill);\n }\n }\n return !matched;\n };\n\n // prettier-ignore\n const include = current = new Set<string> ();\n const unusedInclude = Array.from(includePatterns).filter(filter);\n\n // prettier-ignore\n const exclude = current = new Set<string> ();\n const unusedExclude = Array.from(excludePatterns).filter(filter);\n\n const duplicates = intersection(include, exclude);\n\n if (\n duplicates.size > 0 ||\n unusedInclude.length > 0 ||\n unusedExclude.length > 0\n ) {\n throw new Error(\n `Error while validating the \"${provider}\" provider options:\\n` +\n buildUnusedError(\"include\", unusedInclude) +\n buildUnusedError(\"exclude\", unusedExclude) +\n buldDuplicatesError(duplicates),\n );\n }\n\n return { include, exclude };\n}\n\nexport function applyMissingDependenciesDefaults(\n options: PluginOptions,\n babelApi: Object,\n): MissingDependenciesOption {\n const { missingDependencies = {} } = options;\n if (missingDependencies === false) return false;\n\n const caller = babelApi.caller(caller => caller?.name);\n\n const {\n log = \"deferred\",\n inject = caller === \"rollup-plugin-babel\" ? \"throw\" : \"import\",\n all = false,\n } = missingDependencies;\n\n return { log, inject, all };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { resolveKey, resolveSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => {\n function property(object, key, placement, path) {\n return callProvider({ kind: \"property\", object, key, placement }, path);\n }\n\n return {\n // Symbol(), new Promise\n ReferencedIdentifier(path: NodePath) {\n const {\n node: { name },\n scope,\n } = path;\n if (scope.getBindingIdentifier(name)) return;\n\n callProvider({ kind: \"global\", name }, path);\n },\n\n MemberExpression(path: NodePath) {\n const key = resolveKey(path.get(\"property\"), path.node.computed);\n if (!key || key === \"prototype\") return;\n\n const object = path.get(\"object\");\n const binding = object.scope.getBinding(object.node.name);\n if (binding && binding.path.isImportNamespaceSpecifier()) return;\n\n const source = resolveSource(object);\n return property(source.id, key, source.placement, path);\n },\n\n ObjectPattern(path: NodePath) {\n const { parentPath, parent } = path;\n let obj;\n\n // const { keys, values } = Object\n if (parentPath.isVariableDeclarator()) {\n obj = parentPath.get(\"init\");\n // ({ keys, values } = Object)\n } else if (parentPath.isAssignmentExpression()) {\n obj = parentPath.get(\"right\");\n // !function ({ keys, values }) {...} (Object)\n // resolution does not work after properties transform :-(\n } else if (parentPath.isFunction()) {\n const grand = parentPath.parentPath;\n if (grand.isCallExpression() || grand.isNewExpression()) {\n if (grand.node.callee === parent) {\n obj = grand.get(\"arguments\")[path.key];\n }\n }\n }\n\n let id = null;\n let placement = null;\n if (obj) ({ id, placement } = resolveSource(obj));\n\n for (const prop of path.get(\"properties\")) {\n if (prop.isObjectProperty()) {\n const key = resolveKey(prop.get(\"key\"));\n if (key) property(id, key, placement, prop);\n }\n }\n },\n\n BinaryExpression(path: NodePath) {\n if (path.node.operator !== \"in\") return;\n\n const source = resolveSource(path.get(\"right\"));\n const key = resolveKey(path.get(\"left\"), true);\n\n if (!key) return;\n\n callProvider(\n {\n kind: \"in\",\n object: source.id,\n key,\n placement: source.placement,\n },\n path,\n );\n },\n };\n};\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { getImportSource, getRequireSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => ({\n ImportDeclaration(path: NodePath) {\n const source = getImportSource(path);\n if (!source) return;\n callProvider({ kind: \"import\", source }, path);\n },\n Program(path: NodePath) {\n path.get(\"body\").forEach(bodyPath => {\n const source = getRequireSource(bodyPath);\n if (!source) return;\n callProvider({ kind: \"import\", source }, bodyPath);\n });\n },\n});\n","// @flow\n\nimport path from \"path\";\nimport debounce from \"lodash.debounce\";\nimport requireResolve from \"resolve\";\n\nconst nativeRequireResolve = parseFloat(process.versions.node) >= 8.9;\n\n// $FlowIgnore\nimport { createRequire } from \"module\";\n// $FlowIgnore\nconst require = createRequire(import/*::(_)*/.meta.url); // eslint-disable-line\n\nexport function resolve(\n dirname: string,\n moduleName: string,\n absoluteImports: boolean | string,\n): string {\n if (absoluteImports === false) return moduleName;\n\n let basedir = dirname;\n if (typeof absoluteImports === \"string\") {\n basedir = path.resolve(basedir, absoluteImports);\n }\n\n try {\n if (nativeRequireResolve) {\n return require.resolve(moduleName, {\n paths: [basedir],\n });\n } else {\n return requireResolve.sync(moduleName, { basedir });\n }\n } catch (err) {\n if (err.code !== \"MODULE_NOT_FOUND\") throw err;\n\n // $FlowIgnore\n throw Object.assign(\n new Error(`Failed to resolve \"${moduleName}\" relative to \"${dirname}\"`),\n {\n code: \"BABEL_POLYFILL_NOT_FOUND\",\n polyfill: moduleName,\n dirname,\n },\n );\n }\n}\n\nexport function has(basedir: string, name: string) {\n try {\n if (nativeRequireResolve) {\n require.resolve(name, { paths: [basedir] });\n } else {\n requireResolve.sync(name, { basedir });\n }\n return true;\n } catch {\n return false;\n }\n}\n\nexport function logMissing(missingDeps: Set<string>) {\n if (missingDeps.size === 0) return;\n\n const deps = Array.from(missingDeps)\n .sort()\n .join(\" \");\n\n console.warn(\n \"\\nSome polyfills have been added but are not present in your dependencies.\\n\" +\n \"Please run one of the following commands:\\n\" +\n `\\tnpm install --save ${deps}\\n` +\n `\\tyarn add ${deps}\\n`,\n );\n\n process.exitCode = 1;\n}\n\nlet allMissingDeps = new Set();\n\nconst laterLogMissingDependencies = debounce(() => {\n logMissing(allMissingDeps);\n allMissingDeps = new Set();\n}, 100);\n\nexport function laterLogMissing(missingDeps: Set<string>) {\n if (missingDeps.size === 0) return;\n\n missingDeps.forEach(name => allMissingDeps.add(name));\n laterLogMissingDependencies();\n}\n","// @flow\n\nimport type {\n MetaDescriptor,\n ResolverPolyfills,\n ResolvedPolyfill,\n} from \"./types\";\n\nimport { has } from \"./utils\";\n\ntype ResolverFn<T> = (meta: MetaDescriptor) => void | ResolvedPolyfill<T>;\n\nconst PossibleGlobalObjects = new Set<string>([\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n]);\n\nexport default function createMetaResolver<T>(\n polyfills: ResolverPolyfills<T>,\n): ResolverFn<T> {\n const { static: staticP, instance: instanceP, global: globalP } = polyfills;\n\n return meta => {\n if (meta.kind === \"global\" && globalP && has(globalP, meta.name)) {\n return { kind: \"global\", desc: globalP[meta.name], name: meta.name };\n }\n\n if (meta.kind === \"property\" || meta.kind === \"in\") {\n const { placement, object, key } = meta;\n\n if (object && placement === \"static\") {\n if (globalP && PossibleGlobalObjects.has(object) && has(globalP, key)) {\n return { kind: \"global\", desc: globalP[key], name: key };\n }\n\n if (staticP && has(staticP, object) && has(staticP[object], key)) {\n return {\n kind: \"static\",\n desc: staticP[object][key],\n name: `${object}$${key}`,\n };\n }\n }\n\n if (instanceP && has(instanceP, key)) {\n return { kind: \"instance\", desc: instanceP[key], name: `${key}` };\n }\n }\n };\n}\n","// @flow\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath } from \"@babel/traverse\";\n\nimport _getTargets, {\n isRequired,\n getInclusionReasons,\n} from \"@babel/helper-compilation-targets\";\nconst getTargets = _getTargets.default || _getTargets;\n\nimport { createUtilsGetter } from \"./utils\";\nimport ImportsCache from \"./imports-cache\";\nimport {\n stringifyTargetsMultiline,\n presetEnvSilentDebugHeader,\n} from \"./debug-utils\";\nimport {\n validateIncludeExclude,\n applyMissingDependenciesDefaults,\n} from \"./normalize-options\";\n\nimport type {\n ProviderApi,\n MethodString,\n Targets,\n MetaDescriptor,\n PolyfillProvider,\n PluginOptions,\n ProviderOptions,\n} from \"./types\";\n\nimport * as v from \"./visitors\";\nimport * as deps from \"./node/dependencies\";\n\nimport createMetaResolver from \"./meta-resolver\";\n\nexport type { PolyfillProvider, MetaDescriptor, Utils, Targets } from \"./types\";\n\nfunction resolveOptions<Options>(\n options: PluginOptions,\n babelApi,\n): {\n method: MethodString,\n methodName: \"usageGlobal\" | \"entryGlobal\" | \"usagePure\",\n targets: Targets,\n debug: boolean,\n shouldInjectPolyfill: ?(name: string, shouldInject: boolean) => boolean,\n providerOptions: ProviderOptions<Options>,\n absoluteImports: string | boolean,\n} {\n const {\n method,\n targets: targetsOption,\n ignoreBrowserslistConfig,\n configPath,\n debug,\n shouldInjectPolyfill,\n absoluteImports,\n ...providerOptions\n } = options;\n\n let methodName;\n if (method === \"usage-global\") methodName = \"usageGlobal\";\n else if (method === \"entry-global\") methodName = \"entryGlobal\";\n else if (method === \"usage-pure\") methodName = \"usagePure\";\n else if (typeof method !== \"string\") {\n throw new Error(\".method must be a string\");\n } else {\n throw new Error(\n `.method must be one of \"entry-global\", \"usage-global\"` +\n ` or \"usage-pure\" (received ${JSON.stringify(method)})`,\n );\n }\n\n if (typeof shouldInjectPolyfill === \"function\") {\n if (options.include || options.exclude) {\n throw new Error(\n `.include and .exclude are not supported when using the` +\n ` .shouldInjectPolyfill function.`,\n );\n }\n } else if (shouldInjectPolyfill != null) {\n throw new Error(\n `.shouldInjectPolyfill must be a function, or undefined` +\n ` (received ${JSON.stringify(shouldInjectPolyfill)})`,\n );\n }\n\n if (\n absoluteImports != null &&\n typeof absoluteImports !== \"boolean\" &&\n typeof absoluteImports !== \"string\"\n ) {\n throw new Error(\n `.absoluteImports must be a boolean, a string, or undefined` +\n ` (received ${JSON.stringify(absoluteImports)})`,\n );\n }\n\n let targets;\n\n if (\n // If any browserslist-related option is specified, fallback to the old\n // behavior of not using the targets specified in the top-level options.\n targetsOption ||\n configPath ||\n ignoreBrowserslistConfig\n ) {\n const targetsObj =\n typeof targetsOption === \"string\" || Array.isArray(targetsOption)\n ? { browsers: targetsOption }\n : targetsOption;\n\n targets = getTargets(targetsObj, {\n ignoreBrowserslistConfig,\n configPath,\n });\n } else {\n targets = babelApi.targets();\n }\n\n return {\n method,\n methodName,\n targets,\n absoluteImports: absoluteImports ?? false,\n shouldInjectPolyfill,\n debug: !!debug,\n providerOptions: ((providerOptions: Object): ProviderOptions<Options>),\n };\n}\n\nfunction instantiateProvider<Options>(\n factory: PolyfillProvider<Options>,\n options: PluginOptions,\n missingDependencies,\n dirname,\n debugLog,\n babelApi,\n) {\n const {\n method,\n methodName,\n targets,\n debug,\n shouldInjectPolyfill,\n providerOptions,\n absoluteImports,\n } = resolveOptions<Options>(options, babelApi);\n\n const getUtils = createUtilsGetter(\n new ImportsCache(moduleName =>\n deps.resolve(dirname, moduleName, absoluteImports),\n ),\n );\n\n // eslint-disable-next-line prefer-const\n let include, exclude;\n let polyfillsSupport;\n let polyfillsNames;\n let filterPolyfills;\n\n const depsCache = new Map();\n\n const api: ProviderApi = {\n babel: babelApi,\n getUtils,\n method: options.method,\n targets,\n createMetaResolver,\n shouldInjectPolyfill(name) {\n if (polyfillsNames === undefined) {\n throw new Error(\n `Internal error in the ${factory.name} provider: ` +\n `shouldInjectPolyfill() can't be called during initialization.`,\n );\n }\n if (!polyfillsNames.has(name)) {\n console.warn(\n `Internal error in the ${provider.name} provider: ` +\n `unknown polyfill \"${name}\".`,\n );\n }\n\n if (filterPolyfills && !filterPolyfills(name)) return false;\n\n let shouldInject = isRequired(name, targets, {\n compatData: polyfillsSupport,\n includes: include,\n excludes: exclude,\n });\n\n if (shouldInjectPolyfill) {\n shouldInject = shouldInjectPolyfill(name, shouldInject);\n if (typeof shouldInject !== \"boolean\") {\n throw new Error(`.shouldInjectPolyfill must return a boolean.`);\n }\n }\n\n return shouldInject;\n },\n debug(name) {\n debugLog().found = true;\n\n if (!debug || !name) return;\n\n if (debugLog().polyfills.has(provider.name)) return;\n debugLog().polyfills.set(\n name,\n polyfillsSupport && name && polyfillsSupport[name],\n );\n },\n assertDependency(name, version = \"*\") {\n if (missingDependencies === false) return;\n if (absoluteImports) {\n // If absoluteImports is not false, we will try resolving\n // the dependency and throw if it's not possible. We can\n // skip the check here.\n return;\n }\n\n const dep = version === \"*\" ? name : `${name}@^${version}`;\n\n const found = missingDependencies.all\n ? false\n : mapGetOr(depsCache, `${name} :: ${dirname}`, () =>\n deps.has(dirname, name),\n );\n\n if (!found) {\n debugLog().missingDeps.add(dep);\n }\n },\n };\n\n const provider = factory(api, providerOptions, dirname);\n\n if (typeof provider[methodName] !== \"function\") {\n throw new Error(\n `The \"${provider.name || factory.name}\" provider doesn't ` +\n `support the \"${method}\" polyfilling method.`,\n );\n }\n\n if (Array.isArray(provider.polyfills)) {\n polyfillsNames = new Set(provider.polyfills);\n filterPolyfills = provider.filterPolyfills;\n } else if (provider.polyfills) {\n polyfillsNames = new Set(Object.keys(provider.polyfills));\n polyfillsSupport = provider.polyfills;\n filterPolyfills = provider.filterPolyfills;\n } else {\n polyfillsNames = new Set();\n }\n\n ({ include, exclude } = validateIncludeExclude(\n provider.name || factory.name,\n polyfillsNames,\n providerOptions.include || [],\n providerOptions.exclude || [],\n ));\n\n return {\n debug,\n method,\n targets,\n provider,\n callProvider(payload: MetaDescriptor, path: NodePath) {\n const utils = getUtils(path);\n // $FlowIgnore\n provider[methodName](payload, utils, path);\n },\n };\n}\n\nexport default function definePolyfillProvider<Options>(\n factory: PolyfillProvider<Options>,\n) {\n return declare((babelApi, options: PluginOptions, dirname: string) => {\n babelApi.assertVersion(7);\n const { traverse } = babelApi;\n\n let debugLog;\n\n const missingDependencies = applyMissingDependenciesDefaults(\n options,\n babelApi,\n );\n\n const {\n debug,\n method,\n targets,\n provider,\n callProvider,\n } = instantiateProvider<Options>(\n factory,\n options,\n missingDependencies,\n dirname,\n () => debugLog,\n babelApi,\n );\n\n const createVisitor = method === \"entry-global\" ? v.entry : v.usage;\n\n const visitor = provider.visitor\n ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor])\n : createVisitor(callProvider);\n\n if (debug && debug !== presetEnvSilentDebugHeader) {\n console.log(`${provider.name}: \\`DEBUG\\` option`);\n console.log(`\\nUsing targets: ${stringifyTargetsMultiline(targets)}`);\n console.log(`\\nUsing polyfills with \\`${method}\\` method:`);\n }\n\n return {\n name: \"inject-polyfills\",\n visitor,\n\n pre() {\n debugLog = {\n polyfills: new Map(),\n found: false,\n providers: new Set(),\n missingDeps: new Set(),\n };\n\n // $FlowIgnore - Flow doesn't support optional calls\n provider.pre?.apply(this, arguments);\n },\n post() {\n // $FlowIgnore - Flow doesn't support optional calls\n provider.post?.apply(this, arguments);\n\n if (missingDependencies !== false) {\n if (missingDependencies.log === \"per-file\") {\n deps.logMissing(debugLog.missingDeps);\n } else {\n deps.laterLogMissing(debugLog.missingDeps);\n }\n }\n\n if (!debug) return;\n\n if (this.filename) console.log(`\\n[${this.filename}]`);\n\n if (debugLog.polyfills.size === 0) {\n console.log(\n method === \"entry-global\"\n ? debugLog.found\n ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.`\n : `The entry point for the ${provider.name} polyfill has not been found.`\n : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`,\n );\n\n return;\n }\n\n if (method === \"entry-global\") {\n console.log(\n `The ${provider.name} polyfill entry has been replaced with ` +\n `the following polyfills:`,\n );\n } else {\n console.log(\n `The ${provider.name} polyfill added the following polyfills:`,\n );\n }\n\n for (const [name, support] of debugLog.polyfills) {\n if (support) {\n const filteredTargets = getInclusionReasons(name, targets, support);\n\n const formattedTargets = JSON.stringify(filteredTargets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n\n console.log(` ${name} ${formattedTargets}`);\n } else {\n console.log(` ${name}`);\n }\n }\n },\n };\n });\n}\n\nfunction mapGetOr(map, key, getDefault) {\n let val = map.get(key);\n if (val === undefined) {\n val = getDefault();\n map.set(key, val);\n }\n return val;\n}\n"],"names":["types","t","template","babel","default","intersection","a","b","result","Set","forEach","v","has","add","object","key","Object","prototype","hasOwnProperty","call","getType","target","toString","slice","resolveId","path","isIdentifier","scope","hasBinding","node","name","deopt","evaluate","resolveKey","computed","parent","isStringLiteral","value","isMemberExpression","get","sym","resolveSource","obj","id","placement","undefined","isRegExpLiteral","isFunction","getImportSource","specifiers","length","source","getRequireSource","isExpressionStatement","expression","isRequire","isCallExpression","callee","arguments","hoist","_blockHoist","createUtilsGetter","cache","prog","findParent","p","isProgram","injectGlobalImport","url","storeAnonymous","isScript","statement","ast","importDeclaration","injectNamedImport","hint","storeNamed","generateUidIdentifier","importSpecifier","injectDefaultImport","importDefaultSpecifier","ImportsCache","constructor","resolver","_imports","WeakMap","_anonymousImports","_lastImports","_resolver","programPath","getVal","_normalizeKey","imports","_ensure","sourceType","stringLiteral","_injectImport","Map","identifier","set","lastImport","container","body","insertAfter","unshiftContainer","map","Collection","collection","presetEnvSilentDebugHeader","stringifyTargetsMultiline","targets","JSON","stringify","prettifyTargets","patternToRegExp","pattern","RegExp","buildUnusedError","label","unused","original","String","join","buldDuplicatesError","duplicates","size","Array","from","validateIncludeExclude","provider","polyfills","includePatterns","excludePatterns","current","filter","regexp","matched","polyfill","test","include","unusedInclude","exclude","unusedExclude","Error","applyMissingDependenciesDefaults","options","babelApi","missingDependencies","caller","log","inject","all","callProvider","property","kind","ReferencedIdentifier","getBindingIdentifier","MemberExpression","binding","getBinding","isImportNamespaceSpecifier","ObjectPattern","parentPath","isVariableDeclarator","isAssignmentExpression","grand","isNewExpression","prop","isObjectProperty","BinaryExpression","operator","ImportDeclaration","Program","bodyPath","nativeRequireResolve","parseFloat","process","versions","require","createRequire","import","meta","resolve","dirname","moduleName","absoluteImports","basedir","paths","requireResolve","sync","err","code","assign","logMissing","missingDeps","deps","sort","console","warn","exitCode","allMissingDeps","laterLogMissingDependencies","debounce","laterLogMissing","PossibleGlobalObjects","createMetaResolver","static","staticP","instance","instanceP","global","globalP","desc","getTargets","_getTargets","resolveOptions","method","targetsOption","ignoreBrowserslistConfig","configPath","debug","shouldInjectPolyfill","providerOptions","methodName","targetsObj","isArray","browsers","instantiateProvider","factory","debugLog","getUtils","polyfillsSupport","polyfillsNames","filterPolyfills","depsCache","api","shouldInject","isRequired","compatData","includes","excludes","found","assertDependency","version","dep","mapGetOr","keys","payload","utils","definePolyfillProvider","declare","assertVersion","traverse","createVisitor","visitor","visitors","merge","pre","providers","apply","post","filename","support","filteredTargets","getInclusionReasons","formattedTargets","replace","getDefault","val"],"mappings":"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"}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.resolve = resolve;
exports.has = has;
exports.logMissing = logMissing;
exports.laterLogMissing = laterLogMissing;
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
throw new Error(`"absoluteImports" is not supported in bundles prepared for the browser.`);
} // eslint-disable-next-line no-unused-vars
function has(basedir, name) {
return true;
} // eslint-disable-next-line no-unused-vars
function logMissing(missingDeps) {} // eslint-disable-next-line no-unused-vars
function laterLogMissing(missingDeps) {}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.stringifyTargetsMultiline = stringifyTargetsMultiline;
exports.stringifyTargets = stringifyTargets;
exports.presetEnvSilentDebugHeader = void 0;
var _helperCompilationTargets = require("@babel/helper-compilation-targets");
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
exports.presetEnvSilentDebugHeader = presetEnvSilentDebugHeader;
function stringifyTargetsMultiline(targets) {
return JSON.stringify((0, _helperCompilationTargets.prettifyTargets)(targets), null, 2);
}
function stringifyTargets(targets) {
return JSON.stringify(targets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment