This commit is contained in:
lalBi94
2023-03-05 13:23:23 +01:00
commit 7bc56c09b5
14034 changed files with 1834369 additions and 0 deletions

18
node_modules/gauge/lib/base-theme.js generated vendored Normal file
View File

@@ -0,0 +1,18 @@
'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/lib/error.js generated vendored Normal file
View 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
}

4
node_modules/gauge/lib/has-color.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
'use strict'
var colorSupport = require('color-support')
module.exports = colorSupport().hasBasic

289
node_modules/gauge/lib/index.js generated vendored Normal file
View File

@@ -0,0 +1,289 @@
'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 (
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()
}))
}
}

50
node_modules/gauge/lib/plumbing.js generated vendored Normal file
View File

@@ -0,0 +1,50 @@
'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/lib/process.js generated vendored Normal file
View File

@@ -0,0 +1,3 @@
'use strict'
// this exists so we can replace it during testing
module.exports = process

41
node_modules/gauge/lib/progress-bar.js generated vendored Normal file
View File

@@ -0,0 +1,41 @@
'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)
}

222
node_modules/gauge/lib/render-template.js generated vendored Normal file
View File

@@ -0,0 +1,222 @@
'use strict'
var align = require('wide-align')
var validate = require('aproba')
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 = Object.assign({}, 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 remainingSpace = width
var variableCount = output.length
function consumeSpace (length) {
if (length > remainingSpace) {
length = remainingSpace
}
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/lib/set-immediate.js generated vendored Normal file
View 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/lib/set-interval.js generated vendored Normal file
View File

@@ -0,0 +1,3 @@
'use strict'
// this exists so we can replace it during testing
module.exports = setInterval

5
node_modules/gauge/lib/spin.js generated vendored Normal file
View File

@@ -0,0 +1,5 @@
'use strict'
module.exports = function spin (spinstr, spun) {
return spinstr[spun % spinstr.length]
}

87
node_modules/gauge/lib/template-item.js generated vendored Normal file
View File

@@ -0,0 +1,87 @@
'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
}

122
node_modules/gauge/lib/theme-set.js generated vendored Normal file
View File

@@ -0,0 +1,122 @@
'use strict'
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 Object.assign({}, 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) {
Object.assign(themes[name], theme)
})
Object.assign(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(Object.assign({}, 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 Object.assign(themeset, ThemeSetProto, {
themes: Object.assign({}, this.themes),
baseTheme: Object.assign({}, this.baseTheme),
defaults: JSON.parse(JSON.stringify(this.defaults || {})),
})
}

56
node_modules/gauge/lib/themes.js generated vendored Normal file
View File

@@ -0,0 +1,56 @@
'use strict'
var color = require('console-control-strings').color
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: color('bgBrightWhite', 'brightWhite'),
complete: '#',
postComplete: color('reset'),
preRemaining: color('bgBrightBlack', 'brightBlack'),
remaining: '.',
postRemaining: color('reset'),
},
})
themes.addTheme('brailleSpinner', {
preProgressbar: '(',
postProgressbar: ')',
progressbarTheme: {
complete: '#',
remaining: '⠂',
},
activityIndicatorTheme: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',
preSubsection: '>',
})
themes.addTheme('colorBrailleSpinner', themes.getTheme('brailleSpinner'), {
progressbarTheme: {
preComplete: color('bgBrightWhite', 'brightWhite'),
complete: '#',
postComplete: color('reset'),
preRemaining: color('bgBrightBlack', 'brightBlack'),
remaining: '⠂',
postRemaining: 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')
themes.setDefault({ platform: 'linux', hasUnicode: true }, 'brailleSpinner')
themes.setDefault({ platform: 'linux', hasUnicode: true, hasColor: true }, 'colorBrailleSpinner')

31
node_modules/gauge/lib/wide-truncate.js generated vendored Normal file
View File

@@ -0,0 +1,31 @@
'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
}