@leemour/cli-core 0.4.0 → 0.6.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/README.md +9 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pretty.d.ts.map +1 -1
- package/dist/pretty.js +9 -7
- package/dist/pretty.js.map +1 -1
- package/dist/renderer.d.ts +3 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +13 -6
- package/dist/renderer.js.map +1 -1
- package/dist/sanitize.d.ts +13 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +23 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/update/index.d.ts +29 -8
- package/dist/update/index.d.ts.map +1 -1
- package/dist/update/index.js +45 -0
- package/dist/update/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ keyring behind a testable seam, and injectable clocks.
|
|
|
7
7
|
Extracted from [`brazecli`](https://github.com/leemour/brazecli), where each piece earned its
|
|
8
8
|
shape, and shared with [`max-cli`](https://github.com/leemour/max-cli).
|
|
9
9
|
|
|
10
|
-
**Status: 0.
|
|
10
|
+
**Status: 0.5.0.** Published on npm, used by `max-cli`. Both extraction steps have landed: the
|
|
11
11
|
files that move unchanged, and the ones that needed a parameter threaded through. 75 tests.
|
|
12
12
|
|
|
13
13
|
## The rule this package exists to keep
|
|
@@ -32,7 +32,7 @@ streams.stderr // []
|
|
|
32
32
|
| | |
|
|
33
33
|
|---|---|
|
|
34
34
|
| `streams` | the stdout/stderr split, and the capture used to test it |
|
|
35
|
-
| `renderer` · `pretty` | `pretty` / `json` / `jsonl`; tables for lists, labelled lines for objects |
|
|
35
|
+
| `renderer` · `pretty` | `pretty` / `json` / `jsonl`; tables for lists, labelled lines for objects; `quiet` keeps only failures on stderr |
|
|
36
36
|
| `errors` · `exit-codes` | 14 closed error codes, one exit number each, so a script can branch on `$?` |
|
|
37
37
|
| `keyring` | `KeyringStore` with the system, memory and deliberately-broken implementations |
|
|
38
38
|
| `time` | monotonic and wall clocks, and the one sleep that both timeouts and backoff use |
|
|
@@ -45,7 +45,7 @@ streams.stderr // []
|
|
|
45
45
|
| `/testing` | `captureStreams`, `memoryKeyring`, `brokenKeyring`, `fakeClock` |
|
|
46
46
|
| `/commands` | the command registry: `describeProgram`, `annotate`, `flatten` — see below |
|
|
47
47
|
| `/completion` | shell completion over the registry: `suggest`, `formatSuggestions` — see below |
|
|
48
|
-
| `/update` | keeping an install current: `installerOf`, `updateCommand`, `latestVersion`, `mayNotify` — see below |
|
|
48
|
+
| `/update` | keeping an install current: `installerOf`, `updateCommand`, `latestVersion`, `mayNotify`, `updateNotice`, `runUpdate` — see below |
|
|
49
49
|
|
|
50
50
|
**Nothing in the root export is HTTP.** Status classification, `Retry-After` parsing and the fetch
|
|
51
51
|
seam live in `@leemour/cli-core/http`, so a CLI that speaks a socket never depends on a stack it
|
|
@@ -103,9 +103,12 @@ of reaching a real keychain.
|
|
|
103
103
|
which package manager put the CLI there — pnpm, npm or bun, measured on real installs — and
|
|
104
104
|
`updateCommand` gives the argv that updates it; a checkout or `npx` gets none. `latestVersion` asks
|
|
105
105
|
npm with a timeout and answers `undefined` on any failure. `mayNotify` says whether a person is at a
|
|
106
|
-
terminal to be told: never in JSON, a pipe, `--quiet`, `CI` or with `NO_UPDATE_NOTIFIER`.
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
terminal to be told: never in JSON, a pipe, `--quiet`, `CI` or with `NO_UPDATE_NOTIFIER`.
|
|
107
|
+
`updateNotice` is the whole daily line: it stays silent when `update` or `complete` is anywhere on
|
|
108
|
+
the command line, asks npm at most once a day through a state file the CLI names, and returns the
|
|
109
|
+
sentence or `undefined` — it never throws. `runUpdate` starts the package manager with its output on
|
|
110
|
+
stderr (`spawnPlan` is the Windows `.cmd` rule). Nothing here updates or prints by itself — a CLI
|
|
111
|
+
holding somebody's credentials must not change itself unasked.
|
|
109
112
|
|
|
110
113
|
## Where secrets actually go, per platform
|
|
111
114
|
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export { configFilePath, type Paths, type PathsOptions, pathsAreOverridden, reso
|
|
|
10
10
|
export { type PrettyOptions, renderPretty } from "./pretty.js";
|
|
11
11
|
export { createRenderer, RENDER_FORMATS, type Renderer, type RendererOptions, type RenderFormat, } from "./renderer.js";
|
|
12
12
|
export { backoffMs, DEFAULT_RETRY, isTransportFailure, type RetryConfig } from "./retry.js";
|
|
13
|
+
export { visibleControls } from "./sanitize.js";
|
|
13
14
|
export { captureStreams, processStreams, type Streams } from "./streams.js";
|
|
14
15
|
export { abortError, type MonotonicClock, monotonic, realSleep, type SleepLike, type SleepReason, type WallClock, wallClock, } from "./time.js";
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACjH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,SAAS,GACV,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACjH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,SAAS,GACV,MAAM,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { configFilePath, pathsAreOverridden, resolvePaths } from "./paths.js";
|
|
|
9
9
|
export { renderPretty } from "./pretty.js";
|
|
10
10
|
export { createRenderer, RENDER_FORMATS, } from "./renderer.js";
|
|
11
11
|
export { backoffMs, DEFAULT_RETRY, isTransportFailure } from "./retry.js";
|
|
12
|
+
export { visibleControls } from "./sanitize.js";
|
|
12
13
|
export { captureStreams, processStreams } from "./streams.js";
|
|
13
14
|
export { abortError, monotonic, realSleep, wallClock, } from "./time.js";
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAwC,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAA2C,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAiC,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAsB,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EAEV,SAAS,EACT,SAAS,EAIT,SAAS,GACV,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAwC,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAA2C,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAiC,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAsB,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EAEV,SAAS,EACT,SAAS,EAIT,SAAS,GACV,MAAM,WAAW,CAAA"}
|
package/dist/pretty.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,EAAE,SAAS,aAAa,KAAG,MAmBrE,CAAA"}
|
package/dist/pretty.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Table from "cli-table3";
|
|
2
2
|
import pc from "picocolors";
|
|
3
|
+
import { visibleControls } from "./sanitize.js";
|
|
3
4
|
/**
|
|
4
5
|
* Three shapes and a fallback, not a renderer per endpoint. A list of like objects becomes a
|
|
5
6
|
* table, a single object becomes labelled lines, everything else is printed as JSON — which is
|
|
@@ -33,7 +34,7 @@ const isRowLike = (value) => value.length > 0 && value.every((item) => isPlainOb
|
|
|
33
34
|
const renderTable = (rows, paint) => {
|
|
34
35
|
const columns = [...new Set(rows.flatMap((row) => Object.keys(row)))];
|
|
35
36
|
const table = new Table({
|
|
36
|
-
head: columns.map((column) => paint.bold(column)),
|
|
37
|
+
head: columns.map((column) => paint.bold(visibleControls(column))),
|
|
37
38
|
// `chars: {}` is not enough — cli-table3 falls back to its own defaults for anything unset.
|
|
38
39
|
style: { head: [], border: [], "padding-left": 0, "padding-right": 2 },
|
|
39
40
|
chars: BORDERLESS,
|
|
@@ -43,17 +44,18 @@ const renderTable = (rows, paint) => {
|
|
|
43
44
|
return table.toString();
|
|
44
45
|
};
|
|
45
46
|
const renderFields = (fields, paint) => {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
.join("\n");
|
|
47
|
+
const rows = Object.entries(fields).map(([key, value]) => ({ label: visibleControls(key), value }));
|
|
48
|
+
const width = Math.max(...rows.map((row) => row.label.length));
|
|
49
|
+
return rows.map((row) => `${paint.label(row.label.padEnd(width))} ${cell(row.value)}`).join("\n");
|
|
50
50
|
};
|
|
51
51
|
const cell = (value) => {
|
|
52
52
|
if (value === null || value === undefined)
|
|
53
53
|
return "";
|
|
54
|
+
// Sanitised before the table measures it, so an escaped sequence widens the column it is in
|
|
55
|
+
// rather than silently overflowing it.
|
|
54
56
|
if (typeof value === "object")
|
|
55
|
-
return JSON.stringify(value);
|
|
56
|
-
return String(value);
|
|
57
|
+
return visibleControls(JSON.stringify(value));
|
|
58
|
+
return visibleControls(String(value));
|
|
57
59
|
};
|
|
58
60
|
const renderJson = (value) => JSON.stringify(value, null, 2);
|
|
59
61
|
const BORDERLESS = {
|
package/dist/pretty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pretty.js","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"pretty.js","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"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"}
|
package/dist/renderer.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export interface RendererOptions {
|
|
|
20
20
|
format: RenderFormat;
|
|
21
21
|
color: boolean;
|
|
22
22
|
streams?: Streams;
|
|
23
|
+
/** Drops `note`, `success` and `warn`. A failure is still said, and the result is untouched. */
|
|
24
|
+
quiet?: boolean;
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* **Every diagnostic goes to stderr, in every mode — pretty included.**
|
|
@@ -28,5 +30,5 @@ export interface RendererOptions {
|
|
|
28
30
|
* by construction instead of by a mode check somebody can forget. It also means piping human
|
|
29
31
|
* output still gives you the content and not the commentary.
|
|
30
32
|
*/
|
|
31
|
-
export declare const createRenderer: ({ format, color, streams }: RendererOptions) => Renderer;
|
|
33
|
+
export declare const createRenderer: ({ format, color, streams, quiet, }: RendererOptions) => Renderer;
|
|
32
34
|
//# sourceMappingURL=renderer.d.ts.map
|
package/dist/renderer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,cAAc,sCAAuC,CAAA;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,MAAM,WAAW,QAAQ;IACvB,uFAAuF;IACvF,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,kGAAkG;IAClG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gGAAgG;IAChG,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,oCAK5B,eAAe,KAAG,QAyCpB,CAAA"}
|
package/dist/renderer.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { renderPretty } from "./pretty.js";
|
|
2
|
+
import { visibleControls } from "./sanitize.js";
|
|
2
3
|
import { processStreams } from "./streams.js";
|
|
3
4
|
/**
|
|
4
5
|
* What a renderer can be asked for. `auto` is not here on purpose: choosing between a person and a
|
|
@@ -13,13 +14,19 @@ export const RENDER_FORMATS = ["pretty", "json", "jsonl"];
|
|
|
13
14
|
* by construction instead of by a mode check somebody can forget. It also means piping human
|
|
14
15
|
* output still gives you the content and not the commentary.
|
|
15
16
|
*/
|
|
16
|
-
export const createRenderer = ({ format, color, streams = processStreams }) => {
|
|
17
|
-
|
|
17
|
+
export const createRenderer = ({ format, color, streams = processStreams, quiet = false, }) => {
|
|
18
|
+
// Sanitised in every mode, not just `pretty`: a diagnostic goes to stderr, and stderr is read
|
|
19
|
+
// by a person whatever stdout was asked to be. The message is often the other side's own words.
|
|
20
|
+
const mark = (symbol, message) => format === "pretty" ? `${symbol} ${visibleControls(message)}` : visibleControls(message);
|
|
21
|
+
const say = (symbol) => (message) => {
|
|
22
|
+
if (!quiet)
|
|
23
|
+
streams.diagnostic(mark(symbol, message));
|
|
24
|
+
};
|
|
18
25
|
const diagnostics = {
|
|
19
|
-
note: (
|
|
20
|
-
success: (
|
|
21
|
-
warn: (
|
|
22
|
-
failure: (message) => streams.diagnostic(
|
|
26
|
+
note: say("·"),
|
|
27
|
+
success: say("✓"),
|
|
28
|
+
warn: say("!"),
|
|
29
|
+
failure: (message) => streams.diagnostic(mark("✗", message)),
|
|
23
30
|
};
|
|
24
31
|
if (format === "jsonl") {
|
|
25
32
|
return {
|
package/dist/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAsBlE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,MAAM,EACN,KAAK,EACL,OAAO,GAAG,cAAc,EACxB,KAAK,GAAG,KAAK,GACG,EAAY,EAAE;IAC9B,8FAA8F;IAC9F,gGAAgG;IAChG,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC/C,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAE1F,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,OAAe,EAAE,EAAE;QAClD,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACvD,CAAC,CAAA;IAED,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;QACd,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;QACd,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KACrE,CAAA;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO;YACL,GAAG,WAAW;YACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO;YACL,GAAG,WAAW;YACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;SACrE,CAAA;IACH,CAAC;IAED,kEAAkE;IAClE,OAAO;QACL,GAAG,WAAW;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;KAC5D,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text that came from Braze or from a customer's input file, made safe to display.
|
|
3
|
+
*
|
|
4
|
+
* A campaign name, a catalog title and a user attribute are all edited somewhere we do not
|
|
5
|
+
* control and handed back to us as data. A terminal executes what it is given: `\x1b[2K\x1b[1G`
|
|
6
|
+
* clears the line and returns the cursor, so a campaign name can overwrite output this tool
|
|
7
|
+
* already printed. Braze's own error messages reach a terminal the same way (`SEC-2`).
|
|
8
|
+
*
|
|
9
|
+
* **Machine modes need none of this** — `JSON.stringify` already escapes control characters, and
|
|
10
|
+
* those bytes are a contract with scripts. Only what a person reads goes through here.
|
|
11
|
+
*/
|
|
12
|
+
export declare const visibleControls: (text: string) => string;
|
|
13
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MACsC,CAAA"}
|
package/dist/sanitize.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text that came from Braze or from a customer's input file, made safe to display.
|
|
3
|
+
*
|
|
4
|
+
* A campaign name, a catalog title and a user attribute are all edited somewhere we do not
|
|
5
|
+
* control and handed back to us as data. A terminal executes what it is given: `\x1b[2K\x1b[1G`
|
|
6
|
+
* clears the line and returns the cursor, so a campaign name can overwrite output this tool
|
|
7
|
+
* already printed. Braze's own error messages reach a terminal the same way (`SEC-2`).
|
|
8
|
+
*
|
|
9
|
+
* **Machine modes need none of this** — `JSON.stringify` already escapes control characters, and
|
|
10
|
+
* those bytes are a contract with scripts. Only what a person reads goes through here.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Control characters become visible rather than disappearing. A reader has to know the value
|
|
14
|
+
* contained something strange; an audit that silently drops bytes is worse than one that shows
|
|
15
|
+
* them.
|
|
16
|
+
*
|
|
17
|
+
* `\t` and `\n` survive, because a table and a multi-line field are built out of them.
|
|
18
|
+
*/
|
|
19
|
+
/** C0 minus tab and newline, DEL, and C1 — which xterm honours as escapes in its 8-bit form. */
|
|
20
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: matching them is the whole point
|
|
21
|
+
const CONTROL = /[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;
|
|
22
|
+
export const visibleControls = (text) => text.replace(CONTROL, (c) => `\\x${c.charCodeAt(0).toString(16).padStart(2, "0")}`);
|
|
23
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,gGAAgG;AAChG,4FAA4F;AAC5F,MAAM,OAAO,GAAG,4CAA4C,CAAA;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE,CACtD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA"}
|
package/dist/update/index.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Keeping an installed CLI current: which package manager put it here, what command updates it,
|
|
3
|
-
* whether npm has something newer, and whether a person should be told.
|
|
4
|
-
*
|
|
5
|
-
* Nothing here updates anything by itself, and nothing here decides to print: a CLI that holds
|
|
6
|
-
* somebody's credentials must not change itself unasked, and a line on the terminal is for a
|
|
7
|
-
* person, never for a script or an agent reading JSON. The CLI asks and decides.
|
|
8
|
-
*/
|
|
9
1
|
import * as v from "valibot";
|
|
10
2
|
import type { FetchLike } from "../http/index.js";
|
|
11
3
|
export type Installer = "pnpm" | "npm" | "bun" | "npx" | "checkout" | "unknown";
|
|
@@ -47,5 +39,34 @@ export type UpdateState = v.InferOutput<typeof updateState>;
|
|
|
47
39
|
export declare const readUpdateState: (path: string) => UpdateState | undefined;
|
|
48
40
|
export declare const writeUpdateState: (path: string, state: UpdateState) => void;
|
|
49
41
|
export declare const checkIsDue: (state: UpdateState | undefined, now: number) => boolean;
|
|
42
|
+
/**
|
|
43
|
+
* npm and pnpm are `.cmd` shims on Windows, and Node starts a `.cmd` only through a shell. The
|
|
44
|
+
* words are joined rather than passed as arguments, which Node 24 deprecates alongside `shell`;
|
|
45
|
+
* that is safe only because they come from `updateCommand`, never from the person typing.
|
|
46
|
+
*/
|
|
47
|
+
export declare const spawnPlan: ([command, ...args]: readonly string[], platform?: NodeJS.Platform) => {
|
|
48
|
+
file: string;
|
|
49
|
+
args: string[];
|
|
50
|
+
shell: boolean;
|
|
51
|
+
};
|
|
52
|
+
/** Runs the update and answers its exit code. stdout stays one result: the package manager's output goes to stderr. */
|
|
53
|
+
export declare const runUpdate: (argv: readonly string[]) => number;
|
|
54
|
+
export interface NoticeRequest extends NotifyContext {
|
|
55
|
+
/** The words the CLI was run with, to leave `update` and `complete` alone. */
|
|
56
|
+
argv: readonly string[];
|
|
57
|
+
packageName: string;
|
|
58
|
+
/** The command a person types: `braze`, `max`. */
|
|
59
|
+
command: string;
|
|
60
|
+
version: string;
|
|
61
|
+
/** Where the last answer from npm is kept — the CLI's state directory. */
|
|
62
|
+
statePath: string;
|
|
63
|
+
fetch: FetchLike;
|
|
64
|
+
now?: () => number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The daily "a newer version exists" line, or `undefined`. Meant to be started beside the command
|
|
68
|
+
* and awaited after it, so asking npm costs the command nothing; any failure is silence.
|
|
69
|
+
*/
|
|
70
|
+
export declare const updateNotice: ({ argv, packageName, command, version, statePath, fetch, now, ...context }: NoticeRequest) => Promise<string | undefined>;
|
|
50
71
|
export {};
|
|
51
72
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAA;AAE/E;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,SAOhD,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,aAAa,GAAI,WAAW,SAAS,EAAE,aAAa,MAAM,KAAG,MAAM,EAAE,GAAG,SAYpF,CAAA;AAED,uFAAuF;AACvF,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,OAS5D,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,OAAO,SAAS,EAChB,gBAAsB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,KAChD,OAAO,CAAC,MAAM,GAAG,SAAS,CAY5B,CAAA;AAED,eAAO,MAAM,cAAc,QAAsB,CAAA;AAEjD,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IACjD,yFAAyF;IACzF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;AAED,mGAAmG;AACnG,eAAO,MAAM,SAAS,GAAI,wEAQvB,aAAa,KAAG,OAQuB,CAAA;AAE1C,QAAA,MAAM,WAAW;;;aAAsE,CAAA;AACvF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,WAAW,CAAC,CAAA;AAE3D,gGAAgG;AAChG,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,WAAW,GAAG,SAO5D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAO,WAAW,KAAG,IAMnE,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,WAAW,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OACT,CAAA;AAEhE;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,oBAAoB,SAAS,MAAM,EAAE,EAAE,WAAU,MAAM,CAAC,QAA2B;;UAErD,MAAM,EAAE;;CACX,CAAA;AAErD,uHAAuH;AACvH,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,EAAE,KAAG,MAKnD,CAAA;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,8EAA8E;IAC9E,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAU,4EAShC,aAAa,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAsB5C,CAAA"}
|
package/dist/update/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* somebody's credentials must not change itself unasked, and a line on the terminal is for a
|
|
7
7
|
* person, never for a script or an agent reading JSON. The CLI asks and decides.
|
|
8
8
|
*/
|
|
9
|
+
import { spawnSync } from "node:child_process";
|
|
9
10
|
import * as v from "valibot";
|
|
10
11
|
import { loadConfigFile, saveConfigFile } from "../config.js";
|
|
11
12
|
/**
|
|
@@ -98,4 +99,48 @@ export const writeUpdateState = (path, state) => {
|
|
|
98
99
|
}
|
|
99
100
|
};
|
|
100
101
|
export const checkIsDue = (state, now) => state === undefined || now - state.checkedAt >= CHECK_EVERY_MS;
|
|
102
|
+
/**
|
|
103
|
+
* npm and pnpm are `.cmd` shims on Windows, and Node starts a `.cmd` only through a shell. The
|
|
104
|
+
* words are joined rather than passed as arguments, which Node 24 deprecates alongside `shell`;
|
|
105
|
+
* that is safe only because they come from `updateCommand`, never from the person typing.
|
|
106
|
+
*/
|
|
107
|
+
export const spawnPlan = ([command, ...args], platform = process.platform) => platform === "win32"
|
|
108
|
+
? { file: [command, ...args].join(" "), args: [], shell: true }
|
|
109
|
+
: { file: command, args, shell: false };
|
|
110
|
+
/** Runs the update and answers its exit code. stdout stays one result: the package manager's output goes to stderr. */
|
|
111
|
+
export const runUpdate = (argv) => {
|
|
112
|
+
const { file, args, shell } = spawnPlan(argv);
|
|
113
|
+
const { status, error } = spawnSync(file, args, { stdio: ["inherit", 2, 2], shell });
|
|
114
|
+
if (error)
|
|
115
|
+
throw new Error(`could not start ${argv[0]}: ${error.message}`);
|
|
116
|
+
return status ?? 1;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* The daily "a newer version exists" line, or `undefined`. Meant to be started beside the command
|
|
120
|
+
* and awaited after it, so asking npm costs the command nothing; any failure is silence.
|
|
121
|
+
*/
|
|
122
|
+
export const updateNotice = async ({ argv, packageName, command, version, statePath, fetch, now = Date.now, ...context }) => {
|
|
123
|
+
try {
|
|
124
|
+
// Anywhere, not the first word: that can be a profile (`braze prod update`) or an option's value,
|
|
125
|
+
// and a notice after `update` names the version just installed as the one to get.
|
|
126
|
+
if (argv.includes("complete") || argv.includes("update"))
|
|
127
|
+
return undefined;
|
|
128
|
+
if (!mayNotify(context))
|
|
129
|
+
return undefined;
|
|
130
|
+
const at = now();
|
|
131
|
+
let state = readUpdateState(statePath);
|
|
132
|
+
if (checkIsDue(state, at)) {
|
|
133
|
+
const found = await latestVersion(packageName, fetch, { timeoutMs: 1000 });
|
|
134
|
+
const seen = found ?? state?.latest;
|
|
135
|
+
state = seen ? { checkedAt: at, latest: seen } : { checkedAt: at };
|
|
136
|
+
writeUpdateState(statePath, state);
|
|
137
|
+
}
|
|
138
|
+
return state?.latest && isNewer(state.latest, version)
|
|
139
|
+
? `${command} ${state.latest} is out — you have ${version}. \`${command} update\` installs it.`
|
|
140
|
+
: undefined;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
101
146
|
//# sourceMappingURL=index.js.map
|
package/dist/update/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leemour/cli-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "The parts every command line tool needs: output modes, terminal rendering, error model, exit codes, credentials, clocks",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|