@overkill-dev/reporter-line 0.0.36 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -6,10 +6,11 @@
6
6
  "dependencies": {
7
7
  "ansi-escapes": "7.3.0",
8
8
  "figures": "6.1.0",
9
+ "is-interactive": "2.0.0",
9
10
  "string-width": "8.3.0",
10
11
  "yoctocolors": "2.2.0"
11
12
  },
12
- "description": "Human-readable Overkill line reporter.",
13
+ "description": "Human-readable Overkill line reporter family.",
13
14
  "engines": {
14
15
  "node": "^26.9.0"
15
16
  },
@@ -28,7 +29,7 @@
28
29
  "license": "MIT",
29
30
  "name": "@overkill-dev/reporter-line",
30
31
  "peerDependencies": {
31
- "@overkill-dev/engine": "0.0.43"
32
+ "@overkill-dev/engine": "0.0.44"
32
33
  },
33
34
  "repository": {
34
35
  "type": "git",
@@ -36,8 +37,9 @@
36
37
  },
37
38
  "sideEffects": [
38
39
  "./reporters/human-reporter-rendering.js",
39
- "./reporters/line-reporter.js"
40
+ "./reporters/line-reporter.js",
41
+ "./reporters/tree-reporter.js"
40
42
  ],
41
43
  "type": "module",
42
- "version": "0.0.36"
44
+ "version": "0.0.37"
43
45
  }
@@ -1,8 +1,18 @@
1
- import type { DefinedReporter, RealTimeReporter } from '@overkill-dev/engine';
1
+ import type { DefinedReporter, FinalResultReporter, RealTimeReporter } from '@overkill-dev/engine';
2
2
  export type LineReporterOptions = {
3
3
  readonly color?: boolean;
4
4
  readonly verbose: boolean;
5
5
  readonly wrap?: boolean;
6
6
  };
7
+ export type LineProgressReporterOptions = {
8
+ readonly showPassing?: boolean;
9
+ readonly verbose?: boolean;
10
+ };
11
+ export type LineTreeReporterOptions = {
12
+ readonly showPassing?: boolean;
13
+ readonly verbose?: boolean;
14
+ };
7
15
  export declare function createLineReporter(options?: LineReporterOptions): DefinedReporter<RealTimeReporter>;
16
+ export declare function createLineProgressReporter(options?: LineProgressReporterOptions): DefinedReporter<RealTimeReporter>;
17
+ export declare function createLineTreeReporter(options?: LineTreeReporterOptions): DefinedReporter<FinalResultReporter>;
8
18
  //# sourceMappingURL=reporter-line.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter-line.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/reporter-line/reporter-line.entry-point.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAiC,CAAC;AAIzF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAkBF,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAUnG"}
1
+ {"version":3,"file":"reporter-line.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/reporter-line/reporter-line.entry-point.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sBAAiC,CAAC;AAI9G,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAiCF,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAUnG;AAED,wBAAgB,0BAA0B,CACtC,OAAO,CAAC,EAAE,2BAA2B,GACtC,eAAe,CAAC,gBAAgB,CAAC,CAWnC;AAED,wBAAgB,sBAAsB,CAClC,OAAO,CAAC,EAAE,uBAAuB,GAClC,eAAe,CAAC,mBAAmB,CAAC,CAQtC"}
@@ -1,5 +1,22 @@
1
+ import isInteractive from 'is-interactive';
1
2
  import { createLineReporter as createLineReporterInstance } from "../../reporters/line-reporter.js";
3
+ import { createProgressReporter as createProgressReporterInstance } from "../../reporters/progress-reporter.js";
4
+ import { createTreeReporter as createTreeReporterInstance } from "../../reporters/tree-reporter.js";
2
5
  const defaultColumns = 80;
6
+ const stdout = {
7
+ get columns() {
8
+ return process.stdout.columns;
9
+ },
10
+ off(event, listener) {
11
+ return process.stdout.off(event, listener);
12
+ },
13
+ on(event, listener) {
14
+ return process.stdout.on(event, listener);
15
+ },
16
+ write(text) {
17
+ return process.stdout.write(text);
18
+ }
19
+ };
3
20
  function colorOption(options) {
4
21
  return options?.color ?? true;
5
22
  }
