This commit is contained in:
160
node_modules/gauge/CHANGELOG.md
generated
vendored
Normal file
160
node_modules/gauge/CHANGELOG.md
generated
vendored
Normal file
@ -0,0 +1,160 @@
|
||||
### v2.7.4
|
||||
|
||||
* Reset colors prior to ending a line, to eliminate flicker when a line
|
||||
is trucated between start and end color sequences.
|
||||
|
||||
### v2.7.3
|
||||
|
||||
* Only create our onExit handler when we're enabled and remove it when we're
|
||||
disabled. This stops us from creating multiple onExit handlers when
|
||||
multiple gauge objects are being used.
|
||||
* Fix bug where if a theme name were given instead of a theme object, it
|
||||
would crash.
|
||||
* Remove supports-color because it's not actually used. Uhm. Yes, I just
|
||||
updated it. >.>
|
||||
|
||||
### v2.7.2
|
||||
|
||||
* Use supports-color instead of has-color (as the module has been renamed)
|
||||
|
||||
### v2.7.1
|
||||
|
||||
* Bug fix: Calls to show/pulse while the progress bar is disabled should still
|
||||
update our internal representation of what would be shown should it be enabled.
|
||||
|
||||
### v2.7.0
|
||||
|
||||
* New feature: Add new `isEnabled` method to allow introspection of the gauge's
|
||||
"enabledness" as controlled by `.enable()` and `.disable()`.
|
||||
|
||||
### v2.6.0
|
||||
|
||||
* Bug fix: Don't run the code associated with `enable`/`disable` if the gauge
|
||||
is already enabled or disabled respectively. This prevents leaking event
|
||||
listeners, amongst other weirdness.
|
||||
* New feature: Template items can have default values that will be used if no
|
||||
value was otherwise passed in.
|
||||
|
||||
### v2.5.3
|
||||
|
||||
* Default to `enabled` only if we have a tty. Users can always override
|
||||
this by passing in the `enabled` option explicitly or by calling calling
|
||||
`gauge.enable()`.
|
||||
|
||||
### v2.5.2
|
||||
|
||||
* Externalized `./console-strings.js` into `console-control-strings`.
|
||||
|
||||
### v2.5.1
|
||||
|
||||
* Update to `signal-exit@3.0.0`, which fixes a compatibility bug with the
|
||||
node profiler.
|
||||
* [#39](https://github.com/iarna/gauge/pull/39) Fix tests on 0.10 and add
|
||||
a missing devDependency. ([@helloyou2012](https://github.com/helloyou2012))
|
||||
|
||||
### v2.5.0
|
||||
|
||||
* Add way to programmatically fetch a list of theme names in a themeset
|
||||
(`Themeset.getThemeNames`).
|
||||
|
||||
### v2.4.0
|
||||
|
||||
* Add support for setting themesets on existing gauge objects.
|
||||
* Add post-IO callback to `gauge.hide()` as it is somtetimes necessary when
|
||||
your terminal is interleaving output from multiple filehandles (ie, stdout
|
||||
& stderr).
|
||||
|
||||
### v2.3.1
|
||||
|
||||
* Fix a refactor bug in setTheme where it wasn't accepting the various types
|
||||
of args it should.
|
||||
|
||||
### v2.3.0
|
||||
|
||||
#### FEATURES
|
||||
|
||||
* Add setTemplate & setTheme back in.
|
||||
* Add support for named themes, you can now ask for things like 'colorASCII'
|
||||
and 'brailleSpinner'. Of course, you can still pass in theme objects.
|
||||
Additionally you can now pass in an object with `hasUnicode`, `hasColor` and
|
||||
`platform` keys in order to override our guesses as to those values when
|
||||
selecting a default theme from the themeset.
|
||||
* Make the output stream optional (it defaults to `process.stderr` now).
|
||||
* Add `setWriteTo(stream[, tty])` to change the output stream and,
|
||||
optionally, tty.
|
||||
|
||||
#### BUG FIXES & REFACTORING
|
||||
|
||||
* Abort the display phase early if we're supposed to be hidden and we are.
|
||||
* Stop printing a bunch of spaces at the end of lines, since we're already
|
||||
using an erase-to-end-of-line code anyway.
|
||||
* The unicode themes were missing the subsection separator.
|
||||
|
||||
### v2.2.1
|
||||
|
||||
* Fix image in readme
|
||||
|
||||
### v2.2.0
|
||||
|
||||
* All new themes API– reference themes by name and pass in custom themes and
|
||||
themesets (themesets get platform support autodetection done on them to
|
||||
select the best theme). Theme mixins let you add features to all existing
|
||||
themes.
|
||||
* Much, much improved test coverage.
|
||||
|
||||
### v2.1.0
|
||||
|
||||
* Got rid of ░ in the default platform, noUnicode, hasColor theme. Thanks
|
||||
to @yongtw123 for pointing out this had snuck in.
|
||||
* Fiddled with the demo output to make it easier to see the spinner spin. Also
|
||||
added prints before each platforms test output.
|
||||
* I forgot to include `signal-exit` in our deps. <.< Thank you @KenanY for
|
||||
finding this. Then I was lazy and made a new commit instead of using his
|
||||
PR. Again, thank you for your patience @KenenY.
|
||||
* Drastically speed up travis testing.
|
||||
* Add a small javascript demo (demo.js) for showing off the various themes
|
||||
(and testing them on diff platforms).
|
||||
* Change: The subsection separator from ⁄ and / (different chars) to >.
|
||||
* Fix crasher: A show or pulse without a label would cause the template renderer
|
||||
to complain about a missing value.
|
||||
* New feature: Add the ability to disable the clean-up-on-exit behavior.
|
||||
Not something I expect to be widely desirable, but important if you have
|
||||
multiple distinct gauge instances in your app.
|
||||
* Use our own color support detection.
|
||||
The `has-color` module proved too magic for my needs, making assumptions
|
||||
as to which stream we write to and reading command line arguments.
|
||||
|
||||
### v2.0.0
|
||||
|
||||
This is a major rewrite of the internals. Externally there are fewer
|
||||
changes:
|
||||
|
||||
* On node>0.8 gauge object now prints updates at a fixed rate. This means
|
||||
that when you call `show` it may wate up to `updateInterval` ms before it
|
||||
actually prints an update. You override this behavior with the
|
||||
`fixedFramerate` option.
|
||||
* The gauge object now keeps the cursor hidden as long as it's enabled and
|
||||
shown.
|
||||
* The constructor's arguments have changed, now it takes a mandatory output
|
||||
stream and an optional options object. The stream no longer needs to be
|
||||
an `ansi`ified stream, although it can be if you want (but we won't make
|
||||
use of its special features).
|
||||
* Previously the gauge was disabled by default if `process.stdout` wasn't a
|
||||
tty. Now it always defaults to enabled. If you want the previous
|
||||
behavior set the `enabled` option to `process.stdout.isTTY`.
|
||||
* The constructor's options have changed– see the docs for details.
|
||||
* Themes are entirely different. If you were using a custom theme, or
|
||||
referring to one directly (eg via `Gauge.unicode` or `Gauge.ascii`) then
|
||||
you'll need to change your code. You can get the equivalent of the latter
|
||||
with:
|
||||
```
|
||||
var themes = require('gauge/themes')
|
||||
var unicodeTheme = themes(true, true) // returns the color unicode theme for your platform
|
||||
```
|
||||
The default themes no longer use any ambiguous width characters, so even
|
||||
if you choose to display those as wide your progress bar should still
|
||||
display correctly.
|
||||
* Templates are entirely different and if you were using a custom one, you
|
||||
should consult the documentation to learn how to recreate it. If you were
|
||||
using the default, be aware that it has changed and the result looks quite
|
||||
a bit different.
|
13
node_modules/gauge/LICENSE
generated
vendored
Normal file
13
node_modules/gauge/LICENSE
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
Copyright (c) 2014, Rebecca Turner <me@re-becca.org>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
399
node_modules/gauge/README.md
generated
vendored
Normal file
399
node_modules/gauge/README.md
generated
vendored
Normal file
@ -0,0 +1,399 @@
|
||||
gauge
|
||||
=====
|
||||
|
||||
A nearly stateless terminal based horizontal gauge / progress bar.
|
||||
|
||||
```javascript
|
||||
var Gauge = require("gauge")
|
||||
|
||||
var gauge = new Gauge()
|
||||
|
||||
gauge.show("test", 0.20)
|
||||
|
||||
gauge.pulse("this")
|
||||
|
||||
gauge.hide()
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
### CHANGES FROM 1.x
|
||||
|
||||
Gauge 2.x is breaking release, please see the [changelog] for details on
|
||||
what's changed if you were previously a user of this module.
|
||||
|
||||
[changelog]: CHANGELOG.md
|
||||
|
||||
### THE GAUGE CLASS
|
||||
|
||||
This is the typical interface to the module– it provides a pretty
|
||||
fire-and-forget interface to displaying your status information.
|
||||
|
||||
```
|
||||
var Gauge = require("gauge")
|
||||
|
||||
var gauge = new Gauge([stream], [options])
|
||||
```
|
||||
|
||||
* **stream** – *(optional, default STDERR)* A stream that progress bar
|
||||
updates are to be written to. Gauge honors backpressure and will pause
|
||||
most writing if it is indicated.
|
||||
* **options** – *(optional)* An option object.
|
||||
|
||||
Constructs a new gauge. Gauges are drawn on a single line, and are not drawn
|
||||
if **stream** isn't a tty and a tty isn't explicitly provided.
|
||||
|
||||
If **stream** is a terminal or if you pass in **tty** to **options** then we
|
||||
will detect terminal resizes and redraw to fit. We do this by watching for
|
||||
`resize` events on the tty. (To work around a bug in verisons of Node prior
|
||||
to 2.5.0, we watch for them on stdout if the tty is stderr.) Resizes to
|
||||
larger window sizes will be clean, but shrinking the window will always
|
||||
result in some cruft.
|
||||
|
||||
**IMPORTANT:** If you prevously were passing in a non-tty stream but you still
|
||||
want output (for example, a stream wrapped by the `ansi` module) then you
|
||||
need to pass in the **tty** option below, as `gauge` needs access to
|
||||
the underlying tty in order to do things like terminal resizes and terminal
|
||||
width detection.
|
||||
|
||||
The **options** object can have the following properties, all of which are
|
||||
optional:
|
||||
|
||||
* **updateInterval**: How often gauge updates should be drawn, in miliseconds.
|
||||
* **fixedFramerate**: Defaults to false on node 0.8, true on everything
|
||||
else. When this is true a timer is created to trigger once every
|
||||
`updateInterval` ms, when false, updates are printed as soon as they come
|
||||
in but updates more often than `updateInterval` are ignored. The reason
|
||||
0.8 doesn't have this set to true is that it can't `unref` its timer and
|
||||
so it would stop your program from exiting– if you want to use this
|
||||
feature with 0.8 just make sure you call `gauge.disable()` before you
|
||||
expect your program to exit.
|
||||
* **themes**: A themeset to use when selecting the theme to use. Defaults
|
||||
to `gauge/themes`, see the [themes] documentation for details.
|
||||
* **theme**: Select a theme for use, it can be a:
|
||||
* Theme object, in which case the **themes** is not used.
|
||||
* The name of a theme, which will be looked up in the current *themes*
|
||||
object.
|
||||
* A configuration object with any of `hasUnicode`, `hasColor` or
|
||||
`platform` keys, which if wlll be used to override our guesses when making
|
||||
a default theme selection.
|
||||
|
||||
If no theme is selected then a default is picked using a combination of our
|
||||
best guesses at your OS, color support and unicode support.
|
||||
* **template**: Describes what you want your gauge to look like. The
|
||||
default is what npm uses. Detailed [documentation] is later in this
|
||||
document.
|
||||
* **hideCursor**: Defaults to true. If true, then the cursor will be hidden
|
||||
while the gauge is displayed.
|
||||
* **tty**: The tty that you're ultimately writing to. Defaults to the same
|
||||
as **stream**. This is used for detecting the width of the terminal and
|
||||
resizes. The width used is `tty.columns - 1`. If no tty is available then
|
||||
a width of `79` is assumed.
|
||||
* **enabled**: Defaults to true if `tty` is a TTY, false otherwise. If true
|
||||
the gauge starts enabled. If disabled then all update commands are
|
||||
ignored and no gauge will be printed until you call `.enable()`.
|
||||
* **Plumbing**: The class to use to actually generate the gauge for
|
||||
printing. This defaults to `require('gauge/plumbing')` and ordinarly you
|
||||
shouldn't need to override this.
|
||||
* **cleanupOnExit**: Defaults to true. Ordinarily we register an exit
|
||||
handler to make sure your cursor is turned back on and the progress bar
|
||||
erased when your process exits, even if you Ctrl-C out or otherwise exit
|
||||
unexpectedly. You can disable this and it won't register the exit handler.
|
||||
|
||||
[has-unicode]: https://www.npmjs.com/package/has-unicode
|
||||
[themes]: #themes
|
||||
[documentation]: #templates
|
||||
|
||||
#### `gauge.show(section | status, [completed])`
|
||||
|
||||
The first argument is either the section, the name of the current thing
|
||||
contributing to progress, or an object with keys like **section**,
|
||||
**subsection** & **completed** (or any others you have types for in a custom
|
||||
template). If you don't want to update or set any of these you can pass
|
||||
`null` and it will be ignored.
|
||||
|
||||
The second argument is the percent completed as a value between 0 and 1.
|
||||
Without it, completion is just not updated. You'll also note that completion
|
||||
can be passed in as part of a status object as the first argument. If both
|
||||
it and the completed argument are passed in, the completed argument wins.
|
||||
|
||||
#### `gauge.hide([cb])`
|
||||
|
||||
Removes the gauge from the terminal. Optionally, callback `cb` after IO has
|
||||
had an opportunity to happen (currently this just means after `setImmediate`
|
||||
has called back.)
|
||||
|
||||
It turns out this is important when you're pausing the progress bar on one
|
||||
filehandle and printing to another– otherwise (with a big enough print) node
|
||||
can end up printing the "end progress bar" bits to the progress bar filehandle
|
||||
while other stuff is printing to another filehandle. These getting interleaved
|
||||
can cause corruption in some terminals.
|
||||
|
||||
#### `gauge.pulse([subsection])`
|
||||
|
||||
* **subsection** – *(optional)* The specific thing that triggered this pulse
|
||||
|
||||
Spins the spinner in the gauge to show output. If **subsection** is
|
||||
included then it will be combined with the last name passed to `gauge.show`.
|
||||
|
||||
#### `gauge.disable()`
|
||||
|
||||
Hides the gauge and ignores further calls to `show` or `pulse`.
|
||||
|
||||
#### `gauge.enable()`
|
||||
|
||||
Shows the gauge and resumes updating when `show` or `pulse` is called.
|
||||
|
||||
#### `gauge.isEnabled()`
|
||||
|
||||
Returns true if the gauge is enabled.
|
||||
|
||||
#### `gauge.setThemeset(themes)`
|
||||
|
||||
Change the themeset to select a theme from. The same as the `themes` option
|
||||
used in the constructor. The theme will be reselected from this themeset.
|
||||
|
||||
#### `gauge.setTheme(theme)`
|
||||
|
||||
Change the active theme, will be displayed with the next show or pulse. This can be:
|
||||
|
||||
* Theme object, in which case the **themes** is not used.
|
||||
* The name of a theme, which will be looked up in the current *themes*
|
||||
object.
|
||||
* A configuration object with any of `hasUnicode`, `hasColor` or
|
||||
`platform` keys, which if wlll be used to override our guesses when making
|
||||
a default theme selection.
|
||||
|
||||
If no theme is selected then a default is picked using a combination of our
|
||||
best guesses at your OS, color support and unicode support.
|
||||
|
||||
#### `gauge.setTemplate(template)`
|
||||
|
||||
Change the active template, will be displayed with the next show or pulse
|
||||
|
||||
### Tracking Completion
|
||||
|
||||
If you have more than one thing going on that you want to track completion
|
||||
of, you may find the related [are-we-there-yet] helpful. It's `change`
|
||||
event can be wired up to the `show` method to get a more traditional
|
||||
progress bar interface.
|
||||
|
||||
[are-we-there-yet]: https://www.npmjs.com/package/are-we-there-yet
|
||||
|
||||
### THEMES
|
||||
|
||||
```
|
||||
var themes = require('gauge/themes')
|
||||
|
||||
// fetch the default color unicode theme for this platform
|
||||
var ourTheme = themes({hasUnicode: true, hasColor: true})
|
||||
|
||||
// fetch the default non-color unicode theme for osx
|
||||
var ourTheme = themes({hasUnicode: true, hasColor: false, platform: 'darwin'})
|
||||
|
||||
// create a new theme based on the color ascii theme for this platform
|
||||
// that brackets the progress bar with arrows
|
||||
var ourTheme = themes.newTheme(theme(hasUnicode: false, hasColor: true}), {
|
||||
preProgressbar: '→',
|
||||
postProgressbar: '←'
|
||||
})
|
||||
```
|
||||
|
||||
The object returned by `gauge/themes` is an instance of the `ThemeSet` class.
|
||||
|
||||
```
|
||||
var ThemeSet = require('gauge/theme-set')
|
||||
var themes = new ThemeSet()
|
||||
// or
|
||||
var themes = require('gauge/themes')
|
||||
var mythemes = themes.newThemeset() // creates a new themeset based on the default themes
|
||||
```
|
||||
|
||||
#### themes(opts)
|
||||
#### themes.getDefault(opts)
|
||||
|
||||
Theme objects are a function that fetches the default theme based on
|
||||
platform, unicode and color support.
|
||||
|
||||
Options is an object with the following properties:
|
||||
|
||||
* **hasUnicode** - If true, fetch a unicode theme, if no unicode theme is
|
||||
available then a non-unicode theme will be used.
|
||||
* **hasColor** - If true, fetch a color theme, if no color theme is
|
||||
available a non-color theme will be used.
|
||||
* **platform** (optional) - Defaults to `process.platform`. If no
|
||||
platform match is available then `fallback` is used instead.
|
||||
|
||||
If no compatible theme can be found then an error will be thrown with a
|
||||
`code` of `EMISSINGTHEME`.
|
||||
|
||||
#### themes.addTheme(themeName, themeObj)
|
||||
#### themes.addTheme(themeName, [parentTheme], newTheme)
|
||||
|
||||
Adds a named theme to the themeset. You can pass in either a theme object,
|
||||
as returned by `themes.newTheme` or the arguments you'd pass to
|
||||
`themes.newTheme`.
|
||||
|
||||
#### themes.getThemeNames()
|
||||
|
||||
Return a list of all of the names of the themes in this themeset. Suitable
|
||||
for use in `themes.getTheme(…)`.
|
||||
|
||||
#### themes.getTheme(name)
|
||||
|
||||
Returns the theme object from this theme set named `name`.
|
||||
|
||||
If `name` does not exist in this themeset an error will be thrown with
|
||||
a `code` of `EMISSINGTHEME`.
|
||||
|
||||
#### themes.setDefault([opts], themeName)
|
||||
|
||||
`opts` is an object with the following properties.
|
||||
|
||||
* **platform** - Defaults to `'fallback'`. If your theme is platform
|
||||
specific, specify that here with the platform from `process.platform`, eg,
|
||||
`win32`, `darwin`, etc.
|
||||
* **hasUnicode** - Defaults to `false`. If your theme uses unicode you
|
||||
should set this to true.
|
||||
* **hasColor** - Defaults to `false`. If your theme uses color you should
|
||||
set this to true.
|
||||
|
||||
`themeName` is the name of the theme (as given to `addTheme`) to use for
|
||||
this set of `opts`.
|
||||
|
||||
#### themes.newTheme([parentTheme,] newTheme)
|
||||
|
||||
Create a new theme object based on `parentTheme`. If no `parentTheme` is
|
||||
provided then a minimal parentTheme that defines functions for rendering the
|
||||
activity indicator (spinner) and progress bar will be defined. (This
|
||||
fallback parent is defined in `gauge/base-theme`.)
|
||||
|
||||
newTheme should be a bare object– we'll start by discussing the properties
|
||||
defined by the default themes:
|
||||
|
||||
* **preProgressbar** - displayed prior to the progress bar, if the progress
|
||||
bar is displayed.
|
||||
* **postProgressbar** - displayed after the progress bar, if the progress bar
|
||||
is displayed.
|
||||
* **progressBarTheme** - The subtheme passed through to the progress bar
|
||||
renderer, it's an object with `complete` and `remaining` properties
|
||||
that are the strings you want repeated for those sections of the progress
|
||||
bar.
|
||||
* **activityIndicatorTheme** - The theme for the activity indicator (spinner),
|
||||
this can either be a string, in which each character is a different step, or
|
||||
an array of strings.
|
||||
* **preSubsection** - Displayed as a separator between the `section` and
|
||||
`subsection` when the latter is printed.
|
||||
|
||||
More generally, themes can have any value that would be a valid value when rendering
|
||||
templates. The properties in the theme are used when their name matches a type in
|
||||
the template. Their values can be:
|
||||
|
||||
* **strings & numbers** - They'll be included as is
|
||||
* **function (values, theme, width)** - Should return what you want in your output.
|
||||
*values* is an object with values provided via `gauge.show`,
|
||||
*theme* is the theme specific to this item (see below) or this theme object,
|
||||
and *width* is the number of characters wide your result should be.
|
||||
|
||||
There are a couple of special prefixes:
|
||||
|
||||
* **pre** - Is shown prior to the property, if its displayed.
|
||||
* **post** - Is shown after the property, if its displayed.
|
||||
|
||||
And one special suffix:
|
||||
|
||||
* **Theme** - Its value is passed to a function-type item as the theme.
|
||||
|
||||
#### themes.addToAllThemes(theme)
|
||||
|
||||
This *mixes-in* `theme` into all themes currently defined. It also adds it
|
||||
to the default parent theme for this themeset, so future themes added to
|
||||
this themeset will get the values from `theme` by default.
|
||||
|
||||
#### themes.newThemeset()
|
||||
|
||||
Copy the current themeset into a new one. This allows you to easily inherit
|
||||
one themeset from another.
|
||||
|
||||
### TEMPLATES
|
||||
|
||||
A template is an array of objects and strings that, after being evaluated,
|
||||
will be turned into the gauge line. The default template is:
|
||||
|
||||
```javascript
|
||||
[
|
||||
{type: 'progressbar', length: 20},
|
||||
{type: 'activityIndicator', kerning: 1, length: 1},
|
||||
{type: 'section', kerning: 1, default: ''},
|
||||
{type: 'subsection', kerning: 1, default: ''}
|
||||
]
|
||||
```
|
||||
|
||||
The various template elements can either be **plain strings**, in which case they will
|
||||
be be included verbatum in the output, or objects with the following properties:
|
||||
|
||||
* *type* can be any of the following plus any keys you pass into `gauge.show` plus
|
||||
any keys you have on a custom theme.
|
||||
* `section` – What big thing you're working on now.
|
||||
* `subsection` – What component of that thing is currently working.
|
||||
* `activityIndicator` – Shows a spinner using the `activityIndicatorTheme`
|
||||
from your active theme.
|
||||
* `progressbar` – A progress bar representing your current `completed`
|
||||
using the `progressbarTheme` from your active theme.
|
||||
* *kerning* – Number of spaces that must be between this item and other
|
||||
items, if this item is displayed at all.
|
||||
* *maxLength* – The maximum length for this element. If its value is longer it
|
||||
will be truncated.
|
||||
* *minLength* – The minimum length for this element. If its value is shorter it
|
||||
will be padded according to the *align* value.
|
||||
* *align* – (Default: left) Possible values "left", "right" and "center". Works
|
||||
as you'd expect from word processors.
|
||||
* *length* – Provides a single value for both *minLength* and *maxLength*. If both
|
||||
*length* and *minLength or *maxLength* are specifed then the latter take precedence.
|
||||
* *value* – A literal value to use for this template item.
|
||||
* *default* – A default value to use for this template item if a value
|
||||
wasn't otherwise passed in.
|
||||
|
||||
### PLUMBING
|
||||
|
||||
This is the super simple, assume nothing, do no magic internals used by gauge to
|
||||
implement its ordinary interface.
|
||||
|
||||
```
|
||||
var Plumbing = require('gauge/plumbing')
|
||||
var gauge = new Plumbing(theme, template, width)
|
||||
```
|
||||
|
||||
* **theme**: The theme to use.
|
||||
* **template**: The template to use.
|
||||
* **width**: How wide your gauge should be
|
||||
|
||||
#### `gauge.setTheme(theme)`
|
||||
|
||||
Change the active theme.
|
||||
|
||||
#### `gauge.setTemplate(template)`
|
||||
|
||||
Change the active template.
|
||||
|
||||
#### `gauge.setWidth(width)`
|
||||
|
||||
Change the width to render at.
|
||||
|
||||
#### `gauge.hide()`
|
||||
|
||||
Return the string necessary to hide the progress bar
|
||||
|
||||
#### `gauge.hideCursor()`
|
||||
|
||||
Return a string to hide the cursor.
|
||||
|
||||
#### `gauge.showCursor()`
|
||||
|
||||
Return a string to show the cursor.
|
||||
|
||||
#### `gauge.show(status)`
|
||||
|
||||
Using `status` for values, render the provided template with the theme and return
|
||||
a string that is suitable for printing to update the gauge.
|
14
node_modules/gauge/base-theme.js
generated
vendored
Normal file
14
node_modules/gauge/base-theme.js
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
'use strict'
|
||||
var spin = require('./spin.js')
|
||||
var progressBar = require('./progress-bar.js')
|
||||
|
||||
module.exports = {
|
||||
activityIndicator: function (values, theme, width) {
|
||||
if (values.spun == null) return
|
||||
return spin(theme, values.spun)
|
||||
},
|
||||
progressbar: function (values, theme, width) {
|
||||
if (values.completed == null) return
|
||||
return progressBar(theme, width, values.completed)
|
||||
}
|
||||
}
|
24
node_modules/gauge/error.js
generated
vendored
Normal file
24
node_modules/gauge/error.js
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
'use strict'
|
||||
var util = require('util')
|
||||
|
||||
var User = exports.User = function User (msg) {
|
||||
var err = new Error(msg)
|
||||
Error.captureStackTrace(err, User)
|
||||
err.code = 'EGAUGE'
|
||||
return err
|
||||
}
|
||||
|
||||
exports.MissingTemplateValue = function MissingTemplateValue (item, values) {
|
||||
var err = new User(util.format('Missing template value "%s"', item.type))
|
||||
Error.captureStackTrace(err, MissingTemplateValue)
|
||||
err.template = item
|
||||
err.values = values
|
||||
return err
|
||||
}
|
||||
|
||||
exports.Internal = function Internal (msg) {
|
||||
var err = new Error(msg)
|
||||
Error.captureStackTrace(err, Internal)
|
||||
err.code = 'EGAUGEINTERNAL'
|
||||
return err
|
||||
}
|
12
node_modules/gauge/has-color.js
generated
vendored
Normal file
12
node_modules/gauge/has-color.js
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = isWin32() || isColorTerm()
|
||||
|
||||
function isWin32 () {
|
||||
return process.platform === 'win32'
|
||||
}
|
||||
|
||||
function isColorTerm () {
|
||||
var termHasColor = /^screen|^xterm|^vt100|color|ansi|cygwin|linux/i
|
||||
return !!process.env.COLORTERM || termHasColor.test(process.env.TERM)
|
||||
}
|
233
node_modules/gauge/index.js
generated
vendored
Normal file
233
node_modules/gauge/index.js
generated
vendored
Normal file
@ -0,0 +1,233 @@
|
||||
'use strict'
|
||||
var Plumbing = require('./plumbing.js')
|
||||
var hasUnicode = require('has-unicode')
|
||||
var hasColor = require('./has-color.js')
|
||||
var onExit = require('signal-exit')
|
||||
var defaultThemes = require('./themes')
|
||||
var setInterval = require('./set-interval.js')
|
||||
var process = require('./process.js')
|
||||
var setImmediate = require('./set-immediate')
|
||||
|
||||
module.exports = Gauge
|
||||
|
||||
function callWith (obj, method) {
|
||||
return function () {
|
||||
return method.call(obj)
|
||||
}
|
||||
}
|
||||
|
||||
function Gauge (arg1, arg2) {
|
||||
var options, writeTo
|
||||
if (arg1 && arg1.write) {
|
||||
writeTo = arg1
|
||||
options = arg2 || {}
|
||||
} else if (arg2 && arg2.write) {
|
||||
writeTo = arg2
|
||||
options = arg1 || {}
|
||||
} else {
|
||||
writeTo = process.stderr
|
||||
options = arg1 || arg2 || {}
|
||||
}
|
||||
|
||||
this._status = {
|
||||
spun: 0,
|
||||
section: '',
|
||||
subsection: ''
|
||||
}
|
||||
this._paused = false // are we paused for back pressure?
|
||||
this._disabled = true // are all progress bar updates disabled?
|
||||
this._showing = false // do we WANT the progress bar on screen
|
||||
this._onScreen = false // IS the progress bar on screen
|
||||
this._needsRedraw = false // should we print something at next tick?
|
||||
this._hideCursor = options.hideCursor == null ? true : options.hideCursor
|
||||
this._fixedFramerate = options.fixedFramerate == null
|
||||
? !(/^v0\.8\./.test(process.version))
|
||||
: options.fixedFramerate
|
||||
this._lastUpdateAt = null
|
||||
this._updateInterval = options.updateInterval == null ? 50 : options.updateInterval
|
||||
|
||||
this._themes = options.themes || defaultThemes
|
||||
this._theme = options.theme
|
||||
var theme = this._computeTheme(options.theme)
|
||||
var template = options.template || [
|
||||
{type: 'progressbar', length: 20},
|
||||
{type: 'activityIndicator', kerning: 1, length: 1},
|
||||
{type: 'section', kerning: 1, default: ''},
|
||||
{type: 'subsection', kerning: 1, default: ''}
|
||||
]
|
||||
this.setWriteTo(writeTo, options.tty)
|
||||
var PlumbingClass = options.Plumbing || Plumbing
|
||||
this._gauge = new PlumbingClass(theme, template, this.getWidth())
|
||||
|
||||
this._$$doRedraw = callWith(this, this._doRedraw)
|
||||
this._$$handleSizeChange = callWith(this, this._handleSizeChange)
|
||||
|
||||
this._cleanupOnExit = options.cleanupOnExit == null || options.cleanupOnExit
|
||||
this._removeOnExit = null
|
||||
|
||||
if (options.enabled || (options.enabled == null && this._tty && this._tty.isTTY)) {
|
||||
this.enable()
|
||||
} else {
|
||||
this.disable()
|
||||
}
|
||||
}
|
||||
Gauge.prototype = {}
|
||||
|
||||
Gauge.prototype.isEnabled = function () {
|
||||
return !this._disabled
|
||||
}
|
||||
|
||||
Gauge.prototype.setTemplate = function (template) {
|
||||
this._gauge.setTemplate(template)
|
||||
if (this._showing) this._requestRedraw()
|
||||
}
|
||||
|
||||
Gauge.prototype._computeTheme = function (theme) {
|
||||
if (!theme) theme = {}
|
||||
if (typeof theme === 'string') {
|
||||
theme = this._themes.getTheme(theme)
|
||||
} else if (theme && (Object.keys(theme).length === 0 || theme.hasUnicode != null || theme.hasColor != null)) {
|
||||
var useUnicode = theme.hasUnicode == null ? hasUnicode() : theme.hasUnicode
|
||||
var useColor = theme.hasColor == null ? hasColor : theme.hasColor
|
||||
theme = this._themes.getDefault({hasUnicode: useUnicode, hasColor: useColor, platform: theme.platform})
|
||||
}
|
||||
return theme
|
||||
}
|
||||
|
||||
Gauge.prototype.setThemeset = function (themes) {
|
||||
this._themes = themes
|
||||
this.setTheme(this._theme)
|
||||
}
|
||||
|
||||
Gauge.prototype.setTheme = function (theme) {
|
||||
this._gauge.setTheme(this._computeTheme(theme))
|
||||
if (this._showing) this._requestRedraw()
|
||||
this._theme = theme
|
||||
}
|
||||
|
||||
Gauge.prototype._requestRedraw = function () {
|
||||
this._needsRedraw = true
|
||||
if (!this._fixedFramerate) this._doRedraw()
|
||||
}
|
||||
|
||||
Gauge.prototype.getWidth = function () {
|
||||
return ((this._tty && this._tty.columns) || 80) - 1
|
||||
}
|
||||
|
||||
Gauge.prototype.setWriteTo = function (writeTo, tty) {
|
||||
var enabled = !this._disabled
|
||||
if (enabled) this.disable()
|
||||
this._writeTo = writeTo
|
||||
this._tty = tty ||
|
||||
(writeTo === process.stderr && process.stdout.isTTY && process.stdout) ||
|
||||
(writeTo.isTTY && writeTo) ||
|
||||
this._tty
|
||||
if (this._gauge) this._gauge.setWidth(this.getWidth())
|
||||
if (enabled) this.enable()
|
||||
}
|
||||
|
||||
Gauge.prototype.enable = function () {
|
||||
if (!this._disabled) return
|
||||
this._disabled = false
|
||||
if (this._tty) this._enableEvents()
|
||||
if (this._showing) this.show()
|
||||
}
|
||||
|
||||
Gauge.prototype.disable = function () {
|
||||
if (this._disabled) return
|
||||
if (this._showing) {
|
||||
this._lastUpdateAt = null
|
||||
this._showing = false
|
||||
this._doRedraw()
|
||||
this._showing = true
|
||||
}
|
||||
this._disabled = true
|
||||
if (this._tty) this._disableEvents()
|
||||
}
|
||||
|
||||
Gauge.prototype._enableEvents = function () {
|
||||
if (this._cleanupOnExit) {
|
||||
this._removeOnExit = onExit(callWith(this, this.disable))
|
||||
}
|
||||
this._tty.on('resize', this._$$handleSizeChange)
|
||||
if (this._fixedFramerate) {
|
||||
this.redrawTracker = setInterval(this._$$doRedraw, this._updateInterval)
|
||||
if (this.redrawTracker.unref) this.redrawTracker.unref()
|
||||
}
|
||||
}
|
||||
|
||||
Gauge.prototype._disableEvents = function () {
|
||||
this._tty.removeListener('resize', this._$$handleSizeChange)
|
||||
if (this._fixedFramerate) clearInterval(this.redrawTracker)
|
||||
if (this._removeOnExit) this._removeOnExit()
|
||||
}
|
||||
|
||||
Gauge.prototype.hide = function (cb) {
|
||||
if (this._disabled) return cb && process.nextTick(cb)
|
||||
if (!this._showing) return cb && process.nextTick(cb)
|
||||
this._showing = false
|
||||
this._doRedraw()
|
||||
cb && setImmediate(cb)
|
||||
}
|
||||
|
||||
Gauge.prototype.show = function (section, completed) {
|
||||
this._showing = true
|
||||
if (typeof section === 'string') {
|
||||
this._status.section = section
|
||||
} else if (typeof section === 'object') {
|
||||
var sectionKeys = Object.keys(section)
|
||||
for (var ii = 0; ii < sectionKeys.length; ++ii) {
|
||||
var key = sectionKeys[ii]
|
||||
this._status[key] = section[key]
|
||||
}
|
||||
}
|
||||
if (completed != null) this._status.completed = completed
|
||||
if (this._disabled) return
|
||||
this._requestRedraw()
|
||||
}
|
||||
|
||||
Gauge.prototype.pulse = function (subsection) {
|
||||
this._status.subsection = subsection || ''
|
||||
this._status.spun ++
|
||||
if (this._disabled) return
|
||||
if (!this._showing) return
|
||||
this._requestRedraw()
|
||||
}
|
||||
|
||||
Gauge.prototype._handleSizeChange = function () {
|
||||
this._gauge.setWidth(this._tty.columns - 1)
|
||||
this._requestRedraw()
|
||||
}
|
||||
|
||||
Gauge.prototype._doRedraw = function () {
|
||||
if (this._disabled || this._paused) return
|
||||
if (!this._fixedFramerate) {
|
||||
var now = Date.now()
|
||||
if (this._lastUpdateAt && now - this._lastUpdateAt < this._updateInterval) return
|
||||
this._lastUpdateAt = now
|
||||
}
|
||||
if (!this._showing && this._onScreen) {
|
||||
this._onScreen = false
|
||||
var result = this._gauge.hide()
|
||||
if (this._hideCursor) {
|
||||
result += this._gauge.showCursor()
|
||||
}
|
||||
return this._writeTo.write(result)
|
||||
}
|
||||
if (!this._showing && !this._onScreen) return
|
||||
if (this._showing && !this._onScreen) {
|
||||
this._onScreen = true
|
||||
this._needsRedraw = true
|
||||
if (this._hideCursor) {
|
||||
this._writeTo.write(this._gauge.hideCursor())
|
||||
}
|
||||
}
|
||||
if (!this._needsRedraw) return
|
||||
if (!this._writeTo.write(this._gauge.show(this._status))) {
|
||||
this._paused = true
|
||||
this._writeTo.on('drain', callWith(this, function () {
|
||||
this._paused = false
|
||||
this._doRedraw()
|
||||
}))
|
||||
}
|
||||
}
|
4
node_modules/gauge/node_modules/ansi-regex/index.js
generated
vendored
Normal file
4
node_modules/gauge/node_modules/ansi-regex/index.js
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
'use strict';
|
||||
module.exports = function () {
|
||||
return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
|
||||
};
|
21
node_modules/gauge/node_modules/ansi-regex/license
generated
vendored
Normal file
21
node_modules/gauge/node_modules/ansi-regex/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
64
node_modules/gauge/node_modules/ansi-regex/package.json
generated
vendored
Normal file
64
node_modules/gauge/node_modules/ansi-regex/package.json
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"name": "ansi-regex",
|
||||
"version": "2.1.1",
|
||||
"description": "Regular expression for matching ANSI escape codes",
|
||||
"license": "MIT",
|
||||
"repository": "chalk/ansi-regex",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"maintainers": [
|
||||
"Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
|
||||
"Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
|
||||
"JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava --verbose",
|
||||
"view-supported": "node fixtures/view-codes.js"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"ansi",
|
||||
"styles",
|
||||
"color",
|
||||
"colour",
|
||||
"colors",
|
||||
"terminal",
|
||||
"console",
|
||||
"cli",
|
||||
"string",
|
||||
"tty",
|
||||
"escape",
|
||||
"formatting",
|
||||
"rgb",
|
||||
"256",
|
||||
"shell",
|
||||
"xterm",
|
||||
"command-line",
|
||||
"text",
|
||||
"regex",
|
||||
"regexp",
|
||||
"re",
|
||||
"match",
|
||||
"test",
|
||||
"find",
|
||||
"pattern"
|
||||
],
|
||||
"devDependencies": {
|
||||
"ava": "0.17.0",
|
||||
"xo": "0.16.0"
|
||||
},
|
||||
"xo": {
|
||||
"rules": {
|
||||
"guard-for-in": 0,
|
||||
"no-loop-func": 0
|
||||
}
|
||||
}
|
||||
}
|
39
node_modules/gauge/node_modules/ansi-regex/readme.md
generated
vendored
Normal file
39
node_modules/gauge/node_modules/ansi-regex/readme.md
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
# ansi-regex [](https://travis-ci.org/chalk/ansi-regex)
|
||||
|
||||
> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save ansi-regex
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const ansiRegex = require('ansi-regex');
|
||||
|
||||
ansiRegex().test('\u001b[4mcake\u001b[0m');
|
||||
//=> true
|
||||
|
||||
ansiRegex().test('cake');
|
||||
//=> false
|
||||
|
||||
'\u001b[4mcake\u001b[0m'.match(ansiRegex());
|
||||
//=> ['\u001b[4m', '\u001b[0m']
|
||||
```
|
||||
|
||||
## FAQ
|
||||
|
||||
### Why do you test for codes not in the ECMA 48 standard?
|
||||
|
||||
Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
|
||||
|
||||
On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
46
node_modules/gauge/node_modules/is-fullwidth-code-point/index.js
generated
vendored
Normal file
46
node_modules/gauge/node_modules/is-fullwidth-code-point/index.js
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
'use strict';
|
||||
var numberIsNan = require('number-is-nan');
|
||||
|
||||
module.exports = function (x) {
|
||||
if (numberIsNan(x)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1369
|
||||
|
||||
// code points are derived from:
|
||||
// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
|
||||
if (x >= 0x1100 && (
|
||||
x <= 0x115f || // Hangul Jamo
|
||||
0x2329 === x || // LEFT-POINTING ANGLE BRACKET
|
||||
0x232a === x || // RIGHT-POINTING ANGLE BRACKET
|
||||
// CJK Radicals Supplement .. Enclosed CJK Letters and Months
|
||||
(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
|
||||
// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
|
||||
0x3250 <= x && x <= 0x4dbf ||
|
||||
// CJK Unified Ideographs .. Yi Radicals
|
||||
0x4e00 <= x && x <= 0xa4c6 ||
|
||||
// Hangul Jamo Extended-A
|
||||
0xa960 <= x && x <= 0xa97c ||
|
||||
// Hangul Syllables
|
||||
0xac00 <= x && x <= 0xd7a3 ||
|
||||
// CJK Compatibility Ideographs
|
||||
0xf900 <= x && x <= 0xfaff ||
|
||||
// Vertical Forms
|
||||
0xfe10 <= x && x <= 0xfe19 ||
|
||||
// CJK Compatibility Forms .. Small Form Variants
|
||||
0xfe30 <= x && x <= 0xfe6b ||
|
||||
// Halfwidth and Fullwidth Forms
|
||||
0xff01 <= x && x <= 0xff60 ||
|
||||
0xffe0 <= x && x <= 0xffe6 ||
|
||||
// Kana Supplement
|
||||
0x1b000 <= x && x <= 0x1b001 ||
|
||||
// Enclosed Ideographic Supplement
|
||||
0x1f200 <= x && x <= 0x1f251 ||
|
||||
// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
|
||||
0x20000 <= x && x <= 0x3fffd)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
21
node_modules/gauge/node_modules/is-fullwidth-code-point/license
generated
vendored
Normal file
21
node_modules/gauge/node_modules/is-fullwidth-code-point/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
45
node_modules/gauge/node_modules/is-fullwidth-code-point/package.json
generated
vendored
Normal file
45
node_modules/gauge/node_modules/is-fullwidth-code-point/package.json
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "is-fullwidth-code-point",
|
||||
"version": "1.0.0",
|
||||
"description": "Check if the character represented by a given Unicode code point is fullwidth",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/is-fullwidth-code-point",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node test.js"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"fullwidth",
|
||||
"full-width",
|
||||
"full",
|
||||
"width",
|
||||
"unicode",
|
||||
"character",
|
||||
"char",
|
||||
"string",
|
||||
"str",
|
||||
"codepoint",
|
||||
"code",
|
||||
"point",
|
||||
"is",
|
||||
"detect",
|
||||
"check"
|
||||
],
|
||||
"dependencies": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "0.0.4",
|
||||
"code-point-at": "^1.0.0"
|
||||
}
|
||||
}
|
39
node_modules/gauge/node_modules/is-fullwidth-code-point/readme.md
generated
vendored
Normal file
39
node_modules/gauge/node_modules/is-fullwidth-code-point/readme.md
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
# is-fullwidth-code-point [](https://travis-ci.org/sindresorhus/is-fullwidth-code-point)
|
||||
|
||||
> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms)
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save is-fullwidth-code-point
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var isFullwidthCodePoint = require('is-fullwidth-code-point');
|
||||
|
||||
isFullwidthCodePoint('谢'.codePointAt());
|
||||
//=> true
|
||||
|
||||
isFullwidthCodePoint('a'.codePointAt());
|
||||
//=> false
|
||||
```
|
||||
|
||||
|
||||
## API
|
||||
|
||||
### isFullwidthCodePoint(input)
|
||||
|
||||
#### input
|
||||
|
||||
Type: `number`
|
||||
|
||||
[Code point](https://en.wikipedia.org/wiki/Code_point) of a character.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
16
node_modules/gauge/node_modules/signal-exit/LICENSE.txt
generated
vendored
Normal file
16
node_modules/gauge/node_modules/signal-exit/LICENSE.txt
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
The ISC License
|
||||
|
||||
Copyright (c) 2015, Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software
|
||||
for any purpose with or without fee is hereby granted, provided
|
||||
that the above copyright notice and this permission notice
|
||||
appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
|
||||
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
39
node_modules/gauge/node_modules/signal-exit/README.md
generated
vendored
Normal file
39
node_modules/gauge/node_modules/signal-exit/README.md
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
# signal-exit
|
||||
|
||||
[](https://travis-ci.org/tapjs/signal-exit)
|
||||
[](https://coveralls.io/r/tapjs/signal-exit?branch=master)
|
||||
[](https://www.npmjs.com/package/signal-exit)
|
||||
[](https://github.com/conventional-changelog/standard-version)
|
||||
|
||||
When you want to fire an event no matter how a process exits:
|
||||
|
||||
* reaching the end of execution.
|
||||
* explicitly having `process.exit(code)` called.
|
||||
* having `process.kill(pid, sig)` called.
|
||||
* receiving a fatal signal from outside the process
|
||||
|
||||
Use `signal-exit`.
|
||||
|
||||
```js
|
||||
var onExit = require('signal-exit')
|
||||
|
||||
onExit(function (code, signal) {
|
||||
console.log('process exited!')
|
||||
})
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
`var remove = onExit(function (code, signal) {}, options)`
|
||||
|
||||
The return value of the function is a function that will remove the
|
||||
handler.
|
||||
|
||||
Note that the function *only* fires for signals if the signal would
|
||||
cause the process to exit. That is, there are no other listeners, and
|
||||
it is a fatal signal.
|
||||
|
||||
## Options
|
||||
|
||||
* `alwaysLast`: Run this handler after any other signal or exit
|
||||
handlers. This causes `process.emit` to be monkeypatched.
|
202
node_modules/gauge/node_modules/signal-exit/index.js
generated
vendored
Normal file
202
node_modules/gauge/node_modules/signal-exit/index.js
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
// Note: since nyc uses this module to output coverage, any lines
|
||||
// that are in the direct sync flow of nyc's outputCoverage are
|
||||
// ignored, since we can never get coverage for them.
|
||||
// grab a reference to node's real process object right away
|
||||
var process = global.process
|
||||
|
||||
const processOk = function (process) {
|
||||
return process &&
|
||||
typeof process === 'object' &&
|
||||
typeof process.removeListener === 'function' &&
|
||||
typeof process.emit === 'function' &&
|
||||
typeof process.reallyExit === 'function' &&
|
||||
typeof process.listeners === 'function' &&
|
||||
typeof process.kill === 'function' &&
|
||||
typeof process.pid === 'number' &&
|
||||
typeof process.on === 'function'
|
||||
}
|
||||
|
||||
// some kind of non-node environment, just no-op
|
||||
/* istanbul ignore if */
|
||||
if (!processOk(process)) {
|
||||
module.exports = function () {
|
||||
return function () {}
|
||||
}
|
||||
} else {
|
||||
var assert = require('assert')
|
||||
var signals = require('./signals.js')
|
||||
var isWin = /^win/i.test(process.platform)
|
||||
|
||||
var EE = require('events')
|
||||
/* istanbul ignore if */
|
||||
if (typeof EE !== 'function') {
|
||||
EE = EE.EventEmitter
|
||||
}
|
||||
|
||||
var emitter
|
||||
if (process.__signal_exit_emitter__) {
|
||||
emitter = process.__signal_exit_emitter__
|
||||
} else {
|
||||
emitter = process.__signal_exit_emitter__ = new EE()
|
||||
emitter.count = 0
|
||||
emitter.emitted = {}
|
||||
}
|
||||
|
||||
// Because this emitter is a global, we have to check to see if a
|
||||
// previous version of this library failed to enable infinite listeners.
|
||||
// I know what you're about to say. But literally everything about
|
||||
// signal-exit is a compromise with evil. Get used to it.
|
||||
if (!emitter.infinite) {
|
||||
emitter.setMaxListeners(Infinity)
|
||||
emitter.infinite = true
|
||||
}
|
||||
|
||||
module.exports = function (cb, opts) {
|
||||
/* istanbul ignore if */
|
||||
if (!processOk(global.process)) {
|
||||
return function () {}
|
||||
}
|
||||
assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
|
||||
|
||||
if (loaded === false) {
|
||||
load()
|
||||
}
|
||||
|
||||
var ev = 'exit'
|
||||
if (opts && opts.alwaysLast) {
|
||||
ev = 'afterexit'
|
||||
}
|
||||
|
||||
var remove = function () {
|
||||
emitter.removeListener(ev, cb)
|
||||
if (emitter.listeners('exit').length === 0 &&
|
||||
emitter.listeners('afterexit').length === 0) {
|
||||
unload()
|
||||
}
|
||||
}
|
||||
emitter.on(ev, cb)
|
||||
|
||||
return remove
|
||||
}
|
||||
|
||||
var unload = function unload () {
|
||||
if (!loaded || !processOk(global.process)) {
|
||||
return
|
||||
}
|
||||
loaded = false
|
||||
|
||||
signals.forEach(function (sig) {
|
||||
try {
|
||||
process.removeListener(sig, sigListeners[sig])
|
||||
} catch (er) {}
|
||||
})
|
||||
process.emit = originalProcessEmit
|
||||
process.reallyExit = originalProcessReallyExit
|
||||
emitter.count -= 1
|
||||
}
|
||||
module.exports.unload = unload
|
||||
|
||||
var emit = function emit (event, code, signal) {
|
||||
/* istanbul ignore if */
|
||||
if (emitter.emitted[event]) {
|
||||
return
|
||||
}
|
||||
emitter.emitted[event] = true
|
||||
emitter.emit(event, code, signal)
|
||||
}
|
||||
|
||||
// { <signal>: <listener fn>, ... }
|
||||
var sigListeners = {}
|
||||
signals.forEach(function (sig) {
|
||||
sigListeners[sig] = function listener () {
|
||||
/* istanbul ignore if */
|
||||
if (!processOk(global.process)) {
|
||||
return
|
||||
}
|
||||
// If there are no other listeners, an exit is coming!
|
||||
// Simplest way: remove us and then re-send the signal.
|
||||
// We know that this will kill the process, so we can
|
||||
// safely emit now.
|
||||
var listeners = process.listeners(sig)
|
||||
if (listeners.length === emitter.count) {
|
||||
unload()
|
||||
emit('exit', null, sig)
|
||||
/* istanbul ignore next */
|
||||
emit('afterexit', null, sig)
|
||||
/* istanbul ignore next */
|
||||
if (isWin && sig === 'SIGHUP') {
|
||||
// "SIGHUP" throws an `ENOSYS` error on Windows,
|
||||
// so use a supported signal instead
|
||||
sig = 'SIGINT'
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
process.kill(process.pid, sig)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
module.exports.signals = function () {
|
||||
return signals
|
||||
}
|
||||
|
||||
var loaded = false
|
||||
|
||||
var load = function load () {
|
||||
if (loaded || !processOk(global.process)) {
|
||||
return
|
||||
}
|
||||
loaded = true
|
||||
|
||||
// This is the number of onSignalExit's that are in play.
|
||||
// It's important so that we can count the correct number of
|
||||
// listeners on signals, and don't wait for the other one to
|
||||
// handle it instead of us.
|
||||
emitter.count += 1
|
||||
|
||||
signals = signals.filter(function (sig) {
|
||||
try {
|
||||
process.on(sig, sigListeners[sig])
|
||||
return true
|
||||
} catch (er) {
|
||||
return false
|
||||
}
|
||||
})
|
||||
|
||||
process.emit = processEmit
|
||||
process.reallyExit = processReallyExit
|
||||
}
|
||||
module.exports.load = load
|
||||
|
||||
var originalProcessReallyExit = process.reallyExit
|
||||
var processReallyExit = function processReallyExit (code) {
|
||||
/* istanbul ignore if */
|
||||
if (!processOk(global.process)) {
|
||||
return
|
||||
}
|
||||
process.exitCode = code || /* istanbul ignore next */ 0
|
||||
emit('exit', process.exitCode, null)
|
||||
/* istanbul ignore next */
|
||||
emit('afterexit', process.exitCode, null)
|
||||
/* istanbul ignore next */
|
||||
originalProcessReallyExit.call(process, process.exitCode)
|
||||
}
|
||||
|
||||
var originalProcessEmit = process.emit
|
||||
var processEmit = function processEmit (ev, arg) {
|
||||
if (ev === 'exit' && processOk(global.process)) {
|
||||
/* istanbul ignore else */
|
||||
if (arg !== undefined) {
|
||||
process.exitCode = arg
|
||||
}
|
||||
var ret = originalProcessEmit.apply(this, arguments)
|
||||
/* istanbul ignore next */
|
||||
emit('exit', process.exitCode, null)
|
||||
/* istanbul ignore next */
|
||||
emit('afterexit', process.exitCode, null)
|
||||
/* istanbul ignore next */
|
||||
return ret
|
||||
} else {
|
||||
return originalProcessEmit.apply(this, arguments)
|
||||
}
|
||||
}
|
||||
}
|
38
node_modules/gauge/node_modules/signal-exit/package.json
generated
vendored
Normal file
38
node_modules/gauge/node_modules/signal-exit/package.json
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "signal-exit",
|
||||
"version": "3.0.7",
|
||||
"description": "when you want to fire an event no matter how a process exits.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "tap",
|
||||
"snap": "tap",
|
||||
"preversion": "npm test",
|
||||
"postversion": "npm publish",
|
||||
"prepublishOnly": "git push origin --follow-tags"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"signals.js"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tapjs/signal-exit.git"
|
||||
},
|
||||
"keywords": [
|
||||
"signal",
|
||||
"exit"
|
||||
],
|
||||
"author": "Ben Coe <ben@npmjs.com>",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/tapjs/signal-exit/issues"
|
||||
},
|
||||
"homepage": "https://github.com/tapjs/signal-exit",
|
||||
"devDependencies": {
|
||||
"chai": "^3.5.0",
|
||||
"coveralls": "^3.1.1",
|
||||
"nyc": "^15.1.0",
|
||||
"standard-version": "^9.3.1",
|
||||
"tap": "^15.1.1"
|
||||
}
|
||||
}
|
53
node_modules/gauge/node_modules/signal-exit/signals.js
generated
vendored
Normal file
53
node_modules/gauge/node_modules/signal-exit/signals.js
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
// This is not the set of all possible signals.
|
||||
//
|
||||
// It IS, however, the set of all signals that trigger
|
||||
// an exit on either Linux or BSD systems. Linux is a
|
||||
// superset of the signal names supported on BSD, and
|
||||
// the unknown signals just fail to register, so we can
|
||||
// catch that easily enough.
|
||||
//
|
||||
// Don't bother with SIGKILL. It's uncatchable, which
|
||||
// means that we can't fire any callbacks anyway.
|
||||
//
|
||||
// If a user does happen to register a handler on a non-
|
||||
// fatal signal like SIGWINCH or something, and then
|
||||
// exit, it'll end up firing `process.emit('exit')`, so
|
||||
// the handler will be fired anyway.
|
||||
//
|
||||
// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
|
||||
// artificially, inherently leave the process in a
|
||||
// state from which it is not safe to try and enter JS
|
||||
// listeners.
|
||||
module.exports = [
|
||||
'SIGABRT',
|
||||
'SIGALRM',
|
||||
'SIGHUP',
|
||||
'SIGINT',
|
||||
'SIGTERM'
|
||||
]
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
module.exports.push(
|
||||
'SIGVTALRM',
|
||||
'SIGXCPU',
|
||||
'SIGXFSZ',
|
||||
'SIGUSR2',
|
||||
'SIGTRAP',
|
||||
'SIGSYS',
|
||||
'SIGQUIT',
|
||||
'SIGIOT'
|
||||
// should detect profiler and enable/disable accordingly.
|
||||
// see #21
|
||||
// 'SIGPROF'
|
||||
)
|
||||
}
|
||||
|
||||
if (process.platform === 'linux') {
|
||||
module.exports.push(
|
||||
'SIGIO',
|
||||
'SIGPOLL',
|
||||
'SIGPWR',
|
||||
'SIGSTKFLT',
|
||||
'SIGUNUSED'
|
||||
)
|
||||
}
|
37
node_modules/gauge/node_modules/string-width/index.js
generated
vendored
Normal file
37
node_modules/gauge/node_modules/string-width/index.js
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
var stripAnsi = require('strip-ansi');
|
||||
var codePointAt = require('code-point-at');
|
||||
var isFullwidthCodePoint = require('is-fullwidth-code-point');
|
||||
|
||||
// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345
|
||||
module.exports = function (str) {
|
||||
if (typeof str !== 'string' || str.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var width = 0;
|
||||
|
||||
str = stripAnsi(str);
|
||||
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var code = codePointAt(str, i);
|
||||
|
||||
// ignore control characters
|
||||
if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// surrogates
|
||||
if (code >= 0x10000) {
|
||||
i++;
|
||||
}
|
||||
|
||||
if (isFullwidthCodePoint(code)) {
|
||||
width += 2;
|
||||
} else {
|
||||
width++;
|
||||
}
|
||||
}
|
||||
|
||||
return width;
|
||||
};
|
21
node_modules/gauge/node_modules/string-width/license
generated
vendored
Normal file
21
node_modules/gauge/node_modules/string-width/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
56
node_modules/gauge/node_modules/string-width/package.json
generated
vendored
Normal file
56
node_modules/gauge/node_modules/string-width/package.json
generated
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "string-width",
|
||||
"version": "1.0.2",
|
||||
"description": "Get the visual width of a string - the number of columns required to display it",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/string-width",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"string",
|
||||
"str",
|
||||
"character",
|
||||
"char",
|
||||
"unicode",
|
||||
"width",
|
||||
"visual",
|
||||
"column",
|
||||
"columns",
|
||||
"fullwidth",
|
||||
"full-width",
|
||||
"full",
|
||||
"ansi",
|
||||
"escape",
|
||||
"codes",
|
||||
"cli",
|
||||
"command-line",
|
||||
"terminal",
|
||||
"console",
|
||||
"cjk",
|
||||
"chinese",
|
||||
"japanese",
|
||||
"korean",
|
||||
"fixed-width"
|
||||
],
|
||||
"dependencies": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
"strip-ansi": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"xo": "*"
|
||||
}
|
||||
}
|
42
node_modules/gauge/node_modules/string-width/readme.md
generated
vendored
Normal file
42
node_modules/gauge/node_modules/string-width/readme.md
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
# string-width [](https://travis-ci.org/sindresorhus/string-width)
|
||||
|
||||
> Get the visual width of a string - the number of columns required to display it
|
||||
|
||||
Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
|
||||
|
||||
Useful to be able to measure the actual width of command-line output.
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save string-width
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const stringWidth = require('string-width');
|
||||
|
||||
stringWidth('古');
|
||||
//=> 2
|
||||
|
||||
stringWidth('\u001b[1m古\u001b[22m');
|
||||
//=> 2
|
||||
|
||||
stringWidth('a');
|
||||
//=> 1
|
||||
```
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module
|
||||
- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string
|
||||
- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
|
6
node_modules/gauge/node_modules/strip-ansi/index.js
generated
vendored
Normal file
6
node_modules/gauge/node_modules/strip-ansi/index.js
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
'use strict';
|
||||
var ansiRegex = require('ansi-regex')();
|
||||
|
||||
module.exports = function (str) {
|
||||
return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
|
||||
};
|
21
node_modules/gauge/node_modules/strip-ansi/license
generated
vendored
Normal file
21
node_modules/gauge/node_modules/strip-ansi/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
57
node_modules/gauge/node_modules/strip-ansi/package.json
generated
vendored
Normal file
57
node_modules/gauge/node_modules/strip-ansi/package.json
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "strip-ansi",
|
||||
"version": "3.0.1",
|
||||
"description": "Strip ANSI escape codes",
|
||||
"license": "MIT",
|
||||
"repository": "chalk/strip-ansi",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"maintainers": [
|
||||
"Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
|
||||
"Joshua Boy Nicolai Appelman <joshua@jbna.nl> (jbna.nl)",
|
||||
"JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"strip",
|
||||
"trim",
|
||||
"remove",
|
||||
"ansi",
|
||||
"styles",
|
||||
"color",
|
||||
"colour",
|
||||
"colors",
|
||||
"terminal",
|
||||
"console",
|
||||
"string",
|
||||
"tty",
|
||||
"escape",
|
||||
"formatting",
|
||||
"rgb",
|
||||
"256",
|
||||
"shell",
|
||||
"xterm",
|
||||
"log",
|
||||
"logging",
|
||||
"command-line",
|
||||
"text"
|
||||
],
|
||||
"dependencies": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"xo": "*"
|
||||
}
|
||||
}
|
33
node_modules/gauge/node_modules/strip-ansi/readme.md
generated
vendored
Normal file
33
node_modules/gauge/node_modules/strip-ansi/readme.md
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
# strip-ansi [](https://travis-ci.org/chalk/strip-ansi)
|
||||
|
||||
> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save strip-ansi
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var stripAnsi = require('strip-ansi');
|
||||
|
||||
stripAnsi('\u001b[4mcake\u001b[0m');
|
||||
//=> 'cake'
|
||||
```
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
|
||||
- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
|
||||
- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
|
||||
- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
63
node_modules/gauge/package.json
generated
vendored
Normal file
63
node_modules/gauge/package.json
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
{
|
||||
"name": "gauge",
|
||||
"version": "2.7.4",
|
||||
"description": "A terminal based horizontal guage",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "standard && tap test/*.js --coverage",
|
||||
"prepublish": "rm -f *~"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/iarna/gauge"
|
||||
},
|
||||
"keywords": [
|
||||
"progressbar",
|
||||
"progress",
|
||||
"gauge"
|
||||
],
|
||||
"author": "Rebecca Turner <me@re-becca.org>",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/iarna/gauge/issues"
|
||||
},
|
||||
"homepage": "https://github.com/iarna/gauge",
|
||||
"dependencies": {
|
||||
"aproba": "^1.0.3",
|
||||
"console-control-strings": "^1.0.0",
|
||||
"has-unicode": "^2.0.0",
|
||||
"object-assign": "^4.1.0",
|
||||
"signal-exit": "^3.0.0",
|
||||
"string-width": "^1.0.1",
|
||||
"strip-ansi": "^3.0.1",
|
||||
"wide-align": "^1.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"readable-stream": "^2.0.6",
|
||||
"require-inject": "^1.4.0",
|
||||
"standard": "^7.1.2",
|
||||
"tap": "^5.7.2",
|
||||
"through2": "^2.0.0"
|
||||
},
|
||||
"files": [
|
||||
"base-theme.js",
|
||||
"CHANGELOG.md",
|
||||
"error.js",
|
||||
"has-color.js",
|
||||
"index.js",
|
||||
"LICENSE",
|
||||
"package.json",
|
||||
"plumbing.js",
|
||||
"process.js",
|
||||
"progress-bar.js",
|
||||
"README.md",
|
||||
"render-template.js",
|
||||
"set-immediate.js",
|
||||
"set-interval.js",
|
||||
"spin.js",
|
||||
"template-item.js",
|
||||
"theme-set.js",
|
||||
"themes.js",
|
||||
"wide-truncate.js"
|
||||
]
|
||||
}
|
48
node_modules/gauge/plumbing.js
generated
vendored
Normal file
48
node_modules/gauge/plumbing.js
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
'use strict'
|
||||
var consoleControl = require('console-control-strings')
|
||||
var renderTemplate = require('./render-template.js')
|
||||
var validate = require('aproba')
|
||||
|
||||
var Plumbing = module.exports = function (theme, template, width) {
|
||||
if (!width) width = 80
|
||||
validate('OAN', [theme, template, width])
|
||||
this.showing = false
|
||||
this.theme = theme
|
||||
this.width = width
|
||||
this.template = template
|
||||
}
|
||||
Plumbing.prototype = {}
|
||||
|
||||
Plumbing.prototype.setTheme = function (theme) {
|
||||
validate('O', [theme])
|
||||
this.theme = theme
|
||||
}
|
||||
|
||||
Plumbing.prototype.setTemplate = function (template) {
|
||||
validate('A', [template])
|
||||
this.template = template
|
||||
}
|
||||
|
||||
Plumbing.prototype.setWidth = function (width) {
|
||||
validate('N', [width])
|
||||
this.width = width
|
||||
}
|
||||
|
||||
Plumbing.prototype.hide = function () {
|
||||
return consoleControl.gotoSOL() + consoleControl.eraseLine()
|
||||
}
|
||||
|
||||
Plumbing.prototype.hideCursor = consoleControl.hideCursor
|
||||
|
||||
Plumbing.prototype.showCursor = consoleControl.showCursor
|
||||
|
||||
Plumbing.prototype.show = function (status) {
|
||||
var values = Object.create(this.theme)
|
||||
for (var key in status) {
|
||||
values[key] = status[key]
|
||||
}
|
||||
|
||||
return renderTemplate(this.width, this.template, values).trim() +
|
||||
consoleControl.color('reset') +
|
||||
consoleControl.eraseLine() + consoleControl.gotoSOL()
|
||||
}
|
3
node_modules/gauge/process.js
generated
vendored
Normal file
3
node_modules/gauge/process.js
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
'use strict'
|
||||
// this exists so we can replace it during testing
|
||||
module.exports = process
|
35
node_modules/gauge/progress-bar.js
generated
vendored
Normal file
35
node_modules/gauge/progress-bar.js
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
'use strict'
|
||||
var validate = require('aproba')
|
||||
var renderTemplate = require('./render-template.js')
|
||||
var wideTruncate = require('./wide-truncate')
|
||||
var stringWidth = require('string-width')
|
||||
|
||||
module.exports = function (theme, width, completed) {
|
||||
validate('ONN', [theme, width, completed])
|
||||
if (completed < 0) completed = 0
|
||||
if (completed > 1) completed = 1
|
||||
if (width <= 0) return ''
|
||||
var sofar = Math.round(width * completed)
|
||||
var rest = width - sofar
|
||||
var template = [
|
||||
{type: 'complete', value: repeat(theme.complete, sofar), length: sofar},
|
||||
{type: 'remaining', value: repeat(theme.remaining, rest), length: rest}
|
||||
]
|
||||
return renderTemplate(width, template, theme)
|
||||
}
|
||||
|
||||
// lodash's way of repeating
|
||||
function repeat (string, width) {
|
||||
var result = ''
|
||||
var n = width
|
||||
do {
|
||||
if (n % 2) {
|
||||
result += string
|
||||
}
|
||||
n = Math.floor(n / 2)
|
||||
/*eslint no-self-assign: 0*/
|
||||
string += string
|
||||
} while (n && stringWidth(result) < width)
|
||||
|
||||
return wideTruncate(result, width)
|
||||
}
|
181
node_modules/gauge/render-template.js
generated
vendored
Normal file
181
node_modules/gauge/render-template.js
generated
vendored
Normal file
@ -0,0 +1,181 @@
|
||||
'use strict'
|
||||
var align = require('wide-align')
|
||||
var validate = require('aproba')
|
||||
var objectAssign = require('object-assign')
|
||||
var wideTruncate = require('./wide-truncate')
|
||||
var error = require('./error')
|
||||
var TemplateItem = require('./template-item')
|
||||
|
||||
function renderValueWithValues (values) {
|
||||
return function (item) {
|
||||
return renderValue(item, values)
|
||||
}
|
||||
}
|
||||
|
||||
var renderTemplate = module.exports = function (width, template, values) {
|
||||
var items = prepareItems(width, template, values)
|
||||
var rendered = items.map(renderValueWithValues(values)).join('')
|
||||
return align.left(wideTruncate(rendered, width), width)
|
||||
}
|
||||
|
||||
function preType (item) {
|
||||
var cappedTypeName = item.type[0].toUpperCase() + item.type.slice(1)
|
||||
return 'pre' + cappedTypeName
|
||||
}
|
||||
|
||||
function postType (item) {
|
||||
var cappedTypeName = item.type[0].toUpperCase() + item.type.slice(1)
|
||||
return 'post' + cappedTypeName
|
||||
}
|
||||
|
||||
function hasPreOrPost (item, values) {
|
||||
if (!item.type) return
|
||||
return values[preType(item)] || values[postType(item)]
|
||||
}
|
||||
|
||||
function generatePreAndPost (baseItem, parentValues) {
|
||||
var item = objectAssign({}, baseItem)
|
||||
var values = Object.create(parentValues)
|
||||
var template = []
|
||||
var pre = preType(item)
|
||||
var post = postType(item)
|
||||
if (values[pre]) {
|
||||
template.push({value: values[pre]})
|
||||
values[pre] = null
|
||||
}
|
||||
item.minLength = null
|
||||
item.length = null
|
||||
item.maxLength = null
|
||||
template.push(item)
|
||||
values[item.type] = values[item.type]
|
||||
if (values[post]) {
|
||||
template.push({value: values[post]})
|
||||
values[post] = null
|
||||
}
|
||||
return function ($1, $2, length) {
|
||||
return renderTemplate(length, template, values)
|
||||
}
|
||||
}
|
||||
|
||||
function prepareItems (width, template, values) {
|
||||
function cloneAndObjectify (item, index, arr) {
|
||||
var cloned = new TemplateItem(item, width)
|
||||
var type = cloned.type
|
||||
if (cloned.value == null) {
|
||||
if (!(type in values)) {
|
||||
if (cloned.default == null) {
|
||||
throw new error.MissingTemplateValue(cloned, values)
|
||||
} else {
|
||||
cloned.value = cloned.default
|
||||
}
|
||||
} else {
|
||||
cloned.value = values[type]
|
||||
}
|
||||
}
|
||||
if (cloned.value == null || cloned.value === '') return null
|
||||
cloned.index = index
|
||||
cloned.first = index === 0
|
||||
cloned.last = index === arr.length - 1
|
||||
if (hasPreOrPost(cloned, values)) cloned.value = generatePreAndPost(cloned, values)
|
||||
return cloned
|
||||
}
|
||||
|
||||
var output = template.map(cloneAndObjectify).filter(function (item) { return item != null })
|
||||
|
||||
var outputLength = 0
|
||||
var remainingSpace = width
|
||||
var variableCount = output.length
|
||||
|
||||
function consumeSpace (length) {
|
||||
if (length > remainingSpace) length = remainingSpace
|
||||
outputLength += length
|
||||
remainingSpace -= length
|
||||
}
|
||||
|
||||
function finishSizing (item, length) {
|
||||
if (item.finished) throw new error.Internal('Tried to finish template item that was already finished')
|
||||
if (length === Infinity) throw new error.Internal('Length of template item cannot be infinity')
|
||||
if (length != null) item.length = length
|
||||
item.minLength = null
|
||||
item.maxLength = null
|
||||
--variableCount
|
||||
item.finished = true
|
||||
if (item.length == null) item.length = item.getBaseLength()
|
||||
if (item.length == null) throw new error.Internal('Finished template items must have a length')
|
||||
consumeSpace(item.getLength())
|
||||
}
|
||||
|
||||
output.forEach(function (item) {
|
||||
if (!item.kerning) return
|
||||
var prevPadRight = item.first ? 0 : output[item.index - 1].padRight
|
||||
if (!item.first && prevPadRight < item.kerning) item.padLeft = item.kerning - prevPadRight
|
||||
if (!item.last) item.padRight = item.kerning
|
||||
})
|
||||
|
||||
// Finish any that have a fixed (literal or intuited) length
|
||||
output.forEach(function (item) {
|
||||
if (item.getBaseLength() == null) return
|
||||
finishSizing(item)
|
||||
})
|
||||
|
||||
var resized = 0
|
||||
var resizing
|
||||
var hunkSize
|
||||
do {
|
||||
resizing = false
|
||||
hunkSize = Math.round(remainingSpace / variableCount)
|
||||
output.forEach(function (item) {
|
||||
if (item.finished) return
|
||||
if (!item.maxLength) return
|
||||
if (item.getMaxLength() < hunkSize) {
|
||||
finishSizing(item, item.maxLength)
|
||||
resizing = true
|
||||
}
|
||||
})
|
||||
} while (resizing && resized++ < output.length)
|
||||
if (resizing) throw new error.Internal('Resize loop iterated too many times while determining maxLength')
|
||||
|
||||
resized = 0
|
||||
do {
|
||||
resizing = false
|
||||
hunkSize = Math.round(remainingSpace / variableCount)
|
||||
output.forEach(function (item) {
|
||||
if (item.finished) return
|
||||
if (!item.minLength) return
|
||||
if (item.getMinLength() >= hunkSize) {
|
||||
finishSizing(item, item.minLength)
|
||||
resizing = true
|
||||
}
|
||||
})
|
||||
} while (resizing && resized++ < output.length)
|
||||
if (resizing) throw new error.Internal('Resize loop iterated too many times while determining minLength')
|
||||
|
||||
hunkSize = Math.round(remainingSpace / variableCount)
|
||||
output.forEach(function (item) {
|
||||
if (item.finished) return
|
||||
finishSizing(item, hunkSize)
|
||||
})
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
function renderFunction (item, values, length) {
|
||||
validate('OON', arguments)
|
||||
if (item.type) {
|
||||
return item.value(values, values[item.type + 'Theme'] || {}, length)
|
||||
} else {
|
||||
return item.value(values, {}, length)
|
||||
}
|
||||
}
|
||||
|
||||
function renderValue (item, values) {
|
||||
var length = item.getBaseLength()
|
||||
var value = typeof item.value === 'function' ? renderFunction(item, values, length) : item.value
|
||||
if (value == null || value === '') return ''
|
||||
var alignWith = align[item.align] || align.left
|
||||
var leftPadding = item.padLeft ? align.left('', item.padLeft) : ''
|
||||
var rightPadding = item.padRight ? align.right('', item.padRight) : ''
|
||||
var truncated = wideTruncate(String(value), length)
|
||||
var aligned = alignWith(truncated, length)
|
||||
return leftPadding + aligned + rightPadding
|
||||
}
|
7
node_modules/gauge/set-immediate.js
generated
vendored
Normal file
7
node_modules/gauge/set-immediate.js
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict'
|
||||
var process = require('./process')
|
||||
try {
|
||||
module.exports = setImmediate
|
||||
} catch (ex) {
|
||||
module.exports = process.nextTick
|
||||
}
|
3
node_modules/gauge/set-interval.js
generated
vendored
Normal file
3
node_modules/gauge/set-interval.js
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
'use strict'
|
||||
// this exists so we can replace it during testing
|
||||
module.exports = setInterval
|
5
node_modules/gauge/spin.js
generated
vendored
Normal file
5
node_modules/gauge/spin.js
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = function spin (spinstr, spun) {
|
||||
return spinstr[spun % spinstr.length]
|
||||
}
|
73
node_modules/gauge/template-item.js
generated
vendored
Normal file
73
node_modules/gauge/template-item.js
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
'use strict'
|
||||
var stringWidth = require('string-width')
|
||||
|
||||
module.exports = TemplateItem
|
||||
|
||||
function isPercent (num) {
|
||||
if (typeof num !== 'string') return false
|
||||
return num.slice(-1) === '%'
|
||||
}
|
||||
|
||||
function percent (num) {
|
||||
return Number(num.slice(0, -1)) / 100
|
||||
}
|
||||
|
||||
function TemplateItem (values, outputLength) {
|
||||
this.overallOutputLength = outputLength
|
||||
this.finished = false
|
||||
this.type = null
|
||||
this.value = null
|
||||
this.length = null
|
||||
this.maxLength = null
|
||||
this.minLength = null
|
||||
this.kerning = null
|
||||
this.align = 'left'
|
||||
this.padLeft = 0
|
||||
this.padRight = 0
|
||||
this.index = null
|
||||
this.first = null
|
||||
this.last = null
|
||||
if (typeof values === 'string') {
|
||||
this.value = values
|
||||
} else {
|
||||
for (var prop in values) this[prop] = values[prop]
|
||||
}
|
||||
// Realize percents
|
||||
if (isPercent(this.length)) {
|
||||
this.length = Math.round(this.overallOutputLength * percent(this.length))
|
||||
}
|
||||
if (isPercent(this.minLength)) {
|
||||
this.minLength = Math.round(this.overallOutputLength * percent(this.minLength))
|
||||
}
|
||||
if (isPercent(this.maxLength)) {
|
||||
this.maxLength = Math.round(this.overallOutputLength * percent(this.maxLength))
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
TemplateItem.prototype = {}
|
||||
|
||||
TemplateItem.prototype.getBaseLength = function () {
|
||||
var length = this.length
|
||||
if (length == null && typeof this.value === 'string' && this.maxLength == null && this.minLength == null) {
|
||||
length = stringWidth(this.value)
|
||||
}
|
||||
return length
|
||||
}
|
||||
|
||||
TemplateItem.prototype.getLength = function () {
|
||||
var length = this.getBaseLength()
|
||||
if (length == null) return null
|
||||
return length + this.padLeft + this.padRight
|
||||
}
|
||||
|
||||
TemplateItem.prototype.getMaxLength = function () {
|
||||
if (this.maxLength == null) return null
|
||||
return this.maxLength + this.padLeft + this.padRight
|
||||
}
|
||||
|
||||
TemplateItem.prototype.getMinLength = function () {
|
||||
if (this.minLength == null) return null
|
||||
return this.minLength + this.padLeft + this.padRight
|
||||
}
|
||||
|
115
node_modules/gauge/theme-set.js
generated
vendored
Normal file
115
node_modules/gauge/theme-set.js
generated
vendored
Normal file
@ -0,0 +1,115 @@
|
||||
'use strict'
|
||||
var objectAssign = require('object-assign')
|
||||
|
||||
module.exports = function () {
|
||||
return ThemeSetProto.newThemeSet()
|
||||
}
|
||||
|
||||
var ThemeSetProto = {}
|
||||
|
||||
ThemeSetProto.baseTheme = require('./base-theme.js')
|
||||
|
||||
ThemeSetProto.newTheme = function (parent, theme) {
|
||||
if (!theme) {
|
||||
theme = parent
|
||||
parent = this.baseTheme
|
||||
}
|
||||
return objectAssign({}, parent, theme)
|
||||
}
|
||||
|
||||
ThemeSetProto.getThemeNames = function () {
|
||||
return Object.keys(this.themes)
|
||||
}
|
||||
|
||||
ThemeSetProto.addTheme = function (name, parent, theme) {
|
||||
this.themes[name] = this.newTheme(parent, theme)
|
||||
}
|
||||
|
||||
ThemeSetProto.addToAllThemes = function (theme) {
|
||||
var themes = this.themes
|
||||
Object.keys(themes).forEach(function (name) {
|
||||
objectAssign(themes[name], theme)
|
||||
})
|
||||
objectAssign(this.baseTheme, theme)
|
||||
}
|
||||
|
||||
ThemeSetProto.getTheme = function (name) {
|
||||
if (!this.themes[name]) throw this.newMissingThemeError(name)
|
||||
return this.themes[name]
|
||||
}
|
||||
|
||||
ThemeSetProto.setDefault = function (opts, name) {
|
||||
if (name == null) {
|
||||
name = opts
|
||||
opts = {}
|
||||
}
|
||||
var platform = opts.platform == null ? 'fallback' : opts.platform
|
||||
var hasUnicode = !!opts.hasUnicode
|
||||
var hasColor = !!opts.hasColor
|
||||
if (!this.defaults[platform]) this.defaults[platform] = {true: {}, false: {}}
|
||||
this.defaults[platform][hasUnicode][hasColor] = name
|
||||
}
|
||||
|
||||
ThemeSetProto.getDefault = function (opts) {
|
||||
if (!opts) opts = {}
|
||||
var platformName = opts.platform || process.platform
|
||||
var platform = this.defaults[platformName] || this.defaults.fallback
|
||||
var hasUnicode = !!opts.hasUnicode
|
||||
var hasColor = !!opts.hasColor
|
||||
if (!platform) throw this.newMissingDefaultThemeError(platformName, hasUnicode, hasColor)
|
||||
if (!platform[hasUnicode][hasColor]) {
|
||||
if (hasUnicode && hasColor && platform[!hasUnicode][hasColor]) {
|
||||
hasUnicode = false
|
||||
} else if (hasUnicode && hasColor && platform[hasUnicode][!hasColor]) {
|
||||
hasColor = false
|
||||
} else if (hasUnicode && hasColor && platform[!hasUnicode][!hasColor]) {
|
||||
hasUnicode = false
|
||||
hasColor = false
|
||||
} else if (hasUnicode && !hasColor && platform[!hasUnicode][hasColor]) {
|
||||
hasUnicode = false
|
||||
} else if (!hasUnicode && hasColor && platform[hasUnicode][!hasColor]) {
|
||||
hasColor = false
|
||||
} else if (platform === this.defaults.fallback) {
|
||||
throw this.newMissingDefaultThemeError(platformName, hasUnicode, hasColor)
|
||||
}
|
||||
}
|
||||
if (platform[hasUnicode][hasColor]) {
|
||||
return this.getTheme(platform[hasUnicode][hasColor])
|
||||
} else {
|
||||
return this.getDefault(objectAssign({}, opts, {platform: 'fallback'}))
|
||||
}
|
||||
}
|
||||
|
||||
ThemeSetProto.newMissingThemeError = function newMissingThemeError (name) {
|
||||
var err = new Error('Could not find a gauge theme named "' + name + '"')
|
||||
Error.captureStackTrace.call(err, newMissingThemeError)
|
||||
err.theme = name
|
||||
err.code = 'EMISSINGTHEME'
|
||||
return err
|
||||
}
|
||||
|
||||
ThemeSetProto.newMissingDefaultThemeError = function newMissingDefaultThemeError (platformName, hasUnicode, hasColor) {
|
||||
var err = new Error(
|
||||
'Could not find a gauge theme for your platform/unicode/color use combo:\n' +
|
||||
' platform = ' + platformName + '\n' +
|
||||
' hasUnicode = ' + hasUnicode + '\n' +
|
||||
' hasColor = ' + hasColor)
|
||||
Error.captureStackTrace.call(err, newMissingDefaultThemeError)
|
||||
err.platform = platformName
|
||||
err.hasUnicode = hasUnicode
|
||||
err.hasColor = hasColor
|
||||
err.code = 'EMISSINGTHEME'
|
||||
return err
|
||||
}
|
||||
|
||||
ThemeSetProto.newThemeSet = function () {
|
||||
var themeset = function (opts) {
|
||||
return themeset.getDefault(opts)
|
||||
}
|
||||
return objectAssign(themeset, ThemeSetProto, {
|
||||
themes: objectAssign({}, this.themes),
|
||||
baseTheme: objectAssign({}, this.baseTheme),
|
||||
defaults: JSON.parse(JSON.stringify(this.defaults || {}))
|
||||
})
|
||||
}
|
||||
|
54
node_modules/gauge/themes.js
generated
vendored
Normal file
54
node_modules/gauge/themes.js
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
'use strict'
|
||||
var consoleControl = require('console-control-strings')
|
||||
var ThemeSet = require('./theme-set.js')
|
||||
|
||||
var themes = module.exports = new ThemeSet()
|
||||
|
||||
themes.addTheme('ASCII', {
|
||||
preProgressbar: '[',
|
||||
postProgressbar: ']',
|
||||
progressbarTheme: {
|
||||
complete: '#',
|
||||
remaining: '.'
|
||||
},
|
||||
activityIndicatorTheme: '-\\|/',
|
||||
preSubsection: '>'
|
||||
})
|
||||
|
||||
themes.addTheme('colorASCII', themes.getTheme('ASCII'), {
|
||||
progressbarTheme: {
|
||||
preComplete: consoleControl.color('inverse'),
|
||||
complete: ' ',
|
||||
postComplete: consoleControl.color('stopInverse'),
|
||||
preRemaining: consoleControl.color('brightBlack'),
|
||||
remaining: '.',
|
||||
postRemaining: consoleControl.color('reset')
|
||||
}
|
||||
})
|
||||
|
||||
themes.addTheme('brailleSpinner', {
|
||||
preProgressbar: '⸨',
|
||||
postProgressbar: '⸩',
|
||||
progressbarTheme: {
|
||||
complete: '░',
|
||||
remaining: '⠂'
|
||||
},
|
||||
activityIndicatorTheme: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',
|
||||
preSubsection: '>'
|
||||
})
|
||||
|
||||
themes.addTheme('colorBrailleSpinner', themes.getTheme('brailleSpinner'), {
|
||||
progressbarTheme: {
|
||||
preComplete: consoleControl.color('inverse'),
|
||||
complete: ' ',
|
||||
postComplete: consoleControl.color('stopInverse'),
|
||||
preRemaining: consoleControl.color('brightBlack'),
|
||||
remaining: '░',
|
||||
postRemaining: consoleControl.color('reset')
|
||||
}
|
||||
})
|
||||
|
||||
themes.setDefault({}, 'ASCII')
|
||||
themes.setDefault({hasColor: true}, 'colorASCII')
|
||||
themes.setDefault({platform: 'darwin', hasUnicode: true}, 'brailleSpinner')
|
||||
themes.setDefault({platform: 'darwin', hasUnicode: true, hasColor: true}, 'colorBrailleSpinner')
|
25
node_modules/gauge/wide-truncate.js
generated
vendored
Normal file
25
node_modules/gauge/wide-truncate.js
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
'use strict'
|
||||
var stringWidth = require('string-width')
|
||||
var stripAnsi = require('strip-ansi')
|
||||
|
||||
module.exports = wideTruncate
|
||||
|
||||
function wideTruncate (str, target) {
|
||||
if (stringWidth(str) === 0) return str
|
||||
if (target <= 0) return ''
|
||||
if (stringWidth(str) <= target) return str
|
||||
|
||||
// We compute the number of bytes of ansi sequences here and add
|
||||
// that to our initial truncation to ensure that we don't slice one
|
||||
// that we want to keep in half.
|
||||
var noAnsi = stripAnsi(str)
|
||||
var ansiSize = str.length + noAnsi.length
|
||||
var truncated = str.slice(0, target + ansiSize)
|
||||
|
||||
// we have to shrink the result to account for our ansi sequence buffer
|
||||
// (if an ansi sequence was truncated) and double width characters.
|
||||
while (stringWidth(truncated) > target) {
|
||||
truncated = truncated.slice(0, -1)
|
||||
}
|
||||
return truncated
|
||||
}
|
Reference in New Issue
Block a user