@c9up/ream 0.1.25 → 0.1.27
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/README.md +65 -0
- package/dist/ConfigLoader.d.ts +46 -5
- package/dist/ConfigLoader.d.ts.map +1 -1
- package/dist/ConfigLoader.js +60 -9
- package/dist/ConfigLoader.js.map +1 -1
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +46 -6
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts +115 -7
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +254 -40
- package/dist/Ignitor.js.map +1 -1
- package/dist/console/BaseCommand.d.ts +217 -0
- package/dist/console/BaseCommand.d.ts.map +1 -0
- package/dist/console/BaseCommand.js +340 -0
- package/dist/console/BaseCommand.js.map +1 -0
- package/dist/console/Console.d.ts +86 -0
- package/dist/console/Console.d.ts.map +1 -0
- package/dist/console/Console.js +134 -0
- package/dist/console/Console.js.map +1 -0
- package/dist/console/ExceptionHandler.d.ts +28 -0
- package/dist/console/ExceptionHandler.d.ts.map +1 -0
- package/dist/console/ExceptionHandler.js +76 -0
- package/dist/console/ExceptionHandler.js.map +1 -0
- package/dist/console/HelpCommand.d.ts +16 -0
- package/dist/console/HelpCommand.d.ts.map +1 -0
- package/dist/console/HelpCommand.js +40 -0
- package/dist/console/HelpCommand.js.map +1 -0
- package/dist/console/IndexGenerator.d.ts +24 -0
- package/dist/console/IndexGenerator.d.ts.map +1 -0
- package/dist/console/IndexGenerator.js +65 -0
- package/dist/console/IndexGenerator.js.map +1 -0
- package/dist/console/Kernel.d.ts +298 -0
- package/dist/console/Kernel.d.ts.map +1 -0
- package/dist/console/Kernel.js +1120 -0
- package/dist/console/Kernel.js.map +1 -0
- package/dist/console/ListCommand.d.ts +18 -0
- package/dist/console/ListCommand.d.ts.map +1 -0
- package/dist/console/ListCommand.js +60 -0
- package/dist/console/ListCommand.js.map +1 -0
- package/dist/console/assertions.d.ts +20 -0
- package/dist/console/assertions.d.ts.map +1 -0
- package/dist/console/assertions.js +84 -0
- package/dist/console/assertions.js.map +1 -0
- package/dist/console/cliui.d.ts +248 -0
- package/dist/console/cliui.d.ts.map +1 -0
- package/dist/console/cliui.js +587 -0
- package/dist/console/cliui.js.map +1 -0
- package/dist/console/decorators.d.ts +90 -0
- package/dist/console/decorators.d.ts.map +1 -0
- package/dist/console/decorators.js +142 -0
- package/dist/console/decorators.js.map +1 -0
- package/dist/console/index.d.ts +32 -0
- package/dist/console/index.d.ts.map +1 -0
- package/dist/console/index.js +24 -0
- package/dist/console/index.js.map +1 -0
- package/dist/console/loaders.d.ts +52 -0
- package/dist/console/loaders.d.ts.map +1 -0
- package/dist/console/loaders.js +131 -0
- package/dist/console/loaders.js.map +1 -0
- package/dist/console/parser.d.ts +86 -0
- package/dist/console/parser.d.ts.map +1 -0
- package/dist/console/parser.js +440 -0
- package/dist/console/parser.js.map +1 -0
- package/dist/console/prompts.d.ts +124 -0
- package/dist/console/prompts.d.ts.map +1 -0
- package/dist/console/prompts.js +356 -0
- package/dist/console/prompts.js.map +1 -0
- package/dist/console/tracing.d.ts +17 -0
- package/dist/console/tracing.d.ts.map +1 -0
- package/dist/console/tracing.js +11 -0
- package/dist/console/tracing.js.map +1 -0
- package/dist/console/types.d.ts +255 -0
- package/dist/console/types.d.ts.map +1 -0
- package/dist/console/types.js +25 -0
- package/dist/console/types.js.map +1 -0
- package/dist/console/ui.d.ts +20 -0
- package/dist/console/ui.d.ts.map +1 -0
- package/dist/console/ui.js +31 -0
- package/dist/console/ui.js.map +1 -0
- package/dist/console/utils.d.ts +27 -0
- package/dist/console/utils.d.ts.map +1 -0
- package/dist/console/utils.js +56 -0
- package/dist/console/utils.js.map +1 -0
- package/dist/container/Container.d.ts +23 -3
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +177 -70
- package/dist/container/Container.js.map +1 -1
- package/dist/container/types.d.ts +14 -2
- package/dist/container/types.d.ts.map +1 -1
- package/dist/decorators/Service.d.ts +7 -0
- package/dist/decorators/Service.d.ts.map +1 -1
- package/dist/decorators/Service.js +23 -3
- package/dist/decorators/Service.js.map +1 -1
- package/dist/env/Env.d.ts +29 -4
- package/dist/env/Env.d.ts.map +1 -1
- package/dist/env/Env.js +27 -4
- package/dist/env/Env.js.map +1 -1
- package/dist/env/Secret.d.ts +11 -0
- package/dist/env/Secret.d.ts.map +1 -0
- package/dist/env/Secret.js +36 -0
- package/dist/env/Secret.js.map +1 -0
- package/dist/env/interpolate.d.ts +26 -0
- package/dist/env/interpolate.d.ts.map +1 -0
- package/dist/env/interpolate.js +48 -0
- package/dist/env/interpolate.js.map +1 -0
- package/dist/env/loadEnvFiles.d.ts.map +1 -1
- package/dist/env/loadEnvFiles.js +14 -4
- package/dist/env/loadEnvFiles.js.map +1 -1
- package/dist/env/schema.d.ts +23 -6
- package/dist/env/schema.d.ts.map +1 -1
- package/dist/env/schema.js +67 -33
- package/dist/env/schema.js.map +1 -1
- package/dist/errors/ReamError.d.ts +25 -0
- package/dist/errors/ReamError.d.ts.map +1 -1
- package/dist/errors/ReamError.js +5 -0
- package/dist/errors/ReamError.js.map +1 -1
- package/dist/errors/prettyPrintError.d.ts +9 -0
- package/dist/errors/prettyPrintError.d.ts.map +1 -0
- package/dist/errors/prettyPrintError.js +22 -0
- package/dist/errors/prettyPrintError.js.map +1 -0
- package/dist/events/Emitter.d.ts +1 -1
- package/dist/events/Emitter.d.ts.map +1 -1
- package/dist/events/Emitter.js +1 -1
- package/dist/events/Emitter.js.map +1 -1
- package/dist/events/EventsProvider.d.ts +2 -2
- package/dist/events/EventsProvider.d.ts.map +1 -1
- package/dist/events/EventsProvider.js +3 -3
- package/dist/events/EventsProvider.js.map +1 -1
- package/dist/graphql/GraphQLEngine.d.ts +1 -1
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +2 -2
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
- package/dist/graphql/GraphQLProvider.js +7 -3
- package/dist/graphql/GraphQLProvider.js.map +1 -1
- package/dist/http/Exception.d.ts +63 -1
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +185 -48
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/HttpContext.d.ts +53 -7
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +56 -15
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +4 -1
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +141 -10
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +244 -34
- package/dist/http/Request.js.map +1 -1
- package/dist/http/Response.d.ts +176 -9
- package/dist/http/Response.d.ts.map +1 -1
- package/dist/http/Response.js +404 -16
- package/dist/http/Response.js.map +1 -1
- package/dist/index.d.ts +19 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.d.ts +29 -8
- package/dist/middleware/Pipeline.d.ts.map +1 -1
- package/dist/middleware/Pipeline.js +40 -2
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/openapi/OpenApiProvider.js +4 -4
- package/dist/openapi/OpenApiProvider.js.map +1 -1
- package/dist/router/Router.d.ts +223 -31
- package/dist/router/Router.d.ts.map +1 -1
- package/dist/router/Router.js +520 -102
- package/dist/router/Router.js.map +1 -1
- package/dist/rpc/RpcProvider.d.ts +1 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +7 -3
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/rpc/RpcRouter.d.ts +2 -2
- package/dist/rpc/RpcRouter.d.ts.map +1 -1
- package/dist/rpc/RpcRouter.js +17 -5
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -1
- package/dist/scheduler/ScheduleProvider.js +7 -15
- package/dist/scheduler/ScheduleProvider.js.map +1 -1
- package/dist/server/Server.d.ts +17 -4
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +41 -7
- package/dist/server/Server.js.map +1 -1
- package/dist/services/app.d.ts +1 -1
- package/dist/services/app.js +1 -1
- package/dist/services/console.d.ts +21 -0
- package/dist/services/console.d.ts.map +1 -0
- package/dist/services/console.js +35 -0
- package/dist/services/console.js.map +1 -0
- package/dist/session/SessionMiddleware.js +3 -3
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/storage/StaticProvider.js +1 -1
- package/dist/storage/StaticProvider.js.map +1 -1
- package/dist/testing/ApiResponse.d.ts +218 -0
- package/dist/testing/ApiResponse.d.ts.map +1 -0
- package/dist/testing/ApiResponse.js +576 -0
- package/dist/testing/ApiResponse.js.map +1 -0
- package/dist/testing/RequestBuilder.d.ts +155 -35
- package/dist/testing/RequestBuilder.d.ts.map +1 -1
- package/dist/testing/RequestBuilder.js +455 -109
- package/dist/testing/RequestBuilder.js.map +1 -1
- package/dist/testing/TestClient.d.ts +53 -37
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +84 -52
- package/dist/testing/TestClient.js.map +1 -1
- package/dist/utils/Macroable.d.ts +30 -0
- package/dist/utils/Macroable.d.ts.map +1 -0
- package/dist/utils/Macroable.js +43 -0
- package/dist/utils/Macroable.js.map +1 -0
- package/dist/utils/inflect.d.ts +17 -0
- package/dist/utils/inflect.d.ts.map +1 -0
- package/dist/utils/inflect.js +32 -0
- package/dist/utils/inflect.js.map +1 -0
- package/dist/utils/objectPath.d.ts +57 -0
- package/dist/utils/objectPath.d.ts.map +1 -0
- package/dist/utils/objectPath.js +141 -0
- package/dist/utils/objectPath.js.map +1 -0
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.linux-arm64-gnu.node +0 -0
- package/events.linux-x64-gnu.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +20 -2
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.linux-arm64-gnu.node +0 -0
- package/scheduler.linux-x64-gnu.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/ConfigLoader.ts +72 -9
- package/src/HttpKernel.ts +53 -15
- package/src/Ignitor.ts +364 -45
- package/src/console/BaseCommand.ts +467 -0
- package/src/console/Console.ts +174 -0
- package/src/console/ExceptionHandler.ts +91 -0
- package/src/console/HelpCommand.ts +37 -0
- package/src/console/IndexGenerator.ts +79 -0
- package/src/console/Kernel.ts +1382 -0
- package/src/console/ListCommand.ts +55 -0
- package/src/console/assertions.ts +114 -0
- package/src/console/cliui.ts +756 -0
- package/src/console/decorators.ts +199 -0
- package/src/console/index.ts +67 -0
- package/src/console/loaders.ts +145 -0
- package/src/console/parser.ts +598 -0
- package/src/console/prompts.ts +548 -0
- package/src/console/tracing.ts +22 -0
- package/src/console/types.ts +280 -0
- package/src/console/ui.ts +37 -0
- package/src/console/utils.ts +69 -0
- package/src/container/Container.ts +198 -72
- package/src/container/types.ts +15 -2
- package/src/decorators/Service.ts +28 -3
- package/src/env/Env.ts +49 -5
- package/src/env/Secret.ts +41 -0
- package/src/env/interpolate.ts +54 -0
- package/src/env/loadEnvFiles.ts +12 -4
- package/src/env/schema.ts +109 -35
- package/src/errors/ReamError.ts +31 -0
- package/src/errors/prettyPrintError.ts +20 -0
- package/src/events/Emitter.ts +2 -2
- package/src/events/EventsProvider.ts +5 -5
- package/src/graphql/GraphQLEngine.ts +4 -4
- package/src/graphql/GraphQLProvider.ts +7 -3
- package/src/http/Exception.ts +214 -37
- package/src/http/HttpContext.ts +87 -18
- package/src/http/RedirectBuilder.ts +4 -1
- package/src/http/Request.ts +264 -34
- package/src/http/Response.ts +478 -27
- package/src/index.ts +41 -6
- package/src/middleware/Pipeline.ts +77 -6
- package/src/openapi/OpenApiProvider.ts +4 -4
- package/src/router/Router.ts +631 -113
- package/src/rpc/RpcProvider.ts +6 -2
- package/src/rpc/RpcRouter.ts +22 -7
- package/src/scheduler/ScheduleProvider.ts +7 -15
- package/src/server/Server.ts +49 -10
- package/src/services/app.ts +1 -1
- package/src/services/console.ts +42 -0
- package/src/session/SessionMiddleware.ts +4 -4
- package/src/storage/StaticProvider.ts +1 -1
- package/src/testing/ApiResponse.ts +691 -0
- package/src/testing/RequestBuilder.ts +577 -137
- package/src/testing/TestClient.ts +110 -77
- package/src/utils/Macroable.ts +54 -0
- package/src/utils/inflect.ts +29 -0
- package/src/utils/objectPath.ts +142 -0
- package/dist/console/CommandRunner.d.ts +0 -18
- package/dist/console/CommandRunner.d.ts.map +0 -1
- package/dist/console/CommandRunner.js +0 -65
- package/dist/console/CommandRunner.js.map +0 -1
- package/dist/decorators/Lazy.d.ts +0 -19
- package/dist/decorators/Lazy.d.ts.map +0 -1
- package/dist/decorators/Lazy.js +0 -53
- package/dist/decorators/Lazy.js.map +0 -1
- package/src/console/CommandRunner.ts +0 -82
- package/src/decorators/Lazy.ts +0 -57
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal UI (Console / `@poppinss/cliui` surface).
|
|
3
|
+
*
|
|
4
|
+
* Everything renders through {@link Ui.write}, which is what makes the layer
|
|
5
|
+
* testable: in `raw` mode nothing reaches the terminal and every line is kept
|
|
6
|
+
* in memory for assertions. Colours become `name(text)` there — the same trick
|
|
7
|
+
* Console uses, so an expected log stays a readable string instead of a soup of
|
|
8
|
+
* escape codes.
|
|
9
|
+
*/
|
|
10
|
+
import { stdout } from 'node:process';
|
|
11
|
+
import { ReamError } from '../errors/ReamError.js';
|
|
12
|
+
/** Style names, in kleur's spelling. */
|
|
13
|
+
const STYLES = {
|
|
14
|
+
reset: 0,
|
|
15
|
+
bold: 1,
|
|
16
|
+
dim: 2,
|
|
17
|
+
italic: 3,
|
|
18
|
+
underline: 4,
|
|
19
|
+
red: 31,
|
|
20
|
+
green: 32,
|
|
21
|
+
yellow: 33,
|
|
22
|
+
blue: 34,
|
|
23
|
+
magenta: 35,
|
|
24
|
+
cyan: 36,
|
|
25
|
+
white: 37,
|
|
26
|
+
grey: 90,
|
|
27
|
+
bgRed: 41,
|
|
28
|
+
bgGreen: 42,
|
|
29
|
+
bgYellow: 43,
|
|
30
|
+
bgBlue: 44,
|
|
31
|
+
};
|
|
32
|
+
/** Colour is opt-out via NO_COLOR and skipped when piped to a file. */
|
|
33
|
+
function coloursEnabled() {
|
|
34
|
+
if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== '')
|
|
35
|
+
return false;
|
|
36
|
+
if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== '')
|
|
37
|
+
return true;
|
|
38
|
+
return Boolean(stdout.isTTY);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The styles were just attached, so this always holds — it is a guard rather
|
|
42
|
+
* than a cast because a cast is how a wrong assumption becomes a runtime
|
|
43
|
+
* surprise somewhere else.
|
|
44
|
+
*/
|
|
45
|
+
function carriesStyles(value) {
|
|
46
|
+
return typeof value === 'function' && 'red' in value && 'bold' in value;
|
|
47
|
+
}
|
|
48
|
+
function buildColors(applied, isRaw) {
|
|
49
|
+
const render = (text) => {
|
|
50
|
+
// Raw mode spells the styles out — `blue(info)` — so a test asserts on
|
|
51
|
+
// something a human can read and diff.
|
|
52
|
+
if (isRaw()) {
|
|
53
|
+
return applied.reduceRight((inner, style) => `${style}(${inner})`, text);
|
|
54
|
+
}
|
|
55
|
+
if (!coloursEnabled() || applied.length === 0)
|
|
56
|
+
return text;
|
|
57
|
+
const open = applied.map((style) => `\u001B[${STYLES[style]}m`).join('');
|
|
58
|
+
return `${open}${text}\u001B[0m`;
|
|
59
|
+
};
|
|
60
|
+
const callable = (text) => text === undefined ? buildColors(applied, isRaw) : render(text);
|
|
61
|
+
const descriptors = {};
|
|
62
|
+
for (const style of Object.keys(STYLES)) {
|
|
63
|
+
if (!isStyleName(style))
|
|
64
|
+
continue;
|
|
65
|
+
descriptors[style] = {
|
|
66
|
+
configurable: true,
|
|
67
|
+
get: () => buildColors([...applied, style], isRaw),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
Object.defineProperties(callable, descriptors);
|
|
71
|
+
if (!carriesStyles(callable)) {
|
|
72
|
+
throw new Error('unreachable: the style accessors were just defined');
|
|
73
|
+
}
|
|
74
|
+
return callable;
|
|
75
|
+
}
|
|
76
|
+
/** `Object.keys` widens to `string`; this narrows it back against the table. */
|
|
77
|
+
function isStyleName(value) {
|
|
78
|
+
return Object.hasOwn(STYLES, value);
|
|
79
|
+
}
|
|
80
|
+
export class Ui {
|
|
81
|
+
#mode = 'normal';
|
|
82
|
+
#logs = [];
|
|
83
|
+
#tableRows = [];
|
|
84
|
+
#tableHead = [];
|
|
85
|
+
colors = buildColors([], () => this.#mode === 'raw');
|
|
86
|
+
logger;
|
|
87
|
+
constructor() {
|
|
88
|
+
this.logger = new Logger(this);
|
|
89
|
+
}
|
|
90
|
+
/** `raw` keeps every line in memory instead of printing it. */
|
|
91
|
+
switchMode(mode) {
|
|
92
|
+
this.#mode = mode;
|
|
93
|
+
if (mode === 'raw') {
|
|
94
|
+
this.#logs.length = 0;
|
|
95
|
+
this.#tableRows.length = 0;
|
|
96
|
+
this.#tableHead = [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
get mode() {
|
|
100
|
+
return this.#mode;
|
|
101
|
+
}
|
|
102
|
+
/** Everything written since raw mode was switched on. */
|
|
103
|
+
getLogs() {
|
|
104
|
+
return this.#logs.map((entry) => entry.message);
|
|
105
|
+
}
|
|
106
|
+
/** The same lines with the stream each one targeted. */
|
|
107
|
+
getCapturedLogs() {
|
|
108
|
+
return [...this.#logs];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Table rows as they were given, before padding.
|
|
112
|
+
*
|
|
113
|
+
* Assertions compare data, not layout: `assertTableRows` should not break
|
|
114
|
+
* because a column grew wider.
|
|
115
|
+
*/
|
|
116
|
+
getTableRows() {
|
|
117
|
+
return this.#tableRows.map((row) => [...row]);
|
|
118
|
+
}
|
|
119
|
+
/** @internal Recorded by {@link Table.render}. */
|
|
120
|
+
captureTableRow(cells) {
|
|
121
|
+
if (this.#mode === 'raw')
|
|
122
|
+
this.#tableRows.push([...cells]);
|
|
123
|
+
}
|
|
124
|
+
/** @internal The head row, kept apart from the data rows. */
|
|
125
|
+
captureTableHead(cells) {
|
|
126
|
+
if (this.#mode === 'raw')
|
|
127
|
+
this.#tableHead = [...cells];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The header cells of the last rendered table.
|
|
131
|
+
*
|
|
132
|
+
* Kept apart from {@link getTableRows} so a caller can assert the data alone.
|
|
133
|
+
* `assertTableRows` looks at both: Console treats the head as one more row, and a
|
|
134
|
+
* test may or may not restate it.
|
|
135
|
+
*/
|
|
136
|
+
getTableHead() {
|
|
137
|
+
return [...this.#tableHead];
|
|
138
|
+
}
|
|
139
|
+
/** The single sink every widget writes through. */
|
|
140
|
+
write(line, stream = 'stdout') {
|
|
141
|
+
if (this.#mode === 'raw') {
|
|
142
|
+
this.#logs.push({ message: line, stream });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const target = stream === 'stderr' ? process.stderr : stdout;
|
|
146
|
+
target.write(`${line}\n`);
|
|
147
|
+
}
|
|
148
|
+
table() {
|
|
149
|
+
return new Table(this);
|
|
150
|
+
}
|
|
151
|
+
sticker() {
|
|
152
|
+
return new Box(this, 'sticker');
|
|
153
|
+
}
|
|
154
|
+
instructions() {
|
|
155
|
+
return new Box(this, 'instructions');
|
|
156
|
+
}
|
|
157
|
+
tasks(options = {}) {
|
|
158
|
+
return new Tasks(this, options);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Command logger.
|
|
163
|
+
*
|
|
164
|
+
* Alert levels go to stderr so a command's data output stays pipeable — a
|
|
165
|
+
* warning must not end up inside `ream list --json | jq`.
|
|
166
|
+
*/
|
|
167
|
+
export class Logger {
|
|
168
|
+
#ui;
|
|
169
|
+
#prefixText = '';
|
|
170
|
+
#suffixText = '';
|
|
171
|
+
constructor(ui) {
|
|
172
|
+
this.#ui = ui;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Prepend a fixed marker to EVERY message from now on.
|
|
176
|
+
*
|
|
177
|
+
* Console's own `prefix` is per-message (`info(msg, { prefix })`, supported
|
|
178
|
+
* below); this sticky form is kept because a command tagging all its output
|
|
179
|
+
* should not repeat itself on every call.
|
|
180
|
+
*/
|
|
181
|
+
prefix(value) {
|
|
182
|
+
this.#prefixText = value;
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
suffix(value) {
|
|
186
|
+
this.#suffixText = value;
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
info(message, options = {}) {
|
|
190
|
+
this.#write('info', 'blue', message, 'stdout', options);
|
|
191
|
+
}
|
|
192
|
+
success(message, options = {}) {
|
|
193
|
+
this.#write('success', 'green', message, 'stdout', options);
|
|
194
|
+
}
|
|
195
|
+
warning(message, options = {}) {
|
|
196
|
+
this.#write('warn', 'yellow', message, 'stderr', options);
|
|
197
|
+
}
|
|
198
|
+
error(message, options = {}) {
|
|
199
|
+
this.#write('error', 'red', messageOf(message), 'stderr', options);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* A message with animated trailing dots (Console `logger.await`).
|
|
203
|
+
*
|
|
204
|
+
* The animation only ticks on a TTY: on a pipe, or in raw mode, one line per
|
|
205
|
+
* frame would be noise in a log and unassertable in a test.
|
|
206
|
+
*/
|
|
207
|
+
await(message, options = {}) {
|
|
208
|
+
return new Animation(this.#ui, message, options);
|
|
209
|
+
}
|
|
210
|
+
fatal(message) {
|
|
211
|
+
this.error(message);
|
|
212
|
+
if (message instanceof Error && message.stack !== undefined) {
|
|
213
|
+
this.#ui.write(this.#ui.colors.dim(message.stack), 'stderr');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Only prints when DEBUG is set — the usual escape hatch for noisy detail. */
|
|
217
|
+
debug(message) {
|
|
218
|
+
if (process.env.DEBUG === undefined || process.env.DEBUG === '')
|
|
219
|
+
return;
|
|
220
|
+
this.#write('debug', 'magenta', message, 'stdout');
|
|
221
|
+
}
|
|
222
|
+
/** A line with no decoration. Use it for the command's own output. */
|
|
223
|
+
log(message) {
|
|
224
|
+
this.#ui.write(message);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* A step whose outcome is reported later (Console `logger.action`).
|
|
228
|
+
*
|
|
229
|
+
* const create = this.logger.action('creating config/auth.ts')
|
|
230
|
+
* try { … ; create.displayDuration().succeeded() }
|
|
231
|
+
* catch (error) { create.failed(error) }
|
|
232
|
+
*/
|
|
233
|
+
action(title) {
|
|
234
|
+
return new Action(this.#ui, title);
|
|
235
|
+
}
|
|
236
|
+
#write(label, colour, message, stream, options = {}) {
|
|
237
|
+
const tag = this.#ui.colors[colour](label);
|
|
238
|
+
// Per-message prefix/suffix win over the sticky ones.
|
|
239
|
+
const prefix = options.prefix === undefined ? this.#prefixText : String(options.prefix);
|
|
240
|
+
const suffix = options.suffix === undefined ? this.#suffixText : String(options.suffix);
|
|
241
|
+
const parts = [
|
|
242
|
+
prefix === '' ? '' : this.#ui.colors.dim(prefix),
|
|
243
|
+
`[ ${tag} ]`,
|
|
244
|
+
message,
|
|
245
|
+
suffix === '' ? '' : this.#ui.colors.dim(suffix),
|
|
246
|
+
].filter((part) => part !== '');
|
|
247
|
+
this.#ui.write(parts.join(' '), stream);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* An "in progress" message with animated dots (Console `logger.await`).
|
|
252
|
+
*
|
|
253
|
+
* Only animates on a TTY. Elsewhere it prints the message once and each
|
|
254
|
+
* `update` once more, which keeps logs and test assertions readable.
|
|
255
|
+
*/
|
|
256
|
+
export class Animation {
|
|
257
|
+
#ui;
|
|
258
|
+
#message;
|
|
259
|
+
#options;
|
|
260
|
+
#timer;
|
|
261
|
+
#frame = 0;
|
|
262
|
+
constructor(ui, message, options) {
|
|
263
|
+
this.#ui = ui;
|
|
264
|
+
this.#message = message;
|
|
265
|
+
this.#options = options;
|
|
266
|
+
}
|
|
267
|
+
start() {
|
|
268
|
+
this.#print();
|
|
269
|
+
if (this.#animatable()) {
|
|
270
|
+
this.#timer = setInterval(() => {
|
|
271
|
+
this.#frame = (this.#frame + 1) % 4;
|
|
272
|
+
this.#redraw();
|
|
273
|
+
}, 300);
|
|
274
|
+
// Never hold the process open for a decoration.
|
|
275
|
+
this.#timer.unref?.();
|
|
276
|
+
}
|
|
277
|
+
return this;
|
|
278
|
+
}
|
|
279
|
+
update(message, options = {}) {
|
|
280
|
+
this.#message = message;
|
|
281
|
+
this.#options = options;
|
|
282
|
+
this.#frame = 0;
|
|
283
|
+
if (this.#animatable())
|
|
284
|
+
this.#redraw();
|
|
285
|
+
else
|
|
286
|
+
this.#print();
|
|
287
|
+
return this;
|
|
288
|
+
}
|
|
289
|
+
stop() {
|
|
290
|
+
if (this.#timer !== undefined) {
|
|
291
|
+
clearInterval(this.#timer);
|
|
292
|
+
this.#timer = undefined;
|
|
293
|
+
stdout.write('\n');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
#animatable() {
|
|
297
|
+
return this.#ui.mode === 'normal' && Boolean(stdout.isTTY);
|
|
298
|
+
}
|
|
299
|
+
#line() {
|
|
300
|
+
const dots = '.'.repeat(this.#frame);
|
|
301
|
+
const suffix = this.#options.suffix === undefined
|
|
302
|
+
? ''
|
|
303
|
+
: ` ${this.#ui.colors.dim(String(this.#options.suffix))}`;
|
|
304
|
+
const prefix = this.#options.prefix === undefined
|
|
305
|
+
? ''
|
|
306
|
+
: `${this.#ui.colors.dim(String(this.#options.prefix))} `;
|
|
307
|
+
return `${prefix}${this.#message}${dots}${suffix}`;
|
|
308
|
+
}
|
|
309
|
+
#print() {
|
|
310
|
+
this.#ui.write(this.#line());
|
|
311
|
+
}
|
|
312
|
+
#redraw() {
|
|
313
|
+
// Rewrite in place instead of stacking a line per frame.
|
|
314
|
+
stdout.write(`\r\u001B[2K${this.#line()}`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/** A pending action, reported through one of its terminal methods. */
|
|
318
|
+
export class Action {
|
|
319
|
+
#ui;
|
|
320
|
+
#title;
|
|
321
|
+
#startedAt;
|
|
322
|
+
#withDuration = false;
|
|
323
|
+
constructor(ui, title, startedAt = Date.now()) {
|
|
324
|
+
this.#ui = ui;
|
|
325
|
+
this.#title = title;
|
|
326
|
+
this.#startedAt = startedAt;
|
|
327
|
+
}
|
|
328
|
+
/** Append how long the action took. */
|
|
329
|
+
displayDuration() {
|
|
330
|
+
this.#withDuration = true;
|
|
331
|
+
return this;
|
|
332
|
+
}
|
|
333
|
+
succeeded() {
|
|
334
|
+
this.#report(this.#ui.colors.green('DONE'), 'stdout');
|
|
335
|
+
}
|
|
336
|
+
skipped(reason) {
|
|
337
|
+
const suffix = reason === undefined ? '' : ` (${reason})`;
|
|
338
|
+
this.#report(`${this.#ui.colors.yellow('SKIPPED')}${suffix}`, 'stdout');
|
|
339
|
+
}
|
|
340
|
+
failed(error) {
|
|
341
|
+
this.#report(`${this.#ui.colors.red('FAILED')} ${messageOf(error)}`, 'stderr');
|
|
342
|
+
}
|
|
343
|
+
#report(status, stream) {
|
|
344
|
+
const duration = this.#withDuration ? ` ${this.#ui.colors.dim(`(${this.#elapsed()})`)}` : '';
|
|
345
|
+
this.#ui.write(`${status} ${this.#title}${duration}`, stream);
|
|
346
|
+
}
|
|
347
|
+
#elapsed() {
|
|
348
|
+
const ms = Date.now() - this.#startedAt;
|
|
349
|
+
return ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(2)}s`;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/** A column-aligned table (Console `ui.table()`). */
|
|
353
|
+
export class Table {
|
|
354
|
+
#ui;
|
|
355
|
+
#headCells = [];
|
|
356
|
+
#rows = [];
|
|
357
|
+
#full = false;
|
|
358
|
+
#fluidColumn = 0;
|
|
359
|
+
constructor(ui) {
|
|
360
|
+
this.#ui = ui;
|
|
361
|
+
}
|
|
362
|
+
head(columns) {
|
|
363
|
+
this.#headCells = columns.map(toCell);
|
|
364
|
+
return this;
|
|
365
|
+
}
|
|
366
|
+
row(cells) {
|
|
367
|
+
this.#rows.push(cells.map(toCell));
|
|
368
|
+
return this;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Stretch the table to the terminal width, the first column absorbing the
|
|
372
|
+
* slack (Console `fullWidth`). Falls back to content width when the width is
|
|
373
|
+
* unknown — a pipe has no columns.
|
|
374
|
+
*/
|
|
375
|
+
fullWidth() {
|
|
376
|
+
this.#full = true;
|
|
377
|
+
return this;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Which column absorbs the slack in full-width mode (Console
|
|
381
|
+
* `fluidColumnIndex`). Defaults to the first.
|
|
382
|
+
*/
|
|
383
|
+
fluidColumnIndex(index) {
|
|
384
|
+
// A negative or fractional index would make `fullWidth()` silently do
|
|
385
|
+
// nothing — the kind of failure that is noticed three screens later.
|
|
386
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
387
|
+
throw new ReamError('E_CONSOLE_INVALID_COLUMN', `fluidColumnIndex(${index}) is not a column position.`, { hint: 'Pass a zero-based integer index.' });
|
|
388
|
+
}
|
|
389
|
+
this.#fluidColumn = index;
|
|
390
|
+
return this;
|
|
391
|
+
}
|
|
392
|
+
render() {
|
|
393
|
+
const all = this.#headCells.length > 0 ? [this.#headCells, ...this.#rows] : this.#rows;
|
|
394
|
+
if (all.length === 0)
|
|
395
|
+
return;
|
|
396
|
+
// Widths are measured on the VISIBLE text: a cell coloured with
|
|
397
|
+
// `colors.green('DONE')` carries escape codes that must not shift columns.
|
|
398
|
+
const columns = Math.max(...all.map((row) => row.length));
|
|
399
|
+
const widths = Array.from({ length: columns }, (_, index) => Math.max(...all.map((row) => visibleWidth(row[index]?.content ?? ''))));
|
|
400
|
+
if (this.#full) {
|
|
401
|
+
// Known only now: the column count comes from the rows.
|
|
402
|
+
if (this.#fluidColumn >= columns) {
|
|
403
|
+
throw new ReamError('E_CONSOLE_INVALID_COLUMN', `fluidColumnIndex(${this.#fluidColumn}) is out of range — the table has ${columns} column(s).`);
|
|
404
|
+
}
|
|
405
|
+
const available = stdout.columns ?? 0;
|
|
406
|
+
const used = widths.reduce((total, width) => total + width, 0) + (columns - 1) * 2;
|
|
407
|
+
// Only ever grows the fluid column; shrinking would truncate content.
|
|
408
|
+
const fluid = this.#fluidColumn;
|
|
409
|
+
if (available > used && widths[fluid] !== undefined)
|
|
410
|
+
widths[fluid] += available - used;
|
|
411
|
+
}
|
|
412
|
+
const line = (cells) => cells
|
|
413
|
+
.map((cell, index) => align(cell, widths[index] ?? 0))
|
|
414
|
+
.join(' ')
|
|
415
|
+
.trimEnd();
|
|
416
|
+
if (this.#headCells.length > 0) {
|
|
417
|
+
this.#ui.write(line(this.#headCells.map((cell) => ({
|
|
418
|
+
...cell,
|
|
419
|
+
content: this.#ui.colors.bold(cell.content),
|
|
420
|
+
}))));
|
|
421
|
+
this.#ui.write(widths.map((width) => '─'.repeat(width)).join(' '));
|
|
422
|
+
this.#ui.captureTableHead(this.#headCells.map((cell) => cell.content));
|
|
423
|
+
}
|
|
424
|
+
for (const row of this.#rows) {
|
|
425
|
+
this.#ui.write(line(row));
|
|
426
|
+
// Recorded unpadded: an assertion compares data, not layout.
|
|
427
|
+
this.#ui.captureTableRow(row.map((cell) => cell.content));
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
function toCell(input) {
|
|
432
|
+
return typeof input === 'string' ? { content: input } : { ...input };
|
|
433
|
+
}
|
|
434
|
+
/** Pad a cell to `width`, honouring its horizontal alignment. */
|
|
435
|
+
function align(cell, width) {
|
|
436
|
+
const slack = Math.max(0, width - visibleWidth(cell.content));
|
|
437
|
+
if (cell.hAlign === 'right')
|
|
438
|
+
return ' '.repeat(slack) + cell.content;
|
|
439
|
+
if (cell.hAlign === 'center') {
|
|
440
|
+
const left = Math.floor(slack / 2);
|
|
441
|
+
return ' '.repeat(left) + cell.content + ' '.repeat(slack - left);
|
|
442
|
+
}
|
|
443
|
+
return cell.content + ' '.repeat(slack);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* A bordered box — `sticker()` for a highlighted block, `instructions()` for a
|
|
447
|
+
* decorated list of steps.
|
|
448
|
+
*/
|
|
449
|
+
export class Box {
|
|
450
|
+
#ui;
|
|
451
|
+
#kind;
|
|
452
|
+
#lines = [];
|
|
453
|
+
constructor(ui, kind) {
|
|
454
|
+
this.#ui = ui;
|
|
455
|
+
this.#kind = kind;
|
|
456
|
+
}
|
|
457
|
+
add(line) {
|
|
458
|
+
this.#lines.push(line);
|
|
459
|
+
return this;
|
|
460
|
+
}
|
|
461
|
+
render() {
|
|
462
|
+
if (this.#lines.length === 0)
|
|
463
|
+
return;
|
|
464
|
+
// Instructions are steps, marked with a pointer as Console renders them; a
|
|
465
|
+
// sticker is a plain highlighted block.
|
|
466
|
+
const decorated = this.#kind === 'instructions'
|
|
467
|
+
? this.#lines.map((line) => (line === '' ? line : `${this.#ui.colors.dim('>')} ${line}`))
|
|
468
|
+
: this.#lines;
|
|
469
|
+
const width = Math.max(...decorated.map(visibleWidth));
|
|
470
|
+
const border = this.#ui.colors.dim('─'.repeat(width + 2));
|
|
471
|
+
this.#ui.write(`${this.#ui.colors.dim('┌')}${border}${this.#ui.colors.dim('┐')}`);
|
|
472
|
+
for (const line of decorated) {
|
|
473
|
+
this.#ui.write(`${this.#ui.colors.dim('│')} ${pad(line, width)} ${this.#ui.colors.dim('│')}`);
|
|
474
|
+
}
|
|
475
|
+
this.#ui.write(`${this.#ui.colors.dim('└')}${border}${this.#ui.colors.dim('┘')}`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/** Handed to a task callback so it can report progress and failure. */
|
|
479
|
+
export class TaskContext {
|
|
480
|
+
#ui;
|
|
481
|
+
#title;
|
|
482
|
+
#verbose;
|
|
483
|
+
#lastMessage = '';
|
|
484
|
+
#failure;
|
|
485
|
+
constructor(ui, title, verbose = false) {
|
|
486
|
+
this.#ui = ui;
|
|
487
|
+
this.#title = title;
|
|
488
|
+
this.#verbose = verbose;
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Report progress.
|
|
492
|
+
*
|
|
493
|
+
* Verbose prints every message; minimal keeps only the last one, surfaced on
|
|
494
|
+
* the task's final line. A progress loop otherwise floods the output with a
|
|
495
|
+
* line per percent.
|
|
496
|
+
*/
|
|
497
|
+
update(message) {
|
|
498
|
+
this.#lastMessage = message;
|
|
499
|
+
if (this.#verbose) {
|
|
500
|
+
this.#ui.write(` ${this.#ui.colors.dim(`${this.#title}: ${message}`)}`);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
/** @internal The last progress message, shown when the task ends. */
|
|
504
|
+
get lastMessage() {
|
|
505
|
+
return this.#lastMessage;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Mark the task as failed. Returned from the callback rather than thrown, so
|
|
509
|
+
* an expected failure reads like a value — Console's `return task.error(…)`.
|
|
510
|
+
*/
|
|
511
|
+
error(reason) {
|
|
512
|
+
this.#failure = reason instanceof Error ? reason : new Error(reason);
|
|
513
|
+
return this.#failure;
|
|
514
|
+
}
|
|
515
|
+
/** @internal */
|
|
516
|
+
get failure() {
|
|
517
|
+
return this.#failure;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
export class Tasks {
|
|
521
|
+
#ui;
|
|
522
|
+
#verbose;
|
|
523
|
+
#entries = [];
|
|
524
|
+
#outcomes = [];
|
|
525
|
+
constructor(ui, options = {}) {
|
|
526
|
+
this.#ui = ui;
|
|
527
|
+
this.#verbose = options.verbose === true;
|
|
528
|
+
}
|
|
529
|
+
add(title, work) {
|
|
530
|
+
this.#entries.push({ title, work });
|
|
531
|
+
return this;
|
|
532
|
+
}
|
|
533
|
+
/** Results in declaration order, including the task that failed. */
|
|
534
|
+
get outcomes() {
|
|
535
|
+
return [...this.#outcomes];
|
|
536
|
+
}
|
|
537
|
+
async run() {
|
|
538
|
+
for (const entry of this.#entries) {
|
|
539
|
+
const context = new TaskContext(this.#ui, entry.title, this.#verbose);
|
|
540
|
+
let message = '';
|
|
541
|
+
let failure;
|
|
542
|
+
try {
|
|
543
|
+
const returned = await entry.work(context);
|
|
544
|
+
failure = context.failure ?? (returned instanceof Error ? returned : undefined);
|
|
545
|
+
if (failure === undefined) {
|
|
546
|
+
message = returned === undefined ? context.lastMessage : String(returned);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
catch (err) {
|
|
550
|
+
failure = err instanceof Error ? err : new Error(String(err));
|
|
551
|
+
}
|
|
552
|
+
if (failure === undefined) {
|
|
553
|
+
this.#outcomes.push({ title: entry.title, state: 'succeeded', message });
|
|
554
|
+
this.#ui.write(`${this.#ui.colors.green('✔')} ${entry.title}` +
|
|
555
|
+
(message === '' ? '' : ` ${this.#ui.colors.dim(message)}`));
|
|
556
|
+
continue;
|
|
557
|
+
}
|
|
558
|
+
this.#outcomes.push({
|
|
559
|
+
title: entry.title,
|
|
560
|
+
state: 'failed',
|
|
561
|
+
message: failure.message,
|
|
562
|
+
error: failure,
|
|
563
|
+
});
|
|
564
|
+
this.#ui.write(`${this.#ui.colors.red('✖')} ${entry.title} ${this.#ui.colors.dim(failure.message)}`, 'stderr');
|
|
565
|
+
// Stop here: later steps normally build on this one.
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
return this.outcomes;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
function messageOf(value) {
|
|
572
|
+
if (value instanceof Error)
|
|
573
|
+
return value.message;
|
|
574
|
+
return String(value);
|
|
575
|
+
}
|
|
576
|
+
/** Width without ANSI escapes, so colour never shifts a column. */
|
|
577
|
+
function visibleWidth(text) {
|
|
578
|
+
return stripAnsi(text).length;
|
|
579
|
+
}
|
|
580
|
+
function pad(text, width) {
|
|
581
|
+
return text + ' '.repeat(Math.max(0, width - visibleWidth(text)));
|
|
582
|
+
}
|
|
583
|
+
function stripAnsi(text) {
|
|
584
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: matching ANSI escapes is the point
|
|
585
|
+
return text.replace(/\u001B\[[0-9;]*m/g, '');
|
|
586
|
+
}
|
|
587
|
+
//# sourceMappingURL=cliui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliui.js","sourceRoot":"","sources":["../../src/console/cliui.ts"],"names":[],"mappings":"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"}
|