@@ -23,4 +40,19 @@ export function createLineReporter(options) {
23
40
  verbose: verboseOption(options)
24
41
  });
25
42
  }
43
+ export function createLineProgressReporter(options) {
44
+ return createProgressReporterInstance({
45
+ interactive: isInteractive({ stream: process.stdout }),
46
+ stdout
47
+ }, {
48
+ showPassing: options?.showPassing ?? true,
49
+ verbose: options?.verbose ?? false
50
+ });
51
+ }
52
+ export function createLineTreeReporter(options) {
53
+ return createTreeReporterInstance({ stdoutConsole: console }, {
54
+ showPassing: options?.showPassing ?? true,
55
+ verbose: options?.verbose ?? false
56
+ });
57
+ }
26
58
  //# sourceMappingURL=reporter-line.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter-line.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/reporter-line/reporter-line.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGpG,MAAM,cAAc,GAAG,EAAE,CAAC;AAQ1B,SAAS,WAAW,CAAC,OAAwC;IACzD,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,OAAwC;IACxD,OAAO,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,OAAwC;IAC3D,OAAO,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;AACrC,CAAC;AAED,SAAS,cAAc;IACnB,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC5D,OAAO,0BAA0B,CAAC;QAC9B,OAAO,EAAE,cAAc,EAAE;QACzB,aAAa,EAAE;YACX,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;SAC5B;QACD,aAAa,EAAE,OAAO;QACtB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;KAClC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"reporter-line.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/reporter-line/reporter-line.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAE,sBAAsB,IAAI,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAEhH,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGpG,MAAM,cAAc,GAAG,EAAE,CAAC;AAkB1B,MAAM,MAAM,GAAmB;IAC3B,IAAI,OAAO;QACP,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,GAAG,CAAC,KAAK,EAAE,QAAQ;QACf,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,EAAE,CAAC,KAAK,EAAE,QAAQ;QACd,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,IAAI;QACN,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACJ,CAAC;AAEF,SAAS,WAAW,CAAC,OAAwC;IACzD,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,OAAwC;IACxD,OAAO,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,OAAwC;IAC3D,OAAO,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;AACrC,CAAC;AAED,SAAS,cAAc;IACnB,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC5D,OAAO,0BAA0B,CAAC;QAC9B,OAAO,EAAE,cAAc,EAAE;QACzB,aAAa,EAAE;YACX,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;SAC5B;QACD,aAAa,EAAE,OAAO;QACtB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;KAClC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,OAAqC;IAErC,OAAO,8BAA8B,CACjC;QACI,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACtD,MAAM;KACT,EACD;QACI,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;QACzC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;KACrC,CACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,OAAiC;IAEjC,OAAO,0BAA0B,CAC7B,EAAE,aAAa,EAAE,OAAO,EAAE,EAC1B;QACI,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;QACzC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;KACrC,CACJ,CAAC;AACN,CAAC"}
package/readme.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # `@overkill-dev/reporter-line`
2
2
 
3
- Human-readable real-time line reporter for Overkill test runs.
3
+ Human-readable line reporter family for Overkill test runs.
4
4
 
5
5
  Top-level API:
6
6
 
7
7
  - `createLineReporter()`
8
+ - `createLineTreeReporter()`
9
+ - `createLineProgressReporter()`
8
10
 
9
11
  Usage:
10
12
 
