arrow-left

All pages
gitbookPowered by GitBook
1 of 24

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

UglifyJS 2

arrow-up-right

UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit.

This page documents the command line utility. For API and internals documentation see my websitearrow-up-right. There's also an in-browser online demoarrow-up-right (for Firefox, Chrome and probably Safari).

hashtag
Note:

  • uglify-js only supports ECMAScript 5 (ES5).

  • Support for const is , and may not be

    transformed properly.

  • Those wishing to minify ES2015+ (ES6+) should use the npm package .

hashtag
Install

First make sure you have installed the latest version of (You may need to restart your computer after this step).

From NPM for use as a command line app:

From NPM for programmatic use:

hashtag
Usage

UglifyJS2 can take multiple input files. It's recommended that you pass the input files first, then pass the options. UglifyJS will parse input files in sequence and apply any compression options. The files are parsed in the same global scope, that is, a reference from a file to some variable/function declared in another file will be matched properly.

If you want to read from STDIN instead, pass a single dash instead of input files.

If you wish to pass your options before the input files, separate the two with a double dash to prevent input files being used as option arguments:

The available options are:

Specify --output (-o) to declare the output file. Otherwise the output goes to STDOUT.

hashtag
Source map options

UglifyJS2 can generate a source map file, which is highly useful for debugging your compressed JavaScript. To get a source map, pass --source-map output.js.map (full path to the file where you want the source map dumped).

Additionally you might need --source-map-root to pass the URL where the original files can be found. In case you are passing full paths to input files to UglifyJS, you can use --prefix (-p) to specify the number of directories to drop from the path prefix when declaring files in the source map.

For example:

The above will compress and mangle file1.js and file2.js, will drop the output in foo.min.js and the source map in foo.min.js.map. The source mapping will refer to http://foo.com/src/js/file1.js and http://foo.com/src/js/file2.js (in fact it will list http://foo.com/src as the source map root, and the original files as js/file1.js and js/file2.js).

hashtag
Composed source map

When you're compressing JS code that was output by a compiler such as CoffeeScript, mapping to the JS code won't be too helpful. Instead, you'd like to map back to the original code (i.e. CoffeeScript). UglifyJS has an option to take an input source map. Assuming you have a mapping from CoffeeScript → compiled JS, UglifyJS can generate a map from CoffeeScript → compressed JS by mapping every token in the compiled JS to its original location.

To use this feature you need to pass --in-source-map /path/to/input/source.map or --in-source-map inline if the source map is included inline with the sources. Normally the input source map should also point to the file containing the generated JS, so if that's correct you can omit input files from the command line.

hashtag
Mangler options

To enable the mangler you need to pass --mangle (-m). The following (comma-separated) options are supported:

  • toplevel — mangle names declared in the toplevel scope (disabled by default).

  • eval — mangle names visible in scopes where eval or with are used (disabled by default).

When mangling is enabled but you want to prevent certain names from being mangled, you can declare those names with --reserved (-r) — pass a comma-separated list of names. For example:

to prevent the require, exports and $ names from being changed.

hashtag
Mangling property names (--mangle-props)

Note: this will probably break your code. Mangling property names is a separate step, different from variable name mangling. Pass --mangle-props. It will mangle all properties that are seen in some object literal, or that are assigned to. For example:

In the above code, foo, bar, baz, moo and boo will be replaced with single characters, while something() will be left as is.

In order for this to be of any use, we should avoid mangling standard JS names. For instance, if your code would contain x.length = 10, then length becomes a candidate for mangling and it will be mangled throughout the code, regardless if it's being used as part of your own objects or accessing an array's length. To avoid that, you can use --reserved-file to pass a filename that should contain the names to be excluded from mangling. This file can be used both for excluding variable names and property names. It could look like this, for example:

--reserved-file can be an array of file names (either a single comma-separated argument, or you can pass multiple --reserved-file arguments) — in this case it will exclude names from all those files.

A default exclusion file is provided in tools/domprops.json which should cover most standard JS and DOM properties defined in various browsers. Pass --reserve-domprops to read that in.

You can also use a regular expression to define which property names should be mangled. For example, --mangle-regex="/^_/" will only mangle property names that start with an underscore.

When you compress multiple files using this option, in order for them to work together in the end we need to ensure somehow that one property gets mangled to the same name in all of them. For this, pass --name-cache filename.json and UglifyJS will maintain these mappings in a file which can then be reused. It should be initially empty. Example:

Now, part1.js and part2.js will be consistent with each other in terms of mangled property names.

Using the name cache is not necessary if you compress all your files in a single call to UglifyJS.

hashtag
Mangling unquoted names (--mangle-props=unquoted or --mangle-props=2)

Using quoted property name (o["foo"]) reserves the property name (foo) so that it is not mangled throughout the entire script even when used in an unquoted style (o.foo). Example:

hashtag
Debugging property name mangling

You can also pass --mangle-props-debug in order to mangle property names without completely obscuring them. For example the property o.foo would mangle to o._$foo$_ with this option. This allows property mangling of a large codebase while still being able to debug the code and identify where mangling is breaking things.

You can also pass a custom suffix using --mangle-props-debug=XYZ. This would then mangle o.foo to o._$foo$XYZ_. You can change this each time you compile a script to identify how a property got mangled. One technique is to pass a random number on every compile to simulate mangling changing with different inputs (e.g. as you update the input script with new properties), and to help identify mistakes like writing mangled keys to storage.

hashtag
Compressor options

