4949 lines
126 KiB
JavaScript
4949 lines
126 KiB
JavaScript
|
exports.id = 395;
|
|||
|
exports.ids = [395];
|
|||
|
exports.modules = {
|
|||
|
|
|||
|
/***/ 14277:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = ({onlyFirst = false} = {}) => {
|
|||
|
const pattern = [
|
|||
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
|||
|
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|||
|
].join('|');
|
|||
|
|
|||
|
return new RegExp(pattern, onlyFirst ? undefined : 'g');
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 23909:
|
|||
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const restoreCursor = __webpack_require__(71354);
|
|||
|
|
|||
|
let isHidden = false;
|
|||
|
|
|||
|
exports.show = (writableStream = process.stderr) => {
|
|||
|
if (!writableStream.isTTY) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
isHidden = false;
|
|||
|
writableStream.write('\u001B[?25h');
|
|||
|
};
|
|||
|
|
|||
|
exports.hide = (writableStream = process.stderr) => {
|
|||
|
if (!writableStream.isTTY) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
restoreCursor();
|
|||
|
isHidden = true;
|
|||
|
writableStream.write('\u001B[?25l');
|
|||
|
};
|
|||
|
|
|||
|
exports.toggle = (force, writableStream) => {
|
|||
|
if (force !== undefined) {
|
|||
|
isHidden = force;
|
|||
|
}
|
|||
|
|
|||
|
if (isHidden) {
|
|||
|
exports.show(writableStream);
|
|||
|
} else {
|
|||
|
exports.hide(writableStream);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 54011:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
const spinners = Object.assign({}, __webpack_require__(26374));
|
|||
|
|
|||
|
const spinnersList = Object.keys(spinners);
|
|||
|
|
|||
|
Object.defineProperty(spinners, 'random', {
|
|||
|
get() {
|
|||
|
const randomIndex = Math.floor(Math.random() * spinnersList.length);
|
|||
|
const spinnerName = spinnersList[randomIndex];
|
|||
|
return spinners[spinnerName];
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
module.exports = spinners;
|
|||
|
// TODO: Remove this for the next major release
|
|||
|
module.exports.default = spinners;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 16313:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
var clone = (function() {
|
|||
|
'use strict';
|
|||
|
|
|||
|
/**
|
|||
|
* Clones (copies) an Object using deep copying.
|
|||
|
*
|
|||
|
* This function supports circular references by default, but if you are certain
|
|||
|
* there are no circular references in your object, you can save some CPU time
|
|||
|
* by calling clone(obj, false).
|
|||
|
*
|
|||
|
* Caution: if `circular` is false and `parent` contains circular references,
|
|||
|
* your program may enter an infinite loop and crash.
|
|||
|
*
|
|||
|
* @param `parent` - the object to be cloned
|
|||
|
* @param `circular` - set to true if the object to be cloned may contain
|
|||
|
* circular references. (optional - true by default)
|
|||
|
* @param `depth` - set to a number if the object is only to be cloned to
|
|||
|
* a particular depth. (optional - defaults to Infinity)
|
|||
|
* @param `prototype` - sets the prototype to be used when cloning an object.
|
|||
|
* (optional - defaults to parent prototype).
|
|||
|
*/
|
|||
|
function clone(parent, circular, depth, prototype) {
|
|||
|
var filter;
|
|||
|
if (typeof circular === 'object') {
|
|||
|
depth = circular.depth;
|
|||
|
prototype = circular.prototype;
|
|||
|
filter = circular.filter;
|
|||
|
circular = circular.circular
|
|||
|
}
|
|||
|
// maintain two arrays for circular references, where corresponding parents
|
|||
|
// and children have the same index
|
|||
|
var allParents = [];
|
|||
|
var allChildren = [];
|
|||
|
|
|||
|
var useBuffer = typeof Buffer != 'undefined';
|
|||
|
|
|||
|
if (typeof circular == 'undefined')
|
|||
|
circular = true;
|
|||
|
|
|||
|
if (typeof depth == 'undefined')
|
|||
|
depth = Infinity;
|
|||
|
|
|||
|
// recurse this function so we don't reset allParents and allChildren
|
|||
|
function _clone(parent, depth) {
|
|||
|
// cloning null always returns null
|
|||
|
if (parent === null)
|
|||
|
return null;
|
|||
|
|
|||
|
if (depth == 0)
|
|||
|
return parent;
|
|||
|
|
|||
|
var child;
|
|||
|
var proto;
|
|||
|
if (typeof parent != 'object') {
|
|||
|
return parent;
|
|||
|
}
|
|||
|
|
|||
|
if (clone.__isArray(parent)) {
|
|||
|
child = [];
|
|||
|
} else if (clone.__isRegExp(parent)) {
|
|||
|
child = new RegExp(parent.source, __getRegExpFlags(parent));
|
|||
|
if (parent.lastIndex) child.lastIndex = parent.lastIndex;
|
|||
|
} else if (clone.__isDate(parent)) {
|
|||
|
child = new Date(parent.getTime());
|
|||
|
} else if (useBuffer && Buffer.isBuffer(parent)) {
|
|||
|
if (Buffer.allocUnsafe) {
|
|||
|
// Node.js >= 4.5.0
|
|||
|
child = Buffer.allocUnsafe(parent.length);
|
|||
|
} else {
|
|||
|
// Older Node.js versions
|
|||
|
child = new Buffer(parent.length);
|
|||
|
}
|
|||
|
parent.copy(child);
|
|||
|
return child;
|
|||
|
} else {
|
|||
|
if (typeof prototype == 'undefined') {
|
|||
|
proto = Object.getPrototypeOf(parent);
|
|||
|
child = Object.create(proto);
|
|||
|
}
|
|||
|
else {
|
|||
|
child = Object.create(prototype);
|
|||
|
proto = prototype;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (circular) {
|
|||
|
var index = allParents.indexOf(parent);
|
|||
|
|
|||
|
if (index != -1) {
|
|||
|
return allChildren[index];
|
|||
|
}
|
|||
|
allParents.push(parent);
|
|||
|
allChildren.push(child);
|
|||
|
}
|
|||
|
|
|||
|
for (var i in parent) {
|
|||
|
var attrs;
|
|||
|
if (proto) {
|
|||
|
attrs = Object.getOwnPropertyDescriptor(proto, i);
|
|||
|
}
|
|||
|
|
|||
|
if (attrs && attrs.set == null) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
child[i] = _clone(parent[i], depth - 1);
|
|||
|
}
|
|||
|
|
|||
|
return child;
|
|||
|
}
|
|||
|
|
|||
|
return _clone(parent, depth);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Simple flat clone using prototype, accepts only objects, usefull for property
|
|||
|
* override on FLAT configuration object (no nested props).
|
|||
|
*
|
|||
|
* USE WITH CAUTION! This may not behave as you wish if you do not know how this
|
|||
|
* works.
|
|||
|
*/
|
|||
|
clone.clonePrototype = function clonePrototype(parent) {
|
|||
|
if (parent === null)
|
|||
|
return null;
|
|||
|
|
|||
|
var c = function () {};
|
|||
|
c.prototype = parent;
|
|||
|
return new c();
|
|||
|
};
|
|||
|
|
|||
|
// private utility functions
|
|||
|
|
|||
|
function __objToStr(o) {
|
|||
|
return Object.prototype.toString.call(o);
|
|||
|
};
|
|||
|
clone.__objToStr = __objToStr;
|
|||
|
|
|||
|
function __isDate(o) {
|
|||
|
return typeof o === 'object' && __objToStr(o) === '[object Date]';
|
|||
|
};
|
|||
|
clone.__isDate = __isDate;
|
|||
|
|
|||
|
function __isArray(o) {
|
|||
|
return typeof o === 'object' && __objToStr(o) === '[object Array]';
|
|||
|
};
|
|||
|
clone.__isArray = __isArray;
|
|||
|
|
|||
|
function __isRegExp(o) {
|
|||
|
return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
|
|||
|
};
|
|||
|
clone.__isRegExp = __isRegExp;
|
|||
|
|
|||
|
function __getRegExpFlags(re) {
|
|||
|
var flags = '';
|
|||
|
if (re.global) flags += 'g';
|
|||
|
if (re.ignoreCase) flags += 'i';
|
|||
|
if (re.multiline) flags += 'm';
|
|||
|
return flags;
|
|||
|
};
|
|||
|
clone.__getRegExpFlags = __getRegExpFlags;
|
|||
|
|
|||
|
return clone;
|
|||
|
})();
|
|||
|
|
|||
|
if ( true && module.exports) {
|
|||
|
module.exports = clone;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 34575:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
var clone = __webpack_require__(16313);
|
|||
|
|
|||
|
module.exports = function(options, defaults) {
|
|||
|
options = options || {};
|
|||
|
|
|||
|
Object.keys(defaults).forEach(function(key) {
|
|||
|
if (typeof options[key] === 'undefined') {
|
|||
|
options[key] = clone(defaults[key]);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
return options;
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 35131:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = ({stream = process.stdout} = {}) => {
|
|||
|
return Boolean(
|
|||
|
stream && stream.isTTY &&
|
|||
|
process.env.TERM !== 'dumb' &&
|
|||
|
!('CI' in process.env)
|
|||
|
);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 4500:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = () => {
|
|||
|
if (process.platform !== 'win32') {
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
return Boolean(process.env.CI) ||
|
|||
|
Boolean(process.env.WT_SESSION) || // Windows Terminal
|
|||
|
process.env.TERM_PROGRAM === 'vscode' ||
|
|||
|
process.env.TERM === 'xterm-256color' ||
|
|||
|
process.env.TERM === 'alacritty';
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 9986:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const chalk = __webpack_require__(39803);
|
|||
|
const isUnicodeSupported = __webpack_require__(4500);
|
|||
|
|
|||
|
const main = {
|
|||
|
info: chalk.blue('ℹ'),
|
|||
|
success: chalk.green('✔'),
|
|||
|
warning: chalk.yellow('⚠'),
|
|||
|
error: chalk.red('✖')
|
|||
|
};
|
|||
|
|
|||
|
const fallback = {
|
|||
|
info: chalk.blue('i'),
|
|||
|
success: chalk.green('√'),
|
|||
|
warning: chalk.yellow('‼'),
|
|||
|
error: chalk.red('×')
|
|||
|
};
|
|||
|
|
|||
|
module.exports = isUnicodeSupported() ? main : fallback;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 26496:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
/* module decorator */ module = __webpack_require__.nmd(module);
|
|||
|
|
|||
|
|
|||
|
const wrapAnsi16 = (fn, offset) => (...args) => {
|
|||
|
const code = fn(...args);
|
|||
|
return `\u001B[${code + offset}m`;
|
|||
|
};
|
|||
|
|
|||
|
const wrapAnsi256 = (fn, offset) => (...args) => {
|
|||
|
const code = fn(...args);
|
|||
|
return `\u001B[${38 + offset};5;${code}m`;
|
|||
|
};
|
|||
|
|
|||
|
const wrapAnsi16m = (fn, offset) => (...args) => {
|
|||
|
const rgb = fn(...args);
|
|||
|
return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
|
|||
|
};
|
|||
|
|
|||
|
const ansi2ansi = n => n;
|
|||
|
const rgb2rgb = (r, g, b) => [r, g, b];
|
|||
|
|
|||
|
const setLazyProperty = (object, property, get) => {
|
|||
|
Object.defineProperty(object, property, {
|
|||
|
get: () => {
|
|||
|
const value = get();
|
|||
|
|
|||
|
Object.defineProperty(object, property, {
|
|||
|
value,
|
|||
|
enumerable: true,
|
|||
|
configurable: true
|
|||
|
});
|
|||
|
|
|||
|
return value;
|
|||
|
},
|
|||
|
enumerable: true,
|
|||
|
configurable: true
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
/** @type {typeof import('color-convert')} */
|
|||
|
let colorConvert;
|
|||
|
const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
|
|||
|
if (colorConvert === undefined) {
|
|||
|
colorConvert = __webpack_require__(36354);
|
|||
|
}
|
|||
|
|
|||
|
const offset = isBackground ? 10 : 0;
|
|||
|
const styles = {};
|
|||
|
|
|||
|
for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
|
|||
|
const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
|
|||
|
if (sourceSpace === targetSpace) {
|
|||
|
styles[name] = wrap(identity, offset);
|
|||
|
} else if (typeof suite === 'object') {
|
|||
|
styles[name] = wrap(suite[targetSpace], offset);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return styles;
|
|||
|
};
|
|||
|
|
|||
|
function assembleStyles() {
|
|||
|
const codes = new Map();
|
|||
|
const styles = {
|
|||
|
modifier: {
|
|||
|
reset: [0, 0],
|
|||
|
// 21 isn't widely supported and 22 does the same thing
|
|||
|
bold: [1, 22],
|
|||
|
dim: [2, 22],
|
|||
|
italic: [3, 23],
|
|||
|
underline: [4, 24],
|
|||
|
inverse: [7, 27],
|
|||
|
hidden: [8, 28],
|
|||
|
strikethrough: [9, 29]
|
|||
|
},
|
|||
|
color: {
|
|||
|
black: [30, 39],
|
|||
|
red: [31, 39],
|
|||
|
green: [32, 39],
|
|||
|
yellow: [33, 39],
|
|||
|
blue: [34, 39],
|
|||
|
magenta: [35, 39],
|
|||
|
cyan: [36, 39],
|
|||
|
white: [37, 39],
|
|||
|
|
|||
|
// Bright color
|
|||
|
blackBright: [90, 39],
|
|||
|
redBright: [91, 39],
|
|||
|
greenBright: [92, 39],
|
|||
|
yellowBright: [93, 39],
|
|||
|
blueBright: [94, 39],
|
|||
|
magentaBright: [95, 39],
|
|||
|
cyanBright: [96, 39],
|
|||
|
whiteBright: [97, 39]
|
|||
|
},
|
|||
|
bgColor: {
|
|||
|
bgBlack: [40, 49],
|
|||
|
bgRed: [41, 49],
|
|||
|
bgGreen: [42, 49],
|
|||
|
bgYellow: [43, 49],
|
|||
|
bgBlue: [44, 49],
|
|||
|
bgMagenta: [45, 49],
|
|||
|
bgCyan: [46, 49],
|
|||
|
bgWhite: [47, 49],
|
|||
|
|
|||
|
// Bright color
|
|||
|
bgBlackBright: [100, 49],
|
|||
|
bgRedBright: [101, 49],
|
|||
|
bgGreenBright: [102, 49],
|
|||
|
bgYellowBright: [103, 49],
|
|||
|
bgBlueBright: [104, 49],
|
|||
|
bgMagentaBright: [105, 49],
|
|||
|
bgCyanBright: [106, 49],
|
|||
|
bgWhiteBright: [107, 49]
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
// Alias bright black as gray (and grey)
|
|||
|
styles.color.gray = styles.color.blackBright;
|
|||
|
styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
|
|||
|
styles.color.grey = styles.color.blackBright;
|
|||
|
styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
|
|||
|
|
|||
|
for (const [groupName, group] of Object.entries(styles)) {
|
|||
|
for (const [styleName, style] of Object.entries(group)) {
|
|||
|
styles[styleName] = {
|
|||
|
open: `\u001B[${style[0]}m`,
|
|||
|
close: `\u001B[${style[1]}m`
|
|||
|
};
|
|||
|
|
|||
|
group[styleName] = styles[styleName];
|
|||
|
|
|||
|
codes.set(style[0], style[1]);
|
|||
|
}
|
|||
|
|
|||
|
Object.defineProperty(styles, groupName, {
|
|||
|
value: group,
|
|||
|
enumerable: false
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
Object.defineProperty(styles, 'codes', {
|
|||
|
value: codes,
|
|||
|
enumerable: false
|
|||
|
});
|
|||
|
|
|||
|
styles.color.close = '\u001B[39m';
|
|||
|
styles.bgColor.close = '\u001B[49m';
|
|||
|
|
|||
|
setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
|
|||
|
setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
|
|||
|
setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
|
|||
|
|
|||
|
return styles;
|
|||
|
}
|
|||
|
|
|||
|
// Make the export immutable
|
|||
|
Object.defineProperty(module, 'exports', {
|
|||
|
enumerable: true,
|
|||
|
get: assembleStyles
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 39803:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const ansiStyles = __webpack_require__(26496);
|
|||
|
const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(505);
|
|||
|
const {
|
|||
|
stringReplaceAll,
|
|||
|
stringEncaseCRLFWithFirstIndex
|
|||
|
} = __webpack_require__(59867);
|
|||
|
|
|||
|
const {isArray} = Array;
|
|||
|
|
|||
|
// `supportsColor.level` → `ansiStyles.color[name]` mapping
|
|||
|
const levelMapping = [
|
|||
|
'ansi',
|
|||
|
'ansi',
|
|||
|
'ansi256',
|
|||
|
'ansi16m'
|
|||
|
];
|
|||
|
|
|||
|
const styles = Object.create(null);
|
|||
|
|
|||
|
const applyOptions = (object, options = {}) => {
|
|||
|
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
|||
|
throw new Error('The `level` option should be an integer from 0 to 3');
|
|||
|
}
|
|||
|
|
|||
|
// Detect level if not set manually
|
|||
|
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
|||
|
object.level = options.level === undefined ? colorLevel : options.level;
|
|||
|
};
|
|||
|
|
|||
|
class ChalkClass {
|
|||
|
constructor(options) {
|
|||
|
// eslint-disable-next-line no-constructor-return
|
|||
|
return chalkFactory(options);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
const chalkFactory = options => {
|
|||
|
const chalk = {};
|
|||
|
applyOptions(chalk, options);
|
|||
|
|
|||
|
chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
|
|||
|
|
|||
|
Object.setPrototypeOf(chalk, Chalk.prototype);
|
|||
|
Object.setPrototypeOf(chalk.template, chalk);
|
|||
|
|
|||
|
chalk.template.constructor = () => {
|
|||
|
throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
|
|||
|
};
|
|||
|
|
|||
|
chalk.template.Instance = ChalkClass;
|
|||
|
|
|||
|
return chalk.template;
|
|||
|
};
|
|||
|
|
|||
|
function Chalk(options) {
|
|||
|
return chalkFactory(options);
|
|||
|
}
|
|||
|
|
|||
|
for (const [styleName, style] of Object.entries(ansiStyles)) {
|
|||
|
styles[styleName] = {
|
|||
|
get() {
|
|||
|
const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
|
|||
|
Object.defineProperty(this, styleName, {value: builder});
|
|||
|
return builder;
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
styles.visible = {
|
|||
|
get() {
|
|||
|
const builder = createBuilder(this, this._styler, true);
|
|||
|
Object.defineProperty(this, 'visible', {value: builder});
|
|||
|
return builder;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
|
|||
|
|
|||
|
for (const model of usedModels) {
|
|||
|
styles[model] = {
|
|||
|
get() {
|
|||
|
const {level} = this;
|
|||
|
return function (...arguments_) {
|
|||
|
const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
|
|||
|
return createBuilder(this, styler, this._isEmpty);
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
for (const model of usedModels) {
|
|||
|
const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
|
|||
|
styles[bgModel] = {
|
|||
|
get() {
|
|||
|
const {level} = this;
|
|||
|
return function (...arguments_) {
|
|||
|
const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
|
|||
|
return createBuilder(this, styler, this._isEmpty);
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
const proto = Object.defineProperties(() => {}, {
|
|||
|
...styles,
|
|||
|
level: {
|
|||
|
enumerable: true,
|
|||
|
get() {
|
|||
|
return this._generator.level;
|
|||
|
},
|
|||
|
set(level) {
|
|||
|
this._generator.level = level;
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
const createStyler = (open, close, parent) => {
|
|||
|
let openAll;
|
|||
|
let closeAll;
|
|||
|
if (parent === undefined) {
|
|||
|
openAll = open;
|
|||
|
closeAll = close;
|
|||
|
} else {
|
|||
|
openAll = parent.openAll + open;
|
|||
|
closeAll = close + parent.closeAll;
|
|||
|
}
|
|||
|
|
|||
|
return {
|
|||
|
open,
|
|||
|
close,
|
|||
|
openAll,
|
|||
|
closeAll,
|
|||
|
parent
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
const createBuilder = (self, _styler, _isEmpty) => {
|
|||
|
const builder = (...arguments_) => {
|
|||
|
if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
|
|||
|
// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
|
|||
|
return applyStyle(builder, chalkTag(builder, ...arguments_));
|
|||
|
}
|
|||
|
|
|||
|
// Single argument is hot path, implicit coercion is faster than anything
|
|||
|
// eslint-disable-next-line no-implicit-coercion
|
|||
|
return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
|
|||
|
};
|
|||
|
|
|||
|
// We alter the prototype because we must return a function, but there is
|
|||
|
// no way to create a function with a different prototype
|
|||
|
Object.setPrototypeOf(builder, proto);
|
|||
|
|
|||
|
builder._generator = self;
|
|||
|
builder._styler = _styler;
|
|||
|
builder._isEmpty = _isEmpty;
|
|||
|
|
|||
|
return builder;
|
|||
|
};
|
|||
|
|
|||
|
const applyStyle = (self, string) => {
|
|||
|
if (self.level <= 0 || !string) {
|
|||
|
return self._isEmpty ? '' : string;
|
|||
|
}
|
|||
|
|
|||
|
let styler = self._styler;
|
|||
|
|
|||
|
if (styler === undefined) {
|
|||
|
return string;
|
|||
|
}
|
|||
|
|
|||
|
const {openAll, closeAll} = styler;
|
|||
|
if (string.indexOf('\u001B') !== -1) {
|
|||
|
while (styler !== undefined) {
|
|||
|
// Replace any instances already present with a re-opening code
|
|||
|
// otherwise only the part of the string until said closing code
|
|||
|
// will be colored, and the rest will simply be 'plain'.
|
|||
|
string = stringReplaceAll(string, styler.close, styler.open);
|
|||
|
|
|||
|
styler = styler.parent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// We can move both next actions out of loop, because remaining actions in loop won't have
|
|||
|
// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
|
|||
|
// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
|
|||
|
const lfIndex = string.indexOf('\n');
|
|||
|
if (lfIndex !== -1) {
|
|||
|
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
|||
|
}
|
|||
|
|
|||
|
return openAll + string + closeAll;
|
|||
|
};
|
|||
|
|
|||
|
let template;
|
|||
|
const chalkTag = (chalk, ...strings) => {
|
|||
|
const [firstString] = strings;
|
|||
|
|
|||
|
if (!isArray(firstString) || !isArray(firstString.raw)) {
|
|||
|
// If chalk() was called by itself or with a string,
|
|||
|
// return the string itself as a string.
|
|||
|
return strings.join(' ');
|
|||
|
}
|
|||
|
|
|||
|
const arguments_ = strings.slice(1);
|
|||
|
const parts = [firstString.raw[0]];
|
|||
|
|
|||
|
for (let i = 1; i < firstString.length; i++) {
|
|||
|
parts.push(
|
|||
|
String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
|
|||
|
String(firstString.raw[i])
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
if (template === undefined) {
|
|||
|
template = __webpack_require__(87568);
|
|||
|
}
|
|||
|
|
|||
|
return template(chalk, parts.join(''));
|
|||
|
};
|
|||
|
|
|||
|
Object.defineProperties(Chalk.prototype, styles);
|
|||
|
|
|||
|
const chalk = Chalk(); // eslint-disable-line new-cap
|
|||
|
chalk.supportsColor = stdoutColor;
|
|||
|
chalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
|
|||
|
chalk.stderr.supportsColor = stderrColor;
|
|||
|
|
|||
|
module.exports = chalk;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 87568:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
|
|||
|
const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
|
|||
|
const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
|
|||
|
const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
|
|||
|
|
|||
|
const ESCAPES = new Map([
|
|||
|
['n', '\n'],
|
|||
|
['r', '\r'],
|
|||
|
['t', '\t'],
|
|||
|
['b', '\b'],
|
|||
|
['f', '\f'],
|
|||
|
['v', '\v'],
|
|||
|
['0', '\0'],
|
|||
|
['\\', '\\'],
|
|||
|
['e', '\u001B'],
|
|||
|
['a', '\u0007']
|
|||
|
]);
|
|||
|
|
|||
|
function unescape(c) {
|
|||
|
const u = c[0] === 'u';
|
|||
|
const bracket = c[1] === '{';
|
|||
|
|
|||
|
if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
|
|||
|
return String.fromCharCode(parseInt(c.slice(1), 16));
|
|||
|
}
|
|||
|
|
|||
|
if (u && bracket) {
|
|||
|
return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
|
|||
|
}
|
|||
|
|
|||
|
return ESCAPES.get(c) || c;
|
|||
|
}
|
|||
|
|
|||
|
function parseArguments(name, arguments_) {
|
|||
|
const results = [];
|
|||
|
const chunks = arguments_.trim().split(/\s*,\s*/g);
|
|||
|
let matches;
|
|||
|
|
|||
|
for (const chunk of chunks) {
|
|||
|
const number = Number(chunk);
|
|||
|
if (!Number.isNaN(number)) {
|
|||
|
results.push(number);
|
|||
|
} else if ((matches = chunk.match(STRING_REGEX))) {
|
|||
|
results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
|
|||
|
} else {
|
|||
|
throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return results;
|
|||
|
}
|
|||
|
|
|||
|
function parseStyle(style) {
|
|||
|
STYLE_REGEX.lastIndex = 0;
|
|||
|
|
|||
|
const results = [];
|
|||
|
let matches;
|
|||
|
|
|||
|
while ((matches = STYLE_REGEX.exec(style)) !== null) {
|
|||
|
const name = matches[1];
|
|||
|
|
|||
|
if (matches[2]) {
|
|||
|
const args = parseArguments(name, matches[2]);
|
|||
|
results.push([name].concat(args));
|
|||
|
} else {
|
|||
|
results.push([name]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return results;
|
|||
|
}
|
|||
|
|
|||
|
function buildStyle(chalk, styles) {
|
|||
|
const enabled = {};
|
|||
|
|
|||
|
for (const layer of styles) {
|
|||
|
for (const style of layer.styles) {
|
|||
|
enabled[style[0]] = layer.inverse ? null : style.slice(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
let current = chalk;
|
|||
|
for (const [styleName, styles] of Object.entries(enabled)) {
|
|||
|
if (!Array.isArray(styles)) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if (!(styleName in current)) {
|
|||
|
throw new Error(`Unknown Chalk style: ${styleName}`);
|
|||
|
}
|
|||
|
|
|||
|
current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
|
|||
|
}
|
|||
|
|
|||
|
return current;
|
|||
|
}
|
|||
|
|
|||
|
module.exports = (chalk, temporary) => {
|
|||
|
const styles = [];
|
|||
|
const chunks = [];
|
|||
|
let chunk = [];
|
|||
|
|
|||
|
// eslint-disable-next-line max-params
|
|||
|
temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
|
|||
|
if (escapeCharacter) {
|
|||
|
chunk.push(unescape(escapeCharacter));
|
|||
|
} else if (style) {
|
|||
|
const string = chunk.join('');
|
|||
|
chunk = [];
|
|||
|
chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));
|
|||
|
styles.push({inverse, styles: parseStyle(style)});
|
|||
|
} else if (close) {
|
|||
|
if (styles.length === 0) {
|
|||
|
throw new Error('Found extraneous } in Chalk template literal');
|
|||
|
}
|
|||
|
|
|||
|
chunks.push(buildStyle(chalk, styles)(chunk.join('')));
|
|||
|
chunk = [];
|
|||
|
styles.pop();
|
|||
|
} else {
|
|||
|
chunk.push(character);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
chunks.push(chunk.join(''));
|
|||
|
|
|||
|
if (styles.length > 0) {
|
|||
|
const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
|
|||
|
throw new Error(errMessage);
|
|||
|
}
|
|||
|
|
|||
|
return chunks.join('');
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 59867:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
const stringReplaceAll = (string, substring, replacer) => {
|
|||
|
let index = string.indexOf(substring);
|
|||
|
if (index === -1) {
|
|||
|
return string;
|
|||
|
}
|
|||
|
|
|||
|
const substringLength = substring.length;
|
|||
|
let endIndex = 0;
|
|||
|
let returnValue = '';
|
|||
|
do {
|
|||
|
returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
|
|||
|
endIndex = index + substringLength;
|
|||
|
index = string.indexOf(substring, endIndex);
|
|||
|
} while (index !== -1);
|
|||
|
|
|||
|
returnValue += string.substr(endIndex);
|
|||
|
return returnValue;
|
|||
|
};
|
|||
|
|
|||
|
const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
|
|||
|
let endIndex = 0;
|
|||
|
let returnValue = '';
|
|||
|
do {
|
|||
|
const gotCR = string[index - 1] === '\r';
|
|||
|
returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
|
|||
|
endIndex = index + 1;
|
|||
|
index = string.indexOf('\n', endIndex);
|
|||
|
} while (index !== -1);
|
|||
|
|
|||
|
returnValue += string.substr(endIndex);
|
|||
|
return returnValue;
|
|||
|
};
|
|||
|
|
|||
|
module.exports = {
|
|||
|
stringReplaceAll,
|
|||
|
stringEncaseCRLFWithFirstIndex
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 22204:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
/* MIT license */
|
|||
|
/* eslint-disable no-mixed-operators */
|
|||
|
const cssKeywords = __webpack_require__(30668);
|
|||
|
|
|||
|
// NOTE: conversions should only return primitive values (i.e. arrays, or
|
|||
|
// values that give correct `typeof` results).
|
|||
|
// do not use box values types (i.e. Number(), String(), etc.)
|
|||
|
|
|||
|
const reverseKeywords = {};
|
|||
|
for (const key of Object.keys(cssKeywords)) {
|
|||
|
reverseKeywords[cssKeywords[key]] = key;
|
|||
|
}
|
|||
|
|
|||
|
const convert = {
|
|||
|
rgb: {channels: 3, labels: 'rgb'},
|
|||
|
hsl: {channels: 3, labels: 'hsl'},
|
|||
|
hsv: {channels: 3, labels: 'hsv'},
|
|||
|
hwb: {channels: 3, labels: 'hwb'},
|
|||
|
cmyk: {channels: 4, labels: 'cmyk'},
|
|||
|
xyz: {channels: 3, labels: 'xyz'},
|
|||
|
lab: {channels: 3, labels: 'lab'},
|
|||
|
lch: {channels: 3, labels: 'lch'},
|
|||
|
hex: {channels: 1, labels: ['hex']},
|
|||
|
keyword: {channels: 1, labels: ['keyword']},
|
|||
|
ansi16: {channels: 1, labels: ['ansi16']},
|
|||
|
ansi256: {channels: 1, labels: ['ansi256']},
|
|||
|
hcg: {channels: 3, labels: ['h', 'c', 'g']},
|
|||
|
apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
|
|||
|
gray: {channels: 1, labels: ['gray']}
|
|||
|
};
|
|||
|
|
|||
|
module.exports = convert;
|
|||
|
|
|||
|
// Hide .channels and .labels properties
|
|||
|
for (const model of Object.keys(convert)) {
|
|||
|
if (!('channels' in convert[model])) {
|
|||
|
throw new Error('missing channels property: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
if (!('labels' in convert[model])) {
|
|||
|
throw new Error('missing channel labels property: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
if (convert[model].labels.length !== convert[model].channels) {
|
|||
|
throw new Error('channel and label counts mismatch: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
const {channels, labels} = convert[model];
|
|||
|
delete convert[model].channels;
|
|||
|
delete convert[model].labels;
|
|||
|
Object.defineProperty(convert[model], 'channels', {value: channels});
|
|||
|
Object.defineProperty(convert[model], 'labels', {value: labels});
|
|||
|
}
|
|||
|
|
|||
|
convert.rgb.hsl = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const min = Math.min(r, g, b);
|
|||
|
const max = Math.max(r, g, b);
|
|||
|
const delta = max - min;
|
|||
|
let h;
|
|||
|
let s;
|
|||
|
|
|||
|
if (max === min) {
|
|||
|
h = 0;
|
|||
|
} else if (r === max) {
|
|||
|
h = (g - b) / delta;
|
|||
|
} else if (g === max) {
|
|||
|
h = 2 + (b - r) / delta;
|
|||
|
} else if (b === max) {
|
|||
|
h = 4 + (r - g) / delta;
|
|||
|
}
|
|||
|
|
|||
|
h = Math.min(h * 60, 360);
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 360;
|
|||
|
}
|
|||
|
|
|||
|
const l = (min + max) / 2;
|
|||
|
|
|||
|
if (max === min) {
|
|||
|
s = 0;
|
|||
|
} else if (l <= 0.5) {
|
|||
|
s = delta / (max + min);
|
|||
|
} else {
|
|||
|
s = delta / (2 - max - min);
|
|||
|
}
|
|||
|
|
|||
|
return [h, s * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hsv = function (rgb) {
|
|||
|
let rdif;
|
|||
|
let gdif;
|
|||
|
let bdif;
|
|||
|
let h;
|
|||
|
let s;
|
|||
|
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const v = Math.max(r, g, b);
|
|||
|
const diff = v - Math.min(r, g, b);
|
|||
|
const diffc = function (c) {
|
|||
|
return (v - c) / 6 / diff + 1 / 2;
|
|||
|
};
|
|||
|
|
|||
|
if (diff === 0) {
|
|||
|
h = 0;
|
|||
|
s = 0;
|
|||
|
} else {
|
|||
|
s = diff / v;
|
|||
|
rdif = diffc(r);
|
|||
|
gdif = diffc(g);
|
|||
|
bdif = diffc(b);
|
|||
|
|
|||
|
if (r === v) {
|
|||
|
h = bdif - gdif;
|
|||
|
} else if (g === v) {
|
|||
|
h = (1 / 3) + rdif - bdif;
|
|||
|
} else if (b === v) {
|
|||
|
h = (2 / 3) + gdif - rdif;
|
|||
|
}
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 1;
|
|||
|
} else if (h > 1) {
|
|||
|
h -= 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return [
|
|||
|
h * 360,
|
|||
|
s * 100,
|
|||
|
v * 100
|
|||
|
];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hwb = function (rgb) {
|
|||
|
const r = rgb[0];
|
|||
|
const g = rgb[1];
|
|||
|
let b = rgb[2];
|
|||
|
const h = convert.rgb.hsl(rgb)[0];
|
|||
|
const w = 1 / 255 * Math.min(r, Math.min(g, b));
|
|||
|
|
|||
|
b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
|
|||
|
|
|||
|
return [h, w * 100, b * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.cmyk = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
|
|||
|
const k = Math.min(1 - r, 1 - g, 1 - b);
|
|||
|
const c = (1 - r - k) / (1 - k) || 0;
|
|||
|
const m = (1 - g - k) / (1 - k) || 0;
|
|||
|
const y = (1 - b - k) / (1 - k) || 0;
|
|||
|
|
|||
|
return [c * 100, m * 100, y * 100, k * 100];
|
|||
|
};
|
|||
|
|
|||
|
function comparativeDistance(x, y) {
|
|||
|
/*
|
|||
|
See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
|
|||
|
*/
|
|||
|
return (
|
|||
|
((x[0] - y[0]) ** 2) +
|
|||
|
((x[1] - y[1]) ** 2) +
|
|||
|
((x[2] - y[2]) ** 2)
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
convert.rgb.keyword = function (rgb) {
|
|||
|
const reversed = reverseKeywords[rgb];
|
|||
|
if (reversed) {
|
|||
|
return reversed;
|
|||
|
}
|
|||
|
|
|||
|
let currentClosestDistance = Infinity;
|
|||
|
let currentClosestKeyword;
|
|||
|
|
|||
|
for (const keyword of Object.keys(cssKeywords)) {
|
|||
|
const value = cssKeywords[keyword];
|
|||
|
|
|||
|
// Compute comparative distance
|
|||
|
const distance = comparativeDistance(rgb, value);
|
|||
|
|
|||
|
// Check if its less, if so set as closest
|
|||
|
if (distance < currentClosestDistance) {
|
|||
|
currentClosestDistance = distance;
|
|||
|
currentClosestKeyword = keyword;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return currentClosestKeyword;
|
|||
|
};
|
|||
|
|
|||
|
convert.keyword.rgb = function (keyword) {
|
|||
|
return cssKeywords[keyword];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.xyz = function (rgb) {
|
|||
|
let r = rgb[0] / 255;
|
|||
|
let g = rgb[1] / 255;
|
|||
|
let b = rgb[2] / 255;
|
|||
|
|
|||
|
// Assume sRGB
|
|||
|
r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
|
|||
|
g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
|
|||
|
b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
|
|||
|
|
|||
|
const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
|
|||
|
const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
|
|||
|
const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
|
|||
|
|
|||
|
return [x * 100, y * 100, z * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.lab = function (rgb) {
|
|||
|
const xyz = convert.rgb.xyz(rgb);
|
|||
|
let x = xyz[0];
|
|||
|
let y = xyz[1];
|
|||
|
let z = xyz[2];
|
|||
|
|
|||
|
x /= 95.047;
|
|||
|
y /= 100;
|
|||
|
z /= 108.883;
|
|||
|
|
|||
|
x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
|
|||
|
y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
|
|||
|
z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
|
|||
|
|
|||
|
const l = (116 * y) - 16;
|
|||
|
const a = 500 * (x - y);
|
|||
|
const b = 200 * (y - z);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.rgb = function (hsl) {
|
|||
|
const h = hsl[0] / 360;
|
|||
|
const s = hsl[1] / 100;
|
|||
|
const l = hsl[2] / 100;
|
|||
|
let t2;
|
|||
|
let t3;
|
|||
|
let val;
|
|||
|
|
|||
|
if (s === 0) {
|
|||
|
val = l * 255;
|
|||
|
return [val, val, val];
|
|||
|
}
|
|||
|
|
|||
|
if (l < 0.5) {
|
|||
|
t2 = l * (1 + s);
|
|||
|
} else {
|
|||
|
t2 = l + s - l * s;
|
|||
|
}
|
|||
|
|
|||
|
const t1 = 2 * l - t2;
|
|||
|
|
|||
|
const rgb = [0, 0, 0];
|
|||
|
for (let i = 0; i < 3; i++) {
|
|||
|
t3 = h + 1 / 3 * -(i - 1);
|
|||
|
if (t3 < 0) {
|
|||
|
t3++;
|
|||
|
}
|
|||
|
|
|||
|
if (t3 > 1) {
|
|||
|
t3--;
|
|||
|
}
|
|||
|
|
|||
|
if (6 * t3 < 1) {
|
|||
|
val = t1 + (t2 - t1) * 6 * t3;
|
|||
|
} else if (2 * t3 < 1) {
|
|||
|
val = t2;
|
|||
|
} else if (3 * t3 < 2) {
|
|||
|
val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
|
|||
|
} else {
|
|||
|
val = t1;
|
|||
|
}
|
|||
|
|
|||
|
rgb[i] = val * 255;
|
|||
|
}
|
|||
|
|
|||
|
return rgb;
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.hsv = function (hsl) {
|
|||
|
const h = hsl[0];
|
|||
|
let s = hsl[1] / 100;
|
|||
|
let l = hsl[2] / 100;
|
|||
|
let smin = s;
|
|||
|
const lmin = Math.max(l, 0.01);
|
|||
|
|
|||
|
l *= 2;
|
|||
|
s *= (l <= 1) ? l : 2 - l;
|
|||
|
smin *= lmin <= 1 ? lmin : 2 - lmin;
|
|||
|
const v = (l + s) / 2;
|
|||
|
const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
|
|||
|
|
|||
|
return [h, sv * 100, v * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.rgb = function (hsv) {
|
|||
|
const h = hsv[0] / 60;
|
|||
|
const s = hsv[1] / 100;
|
|||
|
let v = hsv[2] / 100;
|
|||
|
const hi = Math.floor(h) % 6;
|
|||
|
|
|||
|
const f = h - Math.floor(h);
|
|||
|
const p = 255 * v * (1 - s);
|
|||
|
const q = 255 * v * (1 - (s * f));
|
|||
|
const t = 255 * v * (1 - (s * (1 - f)));
|
|||
|
v *= 255;
|
|||
|
|
|||
|
switch (hi) {
|
|||
|
case 0:
|
|||
|
return [v, t, p];
|
|||
|
case 1:
|
|||
|
return [q, v, p];
|
|||
|
case 2:
|
|||
|
return [p, v, t];
|
|||
|
case 3:
|
|||
|
return [p, q, v];
|
|||
|
case 4:
|
|||
|
return [t, p, v];
|
|||
|
case 5:
|
|||
|
return [v, p, q];
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.hsl = function (hsv) {
|
|||
|
const h = hsv[0];
|
|||
|
const s = hsv[1] / 100;
|
|||
|
const v = hsv[2] / 100;
|
|||
|
const vmin = Math.max(v, 0.01);
|
|||
|
let sl;
|
|||
|
let l;
|
|||
|
|
|||
|
l = (2 - s) * v;
|
|||
|
const lmin = (2 - s) * vmin;
|
|||
|
sl = s * vmin;
|
|||
|
sl /= (lmin <= 1) ? lmin : 2 - lmin;
|
|||
|
sl = sl || 0;
|
|||
|
l /= 2;
|
|||
|
|
|||
|
return [h, sl * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
|
|||
|
convert.hwb.rgb = function (hwb) {
|
|||
|
const h = hwb[0] / 360;
|
|||
|
let wh = hwb[1] / 100;
|
|||
|
let bl = hwb[2] / 100;
|
|||
|
const ratio = wh + bl;
|
|||
|
let f;
|
|||
|
|
|||
|
// Wh + bl cant be > 1
|
|||
|
if (ratio > 1) {
|
|||
|
wh /= ratio;
|
|||
|
bl /= ratio;
|
|||
|
}
|
|||
|
|
|||
|
const i = Math.floor(6 * h);
|
|||
|
const v = 1 - bl;
|
|||
|
f = 6 * h - i;
|
|||
|
|
|||
|
if ((i & 0x01) !== 0) {
|
|||
|
f = 1 - f;
|
|||
|
}
|
|||
|
|
|||
|
const n = wh + f * (v - wh); // Linear interpolation
|
|||
|
|
|||
|
let r;
|
|||
|
let g;
|
|||
|
let b;
|
|||
|
/* eslint-disable max-statements-per-line,no-multi-spaces */
|
|||
|
switch (i) {
|
|||
|
default:
|
|||
|
case 6:
|
|||
|
case 0: r = v; g = n; b = wh; break;
|
|||
|
case 1: r = n; g = v; b = wh; break;
|
|||
|
case 2: r = wh; g = v; b = n; break;
|
|||
|
case 3: r = wh; g = n; b = v; break;
|
|||
|
case 4: r = n; g = wh; b = v; break;
|
|||
|
case 5: r = v; g = wh; b = n; break;
|
|||
|
}
|
|||
|
/* eslint-enable max-statements-per-line,no-multi-spaces */
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.cmyk.rgb = function (cmyk) {
|
|||
|
const c = cmyk[0] / 100;
|
|||
|
const m = cmyk[1] / 100;
|
|||
|
const y = cmyk[2] / 100;
|
|||
|
const k = cmyk[3] / 100;
|
|||
|
|
|||
|
const r = 1 - Math.min(1, c * (1 - k) + k);
|
|||
|
const g = 1 - Math.min(1, m * (1 - k) + k);
|
|||
|
const b = 1 - Math.min(1, y * (1 - k) + k);
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.xyz.rgb = function (xyz) {
|
|||
|
const x = xyz[0] / 100;
|
|||
|
const y = xyz[1] / 100;
|
|||
|
const z = xyz[2] / 100;
|
|||
|
let r;
|
|||
|
let g;
|
|||
|
let b;
|
|||
|
|
|||
|
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
|
|||
|
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
|
|||
|
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
|
|||
|
|
|||
|
// Assume sRGB
|
|||
|
r = r > 0.0031308
|
|||
|
? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
|
|||
|
: r * 12.92;
|
|||
|
|
|||
|
g = g > 0.0031308
|
|||
|
? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
|
|||
|
: g * 12.92;
|
|||
|
|
|||
|
b = b > 0.0031308
|
|||
|
? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
|
|||
|
: b * 12.92;
|
|||
|
|
|||
|
r = Math.min(Math.max(0, r), 1);
|
|||
|
g = Math.min(Math.max(0, g), 1);
|
|||
|
b = Math.min(Math.max(0, b), 1);
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.xyz.lab = function (xyz) {
|
|||
|
let x = xyz[0];
|
|||
|
let y = xyz[1];
|
|||
|
let z = xyz[2];
|
|||
|
|
|||
|
x /= 95.047;
|
|||
|
y /= 100;
|
|||
|
z /= 108.883;
|
|||
|
|
|||
|
x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
|
|||
|
y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
|
|||
|
z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
|
|||
|
|
|||
|
const l = (116 * y) - 16;
|
|||
|
const a = 500 * (x - y);
|
|||
|
const b = 200 * (y - z);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.lab.xyz = function (lab) {
|
|||
|
const l = lab[0];
|
|||
|
const a = lab[1];
|
|||
|
const b = lab[2];
|
|||
|
let x;
|
|||
|
let y;
|
|||
|
let z;
|
|||
|
|
|||
|
y = (l + 16) / 116;
|
|||
|
x = a / 500 + y;
|
|||
|
z = y - b / 200;
|
|||
|
|
|||
|
const y2 = y ** 3;
|
|||
|
const x2 = x ** 3;
|
|||
|
const z2 = z ** 3;
|
|||
|
y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
|
|||
|
x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
|
|||
|
z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
|
|||
|
|
|||
|
x *= 95.047;
|
|||
|
y *= 100;
|
|||
|
z *= 108.883;
|
|||
|
|
|||
|
return [x, y, z];
|
|||
|
};
|
|||
|
|
|||
|
convert.lab.lch = function (lab) {
|
|||
|
const l = lab[0];
|
|||
|
const a = lab[1];
|
|||
|
const b = lab[2];
|
|||
|
let h;
|
|||
|
|
|||
|
const hr = Math.atan2(b, a);
|
|||
|
h = hr * 360 / 2 / Math.PI;
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 360;
|
|||
|
}
|
|||
|
|
|||
|
const c = Math.sqrt(a * a + b * b);
|
|||
|
|
|||
|
return [l, c, h];
|
|||
|
};
|
|||
|
|
|||
|
convert.lch.lab = function (lch) {
|
|||
|
const l = lch[0];
|
|||
|
const c = lch[1];
|
|||
|
const h = lch[2];
|
|||
|
|
|||
|
const hr = h / 360 * 2 * Math.PI;
|
|||
|
const a = c * Math.cos(hr);
|
|||
|
const b = c * Math.sin(hr);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.ansi16 = function (args, saturation = null) {
|
|||
|
const [r, g, b] = args;
|
|||
|
let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
|
|||
|
|
|||
|
value = Math.round(value / 50);
|
|||
|
|
|||
|
if (value === 0) {
|
|||
|
return 30;
|
|||
|
}
|
|||
|
|
|||
|
let ansi = 30
|
|||
|
+ ((Math.round(b / 255) << 2)
|
|||
|
| (Math.round(g / 255) << 1)
|
|||
|
| Math.round(r / 255));
|
|||
|
|
|||
|
if (value === 2) {
|
|||
|
ansi += 60;
|
|||
|
}
|
|||
|
|
|||
|
return ansi;
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.ansi16 = function (args) {
|
|||
|
// Optimization here; we already know the value and don't need to get
|
|||
|
// it converted for us.
|
|||
|
return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.ansi256 = function (args) {
|
|||
|
const r = args[0];
|
|||
|
const g = args[1];
|
|||
|
const b = args[2];
|
|||
|
|
|||
|
// We use the extended greyscale palette here, with the exception of
|
|||
|
// black and white. normal palette only has 4 greyscale shades.
|
|||
|
if (r === g && g === b) {
|
|||
|
if (r < 8) {
|
|||
|
return 16;
|
|||
|
}
|
|||
|
|
|||
|
if (r > 248) {
|
|||
|
return 231;
|
|||
|
}
|
|||
|
|
|||
|
return Math.round(((r - 8) / 247) * 24) + 232;
|
|||
|
}
|
|||
|
|
|||
|
const ansi = 16
|
|||
|
+ (36 * Math.round(r / 255 * 5))
|
|||
|
+ (6 * Math.round(g / 255 * 5))
|
|||
|
+ Math.round(b / 255 * 5);
|
|||
|
|
|||
|
return ansi;
|
|||
|
};
|
|||
|
|
|||
|
convert.ansi16.rgb = function (args) {
|
|||
|
let color = args % 10;
|
|||
|
|
|||
|
// Handle greyscale
|
|||
|
if (color === 0 || color === 7) {
|
|||
|
if (args > 50) {
|
|||
|
color += 3.5;
|
|||
|
}
|
|||
|
|
|||
|
color = color / 10.5 * 255;
|
|||
|
|
|||
|
return [color, color, color];
|
|||
|
}
|
|||
|
|
|||
|
const mult = (~~(args > 50) + 1) * 0.5;
|
|||
|
const r = ((color & 1) * mult) * 255;
|
|||
|
const g = (((color >> 1) & 1) * mult) * 255;
|
|||
|
const b = (((color >> 2) & 1) * mult) * 255;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.ansi256.rgb = function (args) {
|
|||
|
// Handle greyscale
|
|||
|
if (args >= 232) {
|
|||
|
const c = (args - 232) * 10 + 8;
|
|||
|
return [c, c, c];
|
|||
|
}
|
|||
|
|
|||
|
args -= 16;
|
|||
|
|
|||
|
let rem;
|
|||
|
const r = Math.floor(args / 36) / 5 * 255;
|
|||
|
const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
|
|||
|
const b = (rem % 6) / 5 * 255;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hex = function (args) {
|
|||
|
const integer = ((Math.round(args[0]) & 0xFF) << 16)
|
|||
|
+ ((Math.round(args[1]) & 0xFF) << 8)
|
|||
|
+ (Math.round(args[2]) & 0xFF);
|
|||
|
|
|||
|
const string = integer.toString(16).toUpperCase();
|
|||
|
return '000000'.substring(string.length) + string;
|
|||
|
};
|
|||
|
|
|||
|
convert.hex.rgb = function (args) {
|
|||
|
const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
|
|||
|
if (!match) {
|
|||
|
return [0, 0, 0];
|
|||
|
}
|
|||
|
|
|||
|
let colorString = match[0];
|
|||
|
|
|||
|
if (match[0].length === 3) {
|
|||
|
colorString = colorString.split('').map(char => {
|
|||
|
return char + char;
|
|||
|
}).join('');
|
|||
|
}
|
|||
|
|
|||
|
const integer = parseInt(colorString, 16);
|
|||
|
const r = (integer >> 16) & 0xFF;
|
|||
|
const g = (integer >> 8) & 0xFF;
|
|||
|
const b = integer & 0xFF;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hcg = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const max = Math.max(Math.max(r, g), b);
|
|||
|
const min = Math.min(Math.min(r, g), b);
|
|||
|
const chroma = (max - min);
|
|||
|
let grayscale;
|
|||
|
let hue;
|
|||
|
|
|||
|
if (chroma < 1) {
|
|||
|
grayscale = min / (1 - chroma);
|
|||
|
} else {
|
|||
|
grayscale = 0;
|
|||
|
}
|
|||
|
|
|||
|
if (chroma <= 0) {
|
|||
|
hue = 0;
|
|||
|
} else
|
|||
|
if (max === r) {
|
|||
|
hue = ((g - b) / chroma) % 6;
|
|||
|
} else
|
|||
|
if (max === g) {
|
|||
|
hue = 2 + (b - r) / chroma;
|
|||
|
} else {
|
|||
|
hue = 4 + (r - g) / chroma;
|
|||
|
}
|
|||
|
|
|||
|
hue /= 6;
|
|||
|
hue %= 1;
|
|||
|
|
|||
|
return [hue * 360, chroma * 100, grayscale * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.hcg = function (hsl) {
|
|||
|
const s = hsl[1] / 100;
|
|||
|
const l = hsl[2] / 100;
|
|||
|
|
|||
|
const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
|
|||
|
|
|||
|
let f = 0;
|
|||
|
if (c < 1.0) {
|
|||
|
f = (l - 0.5 * c) / (1.0 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hsl[0], c * 100, f * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.hcg = function (hsv) {
|
|||
|
const s = hsv[1] / 100;
|
|||
|
const v = hsv[2] / 100;
|
|||
|
|
|||
|
const c = s * v;
|
|||
|
let f = 0;
|
|||
|
|
|||
|
if (c < 1.0) {
|
|||
|
f = (v - c) / (1 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hsv[0], c * 100, f * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.rgb = function (hcg) {
|
|||
|
const h = hcg[0] / 360;
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
if (c === 0.0) {
|
|||
|
return [g * 255, g * 255, g * 255];
|
|||
|
}
|
|||
|
|
|||
|
const pure = [0, 0, 0];
|
|||
|
const hi = (h % 1) * 6;
|
|||
|
const v = hi % 1;
|
|||
|
const w = 1 - v;
|
|||
|
let mg = 0;
|
|||
|
|
|||
|
/* eslint-disable max-statements-per-line */
|
|||
|
switch (Math.floor(hi)) {
|
|||
|
case 0:
|
|||
|
pure[0] = 1; pure[1] = v; pure[2] = 0; break;
|
|||
|
case 1:
|
|||
|
pure[0] = w; pure[1] = 1; pure[2] = 0; break;
|
|||
|
case 2:
|
|||
|
pure[0] = 0; pure[1] = 1; pure[2] = v; break;
|
|||
|
case 3:
|
|||
|
pure[0] = 0; pure[1] = w; pure[2] = 1; break;
|
|||
|
case 4:
|
|||
|
pure[0] = v; pure[1] = 0; pure[2] = 1; break;
|
|||
|
default:
|
|||
|
pure[0] = 1; pure[1] = 0; pure[2] = w;
|
|||
|
}
|
|||
|
/* eslint-enable max-statements-per-line */
|
|||
|
|
|||
|
mg = (1.0 - c) * g;
|
|||
|
|
|||
|
return [
|
|||
|
(c * pure[0] + mg) * 255,
|
|||
|
(c * pure[1] + mg) * 255,
|
|||
|
(c * pure[2] + mg) * 255
|
|||
|
];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hsv = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
const v = c + g * (1.0 - c);
|
|||
|
let f = 0;
|
|||
|
|
|||
|
if (v > 0.0) {
|
|||
|
f = c / v;
|
|||
|
}
|
|||
|
|
|||
|
return [hcg[0], f * 100, v * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hsl = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
const l = g * (1.0 - c) + 0.5 * c;
|
|||
|
let s = 0;
|
|||
|
|
|||
|
if (l > 0.0 && l < 0.5) {
|
|||
|
s = c / (2 * l);
|
|||
|
} else
|
|||
|
if (l >= 0.5 && l < 1.0) {
|
|||
|
s = c / (2 * (1 - l));
|
|||
|
}
|
|||
|
|
|||
|
return [hcg[0], s * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hwb = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
const v = c + g * (1.0 - c);
|
|||
|
return [hcg[0], (v - c) * 100, (1 - v) * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hwb.hcg = function (hwb) {
|
|||
|
const w = hwb[1] / 100;
|
|||
|
const b = hwb[2] / 100;
|
|||
|
const v = 1 - b;
|
|||
|
const c = v - w;
|
|||
|
let g = 0;
|
|||
|
|
|||
|
if (c < 1) {
|
|||
|
g = (v - c) / (1 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hwb[0], c * 100, g * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.apple.rgb = function (apple) {
|
|||
|
return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.apple = function (rgb) {
|
|||
|
return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.rgb = function (args) {
|
|||
|
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hsl = function (args) {
|
|||
|
return [0, 0, args[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hsv = convert.gray.hsl;
|
|||
|
|
|||
|
convert.gray.hwb = function (gray) {
|
|||
|
return [0, 100, gray[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.cmyk = function (gray) {
|
|||
|
return [0, 0, 0, gray[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.lab = function (gray) {
|
|||
|
return [gray[0], 0, 0];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hex = function (gray) {
|
|||
|
const val = Math.round(gray[0] / 100 * 255) & 0xFF;
|
|||
|
const integer = (val << 16) + (val << 8) + val;
|
|||
|
|
|||
|
const string = integer.toString(16).toUpperCase();
|
|||
|
return '000000'.substring(string.length) + string;
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.gray = function (rgb) {
|
|||
|
const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
|
|||
|
return [val / 255 * 100];
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 36354:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
const conversions = __webpack_require__(22204);
|
|||
|
const route = __webpack_require__(53303);
|
|||
|
|
|||
|
const convert = {};
|
|||
|
|
|||
|
const models = Object.keys(conversions);
|
|||
|
|
|||
|
function wrapRaw(fn) {
|
|||
|
const wrappedFn = function (...args) {
|
|||
|
const arg0 = args[0];
|
|||
|
if (arg0 === undefined || arg0 === null) {
|
|||
|
return arg0;
|
|||
|
}
|
|||
|
|
|||
|
if (arg0.length > 1) {
|
|||
|
args = arg0;
|
|||
|
}
|
|||
|
|
|||
|
return fn(args);
|
|||
|
};
|
|||
|
|
|||
|
// Preserve .conversion property if there is one
|
|||
|
if ('conversion' in fn) {
|
|||
|
wrappedFn.conversion = fn.conversion;
|
|||
|
}
|
|||
|
|
|||
|
return wrappedFn;
|
|||
|
}
|
|||
|
|
|||
|
function wrapRounded(fn) {
|
|||
|
const wrappedFn = function (...args) {
|
|||
|
const arg0 = args[0];
|
|||
|
|
|||
|
if (arg0 === undefined || arg0 === null) {
|
|||
|
return arg0;
|
|||
|
}
|
|||
|
|
|||
|
if (arg0.length > 1) {
|
|||
|
args = arg0;
|
|||
|
}
|
|||
|
|
|||
|
const result = fn(args);
|
|||
|
|
|||
|
// We're assuming the result is an array here.
|
|||
|
// see notice in conversions.js; don't use box types
|
|||
|
// in conversion functions.
|
|||
|
if (typeof result === 'object') {
|
|||
|
for (let len = result.length, i = 0; i < len; i++) {
|
|||
|
result[i] = Math.round(result[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
};
|
|||
|
|
|||
|
// Preserve .conversion property if there is one
|
|||
|
if ('conversion' in fn) {
|
|||
|
wrappedFn.conversion = fn.conversion;
|
|||
|
}
|
|||
|
|
|||
|
return wrappedFn;
|
|||
|
}
|
|||
|
|
|||
|
models.forEach(fromModel => {
|
|||
|
convert[fromModel] = {};
|
|||
|
|
|||
|
Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
|
|||
|
Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
|
|||
|
|
|||
|
const routes = route(fromModel);
|
|||
|
const routeModels = Object.keys(routes);
|
|||
|
|
|||
|
routeModels.forEach(toModel => {
|
|||
|
const fn = routes[toModel];
|
|||
|
|
|||
|
convert[fromModel][toModel] = wrapRounded(fn);
|
|||
|
convert[fromModel][toModel].raw = wrapRaw(fn);
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
module.exports = convert;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 53303:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
const conversions = __webpack_require__(22204);
|
|||
|
|
|||
|
/*
|
|||
|
This function routes a model to all other models.
|
|||
|
|
|||
|
all functions that are routed have a property `.conversion` attached
|
|||
|
to the returned synthetic function. This property is an array
|
|||
|
of strings, each with the steps in between the 'from' and 'to'
|
|||
|
color models (inclusive).
|
|||
|
|
|||
|
conversions that are not possible simply are not included.
|
|||
|
*/
|
|||
|
|
|||
|
function buildGraph() {
|
|||
|
const graph = {};
|
|||
|
// https://jsperf.com/object-keys-vs-for-in-with-closure/3
|
|||
|
const models = Object.keys(conversions);
|
|||
|
|
|||
|
for (let len = models.length, i = 0; i < len; i++) {
|
|||
|
graph[models[i]] = {
|
|||
|
// http://jsperf.com/1-vs-infinity
|
|||
|
// micro-opt, but this is simple.
|
|||
|
distance: -1,
|
|||
|
parent: null
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return graph;
|
|||
|
}
|
|||
|
|
|||
|
// https://en.wikipedia.org/wiki/Breadth-first_search
|
|||
|
function deriveBFS(fromModel) {
|
|||
|
const graph = buildGraph();
|
|||
|
const queue = [fromModel]; // Unshift -> queue -> pop
|
|||
|
|
|||
|
graph[fromModel].distance = 0;
|
|||
|
|
|||
|
while (queue.length) {
|
|||
|
const current = queue.pop();
|
|||
|
const adjacents = Object.keys(conversions[current]);
|
|||
|
|
|||
|
for (let len = adjacents.length, i = 0; i < len; i++) {
|
|||
|
const adjacent = adjacents[i];
|
|||
|
const node = graph[adjacent];
|
|||
|
|
|||
|
if (node.distance === -1) {
|
|||
|
node.distance = graph[current].distance + 1;
|
|||
|
node.parent = current;
|
|||
|
queue.unshift(adjacent);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return graph;
|
|||
|
}
|
|||
|
|
|||
|
function link(from, to) {
|
|||
|
return function (args) {
|
|||
|
return to(from(args));
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function wrapConversion(toModel, graph) {
|
|||
|
const path = [graph[toModel].parent, toModel];
|
|||
|
let fn = conversions[graph[toModel].parent][toModel];
|
|||
|
|
|||
|
let cur = graph[toModel].parent;
|
|||
|
while (graph[cur].parent) {
|
|||
|
path.unshift(graph[cur].parent);
|
|||
|
fn = link(conversions[graph[cur].parent][cur], fn);
|
|||
|
cur = graph[cur].parent;
|
|||
|
}
|
|||
|
|
|||
|
fn.conversion = path;
|
|||
|
return fn;
|
|||
|
}
|
|||
|
|
|||
|
module.exports = function (fromModel) {
|
|||
|
const graph = deriveBFS(fromModel);
|
|||
|
const conversion = {};
|
|||
|
|
|||
|
const models = Object.keys(graph);
|
|||
|
for (let len = models.length, i = 0; i < len; i++) {
|
|||
|
const toModel = models[i];
|
|||
|
const node = graph[toModel];
|
|||
|
|
|||
|
if (node.parent === null) {
|
|||
|
// No possible conversion, or this node is the source model.
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
conversion[toModel] = wrapConversion(toModel, graph);
|
|||
|
}
|
|||
|
|
|||
|
return conversion;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 30668:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = {
|
|||
|
"aliceblue": [240, 248, 255],
|
|||
|
"antiquewhite": [250, 235, 215],
|
|||
|
"aqua": [0, 255, 255],
|
|||
|
"aquamarine": [127, 255, 212],
|
|||
|
"azure": [240, 255, 255],
|
|||
|
"beige": [245, 245, 220],
|
|||
|
"bisque": [255, 228, 196],
|
|||
|
"black": [0, 0, 0],
|
|||
|
"blanchedalmond": [255, 235, 205],
|
|||
|
"blue": [0, 0, 255],
|
|||
|
"blueviolet": [138, 43, 226],
|
|||
|
"brown": [165, 42, 42],
|
|||
|
"burlywood": [222, 184, 135],
|
|||
|
"cadetblue": [95, 158, 160],
|
|||
|
"chartreuse": [127, 255, 0],
|
|||
|
"chocolate": [210, 105, 30],
|
|||
|
"coral": [255, 127, 80],
|
|||
|
"cornflowerblue": [100, 149, 237],
|
|||
|
"cornsilk": [255, 248, 220],
|
|||
|
"crimson": [220, 20, 60],
|
|||
|
"cyan": [0, 255, 255],
|
|||
|
"darkblue": [0, 0, 139],
|
|||
|
"darkcyan": [0, 139, 139],
|
|||
|
"darkgoldenrod": [184, 134, 11],
|
|||
|
"darkgray": [169, 169, 169],
|
|||
|
"darkgreen": [0, 100, 0],
|
|||
|
"darkgrey": [169, 169, 169],
|
|||
|
"darkkhaki": [189, 183, 107],
|
|||
|
"darkmagenta": [139, 0, 139],
|
|||
|
"darkolivegreen": [85, 107, 47],
|
|||
|
"darkorange": [255, 140, 0],
|
|||
|
"darkorchid": [153, 50, 204],
|
|||
|
"darkred": [139, 0, 0],
|
|||
|
"darksalmon": [233, 150, 122],
|
|||
|
"darkseagreen": [143, 188, 143],
|
|||
|
"darkslateblue": [72, 61, 139],
|
|||
|
"darkslategray": [47, 79, 79],
|
|||
|
"darkslategrey": [47, 79, 79],
|
|||
|
"darkturquoise": [0, 206, 209],
|
|||
|
"darkviolet": [148, 0, 211],
|
|||
|
"deeppink": [255, 20, 147],
|
|||
|
"deepskyblue": [0, 191, 255],
|
|||
|
"dimgray": [105, 105, 105],
|
|||
|
"dimgrey": [105, 105, 105],
|
|||
|
"dodgerblue": [30, 144, 255],
|
|||
|
"firebrick": [178, 34, 34],
|
|||
|
"floralwhite": [255, 250, 240],
|
|||
|
"forestgreen": [34, 139, 34],
|
|||
|
"fuchsia": [255, 0, 255],
|
|||
|
"gainsboro": [220, 220, 220],
|
|||
|
"ghostwhite": [248, 248, 255],
|
|||
|
"gold": [255, 215, 0],
|
|||
|
"goldenrod": [218, 165, 32],
|
|||
|
"gray": [128, 128, 128],
|
|||
|
"green": [0, 128, 0],
|
|||
|
"greenyellow": [173, 255, 47],
|
|||
|
"grey": [128, 128, 128],
|
|||
|
"honeydew": [240, 255, 240],
|
|||
|
"hotpink": [255, 105, 180],
|
|||
|
"indianred": [205, 92, 92],
|
|||
|
"indigo": [75, 0, 130],
|
|||
|
"ivory": [255, 255, 240],
|
|||
|
"khaki": [240, 230, 140],
|
|||
|
"lavender": [230, 230, 250],
|
|||
|
"lavenderblush": [255, 240, 245],
|
|||
|
"lawngreen": [124, 252, 0],
|
|||
|
"lemonchiffon": [255, 250, 205],
|
|||
|
"lightblue": [173, 216, 230],
|
|||
|
"lightcoral": [240, 128, 128],
|
|||
|
"lightcyan": [224, 255, 255],
|
|||
|
"lightgoldenrodyellow": [250, 250, 210],
|
|||
|
"lightgray": [211, 211, 211],
|
|||
|
"lightgreen": [144, 238, 144],
|
|||
|
"lightgrey": [211, 211, 211],
|
|||
|
"lightpink": [255, 182, 193],
|
|||
|
"lightsalmon": [255, 160, 122],
|
|||
|
"lightseagreen": [32, 178, 170],
|
|||
|
"lightskyblue": [135, 206, 250],
|
|||
|
"lightslategray": [119, 136, 153],
|
|||
|
"lightslategrey": [119, 136, 153],
|
|||
|
"lightsteelblue": [176, 196, 222],
|
|||
|
"lightyellow": [255, 255, 224],
|
|||
|
"lime": [0, 255, 0],
|
|||
|
"limegreen": [50, 205, 50],
|
|||
|
"linen": [250, 240, 230],
|
|||
|
"magenta": [255, 0, 255],
|
|||
|
"maroon": [128, 0, 0],
|
|||
|
"mediumaquamarine": [102, 205, 170],
|
|||
|
"mediumblue": [0, 0, 205],
|
|||
|
"mediumorchid": [186, 85, 211],
|
|||
|
"mediumpurple": [147, 112, 219],
|
|||
|
"mediumseagreen": [60, 179, 113],
|
|||
|
"mediumslateblue": [123, 104, 238],
|
|||
|
"mediumspringgreen": [0, 250, 154],
|
|||
|
"mediumturquoise": [72, 209, 204],
|
|||
|
"mediumvioletred": [199, 21, 133],
|
|||
|
"midnightblue": [25, 25, 112],
|
|||
|
"mintcream": [245, 255, 250],
|
|||
|
"mistyrose": [255, 228, 225],
|
|||
|
"moccasin": [255, 228, 181],
|
|||
|
"navajowhite": [255, 222, 173],
|
|||
|
"navy": [0, 0, 128],
|
|||
|
"oldlace": [253, 245, 230],
|
|||
|
"olive": [128, 128, 0],
|
|||
|
"olivedrab": [107, 142, 35],
|
|||
|
"orange": [255, 165, 0],
|
|||
|
"orangered": [255, 69, 0],
|
|||
|
"orchid": [218, 112, 214],
|
|||
|
"palegoldenrod": [238, 232, 170],
|
|||
|
"palegreen": [152, 251, 152],
|
|||
|
"paleturquoise": [175, 238, 238],
|
|||
|
"palevioletred": [219, 112, 147],
|
|||
|
"papayawhip": [255, 239, 213],
|
|||
|
"peachpuff": [255, 218, 185],
|
|||
|
"peru": [205, 133, 63],
|
|||
|
"pink": [255, 192, 203],
|
|||
|
"plum": [221, 160, 221],
|
|||
|
"powderblue": [176, 224, 230],
|
|||
|
"purple": [128, 0, 128],
|
|||
|
"rebeccapurple": [102, 51, 153],
|
|||
|
"red": [255, 0, 0],
|
|||
|
"rosybrown": [188, 143, 143],
|
|||
|
"royalblue": [65, 105, 225],
|
|||
|
"saddlebrown": [139, 69, 19],
|
|||
|
"salmon": [250, 128, 114],
|
|||
|
"sandybrown": [244, 164, 96],
|
|||
|
"seagreen": [46, 139, 87],
|
|||
|
"seashell": [255, 245, 238],
|
|||
|
"sienna": [160, 82, 45],
|
|||
|
"silver": [192, 192, 192],
|
|||
|
"skyblue": [135, 206, 235],
|
|||
|
"slateblue": [106, 90, 205],
|
|||
|
"slategray": [112, 128, 144],
|
|||
|
"slategrey": [112, 128, 144],
|
|||
|
"snow": [255, 250, 250],
|
|||
|
"springgreen": [0, 255, 127],
|
|||
|
"steelblue": [70, 130, 180],
|
|||
|
"tan": [210, 180, 140],
|
|||
|
"teal": [0, 128, 128],
|
|||
|
"thistle": [216, 191, 216],
|
|||
|
"tomato": [255, 99, 71],
|
|||
|
"turquoise": [64, 224, 208],
|
|||
|
"violet": [238, 130, 238],
|
|||
|
"wheat": [245, 222, 179],
|
|||
|
"white": [255, 255, 255],
|
|||
|
"whitesmoke": [245, 245, 245],
|
|||
|
"yellow": [255, 255, 0],
|
|||
|
"yellowgreen": [154, 205, 50]
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 16563:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = (flag, argv = process.argv) => {
|
|||
|
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
|
|||
|
const position = argv.indexOf(prefix + flag);
|
|||
|
const terminatorPosition = argv.indexOf('--');
|
|||
|
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 505:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const os = __webpack_require__(12087);
|
|||
|
const tty = __webpack_require__(33867);
|
|||
|
const hasFlag = __webpack_require__(16563);
|
|||
|
|
|||
|
const {env} = process;
|
|||
|
|
|||
|
let forceColor;
|
|||
|
if (hasFlag('no-color') ||
|
|||
|
hasFlag('no-colors') ||
|
|||
|
hasFlag('color=false') ||
|
|||
|
hasFlag('color=never')) {
|
|||
|
forceColor = 0;
|
|||
|
} else if (hasFlag('color') ||
|
|||
|
hasFlag('colors') ||
|
|||
|
hasFlag('color=true') ||
|
|||
|
hasFlag('color=always')) {
|
|||
|
forceColor = 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('FORCE_COLOR' in env) {
|
|||
|
if (env.FORCE_COLOR === 'true') {
|
|||
|
forceColor = 1;
|
|||
|
} else if (env.FORCE_COLOR === 'false') {
|
|||
|
forceColor = 0;
|
|||
|
} else {
|
|||
|
forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function translateLevel(level) {
|
|||
|
if (level === 0) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
return {
|
|||
|
level,
|
|||
|
hasBasic: true,
|
|||
|
has256: level >= 2,
|
|||
|
has16m: level >= 3
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function supportsColor(haveStream, streamIsTTY) {
|
|||
|
if (forceColor === 0) {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
if (hasFlag('color=16m') ||
|
|||
|
hasFlag('color=full') ||
|
|||
|
hasFlag('color=truecolor')) {
|
|||
|
return 3;
|
|||
|
}
|
|||
|
|
|||
|
if (hasFlag('color=256')) {
|
|||
|
return 2;
|
|||
|
}
|
|||
|
|
|||
|
if (haveStream && !streamIsTTY && forceColor === undefined) {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
const min = forceColor || 0;
|
|||
|
|
|||
|
if (env.TERM === 'dumb') {
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
if (process.platform === 'win32') {
|
|||
|
// Windows 10 build 10586 is the first Windows release that supports 256 colors.
|
|||
|
// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
|
|||
|
const osRelease = os.release().split('.');
|
|||
|
if (
|
|||
|
Number(osRelease[0]) >= 10 &&
|
|||
|
Number(osRelease[2]) >= 10586
|
|||
|
) {
|
|||
|
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('CI' in env) {
|
|||
|
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
if ('TEAMCITY_VERSION' in env) {
|
|||
|
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|||
|
}
|
|||
|
|
|||
|
if (env.COLORTERM === 'truecolor') {
|
|||
|
return 3;
|
|||
|
}
|
|||
|
|
|||
|
if ('TERM_PROGRAM' in env) {
|
|||
|
const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
|
|||
|
|
|||
|
switch (env.TERM_PROGRAM) {
|
|||
|
case 'iTerm.app':
|
|||
|
return version >= 3 ? 3 : 2;
|
|||
|
case 'Apple_Terminal':
|
|||
|
return 2;
|
|||
|
// No default
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (/-256(color)?$/i.test(env.TERM)) {
|
|||
|
return 2;
|
|||
|
}
|
|||
|
|
|||
|
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('COLORTERM' in env) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
function getSupportLevel(stream) {
|
|||
|
const level = supportsColor(stream, stream && stream.isTTY);
|
|||
|
return translateLevel(level);
|
|||
|
}
|
|||
|
|
|||
|
module.exports = {
|
|||
|
supportsColor: getSupportLevel,
|
|||
|
stdout: translateLevel(supportsColor(true, tty.isatty(1))),
|
|||
|
stderr: translateLevel(supportsColor(true, tty.isatty(2)))
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 34341:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
const mimicFn = (to, from) => {
|
|||
|
for (const prop of Reflect.ownKeys(from)) {
|
|||
|
Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));
|
|||
|
}
|
|||
|
|
|||
|
return to;
|
|||
|
};
|
|||
|
|
|||
|
module.exports = mimicFn;
|
|||
|
// TODO: Remove this for the next major release
|
|||
|
module.exports.default = mimicFn;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 31322:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const mimicFn = __webpack_require__(34341);
|
|||
|
|
|||
|
const calledFunctions = new WeakMap();
|
|||
|
|
|||
|
const onetime = (function_, options = {}) => {
|
|||
|
if (typeof function_ !== 'function') {
|
|||
|
throw new TypeError('Expected a function');
|
|||
|
}
|
|||
|
|
|||
|
let returnValue;
|
|||
|
let callCount = 0;
|
|||
|
const functionName = function_.displayName || function_.name || '<anonymous>';
|
|||
|
|
|||
|
const onetime = function (...arguments_) {
|
|||
|
calledFunctions.set(onetime, ++callCount);
|
|||
|
|
|||
|
if (callCount === 1) {
|
|||
|
returnValue = function_.apply(this, arguments_);
|
|||
|
function_ = null;
|
|||
|
} else if (options.throw === true) {
|
|||
|
throw new Error(`Function \`${functionName}\` can only be called once`);
|
|||
|
}
|
|||
|
|
|||
|
return returnValue;
|
|||
|
};
|
|||
|
|
|||
|
mimicFn(onetime, function_);
|
|||
|
calledFunctions.set(onetime, callCount);
|
|||
|
|
|||
|
return onetime;
|
|||
|
};
|
|||
|
|
|||
|
module.exports = onetime;
|
|||
|
// TODO: Remove this for the next major release
|
|||
|
module.exports.default = onetime;
|
|||
|
|
|||
|
module.exports.callCount = function_ => {
|
|||
|
if (!calledFunctions.has(function_)) {
|
|||
|
throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
|
|||
|
}
|
|||
|
|
|||
|
return calledFunctions.get(function_);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 63395:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const readline = __webpack_require__(51058);
|
|||
|
const chalk = __webpack_require__(29970);
|
|||
|
const cliCursor = __webpack_require__(23909);
|
|||
|
const cliSpinners = __webpack_require__(54011);
|
|||
|
const logSymbols = __webpack_require__(9986);
|
|||
|
const stripAnsi = __webpack_require__(53217);
|
|||
|
const wcwidth = __webpack_require__(71011);
|
|||
|
const isInteractive = __webpack_require__(35131);
|
|||
|
const isUnicodeSupported = __webpack_require__(4500);
|
|||
|
const {BufferListStream} = __webpack_require__(10022);
|
|||
|
|
|||
|
const TEXT = Symbol('text');
|
|||
|
const PREFIX_TEXT = Symbol('prefixText');
|
|||
|
const ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code
|
|||
|
|
|||
|
class StdinDiscarder {
|
|||
|
constructor() {
|
|||
|
this.requests = 0;
|
|||
|
|
|||
|
this.mutedStream = new BufferListStream();
|
|||
|
this.mutedStream.pipe(process.stdout);
|
|||
|
|
|||
|
const self = this; // eslint-disable-line unicorn/no-this-assignment
|
|||
|
this.ourEmit = function (event, data, ...args) {
|
|||
|
const {stdin} = process;
|
|||
|
if (self.requests > 0 || stdin.emit === self.ourEmit) {
|
|||
|
if (event === 'keypress') { // Fixes readline behavior
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (event === 'data' && data.includes(ASCII_ETX_CODE)) {
|
|||
|
process.emit('SIGINT');
|
|||
|
}
|
|||
|
|
|||
|
Reflect.apply(self.oldEmit, this, [event, data, ...args]);
|
|||
|
} else {
|
|||
|
Reflect.apply(process.stdin.emit, this, [event, data, ...args]);
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
start() {
|
|||
|
this.requests++;
|
|||
|
|
|||
|
if (this.requests === 1) {
|
|||
|
this.realStart();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
stop() {
|
|||
|
if (this.requests <= 0) {
|
|||
|
throw new Error('`stop` called more times than `start`');
|
|||
|
}
|
|||
|
|
|||
|
this.requests--;
|
|||
|
|
|||
|
if (this.requests === 0) {
|
|||
|
this.realStop();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
realStart() {
|
|||
|
// No known way to make it work reliably on Windows
|
|||
|
if (process.platform === 'win32') {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
this.rl = readline.createInterface({
|
|||
|
input: process.stdin,
|
|||
|
output: this.mutedStream
|
|||
|
});
|
|||
|
|
|||
|
this.rl.on('SIGINT', () => {
|
|||
|
if (process.listenerCount('SIGINT') === 0) {
|
|||
|
process.emit('SIGINT');
|
|||
|
} else {
|
|||
|
this.rl.close();
|
|||
|
process.kill(process.pid, 'SIGINT');
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
realStop() {
|
|||
|
if (process.platform === 'win32') {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
this.rl.close();
|
|||
|
this.rl = undefined;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
let stdinDiscarder;
|
|||
|
|
|||
|
class Ora {
|
|||
|
constructor(options) {
|
|||
|
if (!stdinDiscarder) {
|
|||
|
stdinDiscarder = new StdinDiscarder();
|
|||
|
}
|
|||
|
|
|||
|
if (typeof options === 'string') {
|
|||
|
options = {
|
|||
|
text: options
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
this.options = {
|
|||
|
text: '',
|
|||
|
color: 'cyan',
|
|||
|
stream: process.stderr,
|
|||
|
discardStdin: true,
|
|||
|
...options
|
|||
|
};
|
|||
|
|
|||
|
this.spinner = this.options.spinner;
|
|||
|
|
|||
|
this.color = this.options.color;
|
|||
|
this.hideCursor = this.options.hideCursor !== false;
|
|||
|
this.interval = this.options.interval || this.spinner.interval || 100;
|
|||
|
this.stream = this.options.stream;
|
|||
|
this.id = undefined;
|
|||
|
this.isEnabled = typeof this.options.isEnabled === 'boolean' ? this.options.isEnabled : isInteractive({stream: this.stream});
|
|||
|
this.isSilent = typeof this.options.isSilent === 'boolean' ? this.options.isSilent : false;
|
|||
|
|
|||
|
// Set *after* `this.stream`
|
|||
|
this.text = this.options.text;
|
|||
|
this.prefixText = this.options.prefixText;
|
|||
|
this.linesToClear = 0;
|
|||
|
this.indent = this.options.indent;
|
|||
|
this.discardStdin = this.options.discardStdin;
|
|||
|
this.isDiscardingStdin = false;
|
|||
|
}
|
|||
|
|
|||
|
get indent() {
|
|||
|
return this._indent;
|
|||
|
}
|
|||
|
|
|||
|
set indent(indent = 0) {
|
|||
|
if (!(indent >= 0 && Number.isInteger(indent))) {
|
|||
|
throw new Error('The `indent` option must be an integer from 0 and up');
|
|||
|
}
|
|||
|
|
|||
|
this._indent = indent;
|
|||
|
}
|
|||
|
|
|||
|
_updateInterval(interval) {
|
|||
|
if (interval !== undefined) {
|
|||
|
this.interval = interval;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
get spinner() {
|
|||
|
return this._spinner;
|
|||
|
}
|
|||
|
|
|||
|
set spinner(spinner) {
|
|||
|
this.frameIndex = 0;
|
|||
|
|
|||
|
if (typeof spinner === 'object') {
|
|||
|
if (spinner.frames === undefined) {
|
|||
|
throw new Error('The given spinner must have a `frames` property');
|
|||
|
}
|
|||
|
|
|||
|
this._spinner = spinner;
|
|||
|
} else if (!isUnicodeSupported()) {
|
|||
|
this._spinner = cliSpinners.line;
|
|||
|
} else if (spinner === undefined) {
|
|||
|
// Set default spinner
|
|||
|
this._spinner = cliSpinners.dots;
|
|||
|
} else if (cliSpinners[spinner]) {
|
|||
|
this._spinner = cliSpinners[spinner];
|
|||
|
} else {
|
|||
|
throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
|
|||
|
}
|
|||
|
|
|||
|
this._updateInterval(this._spinner.interval);
|
|||
|
}
|
|||
|
|
|||
|
get text() {
|
|||
|
return this[TEXT];
|
|||
|
}
|
|||
|
|
|||
|
set text(value) {
|
|||
|
this[TEXT] = value;
|
|||
|
this.updateLineCount();
|
|||
|
}
|
|||
|
|
|||
|
get prefixText() {
|
|||
|
return this[PREFIX_TEXT];
|
|||
|
}
|
|||
|
|
|||
|
set prefixText(value) {
|
|||
|
this[PREFIX_TEXT] = value;
|
|||
|
this.updateLineCount();
|
|||
|
}
|
|||
|
|
|||
|
get isSpinning() {
|
|||
|
return this.id !== undefined;
|
|||
|
}
|
|||
|
|
|||
|
getFullPrefixText(prefixText = this[PREFIX_TEXT], postfix = ' ') {
|
|||
|
if (typeof prefixText === 'string') {
|
|||
|
return prefixText + postfix;
|
|||
|
}
|
|||
|
|
|||
|
if (typeof prefixText === 'function') {
|
|||
|
return prefixText() + postfix;
|
|||
|
}
|
|||
|
|
|||
|
return '';
|
|||
|
}
|
|||
|
|
|||
|
updateLineCount() {
|
|||
|
const columns = this.stream.columns || 80;
|
|||
|
const fullPrefixText = this.getFullPrefixText(this.prefixText, '-');
|
|||
|
this.lineCount = 0;
|
|||
|
for (const line of stripAnsi(fullPrefixText + '--' + this[TEXT]).split('\n')) {
|
|||
|
this.lineCount += Math.max(1, Math.ceil(wcwidth(line) / columns));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
get isEnabled() {
|
|||
|
return this._isEnabled && !this.isSilent;
|
|||
|
}
|
|||
|
|
|||
|
set isEnabled(value) {
|
|||
|
if (typeof value !== 'boolean') {
|
|||
|
throw new TypeError('The `isEnabled` option must be a boolean');
|
|||
|
}
|
|||
|
|
|||
|
this._isEnabled = value;
|
|||
|
}
|
|||
|
|
|||
|
get isSilent() {
|
|||
|
return this._isSilent;
|
|||
|
}
|
|||
|
|
|||
|
set isSilent(value) {
|
|||
|
if (typeof value !== 'boolean') {
|
|||
|
throw new TypeError('The `isSilent` option must be a boolean');
|
|||
|
}
|
|||
|
|
|||
|
this._isSilent = value;
|
|||
|
}
|
|||
|
|
|||
|
frame() {
|
|||
|
const {frames} = this.spinner;
|
|||
|
let frame = frames[this.frameIndex];
|
|||
|
|
|||
|
if (this.color) {
|
|||
|
frame = chalk[this.color](frame);
|
|||
|
}
|
|||
|
|
|||
|
this.frameIndex = ++this.frameIndex % frames.length;
|
|||
|
const fullPrefixText = (typeof this.prefixText === 'string' && this.prefixText !== '') ? this.prefixText + ' ' : '';
|
|||
|
const fullText = typeof this.text === 'string' ? ' ' + this.text : '';
|
|||
|
|
|||
|
return fullPrefixText + frame + fullText;
|
|||
|
}
|
|||
|
|
|||
|
clear() {
|
|||
|
if (!this.isEnabled || !this.stream.isTTY) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
for (let i = 0; i < this.linesToClear; i++) {
|
|||
|
if (i > 0) {
|
|||
|
this.stream.moveCursor(0, -1);
|
|||
|
}
|
|||
|
|
|||
|
this.stream.clearLine();
|
|||
|
this.stream.cursorTo(this.indent);
|
|||
|
}
|
|||
|
|
|||
|
this.linesToClear = 0;
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
render() {
|
|||
|
if (this.isSilent) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
this.clear();
|
|||
|
this.stream.write(this.frame());
|
|||
|
this.linesToClear = this.lineCount;
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
start(text) {
|
|||
|
if (text) {
|
|||
|
this.text = text;
|
|||
|
}
|
|||
|
|
|||
|
if (this.isSilent) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
if (!this.isEnabled) {
|
|||
|
if (this.text) {
|
|||
|
this.stream.write(`- ${this.text}\n`);
|
|||
|
}
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
if (this.isSpinning) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
if (this.hideCursor) {
|
|||
|
cliCursor.hide(this.stream);
|
|||
|
}
|
|||
|
|
|||
|
if (this.discardStdin && process.stdin.isTTY) {
|
|||
|
this.isDiscardingStdin = true;
|
|||
|
stdinDiscarder.start();
|
|||
|
}
|
|||
|
|
|||
|
this.render();
|
|||
|
this.id = setInterval(this.render.bind(this), this.interval);
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
stop() {
|
|||
|
if (!this.isEnabled) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
clearInterval(this.id);
|
|||
|
this.id = undefined;
|
|||
|
this.frameIndex = 0;
|
|||
|
this.clear();
|
|||
|
if (this.hideCursor) {
|
|||
|
cliCursor.show(this.stream);
|
|||
|
}
|
|||
|
|
|||
|
if (this.discardStdin && process.stdin.isTTY && this.isDiscardingStdin) {
|
|||
|
stdinDiscarder.stop();
|
|||
|
this.isDiscardingStdin = false;
|
|||
|
}
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
succeed(text) {
|
|||
|
return this.stopAndPersist({symbol: logSymbols.success, text});
|
|||
|
}
|
|||
|
|
|||
|
fail(text) {
|
|||
|
return this.stopAndPersist({symbol: logSymbols.error, text});
|
|||
|
}
|
|||
|
|
|||
|
warn(text) {
|
|||
|
return this.stopAndPersist({symbol: logSymbols.warning, text});
|
|||
|
}
|
|||
|
|
|||
|
info(text) {
|
|||
|
return this.stopAndPersist({symbol: logSymbols.info, text});
|
|||
|
}
|
|||
|
|
|||
|
stopAndPersist(options = {}) {
|
|||
|
if (this.isSilent) {
|
|||
|
return this;
|
|||
|
}
|
|||
|
|
|||
|
const prefixText = options.prefixText || this.prefixText;
|
|||
|
const text = options.text || this.text;
|
|||
|
const fullText = (typeof text === 'string') ? ' ' + text : '';
|
|||
|
|
|||
|
this.stop();
|
|||
|
this.stream.write(`${this.getFullPrefixText(prefixText, ' ')}${options.symbol || ' '}${fullText}\n`);
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
const oraFactory = function (options) {
|
|||
|
return new Ora(options);
|
|||
|
};
|
|||
|
|
|||
|
module.exports = oraFactory;
|
|||
|
|
|||
|
module.exports.promise = (action, options) => {
|
|||
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|||
|
if (typeof action.then !== 'function') {
|
|||
|
throw new TypeError('Parameter `action` must be a Promise');
|
|||
|
}
|
|||
|
|
|||
|
const spinner = new Ora(options);
|
|||
|
spinner.start();
|
|||
|
|
|||
|
(async () => {
|
|||
|
try {
|
|||
|
await action;
|
|||
|
spinner.succeed();
|
|||
|
} catch {
|
|||
|
spinner.fail();
|
|||
|
}
|
|||
|
})();
|
|||
|
|
|||
|
return spinner;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 93666:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
/* module decorator */ module = __webpack_require__.nmd(module);
|
|||
|
|
|||
|
|
|||
|
const wrapAnsi16 = (fn, offset) => (...args) => {
|
|||
|
const code = fn(...args);
|
|||
|
return `\u001B[${code + offset}m`;
|
|||
|
};
|
|||
|
|
|||
|
const wrapAnsi256 = (fn, offset) => (...args) => {
|
|||
|
const code = fn(...args);
|
|||
|
return `\u001B[${38 + offset};5;${code}m`;
|
|||
|
};
|
|||
|
|
|||
|
const wrapAnsi16m = (fn, offset) => (...args) => {
|
|||
|
const rgb = fn(...args);
|
|||
|
return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
|
|||
|
};
|
|||
|
|
|||
|
const ansi2ansi = n => n;
|
|||
|
const rgb2rgb = (r, g, b) => [r, g, b];
|
|||
|
|
|||
|
const setLazyProperty = (object, property, get) => {
|
|||
|
Object.defineProperty(object, property, {
|
|||
|
get: () => {
|
|||
|
const value = get();
|
|||
|
|
|||
|
Object.defineProperty(object, property, {
|
|||
|
value,
|
|||
|
enumerable: true,
|
|||
|
configurable: true
|
|||
|
});
|
|||
|
|
|||
|
return value;
|
|||
|
},
|
|||
|
enumerable: true,
|
|||
|
configurable: true
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
/** @type {typeof import('color-convert')} */
|
|||
|
let colorConvert;
|
|||
|
const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
|
|||
|
if (colorConvert === undefined) {
|
|||
|
colorConvert = __webpack_require__(63387);
|
|||
|
}
|
|||
|
|
|||
|
const offset = isBackground ? 10 : 0;
|
|||
|
const styles = {};
|
|||
|
|
|||
|
for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
|
|||
|
const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
|
|||
|
if (sourceSpace === targetSpace) {
|
|||
|
styles[name] = wrap(identity, offset);
|
|||
|
} else if (typeof suite === 'object') {
|
|||
|
styles[name] = wrap(suite[targetSpace], offset);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return styles;
|
|||
|
};
|
|||
|
|
|||
|
function assembleStyles() {
|
|||
|
const codes = new Map();
|
|||
|
const styles = {
|
|||
|
modifier: {
|
|||
|
reset: [0, 0],
|
|||
|
// 21 isn't widely supported and 22 does the same thing
|
|||
|
bold: [1, 22],
|
|||
|
dim: [2, 22],
|
|||
|
italic: [3, 23],
|
|||
|
underline: [4, 24],
|
|||
|
inverse: [7, 27],
|
|||
|
hidden: [8, 28],
|
|||
|
strikethrough: [9, 29]
|
|||
|
},
|
|||
|
color: {
|
|||
|
black: [30, 39],
|
|||
|
red: [31, 39],
|
|||
|
green: [32, 39],
|
|||
|
yellow: [33, 39],
|
|||
|
blue: [34, 39],
|
|||
|
magenta: [35, 39],
|
|||
|
cyan: [36, 39],
|
|||
|
white: [37, 39],
|
|||
|
|
|||
|
// Bright color
|
|||
|
blackBright: [90, 39],
|
|||
|
redBright: [91, 39],
|
|||
|
greenBright: [92, 39],
|
|||
|
yellowBright: [93, 39],
|
|||
|
blueBright: [94, 39],
|
|||
|
magentaBright: [95, 39],
|
|||
|
cyanBright: [96, 39],
|
|||
|
whiteBright: [97, 39]
|
|||
|
},
|
|||
|
bgColor: {
|
|||
|
bgBlack: [40, 49],
|
|||
|
bgRed: [41, 49],
|
|||
|
bgGreen: [42, 49],
|
|||
|
bgYellow: [43, 49],
|
|||
|
bgBlue: [44, 49],
|
|||
|
bgMagenta: [45, 49],
|
|||
|
bgCyan: [46, 49],
|
|||
|
bgWhite: [47, 49],
|
|||
|
|
|||
|
// Bright color
|
|||
|
bgBlackBright: [100, 49],
|
|||
|
bgRedBright: [101, 49],
|
|||
|
bgGreenBright: [102, 49],
|
|||
|
bgYellowBright: [103, 49],
|
|||
|
bgBlueBright: [104, 49],
|
|||
|
bgMagentaBright: [105, 49],
|
|||
|
bgCyanBright: [106, 49],
|
|||
|
bgWhiteBright: [107, 49]
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
// Alias bright black as gray (and grey)
|
|||
|
styles.color.gray = styles.color.blackBright;
|
|||
|
styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
|
|||
|
styles.color.grey = styles.color.blackBright;
|
|||
|
styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
|
|||
|
|
|||
|
for (const [groupName, group] of Object.entries(styles)) {
|
|||
|
for (const [styleName, style] of Object.entries(group)) {
|
|||
|
styles[styleName] = {
|
|||
|
open: `\u001B[${style[0]}m`,
|
|||
|
close: `\u001B[${style[1]}m`
|
|||
|
};
|
|||
|
|
|||
|
group[styleName] = styles[styleName];
|
|||
|
|
|||
|
codes.set(style[0], style[1]);
|
|||
|
}
|
|||
|
|
|||
|
Object.defineProperty(styles, groupName, {
|
|||
|
value: group,
|
|||
|
enumerable: false
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
Object.defineProperty(styles, 'codes', {
|
|||
|
value: codes,
|
|||
|
enumerable: false
|
|||
|
});
|
|||
|
|
|||
|
styles.color.close = '\u001B[39m';
|
|||
|
styles.bgColor.close = '\u001B[49m';
|
|||
|
|
|||
|
setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
|
|||
|
setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
|
|||
|
setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
|
|||
|
setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
|
|||
|
|
|||
|
return styles;
|
|||
|
}
|
|||
|
|
|||
|
// Make the export immutable
|
|||
|
Object.defineProperty(module, 'exports', {
|
|||
|
enumerable: true,
|
|||
|
get: assembleStyles
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 29970:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const ansiStyles = __webpack_require__(93666);
|
|||
|
const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(87342);
|
|||
|
const {
|
|||
|
stringReplaceAll,
|
|||
|
stringEncaseCRLFWithFirstIndex
|
|||
|
} = __webpack_require__(6720);
|
|||
|
|
|||
|
const {isArray} = Array;
|
|||
|
|
|||
|
// `supportsColor.level` → `ansiStyles.color[name]` mapping
|
|||
|
const levelMapping = [
|
|||
|
'ansi',
|
|||
|
'ansi',
|
|||
|
'ansi256',
|
|||
|
'ansi16m'
|
|||
|
];
|
|||
|
|
|||
|
const styles = Object.create(null);
|
|||
|
|
|||
|
const applyOptions = (object, options = {}) => {
|
|||
|
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
|||
|
throw new Error('The `level` option should be an integer from 0 to 3');
|
|||
|
}
|
|||
|
|
|||
|
// Detect level if not set manually
|
|||
|
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
|||
|
object.level = options.level === undefined ? colorLevel : options.level;
|
|||
|
};
|
|||
|
|
|||
|
class ChalkClass {
|
|||
|
constructor(options) {
|
|||
|
// eslint-disable-next-line no-constructor-return
|
|||
|
return chalkFactory(options);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
const chalkFactory = options => {
|
|||
|
const chalk = {};
|
|||
|
applyOptions(chalk, options);
|
|||
|
|
|||
|
chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
|
|||
|
|
|||
|
Object.setPrototypeOf(chalk, Chalk.prototype);
|
|||
|
Object.setPrototypeOf(chalk.template, chalk);
|
|||
|
|
|||
|
chalk.template.constructor = () => {
|
|||
|
throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
|
|||
|
};
|
|||
|
|
|||
|
chalk.template.Instance = ChalkClass;
|
|||
|
|
|||
|
return chalk.template;
|
|||
|
};
|
|||
|
|
|||
|
function Chalk(options) {
|
|||
|
return chalkFactory(options);
|
|||
|
}
|
|||
|
|
|||
|
for (const [styleName, style] of Object.entries(ansiStyles)) {
|
|||
|
styles[styleName] = {
|
|||
|
get() {
|
|||
|
const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
|
|||
|
Object.defineProperty(this, styleName, {value: builder});
|
|||
|
return builder;
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
styles.visible = {
|
|||
|
get() {
|
|||
|
const builder = createBuilder(this, this._styler, true);
|
|||
|
Object.defineProperty(this, 'visible', {value: builder});
|
|||
|
return builder;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
|
|||
|
|
|||
|
for (const model of usedModels) {
|
|||
|
styles[model] = {
|
|||
|
get() {
|
|||
|
const {level} = this;
|
|||
|
return function (...arguments_) {
|
|||
|
const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
|
|||
|
return createBuilder(this, styler, this._isEmpty);
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
for (const model of usedModels) {
|
|||
|
const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
|
|||
|
styles[bgModel] = {
|
|||
|
get() {
|
|||
|
const {level} = this;
|
|||
|
return function (...arguments_) {
|
|||
|
const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
|
|||
|
return createBuilder(this, styler, this._isEmpty);
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
const proto = Object.defineProperties(() => {}, {
|
|||
|
...styles,
|
|||
|
level: {
|
|||
|
enumerable: true,
|
|||
|
get() {
|
|||
|
return this._generator.level;
|
|||
|
},
|
|||
|
set(level) {
|
|||
|
this._generator.level = level;
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
const createStyler = (open, close, parent) => {
|
|||
|
let openAll;
|
|||
|
let closeAll;
|
|||
|
if (parent === undefined) {
|
|||
|
openAll = open;
|
|||
|
closeAll = close;
|
|||
|
} else {
|
|||
|
openAll = parent.openAll + open;
|
|||
|
closeAll = close + parent.closeAll;
|
|||
|
}
|
|||
|
|
|||
|
return {
|
|||
|
open,
|
|||
|
close,
|
|||
|
openAll,
|
|||
|
closeAll,
|
|||
|
parent
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
const createBuilder = (self, _styler, _isEmpty) => {
|
|||
|
const builder = (...arguments_) => {
|
|||
|
if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
|
|||
|
// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
|
|||
|
return applyStyle(builder, chalkTag(builder, ...arguments_));
|
|||
|
}
|
|||
|
|
|||
|
// Single argument is hot path, implicit coercion is faster than anything
|
|||
|
// eslint-disable-next-line no-implicit-coercion
|
|||
|
return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
|
|||
|
};
|
|||
|
|
|||
|
// We alter the prototype because we must return a function, but there is
|
|||
|
// no way to create a function with a different prototype
|
|||
|
Object.setPrototypeOf(builder, proto);
|
|||
|
|
|||
|
builder._generator = self;
|
|||
|
builder._styler = _styler;
|
|||
|
builder._isEmpty = _isEmpty;
|
|||
|
|
|||
|
return builder;
|
|||
|
};
|
|||
|
|
|||
|
const applyStyle = (self, string) => {
|
|||
|
if (self.level <= 0 || !string) {
|
|||
|
return self._isEmpty ? '' : string;
|
|||
|
}
|
|||
|
|
|||
|
let styler = self._styler;
|
|||
|
|
|||
|
if (styler === undefined) {
|
|||
|
return string;
|
|||
|
}
|
|||
|
|
|||
|
const {openAll, closeAll} = styler;
|
|||
|
if (string.indexOf('\u001B') !== -1) {
|
|||
|
while (styler !== undefined) {
|
|||
|
// Replace any instances already present with a re-opening code
|
|||
|
// otherwise only the part of the string until said closing code
|
|||
|
// will be colored, and the rest will simply be 'plain'.
|
|||
|
string = stringReplaceAll(string, styler.close, styler.open);
|
|||
|
|
|||
|
styler = styler.parent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// We can move both next actions out of loop, because remaining actions in loop won't have
|
|||
|
// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
|
|||
|
// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
|
|||
|
const lfIndex = string.indexOf('\n');
|
|||
|
if (lfIndex !== -1) {
|
|||
|
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
|||
|
}
|
|||
|
|
|||
|
return openAll + string + closeAll;
|
|||
|
};
|
|||
|
|
|||
|
let template;
|
|||
|
const chalkTag = (chalk, ...strings) => {
|
|||
|
const [firstString] = strings;
|
|||
|
|
|||
|
if (!isArray(firstString) || !isArray(firstString.raw)) {
|
|||
|
// If chalk() was called by itself or with a string,
|
|||
|
// return the string itself as a string.
|
|||
|
return strings.join(' ');
|
|||
|
}
|
|||
|
|
|||
|
const arguments_ = strings.slice(1);
|
|||
|
const parts = [firstString.raw[0]];
|
|||
|
|
|||
|
for (let i = 1; i < firstString.length; i++) {
|
|||
|
parts.push(
|
|||
|
String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
|
|||
|
String(firstString.raw[i])
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
if (template === undefined) {
|
|||
|
template = __webpack_require__(32938);
|
|||
|
}
|
|||
|
|
|||
|
return template(chalk, parts.join(''));
|
|||
|
};
|
|||
|
|
|||
|
Object.defineProperties(Chalk.prototype, styles);
|
|||
|
|
|||
|
const chalk = Chalk(); // eslint-disable-line new-cap
|
|||
|
chalk.supportsColor = stdoutColor;
|
|||
|
chalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
|
|||
|
chalk.stderr.supportsColor = stderrColor;
|
|||
|
|
|||
|
module.exports = chalk;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 32938:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
|
|||
|
const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
|
|||
|
const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
|
|||
|
const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
|
|||
|
|
|||
|
const ESCAPES = new Map([
|
|||
|
['n', '\n'],
|
|||
|
['r', '\r'],
|
|||
|
['t', '\t'],
|
|||
|
['b', '\b'],
|
|||
|
['f', '\f'],
|
|||
|
['v', '\v'],
|
|||
|
['0', '\0'],
|
|||
|
['\\', '\\'],
|
|||
|
['e', '\u001B'],
|
|||
|
['a', '\u0007']
|
|||
|
]);
|
|||
|
|
|||
|
function unescape(c) {
|
|||
|
const u = c[0] === 'u';
|
|||
|
const bracket = c[1] === '{';
|
|||
|
|
|||
|
if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
|
|||
|
return String.fromCharCode(parseInt(c.slice(1), 16));
|
|||
|
}
|
|||
|
|
|||
|
if (u && bracket) {
|
|||
|
return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
|
|||
|
}
|
|||
|
|
|||
|
return ESCAPES.get(c) || c;
|
|||
|
}
|
|||
|
|
|||
|
function parseArguments(name, arguments_) {
|
|||
|
const results = [];
|
|||
|
const chunks = arguments_.trim().split(/\s*,\s*/g);
|
|||
|
let matches;
|
|||
|
|
|||
|
for (const chunk of chunks) {
|
|||
|
const number = Number(chunk);
|
|||
|
if (!Number.isNaN(number)) {
|
|||
|
results.push(number);
|
|||
|
} else if ((matches = chunk.match(STRING_REGEX))) {
|
|||
|
results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
|
|||
|
} else {
|
|||
|
throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return results;
|
|||
|
}
|
|||
|
|
|||
|
function parseStyle(style) {
|
|||
|
STYLE_REGEX.lastIndex = 0;
|
|||
|
|
|||
|
const results = [];
|
|||
|
let matches;
|
|||
|
|
|||
|
while ((matches = STYLE_REGEX.exec(style)) !== null) {
|
|||
|
const name = matches[1];
|
|||
|
|
|||
|
if (matches[2]) {
|
|||
|
const args = parseArguments(name, matches[2]);
|
|||
|
results.push([name].concat(args));
|
|||
|
} else {
|
|||
|
results.push([name]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return results;
|
|||
|
}
|
|||
|
|
|||
|
function buildStyle(chalk, styles) {
|
|||
|
const enabled = {};
|
|||
|
|
|||
|
for (const layer of styles) {
|
|||
|
for (const style of layer.styles) {
|
|||
|
enabled[style[0]] = layer.inverse ? null : style.slice(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
let current = chalk;
|
|||
|
for (const [styleName, styles] of Object.entries(enabled)) {
|
|||
|
if (!Array.isArray(styles)) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if (!(styleName in current)) {
|
|||
|
throw new Error(`Unknown Chalk style: ${styleName}`);
|
|||
|
}
|
|||
|
|
|||
|
current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
|
|||
|
}
|
|||
|
|
|||
|
return current;
|
|||
|
}
|
|||
|
|
|||
|
module.exports = (chalk, temporary) => {
|
|||
|
const styles = [];
|
|||
|
const chunks = [];
|
|||
|
let chunk = [];
|
|||
|
|
|||
|
// eslint-disable-next-line max-params
|
|||
|
temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
|
|||
|
if (escapeCharacter) {
|
|||
|
chunk.push(unescape(escapeCharacter));
|
|||
|
} else if (style) {
|
|||
|
const string = chunk.join('');
|
|||
|
chunk = [];
|
|||
|
chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));
|
|||
|
styles.push({inverse, styles: parseStyle(style)});
|
|||
|
} else if (close) {
|
|||
|
if (styles.length === 0) {
|
|||
|
throw new Error('Found extraneous } in Chalk template literal');
|
|||
|
}
|
|||
|
|
|||
|
chunks.push(buildStyle(chalk, styles)(chunk.join('')));
|
|||
|
chunk = [];
|
|||
|
styles.pop();
|
|||
|
} else {
|
|||
|
chunk.push(character);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
chunks.push(chunk.join(''));
|
|||
|
|
|||
|
if (styles.length > 0) {
|
|||
|
const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
|
|||
|
throw new Error(errMessage);
|
|||
|
}
|
|||
|
|
|||
|
return chunks.join('');
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 6720:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
const stringReplaceAll = (string, substring, replacer) => {
|
|||
|
let index = string.indexOf(substring);
|
|||
|
if (index === -1) {
|
|||
|
return string;
|
|||
|
}
|
|||
|
|
|||
|
const substringLength = substring.length;
|
|||
|
let endIndex = 0;
|
|||
|
let returnValue = '';
|
|||
|
do {
|
|||
|
returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
|
|||
|
endIndex = index + substringLength;
|
|||
|
index = string.indexOf(substring, endIndex);
|
|||
|
} while (index !== -1);
|
|||
|
|
|||
|
returnValue += string.substr(endIndex);
|
|||
|
return returnValue;
|
|||
|
};
|
|||
|
|
|||
|
const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
|
|||
|
let endIndex = 0;
|
|||
|
let returnValue = '';
|
|||
|
do {
|
|||
|
const gotCR = string[index - 1] === '\r';
|
|||
|
returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
|
|||
|
endIndex = index + 1;
|
|||
|
index = string.indexOf('\n', endIndex);
|
|||
|
} while (index !== -1);
|
|||
|
|
|||
|
returnValue += string.substr(endIndex);
|
|||
|
return returnValue;
|
|||
|
};
|
|||
|
|
|||
|
module.exports = {
|
|||
|
stringReplaceAll,
|
|||
|
stringEncaseCRLFWithFirstIndex
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 39626:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
/* MIT license */
|
|||
|
/* eslint-disable no-mixed-operators */
|
|||
|
const cssKeywords = __webpack_require__(22735);
|
|||
|
|
|||
|
// NOTE: conversions should only return primitive values (i.e. arrays, or
|
|||
|
// values that give correct `typeof` results).
|
|||
|
// do not use box values types (i.e. Number(), String(), etc.)
|
|||
|
|
|||
|
const reverseKeywords = {};
|
|||
|
for (const key of Object.keys(cssKeywords)) {
|
|||
|
reverseKeywords[cssKeywords[key]] = key;
|
|||
|
}
|
|||
|
|
|||
|
const convert = {
|
|||
|
rgb: {channels: 3, labels: 'rgb'},
|
|||
|
hsl: {channels: 3, labels: 'hsl'},
|
|||
|
hsv: {channels: 3, labels: 'hsv'},
|
|||
|
hwb: {channels: 3, labels: 'hwb'},
|
|||
|
cmyk: {channels: 4, labels: 'cmyk'},
|
|||
|
xyz: {channels: 3, labels: 'xyz'},
|
|||
|
lab: {channels: 3, labels: 'lab'},
|
|||
|
lch: {channels: 3, labels: 'lch'},
|
|||
|
hex: {channels: 1, labels: ['hex']},
|
|||
|
keyword: {channels: 1, labels: ['keyword']},
|
|||
|
ansi16: {channels: 1, labels: ['ansi16']},
|
|||
|
ansi256: {channels: 1, labels: ['ansi256']},
|
|||
|
hcg: {channels: 3, labels: ['h', 'c', 'g']},
|
|||
|
apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
|
|||
|
gray: {channels: 1, labels: ['gray']}
|
|||
|
};
|
|||
|
|
|||
|
module.exports = convert;
|
|||
|
|
|||
|
// Hide .channels and .labels properties
|
|||
|
for (const model of Object.keys(convert)) {
|
|||
|
if (!('channels' in convert[model])) {
|
|||
|
throw new Error('missing channels property: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
if (!('labels' in convert[model])) {
|
|||
|
throw new Error('missing channel labels property: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
if (convert[model].labels.length !== convert[model].channels) {
|
|||
|
throw new Error('channel and label counts mismatch: ' + model);
|
|||
|
}
|
|||
|
|
|||
|
const {channels, labels} = convert[model];
|
|||
|
delete convert[model].channels;
|
|||
|
delete convert[model].labels;
|
|||
|
Object.defineProperty(convert[model], 'channels', {value: channels});
|
|||
|
Object.defineProperty(convert[model], 'labels', {value: labels});
|
|||
|
}
|
|||
|
|
|||
|
convert.rgb.hsl = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const min = Math.min(r, g, b);
|
|||
|
const max = Math.max(r, g, b);
|
|||
|
const delta = max - min;
|
|||
|
let h;
|
|||
|
let s;
|
|||
|
|
|||
|
if (max === min) {
|
|||
|
h = 0;
|
|||
|
} else if (r === max) {
|
|||
|
h = (g - b) / delta;
|
|||
|
} else if (g === max) {
|
|||
|
h = 2 + (b - r) / delta;
|
|||
|
} else if (b === max) {
|
|||
|
h = 4 + (r - g) / delta;
|
|||
|
}
|
|||
|
|
|||
|
h = Math.min(h * 60, 360);
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 360;
|
|||
|
}
|
|||
|
|
|||
|
const l = (min + max) / 2;
|
|||
|
|
|||
|
if (max === min) {
|
|||
|
s = 0;
|
|||
|
} else if (l <= 0.5) {
|
|||
|
s = delta / (max + min);
|
|||
|
} else {
|
|||
|
s = delta / (2 - max - min);
|
|||
|
}
|
|||
|
|
|||
|
return [h, s * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hsv = function (rgb) {
|
|||
|
let rdif;
|
|||
|
let gdif;
|
|||
|
let bdif;
|
|||
|
let h;
|
|||
|
let s;
|
|||
|
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const v = Math.max(r, g, b);
|
|||
|
const diff = v - Math.min(r, g, b);
|
|||
|
const diffc = function (c) {
|
|||
|
return (v - c) / 6 / diff + 1 / 2;
|
|||
|
};
|
|||
|
|
|||
|
if (diff === 0) {
|
|||
|
h = 0;
|
|||
|
s = 0;
|
|||
|
} else {
|
|||
|
s = diff / v;
|
|||
|
rdif = diffc(r);
|
|||
|
gdif = diffc(g);
|
|||
|
bdif = diffc(b);
|
|||
|
|
|||
|
if (r === v) {
|
|||
|
h = bdif - gdif;
|
|||
|
} else if (g === v) {
|
|||
|
h = (1 / 3) + rdif - bdif;
|
|||
|
} else if (b === v) {
|
|||
|
h = (2 / 3) + gdif - rdif;
|
|||
|
}
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 1;
|
|||
|
} else if (h > 1) {
|
|||
|
h -= 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return [
|
|||
|
h * 360,
|
|||
|
s * 100,
|
|||
|
v * 100
|
|||
|
];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hwb = function (rgb) {
|
|||
|
const r = rgb[0];
|
|||
|
const g = rgb[1];
|
|||
|
let b = rgb[2];
|
|||
|
const h = convert.rgb.hsl(rgb)[0];
|
|||
|
const w = 1 / 255 * Math.min(r, Math.min(g, b));
|
|||
|
|
|||
|
b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
|
|||
|
|
|||
|
return [h, w * 100, b * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.cmyk = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
|
|||
|
const k = Math.min(1 - r, 1 - g, 1 - b);
|
|||
|
const c = (1 - r - k) / (1 - k) || 0;
|
|||
|
const m = (1 - g - k) / (1 - k) || 0;
|
|||
|
const y = (1 - b - k) / (1 - k) || 0;
|
|||
|
|
|||
|
return [c * 100, m * 100, y * 100, k * 100];
|
|||
|
};
|
|||
|
|
|||
|
function comparativeDistance(x, y) {
|
|||
|
/*
|
|||
|
See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
|
|||
|
*/
|
|||
|
return (
|
|||
|
((x[0] - y[0]) ** 2) +
|
|||
|
((x[1] - y[1]) ** 2) +
|
|||
|
((x[2] - y[2]) ** 2)
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
convert.rgb.keyword = function (rgb) {
|
|||
|
const reversed = reverseKeywords[rgb];
|
|||
|
if (reversed) {
|
|||
|
return reversed;
|
|||
|
}
|
|||
|
|
|||
|
let currentClosestDistance = Infinity;
|
|||
|
let currentClosestKeyword;
|
|||
|
|
|||
|
for (const keyword of Object.keys(cssKeywords)) {
|
|||
|
const value = cssKeywords[keyword];
|
|||
|
|
|||
|
// Compute comparative distance
|
|||
|
const distance = comparativeDistance(rgb, value);
|
|||
|
|
|||
|
// Check if its less, if so set as closest
|
|||
|
if (distance < currentClosestDistance) {
|
|||
|
currentClosestDistance = distance;
|
|||
|
currentClosestKeyword = keyword;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return currentClosestKeyword;
|
|||
|
};
|
|||
|
|
|||
|
convert.keyword.rgb = function (keyword) {
|
|||
|
return cssKeywords[keyword];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.xyz = function (rgb) {
|
|||
|
let r = rgb[0] / 255;
|
|||
|
let g = rgb[1] / 255;
|
|||
|
let b = rgb[2] / 255;
|
|||
|
|
|||
|
// Assume sRGB
|
|||
|
r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
|
|||
|
g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
|
|||
|
b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
|
|||
|
|
|||
|
const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
|
|||
|
const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
|
|||
|
const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
|
|||
|
|
|||
|
return [x * 100, y * 100, z * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.lab = function (rgb) {
|
|||
|
const xyz = convert.rgb.xyz(rgb);
|
|||
|
let x = xyz[0];
|
|||
|
let y = xyz[1];
|
|||
|
let z = xyz[2];
|
|||
|
|
|||
|
x /= 95.047;
|
|||
|
y /= 100;
|
|||
|
z /= 108.883;
|
|||
|
|
|||
|
x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
|
|||
|
y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
|
|||
|
z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
|
|||
|
|
|||
|
const l = (116 * y) - 16;
|
|||
|
const a = 500 * (x - y);
|
|||
|
const b = 200 * (y - z);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.rgb = function (hsl) {
|
|||
|
const h = hsl[0] / 360;
|
|||
|
const s = hsl[1] / 100;
|
|||
|
const l = hsl[2] / 100;
|
|||
|
let t2;
|
|||
|
let t3;
|
|||
|
let val;
|
|||
|
|
|||
|
if (s === 0) {
|
|||
|
val = l * 255;
|
|||
|
return [val, val, val];
|
|||
|
}
|
|||
|
|
|||
|
if (l < 0.5) {
|
|||
|
t2 = l * (1 + s);
|
|||
|
} else {
|
|||
|
t2 = l + s - l * s;
|
|||
|
}
|
|||
|
|
|||
|
const t1 = 2 * l - t2;
|
|||
|
|
|||
|
const rgb = [0, 0, 0];
|
|||
|
for (let i = 0; i < 3; i++) {
|
|||
|
t3 = h + 1 / 3 * -(i - 1);
|
|||
|
if (t3 < 0) {
|
|||
|
t3++;
|
|||
|
}
|
|||
|
|
|||
|
if (t3 > 1) {
|
|||
|
t3--;
|
|||
|
}
|
|||
|
|
|||
|
if (6 * t3 < 1) {
|
|||
|
val = t1 + (t2 - t1) * 6 * t3;
|
|||
|
} else if (2 * t3 < 1) {
|
|||
|
val = t2;
|
|||
|
} else if (3 * t3 < 2) {
|
|||
|
val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
|
|||
|
} else {
|
|||
|
val = t1;
|
|||
|
}
|
|||
|
|
|||
|
rgb[i] = val * 255;
|
|||
|
}
|
|||
|
|
|||
|
return rgb;
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.hsv = function (hsl) {
|
|||
|
const h = hsl[0];
|
|||
|
let s = hsl[1] / 100;
|
|||
|
let l = hsl[2] / 100;
|
|||
|
let smin = s;
|
|||
|
const lmin = Math.max(l, 0.01);
|
|||
|
|
|||
|
l *= 2;
|
|||
|
s *= (l <= 1) ? l : 2 - l;
|
|||
|
smin *= lmin <= 1 ? lmin : 2 - lmin;
|
|||
|
const v = (l + s) / 2;
|
|||
|
const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
|
|||
|
|
|||
|
return [h, sv * 100, v * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.rgb = function (hsv) {
|
|||
|
const h = hsv[0] / 60;
|
|||
|
const s = hsv[1] / 100;
|
|||
|
let v = hsv[2] / 100;
|
|||
|
const hi = Math.floor(h) % 6;
|
|||
|
|
|||
|
const f = h - Math.floor(h);
|
|||
|
const p = 255 * v * (1 - s);
|
|||
|
const q = 255 * v * (1 - (s * f));
|
|||
|
const t = 255 * v * (1 - (s * (1 - f)));
|
|||
|
v *= 255;
|
|||
|
|
|||
|
switch (hi) {
|
|||
|
case 0:
|
|||
|
return [v, t, p];
|
|||
|
case 1:
|
|||
|
return [q, v, p];
|
|||
|
case 2:
|
|||
|
return [p, v, t];
|
|||
|
case 3:
|
|||
|
return [p, q, v];
|
|||
|
case 4:
|
|||
|
return [t, p, v];
|
|||
|
case 5:
|
|||
|
return [v, p, q];
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.hsl = function (hsv) {
|
|||
|
const h = hsv[0];
|
|||
|
const s = hsv[1] / 100;
|
|||
|
const v = hsv[2] / 100;
|
|||
|
const vmin = Math.max(v, 0.01);
|
|||
|
let sl;
|
|||
|
let l;
|
|||
|
|
|||
|
l = (2 - s) * v;
|
|||
|
const lmin = (2 - s) * vmin;
|
|||
|
sl = s * vmin;
|
|||
|
sl /= (lmin <= 1) ? lmin : 2 - lmin;
|
|||
|
sl = sl || 0;
|
|||
|
l /= 2;
|
|||
|
|
|||
|
return [h, sl * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
|
|||
|
convert.hwb.rgb = function (hwb) {
|
|||
|
const h = hwb[0] / 360;
|
|||
|
let wh = hwb[1] / 100;
|
|||
|
let bl = hwb[2] / 100;
|
|||
|
const ratio = wh + bl;
|
|||
|
let f;
|
|||
|
|
|||
|
// Wh + bl cant be > 1
|
|||
|
if (ratio > 1) {
|
|||
|
wh /= ratio;
|
|||
|
bl /= ratio;
|
|||
|
}
|
|||
|
|
|||
|
const i = Math.floor(6 * h);
|
|||
|
const v = 1 - bl;
|
|||
|
f = 6 * h - i;
|
|||
|
|
|||
|
if ((i & 0x01) !== 0) {
|
|||
|
f = 1 - f;
|
|||
|
}
|
|||
|
|
|||
|
const n = wh + f * (v - wh); // Linear interpolation
|
|||
|
|
|||
|
let r;
|
|||
|
let g;
|
|||
|
let b;
|
|||
|
/* eslint-disable max-statements-per-line,no-multi-spaces */
|
|||
|
switch (i) {
|
|||
|
default:
|
|||
|
case 6:
|
|||
|
case 0: r = v; g = n; b = wh; break;
|
|||
|
case 1: r = n; g = v; b = wh; break;
|
|||
|
case 2: r = wh; g = v; b = n; break;
|
|||
|
case 3: r = wh; g = n; b = v; break;
|
|||
|
case 4: r = n; g = wh; b = v; break;
|
|||
|
case 5: r = v; g = wh; b = n; break;
|
|||
|
}
|
|||
|
/* eslint-enable max-statements-per-line,no-multi-spaces */
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.cmyk.rgb = function (cmyk) {
|
|||
|
const c = cmyk[0] / 100;
|
|||
|
const m = cmyk[1] / 100;
|
|||
|
const y = cmyk[2] / 100;
|
|||
|
const k = cmyk[3] / 100;
|
|||
|
|
|||
|
const r = 1 - Math.min(1, c * (1 - k) + k);
|
|||
|
const g = 1 - Math.min(1, m * (1 - k) + k);
|
|||
|
const b = 1 - Math.min(1, y * (1 - k) + k);
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.xyz.rgb = function (xyz) {
|
|||
|
const x = xyz[0] / 100;
|
|||
|
const y = xyz[1] / 100;
|
|||
|
const z = xyz[2] / 100;
|
|||
|
let r;
|
|||
|
let g;
|
|||
|
let b;
|
|||
|
|
|||
|
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
|
|||
|
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
|
|||
|
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
|
|||
|
|
|||
|
// Assume sRGB
|
|||
|
r = r > 0.0031308
|
|||
|
? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
|
|||
|
: r * 12.92;
|
|||
|
|
|||
|
g = g > 0.0031308
|
|||
|
? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
|
|||
|
: g * 12.92;
|
|||
|
|
|||
|
b = b > 0.0031308
|
|||
|
? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
|
|||
|
: b * 12.92;
|
|||
|
|
|||
|
r = Math.min(Math.max(0, r), 1);
|
|||
|
g = Math.min(Math.max(0, g), 1);
|
|||
|
b = Math.min(Math.max(0, b), 1);
|
|||
|
|
|||
|
return [r * 255, g * 255, b * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.xyz.lab = function (xyz) {
|
|||
|
let x = xyz[0];
|
|||
|
let y = xyz[1];
|
|||
|
let z = xyz[2];
|
|||
|
|
|||
|
x /= 95.047;
|
|||
|
y /= 100;
|
|||
|
z /= 108.883;
|
|||
|
|
|||
|
x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
|
|||
|
y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
|
|||
|
z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
|
|||
|
|
|||
|
const l = (116 * y) - 16;
|
|||
|
const a = 500 * (x - y);
|
|||
|
const b = 200 * (y - z);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.lab.xyz = function (lab) {
|
|||
|
const l = lab[0];
|
|||
|
const a = lab[1];
|
|||
|
const b = lab[2];
|
|||
|
let x;
|
|||
|
let y;
|
|||
|
let z;
|
|||
|
|
|||
|
y = (l + 16) / 116;
|
|||
|
x = a / 500 + y;
|
|||
|
z = y - b / 200;
|
|||
|
|
|||
|
const y2 = y ** 3;
|
|||
|
const x2 = x ** 3;
|
|||
|
const z2 = z ** 3;
|
|||
|
y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
|
|||
|
x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
|
|||
|
z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
|
|||
|
|
|||
|
x *= 95.047;
|
|||
|
y *= 100;
|
|||
|
z *= 108.883;
|
|||
|
|
|||
|
return [x, y, z];
|
|||
|
};
|
|||
|
|
|||
|
convert.lab.lch = function (lab) {
|
|||
|
const l = lab[0];
|
|||
|
const a = lab[1];
|
|||
|
const b = lab[2];
|
|||
|
let h;
|
|||
|
|
|||
|
const hr = Math.atan2(b, a);
|
|||
|
h = hr * 360 / 2 / Math.PI;
|
|||
|
|
|||
|
if (h < 0) {
|
|||
|
h += 360;
|
|||
|
}
|
|||
|
|
|||
|
const c = Math.sqrt(a * a + b * b);
|
|||
|
|
|||
|
return [l, c, h];
|
|||
|
};
|
|||
|
|
|||
|
convert.lch.lab = function (lch) {
|
|||
|
const l = lch[0];
|
|||
|
const c = lch[1];
|
|||
|
const h = lch[2];
|
|||
|
|
|||
|
const hr = h / 360 * 2 * Math.PI;
|
|||
|
const a = c * Math.cos(hr);
|
|||
|
const b = c * Math.sin(hr);
|
|||
|
|
|||
|
return [l, a, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.ansi16 = function (args, saturation = null) {
|
|||
|
const [r, g, b] = args;
|
|||
|
let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
|
|||
|
|
|||
|
value = Math.round(value / 50);
|
|||
|
|
|||
|
if (value === 0) {
|
|||
|
return 30;
|
|||
|
}
|
|||
|
|
|||
|
let ansi = 30
|
|||
|
+ ((Math.round(b / 255) << 2)
|
|||
|
| (Math.round(g / 255) << 1)
|
|||
|
| Math.round(r / 255));
|
|||
|
|
|||
|
if (value === 2) {
|
|||
|
ansi += 60;
|
|||
|
}
|
|||
|
|
|||
|
return ansi;
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.ansi16 = function (args) {
|
|||
|
// Optimization here; we already know the value and don't need to get
|
|||
|
// it converted for us.
|
|||
|
return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.ansi256 = function (args) {
|
|||
|
const r = args[0];
|
|||
|
const g = args[1];
|
|||
|
const b = args[2];
|
|||
|
|
|||
|
// We use the extended greyscale palette here, with the exception of
|
|||
|
// black and white. normal palette only has 4 greyscale shades.
|
|||
|
if (r === g && g === b) {
|
|||
|
if (r < 8) {
|
|||
|
return 16;
|
|||
|
}
|
|||
|
|
|||
|
if (r > 248) {
|
|||
|
return 231;
|
|||
|
}
|
|||
|
|
|||
|
return Math.round(((r - 8) / 247) * 24) + 232;
|
|||
|
}
|
|||
|
|
|||
|
const ansi = 16
|
|||
|
+ (36 * Math.round(r / 255 * 5))
|
|||
|
+ (6 * Math.round(g / 255 * 5))
|
|||
|
+ Math.round(b / 255 * 5);
|
|||
|
|
|||
|
return ansi;
|
|||
|
};
|
|||
|
|
|||
|
convert.ansi16.rgb = function (args) {
|
|||
|
let color = args % 10;
|
|||
|
|
|||
|
// Handle greyscale
|
|||
|
if (color === 0 || color === 7) {
|
|||
|
if (args > 50) {
|
|||
|
color += 3.5;
|
|||
|
}
|
|||
|
|
|||
|
color = color / 10.5 * 255;
|
|||
|
|
|||
|
return [color, color, color];
|
|||
|
}
|
|||
|
|
|||
|
const mult = (~~(args > 50) + 1) * 0.5;
|
|||
|
const r = ((color & 1) * mult) * 255;
|
|||
|
const g = (((color >> 1) & 1) * mult) * 255;
|
|||
|
const b = (((color >> 2) & 1) * mult) * 255;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.ansi256.rgb = function (args) {
|
|||
|
// Handle greyscale
|
|||
|
if (args >= 232) {
|
|||
|
const c = (args - 232) * 10 + 8;
|
|||
|
return [c, c, c];
|
|||
|
}
|
|||
|
|
|||
|
args -= 16;
|
|||
|
|
|||
|
let rem;
|
|||
|
const r = Math.floor(args / 36) / 5 * 255;
|
|||
|
const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
|
|||
|
const b = (rem % 6) / 5 * 255;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hex = function (args) {
|
|||
|
const integer = ((Math.round(args[0]) & 0xFF) << 16)
|
|||
|
+ ((Math.round(args[1]) & 0xFF) << 8)
|
|||
|
+ (Math.round(args[2]) & 0xFF);
|
|||
|
|
|||
|
const string = integer.toString(16).toUpperCase();
|
|||
|
return '000000'.substring(string.length) + string;
|
|||
|
};
|
|||
|
|
|||
|
convert.hex.rgb = function (args) {
|
|||
|
const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
|
|||
|
if (!match) {
|
|||
|
return [0, 0, 0];
|
|||
|
}
|
|||
|
|
|||
|
let colorString = match[0];
|
|||
|
|
|||
|
if (match[0].length === 3) {
|
|||
|
colorString = colorString.split('').map(char => {
|
|||
|
return char + char;
|
|||
|
}).join('');
|
|||
|
}
|
|||
|
|
|||
|
const integer = parseInt(colorString, 16);
|
|||
|
const r = (integer >> 16) & 0xFF;
|
|||
|
const g = (integer >> 8) & 0xFF;
|
|||
|
const b = integer & 0xFF;
|
|||
|
|
|||
|
return [r, g, b];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.hcg = function (rgb) {
|
|||
|
const r = rgb[0] / 255;
|
|||
|
const g = rgb[1] / 255;
|
|||
|
const b = rgb[2] / 255;
|
|||
|
const max = Math.max(Math.max(r, g), b);
|
|||
|
const min = Math.min(Math.min(r, g), b);
|
|||
|
const chroma = (max - min);
|
|||
|
let grayscale;
|
|||
|
let hue;
|
|||
|
|
|||
|
if (chroma < 1) {
|
|||
|
grayscale = min / (1 - chroma);
|
|||
|
} else {
|
|||
|
grayscale = 0;
|
|||
|
}
|
|||
|
|
|||
|
if (chroma <= 0) {
|
|||
|
hue = 0;
|
|||
|
} else
|
|||
|
if (max === r) {
|
|||
|
hue = ((g - b) / chroma) % 6;
|
|||
|
} else
|
|||
|
if (max === g) {
|
|||
|
hue = 2 + (b - r) / chroma;
|
|||
|
} else {
|
|||
|
hue = 4 + (r - g) / chroma;
|
|||
|
}
|
|||
|
|
|||
|
hue /= 6;
|
|||
|
hue %= 1;
|
|||
|
|
|||
|
return [hue * 360, chroma * 100, grayscale * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsl.hcg = function (hsl) {
|
|||
|
const s = hsl[1] / 100;
|
|||
|
const l = hsl[2] / 100;
|
|||
|
|
|||
|
const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
|
|||
|
|
|||
|
let f = 0;
|
|||
|
if (c < 1.0) {
|
|||
|
f = (l - 0.5 * c) / (1.0 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hsl[0], c * 100, f * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hsv.hcg = function (hsv) {
|
|||
|
const s = hsv[1] / 100;
|
|||
|
const v = hsv[2] / 100;
|
|||
|
|
|||
|
const c = s * v;
|
|||
|
let f = 0;
|
|||
|
|
|||
|
if (c < 1.0) {
|
|||
|
f = (v - c) / (1 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hsv[0], c * 100, f * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.rgb = function (hcg) {
|
|||
|
const h = hcg[0] / 360;
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
if (c === 0.0) {
|
|||
|
return [g * 255, g * 255, g * 255];
|
|||
|
}
|
|||
|
|
|||
|
const pure = [0, 0, 0];
|
|||
|
const hi = (h % 1) * 6;
|
|||
|
const v = hi % 1;
|
|||
|
const w = 1 - v;
|
|||
|
let mg = 0;
|
|||
|
|
|||
|
/* eslint-disable max-statements-per-line */
|
|||
|
switch (Math.floor(hi)) {
|
|||
|
case 0:
|
|||
|
pure[0] = 1; pure[1] = v; pure[2] = 0; break;
|
|||
|
case 1:
|
|||
|
pure[0] = w; pure[1] = 1; pure[2] = 0; break;
|
|||
|
case 2:
|
|||
|
pure[0] = 0; pure[1] = 1; pure[2] = v; break;
|
|||
|
case 3:
|
|||
|
pure[0] = 0; pure[1] = w; pure[2] = 1; break;
|
|||
|
case 4:
|
|||
|
pure[0] = v; pure[1] = 0; pure[2] = 1; break;
|
|||
|
default:
|
|||
|
pure[0] = 1; pure[1] = 0; pure[2] = w;
|
|||
|
}
|
|||
|
/* eslint-enable max-statements-per-line */
|
|||
|
|
|||
|
mg = (1.0 - c) * g;
|
|||
|
|
|||
|
return [
|
|||
|
(c * pure[0] + mg) * 255,
|
|||
|
(c * pure[1] + mg) * 255,
|
|||
|
(c * pure[2] + mg) * 255
|
|||
|
];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hsv = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
const v = c + g * (1.0 - c);
|
|||
|
let f = 0;
|
|||
|
|
|||
|
if (v > 0.0) {
|
|||
|
f = c / v;
|
|||
|
}
|
|||
|
|
|||
|
return [hcg[0], f * 100, v * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hsl = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
|
|||
|
const l = g * (1.0 - c) + 0.5 * c;
|
|||
|
let s = 0;
|
|||
|
|
|||
|
if (l > 0.0 && l < 0.5) {
|
|||
|
s = c / (2 * l);
|
|||
|
} else
|
|||
|
if (l >= 0.5 && l < 1.0) {
|
|||
|
s = c / (2 * (1 - l));
|
|||
|
}
|
|||
|
|
|||
|
return [hcg[0], s * 100, l * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hcg.hwb = function (hcg) {
|
|||
|
const c = hcg[1] / 100;
|
|||
|
const g = hcg[2] / 100;
|
|||
|
const v = c + g * (1.0 - c);
|
|||
|
return [hcg[0], (v - c) * 100, (1 - v) * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.hwb.hcg = function (hwb) {
|
|||
|
const w = hwb[1] / 100;
|
|||
|
const b = hwb[2] / 100;
|
|||
|
const v = 1 - b;
|
|||
|
const c = v - w;
|
|||
|
let g = 0;
|
|||
|
|
|||
|
if (c < 1) {
|
|||
|
g = (v - c) / (1 - c);
|
|||
|
}
|
|||
|
|
|||
|
return [hwb[0], c * 100, g * 100];
|
|||
|
};
|
|||
|
|
|||
|
convert.apple.rgb = function (apple) {
|
|||
|
return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.apple = function (rgb) {
|
|||
|
return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.rgb = function (args) {
|
|||
|
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hsl = function (args) {
|
|||
|
return [0, 0, args[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hsv = convert.gray.hsl;
|
|||
|
|
|||
|
convert.gray.hwb = function (gray) {
|
|||
|
return [0, 100, gray[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.cmyk = function (gray) {
|
|||
|
return [0, 0, 0, gray[0]];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.lab = function (gray) {
|
|||
|
return [gray[0], 0, 0];
|
|||
|
};
|
|||
|
|
|||
|
convert.gray.hex = function (gray) {
|
|||
|
const val = Math.round(gray[0] / 100 * 255) & 0xFF;
|
|||
|
const integer = (val << 16) + (val << 8) + val;
|
|||
|
|
|||
|
const string = integer.toString(16).toUpperCase();
|
|||
|
return '000000'.substring(string.length) + string;
|
|||
|
};
|
|||
|
|
|||
|
convert.rgb.gray = function (rgb) {
|
|||
|
const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
|
|||
|
return [val / 255 * 100];
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 63387:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
const conversions = __webpack_require__(39626);
|
|||
|
const route = __webpack_require__(28309);
|
|||
|
|
|||
|
const convert = {};
|
|||
|
|
|||
|
const models = Object.keys(conversions);
|
|||
|
|
|||
|
function wrapRaw(fn) {
|
|||
|
const wrappedFn = function (...args) {
|
|||
|
const arg0 = args[0];
|
|||
|
if (arg0 === undefined || arg0 === null) {
|
|||
|
return arg0;
|
|||
|
}
|
|||
|
|
|||
|
if (arg0.length > 1) {
|
|||
|
args = arg0;
|
|||
|
}
|
|||
|
|
|||
|
return fn(args);
|
|||
|
};
|
|||
|
|
|||
|
// Preserve .conversion property if there is one
|
|||
|
if ('conversion' in fn) {
|
|||
|
wrappedFn.conversion = fn.conversion;
|
|||
|
}
|
|||
|
|
|||
|
return wrappedFn;
|
|||
|
}
|
|||
|
|
|||
|
function wrapRounded(fn) {
|
|||
|
const wrappedFn = function (...args) {
|
|||
|
const arg0 = args[0];
|
|||
|
|
|||
|
if (arg0 === undefined || arg0 === null) {
|
|||
|
return arg0;
|
|||
|
}
|
|||
|
|
|||
|
if (arg0.length > 1) {
|
|||
|
args = arg0;
|
|||
|
}
|
|||
|
|
|||
|
const result = fn(args);
|
|||
|
|
|||
|
// We're assuming the result is an array here.
|
|||
|
// see notice in conversions.js; don't use box types
|
|||
|
// in conversion functions.
|
|||
|
if (typeof result === 'object') {
|
|||
|
for (let len = result.length, i = 0; i < len; i++) {
|
|||
|
result[i] = Math.round(result[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
};
|
|||
|
|
|||
|
// Preserve .conversion property if there is one
|
|||
|
if ('conversion' in fn) {
|
|||
|
wrappedFn.conversion = fn.conversion;
|
|||
|
}
|
|||
|
|
|||
|
return wrappedFn;
|
|||
|
}
|
|||
|
|
|||
|
models.forEach(fromModel => {
|
|||
|
convert[fromModel] = {};
|
|||
|
|
|||
|
Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
|
|||
|
Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
|
|||
|
|
|||
|
const routes = route(fromModel);
|
|||
|
const routeModels = Object.keys(routes);
|
|||
|
|
|||
|
routeModels.forEach(toModel => {
|
|||
|
const fn = routes[toModel];
|
|||
|
|
|||
|
convert[fromModel][toModel] = wrapRounded(fn);
|
|||
|
convert[fromModel][toModel].raw = wrapRaw(fn);
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
module.exports = convert;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 28309:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
const conversions = __webpack_require__(39626);
|
|||
|
|
|||
|
/*
|
|||
|
This function routes a model to all other models.
|
|||
|
|
|||
|
all functions that are routed have a property `.conversion` attached
|
|||
|
to the returned synthetic function. This property is an array
|
|||
|
of strings, each with the steps in between the 'from' and 'to'
|
|||
|
color models (inclusive).
|
|||
|
|
|||
|
conversions that are not possible simply are not included.
|
|||
|
*/
|
|||
|
|
|||
|
function buildGraph() {
|
|||
|
const graph = {};
|
|||
|
// https://jsperf.com/object-keys-vs-for-in-with-closure/3
|
|||
|
const models = Object.keys(conversions);
|
|||
|
|
|||
|
for (let len = models.length, i = 0; i < len; i++) {
|
|||
|
graph[models[i]] = {
|
|||
|
// http://jsperf.com/1-vs-infinity
|
|||
|
// micro-opt, but this is simple.
|
|||
|
distance: -1,
|
|||
|
parent: null
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return graph;
|
|||
|
}
|
|||
|
|
|||
|
// https://en.wikipedia.org/wiki/Breadth-first_search
|
|||
|
function deriveBFS(fromModel) {
|
|||
|
const graph = buildGraph();
|
|||
|
const queue = [fromModel]; // Unshift -> queue -> pop
|
|||
|
|
|||
|
graph[fromModel].distance = 0;
|
|||
|
|
|||
|
while (queue.length) {
|
|||
|
const current = queue.pop();
|
|||
|
const adjacents = Object.keys(conversions[current]);
|
|||
|
|
|||
|
for (let len = adjacents.length, i = 0; i < len; i++) {
|
|||
|
const adjacent = adjacents[i];
|
|||
|
const node = graph[adjacent];
|
|||
|
|
|||
|
if (node.distance === -1) {
|
|||
|
node.distance = graph[current].distance + 1;
|
|||
|
node.parent = current;
|
|||
|
queue.unshift(adjacent);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return graph;
|
|||
|
}
|
|||
|
|
|||
|
function link(from, to) {
|
|||
|
return function (args) {
|
|||
|
return to(from(args));
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function wrapConversion(toModel, graph) {
|
|||
|
const path = [graph[toModel].parent, toModel];
|
|||
|
let fn = conversions[graph[toModel].parent][toModel];
|
|||
|
|
|||
|
let cur = graph[toModel].parent;
|
|||
|
while (graph[cur].parent) {
|
|||
|
path.unshift(graph[cur].parent);
|
|||
|
fn = link(conversions[graph[cur].parent][cur], fn);
|
|||
|
cur = graph[cur].parent;
|
|||
|
}
|
|||
|
|
|||
|
fn.conversion = path;
|
|||
|
return fn;
|
|||
|
}
|
|||
|
|
|||
|
module.exports = function (fromModel) {
|
|||
|
const graph = deriveBFS(fromModel);
|
|||
|
const conversion = {};
|
|||
|
|
|||
|
const models = Object.keys(graph);
|
|||
|
for (let len = models.length, i = 0; i < len; i++) {
|
|||
|
const toModel = models[i];
|
|||
|
const node = graph[toModel];
|
|||
|
|
|||
|
if (node.parent === null) {
|
|||
|
// No possible conversion, or this node is the source model.
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
conversion[toModel] = wrapConversion(toModel, graph);
|
|||
|
}
|
|||
|
|
|||
|
return conversion;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 22735:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = {
|
|||
|
"aliceblue": [240, 248, 255],
|
|||
|
"antiquewhite": [250, 235, 215],
|
|||
|
"aqua": [0, 255, 255],
|
|||
|
"aquamarine": [127, 255, 212],
|
|||
|
"azure": [240, 255, 255],
|
|||
|
"beige": [245, 245, 220],
|
|||
|
"bisque": [255, 228, 196],
|
|||
|
"black": [0, 0, 0],
|
|||
|
"blanchedalmond": [255, 235, 205],
|
|||
|
"blue": [0, 0, 255],
|
|||
|
"blueviolet": [138, 43, 226],
|
|||
|
"brown": [165, 42, 42],
|
|||
|
"burlywood": [222, 184, 135],
|
|||
|
"cadetblue": [95, 158, 160],
|
|||
|
"chartreuse": [127, 255, 0],
|
|||
|
"chocolate": [210, 105, 30],
|
|||
|
"coral": [255, 127, 80],
|
|||
|
"cornflowerblue": [100, 149, 237],
|
|||
|
"cornsilk": [255, 248, 220],
|
|||
|
"crimson": [220, 20, 60],
|
|||
|
"cyan": [0, 255, 255],
|
|||
|
"darkblue": [0, 0, 139],
|
|||
|
"darkcyan": [0, 139, 139],
|
|||
|
"darkgoldenrod": [184, 134, 11],
|
|||
|
"darkgray": [169, 169, 169],
|
|||
|
"darkgreen": [0, 100, 0],
|
|||
|
"darkgrey": [169, 169, 169],
|
|||
|
"darkkhaki": [189, 183, 107],
|
|||
|
"darkmagenta": [139, 0, 139],
|
|||
|
"darkolivegreen": [85, 107, 47],
|
|||
|
"darkorange": [255, 140, 0],
|
|||
|
"darkorchid": [153, 50, 204],
|
|||
|
"darkred": [139, 0, 0],
|
|||
|
"darksalmon": [233, 150, 122],
|
|||
|
"darkseagreen": [143, 188, 143],
|
|||
|
"darkslateblue": [72, 61, 139],
|
|||
|
"darkslategray": [47, 79, 79],
|
|||
|
"darkslategrey": [47, 79, 79],
|
|||
|
"darkturquoise": [0, 206, 209],
|
|||
|
"darkviolet": [148, 0, 211],
|
|||
|
"deeppink": [255, 20, 147],
|
|||
|
"deepskyblue": [0, 191, 255],
|
|||
|
"dimgray": [105, 105, 105],
|
|||
|
"dimgrey": [105, 105, 105],
|
|||
|
"dodgerblue": [30, 144, 255],
|
|||
|
"firebrick": [178, 34, 34],
|
|||
|
"floralwhite": [255, 250, 240],
|
|||
|
"forestgreen": [34, 139, 34],
|
|||
|
"fuchsia": [255, 0, 255],
|
|||
|
"gainsboro": [220, 220, 220],
|
|||
|
"ghostwhite": [248, 248, 255],
|
|||
|
"gold": [255, 215, 0],
|
|||
|
"goldenrod": [218, 165, 32],
|
|||
|
"gray": [128, 128, 128],
|
|||
|
"green": [0, 128, 0],
|
|||
|
"greenyellow": [173, 255, 47],
|
|||
|
"grey": [128, 128, 128],
|
|||
|
"honeydew": [240, 255, 240],
|
|||
|
"hotpink": [255, 105, 180],
|
|||
|
"indianred": [205, 92, 92],
|
|||
|
"indigo": [75, 0, 130],
|
|||
|
"ivory": [255, 255, 240],
|
|||
|
"khaki": [240, 230, 140],
|
|||
|
"lavender": [230, 230, 250],
|
|||
|
"lavenderblush": [255, 240, 245],
|
|||
|
"lawngreen": [124, 252, 0],
|
|||
|
"lemonchiffon": [255, 250, 205],
|
|||
|
"lightblue": [173, 216, 230],
|
|||
|
"lightcoral": [240, 128, 128],
|
|||
|
"lightcyan": [224, 255, 255],
|
|||
|
"lightgoldenrodyellow": [250, 250, 210],
|
|||
|
"lightgray": [211, 211, 211],
|
|||
|
"lightgreen": [144, 238, 144],
|
|||
|
"lightgrey": [211, 211, 211],
|
|||
|
"lightpink": [255, 182, 193],
|
|||
|
"lightsalmon": [255, 160, 122],
|
|||
|
"lightseagreen": [32, 178, 170],
|
|||
|
"lightskyblue": [135, 206, 250],
|
|||
|
"lightslategray": [119, 136, 153],
|
|||
|
"lightslategrey": [119, 136, 153],
|
|||
|
"lightsteelblue": [176, 196, 222],
|
|||
|
"lightyellow": [255, 255, 224],
|
|||
|
"lime": [0, 255, 0],
|
|||
|
"limegreen": [50, 205, 50],
|
|||
|
"linen": [250, 240, 230],
|
|||
|
"magenta": [255, 0, 255],
|
|||
|
"maroon": [128, 0, 0],
|
|||
|
"mediumaquamarine": [102, 205, 170],
|
|||
|
"mediumblue": [0, 0, 205],
|
|||
|
"mediumorchid": [186, 85, 211],
|
|||
|
"mediumpurple": [147, 112, 219],
|
|||
|
"mediumseagreen": [60, 179, 113],
|
|||
|
"mediumslateblue": [123, 104, 238],
|
|||
|
"mediumspringgreen": [0, 250, 154],
|
|||
|
"mediumturquoise": [72, 209, 204],
|
|||
|
"mediumvioletred": [199, 21, 133],
|
|||
|
"midnightblue": [25, 25, 112],
|
|||
|
"mintcream": [245, 255, 250],
|
|||
|
"mistyrose": [255, 228, 225],
|
|||
|
"moccasin": [255, 228, 181],
|
|||
|
"navajowhite": [255, 222, 173],
|
|||
|
"navy": [0, 0, 128],
|
|||
|
"oldlace": [253, 245, 230],
|
|||
|
"olive": [128, 128, 0],
|
|||
|
"olivedrab": [107, 142, 35],
|
|||
|
"orange": [255, 165, 0],
|
|||
|
"orangered": [255, 69, 0],
|
|||
|
"orchid": [218, 112, 214],
|
|||
|
"palegoldenrod": [238, 232, 170],
|
|||
|
"palegreen": [152, 251, 152],
|
|||
|
"paleturquoise": [175, 238, 238],
|
|||
|
"palevioletred": [219, 112, 147],
|
|||
|
"papayawhip": [255, 239, 213],
|
|||
|
"peachpuff": [255, 218, 185],
|
|||
|
"peru": [205, 133, 63],
|
|||
|
"pink": [255, 192, 203],
|
|||
|
"plum": [221, 160, 221],
|
|||
|
"powderblue": [176, 224, 230],
|
|||
|
"purple": [128, 0, 128],
|
|||
|
"rebeccapurple": [102, 51, 153],
|
|||
|
"red": [255, 0, 0],
|
|||
|
"rosybrown": [188, 143, 143],
|
|||
|
"royalblue": [65, 105, 225],
|
|||
|
"saddlebrown": [139, 69, 19],
|
|||
|
"salmon": [250, 128, 114],
|
|||
|
"sandybrown": [244, 164, 96],
|
|||
|
"seagreen": [46, 139, 87],
|
|||
|
"seashell": [255, 245, 238],
|
|||
|
"sienna": [160, 82, 45],
|
|||
|
"silver": [192, 192, 192],
|
|||
|
"skyblue": [135, 206, 235],
|
|||
|
"slateblue": [106, 90, 205],
|
|||
|
"slategray": [112, 128, 144],
|
|||
|
"slategrey": [112, 128, 144],
|
|||
|
"snow": [255, 250, 250],
|
|||
|
"springgreen": [0, 255, 127],
|
|||
|
"steelblue": [70, 130, 180],
|
|||
|
"tan": [210, 180, 140],
|
|||
|
"teal": [0, 128, 128],
|
|||
|
"thistle": [216, 191, 216],
|
|||
|
"tomato": [255, 99, 71],
|
|||
|
"turquoise": [64, 224, 208],
|
|||
|
"violet": [238, 130, 238],
|
|||
|
"wheat": [245, 222, 179],
|
|||
|
"white": [255, 255, 255],
|
|||
|
"whitesmoke": [245, 245, 245],
|
|||
|
"yellow": [255, 255, 0],
|
|||
|
"yellowgreen": [154, 205, 50]
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 49780:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
module.exports = (flag, argv = process.argv) => {
|
|||
|
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
|
|||
|
const position = argv.indexOf(prefix + flag);
|
|||
|
const terminatorPosition = argv.indexOf('--');
|
|||
|
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 53217:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const ansiRegex = __webpack_require__(14277);
|
|||
|
|
|||
|
module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 87342:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const os = __webpack_require__(12087);
|
|||
|
const tty = __webpack_require__(33867);
|
|||
|
const hasFlag = __webpack_require__(49780);
|
|||
|
|
|||
|
const {env} = process;
|
|||
|
|
|||
|
let forceColor;
|
|||
|
if (hasFlag('no-color') ||
|
|||
|
hasFlag('no-colors') ||
|
|||
|
hasFlag('color=false') ||
|
|||
|
hasFlag('color=never')) {
|
|||
|
forceColor = 0;
|
|||
|
} else if (hasFlag('color') ||
|
|||
|
hasFlag('colors') ||
|
|||
|
hasFlag('color=true') ||
|
|||
|
hasFlag('color=always')) {
|
|||
|
forceColor = 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('FORCE_COLOR' in env) {
|
|||
|
if (env.FORCE_COLOR === 'true') {
|
|||
|
forceColor = 1;
|
|||
|
} else if (env.FORCE_COLOR === 'false') {
|
|||
|
forceColor = 0;
|
|||
|
} else {
|
|||
|
forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function translateLevel(level) {
|
|||
|
if (level === 0) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
return {
|
|||
|
level,
|
|||
|
hasBasic: true,
|
|||
|
has256: level >= 2,
|
|||
|
has16m: level >= 3
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function supportsColor(haveStream, streamIsTTY) {
|
|||
|
if (forceColor === 0) {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
if (hasFlag('color=16m') ||
|
|||
|
hasFlag('color=full') ||
|
|||
|
hasFlag('color=truecolor')) {
|
|||
|
return 3;
|
|||
|
}
|
|||
|
|
|||
|
if (hasFlag('color=256')) {
|
|||
|
return 2;
|
|||
|
}
|
|||
|
|
|||
|
if (haveStream && !streamIsTTY && forceColor === undefined) {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
const min = forceColor || 0;
|
|||
|
|
|||
|
if (env.TERM === 'dumb') {
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
if (process.platform === 'win32') {
|
|||
|
// Windows 10 build 10586 is the first Windows release that supports 256 colors.
|
|||
|
// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
|
|||
|
const osRelease = os.release().split('.');
|
|||
|
if (
|
|||
|
Number(osRelease[0]) >= 10 &&
|
|||
|
Number(osRelease[2]) >= 10586
|
|||
|
) {
|
|||
|
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('CI' in env) {
|
|||
|
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
if ('TEAMCITY_VERSION' in env) {
|
|||
|
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|||
|
}
|
|||
|
|
|||
|
if (env.COLORTERM === 'truecolor') {
|
|||
|
return 3;
|
|||
|
}
|
|||
|
|
|||
|
if ('TERM_PROGRAM' in env) {
|
|||
|
const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
|
|||
|
|
|||
|
switch (env.TERM_PROGRAM) {
|
|||
|
case 'iTerm.app':
|
|||
|
return version >= 3 ? 3 : 2;
|
|||
|
case 'Apple_Terminal':
|
|||
|
return 2;
|
|||
|
// No default
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (/-256(color)?$/i.test(env.TERM)) {
|
|||
|
return 2;
|
|||
|
}
|
|||
|
|
|||
|
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
if ('COLORTERM' in env) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return min;
|
|||
|
}
|
|||
|
|
|||
|
function getSupportLevel(stream) {
|
|||
|
const level = supportsColor(stream, stream && stream.isTTY);
|
|||
|
return translateLevel(level);
|
|||
|
}
|
|||
|
|
|||
|
module.exports = {
|
|||
|
supportsColor: getSupportLevel,
|
|||
|
stdout: translateLevel(supportsColor(true, tty.isatty(1))),
|
|||
|
stderr: translateLevel(supportsColor(true, tty.isatty(2)))
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 71354:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const onetime = __webpack_require__(31322);
|
|||
|
const signalExit = __webpack_require__(27908);
|
|||
|
|
|||
|
module.exports = onetime(() => {
|
|||
|
signalExit(() => {
|
|||
|
process.stderr.write('\u001B[?25h');
|
|||
|
}, {alwaysLast: true});
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 72653:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
module.exports = [
|
|||
|
[ 0x0300, 0x036F ], [ 0x0483, 0x0486 ], [ 0x0488, 0x0489 ],
|
|||
|
[ 0x0591, 0x05BD ], [ 0x05BF, 0x05BF ], [ 0x05C1, 0x05C2 ],
|
|||
|
[ 0x05C4, 0x05C5 ], [ 0x05C7, 0x05C7 ], [ 0x0600, 0x0603 ],
|
|||
|
[ 0x0610, 0x0615 ], [ 0x064B, 0x065E ], [ 0x0670, 0x0670 ],
|
|||
|
[ 0x06D6, 0x06E4 ], [ 0x06E7, 0x06E8 ], [ 0x06EA, 0x06ED ],
|
|||
|
[ 0x070F, 0x070F ], [ 0x0711, 0x0711 ], [ 0x0730, 0x074A ],
|
|||
|
[ 0x07A6, 0x07B0 ], [ 0x07EB, 0x07F3 ], [ 0x0901, 0x0902 ],
|
|||
|
[ 0x093C, 0x093C ], [ 0x0941, 0x0948 ], [ 0x094D, 0x094D ],
|
|||
|
[ 0x0951, 0x0954 ], [ 0x0962, 0x0963 ], [ 0x0981, 0x0981 ],
|
|||
|
[ 0x09BC, 0x09BC ], [ 0x09C1, 0x09C4 ], [ 0x09CD, 0x09CD ],
|
|||
|
[ 0x09E2, 0x09E3 ], [ 0x0A01, 0x0A02 ], [ 0x0A3C, 0x0A3C ],
|
|||
|
[ 0x0A41, 0x0A42 ], [ 0x0A47, 0x0A48 ], [ 0x0A4B, 0x0A4D ],
|
|||
|
[ 0x0A70, 0x0A71 ], [ 0x0A81, 0x0A82 ], [ 0x0ABC, 0x0ABC ],
|
|||
|
[ 0x0AC1, 0x0AC5 ], [ 0x0AC7, 0x0AC8 ], [ 0x0ACD, 0x0ACD ],
|
|||
|
[ 0x0AE2, 0x0AE3 ], [ 0x0B01, 0x0B01 ], [ 0x0B3C, 0x0B3C ],
|
|||
|
[ 0x0B3F, 0x0B3F ], [ 0x0B41, 0x0B43 ], [ 0x0B4D, 0x0B4D ],
|
|||
|
[ 0x0B56, 0x0B56 ], [ 0x0B82, 0x0B82 ], [ 0x0BC0, 0x0BC0 ],
|
|||
|
[ 0x0BCD, 0x0BCD ], [ 0x0C3E, 0x0C40 ], [ 0x0C46, 0x0C48 ],
|
|||
|
[ 0x0C4A, 0x0C4D ], [ 0x0C55, 0x0C56 ], [ 0x0CBC, 0x0CBC ],
|
|||
|
[ 0x0CBF, 0x0CBF ], [ 0x0CC6, 0x0CC6 ], [ 0x0CCC, 0x0CCD ],
|
|||
|
[ 0x0CE2, 0x0CE3 ], [ 0x0D41, 0x0D43 ], [ 0x0D4D, 0x0D4D ],
|
|||
|
[ 0x0DCA, 0x0DCA ], [ 0x0DD2, 0x0DD4 ], [ 0x0DD6, 0x0DD6 ],
|
|||
|
[ 0x0E31, 0x0E31 ], [ 0x0E34, 0x0E3A ], [ 0x0E47, 0x0E4E ],
|
|||
|
[ 0x0EB1, 0x0EB1 ], [ 0x0EB4, 0x0EB9 ], [ 0x0EBB, 0x0EBC ],
|
|||
|
[ 0x0EC8, 0x0ECD ], [ 0x0F18, 0x0F19 ], [ 0x0F35, 0x0F35 ],
|
|||
|
[ 0x0F37, 0x0F37 ], [ 0x0F39, 0x0F39 ], [ 0x0F71, 0x0F7E ],
|
|||
|
[ 0x0F80, 0x0F84 ], [ 0x0F86, 0x0F87 ], [ 0x0F90, 0x0F97 ],
|
|||
|
[ 0x0F99, 0x0FBC ], [ 0x0FC6, 0x0FC6 ], [ 0x102D, 0x1030 ],
|
|||
|
[ 0x1032, 0x1032 ], [ 0x1036, 0x1037 ], [ 0x1039, 0x1039 ],
|
|||
|
[ 0x1058, 0x1059 ], [ 0x1160, 0x11FF ], [ 0x135F, 0x135F ],
|
|||
|
[ 0x1712, 0x1714 ], [ 0x1732, 0x1734 ], [ 0x1752, 0x1753 ],
|
|||
|
[ 0x1772, 0x1773 ], [ 0x17B4, 0x17B5 ], [ 0x17B7, 0x17BD ],
|
|||
|
[ 0x17C6, 0x17C6 ], [ 0x17C9, 0x17D3 ], [ 0x17DD, 0x17DD ],
|
|||
|
[ 0x180B, 0x180D ], [ 0x18A9, 0x18A9 ], [ 0x1920, 0x1922 ],
|
|||
|
[ 0x1927, 0x1928 ], [ 0x1932, 0x1932 ], [ 0x1939, 0x193B ],
|
|||
|
[ 0x1A17, 0x1A18 ], [ 0x1B00, 0x1B03 ], [ 0x1B34, 0x1B34 ],
|
|||
|
[ 0x1B36, 0x1B3A ], [ 0x1B3C, 0x1B3C ], [ 0x1B42, 0x1B42 ],
|
|||
|
[ 0x1B6B, 0x1B73 ], [ 0x1DC0, 0x1DCA ], [ 0x1DFE, 0x1DFF ],
|
|||
|
[ 0x200B, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2063 ],
|
|||
|
[ 0x206A, 0x206F ], [ 0x20D0, 0x20EF ], [ 0x302A, 0x302F ],
|
|||
|
[ 0x3099, 0x309A ], [ 0xA806, 0xA806 ], [ 0xA80B, 0xA80B ],
|
|||
|
[ 0xA825, 0xA826 ], [ 0xFB1E, 0xFB1E ], [ 0xFE00, 0xFE0F ],
|
|||
|
[ 0xFE20, 0xFE23 ], [ 0xFEFF, 0xFEFF ], [ 0xFFF9, 0xFFFB ],
|
|||
|
[ 0x10A01, 0x10A03 ], [ 0x10A05, 0x10A06 ], [ 0x10A0C, 0x10A0F ],
|
|||
|
[ 0x10A38, 0x10A3A ], [ 0x10A3F, 0x10A3F ], [ 0x1D167, 0x1D169 ],
|
|||
|
[ 0x1D173, 0x1D182 ], [ 0x1D185, 0x1D18B ], [ 0x1D1AA, 0x1D1AD ],
|
|||
|
[ 0x1D242, 0x1D244 ], [ 0xE0001, 0xE0001 ], [ 0xE0020, 0xE007F ],
|
|||
|
[ 0xE0100, 0xE01EF ]
|
|||
|
]
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 71011:
|
|||
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
|
|||
|
var defaults = __webpack_require__(34575)
|
|||
|
var combining = __webpack_require__(72653)
|
|||
|
|
|||
|
var DEFAULTS = {
|
|||
|
nul: 0,
|
|||
|
control: 0
|
|||
|
}
|
|||
|
|
|||
|
module.exports = function wcwidth(str) {
|
|||
|
return wcswidth(str, DEFAULTS)
|
|||
|
}
|
|||
|
|
|||
|
module.exports.config = function(opts) {
|
|||
|
opts = defaults(opts || {}, DEFAULTS)
|
|||
|
return function wcwidth(str) {
|
|||
|
return wcswidth(str, opts)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* The following functions define the column width of an ISO 10646
|
|||
|
* character as follows:
|
|||
|
* - The null character (U+0000) has a column width of 0.
|
|||
|
* - Other C0/C1 control characters and DEL will lead to a return value
|
|||
|
* of -1.
|
|||
|
* - Non-spacing and enclosing combining characters (general category
|
|||
|
* code Mn or Me in the
|
|||
|
* Unicode database) have a column width of 0.
|
|||
|
* - SOFT HYPHEN (U+00AD) has a column width of 1.
|
|||
|
* - Other format characters (general category code Cf in the Unicode
|
|||
|
* database) and ZERO WIDTH
|
|||
|
* SPACE (U+200B) have a column width of 0.
|
|||
|
* - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
|
|||
|
* have a column width of 0.
|
|||
|
* - Spacing characters in the East Asian Wide (W) or East Asian
|
|||
|
* Full-width (F) category as
|
|||
|
* defined in Unicode Technical Report #11 have a column width of 2.
|
|||
|
* - All remaining characters (including all printable ISO 8859-1 and
|
|||
|
* WGL4 characters, Unicode control characters, etc.) have a column
|
|||
|
* width of 1.
|
|||
|
* This implementation assumes that characters are encoded in ISO 10646.
|
|||
|
*/
|
|||
|
|
|||
|
function wcswidth(str, opts) {
|
|||
|
if (typeof str !== 'string') return wcwidth(str, opts)
|
|||
|
|
|||
|
var s = 0
|
|||
|
for (var i = 0; i < str.length; i++) {
|
|||
|
var n = wcwidth(str.charCodeAt(i), opts)
|
|||
|
if (n < 0) return -1
|
|||
|
s += n
|
|||
|
}
|
|||
|
|
|||
|
return s
|
|||
|
}
|
|||
|
|
|||
|
function wcwidth(ucs, opts) {
|
|||
|
// test for 8-bit control characters
|
|||
|
if (ucs === 0) return opts.nul
|
|||
|
if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return opts.control
|
|||
|
|
|||
|
// binary search in table of non-spacing characters
|
|||
|
if (bisearch(ucs)) return 0
|
|||
|
|
|||
|
// if we arrive here, ucs is not a combining or C0/C1 control character
|
|||
|
return 1 +
|
|||
|
(ucs >= 0x1100 &&
|
|||
|
(ucs <= 0x115f || // Hangul Jamo init. consonants
|
|||
|
ucs == 0x2329 || ucs == 0x232a ||
|
|||
|
(ucs >= 0x2e80 && ucs <= 0xa4cf &&
|
|||
|
ucs != 0x303f) || // CJK ... Yi
|
|||
|
(ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables
|
|||
|
(ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compatibility Ideographs
|
|||
|
(ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms
|
|||
|
(ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compatibility Forms
|
|||
|
(ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms
|
|||
|
(ucs >= 0xffe0 && ucs <= 0xffe6) ||
|
|||
|
(ucs >= 0x20000 && ucs <= 0x2fffd) ||
|
|||
|
(ucs >= 0x30000 && ucs <= 0x3fffd)));
|
|||
|
}
|
|||
|
|
|||
|
function bisearch(ucs) {
|
|||
|
var min = 0
|
|||
|
var max = combining.length - 1
|
|||
|
var mid
|
|||
|
|
|||
|
if (ucs < combining[0][0] || ucs > combining[max][1]) return false
|
|||
|
|
|||
|
while (max >= min) {
|
|||
|
mid = Math.floor((min + max) / 2)
|
|||
|
if (ucs > combining[mid][1]) min = mid + 1
|
|||
|
else if (ucs < combining[mid][0]) max = mid - 1
|
|||
|
else return true
|
|||
|
}
|
|||
|
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ 26374:
|
|||
|
/***/ ((module) => {
|
|||
|
|
|||
|
"use strict";
|
|||
|
module.exports = JSON.parse('{"dots":{"interval":80,"frames":["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"]},"dots2":{"interval":80,"frames":["⣾","⣽","⣻","⢿","⡿","⣟","⣯","⣷"]},"dots3":{"interval":80,"frames":["⠋","⠙","⠚","⠞","⠖","⠦","⠴","⠲","⠳","⠓"]},"dots4":{"interval":80,"frames":["⠄","⠆","⠇","⠋","⠙","⠸","⠰","⠠","⠰","⠸","⠙","⠋","⠇","⠆"]},"dots5":{"interval":80,"frames":["⠋","⠙","⠚","⠒","⠂","⠂","⠒","⠲","⠴","⠦","⠖","⠒","⠐","⠐","⠒","⠓","⠋"]},"dots6":{"interval":80,"frames":["⠁","⠉","⠙","⠚","⠒","⠂","⠂","⠒","⠲","⠴","⠤","⠄","⠄","⠤","⠴","⠲","⠒","⠂","⠂","⠒","⠚","⠙","⠉","⠁"]},"dots7":{"interval":80,"frames":["⠈","⠉","⠋","⠓","⠒","⠐","⠐","⠒","⠖","⠦","⠤","⠠","⠠","⠤","⠦","⠖","⠒","⠐","⠐","⠒","⠓","⠋","⠉","⠈"]},"dots8":{"interval":80,"frames":["⠁","⠁","⠉","⠙","⠚","⠒","⠂","⠂","⠒","⠲","⠴","⠤","⠄","⠄","⠤","⠠","⠠","⠤","⠦","⠖","⠒","⠐","⠐","⠒","⠓","⠋","⠉","⠈","⠈"]},"dots9":{"interval":80,"frames":["⢹","⢺","⢼","⣸","⣇","⡧","⡗","⡏"]},"dots10":{"interval":80,"frames":["⢄","⢂","⢁","⡁","⡈","⡐","⡠"]},"dots11":{"interval":100,"frames":["⠁","⠂","⠄","⡀","⢀","⠠","⠐","⠈"]},"dots12":{"interval":80,"frames":["⢀⠀","⡀⠀","⠄⠀","⢂⠀","⡂⠀","⠅⠀","⢃⠀","⡃⠀","⠍⠀","⢋⠀","⡋⠀","⠍⠁","⢋⠁","⡋⠁","⠍⠉","⠋⠉","⠋⠉","⠉⠙","⠉⠙","⠉⠩","⠈⢙","⠈⡙","⢈⠩","⡀⢙","⠄⡙","⢂⠩","⡂⢘","⠅⡘","⢃⠨","⡃⢐","⠍⡐","⢋⠠","⡋⢀","⠍⡁","⢋⠁","⡋⠁","⠍⠉","⠋⠉","⠋⠉","⠉⠙","⠉⠙","⠉⠩","⠈⢙","⠈⡙","⠈⠩","⠀⢙","⠀⡙","⠀⠩","⠀⢘","⠀⡘","⠀⠨","⠀⢐","⠀⡐","⠀⠠","⠀⢀","⠀⡀"]},"dots8Bit":{"interval":80,"frames":["⠀","⠁","⠂","⠃","⠄","⠅","⠆","⠇","⡀","⡁","⡂","⡃","⡄","⡅","⡆","⡇","⠈","⠉","⠊","⠋","⠌","⠍","⠎","⠏","⡈","⡉","⡊","⡋","⡌","⡍","⡎","⡏","⠐","⠑","⠒","⠓","⠔","⠕","⠖","⠗","⡐","⡑","⡒","⡓","⡔","⡕","⡖","⡗","⠘","⠙","⠚","⠛","⠜","⠝","⠞","⠟","⡘","⡙","⡚","⡛","⡜","⡝","⡞","⡟","⠠","⠡","⠢","⠣","⠤","⠥","⠦","⠧","⡠","⡡","⡢","⡣","⡤","⡥","⡦","⡧","⠨","⠩","⠪","⠫","⠬","⠭","⠮","⠯","⡨","⡩","⡪","⡫","⡬","⡭","⡮","⡯","⠰","⠱","⠲","⠳","⠴","⠵","⠶","⠷","⡰","⡱","⡲","⡳","⡴","⡵","⡶","⡷","⠸","⠹","⠺","⠻","⠼","⠽","⠾","⠿","⡸","⡹","⡺","⡻","⡼","⡽","⡾","⡿","⢀","⢁","⢂","⢃","⢄","⢅","⢆","⢇","⣀","⣁","⣂","⣃","⣄","⣅","⣆","⣇","⢈","⢉","⢊","⢋","⢌","⢍","⢎","⢏","⣈","⣉","⣊","⣋","⣌","⣍","⣎","⣏","⢐","⢑","⢒","⢓","⢔","⢕","⢖","⢗","⣐","⣑","⣒","⣓","⣔","⣕","⣖","⣗","⢘","⢙","⢚","⢛","⢜","⢝","⢞","⢟","⣘","⣙","⣚","⣛","⣜","⣝","⣞","⣟","⢠","⢡","⢢","⢣","⢤","⢥","⢦","⢧","⣠","⣡","⣢","⣣","⣤","⣥","⣦","⣧","⢨","⢩","⢪","⢫","⢬","⢭","⢮","⢯","⣨","⣩","⣪","⣫","⣬","⣭","⣮","⣯","⢰","⢱","⢲","⢳","⢴","⢵","⢶","⢷","⣰","⣱","⣲","⣳","⣴","⣵","⣶","⣷","⢸","⢹","⢺","⢻","⢼","⢽","⢾","⢿","⣸","⣹","⣺","⣻","⣼","⣽","⣾","⣿"]},"line":{"interval":130,"frames":["-","\\\\","|","/"]},"line2":{"interval":100,"frames":["⠂","-","–","—","–","-"]},"pipe":{"interval":100,"frames":["┤","┘","┴","└","├","┌","┬","┐"]},"simpleDots":{"interval":400,"frames":[". ",".. ","..."," "]},"simpleDotsScrolling":{"interval":200,"frames":[". ",".. ","..."," .."," ."," "]},"star":{"interval":70,"frames":["✶","✸","✹","✺","✹","✷"]},"star2":{"interval":80,"frames":["+","x","*"]},"flip":{"interval":70,"frames":["_","_","_","-","`","`","\'","´","-","_","_","_"]},"hamburger":{"interval":100,"frames":["☱","☲","<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
/***/ })
|
|||
|
|
|||
|
};
|
|||
|
;
|
|||
|
//# sourceMappingURL=395.index.js.map
|