Skip to content

Latest commit

 

History

History
 
 

plugin-minify

@putout/plugin-minify NPM version

🐊Putout plugin adds support of minifiers used in @putout/minify and minify.

Install

npm i @putout/plugin-putout -D

Rules

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