summaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-transform-simplify-comparison-operators
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-simplify-comparison-operators
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-transform-simplify-comparison-operators')
-rw-r--r--node_modules/babel-plugin-transform-simplify-comparison-operators/README.md49
-rw-r--r--node_modules/babel-plugin-transform-simplify-comparison-operators/lib/index.js109
-rw-r--r--node_modules/babel-plugin-transform-simplify-comparison-operators/package.json14
3 files changed, 172 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-transform-simplify-comparison-operators/README.md b/node_modules/babel-plugin-transform-simplify-comparison-operators/README.md
new file mode 100644
index 00000000..3cd9f2f9
--- /dev/null
+++ b/node_modules/babel-plugin-transform-simplify-comparison-operators/README.md
@@ -0,0 +1,49 @@
+# babel-plugin-transform-simplify-comparison-operators
+
+Convert `===` and `!==` to `==` and `!=` if their types are inferred to be the same.
+
+## Example
+
+**In**
+
+```javascript
+typeof foo === "object";
+```
+
+**Out**
+
+```javascript
+typeof foo == "object";
+```
+
+## Installation
+
+```sh
+npm install babel-plugin-transform-simplify-comparison-operators --save-dev
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+ "plugins": ["transform-simplify-comparison-operators"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-simplify-comparison-operators script.js
+```
+
+### Via Node API
+
+```javascript
+require("@babel/core").transform("code", {
+ plugins: ["transform-simplify-comparison-operators"]
+});
+```
diff --git a/node_modules/babel-plugin-transform-simplify-comparison-operators/lib/index.js b/node_modules/babel-plugin-transform-simplify-comparison-operators/lib/index.js
new file mode 100644
index 00000000..008b34a2
--- /dev/null
+++ b/node_modules/babel-plugin-transform-simplify-comparison-operators/lib/index.js
@@ -0,0 +1,109 @@
+"use strict";
+
+module.exports = function ({
+ types: t
+}) {
+ // custom implementation of getTypeAnnotation that fixes
+ // the type information that is lost during sequence expression transformation
+ // https://github.com/babel/minify/issues/323
+ function customTypeAnnotation(path) {
+ if (path.typeAnnotation) {
+ return path.typeAnnotation;
+ } // We are not handling the case of literals and other base types
+ // since they are already handled via getTypeAnnotation
+
+
+ const node = path.node;
+ const binding = path.parentPath.scope.getBinding(node.name);
+ const types = [];
+
+ if (binding && binding.constantViolations) {
+ if (binding.identifier.typeAnnotation) {
+ return binding.identifier.typeAnnotation;
+ }
+
+ if (binding.constantViolations) {
+ const violations = binding.constantViolations;
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = violations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ let violation = _step.value;
+ types.push(violation.getTypeAnnotation());
+ }
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
+ _iterator.return();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+ }
+ }
+
+ if (types.length > 0) {
+ return t.createUnionTypeAnnotation(types);
+ }
+
+ return types;
+ } // Based on the type inference in Babel
+
+
+ function baseTypeStrictlyMatches(left, right) {
+ let leftTypes, rightTypes;
+
+ if (t.isIdentifier(left)) {
+ leftTypes = customTypeAnnotation(left);
+ } else if (t.isIdentifier(right)) {
+ rightTypes = customTypeAnnotation(right);
+ } // Early exit
+
+
+ if (t.isAnyTypeAnnotation(leftTypes) || t.isAnyTypeAnnotation(rightTypes)) {
+ return false;
+ }
+
+ leftTypes = [].concat(leftTypes, left.getTypeAnnotation());
+ rightTypes = [].concat(rightTypes, right.getTypeAnnotation());
+ leftTypes = t.createUnionTypeAnnotation(leftTypes);
+ rightTypes = t.createUnionTypeAnnotation(rightTypes);
+
+ if (!t.isAnyTypeAnnotation(leftTypes) && t.isFlowBaseAnnotation(leftTypes)) {
+ return leftTypes.type === rightTypes.type;
+ }
+ }
+
+ return {
+ name: "transform-simplify-comparison-operators",
+ visitor: {
+ // simplify comparison operations if we're 100% certain
+ // that each value will always be of the same type
+ BinaryExpression(path) {
+ const node = path.node;
+ const op = node.operator;
+
+ if (op !== "===" && op !== "!==") {
+ return;
+ }
+
+ const left = path.get("left");
+ const right = path.get("right");
+ const strictMatch = baseTypeStrictlyMatches(left, right);
+
+ if (strictMatch) {
+ node.operator = node.operator.slice(0, -1);
+ }
+ }
+
+ }
+ };
+}; \ No newline at end of file
diff --git a/node_modules/babel-plugin-transform-simplify-comparison-operators/package.json b/node_modules/babel-plugin-transform-simplify-comparison-operators/package.json
new file mode 100644
index 00000000..70b27434
--- /dev/null
+++ b/node_modules/babel-plugin-transform-simplify-comparison-operators/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "babel-plugin-transform-simplify-comparison-operators",
+ "version": "6.9.4",
+ "description": "Convert === and !== to == and != if their types are inferred to be the same.",
+ "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-transform-simplify-comparison-operators"
+}