Skip to content
/ uglier Public

A simple tool to take JS code and make it much, much worse.

License

Notifications You must be signed in to change notification settings

raydog/uglier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Uglier

Build Status Coverage Status NPM Version

Uglier is a super simple tool that takes modern JS and makes it objectively worse.

Input:

// Print fibonacci sequence up to a given value:
function *fibon(limit) {
  var a = 0, b = 1;
  while (a <= limit) {
    yield a;
    [a, b] = [b, a+b];
  }
}

for (let val of fibon(89)) {
  console.log(val);
}

Output:

function*fibon(limit){let a=0,b=1;while((a<=limit)){yield a;([a,b]=[b,(
    a        +        b       )       ]       )       ;       }       }
for ( let  val  of  fibon ( 89 ) ) { ( console . log ) ( '>>' , val );}

There. Much better!

"Features" include:

  • Supports most Javascript features supported by Babel's parser. Also supports many Flow types.
  • Convenient globbing features make it easy to overhaul an entire repo.
  • All comments are removed. I mean, why would anyone spend precious bytes of storage on code that doesn't DO anything?
  • Several formatting features (like the number of spaces when indenting or the target characters per line) are determined by a hash of the file's AST structure. So minor changes (variable names, comments, spacing) won't change anything. But adding another variable would cause the whole file to update. Take that, git blame!

Making Bad Decisions (AKA: Installing)

  • npm: npm install --save-dev uglier
  • yarn: yarn add -D uglier

Inflicting Maximum Damage (AKA: Running)

Usage: uglier [options...] <glob> ...

Options:

  • <glob>
    Globs provided in the command line will match file for updating.

  • -p, --print
    Run in "print" mode, where the results are written to stdout. This is the default, so you normally wouldn't have to use this option.

  • -o, --overwrite
    Run in "overwrite" mode, where any matched file that we can parse will be updated.

  • -x <glob>, --exclude=<glob>
    Exclude files that match a certain Glob pattern from the list of files to update. Multiple exclusion Globs can be provided by using this option multiple times. Default exclusion pattern is **/node_modules/**

  • -h, --help
    Print a help message.

  • -v, --version
    Print the current uglier version.

Globs:

Globs are handled with the excellent globby library, which uses node-glob for the actual glob parsing. That syntax is described here.

License

MIT.

About

A simple tool to take JS code and make it much, much worse.

Resources

License

Stars

Watchers

Forks

Packages

No packages published