@quenty/cli-output-helpers 1.11.0 → 1.13.0
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/CHANGELOG.md +19 -0
- package/dist/reporting/github/formatting.d.ts +2 -2
- package/dist/reporting/github/formatting.d.ts.map +1 -1
- package/dist/reporting/github/formatting.js +7 -1
- package/dist/reporting/github/formatting.js.map +1 -1
- package/dist/reporting/progress-format.d.ts.map +1 -1
- package/dist/reporting/progress-format.js +4 -0
- package/dist/reporting/progress-format.js.map +1 -1
- package/dist/reporting/reporter.d.ts +6 -1
- package/dist/reporting/reporter.d.ts.map +1 -1
- package/dist/reporting/reporter.js.map +1 -1
- package/dist/reporting/simple-reporter.d.ts.map +1 -1
- package/dist/reporting/simple-reporter.js +4 -1
- package/dist/reporting/simple-reporter.js.map +1 -1
- package/dist/reporting/spinner-reporter.d.ts +12 -1
- package/dist/reporting/spinner-reporter.d.ts.map +1 -1
- package/dist/reporting/spinner-reporter.js +64 -25
- package/dist/reporting/spinner-reporter.js.map +1 -1
- package/dist/reporting/spinner-reporter.test.js +50 -30
- package/dist/reporting/spinner-reporter.test.js.map +1 -1
- package/package.json +2 -2
- package/src/reporting/github/formatting.ts +9 -4
- package/src/reporting/progress-format.ts +4 -0
- package/src/reporting/reporter.ts +11 -1
- package/src/reporting/simple-reporter.ts +5 -1
- package/src/reporting/spinner-reporter.test.ts +61 -31
- package/src/reporting/spinner-reporter.ts +80 -34
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.13.0](https://github.com/Quenty/Nevermore/compare/@quenty/cli-output-helpers@1.12.0...@quenty/cli-output-helpers@1.13.0) (2026-05-19)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- Deploying uses spinner ([51f485d](https://github.com/Quenty/Nevermore/commit/51f485d00925cbba4cc23eb6b767ca3bfef34dea))
|
|
11
|
+
- Deployment auto-resolves a target ([1114a01](https://github.com/Quenty/Nevermore/commit/1114a0150d133d5223be9ce8b8ee056ea09c9285))
|
|
12
|
+
- Phase labels were missing data before, and now are enforced properly ([79f8b4c](https://github.com/Quenty/Nevermore/commit/79f8b4ca1a9ef741e57f94a20ba1b13ce8e6f4d9))
|
|
13
|
+
- Show hints and output after spinner writing ([fcac46d](https://github.com/Quenty/Nevermore/commit/fcac46d8bb9c8869b07a1522e3fcab5a11f96535))
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- Progress summary includes version and the action word "Publishing" vs. "Deploying" ([ae1313f](https://github.com/Quenty/Nevermore/commit/ae1313f78e49a255f31f9f8b87bce4755ee01400))
|
|
18
|
+
|
|
19
|
+
# [1.12.0](https://github.com/Quenty/Nevermore/compare/@quenty/cli-output-helpers@1.11.0...@quenty/cli-output-helpers@1.12.0) (2026-05-18)
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- Fix rendering issues in terminal ([c7b39e7](https://github.com/Quenty/Nevermore/commit/c7b39e7f15b7db281b29cd833569334d7d26f183))
|
|
24
|
+
|
|
6
25
|
# [1.11.0](https://github.com/Quenty/Nevermore/compare/@quenty/cli-output-helpers@1.10.1...@quenty/cli-output-helpers@1.11.0) (2026-05-14)
|
|
7
26
|
|
|
8
27
|
### Features
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Both the PR comment reporter and job summary reporter use these to
|
|
5
5
|
* render identical markdown tables from batch run state.
|
|
6
6
|
*/
|
|
7
|
-
import { type PackageResult, type
|
|
7
|
+
import { type PackageResult, type ProgressSummary, type JobPhase } from '../reporter.js';
|
|
8
8
|
import { type IStateTracker, type PackageState } from '../state/state-tracker.js';
|
|
9
9
|
/** A column to render in the GitHub comment table. */
|
|
10
10
|
export interface GithubCommentColumn {
|
|
@@ -47,7 +47,7 @@ export interface GithubTableRow {
|
|
|
47
47
|
* Parses JSON API error bodies and truncates long messages.
|
|
48
48
|
*/
|
|
49
49
|
export declare function summarizeError(error: string, failedPhase?: JobPhase): string;
|
|
50
|
-
export declare function formatRunningStatus(phase:
|
|
50
|
+
export declare function formatRunningStatus(phase: JobPhase, progress?: ProgressSummary): string;
|
|
51
51
|
export declare function formatResultStatus(pkg: PackageResult, successLabel: string, failureLabel: string): string;
|
|
52
52
|
export declare function getActionsRunUrl(): string | undefined;
|
|
53
53
|
/** Render a markdown table with header, data rows, and footer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/reporting/github/formatting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/reporting/github/formatting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AASnC,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC;IAClC,kEAAkE;IAClE,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAChC;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAkB5E;AAkCD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CAOR;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,CAiBR;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAUrD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,cAAc,EAAE,EACtB,YAAY,EAAE,mBAAmB,EAAE,EACnC,MAAM,EAAE,MAAM,GACb,MAAM,CAyCR;AA8BD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,wBAAwB,EAChC,WAAW,EAAE,MAAM,GAClB,MAAM,CA4ER;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,wBAAwB,EAChC,OAAO,EAAE,MAAM,GACd,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,MAAM,GACZ,MAAM,CAcR"}
|
|
@@ -44,8 +44,14 @@ function _extractJsonMessage(text) {
|
|
|
44
44
|
return undefined;
|
|
45
45
|
}
|
|
46
46
|
// ── Table rendering ─────────────────────────────────────────────────────────
|
|
47
|
+
// Typed Record<JobPhase, string> so adding a new JobPhase fails the build
|
|
48
|
+
// until a label is supplied here.
|
|
47
49
|
const RUNNING_PHASE_LABELS = {
|
|
50
|
+
waiting: '⏸ Waiting...',
|
|
48
51
|
building: '🔨 Building...',
|
|
52
|
+
downloading: '⬇ Downloading...',
|
|
53
|
+
merging: '🔀 Merging...',
|
|
54
|
+
combining: '🔗 Combining...',
|
|
49
55
|
uploading: '📤 Uploading...',
|
|
50
56
|
scheduling: '⏳ Scheduling...',
|
|
51
57
|
launching: '🚀 Launching...',
|
|
@@ -53,7 +59,7 @@ const RUNNING_PHASE_LABELS = {
|
|
|
53
59
|
executing: '🔄 Executing...',
|
|
54
60
|
};
|
|
55
61
|
export function formatRunningStatus(phase, progress) {
|
|
56
|
-
const label = RUNNING_PHASE_LABELS[phase]
|
|
62
|
+
const label = RUNNING_PHASE_LABELS[phase];
|
|
57
63
|
if (progress) {
|
|
58
64
|
const progressText = formatProgressInline(progress);
|
|
59
65
|
return progressText ? `${label} ${progressText}` : label;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../src/reporting/github/formatting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../src/reporting/github/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-format.d.ts","sourceRoot":"","sources":["../../src/reporting/progress-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"progress-format.d.ts","sourceRoot":"","sources":["../../src/reporting/progress-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAsBvE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAavE;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAElE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,QAAQ,GACrB,MAAM,CAmBR"}
|
|
@@ -26,6 +26,8 @@ export function formatProgressInline(progress) {
|
|
|
26
26
|
}
|
|
27
27
|
// Indeterminate: show label or just the count
|
|
28
28
|
return progress.label ? `(${progress.label})` : `(${progress.completed})`;
|
|
29
|
+
case 'version':
|
|
30
|
+
return `(v${progress.version})`;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
/**
|
|
@@ -46,6 +48,8 @@ export function formatProgressResult(progress) {
|
|
|
46
48
|
return `(${_formatBytes(progress.totalBytes)})`;
|
|
47
49
|
case 'steps':
|
|
48
50
|
return `(${progress.completed}/${progress.total})`;
|
|
51
|
+
case 'version':
|
|
52
|
+
return `(v${progress.version})`;
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
/** True when progress is test-counts with total === 0. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-format.js","sourceRoot":"","sources":["../../src/reporting/progress-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAA0B;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,aAAa;YAChB,OAAO,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC;QAClD,KAAK,OAAO;YACV,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,IAAI,QAAQ,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBAC7D,OAAO,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAChE,QAAQ,CAAC,UAAU,CACpB,GAAG,CAAC;YACP,CAAC;YACD,OAAO,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAClD,KAAK,OAAO;YACV,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC;YACrD,CAAC;YACD,8CAA8C;YAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"progress-format.js","sourceRoot":"","sources":["../../src/reporting/progress-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,12 @@ export interface StepProgress {
|
|
|
28
28
|
total: number;
|
|
29
29
|
label?: string;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
/** Place version label: "v14" */
|
|
32
|
+
export interface VersionProgress {
|
|
33
|
+
kind: 'version';
|
|
34
|
+
version: number;
|
|
35
|
+
}
|
|
36
|
+
export type ProgressSummary = TestCountProgress | ByteProgress | StepProgress | VersionProgress;
|
|
32
37
|
/** Result for a single package in a batch run. */
|
|
33
38
|
export interface PackageResult {
|
|
34
39
|
packageName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mDAAmD;AACnD,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,UAAU,GACV,aAAa,GACb,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,WAAW,CAAC;AAEhB,qEAAqE;AACrE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAIvE,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/reporting/reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/reporting/reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuGH;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,UAAU,KAAmB,CAAC;IACpC,cAAc,CAAC,YAAoB,IAAS,CAAC;IAC7C,oBAAoB,CAAC,YAAoB,EAAE,MAAgB,IAAS,CAAC;IACrE,uBAAuB,CACrB,YAAoB,EACpB,SAA0B,IACnB,CAAC;IACV,eAAe,CAAC,OAAsB,EAAE,eAA0B,IAAS,CAAC;IAC5E,KAAK,CAAC,SAAS,KAAmB,CAAC;CACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/simple-reporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;gBAEpB,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB;IAQvD,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"simple-reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/simple-reporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;gBAEpB,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB;IAQvD,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAwBtC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAK1C"}
|
|
@@ -22,9 +22,12 @@ export class SimpleReporter extends BaseReporter {
|
|
|
22
22
|
if (result.logs && showLogs) {
|
|
23
23
|
console.log(result.logs);
|
|
24
24
|
}
|
|
25
|
-
else if (showLogs) {
|
|
25
|
+
else if (showLogs && !result.error) {
|
|
26
26
|
OutputHelper.info('(no output)');
|
|
27
27
|
}
|
|
28
|
+
if (result.error) {
|
|
29
|
+
OutputHelper.error(result.error);
|
|
30
|
+
}
|
|
28
31
|
const progressText = formatProgressResult(result.progressSummary);
|
|
29
32
|
if (result.success) {
|
|
30
33
|
const msg = progressText
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-reporter.js","sourceRoot":"","sources":["../../src/reporting/simple-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAsB,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAU5D;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IACtC,MAAM,CAAgB;IACtB,eAAe,CAAU;IACzB,eAAe,CAAS;IACxB,eAAe,CAAS;IAEhC,YAAY,KAAoB,EAAE,OAA8B;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;IAC7D,CAAC;IAEQ,eAAe,CAAC,MAAqB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAEzD,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"simple-reporter.js","sourceRoot":"","sources":["../../src/reporting/simple-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAsB,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAU5D;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IACtC,MAAM,CAAgB;IACtB,eAAe,CAAU;IACzB,eAAe,CAAS;IACxB,eAAe,CAAS;IAEhC,YAAY,KAAoB,EAAE,OAA8B;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;IAC7D,CAAC;IAEQ,eAAe,CAAC,MAAqB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAEzD,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,YAAY;gBACtB,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,IAAI,YAAY,EAAE;gBAC3C,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,SAAS;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -4,6 +4,8 @@ export interface SpinnerReporterOptions {
|
|
|
4
4
|
showLogs: boolean;
|
|
5
5
|
/** Verb used in the header, e.g. "Testing", "Deploying". Default: "Processing" */
|
|
6
6
|
actionVerb?: string;
|
|
7
|
+
/** Extra context appended to the header line, e.g. "to target 'integration'". */
|
|
8
|
+
actionContext?: string;
|
|
7
9
|
/** Label for successful results, e.g. "Deployed". Default: "Passed" */
|
|
8
10
|
successLabel?: string;
|
|
9
11
|
/** Label for failed results, e.g. "DEPLOY FAILED". Default: "FAILED" */
|
|
@@ -12,6 +14,14 @@ export interface SpinnerReporterOptions {
|
|
|
12
14
|
/**
|
|
13
15
|
* TTY spinner rendering for batch job progress.
|
|
14
16
|
* Reads all state from IStateTracker; re-renders on a timer interval.
|
|
17
|
+
*
|
|
18
|
+
* Stdout/stderr writes between startAsync() and stopAsync() are *captured*,
|
|
19
|
+
* not passed through. The spinner repaints by rewinding the cursor with
|
|
20
|
+
* `\x1b[NA\x1b[0J`, so any write that landed inside the spinner's render
|
|
21
|
+
* region would be erased on the next 80ms tick. Callers should not have to
|
|
22
|
+
* think about that — we buffer writes and flush them in stopAsync(), so
|
|
23
|
+
* `console.log` / `OutputHelper.info` / etc. during a run still surface,
|
|
24
|
+
* just after the spinner has finished.
|
|
15
25
|
*/
|
|
16
26
|
export declare class SpinnerReporter extends BaseReporter {
|
|
17
27
|
private _state;
|
|
@@ -19,8 +29,9 @@ export declare class SpinnerReporter extends BaseReporter {
|
|
|
19
29
|
private _renderedLineCount;
|
|
20
30
|
private _renderInterval?;
|
|
21
31
|
private _spinnerFrame;
|
|
22
|
-
private
|
|
32
|
+
private _capturedOutput;
|
|
23
33
|
private _originalStdoutWrite;
|
|
34
|
+
private _originalStderrWrite;
|
|
24
35
|
private _isRendering;
|
|
25
36
|
constructor(state: IStateTracker, options: SpinnerReporterOptions);
|
|
26
37
|
startAsync(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner-reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/spinner-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"spinner-reporter.d.ts","sourceRoot":"","sources":["../../src/reporting/spinner-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,YAAY,CAAS;gBAEjB,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB;IAMlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD3B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCzC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,OAAO;CA4EhB"}
|
|
@@ -3,10 +3,14 @@ import { formatDurationMs } from '../cli-utils.js';
|
|
|
3
3
|
import { BaseReporter } from './reporter.js';
|
|
4
4
|
import { formatProgressInline, formatProgressResult, isEmptyTestRun, } from './progress-format.js';
|
|
5
5
|
const SPINNER_FRAMES = ['◐', '◓', '◑', '◒'];
|
|
6
|
-
|
|
6
|
+
// Typed Record<JobPhase, string> so adding a new JobPhase fails the build
|
|
7
|
+
// until a label is supplied here — otherwise the renderer's else branch
|
|
8
|
+
// would silently flash the failure label during the missing phase.
|
|
7
9
|
const PHASE_LABELS = {
|
|
8
10
|
waiting: '◇ Waiting',
|
|
9
11
|
building: '⚙ Building',
|
|
12
|
+
downloading: '⬇ Downloading',
|
|
13
|
+
merging: '🔀 Merging',
|
|
10
14
|
combining: '🔗 Combining',
|
|
11
15
|
uploading: '▲ Uploading',
|
|
12
16
|
scheduling: '◇ Scheduling',
|
|
@@ -17,6 +21,14 @@ const PHASE_LABELS = {
|
|
|
17
21
|
/**
|
|
18
22
|
* TTY spinner rendering for batch job progress.
|
|
19
23
|
* Reads all state from IStateTracker; re-renders on a timer interval.
|
|
24
|
+
*
|
|
25
|
+
* Stdout/stderr writes between startAsync() and stopAsync() are *captured*,
|
|
26
|
+
* not passed through. The spinner repaints by rewinding the cursor with
|
|
27
|
+
* `\x1b[NA\x1b[0J`, so any write that landed inside the spinner's render
|
|
28
|
+
* region would be erased on the next 80ms tick. Callers should not have to
|
|
29
|
+
* think about that — we buffer writes and flush them in stopAsync(), so
|
|
30
|
+
* `console.log` / `OutputHelper.info` / etc. during a run still surface,
|
|
31
|
+
* just after the spinner has finished.
|
|
20
32
|
*/
|
|
21
33
|
export class SpinnerReporter extends BaseReporter {
|
|
22
34
|
_state;
|
|
@@ -24,8 +36,9 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
24
36
|
_renderedLineCount = 0;
|
|
25
37
|
_renderInterval;
|
|
26
38
|
_spinnerFrame = 0;
|
|
27
|
-
|
|
39
|
+
_capturedOutput = '';
|
|
28
40
|
_originalStdoutWrite;
|
|
41
|
+
_originalStderrWrite;
|
|
29
42
|
_isRendering = false;
|
|
30
43
|
constructor(state, options) {
|
|
31
44
|
super();
|
|
@@ -35,19 +48,37 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
35
48
|
async startAsync() {
|
|
36
49
|
const count = this._state.total;
|
|
37
50
|
const verb = this._options.actionVerb ?? 'Processing';
|
|
38
|
-
|
|
51
|
+
const noun = count === 1 ? 'package' : 'packages';
|
|
52
|
+
const context = this._options.actionContext;
|
|
53
|
+
const header = context
|
|
54
|
+
? `${verb} ${count} ${noun} ${context}`
|
|
55
|
+
: `${verb} ${count} ${noun}`;
|
|
56
|
+
console.log(OutputHelper.formatInfo(`${header}\n`));
|
|
39
57
|
process.stdout.write('\x1b[?25l');
|
|
40
58
|
this._renderedLineCount = 0;
|
|
41
|
-
// Intercept stdout
|
|
59
|
+
// Intercept stdout/stderr. External writes during the spinner are
|
|
60
|
+
// captured into a buffer instead of going to the terminal, otherwise the
|
|
61
|
+
// next 80ms render tick would clobber them via the cursor-rewind. The
|
|
62
|
+
// buffer is flushed in stopAsync() so callers still see their output —
|
|
63
|
+
// just after the spinner finishes. Writes made *by* the spinner itself
|
|
64
|
+
// (_isRendering=true) pass through normally.
|
|
42
65
|
this._originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
66
|
+
this._originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
43
67
|
const self = this;
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
self._extraLines += (str.match(/\n/g) || []).length;
|
|
68
|
+
const intercept = (originalWrite, stream) => function (chunk, ...args) {
|
|
69
|
+
if (self._isRendering) {
|
|
70
|
+
return originalWrite.call(stream, chunk, ...args);
|
|
48
71
|
}
|
|
49
|
-
|
|
72
|
+
const str = typeof chunk === 'string' ? chunk : chunk.toString();
|
|
73
|
+
self._capturedOutput += str;
|
|
74
|
+
// Invoke the optional Node-style completion callback if present.
|
|
75
|
+
const cb = args.find((a) => typeof a === 'function');
|
|
76
|
+
if (cb)
|
|
77
|
+
cb();
|
|
78
|
+
return true;
|
|
50
79
|
};
|
|
80
|
+
process.stdout.write = intercept(this._originalStdoutWrite, process.stdout);
|
|
81
|
+
process.stderr.write = intercept(this._originalStderrWrite, process.stderr);
|
|
51
82
|
this._render();
|
|
52
83
|
this._renderInterval = setInterval(() => {
|
|
53
84
|
this._spinnerFrame = (this._spinnerFrame + 1) % SPINNER_FRAMES.length;
|
|
@@ -60,13 +91,23 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
60
91
|
this._renderInterval = undefined;
|
|
61
92
|
}
|
|
62
93
|
this._render();
|
|
63
|
-
// Restore original stdout.write
|
|
94
|
+
// Restore original stdout.write / stderr.write
|
|
64
95
|
if (this._originalStdoutWrite) {
|
|
65
96
|
process.stdout.write = this._originalStdoutWrite;
|
|
66
97
|
this._originalStdoutWrite = undefined;
|
|
67
98
|
}
|
|
99
|
+
if (this._originalStderrWrite) {
|
|
100
|
+
process.stderr.write = this._originalStderrWrite;
|
|
101
|
+
this._originalStderrWrite = undefined;
|
|
102
|
+
}
|
|
68
103
|
process.stdout.write('\x1b[?25h');
|
|
69
104
|
console.log('');
|
|
105
|
+
// Flush anything captured during the run. Goes out *after* the final
|
|
106
|
+
// spinner frame so callers see their late prints below the progress.
|
|
107
|
+
if (this._capturedOutput.length > 0) {
|
|
108
|
+
process.stdout.write(this._capturedOutput);
|
|
109
|
+
this._capturedOutput = '';
|
|
110
|
+
}
|
|
70
111
|
if (this._options.showLogs) {
|
|
71
112
|
this._printAllLogs();
|
|
72
113
|
}
|
|
@@ -119,21 +160,11 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
119
160
|
: 0;
|
|
120
161
|
const time = elapsed > 0 ? formatDurationMs(elapsed) : '';
|
|
121
162
|
let line;
|
|
122
|
-
const phaseLabel = PHASE_LABELS[state.status];
|
|
123
163
|
if (state.status === 'pending') {
|
|
124
164
|
const icon = OutputHelper.formatDim('○');
|
|
125
165
|
const statusText = OutputHelper.formatDim('Queued');
|
|
126
166
|
line = ` ${icon} ${OutputHelper.formatDim(state.name.padEnd(30))} ${statusText}`;
|
|
127
167
|
}
|
|
128
|
-
else if (phaseLabel) {
|
|
129
|
-
const icon = OutputHelper.formatInfo(spinner);
|
|
130
|
-
const progressText = formatProgressInline(state.progress);
|
|
131
|
-
const plain = progressText
|
|
132
|
-
? `${phaseLabel} ${progressText}`
|
|
133
|
-
: phaseLabel;
|
|
134
|
-
const statusText = OutputHelper.formatInfo(plain.padEnd(22));
|
|
135
|
-
line = ` ${icon} ${state.name.padEnd(30)} ${statusText} ${OutputHelper.formatDim(time)}`;
|
|
136
|
-
}
|
|
137
168
|
else if (state.status === 'passed') {
|
|
138
169
|
const icon = OutputHelper.formatSuccess('✓');
|
|
139
170
|
const progressText = formatProgressResult(state.result?.progressSummary);
|
|
@@ -147,7 +178,7 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
147
178
|
: OutputHelper.formatSuccess(plain.padEnd(22));
|
|
148
179
|
line = ` ${icon} ${state.name.padEnd(30)} ${statusText} ${OutputHelper.formatDim(time)}`;
|
|
149
180
|
}
|
|
150
|
-
else {
|
|
181
|
+
else if (state.status === 'failed') {
|
|
151
182
|
const icon = OutputHelper.formatError('✗');
|
|
152
183
|
const failedPhase = state.result?.failedPhase;
|
|
153
184
|
const plain = failedPhase
|
|
@@ -156,16 +187,24 @@ export class SpinnerReporter extends BaseReporter {
|
|
|
156
187
|
const statusText = OutputHelper.formatError(plain.padEnd(22));
|
|
157
188
|
line = ` ${icon} ${state.name.padEnd(30)} ${statusText} ${OutputHelper.formatDim(time)}`;
|
|
158
189
|
}
|
|
190
|
+
else {
|
|
191
|
+
const phaseLabel = PHASE_LABELS[state.status];
|
|
192
|
+
const icon = OutputHelper.formatInfo(spinner);
|
|
193
|
+
const progressText = formatProgressInline(state.progress);
|
|
194
|
+
const plain = progressText
|
|
195
|
+
? `${phaseLabel} ${progressText}`
|
|
196
|
+
: phaseLabel;
|
|
197
|
+
const statusText = OutputHelper.formatInfo(plain.padEnd(22));
|
|
198
|
+
line = ` ${icon} ${state.name.padEnd(30)} ${statusText} ${OutputHelper.formatDim(time)}`;
|
|
199
|
+
}
|
|
159
200
|
lines.push(line);
|
|
160
201
|
}
|
|
161
202
|
lines.push('');
|
|
162
203
|
lines.push(OutputHelper.formatDim(`${this._state.completed}/${this._state.total} complete`));
|
|
163
204
|
this._isRendering = true;
|
|
164
205
|
let frame = '';
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (totalLines > 0) {
|
|
168
|
-
frame += `\x1b[${totalLines}A\x1b[0J`;
|
|
206
|
+
if (this._renderedLineCount > 0) {
|
|
207
|
+
frame += `\x1b[${this._renderedLineCount}A\x1b[0J`;
|
|
169
208
|
}
|
|
170
209
|
frame += lines.join('\n') + '\n';
|
|
171
210
|
process.stdout.write(frame);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner-reporter.js","sourceRoot":"","sources":["../../src/reporting/spinner-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"spinner-reporter.js","sourceRoot":"","sources":["../../src/reporting/spinner-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,13 @@ function setup() {
|
|
|
10
10
|
const spinner = new SpinnerReporter(state, { showLogs: false });
|
|
11
11
|
// Capture everything written to stdout
|
|
12
12
|
const writes = [];
|
|
13
|
-
|
|
14
|
-
vi.spyOn(process.stdout, 'write').mockImplementation(((chunk, ...args) => {
|
|
13
|
+
vi.spyOn(process.stdout, 'write').mockImplementation(((chunk, ..._args) => {
|
|
15
14
|
writes.push(typeof chunk === 'string' ? chunk : chunk.toString());
|
|
16
15
|
return true;
|
|
17
16
|
}));
|
|
18
17
|
// Suppress console.log (used by startAsync header)
|
|
19
18
|
vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
20
|
-
return { state, spinner, writes
|
|
19
|
+
return { state, spinner, writes };
|
|
21
20
|
}
|
|
22
21
|
/** Extract cursor-up escape codes (\x1b[NA) from captured writes. */
|
|
23
22
|
function extractCursorUps(writes) {
|
|
@@ -30,7 +29,7 @@ function extractCursorUps(writes) {
|
|
|
30
29
|
}
|
|
31
30
|
return results;
|
|
32
31
|
}
|
|
33
|
-
describe('SpinnerReporter
|
|
32
|
+
describe('SpinnerReporter cursor math', () => {
|
|
34
33
|
beforeEach(() => {
|
|
35
34
|
vi.useFakeTimers();
|
|
36
35
|
});
|
|
@@ -38,7 +37,7 @@ describe('SpinnerReporter stdout resilience', () => {
|
|
|
38
37
|
vi.useRealTimers();
|
|
39
38
|
vi.restoreAllMocks();
|
|
40
39
|
});
|
|
41
|
-
it('cursor-up matches rendered line count
|
|
40
|
+
it('cursor-up matches rendered line count', async () => {
|
|
42
41
|
const { state, spinner, writes } = setup();
|
|
43
42
|
state.onPackageStart('pkg-a');
|
|
44
43
|
await spinner.startAsync();
|
|
@@ -53,49 +52,70 @@ describe('SpinnerReporter stdout resilience', () => {
|
|
|
53
52
|
expect(ups[0]).toBe(3);
|
|
54
53
|
await spinner.stopAsync();
|
|
55
54
|
});
|
|
56
|
-
it('
|
|
55
|
+
it('cursor-up ignores external writes (they are captured, not emitted)', async () => {
|
|
57
56
|
const { state, spinner, writes } = setup();
|
|
58
57
|
state.onPackageStart('pkg-a');
|
|
59
58
|
await spinner.startAsync();
|
|
60
|
-
//
|
|
59
|
+
// External writes during the spinner are buffered, not sent to the terminal.
|
|
61
60
|
process.stdout.write('external log\n');
|
|
61
|
+
process.stdout.write('more\nstuff\n');
|
|
62
62
|
writes.length = 0;
|
|
63
63
|
vi.advanceTimersByTime(80);
|
|
64
|
-
//
|
|
64
|
+
// Still just 3 — external writes never actually reach stdout, so they
|
|
65
|
+
// can't shift the cursor.
|
|
65
66
|
const ups = extractCursorUps(writes);
|
|
66
67
|
expect(ups.length).toBe(1);
|
|
67
|
-
expect(ups[0]).toBe(
|
|
68
|
+
expect(ups[0]).toBe(3);
|
|
68
69
|
await spinner.stopAsync();
|
|
69
70
|
});
|
|
70
|
-
|
|
71
|
+
});
|
|
72
|
+
describe('SpinnerReporter output capture', () => {
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
vi.useFakeTimers();
|
|
75
|
+
});
|
|
76
|
+
afterEach(() => {
|
|
77
|
+
vi.useRealTimers();
|
|
78
|
+
vi.restoreAllMocks();
|
|
79
|
+
});
|
|
80
|
+
it('captures writes during the run and flushes them on stop', async () => {
|
|
71
81
|
const { state, spinner, writes } = setup();
|
|
72
82
|
state.onPackageStart('pkg-a');
|
|
73
83
|
await spinner.startAsync();
|
|
74
|
-
//
|
|
75
|
-
process.stdout.write('
|
|
76
|
-
process.stdout.write('
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const ups = extractCursorUps(writes);
|
|
81
|
-
expect(ups.length).toBe(1);
|
|
82
|
-
expect(ups[0]).toBe(6);
|
|
84
|
+
// Capture index where post-spinner output begins.
|
|
85
|
+
process.stdout.write('hello\n');
|
|
86
|
+
process.stdout.write('world\n');
|
|
87
|
+
// Verify nothing was emitted live (only spinner frames so far).
|
|
88
|
+
expect(writes.join('')).not.toContain('hello');
|
|
89
|
+
expect(writes.join('')).not.toContain('world');
|
|
83
90
|
await spinner.stopAsync();
|
|
91
|
+
// After stopAsync, the captured output must have been flushed.
|
|
92
|
+
const all = writes.join('');
|
|
93
|
+
expect(all).toContain('hello');
|
|
94
|
+
expect(all).toContain('world');
|
|
95
|
+
// Order is preserved
|
|
96
|
+
expect(all.indexOf('hello')).toBeLessThan(all.indexOf('world'));
|
|
84
97
|
});
|
|
85
|
-
it('
|
|
98
|
+
it('captures stderr writes too', async () => {
|
|
86
99
|
const { state, spinner, writes } = setup();
|
|
100
|
+
// Intercept stderr the same way stdout is mocked.
|
|
101
|
+
vi.spyOn(process.stderr, 'write').mockImplementation(((chunk, ..._args) => {
|
|
102
|
+
writes.push(typeof chunk === 'string' ? chunk : chunk.toString());
|
|
103
|
+
return true;
|
|
104
|
+
}));
|
|
87
105
|
state.onPackageStart('pkg-a');
|
|
88
106
|
await spinner.startAsync();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
107
|
+
process.stderr.write('err line\n');
|
|
108
|
+
expect(writes.join('')).not.toContain('err line');
|
|
109
|
+
await spinner.stopAsync();
|
|
110
|
+
expect(writes.join('')).toContain('err line');
|
|
111
|
+
});
|
|
112
|
+
it('invokes the Node-style completion callback on captured writes', async () => {
|
|
113
|
+
const { state, spinner } = setup();
|
|
114
|
+
state.onPackageStart('pkg-a');
|
|
115
|
+
await spinner.startAsync();
|
|
116
|
+
const cb = vi.fn();
|
|
117
|
+
process.stdout.write('payload\n', cb);
|
|
118
|
+
expect(cb).toHaveBeenCalledTimes(1);
|
|
99
119
|
await spinner.stopAsync();
|
|
100
120
|
});
|
|
101
121
|
it('restores process.stdout.write on stop', async () => {
|