summaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-transform-remove-console/lib
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
commitefbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch)
tree2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/babel-plugin-transform-remove-console/lib
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-transform-remove-console/lib')
-rw-r--r--node_modules/babel-plugin-transform-remove-console/lib/index.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-transform-remove-console/lib/index.js b/node_modules/babel-plugin-transform-remove-console/lib/index.js
new file mode 100644
index 00000000..3d910896
--- /dev/null
+++ b/node_modules/babel-plugin-transform-remove-console/lib/index.js
@@ -0,0 +1,82 @@
+"use strict";
+
+module.exports = function ({
+ types: t
+}) {
+ return {
+ name: "transform-remove-console",
+ visitor: {
+ CallExpression(path, state) {
+ const callee = path.get("callee");
+ if (!callee.isMemberExpression()) return;
+
+ if (isIncludedConsole(callee, state.opts.exclude)) {
+ // console.log()
+ if (path.parentPath.isExpressionStatement()) {
+ path.remove();
+ } else {
+ path.replaceWith(createVoid0());
+ }
+ } else if (isIncludedConsoleBind(callee, state.opts.exclude)) {
+ // console.log.bind()
+ path.replaceWith(createNoop());
+ }
+ },
+
+ MemberExpression: {
+ exit(path, state) {
+ if (isIncludedConsole(path, state.opts.exclude) && !path.parentPath.isMemberExpression()) {
+ if (path.parentPath.isAssignmentExpression() && path.parentKey === "left") {
+ path.parentPath.get("right").replaceWith(createNoop());
+ } else {
+ path.replaceWith(createNoop());
+ }
+ }
+ }
+
+ }
+ }
+ };
+
+ function isGlobalConsoleId(id) {
+ const name = "console";
+ return id.isIdentifier({
+ name
+ }) && !id.scope.getBinding(name) && id.scope.hasGlobal(name);
+ }
+
+ function isExcluded(property, excludeArray) {
+ return excludeArray && excludeArray.some(name => property.isIdentifier({
+ name
+ }));
+ }
+
+ function isIncludedConsole(memberExpr, excludeArray) {
+ const object = memberExpr.get("object");
+ const property = memberExpr.get("property");
+ if (isExcluded(property, excludeArray)) return false;
+ if (isGlobalConsoleId(object)) return true;
+ return isGlobalConsoleId(object.get("object")) && (property.isIdentifier({
+ name: "call"
+ }) || property.isIdentifier({
+ name: "apply"
+ }));
+ }
+
+ function isIncludedConsoleBind(memberExpr, excludeArray) {
+ const object = memberExpr.get("object");
+ if (!object.isMemberExpression()) return false;
+ if (isExcluded(object.get("property"), excludeArray)) return false;
+ return isGlobalConsoleId(object.get("object")) && memberExpr.get("property").isIdentifier({
+ name: "bind"
+ });
+ }
+
+ function createNoop() {
+ return t.functionExpression(null, [], t.blockStatement([]));
+ }
+
+ function createVoid0() {
+ return t.unaryExpression("void", t.numericLiteral(0));
+ }
+}; \ No newline at end of file