babel-plugin-minify-constant-folding
Advanced tools
Comparing version 0.1.1 to 0.1.2
"use strict"; | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
var evaluate = require("babel-helper-evaluate-path"); | ||
module.exports = function (_ref) { | ||
var t = _ref.types, | ||
traverse = _ref.traverse; | ||
var _require = require("./replacements"), | ||
FALLBACK_HANDLER = _require.FALLBACK_HANDLER; | ||
function getName(member) { | ||
if (member.computed) { | ||
switch (member.property.type) { | ||
case "StringLiteral": | ||
case "NumericLiteral": | ||
return member.property.value; | ||
case "TemplateLiteral": | ||
return; | ||
} | ||
} else { | ||
return member.property.name; | ||
} | ||
} | ||
function swap(path, member, handlers) { | ||
var key = getName(member); | ||
if (key === undefined) return; | ||
var handler = handlers[key]; | ||
if (typeof handler !== "function") { | ||
if (typeof handlers[FALLBACK_HANDLER] === "function") { | ||
handler = handlers[FALLBACK_HANDLER].bind(member.object, key); | ||
} else { | ||
return false; | ||
} | ||
} | ||
for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { | ||
args[_key - 3] = arguments[_key]; | ||
} | ||
var replacement = handler.apply(member.object, args); | ||
if (replacement) { | ||
path.replaceWith(replacement); | ||
return true; | ||
} | ||
return false; | ||
} | ||
module.exports = function (babel) { | ||
var replacements = require("./replacements.js")(babel); | ||
var seen = Symbol("seen"); | ||
var t = babel.types, | ||
traverse = babel.traverse; | ||
return { | ||
@@ -119,2 +163,19 @@ name: "minify-constant-folding", | ||
} | ||
}, | ||
CallExpression(path) { | ||
var node = path.node; | ||
var member = node.callee; | ||
if (t.isMemberExpression(member)) { | ||
var helpers = replacements[member.object.type]; | ||
if (!helpers || !helpers.calls) return; | ||
swap.apply(undefined, [path, member, helpers.calls].concat(_toConsumableArray(node.arguments))); | ||
} | ||
}, | ||
MemberExpression(path) { | ||
var member = path.node; | ||
var helpers = replacements[member.object.type]; | ||
if (!helpers || !helpers.members) return; | ||
swap(path, member, helpers.members); | ||
} | ||
@@ -121,0 +182,0 @@ } |
{ | ||
"name": "babel-plugin-minify-constant-folding", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/babel/babili#readme", |
# babel-plugin-minify-constant-folding | ||
Tries to evaluate expressions and inline the result. For now only deals with numbers and strings. | ||
Tries to evaluate expressions and inline the result. | ||
@@ -13,3 +13,18 @@ ## Example | ||
4 | 3; | ||
"b" + a + "c" + "d" + g + z + "f" + "h" + "z" | ||
"b" + a + "c" + "d" + g + z + "f" + "h" + "i" | ||
[a, b, c].concat([d, e], f, g, [h]); | ||
["a", "b", "c"].join(); | ||
["a", "b", "c"].join('@'); | ||
[1, 2, 3].length; | ||
[1, 2, 3][1]; | ||
[1, 2, 3].shift(); | ||
[1, 2, 3].slice(0, 2); | ||
[a, b, c].pop(); | ||
[a, b, c].reverse(); | ||
"a,b,c".split(","); | ||
"abc"[0]; | ||
"abc".charAt(); | ||
"abc".charAt(1); | ||
"abc".length; | ||
``` | ||
@@ -23,3 +38,19 @@ | ||
7; | ||
"b" + a + "cd" + g + z + "fhz"; | ||
"b" + a + "cd" + g + z + "fhi"; | ||
[a, b, c, d, e, f, g, h]; | ||
"a,b,c"; | ||
"a@b@c"; | ||
3; | ||
2; | ||
2; | ||
[1, 2]; | ||
c; | ||
[c, b, a]; | ||
["a", "b", "c"]; | ||
"a"; | ||
"a"; | ||
"a"; | ||
"b"; | ||
3; | ||
``` | ||
@@ -26,0 +57,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
12097
5
291
87