summaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-minify-simplify/lib/helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/babel-plugin-minify-simplify/lib/helpers.js')
-rw-r--r--node_modules/babel-plugin-minify-simplify/lib/helpers.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-minify-simplify/lib/helpers.js b/node_modules/babel-plugin-minify-simplify/lib/helpers.js
new file mode 100644
index 00000000..dfbe7c2a
--- /dev/null
+++ b/node_modules/babel-plugin-minify-simplify/lib/helpers.js
@@ -0,0 +1,56 @@
+"use strict";
+
+const VOID_0 = t => t.unaryExpression("void", t.numericLiteral(0), true);
+
+const evaluate = require("babel-helper-evaluate-path"); // Types as Symbols - for comparing types
+
+
+const types = {}; // This is a test key which is used to avoid Object.keys check
+// Object.keys() check is really expensive
+// https://gist.github.com/vigneshshanmugam/c766550ecd02292dcdfbf0bf013b9d3d
+
+const testKey = "Expression";
+
+const typeSymbols = t => {
+ // don't recompute
+ if (types[testKey] !== undefined) {
+ return types;
+ }
+
+ t.TYPES.forEach(type => {
+ types[type] = Symbol.for(type);
+ });
+ return types;
+};
+
+const isNodeOfType = (t, node, typeSymbol) => typeof typeSymbol !== "symbol" ? false : t["is" + Symbol.keyFor(typeSymbol)](node);
+
+const isPatternMatchesPath = t => function _isPatternMatchesPath(patternValue, inputPath) {
+ if (Array.isArray(patternValue)) {
+ for (let i = 0; i < patternValue.length; i++) {
+ if (_isPatternMatchesPath(patternValue[i], inputPath)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ if (typeof patternValue === "function") {
+ return patternValue(inputPath);
+ }
+
+ if (isNodeOfType(t, inputPath.node, patternValue)) return true;
+ const evalResult = evaluate(inputPath);
+ if (!evalResult.confident || !inputPath.isPure()) return false;
+ return evalResult.value === patternValue;
+};
+
+module.exports = {
+ VOID_0,
+ // Types as Symbols
+ typeSymbols,
+ // This is required for resolving type aliases
+ isNodeOfType,
+ isPatternMatchesPath
+}; \ No newline at end of file