@putout/plugin-minify
v8.19.2
Published
πPutout plugin contains minifiers
Downloads
255
Maintainers
Readme
@putout/plugin-minify
πPutout plugin adds support of minifiers used in @putout/minify
and minify
.
Install
npm i @putout/plugin-putout -D
Rules
- β apply-template-literal;
- β apply-ternary;
- β convert-array-from-to-spread;
- β convert-const-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-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/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-var
β Example of incorrect code
const a = 5;
β Example of correct code
var a = 5;
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