@putout/plugin-minify
πPutout plugin adds support of minifiers used in @putout/minify
and minify
.
Install
npm i @putout/plugin-putout -D
Rules
{
"rules": {
"minify/apply-ternary": "on",
"minify/apply-template-literal": "on",
"minify/convert-var-to-const": "on",
"minify/convert-if-to-logical": "on",
"minify/convert-strict-equal-to-equal": "on",
"minify/convert-array-from-to-spread": "on",
"minify/extract-body": "on",
"minify/expand-bindings": "on",
"minify/mangle-names": ["on", {
"mangleClassNames": true
}],
"minify/merge-variables": "on",
"minify/merge-loops": "on",
"minify/remove-var-undefined": "on",
"minify/remove-return-undefined": "on",
"minify/simplify-floor": "on",
"minify/shorten-names": "on",
"minify/inline": "on",
"minify/types": "on"
}
}
apply-ternary
Check out in πPutout Editor.
β Example of incorrect code
if (a)
b();
else
c();
β Example of correct code
a ? b() : c();
apply-template-literal
Not only short, but also fast:
// 34.795ms
for (let i = 0; i < 1_000_000; i++)
String(i);
// 28.302ms
for (let i = 0; i < 1_000_000; i++)
i.toString();
// 24.818ms
for (let i = 0; i < 1_000_000; i++)
`${i}`;
β Example of incorrect code
x.toString();
String(x);
β Example of correct code
String(x);
convert-if-to-logical
Check out in πPutout Editor.
β Example of incorrect code
if (a)
console.log('hello');
if (b) {
console.log('hello');
console.log('world');
}
if (a) {
console.log(1);
console.log(2);
} else {
console.log(3);
console.log(4);
}
β Example of correct code
a && console.log('hello');
b && (console.log('hello'), console.log('world'));
a ? (console.log(1), console.log(2)) : (console.log(3), console.log(4));
convert-const-to-var
β Example of incorrect code
const a = 5;
β Example of correct code
var a = 5;
convert-strict-equal-to-equal
Check out in πPutout Editor.
β Example of incorrect code
a === b;
β Example of correct code
a === b;
convert-array-from-to-spread
β Example of incorrect code
Array
.from(a)
.map((x, i) => `${i}: ${x}`);
β Example of correct code
[...a].map((x, i) => `${i}: ${x}`);
extract-body
Check out in πPutout Editor.
β Example of incorrect code
if (x)
return;
const hello = () => {
return 'world';
};
β Example of correct code
if (x)
return;
const hello = () => 'world';
expand-bindings
Check out in πPutout Editor.
β Example of incorrect code
const y = 'abc';
const x = y;
const fn = require(x);
const a = 5;
const b = a;
const c = b;
fn(c);
β Example of correct code
require('abc')(5);
remove-var-undefined
Checkout in πPutout Editor.
β Example of incorrect code
var a = undefined;
β Example of correct code
var a;
remove-return-undefined
β Example of incorrect code
const fn = () => {
if (a)
return undefined;
return undefined;
};
β Example of correct code
const fn = () => {
if (a)
return;
};
mangle-names
Check out in πPutout Editor.
β Example of incorrect code
function generate() {
const hello = 'hi';
return hello;
}
β Example of correct code
function generate() {
const a = 'hi';
return a;
}
When you want to preserve class names use
{
"rules": {
"minify/mangle-names": ["on", {
"mangleClassNames": false
}]
}
}
In this case you will see:
β Example of incorrect code
class Hello {
world() {
const hello = 'hello';
return hello;
}
}
β Example of correct code
class Hello {
world() {
const a = 'hello';
return a;
}
}
merge-variables
Check out in πPutout Editor.
β Example of incorrect code
var a, b;
β Example of correct code
var a;
var b;
merge-loops
Check out in πPutout Editor.
β Example of incorrect code
for (const aa of a)
d.push(aa);
for (const bb of b)
d.push(bb);
β Example of correct code
for (const aa of [...a, ...b])
d.push(aa);
simplify-floor
Not only shorter, but faster:
// 5.027ms
for (let i = 0; i < 1_000_000; i++)
Math.floor(i + 0.5);
// 3.493ms
for (let i = 0; i < 1_000_000; i++)
~~(i + 0.5);
β Example of incorrect code
Math.floor(x);
β Example of correct code
~~x;
shorten-names
Feats good to @putout/plugin-declare
.
Check out in πPutout Editor.
β Example of incorrect code
const a = (b) => {
Object.keys(b);
};
const b = (keys) => {
Object.keys(keys);
};
Object.freeze(a);
Object.defineProperty(b);
β Example of correct code
const a = (b) => {
keys(b);
};
const b = (keys) => {
Object.keys(keys);
};
freeze(a);
defineProperty(b);
types
Check out in πPutout Editor.
β Example of incorrect code
const a = undefined;
const b = true;
const c = false;
β Example of correct code
const a = void 0;
const b = !0;
const c = !1;
inline
Check out in πPutout Editor.
β Example of incorrect code
let x = 1;
--x;
if (!x)
console.log('hello');
β Example of correct code
let x = 1;
if (!--x)
console.log('hello');
License
MIT