UNPKG

create-nexd-app

Version:
1,752 lines (1,393 loc) 292 kB
exports.id = 977; exports.ids = [977]; exports.modules = { /***/ 546: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const cp = __webpack_require__(5317); const parse = __webpack_require__(7877); const enoent = __webpack_require__(6469); function spawn(command, args, options) { // Parse the arguments const parsed = parse(command, args, options); // Spawn the child process const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); // Hook into child process "exit" event to emit an error if the command // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 enoent.hookChildProcess(spawned, parsed); return spawned; } function spawnSync(command, args, options) { // Parse the arguments const parsed = parse(command, args, options); // Spawn the child process const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); return result; } module.exports = spawn; module.exports.spawn = spawn; module.exports.sync = spawnSync; module.exports._parse = parse; module.exports._enoent = enoent; /***/ }), /***/ 6469: /***/ ((module) => { "use strict"; const isWin = process.platform === 'win32'; function notFoundError(original, syscall) { return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { code: 'ENOENT', errno: 'ENOENT', syscall: `${syscall} ${original.command}`, path: original.command, spawnargs: original.args, }); } function hookChildProcess(cp, parsed) { if (!isWin) { return; } const originalEmit = cp.emit; cp.emit = function (name, arg1) { // If emitting "exit" event and exit code is 1, we need to check if // the command exists and emit an "error" instead // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 if (name === 'exit') { const err = verifyENOENT(arg1, parsed); if (err) { return originalEmit.call(cp, 'error', err); } } return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params }; } function verifyENOENT(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, 'spawn'); } return null; } function verifyENOENTSync(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, 'spawnSync'); } return null; } module.exports = { hookChildProcess, verifyENOENT, verifyENOENTSync, notFoundError, }; /***/ }), /***/ 7877: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const path = __webpack_require__(6928); const resolveCommand = __webpack_require__(4866); const escape = __webpack_require__(2164); const readShebang = __webpack_require__(599); const isWin = process.platform === 'win32'; const isExecutableRegExp = /\.(?:com|exe)$/i; const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; function detectShebang(parsed) { parsed.file = resolveCommand(parsed); const shebang = parsed.file && readShebang(parsed.file); if (shebang) { parsed.args.unshift(parsed.file); parsed.command = shebang; return resolveCommand(parsed); } return parsed.file; } function parseNonShell(parsed) { if (!isWin) { return parsed; } // Detect & add support for shebangs const commandFile = detectShebang(parsed); // We don't need a shell if the command filename is an executable const needsShell = !isExecutableRegExp.test(commandFile); // If a shell is required, use cmd.exe and take care of escaping everything correctly // Note that `forceShell` is an hidden option used only in tests if (parsed.options.forceShell || needsShell) { // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, // we need to double escape them const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) // This is necessary otherwise it will always fail with ENOENT in those cases parsed.command = path.normalize(parsed.command); // Escape command & arguments parsed.command = escape.command(parsed.command); parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); const shellCommand = [parsed.command].concat(parsed.args).join(' '); parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; parsed.command = process.env.comspec || 'cmd.exe'; parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped } return parsed; } function parse(command, args, options) { // Normalize arguments, similar to nodejs if (args && !Array.isArray(args)) { options = args; args = null; } args = args ? args.slice(0) : []; // Clone array to avoid changing the original options = Object.assign({}, options); // Clone object to avoid changing the original // Build our parsed object const parsed = { command, args, options, file: undefined, original: { command, args, }, }; // Delegate further parsing to shell or non-shell return options.shell ? parsed : parseNonShell(parsed); } module.exports = parse; /***/ }), /***/ 2164: /***/ ((module) => { "use strict"; // See http://www.robvanderwoude.com/escapechars.php const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; function escapeCommand(arg) { // Escape meta chars arg = arg.replace(metaCharsRegExp, '^$1'); return arg; } function escapeArgument(arg, doubleEscapeMetaChars) { // Convert to string arg = `${arg}`; // Algorithm below is based on https://qntm.org/cmd // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information // Sequence of backslashes followed by a double quote: // double up all the backslashes and escape the double quote arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'); // Sequence of backslashes followed by the end of the string // (which will become a double quote later): // double up all the backslashes arg = arg.replace(/(?=(\\+?)?)\1$/, '$1$1'); // All other backslashes occur literally // Quote the whole thing: arg = `"${arg}"`; // Escape meta chars arg = arg.replace(metaCharsRegExp, '^$1'); // Double escape meta chars if necessary if (doubleEscapeMetaChars) { arg = arg.replace(metaCharsRegExp, '^$1'); } return arg; } module.exports.command = escapeCommand; module.exports.argument = escapeArgument; /***/ }), /***/ 599: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const fs = __webpack_require__(9896); const shebangCommand = __webpack_require__(9152); function readShebang(command) { // Read the first 150 bytes from the file const size = 150; const buffer = Buffer.alloc(size); let fd; try { fd = fs.openSync(command, 'r'); fs.readSync(fd, buffer, 0, size, 0); fs.closeSync(fd); } catch (e) { /* Empty */ } // Attempt to extract shebang (null is returned if not a shebang) return shebangCommand(buffer.toString()); } module.exports = readShebang; /***/ }), /***/ 4866: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const path = __webpack_require__(6928); const which = __webpack_require__(6848); const getPathKey = __webpack_require__(6689); function resolveCommandAttempt(parsed, withoutPathExt) { const env = parsed.options.env || process.env; const cwd = process.cwd(); const hasCustomCwd = parsed.options.cwd != null; // Worker threads do not have process.chdir() const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled; // If a custom `cwd` was specified, we need to change the process cwd // because `which` will do stat calls but does not support a custom cwd if (shouldSwitchCwd) { try { process.chdir(parsed.options.cwd); } catch (err) { /* Empty */ } } let resolved; try { resolved = which.sync(parsed.command, { path: env[getPathKey({ env })], pathExt: withoutPathExt ? path.delimiter : undefined, }); } catch (e) { /* Empty */ } finally { if (shouldSwitchCwd) { process.chdir(cwd); } } // If we successfully resolved, ensure that an absolute path is returned // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it if (resolved) { resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); } return resolved; } function resolveCommand(parsed) { return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); } module.exports = resolveCommand; /***/ }), /***/ 2940: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var fs = __webpack_require__(9896) var core if (process.platform === 'win32' || global.TESTING_WINDOWS) { core = __webpack_require__(9225) } else { core = __webpack_require__(1025) } module.exports = isexe isexe.sync = sync function isexe (path, options, cb) { if (typeof options === 'function') { cb = options options = {} } if (!cb) { if (typeof Promise !== 'function') { throw new TypeError('callback not provided') } return new Promise(function (resolve, reject) { isexe(path, options || {}, function (er, is) { if (er) { reject(er) } else { resolve(is) } }) }) } core(path, options || {}, function (er, is) { // ignore EACCES because that just means we aren't allowed to run it if (er) { if (er.code === 'EACCES' || options && options.ignoreErrors) { er = null is = false } } cb(er, is) }) } function sync (path, options) { // my kingdom for a filtered catch try { return core.sync(path, options || {}) } catch (er) { if (options && options.ignoreErrors || er.code === 'EACCES') { return false } else { throw er } } } /***/ }), /***/ 1025: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = isexe isexe.sync = sync var fs = __webpack_require__(9896) function isexe (path, options, cb) { fs.stat(path, function (er, stat) { cb(er, er ? false : checkStat(stat, options)) }) } function sync (path, options) { return checkStat(fs.statSync(path), options) } function checkStat (stat, options) { return stat.isFile() && checkMode(stat, options) } function checkMode (stat, options) { var mod = stat.mode var uid = stat.uid var gid = stat.gid var myUid = options.uid !== undefined ? options.uid : process.getuid && process.getuid() var myGid = options.gid !== undefined ? options.gid : process.getgid && process.getgid() var u = parseInt('100', 8) var g = parseInt('010', 8) var o = parseInt('001', 8) var ug = u | g var ret = (mod & o) || (mod & g) && gid === myGid || (mod & u) && uid === myUid || (mod & ug) && myUid === 0 return ret } /***/ }), /***/ 9225: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = isexe isexe.sync = sync var fs = __webpack_require__(9896) function checkPathExt (path, options) { var pathext = options.pathExt !== undefined ? options.pathExt : process.env.PATHEXT if (!pathext) { return true } pathext = pathext.split(';') if (pathext.indexOf('') !== -1) { return true } for (var i = 0; i < pathext.length; i++) { var p = pathext[i].toLowerCase() if (p && path.substr(-p.length).toLowerCase() === p) { return true } } return false } function checkStat (stat, path, options) { if (!stat.isSymbolicLink() && !stat.isFile()) { return false } return checkPathExt(path, options) } function isexe (path, options, cb) { fs.stat(path, function (er, stat) { cb(er, er ? false : checkStat(stat, path, options)) }) } function sync (path, options) { return checkStat(fs.statSync(path), path, options) } /***/ }), /***/ 6689: /***/ ((module) => { "use strict"; const pathKey = (options = {}) => { const environment = options.env || process.env; const platform = options.platform || process.platform; if (platform !== 'win32') { return 'PATH'; } return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path'; }; module.exports = pathKey; // TODO: Remove this for the next major release module.exports["default"] = pathKey; /***/ }), /***/ 9152: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const shebangRegex = __webpack_require__(7334); module.exports = (string = '') => { const match = string.match(shebangRegex); if (!match) { return null; } const [path, argument] = match[0].replace(/#! ?/, '').split(' '); const binary = path.split('/').pop(); if (binary === 'env') { return argument; } return argument ? `${binary} ${argument}` : binary; }; /***/ }), /***/ 7334: /***/ ((module) => { "use strict"; module.exports = /^#!(.*)/; /***/ }), /***/ 6848: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const isWindows = process.platform === 'win32' || process.env.OSTYPE === 'cygwin' || process.env.OSTYPE === 'msys' const path = __webpack_require__(6928) const COLON = isWindows ? ';' : ':' const isexe = __webpack_require__(2940) const getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) const getPathInfo = (cmd, opt) => { const colon = opt.colon || COLON // If it has a slash, then we don't bother searching the pathenv. // just check the file itself, and that's it. const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] : ( [ // windows always checks the cwd first ...(isWindows ? [process.cwd()] : []), ...(opt.path || process.env.PATH || /* istanbul ignore next: very unusual */ '').split(colon), ] ) const pathExtExe = isWindows ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' : '' const pathExt = isWindows ? pathExtExe.split(colon) : [''] if (isWindows) { if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') pathExt.unshift('') } return { pathEnv, pathExt, pathExtExe, } } const which = (cmd, opt, cb) => { if (typeof opt === 'function') { cb = opt opt = {} } if (!opt) opt = {} const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) const found = [] const step = i => new Promise((resolve, reject) => { if (i === pathEnv.length) return opt.all && found.length ? resolve(found) : reject(getNotFoundError(cmd)) const ppRaw = pathEnv[i] const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw const pCmd = path.join(pathPart, cmd) const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd resolve(subStep(p, i, 0)) }) const subStep = (p, i, ii) => new Promise((resolve, reject) => { if (ii === pathExt.length) return resolve(step(i + 1)) const ext = pathExt[ii] isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { if (!er && is) { if (opt.all) found.push(p + ext) else return resolve(p + ext) } return resolve(subStep(p, i, ii + 1)) }) }) return cb ? step(0).then(res => cb(null, res), cb) : step(0) } const whichSync = (cmd, opt) => { opt = opt || {} const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) const found = [] for (let i = 0; i < pathEnv.length; i ++) { const ppRaw = pathEnv[i] const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw const pCmd = path.join(pathPart, cmd) const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd for (let j = 0; j < pathExt.length; j ++) { const cur = p + pathExt[j] try { const is = isexe.sync(cur, { pathExt: pathExtExe }) if (is) { if (opt.all) found.push(cur) else return cur } } catch (ex) {} } } if (opt.all && found.length) return found if (opt.nothrow) return null throw getNotFoundError(cmd) } module.exports = which which.sync = whichSync /***/ }), /***/ 6977: /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { $: () => (/* binding */ $), ExecaError: () => (/* reexport */ ExecaError), ExecaSyncError: () => (/* reexport */ ExecaSyncError), execa: () => (/* binding */ execa), execaCommand: () => (/* binding */ execaCommand), execaCommandSync: () => (/* binding */ execaCommandSync), execaNode: () => (/* binding */ execaNode), execaSync: () => (/* binding */ execaSync), getCancelSignal: () => (/* binding */ execa_getCancelSignal), getEachMessage: () => (/* binding */ execa_getEachMessage), getOneMessage: () => (/* binding */ execa_getOneMessage), parseCommandString: () => (/* reexport */ parseCommandString), sendMessage: () => (/* binding */ execa_sendMessage) }); ;// CONCATENATED MODULE: ./node_modules/is-plain-obj/index.js function isPlainObject(value) { if (typeof value !== 'object' || value === null) { return false; } const prototype = Object.getPrototypeOf(value); return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); } // EXTERNAL MODULE: external "node:url" var external_node_url_ = __webpack_require__(3136); ;// CONCATENATED MODULE: ./node_modules/execa/lib/arguments/file-url.js // Allow some arguments/options to be either a file path string or a file URL const safeNormalizeFileUrl = (file, name) => { const fileString = normalizeFileUrl(normalizeDenoExecPath(file)); if (typeof fileString !== 'string') { throw new TypeError(`${name} must be a string or a file URL: ${fileString}.`); } return fileString; }; // In Deno node:process execPath is a special object, not just a string: // https://github.com/denoland/deno/blob/f460188e583f00144000aa0d8ade08218d47c3c1/ext/node/polyfills/process.ts#L344 const normalizeDenoExecPath = file => isDenoExecPath(file) ? file.toString() : file; const isDenoExecPath = file => typeof file !== 'string' && file && Object.getPrototypeOf(file) === String.prototype; // Same but also allows other values, e.g. `boolean` for the `shell` option const normalizeFileUrl = file => file instanceof URL ? (0,external_node_url_.fileURLToPath)(file) : file; ;// CONCATENATED MODULE: ./node_modules/execa/lib/methods/parameters.js // The command `arguments` and `options` are both optional. // This also does basic validation on them and on the command file. const normalizeParameters = (rawFile, rawArguments = [], rawOptions = {}) => { const filePath = safeNormalizeFileUrl(rawFile, 'First argument'); const [commandArguments, options] = isPlainObject(rawArguments) ? [[], rawArguments] : [rawArguments, rawOptions]; if (!Array.isArray(commandArguments)) { throw new TypeError(`Second argument must be either an array of arguments or an options object: ${commandArguments}`); } if (commandArguments.some(commandArgument => typeof commandArgument === 'object' && commandArgument !== null)) { throw new TypeError(`Second argument must be an array of strings: ${commandArguments}`); } const normalizedArguments = commandArguments.map(String); const nullByteArgument = normalizedArguments.find(normalizedArgument => normalizedArgument.includes('\0')); if (nullByteArgument !== undefined) { throw new TypeError(`Arguments cannot contain null bytes ("\\0"): ${nullByteArgument}`); } if (!isPlainObject(options)) { throw new TypeError(`Last argument must be an options object: ${options}`); } return [filePath, normalizedArguments, options]; }; // EXTERNAL MODULE: external "node:child_process" var external_node_child_process_ = __webpack_require__(1421); // EXTERNAL MODULE: external "node:string_decoder" var external_node_string_decoder_ = __webpack_require__(6193); ;// CONCATENATED MODULE: ./node_modules/execa/lib/utils/uint-array.js const {toString: objectToString} = Object.prototype; const isArrayBuffer = value => objectToString.call(value) === '[object ArrayBuffer]'; // Is either Uint8Array or Buffer const isUint8Array = value => objectToString.call(value) === '[object Uint8Array]'; const bufferToUint8Array = buffer => new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); const textEncoder = new TextEncoder(); const stringToUint8Array = string => textEncoder.encode(string); const textDecoder = new TextDecoder(); const uint8ArrayToString = uint8Array => textDecoder.decode(uint8Array); const joinToString = (uint8ArraysOrStrings, encoding) => { const strings = uint8ArraysToStrings(uint8ArraysOrStrings, encoding); return strings.join(''); }; const uint8ArraysToStrings = (uint8ArraysOrStrings, encoding) => { if (encoding === 'utf8' && uint8ArraysOrStrings.every(uint8ArrayOrString => typeof uint8ArrayOrString === 'string')) { return uint8ArraysOrStrings; } const decoder = new external_node_string_decoder_.StringDecoder(encoding); const strings = uint8ArraysOrStrings .map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string' ? stringToUint8Array(uint8ArrayOrString) : uint8ArrayOrString) .map(uint8Array => decoder.write(uint8Array)); const finalString = decoder.end(); return finalString === '' ? strings : [...strings, finalString]; }; const joinToUint8Array = uint8ArraysOrStrings => { if (uint8ArraysOrStrings.length === 1 && isUint8Array(uint8ArraysOrStrings[0])) { return uint8ArraysOrStrings[0]; } return concatUint8Arrays(stringsToUint8Arrays(uint8ArraysOrStrings)); }; const stringsToUint8Arrays = uint8ArraysOrStrings => uint8ArraysOrStrings.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string' ? stringToUint8Array(uint8ArrayOrString) : uint8ArrayOrString); const concatUint8Arrays = uint8Arrays => { const result = new Uint8Array(getJoinLength(uint8Arrays)); let index = 0; for (const uint8Array of uint8Arrays) { result.set(uint8Array, index); index += uint8Array.length; } return result; }; const getJoinLength = uint8Arrays => { let joinLength = 0; for (const uint8Array of uint8Arrays) { joinLength += uint8Array.length; } return joinLength; }; ;// CONCATENATED MODULE: ./node_modules/execa/lib/methods/template.js // Check whether the template string syntax is being used const isTemplateString = templates => Array.isArray(templates) && Array.isArray(templates.raw); // Convert execa`file ...commandArguments` to execa(file, commandArguments) const parseTemplates = (templates, expressions) => { let tokens = []; for (const [index, template] of templates.entries()) { tokens = parseTemplate({ templates, expressions, tokens, index, template, }); } if (tokens.length === 0) { throw new TypeError('Template script must not be empty'); } const [file, ...commandArguments] = tokens; return [file, commandArguments, {}]; }; const parseTemplate = ({templates, expressions, tokens, index, template}) => { if (template === undefined) { throw new TypeError(`Invalid backslash sequence: ${templates.raw[index]}`); } const {nextTokens, leadingWhitespaces, trailingWhitespaces} = splitByWhitespaces(template, templates.raw[index]); const newTokens = concatTokens(tokens, nextTokens, leadingWhitespaces); if (index === expressions.length) { return newTokens; } const expression = expressions[index]; const expressionTokens = Array.isArray(expression) ? expression.map(expression => parseExpression(expression)) : [parseExpression(expression)]; return concatTokens(newTokens, expressionTokens, trailingWhitespaces); }; // Like `string.split(/[ \t\r\n]+/)` except newlines and tabs are: // - ignored when input as a backslash sequence like: `echo foo\n bar` // - not ignored when input directly // The only way to distinguish those in JavaScript is to use a tagged template and compare: // - the first array argument, which does not escape backslash sequences // - its `raw` property, which escapes them const splitByWhitespaces = (template, rawTemplate) => { if (rawTemplate.length === 0) { return {nextTokens: [], leadingWhitespaces: false, trailingWhitespaces: false}; } const nextTokens = []; let templateStart = 0; const leadingWhitespaces = DELIMITERS.has(rawTemplate[0]); for ( let templateIndex = 0, rawIndex = 0; templateIndex < template.length; templateIndex += 1, rawIndex += 1 ) { const rawCharacter = rawTemplate[rawIndex]; if (DELIMITERS.has(rawCharacter)) { if (templateStart !== templateIndex) { nextTokens.push(template.slice(templateStart, templateIndex)); } templateStart = templateIndex + 1; } else if (rawCharacter === '\\') { const nextRawCharacter = rawTemplate[rawIndex + 1]; if (nextRawCharacter === '\n') { // Handles escaped newlines in templates templateIndex -= 1; rawIndex += 1; } else if (nextRawCharacter === 'u' && rawTemplate[rawIndex + 2] === '{') { rawIndex = rawTemplate.indexOf('}', rawIndex + 3); } else { rawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1; } } } const trailingWhitespaces = templateStart === template.length; if (!trailingWhitespaces) { nextTokens.push(template.slice(templateStart)); } return {nextTokens, leadingWhitespaces, trailingWhitespaces}; }; const DELIMITERS = new Set([' ', '\t', '\r', '\n']); // Number of characters in backslash escape sequences: \0 \xXX or \uXXXX // \cX is allowed in RegExps but not in strings // Octal sequences are not allowed in strict mode const ESCAPE_LENGTH = {x: 3, u: 5}; const concatTokens = (tokens, nextTokens, isSeparated) => isSeparated || tokens.length === 0 || nextTokens.length === 0 ? [...tokens, ...nextTokens] : [ ...tokens.slice(0, -1), `${tokens.at(-1)}${nextTokens[0]}`, ...nextTokens.slice(1), ]; // Handle `${expression}` inside the template string syntax const parseExpression = expression => { const typeOfExpression = typeof expression; if (typeOfExpression === 'string') { return expression; } if (typeOfExpression === 'number') { return String(expression); } if (isPlainObject(expression) && ('stdout' in expression || 'isMaxBuffer' in expression)) { return getSubprocessResult(expression); } if (expression instanceof external_node_child_process_.ChildProcess || Object.prototype.toString.call(expression) === '[object Promise]') { // eslint-disable-next-line no-template-curly-in-string throw new TypeError('Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.'); } throw new TypeError(`Unexpected "${typeOfExpression}" in template expression`); }; const getSubprocessResult = ({stdout}) => { if (typeof stdout === 'string') { return stdout; } if (isUint8Array(stdout)) { return uint8ArrayToString(stdout); } if (stdout === undefined) { throw new TypeError('Missing result.stdout in template expression. This is probably due to the previous subprocess\' "stdout" option.'); } throw new TypeError(`Unexpected "${typeof stdout}" stdout in template expression`); }; // EXTERNAL MODULE: external "node:util" var external_node_util_ = __webpack_require__(7975); // EXTERNAL MODULE: external "node:process" var external_node_process_ = __webpack_require__(1708); ;// CONCATENATED MODULE: ./node_modules/execa/lib/utils/standard-stream.js const isStandardStream = stream => STANDARD_STREAMS.includes(stream); const STANDARD_STREAMS = [external_node_process_.stdin, external_node_process_.stdout, external_node_process_.stderr]; const STANDARD_STREAMS_ALIASES = ['stdin', 'stdout', 'stderr']; const getStreamName = fdNumber => STANDARD_STREAMS_ALIASES[fdNumber] ?? `stdio[${fdNumber}]`; ;// CONCATENATED MODULE: ./node_modules/execa/lib/arguments/specific.js // Some options can have different values for `stdout`/`stderr`/`fd3`. // This normalizes those to array of values. // For example, `{verbose: {stdout: 'none', stderr: 'full'}}` becomes `{verbose: ['none', 'none', 'full']}` const normalizeFdSpecificOptions = options => { const optionsCopy = {...options}; for (const optionName of FD_SPECIFIC_OPTIONS) { optionsCopy[optionName] = normalizeFdSpecificOption(options, optionName); } return optionsCopy; }; const normalizeFdSpecificOption = (options, optionName) => { const optionBaseArray = Array.from({length: getStdioLength(options) + 1}); const optionArray = normalizeFdSpecificValue(options[optionName], optionBaseArray, optionName); return addDefaultValue(optionArray, optionName); }; const getStdioLength = ({stdio}) => Array.isArray(stdio) ? Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length) : STANDARD_STREAMS_ALIASES.length; const normalizeFdSpecificValue = (optionValue, optionArray, optionName) => isPlainObject(optionValue) ? normalizeOptionObject(optionValue, optionArray, optionName) : optionArray.fill(optionValue); const normalizeOptionObject = (optionValue, optionArray, optionName) => { for (const fdName of Object.keys(optionValue).sort(compareFdName)) { for (const fdNumber of parseFdName(fdName, optionName, optionArray)) { optionArray[fdNumber] = optionValue[fdName]; } } return optionArray; }; // Ensure priority order when setting both `stdout`/`stderr`, `fd1`/`fd2`, and `all` const compareFdName = (fdNameA, fdNameB) => getFdNameOrder(fdNameA) < getFdNameOrder(fdNameB) ? 1 : -1; const getFdNameOrder = fdName => { if (fdName === 'stdout' || fdName === 'stderr') { return 0; } return fdName === 'all' ? 2 : 1; }; const parseFdName = (fdName, optionName, optionArray) => { if (fdName === 'ipc') { return [optionArray.length - 1]; } const fdNumber = parseFd(fdName); if (fdNumber === undefined || fdNumber === 0) { throw new TypeError(`"${optionName}.${fdName}" is invalid. It must be "${optionName}.stdout", "${optionName}.stderr", "${optionName}.all", "${optionName}.ipc", or "${optionName}.fd3", "${optionName}.fd4" (and so on).`); } if (fdNumber >= optionArray.length) { throw new TypeError(`"${optionName}.${fdName}" is invalid: that file descriptor does not exist. Please set the "stdio" option to ensure that file descriptor exists.`); } return fdNumber === 'all' ? [1, 2] : [fdNumber]; }; // Use the same syntax for fd-specific options and the `from`/`to` options const parseFd = fdName => { if (fdName === 'all') { return fdName; } if (STANDARD_STREAMS_ALIASES.includes(fdName)) { return STANDARD_STREAMS_ALIASES.indexOf(fdName); } const regexpResult = FD_REGEXP.exec(fdName); if (regexpResult !== null) { return Number(regexpResult[1]); } }; const FD_REGEXP = /^fd(\d+)$/; const addDefaultValue = (optionArray, optionName) => optionArray.map(optionValue => optionValue === undefined ? DEFAULT_OPTIONS[optionName] : optionValue); // Default value for the `verbose` option const verboseDefault = (0,external_node_util_.debuglog)('execa').enabled ? 'full' : 'none'; const DEFAULT_OPTIONS = { lines: false, buffer: true, maxBuffer: 1000 * 1000 * 100, verbose: verboseDefault, stripFinalNewline: true, }; // List of options which can have different values for `stdout`/`stderr` const FD_SPECIFIC_OPTIONS = ['lines', 'buffer', 'maxBuffer', 'verbose', 'stripFinalNewline']; // Retrieve fd-specific option const getFdSpecificValue = (optionArray, fdNumber) => fdNumber === 'ipc' ? optionArray.at(-1) : optionArray[fdNumber]; ;// CONCATENATED MODULE: ./node_modules/execa/lib/verbose/values.js // The `verbose` option can have different values for `stdout`/`stderr` const isVerbose = ({verbose}, fdNumber) => getFdVerbose(verbose, fdNumber) !== 'none'; // Whether IPC and output and logged const isFullVerbose = ({verbose}, fdNumber) => !['none', 'short'].includes(getFdVerbose(verbose, fdNumber)); // The `verbose` option can be a function to customize logging const getVerboseFunction = ({verbose}, fdNumber) => { const fdVerbose = getFdVerbose(verbose, fdNumber); return isVerboseFunction(fdVerbose) ? fdVerbose : undefined; }; // When using `verbose: {stdout, stderr, fd3, ipc}`: // - `verbose.stdout|stderr|fd3` is used for 'output' // - `verbose.ipc` is only used for 'ipc' // - highest `verbose.*` value is used for 'command', 'error' and 'duration' const getFdVerbose = (verbose, fdNumber) => fdNumber === undefined ? getFdGenericVerbose(verbose) : getFdSpecificValue(verbose, fdNumber); // When using `verbose: {stdout, stderr, fd3, ipc}` and logging is not specific to a file descriptor. // We then use the highest `verbose.*` value, using the following order: // - function > 'full' > 'short' > 'none' // - if several functions are defined: stdout > stderr > fd3 > ipc const getFdGenericVerbose = verbose => verbose.find(fdVerbose => isVerboseFunction(fdVerbose)) ?? VERBOSE_VALUES.findLast(fdVerbose => verbose.includes(fdVerbose)); // Whether the `verbose` option is customized using a function const isVerboseFunction = fdVerbose => typeof fdVerbose === 'function'; const VERBOSE_VALUES = ['none', 'short', 'full']; ;// CONCATENATED MODULE: ./node_modules/execa/lib/arguments/escape.js // Compute `result.command` and `result.escapedCommand` const joinCommand = (filePath, rawArguments) => { const fileAndArguments = [filePath, ...rawArguments]; const command = fileAndArguments.join(' '); const escapedCommand = fileAndArguments .map(fileAndArgument => quoteString(escapeControlCharacters(fileAndArgument))) .join(' '); return {command, escapedCommand}; }; // Remove ANSI sequences and escape control characters and newlines const escapeLines = lines => (0,external_node_util_.stripVTControlCharacters)(lines) .split('\n') .map(line => escapeControlCharacters(line)) .join('\n'); const escapeControlCharacters = line => line.replaceAll(SPECIAL_CHAR_REGEXP, character => escapeControlCharacter(character)); const escapeControlCharacter = character => { const commonEscape = COMMON_ESCAPES[character]; if (commonEscape !== undefined) { return commonEscape; } const codepoint = character.codePointAt(0); const codepointHex = codepoint.toString(16); return codepoint <= ASTRAL_START ? `\\u${codepointHex.padStart(4, '0')}` : `\\U${codepointHex}`; }; // Characters that would create issues when printed are escaped using the \u or \U notation. // Those include control characters and newlines. // The \u and \U notation is Bash specific, but there is no way to do this in a shell-agnostic way. // Some shells do not even have a way to print those characters in an escaped fashion. // Therefore, we prioritize printing those safely, instead of allowing those to be copy-pasted. // List of Unicode character categories: https://www.fileformat.info/info/unicode/category/index.htm const getSpecialCharRegExp = () => { try { // This throws when using Node.js without ICU support. // When using a RegExp literal, this would throw at parsing-time, instead of runtime. // eslint-disable-next-line prefer-regex-literals return new RegExp('\\p{Separator}|\\p{Other}', 'gu'); } catch { // Similar to the above RegExp, but works even when Node.js has been built without ICU support. // Unlike the above RegExp, it only covers whitespaces and C0/C1 control characters. // It does not cover some edge cases, such as Unicode reserved characters. // See https://github.com/sindresorhus/execa/issues/1143 // eslint-disable-next-line no-control-regex return /[\s\u0000-\u001F\u007F-\u009F\u00AD]/g; } }; const SPECIAL_CHAR_REGEXP = getSpecialCharRegExp(); // Accepted by $'...' in Bash. // Exclude \a \e \v which are accepted in Bash but not in JavaScript (except \v) and JSON. const COMMON_ESCAPES = { ' ': ' ', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t', }; // Up until that codepoint, \u notation can be used instead of \U const ASTRAL_START = 65_535; // Some characters are shell-specific, i.e. need to be escaped when the command is copy-pasted then run. // Escaping is shell-specific. We cannot know which shell is used: `process.platform` detection is not enough. // For example, Windows users could be using `cmd.exe`, Powershell or Bash for Windows which all use different escaping. // We use '...' on Unix, which is POSIX shell compliant and escape all characters but ' so this is fairly safe. // On Windows, we assume cmd.exe is used and escape with "...", which also works with Powershell. const quoteString = escapedArgument => { if (NO_ESCAPE_REGEXP.test(escapedArgument)) { return escapedArgument; } return external_node_process_.platform === 'win32' ? `"${escapedArgument.replaceAll('"', '""')}"` : `'${escapedArgument.replaceAll('\'', '\'\\\'\'')}'`; }; const NO_ESCAPE_REGEXP = /^[\w./-]+$/; // EXTERNAL MODULE: ./node_modules/is-unicode-supported/index.js var is_unicode_supported = __webpack_require__(2662); ;// CONCATENATED MODULE: ./node_modules/figures/index.js const common = { circleQuestionMark: '(?)', questionMarkPrefix: '(?)', square: '█', squareDarkShade: '▓', squareMediumShade: '▒', squareLightShade: '░', squareTop: '▀', squareBottom: '▄', squareLeft: '▌', squareRight: '▐', squareCenter: '■', bullet: '●', dot: '․', ellipsis: '…', pointerSmall: '›', triangleUp: '▲', triangleUpSmall: '▴', triangleDown: '▼', triangleDownSmall: '▾', triangleLeftSmall: '◂', triangleRightSmall: '▸', home: '⌂', heart: '♥', musicNote: '♪', musicNoteBeamed: '♫', arrowUp: '↑', arrowDown: '↓', arrowLeft: '←', arrowRight: '→', arrowLeftRight: '↔', arrowUpDown: '↕', almostEqual: '≈', notEqual: '≠', lessOrEqual: '≤', greaterOrEqual: '≥', identical: '≡', infinity: '∞', subscriptZero: '₀', subscriptOne: '₁', subscriptTwo: '₂', subscriptThree: '₃', subscriptFour: '₄', subscriptFive: '₅', subscriptSix: '₆', subscriptSeven: '₇', subscriptEight: '₈', subscriptNine: '₉', oneHalf: '½', oneThird: '⅓', oneQuarter: '¼', oneFifth: '⅕', oneSixth: '⅙', oneEighth: '⅛', twoThirds: '⅔', twoFifths: '⅖', threeQuarters: '¾', threeFifths: '⅗', threeEighths: '⅜', fourFifths: '⅘', fiveSixths: '⅚', fiveEighths: '⅝', sevenEighths: '⅞', line: '─', lineBold: '━', lineDouble: '═', lineDashed0: '┄', lineDashed1: '┅', lineDashed2: '┈', lineDashed3: '┉', lineDashed4: '╌', lineDashed5: '╍', lineDashed6: '╴', lineDashed7: '╶', lineDashed8: '╸', lineDashed9: '╺', lineDashed10: '╼', lineDashed11: '╾', lineDashed12: '−', lineDashed13: '–', lineDashed14: '‐', lineDashed15: '⁃', lineVertical: '│', lineVerticalBold: '┃', lineVerticalDouble: '║', lineVerticalDashed0: '┆', lineVerticalDashed1: '┇', lineVerticalDashed2: '┊', lineVerticalDashed3: '┋', lineVerticalDashed4: '╎', lineVerticalDashed5: '╏', lineVerticalDashed6: '╵', lineVerticalDashed7: '╷', lineVerticalDashed8: '╹', lineVerticalDashed9: '╻', lineVerticalDashed10: '╽', lineVerticalDashed11: '╿', lineDownLeft: '┐', lineDownLeftArc: '╮', lineDownBoldLeftBold: '┓', lineDownBoldLeft: '┒', lineDownLeftBold: '┑', lineDownDoubleLeftDouble: '╗', lineDownDoubleLeft: '╖', lineDownLeftDouble: '╕', lineDownRight: '┌', lineDownRightArc: '╭', lineDownBoldRightBold: '┏', lineDownBoldRight: '┎', lineDownRightBold: '┍', lineDownDoubleRightDouble: '╔', lineDownDoubleRight: '╓', lineDownRightDouble: '╒', lineUpLeft: '┘', lineUpLeftArc: '╯', lineUpBoldLeftBold: '┛', lineUpBoldLeft: '┚', lineUpLeftBold: '┙', lineUpDoubleLeftDouble: '╝', lineUpDoubleLeft: '╜', lineUpLeftDouble: '╛', lineUpRight: '└', lineUpRightArc: '╰', lineUpBoldRightBold: '┗', lineUpBoldRight: '┖', lineUpRightBold: '┕', lineUpDoubleRightDouble: '╚', lineUpDoubleRight: '╙', lineUpRightDouble: '╘', lineUpDownLeft: '┤', lineUpBoldDownBoldLeftBold: '┫', lineUpBoldDownBoldLeft: '┨', lineUpDownLeftBold: '┥', lineUpBoldDownLeftBold: '┩', lineUpDownBoldLeftBold: '┪', lineUpDownBoldLeft: '┧', lineUpBoldDownLeft: '┦', lineUpDoubleDownDoubleLeftDouble: '╣', lineUpDoubleDownDoubleLeft: '╢', lineUpDownLeftDouble: '╡', lineUpDownRight: '├', lineUpBoldDownBoldRightBold: '┣', lineUpBoldDownBoldRight: '┠', lineUpDownRightBold: '┝', lineUpBoldDownRightBold: '┡', lineUpDownBoldRightBold: '┢', lineUpDownBoldRight: '┟', lineUpBoldDownRight: '┞', lineUpDoubleDownDoubleRightDouble: '╠', lineUpDoubleDownDoubleRight: '╟', lineUpDownRightDouble: '╞', lineDownLeftRight: '┬', lineDownBoldLeftBoldRightBold: '┳', lineDownLeftBoldRightBold: '┯', lineDownBoldLeftRight: '┰', lineDownBoldLeftBoldRight: '┱', lineDownBoldLeftRightBold: '┲', lineDownLeftRightBold: '┮', lineDownLeftBoldRight: '┭', lineDownDoubleLeftDoubleRightDouble: '╦', lineDownDoubleLeftRight: '╥', lineDownLeftDoubleRightDouble: '╤', lineUpLeftRight: '┴', lineUpBoldLeftBoldRightBold: '┻', lineUpLeftBoldRightBold: '┷', lineUpBoldLeftRight: '┸', lineUpBoldLeftBoldRight: '┹', lineUpBoldLeftRightBold: '┺', lineUpLeftRightBold: '┶', lineUpLeftBoldRight: '┵', lineUpDoubleLeftDoubleRightDouble: '╩', lineUpDoubleLeftRight: '╨', lineUpLeftDoubleRightDouble: '╧', lineUpDownLeftRight: '┼', lineUpBoldDownBoldLeftBoldRightBold: '╋', lineUpDownBoldLeftBoldRightBold: '╈', lineUpBoldDownLeftBoldRightBold: '╇', lineUpBoldDownBoldLeftRightBold: '╊', lineUpBoldDownBoldLeftBoldRight: '╉', lineUpBoldDownLeftRight: '╀', lineUpDownBoldLeftRight: '╁', lineUpDownLeftBoldRight: '┽', lineUpDownLeftRightBold: '┾', lineUpBoldDownBoldLeftRight: '╂', lineUpDownLeftBoldRightBold: '┿', lineUpBoldDownLeftBoldRight: '╃', lineUpBoldDownLeftRightBold: '╄', lineUpDownBoldLeftBoldRight: '╅', lineUpDownBoldLeftRightBold: '╆', lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬', lineUpDoubleDownDoubleLeftRight: '╫', lineUpDownLeftDoubleRightDouble: '╪', lineCross: '╳', lineBackslash: '╲', lineSlash: '╱', }; const specialMainSymbols = { tick: '✔', info: 'ℹ', warning: '⚠', cross: '✘', squareSmall: '◻', squareSmallFilled: '◼', circle: '◯', circleFilled: '◉', circleDotted: '◌', circleDouble: '◎', circleCircle: 'ⓞ', circleCross: 'ⓧ', circlePipe: 'Ⓘ', radioOn: '◉', radioOff: '◯', checkboxOn: '☒', checkboxOff: '☐', checkboxCircleOn: 'ⓧ', checkboxCircleOff: 'Ⓘ', pointer: '❯', triangleUpOutline: '△', triangleLeft: '◀', triangleRight: '▶', lozenge: '◆', lozengeOutline: '◇', hamburger: '☰', smiley: '㋡', mustache: '෴', star: '★', play: '▶', nodejs: '⬢', oneSeventh: '⅐', oneNinth: '⅑', oneTenth: '⅒', }; const specialFallbackSymbols = { tick: '√', info: 'i', warning: '‼', cross: '×', squareSmall: '□', squareSmallFilled: '■', circle: '( )', circleFilled: '(*)', circleDotted: '( )', circleDouble: '( )', circleCircle: '(○)', circleCross: '(×)', circlePipe: '(│)', radioOn: '(*)', radioOff: '( )', checkboxOn: '[×]', checkboxOff: '[ ]', checkboxCircleOn: '(×)', checkboxCircleOff: '( )', pointer: '>', triangleUpOutline: '∆', triangleLeft: '◄', triangleRight: '►', lozenge: '♦', lozengeOutline: '◊', hamburger: '≡', smiley: '☺', mustache: '┌─┐', star: '✶', play: '►', nodejs: '♦', oneSeventh: '1/7', oneNinth: '1/9', oneTenth: '1/10', }; const mainSymbols = {...common, ...specialMainSymbols}; const fallbackSymbols = {...common, ...specialFallbackSymbols}; const shouldUseMain = (0,is_unicode_supported/* default */.A)(); const figures = shouldUseMain ? mainSymbols : fallbackSymbols; /* harmony default export */ const node_modules_figures = (figures); const replacements = Object.entries(specialMainSymbols); // On terminals which do not support Unicode symbols, substitute them to other symbols const replaceSymbols = (string, {useFallback = !shouldUseMain} = {}) => { if (useFallback) { for (const [key, mainSymbol] of replacements) { string = string.replaceAll(mainSymbol, fallbackSymbols[key]); } } return string; }; // EXTERNAL MODULE: external "node:tty" var external_node_tty_ = __webpack_require__(7066); ;// CONCATENATED MODULE: ./node_modules/yoctocolors/base.js // eslint-disable-next-line no-warning-comments // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240) // Lots of optionals here to support Deno. const hasColors = external_node_tty_?.WriteStream?.prototype?.hasColors?.() ?? false; const format = (open, close) => { if (!hasColors) { return input => input; } const openCode = `\u001B[${open}m`; const closeCode = `\u001B[${close}m`; return input => { const string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster. let index = string.indexOf(closeCode); if (index === -1) { // Note: Intentionally not using string interpolation for performance reasons. return openCode + string + closeCode; } // Handle nested colors. // We could have done this, but it's too slow (as of Node.js 22). // return openCode + string.replaceAll(closeCode, openCode) + closeCode; let result = openCode; let lastIndex = 0; while (index !== -1) { result += string.slice(lastIndex, index) + openCode; lastIndex = index + closeCode.length; index = string.indexOf(closeCode, lastIndex); } result += string.slice(lastIndex) + closeCode; return result; }; }; const base_reset = format(0, 0); const bold = format(1, 22); const dim = format(2, 22); const italic = format(3, 23); const underline = format(4, 24); const overline = format(53, 55); const inverse = format(7, 27); const base_hidden = format(8, 28); const strikethrough = format(9, 29); const black = format(30, 39); const red = format(31, 39); const green = format(32, 39); const yellow = format(33, 39); const blue = format(34, 39); const magenta = format(35, 39); const cyan = format(36, 39); const white = format(37, 39); const gray = format(90, 39); const bgBlack = format(40, 49); const bgRed = format(41, 49); const bgGreen = format(42, 49); const bgYellow = format(43, 49); const bgBlue = format(44, 49); const bgMagenta = format(45, 49); const bgCyan = format(46, 49); const bgWhite = format(47, 49); const bgGray = format(100, 49); const redBright = format(91, 39); const greenBright = format(92, 39); const yellowBright = format(93, 39); const blueBright = format(94, 39); const magentaBright = format(95, 39); const cyanBright = format(96, 39); const whiteBright = format(97, 39); const bgRedBright = format(101, 49); const bgGreenBright = format(102, 49); const bgYellowBright = format(103, 49); const bgBlueBright = format(104, 49); const bgMagentaBright = format(105, 49); const bgCyanBright = format(106, 49); const bgWhiteBright = format(107, 49); ;// CONCATENATED MODULE: ./node_modules/execa/lib/verbose/default.js // Default when `verbose` is not a function const defaultVerboseFunction = ({ type, message, timestamp, piped, commandId, result: {failed = false} = {}, options: {reject = true}, }) => { const timestampString = serializeTimestamp(timestamp); const icon = ICONS[type]({failed, reject, piped}); const color = COLORS[type]({reject}); return `${gray(`[${timestampString}]`)} ${gray(`[${commandId}]`)} ${color(icon)} ${color(message)}`; }; // Prepending the timestamp allows debugging the slow paths of a subprocess const serializeTimestamp = timestamp => `${padField(timestamp.getHours(), 2)}:${padField(timestamp.getMinutes(), 2)}:${padField(timestamp.getSeconds(), 2)}.${padField(timestamp.getMilliseconds(), 3)}`; const padField = (field, padding) => String(field).padStart(padding, '0'); const getFinalIcon = ({failed, reject}) => { if (!failed) { return node_modules_figures.tick; } return reject ? node_modules_figures.cross : node_modules_figures.warning; }; const ICONS = { command: ({piped}) => piped ? '|' : '$', output: () => ' ', ipc: () => '*', error: getFinalIcon, duration: getFinalIcon, }; const identity = string => string; const COLORS = { command: () => bold, output: () => identity, ipc: () => identity, error: ({reject}) => reject ? redBright : yellowBright, duration: () => gray, }; ;// CONCATENATED MODULE: ./node_modules/execa/lib/verbose/custom.js // Apply the `verbose` function on each line const applyVerboseOnLines = (printedLines, verboseInfo, fdNumber) => { const verboseFunction = getVerboseFunction(verboseInfo, fdNumber); return printedLines .map(({verboseLine, verboseObject}) => applyVerboseFunction(verboseLine, verboseObject, verboseFunction)) .filter(printedLine => printedLine !== undefined) .map(printedLine => appendNewline(printedLine)) .join(''); }; const applyVerboseFunction = (verboseLine, verboseObject, verboseFunction) => { if (verboseFunction === undefined) { return verboseLine; } const printedLine = verboseFunc