From 6b836242a57060d54fbb479a183c641a0389fb49 Mon Sep 17 00:00:00 2001 From: David Goss Date: Fri, 6 May 2022 09:33:56 +0100 Subject: [PATCH 1/7] strip ansi from stderr if no support --- package-lock.json | 170 +++++++++++++++++++++++++ package.json | 1 + src/cli/run.ts | 41 ++++-- src/types/strip-ansi-stream/index.d.ts | 5 + 4 files changed, 205 insertions(+), 12 deletions(-) create mode 100644 src/types/strip-ansi-stream/index.d.ts diff --git a/package-lock.json b/package-lock.json index 74999937f..d46980638 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", + "strip-ansi-stream": "^1.0.0", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", @@ -6104,6 +6105,11 @@ "node": ">=6.0.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -6381,6 +6387,30 @@ "node": ">=8" } }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6482,6 +6512,24 @@ "node": ">=0.10" } }, + "node_modules/replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dependencies": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/replacestream/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6965,6 +7013,19 @@ "promise-polyfill": "^1.1.6" } }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -7023,6 +7084,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi-stream/-/strip-ansi-stream-1.0.0.tgz", + "integrity": "sha512-G8NIkSYbX2J0dvqGvznZSlXYy3CnHwfXRq+Y5zX6qDMfsVWBZINqthIjwdN3JO/gJ9ueKw4NAeY9xmSP4dxoRA==", + "dependencies": { + "ansi-regex": "^3.0.0", + "replacestream": "^4.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi-stream/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -7504,6 +7585,11 @@ "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -12482,6 +12568,11 @@ "fast-diff": "^1.1.2" } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -12683,6 +12774,32 @@ } } }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -12760,6 +12877,23 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "requires": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13133,6 +13267,21 @@ "promise-polyfill": "^1.1.6" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -13176,6 +13325,22 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi-stream/-/strip-ansi-stream-1.0.0.tgz", + "integrity": "sha512-G8NIkSYbX2J0dvqGvznZSlXYy3CnHwfXRq+Y5zX6qDMfsVWBZINqthIjwdN3JO/gJ9ueKw4NAeY9xmSP4dxoRA==", + "requires": { + "ansi-regex": "^3.0.0", + "replacestream": "^4.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + } + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13530,6 +13695,11 @@ "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/package.json b/package.json index 300014255..18c5e1eff 100644 --- a/package.json +++ b/package.json @@ -225,6 +225,7 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", + "strip-ansi-stream": "^1.0.0", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", diff --git a/src/cli/run.ts b/src/cli/run.ts index 99c02b0bf..3692fa3b0 100644 --- a/src/cli/run.ts +++ b/src/cli/run.ts @@ -1,35 +1,52 @@ -/* eslint-disable no-console */ -/* This is one rare place where we're fine to use process/console directly, - * but other code abstracts those to remain composable and testable. */ import Cli, { ICliRunResult } from './' import VError from 'verror' import publishBanner from './publish_banner' import { validateNodeEngineVersion } from './validate_node_engine_version' +import { supportsColor } from 'supports-color' +import stripAnsiStream from 'strip-ansi-stream' +import { Console } from 'console' -function logErrorMessageAndExit(message: string): void { - console.error(message) +function logErrorMessageAndExit(logger: Console, message: string): void { + logger.error(message) process.exit(1) } -function displayPublishAdvertisementBanner(): void { - console.error(publishBanner) +function displayPublishAdvertisementBanner(logger: Console): void { + logger.error(publishBanner) +} + +/* +If process.stderr doesn't support ANSI characters, pipe it through a stream that +strips them out. This is because some output we send to stderr uses ANSI +without checking for support, and we can't control it (for now). + */ +function sanitiseStdErr() { + if (supportsColor(process.stderr)) { + return process.stderr + } + const sanitised = stripAnsiStream() + sanitised.pipe(process.stderr, { end: false }) + return sanitised } export default async function run(): Promise { + const stderr = sanitiseStdErr() + const logger = new Console(stderr) + validateNodeEngineVersion( process.version, (error) => { - console.error(error) + logger.error(error) process.exit(1) }, - console.warn + logger.warn ) const cli = new Cli({ argv: process.argv, cwd: process.cwd(), stdout: process.stdout, - stderr: process.stderr, + stderr, env: process.env, }) @@ -37,11 +54,11 @@ export default async function run(): Promise { try { result = await cli.run() } catch (error) { - logErrorMessageAndExit(VError.fullStack(error)) + logErrorMessageAndExit(logger, VError.fullStack(error)) } if (result.shouldAdvertisePublish) { - displayPublishAdvertisementBanner() + displayPublishAdvertisementBanner(logger) } const exitCode = result.success ? 0 : 1 diff --git a/src/types/strip-ansi-stream/index.d.ts b/src/types/strip-ansi-stream/index.d.ts new file mode 100644 index 000000000..321714b03 --- /dev/null +++ b/src/types/strip-ansi-stream/index.d.ts @@ -0,0 +1,5 @@ +declare module 'strip-ansi-stream' { + import { Transform } from 'stream' + + export default function stripAnsiStream(): Transform +} From 06bc0f1b53521c30241ff6252bd3790d0f5c40d5 Mon Sep 17 00:00:00 2001 From: David Goss Date: Fri, 6 May 2022 09:47:19 +0100 Subject: [PATCH 2/7] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e74753b..25b20b9c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). Please see [CONTRIBUTING.md](https://github.com/cucumber/cucumber/blob/master/CONTRIBUTING.md) on how to contribute to Cucumber. ## [Unreleased] +### Fixed +- Prevent outputting ANSI escapes to `stderr` if it can't display them ([#2035](https://github.com/cucumber/cucumber-js/pull/2035)) ## [8.2.0] - 2022-05-05 ### Changed From 037b829e52d5b2461ed0d6adff0a8e9eefdd55b8 Mon Sep 17 00:00:00 2001 From: David Goss Date: Mon, 30 May 2022 08:22:16 +0100 Subject: [PATCH 3/7] restore old run.ts --- src/cli/run.ts | 41 ++++++++++++----------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/src/cli/run.ts b/src/cli/run.ts index 3692fa3b0..99c02b0bf 100644 --- a/src/cli/run.ts +++ b/src/cli/run.ts @@ -1,52 +1,35 @@ +/* eslint-disable no-console */ +/* This is one rare place where we're fine to use process/console directly, + * but other code abstracts those to remain composable and testable. */ import Cli, { ICliRunResult } from './' import VError from 'verror' import publishBanner from './publish_banner' import { validateNodeEngineVersion } from './validate_node_engine_version' -import { supportsColor } from 'supports-color' -import stripAnsiStream from 'strip-ansi-stream' -import { Console } from 'console' -function logErrorMessageAndExit(logger: Console, message: string): void { - logger.error(message) +function logErrorMessageAndExit(message: string): void { + console.error(message) process.exit(1) } -function displayPublishAdvertisementBanner(logger: Console): void { - logger.error(publishBanner) -} - -/* -If process.stderr doesn't support ANSI characters, pipe it through a stream that -strips them out. This is because some output we send to stderr uses ANSI -without checking for support, and we can't control it (for now). - */ -function sanitiseStdErr() { - if (supportsColor(process.stderr)) { - return process.stderr - } - const sanitised = stripAnsiStream() - sanitised.pipe(process.stderr, { end: false }) - return sanitised +function displayPublishAdvertisementBanner(): void { + console.error(publishBanner) } export default async function run(): Promise { - const stderr = sanitiseStdErr() - const logger = new Console(stderr) - validateNodeEngineVersion( process.version, (error) => { - logger.error(error) + console.error(error) process.exit(1) }, - logger.warn + console.warn ) const cli = new Cli({ argv: process.argv, cwd: process.cwd(), stdout: process.stdout, - stderr, + stderr: process.stderr, env: process.env, }) @@ -54,11 +37,11 @@ export default async function run(): Promise { try { result = await cli.run() } catch (error) { - logErrorMessageAndExit(logger, VError.fullStack(error)) + logErrorMessageAndExit(VError.fullStack(error)) } if (result.shouldAdvertisePublish) { - displayPublishAdvertisementBanner(logger) + displayPublishAdvertisementBanner() } const exitCode = result.success ? 0 : 1 From fa62df6e0ebe2719707ce0d1de78be65b6508422 Mon Sep 17 00:00:00 2001 From: David Goss Date: Mon, 30 May 2022 08:32:12 +0100 Subject: [PATCH 4/7] handle publish banner correctly --- src/cli/publish_banner.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cli/publish_banner.ts b/src/cli/publish_banner.ts index 123bcb96b..890ddff0b 100644 --- a/src/cli/publish_banner.ts +++ b/src/cli/publish_banner.ts @@ -1,12 +1,16 @@ import chalk from 'chalk' import Table from 'cli-table3' +const chalkInstance = chalk.stderr + const underlineBoldCyan = (x: string): string => - chalk.underline(chalk.bold(chalk.cyan(x))) + chalkInstance.underline(chalkInstance.bold(chalkInstance.cyan(x))) const formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io') const formattedEnv = - chalk.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + chalk.cyan('true') + chalkInstance.cyan('CUCUMBER_PUBLISH_ENABLED') + + '=' + + chalkInstance.cyan('true') const formattedMoreInfoUrl = underlineBoldCyan( 'https://cucumber.io/docs/cucumber/environment-variables/' ) @@ -14,18 +18,20 @@ const formattedMoreInfoUrl = underlineBoldCyan( const text = `\ Share your Cucumber Report with your team at ${formattedReportUrl} -Command line option: ${chalk.cyan('--publish')} +Command line option: ${chalkInstance.cyan('--publish')} Environment variable: ${formattedEnv} More information at ${formattedMoreInfoUrl} -To disable this message, add this to your ${chalk.bold('./cucumber.js')}: -${chalk.bold("module.exports = { default: '--publish-quiet' }")}` +To disable this message, add this to your ${chalkInstance.bold( + './cucumber.js' +)}: +${chalkInstance.bold("module.exports = { default: '--publish-quiet' }")}` const table = new Table({ style: { head: [], - border: ['green'], + border: chalkInstance.supportsColor ? ['green'] : [], }, }) From 7bd2555b35fdf9b6698a6b4e49e7ee8971715acf Mon Sep 17 00:00:00 2001 From: David Goss Date: Mon, 30 May 2022 08:44:00 +0100 Subject: [PATCH 5/7] handle reports output properly --- src/api/formatters.ts | 20 +++++++++++++++++++- src/api/run_cucumber.ts | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/api/formatters.ts b/src/api/formatters.ts index f01a16a10..ab83c05cb 100644 --- a/src/api/formatters.ts +++ b/src/api/formatters.ts @@ -10,12 +10,16 @@ import path from 'path' import { DEFAULT_CUCUMBER_PUBLISH_URL } from '../formatter/publish' import HttpStream from '../formatter/http_stream' import { Writable } from 'stream' +import { supportsColor } from 'supports-color' import { IRunOptionsFormats } from './types' +import hasAnsi from 'has-ansi' +import stripAnsi from 'strip-ansi' export async function initializeFormatters({ env, cwd, stdout, + stderr, logger, onStreamError, eventBroadcaster, @@ -26,6 +30,7 @@ export async function initializeFormatters({ env: NodeJS.ProcessEnv cwd: string stdout: IFormatterStream + stderr: IFormatterStream logger: Console onStreamError: () => void eventBroadcaster: EventEmitter @@ -88,7 +93,7 @@ export async function initializeFormatters({ const readerStream = new Writable({ objectMode: true, write: function (responseBody: string, encoding, writeCallback) { - logger.error(responseBody) + logger.error(sanitisePublishOutput(responseBody, stderr)) writeCallback() }, }) @@ -100,3 +105,16 @@ export async function initializeFormatters({ await Promise.all(formatters.map(async (f) => await f.finished())) } } + +/* +This is because the Cucumber Reports service returns a pre-formatted console message +including ANSI escapes, so if our stderr stream doesn't support those we need to +strip them back out. Ideally we should get structured data from the service and +compose the console message on this end. + */ +function sanitisePublishOutput(raw: string, stderr: IFormatterStream) { + if (!supportsColor(stderr) && hasAnsi(raw)) { + return stripAnsi(raw) + } + return raw +} diff --git a/src/api/run_cucumber.ts b/src/api/run_cucumber.ts index 096d728f1..05791acbb 100644 --- a/src/api/run_cucumber.ts +++ b/src/api/run_cucumber.ts @@ -58,6 +58,7 @@ export async function runCucumber( env, cwd, stdout, + stderr, logger, onStreamError: () => (formatterStreamError = true), eventBroadcaster, From 1503272c65b58d5cb97d762c28e1dbc9a6789131 Mon Sep 17 00:00:00 2001 From: David Goss Date: Mon, 30 May 2022 08:44:47 +0100 Subject: [PATCH 6/7] remove unnecessary dep --- package-lock.json | 170 ------------------------- package.json | 1 - src/types/strip-ansi-stream/index.d.ts | 5 - 3 files changed, 176 deletions(-) delete mode 100644 src/types/strip-ansi-stream/index.d.ts diff --git a/package-lock.json b/package-lock.json index 29c7b8455..8fee91499 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,6 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", - "strip-ansi-stream": "^1.0.0", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", @@ -6105,11 +6104,6 @@ "node": ">=6.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -6387,30 +6381,6 @@ "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6512,24 +6482,6 @@ "node": ">=0.10" } }, - "node_modules/replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", - "dependencies": { - "escape-string-regexp": "^1.0.3", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/replacestream/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7013,19 +6965,6 @@ "promise-polyfill": "^1.1.6" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -7084,26 +7023,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi-stream/-/strip-ansi-stream-1.0.0.tgz", - "integrity": "sha512-G8NIkSYbX2J0dvqGvznZSlXYy3CnHwfXRq+Y5zX6qDMfsVWBZINqthIjwdN3JO/gJ9ueKw4NAeY9xmSP4dxoRA==", - "dependencies": { - "ansi-regex": "^3.0.0", - "replacestream": "^4.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi-stream/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -7585,11 +7504,6 @@ "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=" }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -12568,11 +12482,6 @@ "fast-diff": "^1.1.2" } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -12774,32 +12683,6 @@ } } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -12877,23 +12760,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", - "requires": { - "escape-string-regexp": "^1.0.3", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13267,21 +13133,6 @@ "promise-polyfill": "^1.1.6" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -13325,22 +13176,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-ansi-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi-stream/-/strip-ansi-stream-1.0.0.tgz", - "integrity": "sha512-G8NIkSYbX2J0dvqGvznZSlXYy3CnHwfXRq+Y5zX6qDMfsVWBZINqthIjwdN3JO/gJ9ueKw4NAeY9xmSP4dxoRA==", - "requires": { - "ansi-regex": "^3.0.0", - "replacestream": "^4.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - } - } - }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13695,11 +13530,6 @@ "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=" }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/package.json b/package.json index 6828a3bde..ce4c99593 100644 --- a/package.json +++ b/package.json @@ -225,7 +225,6 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", - "strip-ansi-stream": "^1.0.0", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", diff --git a/src/types/strip-ansi-stream/index.d.ts b/src/types/strip-ansi-stream/index.d.ts deleted file mode 100644 index 321714b03..000000000 --- a/src/types/strip-ansi-stream/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'strip-ansi-stream' { - import { Transform } from 'stream' - - export default function stripAnsiStream(): Transform -} From bcd9573599baef854c03dc8d2034367662c20ff3 Mon Sep 17 00:00:00 2001 From: David Goss Date: Mon, 30 May 2022 08:50:08 +0100 Subject: [PATCH 7/7] update dependencies --- package-lock.json | 10 +++------- package.json | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fee91499..a3ef204c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "durations": "^3.4.2", "figures": "^3.2.0", "glob": "^7.1.6", + "has-ansi": "^4.0.1", "indent-string": "^4.0.0", "is-stream": "^2.0.0", "knuth-shuffle-seeded": "^1.0.6", @@ -40,6 +41,7 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", + "strip-ansi": "6.0.1", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", @@ -91,7 +93,6 @@ "express": "4.18.1", "fs-extra": "10.1.0", "genversion": "3.1.1", - "has-ansi": "^4.0.1", "mocha": "10.0.0", "mustache": "4.2.0", "nyc": "15.1.0", @@ -103,7 +104,6 @@ "sinon-chai": "3.7.0", "stream-buffers": "3.0.2", "stream-to-string": "1.2.0", - "strip-ansi": "6.0.1", "ts-node": "10.7.0", "tsd": "0.20.0", "typescript": "4.6.4" @@ -4064,7 +4064,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.1.tgz", "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", - "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -4076,7 +4075,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, "engines": { "node": ">=6" } @@ -10955,7 +10953,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.1.tgz", "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" }, @@ -10963,8 +10960,7 @@ "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" } } }, diff --git a/package.json b/package.json index ce4c99593..c6345e221 100644 --- a/package.json +++ b/package.json @@ -213,6 +213,7 @@ "durations": "^3.4.2", "figures": "^3.2.0", "glob": "^7.1.6", + "has-ansi": "^4.0.1", "indent-string": "^4.0.0", "is-stream": "^2.0.0", "knuth-shuffle-seeded": "^1.0.6", @@ -225,6 +226,7 @@ "semver": "7.3.7", "stack-chain": "^2.0.0", "string-argv": "^0.3.1", + "strip-ansi": "6.0.1", "supports-color": "^8.1.1", "tmp": "^0.2.1", "util-arity": "^1.1.0", @@ -273,7 +275,6 @@ "express": "4.18.1", "fs-extra": "10.1.0", "genversion": "3.1.1", - "has-ansi": "^4.0.1", "mocha": "10.0.0", "mustache": "4.2.0", "nyc": "15.1.0", @@ -285,7 +286,6 @@ "sinon-chai": "3.7.0", "stream-buffers": "3.0.2", "stream-to-string": "1.2.0", - "strip-ansi": "6.0.1", "ts-node": "10.7.0", "tsd": "0.20.0", "typescript": "4.6.4"