@putout/plugin-minify 
πPutout plugin adds support of minifiers used in @putout/minify and minify.
Install
npm i @putout/plugin-putout -DRules
- β apply-template-literal;
- β apply-ternary;
- β convert-array-from-to-spread;
- β convert-const-to-let;
- β convert-let-to-var;
- β convert-if-to-logical;
- β convert-return-to-sequence-expression;
- β convert-strict-equal-to-equal;
- β expand-bindings;
- β extract-body;
- β join-continued-strings;
- β inline;
- β mangle-names;
- β merge-assignment-expressions;
- β merge-loops;
- β merge-variables;
- β remove-return-undefined;
- β remove-var-undefined;
- β shorten-names;j
- β simplify-floor;
- β types;
Config
{
"rules": {
"minify/apply-ternary": "on",
"minify/apply-template-literal": "on",
"minify/convert-const-to-let": "on",
"minify/convert-let-to-var": "on",
"minify/convert-if-to-logical": "on",
"minify/convert-strict-equal-to-equal": "on",
"minify/convert-array-from-to-spread": "on",
"minify/convert-return-to-sequence-expression": "on",
"minify/extract-body": "on",
"minify/expand-bindings": "on",
"minify/mangle-names": ["on", {
"mangleClassNames": true
}],
"minify/merge-assignment-expressions": "on",
"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/join-continued-strings": "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-let
β Example of incorrect code
const a = 5;β Example of correct code
let a = 5;convert-let-to-var
Lexical declaration cannot appear in a single-statement context(c) MDN
Checkout in πPutout Editor.
β Example of incorrect code
javascript: let a = 3;
if (5)
let b = 3;β Example of correct code
javascript: var a = 3;
if (5)
var b = 3;convert-return-to-sequence-expression
Check out in πPutout Editor.
β Example of incorrect code
() => {
d();
return 1;
};β Example of correct code
() => {
d();
return 1;
};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-assignment-expressions
Check out in πPutout Editor.
β Example of incorrect code
a = 'hello';
b = 'hello';
c = 'hello';
d = 'hello';β Example of correct code
a = b = c = d = 'hello';merge-variables
Check out in πPutout Editor.
β Example of incorrect code
var a;
var b;β Example of correct code
var a, 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;join-continued-strings
Join continued strings to one line. Check out in πPutout Editor.
β Example of incorrect code
console.log(`\
1\
2\
3`, '\
a\
b\
c');β Example of correct code
console.log(` 1 2 3`, ' a b c');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