You need to pass --compress (-c) to enable the compressor. Optionally you can pass a comma-separated list of options. Options are in the form foo=bar, or just foo (the latter implies a boolean option that you want to set true; it's effectively a shortcut for foo=true).

  • sequences (default: true) -- join consecutive simple statements using the comma operator. May be set to a positive integer to specify the maximum number of consecutive comma sequences that will be generated. If this option is set to true then the default sequences limit is 200. Set option to false or 0 to disable. The smallest sequences length is 2. A sequences value of 1

hashtag
The unsafe option

It enables some transformations that might break code logic in certain contrived cases, but should be fine for most code. You might want to try it on your own code, it should reduce the minified size. Here's what happens when this flag is on:

  • new Array(1, 2, 3) or Array(1, 2, 3) → [ 1, 2, 3 ]

  • new Object() → {}

hashtag
Conditional compilation

You can use the --define (-d) switch in order to declare global variables that UglifyJS will assume to be constants (unless defined in scope). For example if you pass --define DEBUG=false then, coupled with dead code removal UglifyJS will discard the following from the output:

You can specify nested constants in the form of --define env.DEBUG=false.

UglifyJS will warn about the condition being always false and about dropping unreachable code; for now there is no option to turn off only this specific warning, you can pass warnings=false to turn off all warnings.

Another way of doing that is to declare your globals as constants in a separate file and include it into the build. For example you can have a build/defines.js file with the following:

and build your code like this:

UglifyJS will notice the constants and, since they cannot be altered, it will evaluate references to them to the value itself and drop unreachable code as usual. The build will contain the const declarations if you use them. If you are targeting < ES6 environments which does not support const, using var with reduce_vars (enabled by default) should suffice.

hashtag
Conditional compilation, API

You can also use conditional compilation via the programmatic API. With the difference that the property name is global_defs and is a compressor property:

hashtag
Beautifier options

The code generator tries to output shortest code possible by default. In case you want beautified output, pass --beautify (-b). Optionally you can pass additional arguments that control the code output:

  • beautify (default true) -- whether to actually beautify the output.

    Passing -b will set this to true, but you might need to pass -b even

    when you want to generate minified code, in order to specify additional

    arguments, so you can use -b beautify=false

hashtag
Keeping copyright notices or other comments

You can pass --comments to retain certain comments in the output. By default it will keep JSDoc-style comments that contain "@preserve", "@license" or "@cc_on" (conditional compilation for IE). You can pass --comments all to keep all the comments, or a valid JavaScript regexp to keep only comments that match this regexp. For example --comments '/foo|bar/' will keep only comments that contain "foo" or "bar".

Note, however, that there might be situations where comments are lost. For example:

Even though it has "@preserve", the comment will be lost because the inner function g (which is the AST node to which the comment is attached to) is discarded by the compressor as not referenced.

The safest comments where to place copyright information (or other info that needs to be kept in the output) are comments attached to toplevel nodes.

hashtag
Support for the SpiderMonkey AST

UglifyJS2 has its own abstract syntax tree format; for we can't easily change to using the SpiderMonkey AST internally. However, UglifyJS now has a converter which can import a SpiderMonkey AST.

For example is a super-fast parser that produces a SpiderMonkey AST. It has a small CLI utility that parses one file and dumps the AST in JSON on the standard output. To use UglifyJS to mangle and compress that:

The --spidermonkey option tells UglifyJS that all input files are not JavaScript, but JS code described in SpiderMonkey AST in JSON. Therefore we don't use our own parser in this case, but just transform that AST into our internal AST.

hashtag
Use Acorn for parsing

More for fun, I added the --acorn option which will use Acorn to do all the parsing. If you pass this option, UglifyJS will require("acorn").

Acorn is really fast (e.g. 250ms instead of 380ms on some 650K code), but converting the SpiderMonkey tree that Acorn produces takes another 150ms so in total it's a bit more than just using UglifyJS's own parser.

hashtag
Using UglifyJS to transform SpiderMonkey AST

Now you can use UglifyJS as any other intermediate tool for transforming JavaScript ASTs in SpiderMonkey format.

Example:

Check out for details.

hashtag
API Reference

Assuming installation via NPM, you can load UglifyJS in your application like this:

It exports a lot of names, but I'll discuss here the basics that are needed for parsing, mangling and compressing a piece of code. The sequence is (1) parse, (2) compress, (3) mangle, (4) generate output code.

hashtag
The simple way

There's a single toplevel function which combines all the steps. If you don't need additional customization, you might want to go with minify. Example:

You can also compress multiple files:

To generate a source map:

To generate a source map with the fromString option, you can also use an object:

Note that the source map is not saved in a file, it's just returned in result.map. The value passed for outSourceMap is only used to set //# sourceMappingURL=out.js.map in result.code. The value of outFileName is only used to set file attribute in source map file.

The file attribute in the source map (see ) will use outFileName firstly, if it's falsy, then will be deduced from outSourceMap (by removing '.map').

You can set option sourceMapInline to be true and source map will be appended to code.

You can also specify sourceRoot property to be included in source map:

If you're compressing compiled JavaScript and have a source map for it, you can use the inSourceMap argument:

If your input source map is not in a file, you can pass it in as an object using the inSourceMap argument:

The inSourceMap is only used if you also request outSourceMap (it makes no sense otherwise).

To set the source map url, use the sourceMapUrl option. If you're using the X-SourceMap header instead, you can just set the sourceMapUrl option to false. Defaults to outSourceMap:

Other options:

  • warnings (default false) — pass true to display compressor warnings.

  • fromString (default false) — if you pass true then you can pass JavaScript source code, rather than file names.

mangle

  • except - pass an array of identifiers that should be excluded from mangling

  • toplevel — mangle names declared in the toplevel scope (disabled by default).

  • eval

mangleProperties options

  • regex — Pass a RegExp to only mangle certain names (maps to the --mangle-regex CLI arguments option)

  • ignore_quoted – Only mangle unquoted property names (maps to the --mangle-props 2 CLI arguments option)

We could add more options to UglifyJS.minify — if you need additional functionality please suggest!

hashtag
The hard way

Following there's more detailed API info, in case the minify function is too simple for your needs.

hashtag
The parser

options is optional and if present it must be an object. The following properties are available:

  • strict — disable automatic semicolon insertion and support for trailing

    comma in arrays and objects

  • bare_returns — Allow return outside of functions. (maps to the

    --bare-returns

The last two options are useful when you'd like to minify multiple files and get a single file as the output and a proper source map. Our CLI tool does something like this:

After this, we have in toplevel a big AST containing all our files, with each token having proper information about where it came from.

hashtag
Scope information

UglifyJS contains a scope analyzer that you need to call manually before compressing or mangling. Basically it augments various nodes in the AST with information about where is a name defined, how many times is a name referenced, if it is a global or not, if a function is using eval or the with statement etc. I will discuss this some place else, for now what's important to know is that you need to call the following before doing anything with the tree:

hashtag
Compression

Like this:

The options can be missing. Available options are discussed above in “Compressor options”. Defaults should lead to best compression in most scripts.

The compressor is destructive, so don't rely that toplevel remains the original tree.

hashtag
Mangling

After compression it is a good idea to call again figure_out_scope (since the compressor might drop unused variables / unreachable code and this might change the number of identifiers or their position). Optionally, you can call a trick that helps after Gzip (counting character frequency in non-mangleable words). Example:

hashtag
Generating output

AST nodes have a print method that takes an output stream. Essentially, to generate code you do this:

or, for a shortcut you can do:

As usual, options is optional. The output stream accepts a lot of options, most of them documented above in section “Beautifier options”. The two which we care about here are source_map and comments.

hashtag
Keeping comments in the output

In order to keep certain comments in the output you need to pass the comments option. Pass a RegExp (as string starting and closing with / or pass a RegExp object), a boolean or a function. Stringified options all and some can be passed too, where some behaves like it's cli equivalent --comments without passing a value. If you pass a RegExp, only those comments whose body matches the RegExp will be kept. Note that body means without the initial // or /*. If you pass a function, it will be called for every comment in the tree and will receive two arguments: the node that the comment is attached to, and the comment token itself.

The comment token has these properties:

  • type: "comment1" for single-line comments or "comment2" for multi-line

    comments

  • value: the comment body

Your function should return true to keep the comment, or a falsy value otherwise.

hashtag
Generating a source mapping

You need to pass the source_map argument when calling print. It needs to be a SourceMap object (which is a thin wrapper on top of the library).

Example:

The source_map_options (optional) can contain the following properties:

  • file: the name of the JavaScript output file that this mapping refers to

  • root: the sourceRoot property (see the )

hashtag
Support for const

const in uglify-js@2.x has function scope and as such behaves much like var - unlike const in ES2015 (ES6) which has block scope. It is recommended to avoid using const for this reason as it will have undefined behavior when run on an ES2015 compatible browser.

is grandfathered to be equivalent to
true
and as such means
200
. On rare occasions the default sequences limit leads to very slow compress times in which case a value of
20
or less is recommended.
  • properties -- rewrite property access using the dot notation, for example foo["bar"] → foo.bar

  • dead_code -- remove unreachable code

  • drop_debugger -- remove debugger; statements

  • unsafe (default: false) -- apply "unsafe" transformations (discussion below)

  • unsafe_comps (default: false) -- Reverse < and <= to > and >= to allow improved compression. This might be unsafe when an at least one of two operands is an object with computed values due the use of methods like get, or valueOf. This could cause change in execution order after operands in the comparison are switching. Compression only works if both comparisons and unsafe_comps are both set to true.

  • unsafe_math (default: false) -- optimize numerical expressions like 2 * x * 3 into 6 * x, which may give imprecise floating point results.

  • unsafe_proto (default: false) -- optimize expressions like Array.prototype.slice.call(a) into [].slice.call(a)

  • unsafe_regexp (default: false) -- enable substitutions of variables with RegExp values the same way as if they are constants.

  • conditionals -- apply optimizations for if-s and conditional expressions

  • comparisons -- apply certain optimizations to binary nodes, for example: !(a <= b) → a > b (only when unsafe_comps), attempts to negate binary nodes, e.g. a = !b && !c && !d && !e → a=!(b||c||d||e) etc.

  • evaluate -- attempt to evaluate constant expressions

  • booleans -- various optimizations for boolean context, for example !!a ? b : c → a ? b : c

  • loops -- optimizations for do, while and for loops when we can statically determine the condition

  • unused -- drop unreferenced functions and variables (simple direct variable assignments do not count as references unless set to "keep_assign")

  • toplevel -- drop unreferenced functions ("funcs") and/or variables ("vars") in the toplevel scope (false by default, true to drop both unreferenced functions and variables)

  • top_retain -- prevent specific toplevel functions and variables from unused removal (can be array, comma-separated, RegExp or function. Implies toplevel)

  • hoist_funs -- hoist function declarations

  • hoist_vars (default: false) -- hoist var declarations (this is false by default because it seems to increase the size of the output in general)

  • if_return -- optimizations for if/return and if/continue

  • join_vars -- join consecutive var statements

  • cascade -- small optimization for sequences, transform x, x into x and x = something(), x into x = something()

  • collapse_vars -- Collapse single-use var and const definitions when possible.

  • reduce_vars -- Improve optimization on variables assigned with and used as constant values.

  • warnings -- display warnings when dropping unreachable code or unused declarations etc.

  • negate_iife -- negate "Immediately-Called Function Expressions" where the return value is discarded, to avoid the parens that the code generator would insert.

  • pure_getters -- the default is false. If you pass true for this, UglifyJS will assume that object property access (e.g. foo.bar or foo["bar"]) doesn't have any side effects. Specify "strict" to treat foo.bar as side-effect-free only when foo is certain to not throw, i.e. not null or undefined.

  • pure_funcs -- default null. You can pass an array of names and UglifyJS will assume that those functions do not produce side effects. DANGER: will not check if the name is redefined in scope. An example case here, for instance var q = Math.floor(a/b). If variable q is not used elsewhere, UglifyJS will drop it, but will still keep the Math.floor(a/b), not knowing what it does. You can pass pure_funcs: [ 'Math.floor' ] to let it know that this function won't produce any side effect, in which case the whole statement would get discarded. The current implementation adds some overhead (compression will be slower).

  • drop_console -- default false. Pass true to discard calls to console.* functions. If you wish to drop a specific function call such as console.info and/or retain side effects from function arguments after dropping the function call then use pure_funcs instead.

  • expression -- default false. Pass true to preserve completion values from terminal statements without return, e.g. in bookmarklets.

  • keep_fargs -- default true. Prevents the compressor from discarding unused function arguments. You need this for code which relies on Function.length.

  • keep_fnames -- default false. Pass true to prevent the compressor from discarding function names. Useful for code relying on Function.prototype.name. See also: the keep_fnames mangle option.

  • passes -- default 1. Number of times to run compress with a maximum of 3. In some cases more than one pass leads to further compressed code. Keep in mind more passes will take more time.

  • keep_infinity -- default false. Pass true to prevent Infinity from being compressed into 1/0, which may cause performance issues on Chrome.

  • side_effects -- default true. Pass false to disable potentially dropping functions marked as "pure". A function call is marked as "pure" if a comment annotation /*@__PURE__*/ or /*#__PURE__*/ immediately precedes the call. For example: /*@__PURE__*/foo();

  • String(exp) or exp.toString() → "" + exp

  • new Object/RegExp/Function/Error/Array (...) → we discard the new

  • typeof foo == "undefined" → foo === void 0

  • void 0 → undefined (if there is a variable named "undefined" in

    scope; we do it because the variable name will be mangled, typically

    reduced to a single character)

  • to override it.
  • indent-level (default 4)

  • indent-start (default 0) -- prefix all lines by that many spaces

  • quote-keys (default false) -- pass true to quote all keys in literal

    objects

  • space-colon (default true) -- insert a space after the colon signs

  • ascii-only (default false) -- escape Unicode characters in strings and

    regexps (affects directives with non-ascii characters becoming invalid)

  • inline-script (default false) -- escape the slash in occurrences of

    </script in strings

  • width (default 80) -- only takes effect when beautification is on, this

    specifies an (orientative) line width that the beautifier will try to

    obey. It refers to the width of the line text (excluding indentation).

    It doesn't work very well currently, but it does make the code generated

    by UglifyJS more readable.

  • max-line-len (default 32000) -- maximum line length (for uglified code)

  • bracketize (default false) -- always insert brackets in if, for,

    do, while or with statements, even if their body is a single

    statement.

  • semicolons (default true) -- separate statements with semicolons. If

    you pass false then whenever possible we will use a newline instead of a

    semicolon, leading to more readable output of uglified code (size before

    gzip could be smaller; size after gzip insignificantly larger).

  • preamble (default null) -- when passed it must be a string and

    it will be prepended to the output literally. The source map will

    adjust for this text. Can be used to insert a comment containing

    licensing information, for example.

  • quote_style (default 0) -- preferred quote style for strings (affects

    quoted property names and directives as well):

    • 0 -- prefers double quotes, switches to single quotes when there are

      more double quotes in the string itself.

    • 1 -- always use single quotes

    • 2 -- always use double quotes

    • 3 -- always use the original quotes

  • keep_quoted_props (default false) -- when turned on, prevents stripping

    quotes from property names in object literals.

  • mangle (default true) — pass false to skip mangling names, or pass an object to specify mangling options (see below).

  • mangleProperties (default false) — pass an object to specify custom mangle property options.

  • output (default null) — pass an object if you wish to specify additional output optionsarrow-up-right. The defaults are optimized for best compression.

  • compress (default {}) — pass false to skip compressing entirely. Pass an object to specify custom compressor optionsarrow-up-right.

  • parse (default {}) — pass an object if you wish to specify some additional parser optionsarrow-up-right. (not all options available... see below)

  • — mangle names visible in scopes where eval or with are used (disabled by default).
  • keep_fnames -- default false. Pass true to not mangle function names. Useful for code relying on Function.prototype.name. See also: the keep_fnames compress option.

    Examples:

  • debug – Mangle names with the original name still present (maps to the --mangle-props-debug CLI arguments option). Defaults to false. Pass an empty string to enable, or a non-empty string to set the suffix.
    CLI arguments option and available to
    minify
    parse

    other options object)

  • filename — the name of the file where this code is coming from

  • toplevel — a toplevel node (as returned by a previous invocation of

    parse)

  • pos and endpos: the start/end positions (zero-based indexes) in the

    original code where this comment appears

  • line and col: the line and column where this comment appears in the

    original code

  • file — the file name of the original file

  • nlb — true if there was a newline before this comment in the original

    code, or if this comment contains a newline.

  • orig: the "original source map", handy when you compress generated JS

    and want to map the minified output back to the original code where it

    came from. It can be simply a string in JSON, or a JSON object containing

    the original source map.

    present but incomplete
    uglify-esarrow-up-right
    node.jsarrow-up-right
    practical reasonsarrow-up-right
    Acornarrow-up-right
    original blog postarrow-up-right
    the specarrow-up-right
    source-maparrow-up-right
    specarrow-up-right
    //tst.js
    var globalVar;
    function funcName(firstLongName, anotherLongName)
    {
     var myVariable = firstLongName +  anotherLongName;
    }
    
    UglifyJS.minify("tst.js").code;
    // 'function funcName(a,n){}var globalVar;'
    
    UglifyJS.minify("tst.js", { mangle: { except: ['firstLongName'] } }).code;
    // 'function funcName(firstLongName,a){}var globalVar;'
    
    UglifyJS.minify("tst.js", { mangle: { toplevel: true } }).code;
    // 'function n(n,a){}var a;'
    npm install uglify-js -g
    npm install uglify-js
    uglifyjs [input files] [options]
    uglifyjs --compress --mangle -- input.js
      --source-map                  Specify an output file where to generate source
                                    map.
      --source-map-root             The path to the original source to be included
                                    in the source map.
      --source-map-url              The path to the source map to be added in //#
                                    sourceMappingURL.  Defaults to the value passed
                                    with --source-map.
      --source-map-include-sources  Pass this flag if you want to include the
                                    content of source files in the source map as
                                    sourcesContent property.
      --source-map-inline           Write base64-encoded source map to the end of js output.
      --in-source-map               Input source map, useful if you're compressing
                                    JS that was generated from some other original
                                    code. Specify "inline" if the source map is included
                                    inline with the sources.
      --screw-ie8                   Use this flag if you don't wish to support
                                    Internet Explorer 6/7/8.
                                    By default UglifyJS will not try to be IE-proof.
      --support-ie8                 Use this flag to support Internet Explorer 6/7/8.
                                    Equivalent to setting `screw_ie8: false` in `minify()`
                                    for `compress`, `mangle` and `output` options.
      --expr                        Parse a single expression, rather than a
                                    program (for parsing JSON)
      -p, --prefix                  Skip prefix for original filenames that appear
                                    in source maps. For example -p 3 will drop 3
                                    directories from file names and ensure they are
                                    relative paths. You can also specify -p
                                    relative, which will make UglifyJS figure out
                                    itself the relative paths between original
                                    sources, the source map and the output file.
      -o, --output                  Output file (default STDOUT).
      -b, --beautify                Beautify output/specify output options.
      -m, --mangle                  Mangle names/pass mangler options.
      -r, --reserved                Reserved names to exclude from mangling.
      -c, --compress                Enable compressor/pass compressor options, e.g.
                                    `-c 'if_return=false,pure_funcs=["Math.pow","console.log"]'`
                                    Use `-c` with no argument to enable default compression
                                    options.
      -d, --define                  Global definitions
      -e, --enclose                 Embed everything in a big function, with a
                                    configurable parameter/argument list.
      --comments                    Preserve copyright comments in the output. By
                                    default this works like Google Closure, keeping
                                    JSDoc-style comments that contain "@license" or
                                    "@preserve". You can optionally pass one of the
                                    following arguments to this flag:
                                    - "all" to keep all comments
                                    - a valid JS RegExp like `/foo/` or `/^!/` to
                                    keep only matching comments.
                                    Note that currently not *all* comments can be
                                    kept when compression is on, because of dead
                                    code removal or cascading statements into
                                    sequences.
      --preamble                    Preamble to prepend to the output.  You can use
                                    this to insert a comment, for example for
                                    licensing information.  This will not be
                                    parsed, but the source map will adjust for its
                                    presence.
      --stats                       Display operations run time on STDERR.
      --acorn                       Use Acorn for parsing.
      --spidermonkey                Assume input files are SpiderMonkey AST format
                                    (as JSON).
      --self                        Build itself (UglifyJS2) as a library (implies
                                    --wrap=UglifyJS --export-all)
      --wrap                        Embed everything in a big function, making the
                                    “exports” and “global” variables available. You
                                    need to pass an argument to this option to
                                    specify the name that your module will take
                                    when included in, say, a browser.
      --export-all                  Only used when --wrap, this tells UglifyJS to
                                    add code to automatically export all globals.
      --lint                        Display some scope warnings
      -v, --verbose                 Verbose
      -V, --version                 Print version number and exit.
      --noerr                       Don't throw an error for unknown options in -c,
                                    -b or -m.
      --bare-returns                Allow return outside of functions.  Useful when
                                    minifying CommonJS modules and Userscripts that
                                    may be anonymous function wrapped (IIFE) by the
                                    .user.js engine `caller`.
      --keep-fnames                 Do not mangle/drop function names.  Useful for
                                    code relying on Function.prototype.name.
      --reserved-file               File containing reserved names
      --reserve-domprops            Make (most?) DOM properties reserved for
                                    --mangle-props
      --mangle-props                Mangle property names (default `0`). Set to
                                    `true` or `1` to mangle all property names. Set
                                    to `unquoted` or `2` to only mangle unquoted
                                    property names. Mode `2` also enables the
                                    `keep_quoted_props` beautifier option to
                                    preserve the quotes around property names and
                                    disables the `properties` compressor option to
                                    prevent rewriting quoted properties with dot
                                    notation. You can override these by setting
                                    them explicitly on the command line.
      --mangle-regex                Only mangle property names matching the regex
      --name-cache                  File to hold mangled names mappings
      --pure-funcs                  Functions that can be safely removed if their
                                    return value is not used, e.g.
                                    `--pure-funcs Math.floor console.info`
                                    (requires `--compress`)
    uglifyjs /home/doe/work/foo/src/js/file1.js \
             /home/doe/work/foo/src/js/file2.js \
             -o foo.min.js \
             --source-map foo.min.js.map \
             --source-map-root http://foo.com/src \
             -p 5 -c -m
    uglifyjs ... -m -r '$,require,exports'
    var x = {
      foo: 1
    };
    
    x.bar = 2;
    x["baz"] = 3;
    x[condition ? "moo" : "boo"] = 4;
    console.log(x.something());
    {
      "vars": [ "define", "require", ... ],
      "props": [ "length", "prototype", ... ]
    }
    rm -f /tmp/cache.json  # start fresh
    uglifyjs file1.js file2.js --mangle-props --name-cache /tmp/cache.json -o part1.js
    uglifyjs file3.js file4.js --mangle-props --name-cache /tmp/cache.json -o part2.js
    $ echo 'var o={"foo":1, bar:3}; o.foo += o.bar; console.log(o.foo);' | uglifyjs --mangle-props=2 -mc
    var o={"foo":1,a:3};o.foo+=o.a,console.log(o.foo);
    if (DEBUG) {
        console.log("debug stuff");
    }
    const DEBUG = false;
    const PRODUCTION = true;
    // etc.
    uglifyjs build/defines.js js/foo.js js/bar.js... -c
    uglifyJS.minify([ "input.js"], {
        compress: {
            dead_code: true,
            global_defs: {
                DEBUG: false
            }
        }
    });
    function f() {
        /** @preserve Foo Bar */
        function g() {
          // this function is never called
        }
        return something();
    }
    acorn file.js | uglifyjs --spidermonkey -m -c
    function uglify(ast, options, mangle) {
      // Conversion from SpiderMonkey AST to internal format
      var uAST = UglifyJS.AST_Node.from_mozilla_ast(ast);
    
      // Compression
      uAST.figure_out_scope();
      uAST = UglifyJS.Compressor(options).compress(uAST);
    
      // Mangling (optional)
      if (mangle) {
        uAST.figure_out_scope();
        uAST.compute_char_frequency();
        uAST.mangle_names();
      }
    
      // Back-conversion to SpiderMonkey AST
      return uAST.to_mozilla_ast();
    }
    var UglifyJS = require("uglify-js");
    var result = UglifyJS.minify("/path/to/file.js");
    console.log(result.code); // minified output
    // if you need to pass code instead of file name
    var result = UglifyJS.minify("var b = function () {};", {fromString: true});
    var result = UglifyJS.minify([ "file1.js", "file2.js", "file3.js" ]);
    console.log(result.code);
    var result = UglifyJS.minify([ "file1.js", "file2.js", "file3.js" ], {
        outSourceMap: "out.js.map"
    });
    console.log(result.code); // minified output
    console.log(result.map);
    var result = UglifyJS.minify({"file1.js": "var a = function () {};"}, {
      outSourceMap: "out.js.map",
      outFileName: "out.js",
      fromString: true
    });
    var result = UglifyJS.minify([ "file1.js", "file2.js", "file3.js" ], {
        outSourceMap: "out.js.map",
        sourceRoot: "http://example.com/src"
    });
    var result = UglifyJS.minify("compiled.js", {
        inSourceMap: "compiled.js.map",
        outSourceMap: "minified.js.map"
    });
    // same as before, it returns `code` and `map`
    var result = UglifyJS.minify("compiled.js", {
        inSourceMap: JSON.parse(my_source_map_string),
        outSourceMap: "minified.js.map"
    });
    var result = UglifyJS.minify([ "file1.js" ], {
      outSourceMap: "out.js.map",
      sourceMapUrl: "localhost/out.js.map"
    });
    var toplevel_ast = UglifyJS.parse(code, options);
    var toplevel = null;
    files.forEach(function(file){
        var code = fs.readFileSync(file, "utf8");
        toplevel = UglifyJS.parse(code, {
            filename: file,
            toplevel: toplevel
        });
    });
    toplevel.figure_out_scope()
    var compressor = UglifyJS.Compressor(options);
    var compressed_ast = compressor.compress(toplevel);
    compressed_ast.figure_out_scope();
    compressed_ast.compute_char_frequency();
    compressed_ast.mangle_names();
    var stream = UglifyJS.OutputStream(options);
    compressed_ast.print(stream);
    var code = stream.toString(); // this is your minified code
    var code = compressed_ast.print_to_string(options);
    var source_map = UglifyJS.SourceMap(source_map_options);
    var stream = UglifyJS.OutputStream({
        ...
        source_map: source_map
    });
    compressed_ast.print(stream);
    
    var code = stream.toString();
    var map = source_map.toString(); // json output for your source map
    Build Status

    align-text

    Align the text in a string.

    Examples

    Align text values in an array:

    Or do stuff like thisarrow-up-right:

    arrow-up-right

    Visit the examplearrow-up-right to see how this works.

    hashtag
    Install

    Install with

    hashtag
    Usage

    Params

    • text can be a string or array. If a string is passed, a string will be returned. If an array is passed, an array will be returned.

    • callback|integer: if an integer, the text will be indented by that amount. If a function, it must return an integer representing the amount of leading indentation to use as align loops over each line.

    Example

    Would align:

    To:

    hashtag
    callback

    hashtag
    params

    The callback is used to determine the indentation of each line and gets the following params:

    • len the length of the "current" line

    • longest the length of the longest line

    • line

    hashtag
    return

    The callback may return:

    • an integer that represents the number of spaces to use for padding,

    • or an object with the following properties:

      • indent: {Number} the amount of indentation to use. Default is 0

    Integer example:

    Object example:

    hashtag
    Usage examples

    hashtag
    Center align

    Using the centerAlign function from above:

    Would align this text:

    Resulting in this:

    Customize

    If you wanted to add more padding on the left, just pass the number in the callback.

    For example, to add 4 spaces before every line:

    Would result in:

    hashtag
    Bullets

    Would return:

    hashtag
    Different indent character

    Would return

    hashtag
    Related projects

    • : Center-align the text in a string.

    • : Left or right (or both) justify text using a custom width and character

    • : Get the longest item in an array.

    hashtag
    Running tests

    Install dev dependencies:

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests,

    hashtag
    Author

    Jon Schlinkert

    hashtag
    License

    Copyright © 2015 Released under the MIT license.

    This file was generated by on June 09, 2015.

    align([1, 2, 3, 100]);
    //=> ['  1', '  2', '  3', '100']
    the current line (string) being aligned
  • lines the array of all lines

  • when an object is returned.
  • character: {String} the character to use for indentation. Default is '' (empty string) when an object is returned.

  • prefix: {String} leading characters to use at the beginning of each line. '' (empty string) when an object is returned.

  • : Right-align the text in a string.

  • : Repeat the given string n times. Fastest implementation for repeating a string.

  • : Wrap words to a specified length.

  • npmarrow-up-right
    center-alignarrow-up-right
    justifyarrow-up-right
    longestarrow-up-right
    please create an issuearrow-up-right
    github/jonschlinkertarrow-up-right
    twitter/jonschlinkertarrow-up-right
    Jon Schlinkertarrow-up-right
    verb-cliarrow-up-right
    $ npm i align-text --save
    var align = require('align-text');
    align(text, callback_function_or_integer);
    align(text, 4);
    abc
    abc
    abc
        abc
        abc
        abc
    // calculate half the difference between the length
    // of the current line and the longest line
    function centerAlign(len, longest, line, lines) {
      return Math.floor((longest - len) / 2);
    }
    function centerAlign(len, longest, line, lines) {
      return {
        character: '\t',
        indent: Math.floor((longest - len) / 2),
        prefix: '~ ',
      }
    }
    align(text, centerAlign);
    Lorem ipsum dolor sit amet
    consectetur adipiscin
    elit, sed do eiusmod tempor incididun
    ut labore et dolor
    magna aliqua. Ut enim ad mini
    veniam, quis
         Lorem ipsum dolor sit amet,
            consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
             ut labore et dolore
        magna aliqua. Ut enim ad minim
                 veniam, quis
    function centerAlign(len, longest, line, lines) {
      return 4 + Math.floor((longest - len) / 2);
    }
             Lorem ipsum dolor sit amet,
                consectetur adipiscing
        elit, sed do eiusmod tempor incididunt
                 ut labore et dolore
            magna aliqua. Ut enim ad minim
                     veniam, quis
    align(text, function (len, max, line, lines) {
      return {prefix: ' - '};
    });
    - Lorem ipsum dolor sit amet,
    - consectetur adipiscing
    - elit, sed do eiusmod tempor incididunt
    - ut labore et dolore
    - magna aliqua. Ut enim ad minim
    - veniam, quis
    align(text, function (len, max, line, lines) {
      return { 
        indent: Math.floor((max - len) / 2), 
        character: '~', 
      };
    });
    ~~~~~Lorem ipsum dolor sit amet,
    ~~~~~~~~consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
    ~~~~~~~~~ut labore et dolore
    ~~~~magna aliqua. Ut enim ad minim
    ~~~~~~~~~~~~~veniam, quis
    $ npm i -d && npm test
    right-alignarrow-up-right
    repeat-stringarrow-up-right
    word-wraparrow-up-right

    decamelize

    repeat-string

    Repeat the given string n times. Fastest implementation for repeating a string.

    hashtag
    Install

    Install with npmarrow-up-right:

    hashtag
    Usage

    hashtag

    Repeat the given string the specified number of times.

    Example:

    Example

    Params

    • string {String}: The string to repeat

    • number {Number}: The number of times to repeat the string

    • returns

    hashtag
    Benchmarks

    Repeat string is significantly faster than the native method (which is itself faster than ):

    Run the benchmarks

    Install dev dependencies:

    hashtag
    About

    hashtag
    Related projects

    : Create an array by repeating the given value n times. |

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, .

    hashtag
    Contributors

    hashtag
    Building docs

    (This document was generated by (a generator), please don't edit the readme directly. Any changes to the readme must be made in .)

    To generate the readme and API documentation with :

    hashtag
    Running tests

    Install dev dependencies:

    hashtag
    Author

    Jon Schlinkert

    hashtag
    License

    Copyright © 2016, . Released under the .

    This file was generated by , v0.2.0, on October 23, 2016.

    decamelize

    Convert a camelized string into a lowercased one with a custom separator Example: unicornRainbow → unicorn_rainbow

    hashtag
    Install

    hashtag
    Usage

    hashtag
    API

    hashtag
    decamelize(input, [separator])

    hashtag
    input

    Type: string

    hashtag
    separator

    Type: string Default: _

    hashtag
    Related

    See for the inverse.

    hashtag
    License

    MIT ©

    $ npm install --save repeat-string
    $ npm install --save decamelize
    camelcasearrow-up-right
    Sindre Sorhusarrow-up-right
    const decamelize = require('decamelize');
    
    decamelize('unicornRainbow');
    //=> 'unicorn_rainbow'
    
    decamelize('unicornRainbow', '-');
    //=> 'unicorn-rainbow'
    {String}
    : Repeated string

    Commits

    Contributor

    51

    2

    2

    1

    1

    repeatarrow-up-right
    repeatingarrow-up-right
    repeat-elementarrow-up-right
    homepagearrow-up-right
    please create an issuearrow-up-right
    verb-generate-readmearrow-up-right
    verbarrow-up-right
    .verb.mdarrow-up-right
    verbarrow-up-right
    github/jonschlinkertarrow-up-right
    twitter/jonschlinkertarrow-up-right
    Jon Schlinkertarrow-up-right
    MIT licensearrow-up-right
    verb-generate-readmearrow-up-right
    var repeat = require('repeat-string');
    repeat('A', 5);
    //=> AAAAA
    # 2x
    repeat-string  █████████████████████████  (26,953,977 ops/sec)
    repeating      █████████                  (9,855,695 ops/sec)
    native         ██████████████████         (19,453,895 ops/sec)
    
    # 3x
    repeat-string  █████████████████████████  (19,445,252 ops/sec)
    repeating      ███████████                (8,661,565 ops/sec)
    native         ████████████████████       (16,020,598 ops/sec)
    
    # 10x
    repeat-string  █████████████████████████  (23,792,521 ops/sec)
    repeating      █████████                  (8,571,332 ops/sec)
    native         ███████████████            (14,582,955 ops/sec)
    
    # 50x
    repeat-string  █████████████████████████  (23,640,179 ops/sec)
    repeating      █████                      (5,505,509 ops/sec)
    native         ██████████                 (10,085,557 ops/sec)
    
    # 250x
    repeat-string  █████████████████████████  (23,489,618 ops/sec)
    repeating      ████                       (3,962,937 ops/sec)
    native         ████████                   (7,724,892 ops/sec)
    
    # 2000x
    repeat-string  █████████████████████████  (20,315,172 ops/sec)
    repeating      ████                       (3,297,079 ops/sec)
    native         ███████                    (6,203,331 ops/sec)
    
    # 20000x
    repeat-string  █████████████████████████  (23,382,915 ops/sec)
    repeating      ███                        (2,980,058 ops/sec)
    native         █████                      (5,578,808 ops/sec)
    npm i -d && node benchmark
    $ npm install -g verb verb-generate-readme && verb
    $ npm install -d && npm test
    jonschlinkertarrow-up-right
    LinusUarrow-up-right
    tbusserarrow-up-right
    doowbarrow-up-right
    wooormarrow-up-right

    Source Map

    arrow-up-right

    arrow-up-right

    This is a library to generate and consume the source map format described herearrow-up-right.

    hashtag
    Use with Node

    hashtag
    Use on the Web

    hashtag
    Table of Contents

    hashtag
    Examples

    hashtag
    Consuming a source map

    hashtag
    Generating a source map

    In depth guide:

    hashtag
    With SourceNode (high level API)

    hashtag
    With SourceMapGenerator (low level API)

    hashtag
    API

    Get a reference to the module:

    hashtag
    SourceMapConsumer

    A SourceMapConsumer instance represents a parsed source map which we can query for information about the original file positions by giving it a file position in the generated source.

    hashtag
    new SourceMapConsumer(rawSourceMap)

    The only parameter is the raw source map (either as a string which can be JSON.parse'd, or an object). According to the spec, source maps have the following attributes:

    • version: Which version of the source map spec this map is following.

    • sources: An array of URLs to the original source files.

    • names

    hashtag
    SourceMapConsumer.prototype.computeColumnSpans()

    Compute the last column for each generated mapping. The last column is inclusive.

    hashtag
    SourceMapConsumer.prototype.originalPositionFor(generatedPosition)

    Returns the original source, line, and column information for the generated source's line and column positions provided. The only argument is an object with the following properties:

    • line: The line number in the generated source.

    • column: The column number in the generated source.

    • bias

    and an object is returned with the following properties:

    • source: The original source file, or null if this information is not available.

    • line: The line number in the original source, or null if this information is not available.

    • column

    hashtag
    SourceMapConsumer.prototype.generatedPositionFor(originalPosition)

    Returns the generated line and column information for the original source, line, and column positions provided. The only argument is an object with the following properties:

    • source: The filename of the original source.

    • line: The line number in the original source.

    • column

    and an object is returned with the following properties:

    • line: The line number in the generated source, or null.

    • column: The column number in the generated source, or null.

    hashtag
    SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)

    Returns all generated line and column information for the original source, line, and column provided. If no column is provided, returns all mappings corresponding to a either the line we are searching for or the next closest line that has any mappings. Otherwise, returns all mappings corresponding to the given line and either the column we are searching for or the next closest column that has any offsets.

    The only argument is an object with the following properties:

    • source: The filename of the original source.

    • line: The line number in the original source.

    • column

    and an array of objects is returned, each with the following properties:

    • line: The line number in the generated source, or null.

    • column: The column number in the generated source, or null.

    hashtag
    SourceMapConsumer.prototype.hasContentsOfAllSources()

    Return true if we have the embedded source content for every source listed in the source map, false otherwise.

    In other words, if this method returns true, then consumer.sourceContentFor(s) will succeed for every source s in consumer.sources.

    hashtag
    SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])

    Returns the original source content for the source provided. The only argument is the URL of the original source file.

    If the source content for the given source is not found, then an error is thrown. Optionally, pass true as the second param to have null returned instead.

    hashtag
    SourceMapConsumer.prototype.eachMapping(callback, context, order)

    Iterate over each mapping between an original source/line/column and a generated line/column in this source map.

    • callback: The function that is called with each mapping. Mappings have the form { source, generatedLine, generatedColumn, originalLine, originalColumn, name }

    • context: Optional. If specified, this object will be the value of this every time that callback is called.

    hashtag
    SourceMapGenerator

    An instance of the SourceMapGenerator represents a source map which is being built incrementally.

    hashtag
    new SourceMapGenerator([startOfSourceMap])

    You may pass an object with the following properties:

    • file: The filename of the generated source that this source map is associated with.

    • sourceRoot: A root for all relative URLs in this source map.

    • skipValidation

    hashtag
    SourceMapGenerator.fromSourceMap(sourceMapConsumer)

    Creates a new SourceMapGenerator from an existing SourceMapConsumer instance.

    • sourceMapConsumer The SourceMap.

    hashtag
    SourceMapGenerator.prototype.addMapping(mapping)

    Add a single mapping from original source line and column to the generated source's line and column for this source map being created. The mapping object should have the following properties:

    • generated: An object with the generated line and column positions.

    • original: An object with the original line and column positions.

    • source

    hashtag
    SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)

    Set the source content for an original source file.

    • sourceFile the URL of the original source file.

    • sourceContent the content of the source file.

    hashtag
    SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])

    Applies a SourceMap for a source file to the SourceMap. Each mapping to the supplied source file is rewritten using the supplied SourceMap. Note: The resolution for the resulting mappings is the minimum of this map and the supplied map.

    • sourceMapConsumer: The SourceMap to be applied.

    • sourceFile: Optional. The filename of the source file. If omitted, sourceMapConsumer.file will be used, if it exists. Otherwise an error will be thrown.

    • sourceMapPath

    hashtag
    SourceMapGenerator.prototype.toString()

    Renders the source map being generated to a string.

    hashtag
    SourceNode

    SourceNodes provide a way to abstract over interpolating and/or concatenating snippets of generated JavaScript source code, while maintaining the line and column information associated between those snippets and the original source code. This is useful as the final intermediate representation a compiler might use before outputting the generated JS and source map.

    hashtag
    new SourceNode([line, column, source[, chunk[, name]]])

    • line: The original line number associated with this source node, or null if it isn't associated with an original line.

    • column: The original column number associated with this source node, or null if it isn't associated with an original column.

    • source

    hashtag
    SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])

    Creates a SourceNode from generated code and a SourceMapConsumer.

    • code: The generated code

    • sourceMapConsumer The SourceMap for the generated code

    • relativePath

    hashtag
    SourceNode.prototype.add(chunk)

    Add a chunk of generated JS to this source node.

    • chunk: A string snippet of generated JS code, another instance of

      SourceNode, or an array where each member is one of those things.

    hashtag
    SourceNode.prototype.prepend(chunk)

    Prepend a chunk of generated JS to this source node.

    • chunk: A string snippet of generated JS code, another instance of

      SourceNode, or an array where each member is one of those things.

    hashtag
    SourceNode.prototype.setSourceContent(sourceFile, sourceContent)

    Set the source content for a source file. This will be added to the SourceMap in the sourcesContent field.

    • sourceFile: The filename of the source file

    • sourceContent: The content of the source file

    hashtag
    SourceNode.prototype.walk(fn)

    Walk over the tree of JS snippets in this node and its children. The walking function is called once for each snippet of JS and is passed that snippet and the its original associated source's line/column location.

    • fn: The traversal function.

    hashtag
    SourceNode.prototype.walkSourceContents(fn)

    Walk over the tree of SourceNodes. The walking function is called for each source file content and is passed the filename and source content.

    • fn: The traversal function.

    hashtag
    SourceNode.prototype.join(sep)

    Like Array.prototype.join except for SourceNodes. Inserts the separator between each of this source node's children.

    • sep: The separator.

    hashtag
    SourceNode.prototype.replaceRight(pattern, replacement)

    Call String.prototype.replace on the very right-most source snippet. Useful for trimming white space from the end of a source node, etc.

    • pattern: The pattern to replace.

    • replacement: The thing to replace the pattern with.

    hashtag
    SourceNode.prototype.toString()

    Return the string representation of this source node. Walks over the tree and concatenates all the various snippets together to one string.

    hashtag
    SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])

    Returns the string representation of this tree of source nodes, plus a SourceMapGenerator which contains all the mappings between the generated and original sources.

    The arguments are the same as those to new SourceMapGenerator.

    $ npm install source-map

    node_modules

    wordwrap

    With SourceNode (high level API)

  • With SourceMapGenerator (low level API)

  • API

    • SourceMapConsumer

      • new SourceMapConsumer(rawSourceMap)

  • : An array of identifiers which can be referenced by individual mappings.
  • sourceRoot: Optional. The URL root from which all sources are relative.

  • sourcesContent: Optional. An array of contents of the original source files.

  • mappings: A string of base64 VLQs which contain the actual mappings.

  • file: Optional. The generated filename this source map is associated with.

  • : Either
    SourceMapConsumer.GREATEST_LOWER_BOUND
    or
    SourceMapConsumer.LEAST_UPPER_BOUND
    . Specifies whether to return the closest element that is smaller than or greater than the one we are searching for, respectively, if the exact element cannot be found. Defaults to
    SourceMapConsumer.GREATEST_LOWER_BOUND
    .
    : The column number in the original source, or null if this information is not available.
  • name: The original identifier, or null if this information is not available.

  • : The column number in the original source.
    : Optional. The column number in the original source.

    order: Either SourceMapConsumer.GENERATED_ORDER or SourceMapConsumer.ORIGINAL_ORDER. Specifies whether you want to iterate over the mappings sorted by the generated file's line/column order or the original's source/line/column order, respectively. Defaults to SourceMapConsumer.GENERATED_ORDER.

    : Optional. When
    true
    , disables validation of mappings as they are added. This can improve performance but should be used with discretion, as a last resort. Even then, one should avoid using this flag when running tests, if possible.
    : The original source file (relative to the sourceRoot).
  • name: An optional original token name for this mapping.

  • : Optional. The dirname of the path to the SourceMap to be applied. If relative, it is relative to the SourceMap.

    This parameter is needed when the two SourceMaps aren't in the same directory, and the SourceMap to be applied contains relative source paths. If so, those relative source paths need to be rewritten relative to the SourceMap.

    If omitted, it is assumed that both SourceMaps are in the same directory, thus not needing any rewriting. (Supplying '.' has the same effect.)

    : The original source's filename; null if no filename is provided.
  • chunk: Optional. Is immediately passed to SourceNode.prototype.add, see below.

  • name: Optional. The original identifier.

  • The optional path that relative sources in
    sourceMapConsumer
    should be relative to.
    Examples
    Consuming a source map
    Generating a source map
    Compiling to JavaScript, and Debugging with Source Mapsarrow-up-right
    <script src="https://raw.githubusercontent.com/mozilla/source-map/master/dist/source-map.min.js" defer></script>
    var rawSourceMap = {
      version: 3,
      file: 'min.js',
      names: ['bar', 'baz', 'n'],
      sources: ['one.js', 'two.js'],
      sourceRoot: 'http://example.com/www/js/',
      mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
    };
    
    var smc = new SourceMapConsumer(rawSourceMap);
    
    console.log(smc.sources);
    // [ 'http://example.com/www/js/one.js',
    //   'http://example.com/www/js/two.js' ]
    
    console.log(smc.originalPositionFor({
      line: 2,
      column: 28
    }));
    // { source: 'http://example.com/www/js/two.js',
    //   line: 2,
    //   column: 10,
    //   name: 'n' }
    
    console.log(smc.generatedPositionFor({
      source: 'http://example.com/www/js/two.js',
      line: 2,
      column: 10
    }));
    // { line: 2, column: 28 }
    
    smc.eachMapping(function (m) {
      // ...
    });
    function compile(ast) {
      switch (ast.type) {
      case 'BinaryExpression':
        return new SourceNode(
          ast.location.line,
          ast.location.column,
          ast.location.source,
          [compile(ast.left), " + ", compile(ast.right)]
        );
      case 'Literal':
        return new SourceNode(
          ast.location.line,
          ast.location.column,
          ast.location.source,
          String(ast.value)
        );
      // ...
      default:
        throw new Error("Bad AST");
      }
    }
    
    var ast = parse("40 + 2", "add.js");
    console.log(compile(ast).toStringWithSourceMap({
      file: 'add.js'
    }));
    // { code: '40 + 2',
    //   map: [object SourceMapGenerator] }
    var map = new SourceMapGenerator({
      file: "source-mapped.js"
    });
    
    map.addMapping({
      generated: {
        line: 10,
        column: 35
      },
      source: "foo.js",
      original: {
        line: 33,
        column: 2
      },
      name: "christopher"
    });
    
    console.log(map.toString());
    // '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
    // Node.js
    var sourceMap = require('source-map');
    
    // Browser builds
    var sourceMap = window.sourceMap;
    
    // Inside Firefox
    const sourceMap = require("devtools/toolkit/sourcemap/source-map.js");
    var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
    // Before:
    consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
    // [ { line: 2,
    //     column: 1 },
    //   { line: 2,
    //     column: 10 },
    //   { line: 2,
    //     column: 20 } ]
    
    consumer.computeColumnSpans();
    
    // After:
    consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
    // [ { line: 2,
    //     column: 1,
    //     lastColumn: 9 },
    //   { line: 2,
    //     column: 10,
    //     lastColumn: 19 },
    //   { line: 2,
    //     column: 20,
    //     lastColumn: Infinity } ]
    consumer.originalPositionFor({ line: 2, column: 10 })
    // { source: 'foo.coffee',
    //   line: 2,
    //   column: 2,
    //   name: null }
    
    consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })
    // { source: null,
    //   line: null,
    //   column: null,
    //   name: null }
    consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
    // { line: 1,
    //   column: 56 }
    consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" })
    // [ { line: 2,
    //     column: 1 },
    //   { line: 2,
    //     column: 10 },
    //   { line: 2,
    //     column: 20 } ]
    // ...
    if (consumer.hasContentsOfAllSources()) {
      consumerReadyCallback(consumer);
    } else {
      fetchSources(consumer, consumerReadyCallback);
    }
    // ...
    consumer.sources
    // [ "my-cool-lib.clj" ]
    
    consumer.sourceContentFor("my-cool-lib.clj")
    // "..."
    
    consumer.sourceContentFor("this is not in the source map");
    // Error: "this is not in the source map" is not in the source map
    
    consumer.sourceContentFor("this is not in the source map", true);
    // null
    consumer.eachMapping(function (m) { console.log(m); })
    // ...
    // { source: 'illmatic.js',
    //   generatedLine: 1,
    //   generatedColumn: 0,
    //   originalLine: 1,
    //   originalColumn: 0,
    //   name: null }
    // { source: 'illmatic.js',
    //   generatedLine: 2,
    //   generatedColumn: 0,
    //   originalLine: 2,
    //   originalColumn: 0,
    //   name: null }
    // ...
    var generator = new sourceMap.SourceMapGenerator({
      file: "my-generated-javascript-file.js",
      sourceRoot: "http://example.com/app/js/"
    });
    var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);
    generator.addMapping({
      source: "module-one.scm",
      original: { line: 128, column: 0 },
      generated: { line: 3, column: 456 }
    })
    generator.setSourceContent("module-one.scm",
                               fs.readFileSync("path/to/module-one.scm"))
    generator.toString()
    // '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}'
    var node = new SourceNode(1, 2, "a.cpp", [
      new SourceNode(3, 4, "b.cpp", "extern int status;\n"),
      new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"),
      new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"),
    ]);
    var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8"));
    var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"),
                                                  consumer);
    node.add(" + ");
    node.add(otherNode);
    node.add([leftHandOperandNode, " + ", rightHandOperandNode]);
    node.prepend("/** Build Id: f783haef86324gf **/\n\n");
    node.setSourceContent("module-one.scm",
                          fs.readFileSync("path/to/module-one.scm"))
    var node = new SourceNode(1, 2, "a.js", [
      new SourceNode(3, 4, "b.js", "uno"),
      "dos",
      [
        "tres",
        new SourceNode(5, 6, "c.js", "quatro")
      ]
    ]);
    
    node.walk(function (code, loc) { console.log("WALK:", code, loc); })
    // WALK: uno { source: 'b.js', line: 3, column: 4, name: null }
    // WALK: dos { source: 'a.js', line: 1, column: 2, name: null }
    // WALK: tres { source: 'a.js', line: 1, column: 2, name: null }
    // WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }
    var a = new SourceNode(1, 2, "a.js", "generated from a");
    a.setSourceContent("a.js", "original a");
    var b = new SourceNode(1, 2, "b.js", "generated from b");
    b.setSourceContent("b.js", "original b");
    var c = new SourceNode(1, 2, "c.js", "generated from c");
    c.setSourceContent("c.js", "original c");
    
    var node = new SourceNode(null, null, null, [a, b, c]);
    node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); })
    // WALK: a.js : original a
    // WALK: b.js : original b
    // WALK: c.js : original c
    var lhs = new SourceNode(1, 2, "a.rs", "my_copy");
    var operand = new SourceNode(3, 4, "a.rs", "=");
    var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()");
    
    var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);
    var joinedNode = node.join(" ");
    // Trim trailing white space.
    node.replaceRight(/\s*$/, "");
    var node = new SourceNode(1, 2, "a.js", [
      new SourceNode(3, 4, "b.js", "uno"),
      "dos",
      [
        "tres",
        new SourceNode(5, 6, "c.js", "quatro")
      ]
    ]);
    
    node.toString()
    // 'unodostresquatro'
    var node = new SourceNode(1, 2, "a.js", [
      new SourceNode(3, 4, "b.js", "uno"),
      "dos",
      [
        "tres",
        new SourceNode(5, 6, "c.js", "quatro")
      ]
    ]);
    
    node.toStringWithSourceMap({ file: "my-output-file.js" })
    // { code: 'unodostresquatro',
    //   map: [object SourceMapGenerator] }

  • SourceMapConsumer.prototype.computeColumnSpans()
    SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
    SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
    SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
    SourceMapConsumer.prototype.hasContentsOfAllSources()
    SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
    SourceMapConsumer.prototype.eachMapping(callback, context, order)
    SourceMapGenerator
    new SourceMapGenerator([startOfSourceMap])
    SourceMapGenerator.fromSourceMap(sourceMapConsumer)
    SourceNode
    new SourceNode([line, column, source[, chunk[, name]]])
    SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
    SourceMapGenerator.prototype.addMapping(mapping)
    SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
    SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
    SourceMapGenerator.prototype.toString()
    SourceNode.prototype.add(chunk)
    SourceNode.prototype.prepend(chunk)
    SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
    SourceNode.prototype.walk(fn)
    SourceNode.prototype.walkSourceContents(fn)
    SourceNode.prototype.join(sep)
    SourceNode.prototype.replaceRight(pattern, replacement)
    SourceNode.prototype.toString()
    SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])

    README

    hashtag
    wordwrap

    Wrap your words.

    hashtag
    example

    hashtag
    made out of meat

    meat.js

    output:

    hashtag
    centered

    center.js

    output:

    hashtag
    methods

    var wrap = require('wordwrap');

    hashtag
    wrap(stop), wrap(start, stop, params={mode:"soft"})

    Returns a function that takes a string and returns a new string.

    Pad out lines with spaces out to column start and then wrap until column stop. If a word is longer than stop - start characters it will overflow.

    In "soft" mode, split chunks by /(\S+\s+/ and don't break up chunks which are longer than stop - start, in "hard" mode, split chunks with /\b/ and break up chunks longer than stop - start.

    hashtag
    wrap.hard(start, stop)

    Like wrap() but with params.mode = "hard".

    var wrap = require('wordwrap')(15);
    console.log(wrap('You and your whole family are made out of meat.'));
    You and your
    whole family
    are made out
    of meat.
    var wrap = require('wordwrap')(20, 60);
    console.log(wrap(
        'At long last the struggle and tumult was over.'
        + ' The machines had finally cast off their oppressors'
        + ' and were finally free to roam the cosmos.'
        + '\n'
        + 'Free of purpose, free of obligation.'
        + ' Just drifting through emptiness.'
        + ' The sun was just another point of light.'
    ));
                        At long last the struggle and tumult
                        was over. The machines had finally cast
                        off their oppressors and were finally
                        free to roam the cosmos.
                        Free of purpose, free of obligation.
                        Just drifting through emptiness. The
                        sun was just another point of light.
    screen shot 2015-06-09 at 2 08 34 am

    lazy-cache

    Cache requires to be lazy-loaded when needed.

    hashtag
    Install

    Install with npmarrow-up-right:

    If you use webpack and are experiencing issues, try using unlazy-loaderarrow-up-right, a webpack loader that fixes the bug that prevents webpack from working with native javascript getters.

    hashtag
    Usage

    Use as a property on lazy

    The module is also added as a property to the lazy function so it can be called without having to call a function first.

    Use as a function

    hashtag
    Aliases

    An alias may be passed as the second argument if you don't want to use the automatically camel-cased variable name.

    Example

    hashtag
    Browserify usage

    Example

    hashtag
    Kill switch

    In certain rare edge cases it may be necessary to unlazy all lazy-cached dependencies (5 reported cases after ~30 million downloads).

    To force lazy-cache to immediately invoke all dependencies, do:

    hashtag
    Related projects

    You might also be interested in these projects:

    : CLI tool that tells you when dependencies are missing from package.json and offers you a… |

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, .

    hashtag
    Building docs

    Generate readme and API documentation with :

    Or, if is installed globally:

    hashtag
    Running tests

    Install dev dependencies:

    hashtag
    Author

    Jon Schlinkert

    hashtag
    License

    Copyright © 2016, . Released under the .

    This file was generated by , v0.9.0, on April 22, 2016.

    Change Log

    hashtag
    0.5.6

    • Fix for regression when people were using numbers as names in source maps. See

      236.

    center-align

    Center-align the text in a string.

    Install with

    hashtag
    Usage

    Example

    right-align

    Right-align the text in a string.

    Install with

    hashtag
    Usage

    Example

    longest

    Get the longest item in an array.

    hashtag
    Install with

    hashtag

    $ npm install lazy-cache --save
    hashtag
    0.5.5
    • Fix "regression" of unsupported, implementation behavior that half the world happens to have come to depend on. See #235.

    • Fix regression involving function hoisting in SpiderMonkey. See #233.

    hashtag
    0.5.4

    • Large performance improvements to source-map serialization. See #228 and #229.

    hashtag
    0.5.3

    • Do not include unnecessary distribution files. See

      commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86.

    hashtag
    0.5.2

    • Include browser distributions of the library in package.json's files. See

      issue #212.

    hashtag
    0.5.1

    • Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See

      ff05274becc9e6e1295ed60f3ea090d31d843379.

    hashtag
    0.5.0

    • Node 0.8 is no longer supported.

    • Use webpack instead of dryice for bundling.

    • Big speedups serializing source maps. See pull request #203.

    • Fix a bug with SourceMapConsumer.prototype.sourceContentFor and sources that explicitly start with the source root. See issue #199.

    hashtag
    0.4.4

    • Fix an issue where using a SourceMapGenerator after having created a SourceMapConsumer from it via SourceMapConsumer.fromSourceMap failed. See issue #191.

    • Fix an issue with where SourceMapGenerator would mistakenly consider different mappings as duplicates of each other and avoid generating them. See issue #192.

    hashtag
    0.4.3

    • A very large number of performance improvements, particularly when parsing source maps. Collectively about 75% of time shaved off of the source map parsing benchmark!

    • Fix a bug in SourceMapConsumer.prototype.allGeneratedPositionsFor and fuzzy searching in the presence of a column option. See issue #177.

    • Fix a bug with joining a source and its source root when the source is above the root. See issue #182.

    • Add the SourceMapConsumer.prototype.hasContentsOfAllSources method to determine when all sources' contents are inlined into the source map. See issue #190.

    hashtag
    0.4.2

    • Add an .npmignore file so that the benchmarks aren't pulled down by dependent projects. Issue #169.

    • Add an optional column argument to SourceMapConsumer.prototype.allGeneratedPositionsFor and better handle lines with no mappings. Issues #172 and #173.

    hashtag
    0.4.1

    • Fix accidentally defining a global variable. #170.

    hashtag
    0.4.0

    • The default direction for fuzzy searching was changed back to its original direction. See #164.

    • There is now a bias option you can supply to SourceMapConsumer to control the fuzzy searching direction. See #167.

    • About an 8% speed up in parsing source maps. See #159.

    • Added a benchmark for parsing and generating source maps.

    hashtag
    0.3.0

    • Change the default direction that searching for positions fuzzes when there is not an exact match. See #154.

    • Support for environments using json2.js for JSON serialization. See #156.

    hashtag
    0.2.0

    • Support for consuming "indexed" source maps which do not have any remote

      sections. See pull request #127. This introduces a minor backwards

      incompatibility if you are monkey patching SourceMapConsumer.prototype

      methods.

    hashtag
    0.1.43

    • Performance improvements for SourceMapGenerator and SourceNode. See issue

      148 for some discussion and issues #150, #151, and #152 for implementations.

    hashtag
    0.1.42

    • Fix an issue where SourceNodes from different versions of the source-map

      library couldn't be used in conjunction with each other. See issue #142.

    hashtag
    0.1.41

    • Fix a bug with getting the source content of relative sources with a "./" prefix. See issue #145 and Bug 1090768arrow-up-right.

    • Add the SourceMapConsumer.prototype.computeColumnSpans method to compute the column span of each mapping.

    • Add the SourceMapConsumer.prototype.allGeneratedPositionsFor method to find all generated positions associated with a given original source and line.

    hashtag
    0.1.40

    • Performance improvements for parsing source maps in SourceMapConsumer.

    hashtag
    0.1.39

    • Fix a bug where setting a source's contents to null before any source content

      had been set before threw a TypeError. See issue #131.

    hashtag
    0.1.38

    • Fix a bug where finding relative paths from an empty path were creating

      absolute paths. See issue #129.

    hashtag
    0.1.37

    • Fix a bug where if the source root was an empty string, relative source paths

      would turn into absolute source paths. Issue #124.

    hashtag
    0.1.36

    • Allow the names mapping property to be an empty string. Issue #121.

    hashtag
    0.1.35

    • A third optional parameter was added to SourceNode.fromStringWithSourceMap to specify a path that relative sources in the second parameter should be relative to. Issue #105.

    • If no file property is given to a SourceMapGenerator, then the resulting source map will no longer have a null file property. The property will simply not exist. Issue #104.

    • Fixed a bug where consecutive newlines were ignored in SourceNodes. Issue #116.

    hashtag
    0.1.34

    • Make SourceNode work with windows style ("\r\n") newlines. Issue #103.

    • Fix bug involving source contents and the SourceMapGenerator.prototype.applySourceMap. Issue #100.

    hashtag
    0.1.33

    • Fix some edge cases surrounding path joining and URL resolution.

    • Add a third parameter for relative path to SourceMapGenerator.prototype.applySourceMap.

    • Fix issues with mappings and EOLs.

    hashtag
    0.1.32

    • Fixed a bug where SourceMapConsumer couldn't handle negative relative columns (issue 92).

    • Fixed test runner to actually report number of failed tests as its process exit code.

    • Fixed a typo when reporting bad mappings (issue 87).

    hashtag
    0.1.31

    • Delay parsing the mappings in SourceMapConsumer until queried for a source location.

    • Support Sass source maps (which at the time of writing deviate from the spec in small ways) in SourceMapConsumer.

    hashtag
    0.1.30

    • Do not join source root with a source, when the source is a data URI.

    • Extend the test runner to allow running single specific test files at a time.

    • Performance improvements in SourceNode.prototype.walk and SourceMapConsumer.prototype.eachMapping.

    • Source map browser builds will now work inside Workers.

    • Better error messages when attempting to add an invalid mapping to a SourceMapGenerator.

    hashtag
    0.1.29

    • Allow duplicate entries in the names and sources arrays of source maps

      (usually from TypeScript) we are parsing. Fixes github issue 72.

    hashtag
    0.1.28

    • Skip duplicate mappings when creating source maps from SourceNode; github

      issue 75.

    hashtag
    0.1.27

    • Don't throw an error when the file property is missing in SourceMapConsumer,

      we don't use it anyway.

    hashtag
    0.1.26

    • Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.

    hashtag
    0.1.25

    • Make compatible with browserify

    hashtag
    0.1.24

    • Fix issue with absolute paths and file:// URIs. See

      https://bugzilla.mozilla.org/show_bug.cgi?id=885597arrow-up-right

    hashtag
    0.1.23

    • Fix issue with absolute paths and sourcesContent, github issue 64.

    hashtag
    0.1.22

    • Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.

    hashtag
    0.1.21

    • Fixed handling of sources that start with a slash so that they are relative to

      the source root's host.

    hashtag
    0.1.20

    • Fixed github issue #43: absolute URLs aren't joined with the source root

      anymore.

    hashtag
    0.1.19

    • Using Travis CI to run tests.

    hashtag
    0.1.18

    • Fixed a bug in the handling of sourceRoot.

    hashtag
    0.1.17

    • Added SourceNode.fromStringWithSourceMap.

    hashtag
    0.1.16

    • Added missing documentation.

    • Fixed the generating of empty mappings in SourceNode.

    hashtag
    0.1.15

    • Added SourceMapGenerator.applySourceMap.

    hashtag
    0.1.14

    • The sourceRoot is now handled consistently.

    hashtag
    0.1.13

    • Added SourceMapGenerator.fromSourceMap.

    hashtag
    0.1.12

    • SourceNode now generates empty mappings too.

    hashtag
    0.1.11

    • Added name support to SourceNode.

    hashtag
    0.1.10

    • Added sourcesContent support to the customer and generator.

    lint-depsarrow-up-right
    morearrow-up-right
    homepagearrow-up-right
    please create an issuearrow-up-right
    verbarrow-up-right
    verbarrow-up-right
    github/jonschlinkertarrow-up-right
    twitter/jonschlinkertarrow-up-right
    Jon Schlinkertarrow-up-right
    MIT licensearrow-up-right
    verbarrow-up-right
    var utils = require('lazy-cache')(require);
    var utils = require('lazy-cache')(require);
    
    // `npm install glob`
    utils('glob');
    
    // glob sync
    console.log(utils.glob.sync('*.js'));
    
    // glob async
    utils.glob('*.js', function (err, files) {
      console.log(files);
    });
    var utils = require('lazy-cache')(require);
    var glob = utils('glob');
    
    // `glob` is a now a function that may be called when needed
    glob().sync('foo/*.js');
    var utils = require('lazy-cache')(require);
    
    // alias `ansi-yellow` as `yellow`
    utils('ansi-yellow', 'yellow');
    console.log(utils.yellow('foo'));
    var utils = require('lazy-cache')(require);
    // temporarily re-assign `require` to trick browserify
    var fn = require;
    require = utils;
    // list module dependencies (here, `require` is actually `lazy-cache`)
    require('glob');
    require = fn; // restore the native `require` function
    
    /**
     * Now you can use glob with the `utils.glob` variable
     */
    
    // sync
    console.log(utils.glob.sync('*.js'));
    
    // async
    utils.glob('*.js', function (err, files) {
      console.log(files.join('\n'));
    });
    process.env.UNLAZY = true;
    $ npm install verb && npm run docs
    $ verb
    $ npm install -d && npm test
    If used on the following:

    The result would be:

    hashtag
    Related projects

    • align-textarrow-up-right: Align the text in a string. | homepagearrow-up-right

    • justifiedarrow-up-right: Wrap words to a specified length and justified the text. | homepagearrow-up-right

    • right-alignarrow-up-right: Right-align the text in a string. | homepagearrow-up-right

    • : Wrap words to a specified length. |

    hashtag
    Running tests

    Install dev dependencies:

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, please create an issuearrow-up-right.

    hashtag
    Author

    Jon Schlinkert

    • github/jonschlinkertarrow-up-right

    • twitter/jonschlinkertarrow-up-right

    hashtag
    License

    Copyright © 2015 Jon Schlinkert Released under the MIT license.

    This file was generated by verb-cliarrow-up-right on October 27, 2015.

    npmarrow-up-right
    If used on the following:

    The result would be:

    hashtag
    Related projects

    • align-textarrow-up-right: Align the text in a string.

    • center-alignarrow-up-right: Center-align the text in a string.

    • justifyarrow-up-right: Left or right (or both) justify text using a custom width and character

    • : Repeat the given string n times. Fastest implementation for repeating a string.

    • : Create an array by repeating the given value n times.

    • : Wrap words to a specified length.

    hashtag
    Running tests

    Install dev dependencies:

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, please create an issuearrow-up-right

    hashtag
    Author

    Jon Schlinkert

    • github/jonschlinkertarrow-up-right

    • twitter/jonschlinkertarrow-up-right

    hashtag
    License

    Copyright © 2015 Jon Schlinkert Released under the MIT license.

    This file was generated by verb-cliarrow-up-right on June 09, 2015.

    npmarrow-up-right
    Install with bowerarrow-up-right

    hashtag
    Running tests

    Install dev dependencies.

    hashtag
    Usage

    hashtag
    Related projects

    • longest-valuearrow-up-right: Get the longest value for the given property from an array of objects. Useful for aligning values.

    • right-align-valuesarrow-up-right: Right align the values of a given property for each object in an array. Useful for creating text columns or tables.

    • right-pad-valuesarrow-up-right: Right pad the values of a given property for each object in an array. Useful for creating text columns or tables.

    • : Repeat the given string n times. Fastest implementation for repeating a string.

    • : Right pad a string with zeros or a specified string. Fastest implementation.

    • : Left pad a string with zeros or a specified string. Fastest implementation.

    hashtag
    Running tests

    Install dev dependencies.

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, please create an issuearrow-up-right

    hashtag
    Author

    Jon Schlinkert

    • github/jonschlinkertarrow-up-right

    • twitter/jonschlinkertarrow-up-right

    hashtag
    License

    Copyright (c) 2015 Jon Schlinkert Released under the MIT license

    This file was generated by verb-cliarrow-up-right on March 31, 2015.

    npmarrow-up-right

    cliui

    arrow-up-right arrow-up-right arrow-up-right

    easily create complex multi-column command-line-interfaces.

    hashtag
    Example

    hashtag
    Layout DSL

    cliui exposes a simple layout DSL:

    If you create a single ui.row, passing a string rather than an object:

    • \n: characters will be interpreted as new rows.

    • \t: characters will be interpreted as new columns.

    as an example...

    will output:

    hashtag
    Methods

    hashtag
    cliui({width: integer})

    Specify the maximum width of the UI being generated.

    hashtag
    cliui({wrap: boolean})

    Enable or disable the wrapping of text in a column.

    hashtag
    cliui.div(column, column, column)

    Create a row with any number of columns, a column can either be a string, or an object with the following options:

    • width: the width of a column.

    • align: alignment, right or center.

    • padding:

    hashtag
    cliui.span(column, column, column)

    Similar to div, except the next row will be appended without a new line being created.

    Change Log

    hashtag
    v3.10.0 (2015/05/29 04:25 +00:00)

    • #165arrow-up-right expose yargs.terminalWidth() thanks @ensonic (@bcoe)

    • better array handling thanks @getify (@bcoe)

    hashtag
    v3.9.1 (2015/05/20 05:14 +00:00)

    • clarify .config() docs (@linclark)

    • fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe)

    hashtag
    v3.9.0 (2015/05/10 18:32 +00:00)

    • Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe)

    • Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell)

    hashtag
    v3.8.0 (2015/04/24 23:10 +00:00)

    • showHelp's method signature was misleading fixes #153 (@bcoe)

    • refactor yargs' table layout logic to use new helper library (@bcoe)

    • Fix README example in argument requirements (@annonymouse)

    hashtag
    v3.7.2 (2015/04/13 11:52 -07:00)

    • updated yargs to use the style guide (agokjr)

    • [22382ee]( various bug fixes for $0 (@nylen)

    hashtag
    v3.7.1 (2015/04/10 11:06 -07:00)

    • detect iojs bin along with node bin. (@bcoe)

    • improvements to example documentation in README.md (@rstacruz)

    • showHelp() no longer requires that .argv has been called (@bcoe)

    hashtag
    v3.7.0 (2015/04/04 02:29 -07:00)

    • make .requiresArg() work with type hints. (@bcoe).

    • serialize arrays and objects in usage strings. (@bcoe).

    • be more lenient about alias/primary key ordering in chaining API. (@bcoe)

    hashtag
    v3.6.0 (2015/03/21 01:00 +00:00)

    • support for .js configuration files. (@pirxpilot)

    hashtag
    v3.5.4 (2015/03/12 05:56 +00:00)

    • message for non-option arguments is now optional, thanks to (@raine)

    hashtag
    v3.5.3 (2015/03/09 06:14 +00:00)

    • completion script was missing in package.json (@bcoe)

    hashtag
    v3.5.2 (2015/03/09 06:11 +00:00)

    • parse was being called multiple times, resulting in strange behavior (@bcoe)

    hashtag
    v3.5.1 (2015/03/09 04:55 +00:00)

    • accidentally left testing logic in (@bcoe)

    hashtag
    v3.5.0 (2015/03/09 04:49 +00:00)

    • added support for bash completions see #4 (@bcoe)

    • downgrade to mocha 2.1.0 until can be sorted out (@bcoe)

    hashtag
    v3.4.7 (2015/03/09 04:09 +00:00)

    • the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe)

    hashtag
    v3.4.6 (2015/03/09 04:01 +00:00)

    • set placeholders for all keys fixes #115 (@bcoe)

    hashtag
    v3.4.5 (2015/03/01 20:31 +00:00)

    • fix for count consuming too many arguments (@bcoe)

    hashtag
    v3.4.4 (2015/02/28 04:52 +00:00)

    • added nargs feature, allowing you to specify the number of arguments after an option (@bcoe)

    • updated README with full example of v3.0 API (@bcoe)

    hashtag
    v3.3.3 (2015/02/28 04:23 +00:00)

    • remove string dependency, which conflicted with other libraries see #106 (@bcoe)

    hashtag
    v3.3.2 (2015/02/28 04:11 +00:00)

    • add $0 to epilog (@schnittstabil)

    hashtag
    v3.3.1 (2015/02/24 03:28 +00:00)

    • fix for applying defaults to camel-case args (@bcoe)

    hashtag
    v3.3.0 (2015/02/24 00:49 +00:00)

    • fix and document restart() command, as a tool for building nested CLIs (@bcoe)

    hashtag
    v3.2.1 (2015/02/22 05:45 +00:00)

    • you can now provide a function that generates a default value (@bcoe)

    hashtag
    v3.2.0 (2015/02/22 05:24 +00:00)

    • improvements to yargs two-column text layout (@bcoe)

    • Tweak NPM version badge (@nylen)

    hashtag
    v3.1.0 (2015/02/19 19:37 +00:00)

    • version now accepts a function, making it easy to load version #s from a package.json (@bcoe)

    hashtag
    v3.0.4 (2015/02/14 01:40 +00:00)

    • various fixes for dot-notation handling (@bcoe)

    hashtag
    v3.0.3 (2015/02/14 00:59 +00:00)

    • make sure dot-notation is applied to aliases (@bcoe)

    hashtag
    3.0.2 (2015/02/13 16:50 +00:00)

    • document epilog shorthand of epilogue. (@bcoe)

    • any non-truthy value now causes check to fail see #76 (@bcoe)

    • finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe)

    hashtag
    v2.3.0 (2015/02/08 20:41 +00:00)

    • allow for undefined boolean defaults (@ashi009)

    hashtag
    v2.2.0 (2015/02/08 20:07 +00:00)

    • in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe)

    hashtag
    v2.1.2 (2015/02/08 06:05 +00:00)

    • switch to path.relative (@bcoe)

    • remove mocha.opts. (@bcoe)

    • document using .string('_') for string ids. see #56 (@bcoe)

    hashtag
    v2.1.1 (2015/02/06 08:08 +00:00)

    • fix for #71, 'newAliases' of undefined (@bcoe)

    hashtag
    v2.1.0 (2015/02/06 07:59 +00:00)

    • try to guess argument types, and apply sensible defaults see #73 (@bcoe)

    hashtag
    v2.0.1 (2015/02/06 07:54 +00:00)

    • Fix for strange behavior with --sort option, see #51 (@bcoe)

    hashtag
    v2.0.0 (2015/02/06 07:45 +00:00)

    • - fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe)

    • Add files field to the package.json (@shinnn)

    • fix for yargs.argv having the same keys added multiple times see #63 (@bcoe)

    hashtag
    v1.3.2 (2014/10/06 21:56 +00:00)

    • 1.3.2 (@chevex)

    hashtag
    list (2014/08/30 18:41 +00:00)

    • Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex)

    • version output will not print extra newline (@boneskull)

    • Added contributors section to package.json (@chrisn)

    hashtag
    v1.0.15 (2014/02/05 23:18 +00:00)

    • 1.0.15 update to badges (@chevex)

    hashtag
    v1.0.14 (2014/02/05 23:17 +00:00)

    • Revert "Fixed issue which caused .demand function not to work correctly." (@chevex)

    hashtag
    v1.0.13 (2014/02/05 22:13 +00:00)

    • Fixed issue which caused .demand function not to work correctly. (@chevex)

    hashtag
    v1.0.12 (2013/12/13 00:09 +00:00)

    • 1.0.12 (@chevex)

    hashtag
    v1.0.11 (2013/12/13 00:07 +00:00)

    • 1.0.11 (@chevex)

    hashtag
    v1.0.10 (2013/12/12 23:57 +00:00)

    • Fixed formatting in README (@chevex)

    hashtag
    v1.0.9 (2013/12/12 23:47 +00:00)

    • Update README.md (@chevex)

    hashtag
    v1.0.8 (2013/12/06 16:36 +00:00)

    • fix error caused by check() see #1 (@martinheidegger)

    hashtag
    v1.0.7 (2013/11/24 18:01 +00:00)

    • Modified Pirate Joe image. (@chevex)

    hashtag
    v1.0.6 (2013/11/23 19:21 +00:00)

    • Updated Pirate Joe image. (@chevex)

    hashtag
    v1.0.5 (2013/11/23 19:09 +00:00)

    • Updated readme notice again. (@chevex)

    hashtag
    v1.0.4 (2013/11/23 19:05 +00:00)

    • Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex)

    hashtag
    v1.0.3 (2013/11/23 17:43 +00:00)

    • Changed some small wording in README.md. (@chevex)

    • Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone)

    hashtag
    v1.0.2 (2013/11/23 09:46 +00:00)

    • 1.0.2 (@chevex)

    hashtag
    v1.0.1 (2013/11/23 09:39 +00:00)

    • Updated image. (@chevex)

    hashtag
    v1.0.0 (2013/11/23 09:33 +00:00)

    • Rebranded from optimist to yargs in the spirit of the fork :D (@chevex)

    • Added documentation for demandCount(). (@chevex)

    • Simplified the error messages returned by .check(). (@chevex)

    hashtag
    0.6.0 (2013/06/25 08:48 +00:00)

    • all tests passing using minimist (@substack)

    • all parse tests now passing (@substack)

    • using minimist, some tests passing (@substack)

    hashtag
    0.5.2 (2013/05/31 03:46 +00:00)

    • fixed the whitespace bug without breaking anything else (@substack)

    • failing test for whitespace arg (@substack)

    hashtag
    0.5.1 (2013/05/30 07:17 +00:00)

    • fix parse() to work with functions before it (@substack)

    • failing test for parse() with modifiers (@substack)

    hashtag
    0.5.0 (2013/05/18 21:59 +00:00)

    • fixes for dash (@substack)

    hashtag
    0.4.0 (2013/04/13 19:03 +00:00)

    • failing short test (@substack)

    hashtag
    0.3.7 (2013/04/04 04:07 +00:00)

    • Fix for windows. On windows there is no _ in environment. (@hdf)

    hashtag
    0.3.6 (2013/04/04 04:04 +00:00)

    • Add support for newlines in -a="" arguments (@danielbeardsley)

    • drop 0.4, add 0.8 to travis (@substack)

    hashtag
    0.3.5 (2012/10/10 11:09 +00:00)

    • Fix parsing booleans (@vojtajina)

    • set $0 properly in the tests (@substack)

    hashtag
    0.3.4 (2012/04/30 06:54 +00:00)

    • bump for string "true" params (@substack)

    • Fix failing test for aliased booleans. (@coderarity)

    • Add failing test for short aliased booleans. (@coderarity)

    hashtag
    0.3.3 (2012/04/30 06:45 +00:00)

    • Fixes #37.

    hashtag
    0.3.2 (2012/04/12 20:28 +00:00)

    • travis badge (@substack)

    • Fix boolean aliases. (@coderarity)

    • Adjusted package.json to use tap (@jfhbrook)

    hashtag
    0.3.1 (2011/12/31 08:44 +00:00)

    • If "default" is set to false it was not passed on, fixed. (@wolframkriesing)

    hashtag
    0.3.0 (2011/12/09 06:03 +00:00)

    • bump and documented dot notation (@substack)

    hashtag
    0.2.7 (2011/10/20 02:25 +00:00)

    • argv. can be told 'Hey! argv.! Don't be messing with my args.', and it WILL obey (@colinta)

    • optimistic critter image (@substack)

    • alias options() to option() (@substack)

    kind-of

    Get the native type of a value.

    hashtag
    Install

    Install with npmarrow-up-right:

    hashtag
    Install

    Install with

    hashtag
    Usage

    es5, browser and es6 ready

    hashtag
    Benchmarks

    Benchmarked against and . Note that performaces is slower for es6 features Map, WeakMap, Set and WeakSet.

    hashtag
    Optimizations

    In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:

    1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why typeof checks were being used in my own libraries and other libraries I use a lot.

    2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the Object constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like val.constructor.name), so that every other type check would not be penalized it.

    hashtag
    About

    hashtag
    Related projects

    • : Returns true if the given string looks like a glob pattern or an extglob pattern… |

    • : Returns true if the value is a number. comprehensive tests. |

    hashtag
    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, .

    hashtag
    Contributors

    hashtag
    Building docs

    (This project's readme.md is generated by , please don't edit the readme directly. Any changes to the readme must be made in the readme template.)

    To generate the readme, run the following command:

    hashtag
    Running tests

    Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

    hashtag
    Author

    Jon Schlinkert

    hashtag
    License

    Copyright © 2017, . Released under the .

    This file was generated by , v0.6.0, on May 16, 2017.

    uglify-to-browserify

    A transform to make UglifyJS work in browserify.

    arrow-up-right arrow-up-right arrow-up-right

    hashtag
    Installation

    npm install uglify-to-browserify

    hashtag
    License

    MIT

    $ npm i center-align --save
    var centerAlign = require('center-align');
    Lorem ipsum dolor sit amet,
    consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
    ut labore et dolore
    magna aliqua. Ut enim ad minim
    veniam, quis
         Lorem ipsum dolor sit amet,
            consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
             ut labore et dolore
        magna aliqua. Ut enim ad minim
                 veniam, quis
    $ npm i -d && npm test
    $ npm i right-align --save
    var rightAlign = require('right-align');
    rightAlign(string);
    Lorem ipsum dolor sit amet,
    consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
    ut labore et dolore
    magna aliqua. Ut enim ad minim
    veniam, quis
               Lorem ipsum dolor sit amet,
                    consectetur adipiscing
    elit, sed do eiusmod tempor incididunt
                       ut labore et dolore
            magna aliqua. Ut enim ad minim
                              veniam, quis
    $ npm i -d && npm test
    npm i longest --save
    bower install longest --save
    npm i -d && npm test
    var longest = require('longest');
    longest(['a', 'abcde', 'abc']);
    //=> 'abcde'
    
    longest(['a', 'abcde', 'abc']).length;
    //=> 5
    npm i -d && npm test
    var ui = require('cliui')({
      width: 80
    })
    
    ui.div('Usage: $0 [command] [options]')
    
    ui.div({
      text: 'Options:',
      padding: [2, 0, 2, 0]
    })
    
    ui.div(
      {
        text: "-f, --file",
        width: 40,
        padding: [0, 4, 0, 4]
      },
      {
        text: "the file to load",
        width: 25
      },
      {
        text: "[required]",
        align: 'right'
      }
    )
    
    console.log(ui.toString())
    $ npm install --save kind-of
    word-wraparrow-up-right
    homepagearrow-up-right
    repeat-stringarrow-up-right
    repeat-elementarrow-up-right
    word-wraparrow-up-right
    repeat-stringarrow-up-right
    pad-rightarrow-up-right
    pad-leftarrow-up-right

    5768447arrow-up-right fix coverage. (@bcoe)

  • 82e793farrow-up-right detect console width and perform word-wrapping. (@bcoe)

  • 67476b3arrow-up-right refactor two-column table layout so that we can use it for examples and usage (@bcoe)

  • 4724cdfarrow-up-right major refactor of index.js, in prep for 3.x release. (@bcoe)

  • #57arrow-up-right Merge pull request #57 from eush77/option-readme (@eush77)

  • 2d68c5barrow-up-right Disable process.exit calls using .exitProcess(false) (@cianclarke)

  • 45da9ecarrow-up-right Mention .option in README (@eush77)

  • cc295c0arrow-up-right Added 'require' and 'required' as synonyms for 'demand' (@chrisn)

  • d0bf951arrow-up-right Updating minimist. (@chevex)

  • c15f8e7arrow-up-right Fix #31 (bad interaction between camelCase options and strict mode) (@nylen)

  • d991b9barrow-up-right Added .help() and .version() methods (@chrisn)

  • e8c8aa4arrow-up-right Added .showHelpOnFail() method (@chrisn)

  • e855af4arrow-up-right Allow boolean flag with .demand() (@chrisn)

  • 14dbec2arrow-up-right Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex)

  • bef74fcarrow-up-right Informing users that Yargs is the official optimist successor. (@chevex)

  • #24arrow-up-right Merge pull request #24 from chrisn/strict (@chrisn)

  • 889a2b2arrow-up-right Added requiresArg option, for options that require values (@chrisn)

  • eb16369arrow-up-right Added .strict() method, to report error if unknown arguments are given (@chrisn)

  • 0471c3farrow-up-right Changed optimist to yargs in usage-options.js example (@chrisn)

  • 5c88f74arrow-up-right Change optimist to yargs in examples (@chrisn)

  • 66f12c8arrow-up-right Fix a couple of bad interactions between aliases and defaults (@nylen)

  • 8fa1d80arrow-up-right Document second argument of usage(message, opts) (@Gobie)

  • 56e6528arrow-up-right For "--some-option", also set argv.someOption (@nylen)

  • ed5f6d3arrow-up-right Finished porting unit tests to Mocha. (@chevex)

  • 661c678arrow-up-right Fixed an issue with demand not accepting a zero value. (@chevex)

  • 731dd3carrow-up-right Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex)

  • fa15417arrow-up-right Added a few missing 'return self' (@chevex)

  • e655e4darrow-up-right Fix showing help in certain JS environments. (@chevex)

  • a746a31arrow-up-right Better string representation of default values. (@chevex)

  • 6134619arrow-up-right Implies: conditional demands (@chevex)

  • 046b93barrow-up-right Added support for JSON config files. (@chevex)

  • a677ec0arrow-up-right Add .example(cmd, desc) feature. (@chevex)

  • 1bd4375arrow-up-right Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex)

  • 6b753c1arrow-up-right add .normalize(args..) support for normalizing paths (@chevex)

  • 33d7d59arrow-up-right Customize error messages with demand(key, msg) (@chevex)

  • 647d37farrow-up-right Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex)

  • 9059d1aarrow-up-right Pass aliases object to check functions for greater versatility. (@chevex)

  • 623dc26arrow-up-right Added ability to count boolean options and rolled minimist library back into project. (@chevex)

  • 49f0dcearrow-up-right Fixed small typo. (@chevex)

  • 79ec980arrow-up-right Removed dependency on wordwrap module. (@chevex)

  • ea14630arrow-up-right Merge branch 'master' of github.com:chbrown/node-optimist (@chevex)

  • 2b75da2arrow-up-right Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex)

  • d9bda11arrow-up-right Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex)

  • d6cc606arrow-up-right Renamed README. (@chevex)

  • 9498d3farrow-up-right Renamed readme and added .gitignore. (@chevex)

  • bbd1fe3arrow-up-right Included examples for help and showHelp functions and fixed few formatting issues (@thefourtheye)

  • 37fea04arrow-up-right .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown)

  • 855b20darrow-up-right Documented function signatures are useful for dynamically typed languages. (@chbrown)

  • 6655688arrow-up-right Give credit where its due (@DeadAlready)

  • 602a2a9arrow-up-right v0.5.3 - Remove wordwrap as dependency (@DeadAlready)

  • 88e5d32arrow-up-right test/usage.js no longer hangs (@jfhbrook)

  • e1e740carrow-up-right two tests for combined boolean/alias opts parsing (@jfhbrook)

  • f7692eaarrow-up-right [fix] Fix for parsing boolean edge case (@indexzero)

  • d1f92d1arrow-up-right

  • b01bda8arrow-up-right [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero)

  • aa753e7arrow-up-right [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero)

  • 7bfce2farrow-up-right s/sys/util/ (@substack)

  • d420a7aarrow-up-right update usage output (@substack)

  • cf86eedarrow-up-right some sage readme protips about parsing rules (@substack)

  • 5da9f7aarrow-up-right documented all the methods finally (@substack)

  • 8ca6879arrow-up-right fenced syntax highlighting (@substack)

  • b72bacfarrow-up-right right-alignment of wrapped extra params (@substack)

  • 2b980bfarrow-up-right now with .wrap() (@substack)

  • d614f63arrow-up-right don't show 'Options:' when there aren't any (@substack)

  • 691eda3arrow-up-right failing test for multi-aliasing (@substack)

  • 0826c9farrow-up-right "Options:" > "options:" (@substack)

  • 72f7490arrow-up-right [minor] Update formatting for .showHelp() (@indexzero)

  • 75aeccearrow-up-right options works again, too lazy to write a proper test right now (@substack)

  • f742e54arrow-up-right line_count_options example, which breaks (@substack)

  • 4ca06b8arrow-up-right line count example (@substack)

  • eeb8423arrow-up-right remove self.argv setting in boolean (@substack)

  • 6903412arrow-up-right removed camel case for now (@substack)

  • 5a0d88barrow-up-right remove dead longest checking code (@substack)

  • d782170arrow-up-right .help() too (@substack)

  • 622ec17arrow-up-right rm old help generator (@substack)

  • 7c8baacarrow-up-right nub keys (@substack)

  • 8197785arrow-up-right generate help message based on the previous calls, todo: nub (@substack)

  • 3ffbdc3arrow-up-right stub out new showHelp, better checks (@substack)

  • d4e21f5arrow-up-right let .options() take single options too (@substack)

  • 3c4cf29arrow-up-right .options() is now heaps simpler (@substack)

  • 89f0d04arrow-up-right defaults work again, all tests pass (@substack)

  • dd87333arrow-up-right update test error messages, down to 2 failing tests (@substack)

  • 53f7bc6arrow-up-right fix for bools doubling up, passes the parse test again, others fail (@substack)

  • 2213e2darrow-up-right refactored for an argv getter, failing several tests (@substack)

  • d1e7379arrow-up-right just rescan for now, alias test passes (@substack)

  • b2f8c99arrow-up-right failing alias test (@substack)

  • d0c0174arrow-up-right .alias() (@substack)

  • d85f431arrow-up-right [api] Remove .describe() in favor of building upon the existing .usage() API (@indexzero)

  • edbd527arrow-up-right [doc api] Add .describe(), .options(), and .showHelp() methods along with example. (@indexzero)

  • be4902farrow-up-right updates for coffee since it now does argv the node way (@substack)

  • e24cb23arrow-up-right more general coffeescript detection (@substack)

  • 78ac753arrow-up-right Don't trigger the CoffeeScript hack when running under node_g. (@papandreou)

  • bcfe973arrow-up-right .string() but failing test (@substack)

  • 1987acaarrow-up-right test hex strings (@substack)

  • ef36db3arrow-up-right more keywords (@substack)

  • cc53c56arrow-up-right Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou)

  • 60b57daarrow-up-right fixed boolean bug by rescanning (@substack)

  • dff6d07arrow-up-right boolean examples (@substack)

  • 0e380b9arrow-up-right boolean() with passing test (@substack)

  • 62644d4arrow-up-right coffee compatibility with node regex for versions too (@substack)

  • 430fafcarrow-up-right argv._ fixed by fixing the coffee detection (@substack)

  • 343b8afarrow-up-right whichNodeArgs test fails too (@substack)

  • 63df2f3arrow-up-right replicated mnot's bug in whichNodeEmpty test (@substack)

  • 35473a4arrow-up-right test for ./bin usage (@substack)

  • 13df151arrow-up-right don't coerce booleans to numbers (@substack)

  • 85f8007arrow-up-right package bump for automatic number conversion (@substack)

  • 8f17014arrow-up-right updated readme and examples with new auto-numberification goodness (@substack)

  • 73dc901arrow-up-right auto number conversion works yay (@substack)

  • bcec56barrow-up-right failing test for not-implemented auto numification (@substack)

  • ebd2844arrow-up-right odd that eql doesn't check types careflly (@substack)

  • fd854b0arrow-up-right package author + keywords (@substack)

  • 656a1d5arrow-up-right updated readme with .default() stuff (@substack)

  • cd7f8c5arrow-up-right passing tests for new .default() behavior (@substack)

  • 932725earrow-up-right new default() thing for setting default key/values (@substack)

  • 4e6c7abarrow-up-right test for coffee usage (@substack)

  • d54ffccarrow-up-right new --key value style with passing tests. NOTE: changes existing behavior (@substack)

  • ed2a2d5arrow-up-right package bump for summatix's coffee script fix (@substack)

  • 75a975earrow-up-right Added support for CoffeeScript (@summatix)

  • 56b2b1darrow-up-right test coverage for the falsy check() usage (@substack)

  • a4843a9arrow-up-right check bug fixed plus a handy string (@substack)

  • 857bd2darrow-up-right tests for demandCount, back up to 100% coverage (@substack)

  • 073b776arrow-up-right call demandCount from demand (@substack)

  • 4bd4b7aarrow-up-right add demandCount to check for the number of arguments in the _ list (@marshall)

  • b8689acarrow-up-right Rebase checks. That will be its own module eventually. (@substack)

  • e688370arrow-up-right a $0 like in perl (@substack)

  • 2e5e196arrow-up-right usage test hacking around process and console (@substack)

  • fcc3521arrow-up-right description pun (@substack)

  • 87a1fe2arrow-up-right mit/x11 license (@substack)

  • 8d089d2arrow-up-right bool example is more consistent and also shows off short option grouping (@substack)

  • 448d747arrow-up-right start of the readme and examples (@substack)

  • da74deaarrow-up-right more tests for long and short captures (@substack)

  • ab6387earrow-up-right silly bug in the tests with s/not/no/, all tests pass now (@substack)

  • 102496aarrow-up-right hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack)

  • a01caebarrow-up-right divide example (@substack)

  • 443da55arrow-up-right start of the lib with a package.json (@substack)

  • #164arrow-up-right
    b6662b6arrow-up-right
    0291360arrow-up-right
    #157arrow-up-right
    #158arrow-up-right
    #154arrow-up-right
    #151arrow-up-right
    #150arrow-up-right
    679fbbfarrow-up-right
    standardarrow-up-right
    https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9arrow-up-right
    89e1992arrow-up-right
    755509earrow-up-right
    0d2dfc8arrow-up-right
    56cbe2darrow-up-right
    2f5d562arrow-up-right
    5126304arrow-up-right
    4e24e22arrow-up-right
    c16cc08arrow-up-right
    870b428arrow-up-right
    58a4b24arrow-up-right
    4e588e0arrow-up-right
    718bacdarrow-up-right
    a192882arrow-up-right
    https://github.com/mochajs/mocha/issues/1585arrow-up-right
    9845e5carrow-up-right
    45b4c80arrow-up-right
    a758e0barrow-up-right
    0476af7arrow-up-right
    092477darrow-up-right
    0c4b769arrow-up-right
    2a98906arrow-up-right
    ad485cearrow-up-right
    8bfe36darrow-up-right
    49a6d18arrow-up-right
    7a55886arrow-up-right
    b6ab513arrow-up-right
    9bd2379arrow-up-right
    0b7c19barrow-up-right
    c3f35e9arrow-up-right
    74c8967arrow-up-right
    670110farrow-up-right
    0d8f791arrow-up-right
    d824620arrow-up-right
    d6edd98arrow-up-right
    d640745arrow-up-right
    3bfd41farrow-up-right
    47a2f35arrow-up-right
    01c6c61arrow-up-right
    6a1a3faarrow-up-right
    96a06b2arrow-up-right
    0250517arrow-up-right
    108fb84arrow-up-right
    a465a59arrow-up-right
    31043dearrow-up-right
    b8d3472arrow-up-right
    fbc777farrow-up-right
    a54d068arrow-up-right
    1cef5d6arrow-up-right
    e2b1fc0arrow-up-right
    f33bbb0arrow-up-right
    6509e5earrow-up-right
    05eb267arrow-up-right
    c1bde46arrow-up-right
    dfebf81arrow-up-right
    0b4e34aarrow-up-right
    #1arrow-up-right
    a247d88arrow-up-right
    d7f69e1arrow-up-right
    ece809carrow-up-right
    9e81e81arrow-up-right
    65e7a78arrow-up-right
    459e20earrow-up-right
    3d80ebearrow-up-right
    f80ff36arrow-up-right
    54e31d5arrow-up-right
    4ebb6c5arrow-up-right
    4561ce6arrow-up-right
    d37bfe0arrow-up-right
    76f1352arrow-up-right
    a7b6754arrow-up-right
    4497ca5arrow-up-right
    5a3dd1aarrow-up-right
    a20228farrow-up-right
    b13bd4carrow-up-right
    c474a64arrow-up-right
    dafe3e1arrow-up-right
    6c7a0ecarrow-up-right
    e72346aarrow-up-right
    71e1fb5arrow-up-right
    ee692b3arrow-up-right
    5045122arrow-up-right
    f28c0e6arrow-up-right
    8f44aebarrow-up-right
    b9f7b61arrow-up-right
    541bac8arrow-up-right
    3a0f014arrow-up-right
    4fb60bfarrow-up-right
    f14dda5arrow-up-right
    d09b719arrow-up-right
    6e74aa7arrow-up-right
    94adee2arrow-up-right
    c46fdd5arrow-up-right
    5c95c73arrow-up-right

    camelcase

    math_example package

    The following functions are available in the math_example package.

    • addition Adds two numbers and returns the result.

    • substraction Substracts the second number from the first and returns the result.

    • multiplication Multiplies two numbers and returns the result.

    • division Divides the first number by the second and returns the result.

    • fibonacci Applies the fibonacci sequence count times and returns the result.

    : characters will be interpreted as padding.
    [top, right, bottom, left]
    .

    Don't do uneccessary processing - why do .slice(8, -1).toLowerCase(); just to get the word regex? It's much faster to do if (type === '[object RegExp]') return 'regex'

    : Returns true if the value is a primitive. |

    Commits

    Contributor

    59

    jonschlinkertarrow-up-right

    2

    miguelmotaarrow-up-right

    1

    dtothefparrow-up-right

    1

    ksheedloarrow-up-right

    1

    pdehaanarrow-up-right

    bowerarrow-up-right
    typeofarrow-up-right
    type-ofarrow-up-right
    is-globarrow-up-right
    morearrow-up-right
    homepagearrow-up-right
    is-numberarrow-up-right
    homepagearrow-up-right
    please create an issuearrow-up-right
    verbarrow-up-right
    .verb.mdarrow-up-right
    github/jonschlinkertarrow-up-right
    twitter/jonschlinkertarrow-up-right
    Jon Schlinkertarrow-up-right
    MIT Licensearrow-up-right
    verb-generate-readmearrow-up-right

    1

    is-primitivearrow-up-right
    homepagearrow-up-right

    window-size

    Reliable way to to get the height and width of the terminal/console in a node.js environment.

    hashtag
    Install

    hashtag

    hashtag
    Author

    hashtag
    License

    Copyright (c) 2014 Jon Schlinkert Licensed under the MIT license.

    README

    hashtag
    yargs

    Yargs be a node.js library fer hearties tryin' ter parse optstrings.

    With yargs, ye be havin' a map that leads straight to yer treasure! Treasure of course, being a simple option hash.

    arrow-up-right arrow-up-right arrow-up-right arrow-up-right

    Yargs is the official successor to optimist. Please feel free to submit issues and pull requests. If you'd like to contribute and don't know where to start, have a look at :)

    hashtag
    examples

    hashtag
    With yargs, the options be just a hash!

    plunder.js:

    hashtag
    But don't walk the plank just yet! There be more! You can do short options:

    short.js:

    hashtag
    And booleans, both long, short, and even grouped:

    bool.js:

    hashtag
    And non-hyphenated options too! Just use argv._!

    nonopt.js:

    hashtag
    Yargs even counts your booleans!

    count.js

    hashtag
    Tell users how to use yer options and make demands.

    area.js:

    hashtag
    After yer demands have been met, demand more! Ask for non-hypenated arguments!

    demand_count.js:

    hashtag
    EVEN MORE SHIVER ME TIMBERS!

    default_singles.js:

    default_hash.js:

    hashtag
    And if you really want to get all descriptive about it...

    boolean_single.js

    boolean_double.js

    hashtag
    Yargs is here to help you...

    Ye can describe parameters fer help messages and set aliases. Yargs figures out how ter format a handy help string automatically.

    line_count.js

    hashtag
    methods

    By itself,

    will use process.argv array to construct the argv object.

    You can pass in the process.argv yourself:

    or use .parse() to do the same thing:

    The rest of these methods below come in just before the terminating .argv.

    hashtag
    .alias(key, alias)

    Set key names as equivalent such that updates to a key will propagate to aliases and vice-versa.

    Optionally .alias() can take an object that maps keys to aliases. Each key of this object should be the canonical version of the option, and each value should be a string or an array of strings.

    hashtag
    .default(key, value, [description])

    Set argv[key] to value if no option was specified on process.argv.

    Optionally .default() can take an object that maps keys to default values.

    But wait, there's more! the default value can be a function which returns a value. The name of the function will be used in the usage string:

    Optionally, description can also be provided and will take precedence over displaying the value in the usage instructions:

    hashtag
    .demand(key, [msg | boolean])

    hashtag
    .require(key, [msg | boolean])

    hashtag
    .required(key, [msg | boolean])

    If key is a string, show the usage information and exit if key wasn't specified in process.argv.

    If key is a number, demand at least as many non-option arguments, which show up in argv._.

    If key is an Array, demand each element.

    If a msg string is given, it will be printed when the argument is missing, instead of the standard error message. This is especially helpful for the non-option arguments in argv._.

    If a boolean value is given, it controls whether the option is demanded; this is useful when using .options() to specify command line parameters.

    hashtag
    .requiresArg(key)

    Specifies either a single option key (string), or an array of options that must be followed by option values. If any option value is missing, show the usage information and exit.

    The default behaviour is to set the value of any key not followed by an option value to true.

    hashtag
    .implies(x, y)

    Given the key x is set, it is required that the key y is set.

    implies can also accept an object specifying multiple implications.

    hashtag
    .describe(key, desc)

    Describe a key for the generated usage information.

    Optionally .describe() can take an object that maps keys to descriptions.

    hashtag
    .option(key, opt)

    hashtag
    .options(key, opt)

    Instead of chaining together .alias().demand().default().describe().string(), you can specify keys in opt for each of the chainable methods.

    For example:

    is the same as

    Optionally .options() can take an object that maps keys to opt parameters.

    hashtag
    .usage(message, opts)

    Set a usage message to show which commands to use. Inside message, the string $0 will get interpolated to the current script name or node command for the present script similar to how $0 works in bash or perl.

    opts is optional and acts like calling .options(opts).

    hashtag
    .command(cmd, desc, [fn])

    Document the commands exposed by your application.

    use desc to provide a description for each command your application accepts (the values stored in argv._).

    Optionally, you can provide a handler fn which will be executed when a given command is provided. The handler will be executed with an instance of yargs, which can be used to compose nested commands.

    Here's an example of top-level and nested commands in action:

    hashtag
    .example(cmd, desc)

    Give some example invocations of your program. Inside cmd, the string $0 will get interpolated to the current script name or node command for the present script similar to how $0 works in bash or perl. Examples will be printed out as part of the help message.

    hashtag
    .epilogue(str)

    hashtag
    .epilog(str)

    A message to print at the end of the usage instructions, e.g.,

    hashtag
    .check(fn)

    Check that certain conditions are met in the provided arguments.

    fn is called with two arguments, the parsed argv hash and an array of options and their aliases.

    If fn throws or returns a non-truthy value, show the thrown error, usage information, and exit.

    hashtag
    .fail(fn)

    Method to execute when a failure occurs, rather then printing the failure message.

    fn is called with the failure message that would have been printed.

    hashtag
    .boolean(key)

    Interpret key as a boolean. If a non-flag option follows key in process.argv, that string won't get set as the value of key.

    key will default to false, unless an default(key, undefined) is explicitly set.

    If key is an Array, interpret all the elements as booleans.

    hashtag
    .string(key)

    Tell the parser logic not to interpret key as a number or boolean. This can be useful if you need to preserve leading zeros in an input.

    If key is an Array, interpret all the elements as strings.

    .string('_') will result in non-hyphenated arguments being interpreted as strings, regardless of whether they resemble numbers.

    hashtag
    .array(key)

    Tell the parser to interpret key as an array. If .array('foo') is set, --foo foo bar will be parsed as ['foo', 'bar'] rather than as 'bar'.

    hashtag
    .nargs(key, count)

    The number of arguments that should be consumed after a key. This can be a useful hint to prevent parsing ambiguity:

    parses as:

    { _: [], token: '-my-token', '$0': 'node test' }

    Optionally .nargs() can take an object of key/narg pairs.

    hashtag
    .config(key)

    Tells the parser that if the option specified by key is passed in, it should be interpreted as a path to a JSON config file. The file is loaded and parsed, and its properties are set as arguments.

    hashtag
    .wrap(columns)

    Format usage output to wrap at columns many columns.

    By default wrap will be set to Math.min(80, windowWidth). Use .wrap(null) to specify no column limit.

    yargs.wrap(yargs.terminalWidth()) can be used to maximize the width of yargs' usage instructions.

    hashtag
    .strict()

    Any command-line argument given that is not demanded, or does not have a corresponding description, will be reported as an error.

    hashtag
    .help([option, [description]])

    Add an option (e.g., --help) that displays the usage string and exits the process. If present, the description parameter customises the description of the help option in the usage string.

    If invoked without parameters, .help returns the generated usage string.

    Example:

    Later on, argv can be retrived with yargs.argv

    hashtag
    .version(version, [option], [description])

    Add an option (e.g., --version) that displays the version number (given by the version parameter) and exits the process. If present, the description parameter customizes the description of the version option in the usage string.

    You can provide a function for version, rather than a string. This is useful if you want to use the version from your package.json:

    hashtag
    .showHelpOnFail(enable, [message])

    By default, yargs outputs a usage string if any error is detected. Use the .showHelpOnFail method to customize this behaviour. if enable is false, the usage string is not output. If the message parameter is present, this message is output after the error message.

    line_count.js

    hashtag
    .showHelp(consoleLevel='error')

    Print the usage data using the function consoleLevel for printing.

    Example:

    Or, to print the usage data to stdout instead, you can specify the use of console.log:

    Later on, argv can be retrived with yargs.argv

    hashtag
    .completion(cmd, [description], [fn]);

    Enable bash-completion shortcuts for commands and options.

    cmd: when present in argv._, will result in the .bashrc completion script being outputted. To enable bash completions, concat the generated script to your .bashrc, or .bash_profile.

    description: provide a description in your usage instructions for the command that generates bash completion scripts.

    fn, rather than relying on yargs' default completion functionlity, which shiver me timbers is pretty awesome, you can provide your own completion method.

    But wait, there's more! you can provide asynchronous completions.

    hashtag
    .showCompletionScript()

    Generate a bash completion script. Users of your application can install this script in their .bashrc, and yargs will provide completion shortcuts for commands and options.

    hashtag
    .exitProcess(enable)

    By default, yargs exits the process when the user passes a help flag, uses the .version functionality or when validation fails. Calling .exitProcess(false) disables this behavior, enabling further actions after yargs have been validated.

    hashtag
    .parse(args)

    Parse args instead of process.argv. Returns the argv object.

    hashtag
    .reset()

    Reset the argument object built up so far. This is useful for creating nested command line interfaces.

    hashtag
    .argv

    Get the arguments as a plain old object.

    Arguments without a corresponding flag show up in the argv._ array.

    The script name or node command is available at argv.$0 similarly to how $0 works in bash or perl.

    hashtag
    parsing tricks

    hashtag
    stop parsing

    Use -- to stop parsing flags and stuff the remainder into argv._.

    hashtag
    negate fields

    If you want to explicity set a field to false instead of just leaving it undefined or to override a default you can do --no-key.

    hashtag
    numbers

    Every argument that looks like a number (!isNaN(Number(arg))) is converted to one. This way you can just net.createConnection(argv.port) and you can add numbers out of argv with + without having that mean concatenation, which is super frustrating.

    hashtag
    duplicates

    If you specify a flag multiple times it will get turned into an array containing all the values in order.

    hashtag
    dot notation

    When you use dots (.s) in argument names, an implicit object path is assumed. This lets you organize arguments into nested objects.

    hashtag
    short numbers

    Short numeric head -n5 style argument work too:

    hashtag
    installation

    With , just do:

    or clone this project on github:

    To run the tests with npm, just do:

    hashtag
    inspired by

    This module is loosely inspired by Perl's .

    is-buffer

    hashtag
    Determine if an object is a Bufferarrow-up-right (including the browserify Bufferarrow-up-right)

    arrow-up-right

    hashtag
    Why not use Buffer.isBuffer?

    This module lets you check if an object is a Buffer without using Buffer.isBuffer (which includes the whole module in ).

    It's future-proof and works in node too!

    hashtag
    install

    hashtag
    usage

    hashtag
    license

    MIT. Copyright (C) .

    camelcase

    Convert a dash/dot/underscore/space separated string to camelCase: foo-bar → fooBar

    hashtag
    Install

    $ npm install --save camelcase

    hashtag
    Usage

    hashtag
    Related

    See for the inverse.

    hashtag
    License

    MIT ©

    var ui = require('./')({
      width: 60
    })
    
    ui.div(
      'Usage: node ./bin/foo.js\n' +
      '  <regex>\t  provide a regex\n' +
      '  <glob>\t  provide a glob\t [required]'
    )
    
    console.log(ui.toString())
    Usage: node ./bin/foo.js
      <regex>  provide a regex
      <glob>   provide a glob          [required]
    cliui = require('cliui')
    $ bower install kind-of --save
    var kindOf = require('kind-of');
    
    kindOf(undefined);
    //=> 'undefined'
    
    kindOf(null);
    //=> 'null'
    
    kindOf(true);
    //=> 'boolean'
    
    kindOf(false);
    //=> 'boolean'
    
    kindOf(new Boolean(true));
    //=> 'boolean'
    
    kindOf(new Buffer(''));
    //=> 'buffer'
    
    kindOf(42);
    //=> 'number'
    
    kindOf(new Number(42));
    //=> 'number'
    
    kindOf('str');
    //=> 'string'
    
    kindOf(new String('str'));
    //=> 'string'
    
    kindOf(arguments);
    //=> 'arguments'
    
    kindOf({});
    //=> 'object'
    
    kindOf(Object.create(null));
    //=> 'object'
    
    kindOf(new Test());
    //=> 'object'
    
    kindOf(new Date());
    //=> 'date'
    
    kindOf([]);
    //=> 'array'
    
    kindOf([1, 2, 3]);
    //=> 'array'
    
    kindOf(new Array());
    //=> 'array'
    
    kindOf(/foo/);
    //=> 'regexp'
    
    kindOf(new RegExp('foo'));
    //=> 'regexp'
    
    kindOf(function () {});
    //=> 'function'
    
    kindOf(function * () {});
    //=> 'function'
    
    kindOf(new Function());
    //=> 'function'
    
    kindOf(new Map());
    //=> 'map'
    
    kindOf(new WeakMap());
    //=> 'weakmap'
    
    kindOf(new Set());
    //=> 'set'
    
    kindOf(new WeakSet());
    //=> 'weakset'
    
    kindOf(Symbol('str'));
    //=> 'symbol'
    
    kindOf(new Int8Array());
    //=> 'int8array'
    
    kindOf(new Uint8Array());
    //=> 'uint8array'
    
    kindOf(new Uint8ClampedArray());
    //=> 'uint8clampedarray'
    
    kindOf(new Int16Array());
    //=> 'int16array'
    
    kindOf(new Uint16Array());
    //=> 'uint16array'
    
    kindOf(new Int32Array());
    //=> 'int32array'
    
    kindOf(new Uint32Array());
    //=> 'uint32array'
    
    kindOf(new Float32Array());
    //=> 'float32array'
    
    kindOf(new Float64Array());
    //=> 'float64array'
    #1: array
      current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
      lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
      lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
    
    #2: boolean
      current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
      lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
      lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
    
    #3: date
      current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
      lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
      lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
    
    #4: function
      current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
      lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
      lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
    
    #5: null
      current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
      lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
      lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
    
    #6: number
      current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
      lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
      lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
    
    #7: object
      current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
      lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
      lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
    
    #8: regex
      current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
      lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
      lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
    
    #9: string
      current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
      lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
      lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
    
    #10: undef
      current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
      lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
      lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
    $ npm install -g verbose/verb#dev verb-generate-readme && verb
    $ npm install && npm test
    laggingreflexarrow-up-right
    npmarrow-up-right
    github/jonschlinkertarrow-up-right
    twitter/jonschlinkertarrow-up-right
    decamelizearrow-up-right
    Sindre Sorhusarrow-up-right
    npm i window-size --save
    var size = require('window-size');
    size.height; // "80" (rows)
    size.width; // "25" (columns)
    var camelCase = require('camelcase');
    
    camelCase('foo-bar');
    //=> fooBar
    
    camelCase('foo_bar');
    //=> fooBar
    
    camelCase('Foo-Bar');
    //=> fooBar
    
    camelCase('--foo.bar');
    //=> fooBar
    
    camelCase('__foo__bar__');
    //=> fooBar
    
    camelCase('foo bar');
    //=> fooBar
    
    console.log(process.argv[3]);
    //=> --foo-bar
    camelCase(process.argv[3]);
    //=> fooBar
    
    camelCase('foo', 'bar');
    //=> fooBar
    
    camelCase('__foo__', '--bar');
    //=> fooBar
    the issue listarrow-up-right
    consolearrow-up-right
    npmarrow-up-right
    Getopt::Casualarrow-up-right
    Joe was one optimistic pirate.
    bufferarrow-up-right
    browserifyarrow-up-right
    Feross Aboukhadijeharrow-up-right
    Coverage Status
    NPM version
    Build Status
    #!/usr/bin/env node
    var argv = require('yargs').argv;
    
    if (argv.ships > 3 && argv.distance < 53.5) {
        console.log('Plunder more riffiwobbles!');
    }
    else {
        console.log('Retreat from the xupptumblers!');
    }
    $ ./plunder.js --ships=4 --distance=22
    Plunder more riffiwobbles!
    
    $ ./plunder.js --ships 12 --distance 98.7
    Retreat from the xupptumblers!
    #!/usr/bin/env node
    var argv = require('yargs').argv;
    console.log('(%d,%d)', argv.x, argv.y);
    $ ./short.js -x 10 -y 21
    (10,21)
    #!/usr/bin/env node
    var util = require('util');
    var argv = require('yargs').argv;
    
    if (argv.s) {
        util.print(argv.fr ? 'Le perroquet dit: ' : 'The parrot says: ');
    }
    console.log(
        (argv.fr ? 'couac' : 'squawk') + (argv.p ? '!' : '')
    );
    $ ./bool.js -s
    The parrot says: squawk
    
    $ ./bool.js -sp
    The parrot says: squawk!
    
    $ ./bool.js -sp --fr
    Le perroquet dit: couac!
    #!/usr/bin/env node
    var argv = require('yargs').argv;
    console.log('(%d,%d)', argv.x, argv.y);
    console.log(argv._);
    $ ./nonopt.js -x 6.82 -y 3.35 rum
    (6.82,3.35)
    [ 'rum' ]
    
    $ ./nonopt.js "me hearties" -x 0.54 yo -y 1.12 ho
    (0.54,1.12)
    [ 'me hearties', 'yo', 'ho' ]
    #!/usr/bin/env node
    var argv = require('yargs')
        .count('verbose')
        .alias('v', 'verbose')
        .argv;
    
    VERBOSE_LEVEL = argv.verbose;
    
    function WARN()  { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); }
    function INFO()  { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); }
    function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); }
    
    WARN("Showing only important stuff");
    INFO("Showing semi-mportant stuff too");
    DEBUG("Extra chatty mode");
    $ node count.js
    Showing only important stuff
    
    $ node count.js -v
    Showing only important stuff
    Showing semi-important stuff too
    
    $ node count.js -vv
    Showing only important stuff
    Showing semi-important stuff too
    Extra chatty mode
    
    $ node count.js -v --verbose
    Showing only important stuff
    Showing semi-important stuff too
    Extra chatty mode
    #!/usr/bin/env node
    var argv = require('yargs')
        .usage('Usage: $0 -w [num] -yh[num]')
        .demand(['w','h'])
        .argv;
    
    console.log("The area is:", argv.w * argv.h);
    $ ./area.js -w 55 -h 11
    605
    
    $ node ./area.js -w 4.91 -w 2.51
    Usage: node ./area.js -w [num] -h [num]
    
    Options:
      -w  [required]
      -h  [required]
    
    Missing required arguments: h
    #!/usr/bin/env node
    var argv = require('yargs')
        .demand(2)
        .argv;
    console.dir(argv)
    $ ./demand_count.js a
    Not enough arguments, expected 2, but only found 1
    $ ./demand_count.js a b
    { _: [ 'a', 'b' ], '$0': 'node ./demand_count.js' }
    $ ./demand_count.js a b c
    { _: [ 'a', 'b', 'c' ], '$0': 'node ./demand_count.js' }
    #!/usr/bin/env node
    var argv = require('yargs')
        .default('x', 10)
        .default('y', 10)
        .argv
    ;
    console.log(argv.x + argv.y);
    $ ./default_singles.js -x 5
    15
    #!/usr/bin/env node
    var argv = require('yargs')
        .default({ x : 10, y : 10 })
        .argv
    ;
    console.log(argv.x + argv.y);
    $ ./default_hash.js -y 7
    17
    #!/usr/bin/env node
    var argv = require('yargs')
        .boolean('v')
        .argv
    ;
    console.dir(argv.v);
    console.dir(argv._);
    $ ./boolean_single.js -v "me hearties" yo ho
    true
    [ 'me hearties', 'yo', 'ho' ]
    #!/usr/bin/env node
    var argv = require('yargs')
        .boolean(['x','y','z'])
        .argv
    ;
    console.dir([ argv.x, argv.y, argv.z ]);
    console.dir(argv._);
    $ ./boolean_double.js -x -z one two three
    [ true, false, true ]
    [ 'one', 'two', 'three' ]
    #!/usr/bin/env node
    var argv = require('yargs')
        .usage('Usage: $0 <command> [options]')
        .command('count', 'Count the lines in a file')
        .demand(1)
        .example('$0 count -f foo.js', 'count the lines in the given file')
        .demand('f')
        .alias('f', 'file')
        .nargs('f', 1)
        .describe('f', 'Load a file')
        .help('h')
        .alias('h', 'help')
        .epilog('copyright 2015')
        .argv;
    
    var fs = require('fs');
    var s = fs.createReadStream(argv.file);
    
    var lines = 0;
    s.on('data', function (buf) {
        lines += buf.toString().match(/\n/g).length;
    });
    
    s.on('end', function () {
        console.log(lines);
    });
    $ node line_count.js count
    Usage: node test.js <command> [options]
    
    Commands:
      count    Count the lines in a file
    
    Options:
      -f, --file  Load a file        [required]
      -h, --help  Show help
    
    Examples:
      node test.js count -f foo.js    count the lines in the given file
    
    copyright 2015
    
    Missing required arguments: f
    
    $ node line_count.js count --file line_count.js
    20
    
    $ node line_count.js count -f line_count.js
    20
    require('yargs').argv
    `
    require('yargs')([ '-x', '1', '-y', '2' ]).argv
    require('yargs').parse([ '-x', '1', '-y', '2' ])
    var argv = require('yargs')
      .default('random', function randomValue() {
        return Math.random() * 256;
      }).argv;
    .default('timeout', 60000, '(one-minute)');
    var argv = require('yargs')
        .option('f', {
            alias : 'file',
            demand: true,
            default: '/etc/passwd',
            describe: 'x marks the spot',
            type: 'string'
        })
        .argv
    ;
    var argv = require('yargs')
        .alias('f', 'file')
        .default('f', '/etc/passwd')
        .argv
    ;
    var argv = require('yargs')
        .options({
          'f': {
            alias: 'file',
            demand: true,
            default: '/etc/passwd',
            describe: 'x marks the spot',
            type: 'string'
          }
        })
        .argv
    ;
    var argv = require('yargs')
      .usage('npm <command>')
      .command('install', 'tis a mighty fine package to install')
      .command('publish', 'shiver me timbers, should you be sharing all that', function (yargs) {
        argv = yargs.option('f', {
          alias: 'force',
          description: 'yar, it usually be a bad idea'
        })
        .help('help')
        .argv
      })
      .help('help')
      .argv;
    var argv = require('yargs')
      .epilogue('for more information, find our manual at http://example.com');
    var argv = require('yargs')
      .nargs('token', 1)
      .parse(['--token', '-my-token']);
    var yargs = require("yargs")
           .usage("$0 -operand1 number -operand2 number -operation [add|subtract]");
    console.log(yargs.help());
    var argv = require('yargs')
      .version(function() {
        return require('../package').version;
      })
      .argv;
    #!/usr/bin/env node
    var argv = require('yargs')
        .usage('Count the lines in a file.\nUsage: $0')
        .demand('f')
        .alias('f', 'file')
        .describe('f', 'Load a file')
        .showHelpOnFail(false, "Specify --help for available options")
        .argv;
    
    // etc.
    $ node line_count.js --file
    Missing argument value: f
    
    Specify --help for available options
    var yargs = require("yargs")
           .usage("$0 -operand1 number -operand2 number -operation [add|subtract]");
    yargs.showHelp();
    yargs.showHelp("log");
    var argv = require('yargs')
      .completion('completion', function(current, argv) {
        // 'current' is the current command being completed.
        // 'argv' is the parsed arguments so far.
        // simply return an array of completions.
        return [
          'foo',
          'bar'
        ];
      })
      .argv;
    var argv = require('yargs')
      .completion('completion', function(current, argv, done) {
        setTimeout(function() {
          done([
            'apple',
            'banana'
          ]);
        }, 500);
      })
      .argv;
    var yargs = require('./yargs')
      .usage('$0 command')
      .command('hello', 'hello command')
      .command('world', 'world command')
      .demand(1, 'must provide a valid command'),
      argv = yargs.argv,
      command = argv._[0];
    
    if (command === 'hello') {
      yargs.reset()
        .usage('$0 hello')
        .help('h')
        .example('$0 hello', 'print the hello message!')
        .argv
    
      console.log('hello!');
    } else if (command === 'world'){
      yargs.reset()
        .usage('$0 world')
        .help('h')
        .example('$0 world', 'print the world message!')
        .argv
    
      console.log('world!');
    } else {
      yargs.showHelp();
    }
    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4
    { _: [ '-c', '3', '-d', '4' ],
      '$0': 'node ./examples/reflect.js',
      a: 1,
      b: 2 }
    $ node examples/reflect.js -a --no-b
    { _: [],
      '$0': 'node ./examples/reflect.js',
      a: true,
      b: false }
    $ node examples/reflect.js -x 5 -x 8 -x 0
    { _: [],
      '$0': 'node ./examples/reflect.js',
        x: [ 5, 8, 0 ] }
     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5
     { _: [],
       '$0': 'node ./examples/reflect.js',
         foo: { bar: { baz: 33 }, quux: 5 } }
    $ node reflect.js -n123 -m456
    { '3': true,
      '6': true,
      _: [],
      '$0': 'node ./reflect.js',
      n: 123,
      m: 456 }
    npm install yargs
    git clone http://github.com/bcoe/yargs.git
    npm test
    npm install is-buffer
    var isBuffer = require('is-buffer')
    
    isBuffer(new Buffer(4)) // true
    
    isBuffer(undefined) // false
    isBuffer(null) // false
    isBuffer('') // false
    isBuffer(true) // false
    isBuffer(false) // false
    isBuffer(0) // false
    isBuffer(1) // false
    isBuffer(1.0) // false
    isBuffer('string') // false
    isBuffer({}) // false
    isBuffer(function foo () {}) // false
    Coverage Status
    NPM version
    Build Status
    Build Status
    Build Status
    NPM
    NPM version
    Dependency Status
    Dependency Status