diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
| commit | efbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch) | |
| tree | 2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/babel-plugin-minify-guarded-expressions | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-minify-guarded-expressions')
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" +} |