@@ -22,6 +24,11 @@ await execute(testPlan, {
22
24
 
23
25
  The reporter writes directly to `stdout` and declares `stdout-raw`.
24
26
 
27
+ `createLineReporter()` emits completed tests in completion order.
28
+ `createLineTreeReporter()` prints the logical result tree after the run.
29
+ `createLineProgressReporter()` shows compact live progress, then prints the
30
+ same logical result tree.
31
+
25
32
  Rendering:
26
33
 
27
34
  - failed test headers show identity and duration only
@@ -0,0 +1,81 @@
1
+ import ansiEscapes from 'ansi-escapes';
2
+ import figures from 'figures';
3
+ import colors from 'yoctocolors';
4
+ import { defineReporter } from "@overkill-dev/engine";
5
+ import { treeResultLines } from "./tree-reporter.js";
6
+ function readPlannedCount(event) {
7
+ const { cases } = event.facts;
8
+ return Array.isArray(cases) ? cases.length : null;
9
+ }
10
+ function progressText(state) {
11
+ const planned = state.planned === null ? '?' : String(state.planned);
12
+ const width = 20;
13
+ const filled = state.planned === null || state.planned === 0
14
+ ? 0
15
+ : Math.min(width, Math.round(width * state.completed / state.planned));
16
+ const bar = `${'='.repeat(filled)}${'.'.repeat(width - filled)}`;
17
+ return `[${bar}] ${state.completed}/${planned} failed=${state.failed}`;
18
+ }
19
+ function updateState(state, event) {
20
+ return {
21
+ completed: state.completed + 1,
22
+ failed: event.verdict === 'pass' || event.verdict === 'skip' ? state.failed : state.failed + 1,
23
+ planned: state.planned
24
+ };
25
+ }
26
+ function runnerErrorLine(event) {
27
+ return `${colors.red(figures.warning)} Runner error: ${event.error.message}`;
28
+ }
29
+ export function createProgressReporter(dependencies, options) {
30
+ return defineReporter(function createProgressRuntimeReporter(context) {
31
+ let state = {
32
+ completed: 0,
33
+ failed: 0,
34
+ planned: null
35
+ };
36
+ let renderedProgress = false;
37
+ function writeLine(line) {
38
+ dependencies.stdout.write(`${line}\n`);
39
+ }
40
+ function renderProgress() {
41
+ if (!dependencies.interactive) {
42
+ return;
43
+ }
44
+ const prefix = renderedProgress ? ansiEscapes.eraseLines(1) : '';
45
+ dependencies.stdout.write(`${prefix}${progressText(state)}`);
46
+ renderedProgress = true;
47
+ }
48
+ function clearProgress() {
49
+ if (dependencies.interactive && renderedProgress) {
50
+ dependencies.stdout.write(ansiEscapes.eraseLines(1));
51
+ }
52
+ renderedProgress = false;
53
+ }
54
+ return {
55
+ dispose: null,
56
+ kind: 'real-time',
57
+ name: 'progress',
58
+ sinks: [{ kind: 'stdout-raw' }],
59
+ onEvent(event) {
60
+ if (event.kind === 'run-start') {
61
+ state = { completed: 0, failed: 0, planned: readPlannedCount(event) };
62
+ renderProgress();
63
+ }
64
+ else if (event.kind === 'test-end') {
65
+ state = updateState(state, event);
66
+ renderProgress();
67
+ }
68
+ else if (event.kind === 'runner-error' && !dependencies.interactive) {
69
+ writeLine(runnerErrorLine(event));
70
+ }
71
+ },
72
+ onFinish(result) {
73
+ clearProgress();
74
+ for (const line of treeResultLines(result, context, options)) {
75
+ writeLine(line);
76
+ }
77
+ }
78
+ };
79
+ });
80
+ }
81
+ //# sourceMappingURL=progress-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-reporter.js","sourceRoot":"","sources":["../../../../source/reporters/progress-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import figures from 'figures';
2
+ import colors from 'yoctocolors';
3
+ import { defineReporter } from "@overkill-dev/engine";
4
+ import { formatCountSummary, formatTimingSummary, problemLines } from "./human-reporter-rendering.js";
5
+ const successSymbol = colors.green(figures.tick);
6
+ const errorSymbol = colors.red(figures.cross);
7
+ const skipSymbol = colors.cyan('°');
8
+ const inconclusiveSymbol = colors.cyan('?');
9
+ const crashSymbol = colors.red(figures.warning);
10
+ const microsecondsPerMillisecond = 1000;
11
+ function formatDuration(durationMicroseconds) {
12
+ return `${durationMicroseconds / microsecondsPerMillisecond} ms`;
13
+ }
14
+ function symbolFor(testResult) {
15
+ if (testResult.verdict === 'pass') {
16
+ return successSymbol;
17
+ }
18
+ if (testResult.verdict === 'skip') {
19
+ return skipSymbol;
20
+ }
21
+ if (testResult.verdict === 'inconclusive') {
22
+ return inconclusiveSymbol;
23
+ }
24
+ if (testResult.verdict === 'fail') {
25
+ return errorSymbol;
26
+ }
27
+ return crashSymbol;
28
+ }
29
+ function resultVisible(testResult, options) {
30
+ return options.showPassing || testResult.verdict !== 'pass';
31
+ }
32
+ function caseLine(testResult) {
33
+ const params = testResult.id.params === null ? '' : ` [${testResult.id.params}]`;
34
+ return `${symbolFor(testResult)} ${testResult.id.title}${params} ` +
35
+ `(${formatDuration(testResult.durationMicroseconds)})`;
36
+ }
37
+ function indent(depth) {
38
+ return ' '.repeat(depth);
39
+ }
40
+ function appendFileLine(state, testResult) {
41
+ if (state.fileStarted && testResult.id.file === state.currentFile) {
42
+ return state;
43
+ }
44
+ return {
45
+ currentFile: testResult.id.file,
46
+ currentSuite: [],
47
+ fileStarted: true,
48
+ lines: [...state.lines, testResult.id.file ?? '<unknown>']
49
+ };
50
+ }
51
+ function appendSuiteLines(state, suite) {
52
+ const { currentSuite: previousSuite } = state;
53
+ const lines = Array.from(state.lines);
54
+ let currentSuite = previousSuite;
55
+ for (let index = 0; index < suite.length; index += 1) {
56
+ const [title] = suite.slice(index, index + 1);
57
+ const previous = currentSuite[index];
58
+ if (title !== previous) {
59
+ currentSuite = suite.slice(0, index + 1);
60
+ lines.push(`${indent(index + 1)}${title}`);
61
+ }
62
+ }
63
+ return { ...state, currentSuite, lines };
64
+ }
65
+ function appendTestLine(state, testResult) {
66
+ const lines = [
67
+ ...state.lines,
68
+ `${indent(testResult.id.suite.length + 1)}${caseLine(testResult)}`
69
+ ];
70
+ return { ...state, lines };
71
+ }
72
+ function appendVisibleTestResult(state, testResult) {
73
+ return appendTestLine(appendSuiteLines(appendFileLine(state, testResult), testResult.id.suite), testResult);
74
+ }
75
+ function treeLines(result, options) {
76
+ const initialState = { currentFile: null, currentSuite: [], fileStarted: false, lines: [] };
77
+ const state = result
78
+ .perTest
79
+ .filter(function includeResult(testResult) {
80
+ return resultVisible(testResult, options);
81
+ })
82
+ .reduce(appendVisibleTestResult, initialState);
83
+ return state.lines;
84
+ }
85
+ function treeSummaryLine(result) {
86
+ const symbol = result.status === 'failed' ? errorSymbol : successSymbol;
87
+ return `${symbol} ${formatCountSummary(result)} in ${formatDuration(result.timings.summary.totalWallTimeMicroseconds)} (${formatTimingSummary(result)})`;
88
+ }
89
+ export function treeResultLines(result, context, options) {
90
+ return [
91
+ ...treeLines(result, options),
92
+ ...problemLines(result, context, { verbose: options.verbose }),
93
+ treeSummaryLine(result)
94
+ ];
95
+ }
96
+ export function createTreeReporter(dependencies, options) {
97
+ return defineReporter(function createTreeRuntimeReporter(context) {
98
+ return {
99
+ dispose: null,
100
+ kind: 'final-result',
101
+ name: 'tree',
102
+ sinks: [{ kind: 'stdout-raw' }],
103
+ onResult(result) {
104
+ for (const line of treeResultLines(result, context, options)) {
105
+ dependencies.stdoutConsole.log(line);
106
+ }
107
+ }
108
+ };
109
+ });
110
+ }
111
+ //# sourceMappingURL=tree-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-reporter.js","sourceRoot":"","sources":["../../../../source/reporters/tree-reporter.ts"],"names":[],"mappings":"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"}
package/sbom.cdx.json CHANGED
@@ -16,24 +16,24 @@
16
16
  "component": {
17
17
  "type": "library",
18
18
  "name": "@overkill-dev/reporter-line",
19
- "version": "0.0.36",
20
- "bom-ref": "pkg:npm/@overkill-dev/reporter-line@0.0.36",
21
- "purl": "pkg:npm/@overkill-dev/reporter-line@0.0.36"
19
+ "version": "0.0.37",
20
+ "bom-ref": "pkg:npm/@overkill-dev/reporter-line@0.0.37",
21
+ "purl": "pkg:npm/@overkill-dev/reporter-line@0.0.37"
22
22
  }
23
23
  },
24
24
  "components": [
25
25
  {
26
26
  "type": "library",
27
27
  "name": "@overkill-dev/engine",
28
- "version": "0.0.43",
29
- "bom-ref": "pkg:npm/@overkill-dev/engine@0.0.43",
28
+ "version": "0.0.44",
29
+ "bom-ref": "pkg:npm/@overkill-dev/engine@0.0.44",
30
30
  "scope": "optional",
31
31
  "licenses": [
32
32
  {
33
33
  "expression": "MIT"
34
34
  }
35
35
  ],
36
- "purl": "pkg:npm/@overkill-dev/engine@0.0.43"
36
+ "purl": "pkg:npm/@overkill-dev/engine@0.0.44"
37
37
  },
38
38
  {
39
39
  "type": "library",
@@ -61,6 +61,19 @@
61
61
  ],
62
62
  "purl": "pkg:npm/figures@6.1.0"
63
63
  },
64
+ {
65
+ "type": "library",
66
+ "name": "is-interactive",
67
+ "version": "2.0.0",
68
+ "bom-ref": "pkg:npm/is-interactive@2.0.0",
69
+ "scope": "required",
70
+ "licenses": [
71
+ {
72
+ "expression": "MIT"
73
+ }
74
+ ],
75
+ "purl": "pkg:npm/is-interactive@2.0.0"
76
+ },
64
77
  {
65
78
  "type": "library",
66
79
  "name": "string-width",
@@ -90,14 +103,15 @@
90
103
  ],
91
104
  "dependencies": [
92
105
  {
93
- "ref": "pkg:npm/@overkill-dev/engine@0.0.43"
106
+ "ref": "pkg:npm/@overkill-dev/engine@0.0.44"
94
107
  },
95
108
  {
96
- "ref": "pkg:npm/@overkill-dev/reporter-line@0.0.36",
109
+ "ref": "pkg:npm/@overkill-dev/reporter-line@0.0.37",
97
110
  "dependsOn": [
98
- "pkg:npm/@overkill-dev/engine@0.0.43",
111
+ "pkg:npm/@overkill-dev/engine@0.0.44",
99
112
  "pkg:npm/ansi-escapes@7.3.0",
100
113
  "pkg:npm/figures@6.1.0",
114
+ "pkg:npm/is-interactive@2.0.0",
101
115
  "pkg:npm/string-width@8.3.0",
102
116
  "pkg:npm/yoctocolors@2.2.0"
103
117
  ]
@@ -108,6 +122,9 @@
108
122
  {
109
123
  "ref": "pkg:npm/figures@6.1.0"
110
124
  },
125
+ {
126
+ "ref": "pkg:npm/is-interactive@2.0.0"
127
+ },
111
128
  {
112
129
  "ref": "pkg:npm/string-width@8.3.0"
113
130
  },