mirror of
https://github.com/cypress-io/cypress.git
synced 2026-02-11 09:40:11 -06:00
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
/* eslint-disable no-console */
|
|
import chalk from 'chalk'
|
|
import _ from 'lodash'
|
|
import path from 'path'
|
|
|
|
const pluralize = require('pluralize')
|
|
const humanTime = require('@packages/server/lib/util/human_time')
|
|
|
|
import type { CypressError, ErrorLike } from './errorTypes'
|
|
|
|
export {
|
|
pluralize,
|
|
humanTime,
|
|
}
|
|
|
|
const whileMatching = (othArr: string[]) => {
|
|
return (val: string, index: number) => {
|
|
return val === othArr[index]
|
|
}
|
|
}
|
|
|
|
export const parseResolvedPattern = (baseFolder: string, globPattern: string) => {
|
|
const resolvedPath = path.resolve(baseFolder, globPattern)
|
|
const resolvedPathParts = resolvedPath.split(path.sep)
|
|
const folderPathPaths = baseFolder.split(path.sep)
|
|
const commonPath = _.takeWhile(folderPathPaths, whileMatching(resolvedPathParts)).join(path.sep)
|
|
const remainingPattern = !commonPath ? resolvedPath : resolvedPath.replace(commonPath.concat(path.sep), '')
|
|
|
|
return [commonPath, remainingPattern]
|
|
}
|
|
|
|
export const isCypressErr = (err: ErrorLike): err is CypressError => {
|
|
return Boolean(err.isCypressErr)
|
|
}
|
|
|
|
const twoOrMoreNewLinesRe = /\n{2,}/
|
|
|
|
export const trimMultipleNewLines = (str: string) => {
|
|
return _
|
|
.chain(str)
|
|
.split(twoOrMoreNewLinesRe)
|
|
.compact()
|
|
.join('\n\n')
|
|
.value()
|
|
}
|
|
|
|
type AllowedChalkColors = 'red' | 'blue' | 'green' | 'magenta' | 'yellow'
|
|
|
|
/**
|
|
*
|
|
* @param err
|
|
* @param color
|
|
* @param causeDepth If error has a `cause` limits the maximum depth of causes to log. Set to `0` to not log any `cause`
|
|
* @returns
|
|
*/
|
|
export const logError = function (err: CypressError | ErrorLike, color: AllowedChalkColors = 'red', causeDepth: number = 3) {
|
|
console.log(chalk[color](err.message))
|
|
|
|
if (err.details) {
|
|
console.log(chalk.magenta(`\n${err.details}`))
|
|
}
|
|
|
|
// bail if this error came from known
|
|
// list of Cypress errors
|
|
if (isCypressErr(err)) {
|
|
return
|
|
}
|
|
|
|
console.log(chalk[color](err.stack ?? ''))
|
|
|
|
if (causeDepth > 0 && err['cause']) {
|
|
// Limit the recursions on `cause` in case there is a loop
|
|
console.log(chalk[color]('Caused by:'))
|
|
logError(err['cause'], color, causeDepth - 1)
|
|
}
|
|
|
|
return err
|
|
}
|