summaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-minify-guarded-expressions
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-minify-guarded-expressions
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-minify-guarded-expressions')
-rw-r--r--node_modules/babel-plugin-minify-guarded-expressions/LICENSE22
-rw-r--r--node_modules/babel-plugin-minify-guarded-expressions/README.md49
-rw-r--r--node_modules/babel-plugin-minify-guarded-expressions/lib/index.js80
-rw-r--r--node_modules/babel-plugin-minify-guarded-expressions/package.json19
4 files changed, 170 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-minify-guarded-expressions/LICENSE b/node_modules/babel-plugin-minify-guarded-expressions/LICENSE
new file mode 100644
index 00000000..f9f0a7f3
--- /dev/null
+++ b/node_modules/babel-plugin-minify-guarded-expressions/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2015-2016 Amjad Masad <amjad.masad@gmail.com>
+
+MIT License
+
+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.
diff --git a/node_modules/babel-plugin-minify-guarded-expressions/README.md b/node_modules/babel-plugin-minify-guarded-expressions/README.md
new file mode 100644
index 00000000..6927bccc
--- /dev/null
+++ b/node_modules/babel-plugin-minify-guarded-expressions/README.md
@@ -0,0 +1,49 @@
+# babel-plugin-minify-guarded-expressions
+
+## Example
+
+**In**
+
+```javascript
+!x && foo();
+alert(0 && new Foo());
+```
+
+**Out**
+
+```javascript
+x || foo();
+alert(0);
+```
+
+## Installation
+
+```sh
+npm install babel-plugin-minify-guarded-expressions --save-dev
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+ "plugins": ["minify-guarded-expressions"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins minify-guarded-expressions script.js
+```
+
+### Via Node API
+
+```javascript
+require("@babel/core").transform("code", {
+ plugins: ["minify-guarded-expressions"]
+});
+```
diff --git a/node_modules/babel-plugin-minify-guarded-expressions/lib/index.js b/node_modules/babel-plugin-minify-guarded-expressions/lib/index.js
new file mode 100644
index 00000000..5cc5f192
--- /dev/null
+++ b/node_modules/babel-plugin-minify-guarded-expressions/lib/index.js
@@ -0,0 +1,80 @@
+"use strict";
+
+const evaluate = require("babel-helper-evaluate-path");
+
+function evaluateTruthy(path) {
+ const res = evaluate(path);
+ if (res.confident) return !!res.value;
+}
+
+module.exports = function ({
+ types: t
+}) {
+ const flipExpressions = require("babel-helper-flip-expressions")(t);
+
+ return {
+ name: "minify-guarded-expressions",
+ visitor: {
+ // Convert guarded expressions
+ // !a && b() --> a || b();
+ // This could change the return result of the expression so we only do it
+ // on things where the result is ignored.
+ LogicalExpression: {
+ enter: [function (path) {
+ const node = path.node;
+ const left = path.get("left");
+ const right = path.get("right"); // issues - 171, 174, 176
+ // we assume that it is returned/assigned/part of a bigger expression
+ // or utilized somehow
+ // we check if we shouldBail only when evaluating
+ // the rightside of the expression;
+ // if the left side is evaluated to be deterministic,
+ // we can safely replace the entire expression
+
+ const shouldBail = !path.parentPath.isExpressionStatement();
+
+ if (node.operator === "&&") {
+ const leftTruthy = evaluateTruthy(left);
+
+ if (leftTruthy === false) {
+ // Short-circuit
+ path.replaceWith(node.left);
+ } else if (leftTruthy === true && left.isPure()) {
+ path.replaceWith(node.right);
+ } else if (evaluateTruthy(right) === false && right.isPure() && !shouldBail) {
+ path.replaceWith(node.left);
+ }
+ } else if (node.operator === "||") {
+ const leftTruthy = evaluateTruthy(left);
+
+ if (leftTruthy === false && left.isPure()) {
+ path.replaceWith(node.right);
+ } else if (leftTruthy === true) {
+ // Short-circuit
+ path.replaceWith(node.left);
+ } else if (evaluateTruthy(right) === false && right.isPure() && !shouldBail) {
+ path.replaceWith(node.left);
+ }
+ }
+ }, function (path) {
+ const node = path.node;
+
+ if (flipExpressions.hasSeen(node)) {
+ return;
+ }
+
+ if (!path.parentPath.isExpressionStatement() && !(path.parentPath.isSequenceExpression() && path.parentPath.parentPath.isExpressionStatement())) {
+ return;
+ } // Start counting savings from one since we can ignore the last
+ // expression.
+
+
+ if (flipExpressions.shouldFlip(node, 1)) {
+ const newNode = flipExpressions.flip(node, true);
+ path.replaceWith(newNode);
+ }
+ }]
+ }
+ }
+ };
+}; \ No newline at end of file
diff --git a/node_modules/babel-plugin-minify-guarded-expressions/package.json b/node_modules/babel-plugin-minify-guarded-expressions/package.json
new file mode 100644
index 00000000..aed7a70e
--- /dev/null
+++ b/node_modules/babel-plugin-minify-guarded-expressions/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "babel-plugin-minify-guarded-expressions",
+ "version": "0.4.4",
+ "description": "",
+ "keywords": [
+ "babel-plugin"
+ ],
+ "homepage": "https://github.com/babel/minify#readme",
+ "bugs": "https://github.com/babel/minify/issues",
+ "license": "MIT",
+ "author": "amasad",
+ "main": "lib/index.js",
+ "repository": "https://github.com/babel/minify/tree/master/packages/babel-plugin-minify-guarded-expressions",
+ "dependencies": {
+ "babel-helper-evaluate-path": "^0.5.0",
+ "babel-helper-flip-expressions": "^0.4.3"
+ },
+ "gitHead": "e1d0c52f5b501f5849741be6db56f968094854eb"
+}