@kaynooo/cli-docker 0.6.0 → 0.8.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/dist/dc-cli.js +94 -47
- package/dist/dlog-cli.js +94 -47
- package/dist/dx-cli.js +176 -69
- package/dist/sf-cli.js +194 -81
- package/package.json +3 -3
- package/src/dc.ts +2 -2
- package/src/dx.ts +2 -2
- package/src/sf.ts +2 -2
- package/src/stack.ts +2 -3
package/dist/dlog-cli.js
CHANGED
|
@@ -2,13 +2,37 @@
|
|
|
2
2
|
// @bun
|
|
3
3
|
|
|
4
4
|
// src/dlog-cli.ts
|
|
5
|
-
import
|
|
5
|
+
import process14 from "process";
|
|
6
6
|
// ../kit/src/args.ts
|
|
7
|
-
import
|
|
7
|
+
import process9 from "process";
|
|
8
8
|
import { parseArgs } from "util";
|
|
9
9
|
|
|
10
|
+
// ../kit/src/format.ts
|
|
11
|
+
import process7 from "process";
|
|
12
|
+
|
|
13
|
+
// ../kit/src/mode.ts
|
|
14
|
+
import process2 from "process";
|
|
15
|
+
var MODES = new Set(["terminal", "ci", "agent", "pipe"]);
|
|
16
|
+
var AGENT_VARIABLES = ["CLAUDECODE", "AI_AGENT"];
|
|
17
|
+
function isSet(value) {
|
|
18
|
+
return value !== undefined && value !== "" && value !== "0" && value.toLowerCase() !== "false";
|
|
19
|
+
}
|
|
20
|
+
function outputMode(stream = process2.stdout, env = process2.env) {
|
|
21
|
+
const chosen = env.KIT_MODE;
|
|
22
|
+
if (chosen !== undefined && MODES.has(chosen))
|
|
23
|
+
return chosen;
|
|
24
|
+
if (AGENT_VARIABLES.some((name) => isSet(env[name])))
|
|
25
|
+
return "agent";
|
|
26
|
+
if (stream.isTTY === true)
|
|
27
|
+
return "terminal";
|
|
28
|
+
return isSet(env.CI) ? "ci" : "pipe";
|
|
29
|
+
}
|
|
30
|
+
function isInteractive(streams = process2) {
|
|
31
|
+
return streams.stdin?.isTTY === true && streams.stderr?.isTTY === true;
|
|
32
|
+
}
|
|
33
|
+
|
|
10
34
|
// ../kit/src/style.ts
|
|
11
|
-
import
|
|
35
|
+
import process6 from "process";
|
|
12
36
|
|
|
13
37
|
// ../../node_modules/.bun/@kaynooo+utils@2.31.2+d0769e28dc4dad16/node_modules/@kaynooo/utils/dist/chunk-mtetydvc.js
|
|
14
38
|
function x(s) {
|
|
@@ -275,13 +299,13 @@ var t = le();
|
|
|
275
299
|
import { existsSync as existsSync2, readFileSync, statSync } from "fs";
|
|
276
300
|
import { homedir as homedir2 } from "os";
|
|
277
301
|
import { join as join3, resolve as resolve2 } from "path";
|
|
278
|
-
import
|
|
302
|
+
import process5 from "process";
|
|
279
303
|
|
|
280
304
|
// ../kit/src/config.ts
|
|
281
305
|
import { existsSync } from "fs";
|
|
282
306
|
import { dirname, join, resolve } from "path";
|
|
283
|
-
import
|
|
284
|
-
function findUp(names, from =
|
|
307
|
+
import process3 from "process";
|
|
308
|
+
function findUp(names, from = process3.cwd(), stop = () => false) {
|
|
285
309
|
const wanted = typeof names === "string" ? [names] : names;
|
|
286
310
|
for (let dir = resolve(from);; dir = dirname(dir)) {
|
|
287
311
|
const found = wanted.map((name) => join(dir, name)).find((path) => existsSync(path));
|
|
@@ -295,9 +319,9 @@ function findUp(names, from = process2.cwd(), stop = () => false) {
|
|
|
295
319
|
// ../kit/src/user-config.ts
|
|
296
320
|
import { homedir } from "os";
|
|
297
321
|
import { join as join2 } from "path";
|
|
298
|
-
import
|
|
322
|
+
import process4 from "process";
|
|
299
323
|
function configBase(where = {}) {
|
|
300
|
-
const xdg = where.xdg ?? (where.home === undefined ?
|
|
324
|
+
const xdg = where.xdg ?? (where.home === undefined ? process4.env.XDG_CONFIG_HOME : undefined);
|
|
301
325
|
return xdg !== undefined && xdg !== "" ? xdg : join2(where.home ?? homedir(), ".config");
|
|
302
326
|
}
|
|
303
327
|
function userConfigPath(bin, where = {}) {
|
|
@@ -330,10 +354,30 @@ function isColorSpec(spec) {
|
|
|
330
354
|
return Number.isInteger(spec) && spec >= 0 && spec <= 255;
|
|
331
355
|
return typeof spec === "string" && spec.trim() !== "" && spec.trim().split(SPACES).every((token) => STYLES.has(token) || HEX.test(token));
|
|
332
356
|
}
|
|
333
|
-
|
|
357
|
+
var CUBE = [0, 95, 135, 175, 215, 255];
|
|
358
|
+
function cubeLevel(channel) {
|
|
359
|
+
return CUBE.reduce((best, value, level) => Math.abs(value - channel) < Math.abs(CUBE[best] - channel) ? level : best, 0);
|
|
360
|
+
}
|
|
361
|
+
function nearest256(hex) {
|
|
362
|
+
const rgb = [1, 3, 5].map((at) => Number.parseInt(hex.slice(at, at + 2), 16));
|
|
363
|
+
const levels = rgb.map(cubeLevel);
|
|
364
|
+
const cube = levels.map((level) => CUBE[level]);
|
|
365
|
+
const grey = Math.min(23, Math.max(0, Math.round((rgb.reduce((sum, channel) => sum + channel, 0) / 3 - 8) / 10)));
|
|
366
|
+
const greyValue = 8 + grey * 10;
|
|
367
|
+
const distance = (colour) => colour.reduce((sum, channel, at) => sum + (channel - rgb[at]) ** 2, 0);
|
|
368
|
+
return distance([greyValue, greyValue, greyValue]) < distance(cube) ? 232 + grey : 16 + 36 * levels[0] + 6 * levels[1] + levels[2];
|
|
369
|
+
}
|
|
370
|
+
function hasTrueColor(env) {
|
|
371
|
+
return env.COLORTERM === "truecolor" || env.COLORTERM === "24bit";
|
|
372
|
+
}
|
|
373
|
+
function tinted(colors, spec, env = process5.env) {
|
|
334
374
|
if (typeof spec === "number")
|
|
335
375
|
return colors.ansi256(spec);
|
|
336
|
-
return spec.trim().split(SPACES).reduce((chain, token) =>
|
|
376
|
+
return spec.trim().split(SPACES).reduce((chain, token) => {
|
|
377
|
+
if (HEX.test(token))
|
|
378
|
+
return hasTrueColor(env) ? chain.hex(token) : chain.ansi256(nearest256(token));
|
|
379
|
+
return chain[token] ?? chain;
|
|
380
|
+
}, colors);
|
|
337
381
|
}
|
|
338
382
|
function isRecord(value) {
|
|
339
383
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -417,7 +461,7 @@ function warnOnce(message) {
|
|
|
417
461
|
function isPath(chosen) {
|
|
418
462
|
return chosen.includes("/") || chosen.endsWith(".json");
|
|
419
463
|
}
|
|
420
|
-
function loadTheme({ env =
|
|
464
|
+
function loadTheme({ env = process5.env, from = process5.cwd(), home = homedir2(), warn = warnOnce } = {}) {
|
|
421
465
|
const theme = { colors: { ...DEFAULT.colors }, glyphs: { ...DEFAULT.glyphs }, accents: [...DEFAULT.accents], bins: Object.create(null) };
|
|
422
466
|
const sources = [];
|
|
423
467
|
const chosen = env.KIT_THEME ?? "";
|
|
@@ -447,7 +491,7 @@ function loadTheme({ env = process4.env, from = process4.cwd(), home = homedir2(
|
|
|
447
491
|
var current;
|
|
448
492
|
var currentKey = "";
|
|
449
493
|
function activeTheme() {
|
|
450
|
-
const key = `${
|
|
494
|
+
const key = `${process5.cwd()}\x00${process5.env.KIT_THEME ?? ""}\x00${process5.env.XDG_CONFIG_HOME ?? ""}`;
|
|
451
495
|
if (current === undefined || key !== currentKey) {
|
|
452
496
|
current = loadTheme();
|
|
453
497
|
currentKey = key;
|
|
@@ -456,20 +500,20 @@ function activeTheme() {
|
|
|
456
500
|
}
|
|
457
501
|
|
|
458
502
|
// ../kit/src/style.ts
|
|
459
|
-
function takesControlCodes(stream, env =
|
|
460
|
-
return stream.isTTY === true && env.NO_COLOR === undefined && env.NODE_DISABLE_COLORS === undefined && env.TERM !== "dumb";
|
|
503
|
+
function takesControlCodes(stream, env = process6.env) {
|
|
504
|
+
return stream.isTTY === true && env.NO_COLOR === undefined && env.NODE_DISABLE_COLORS === undefined && env.TERM !== "dumb" && outputMode(stream, env) === "terminal";
|
|
461
505
|
}
|
|
462
|
-
function paint(stream, env =
|
|
506
|
+
function paint(stream, env = process6.env) {
|
|
463
507
|
return le({ stream: { isTTY: takesControlCodes(stream, env) }, env });
|
|
464
508
|
}
|
|
465
|
-
function role(name, stream, env =
|
|
509
|
+
function role(name, stream, env = process6.env) {
|
|
466
510
|
const colors = paint(stream, env);
|
|
467
|
-
return takesControlCodes(stream, env) ? tinted(colors, activeTheme().theme.colors[name]) : colors;
|
|
511
|
+
return takesControlCodes(stream, env) ? tinted(colors, activeTheme().theme.colors[name], env) : colors;
|
|
468
512
|
}
|
|
469
513
|
var STATUS_WORDS = {
|
|
470
514
|
passed: ["passed", "success", "succeeded", "ok"],
|
|
471
515
|
failed: ["failed", "failure", "error", "errored"],
|
|
472
|
-
running: ["running", "in_progress", "started"],
|
|
516
|
+
running: ["running", "in_progress", "started", "holding"],
|
|
473
517
|
queued: ["queued", "waiting", "pending", "created", "blocked", "scheduled"],
|
|
474
518
|
skipped: ["skipped", "cancelled", "canceled", "manual"]
|
|
475
519
|
};
|
|
@@ -481,32 +525,35 @@ function upTo(text, separator) {
|
|
|
481
525
|
return end === -1 ? text : text.slice(0, end);
|
|
482
526
|
}
|
|
483
527
|
var ESCAPE = String.fromCharCode(27);
|
|
528
|
+
function jsonText(value, replacer, { stream = process7.stdout, env = process7.env } = {}) {
|
|
529
|
+
return JSON.stringify(value, replacer, outputMode(stream, env) === "agent" ? undefined : 2);
|
|
530
|
+
}
|
|
484
531
|
function printJson(value) {
|
|
485
|
-
console.log(
|
|
532
|
+
console.log(jsonText(value));
|
|
486
533
|
}
|
|
487
534
|
|
|
488
535
|
// ../kit/src/help.ts
|
|
489
|
-
import
|
|
536
|
+
import process8 from "process";
|
|
490
537
|
var OPTIONAL = /\[[^\]]+\]/g;
|
|
491
538
|
var USAGE_PREFIX = /^usage:\s*/i;
|
|
492
539
|
var FULL_STOP = /\.$/;
|
|
493
|
-
function usageLine(usage, colors = paint(
|
|
540
|
+
function usageLine(usage, colors = paint(process8.stdout)) {
|
|
494
541
|
return `${colors.bold("Usage:")} ${usage.replace(USAGE_PREFIX, "").replaceAll(OPTIONAL, (part) => colors.dim(part))}`;
|
|
495
542
|
}
|
|
496
|
-
function helpText(usage, options, colors = paint(
|
|
543
|
+
function helpText(usage, options, colors = paint(process8.stdout), { examples = [], replaces, exits = [] } = {}) {
|
|
497
544
|
return [usageLine(usage, colors), ...replacesRows(replaces, colors), "", colors.bold("Options:"), ...optionRows(options, colors), ...exitRows(exits, colors), ...exampleRows(examples, colors)].join(`
|
|
498
545
|
`);
|
|
499
546
|
}
|
|
500
|
-
function exitRows(exits, colors = paint(
|
|
547
|
+
function exitRows(exits, colors = paint(process8.stdout)) {
|
|
501
548
|
if (exits.length === 0)
|
|
502
549
|
return [];
|
|
503
550
|
const width = Math.max(...exits.map(([code]) => String(code).length));
|
|
504
551
|
return ["", colors.bold("Exits:"), ...exits.map(([code, meaning]) => ` ${colors.cyan(String(code).padEnd(width))} ${meaning}`)];
|
|
505
552
|
}
|
|
506
|
-
function replacesRows(replaces, colors = paint(
|
|
507
|
-
return replaces === undefined ? [] : ["", `${colors.bold("Instead of:")} ${replaces}`];
|
|
553
|
+
function replacesRows(replaces, colors = paint(process8.stdout)) {
|
|
554
|
+
return replaces === undefined || outputMode() === "agent" ? [] : ["", `${colors.bold("Instead of:")} ${replaces}`];
|
|
508
555
|
}
|
|
509
|
-
function wantsHelpJson(env =
|
|
556
|
+
function wantsHelpJson(env = process8.env) {
|
|
510
557
|
return env.KIT_HELP === "json";
|
|
511
558
|
}
|
|
512
559
|
function description(usage, { examples = [], replaces, exits } = {}, options) {
|
|
@@ -525,12 +572,12 @@ function description(usage, { examples = [], replaces, exits } = {}, options) {
|
|
|
525
572
|
...options === undefined ? {} : { options: Object.entries(options).map(([name, { short, description }]) => ({ name, ...short === undefined ? {} : { short }, ...description === undefined ? {} : { description } })) }
|
|
526
573
|
};
|
|
527
574
|
}
|
|
528
|
-
function exampleRows(examples, colors = paint(
|
|
529
|
-
if (examples.length === 0)
|
|
575
|
+
function exampleRows(examples, colors = paint(process8.stdout)) {
|
|
576
|
+
if (examples.length === 0 || outputMode() === "agent")
|
|
530
577
|
return [];
|
|
531
578
|
return ["", colors.bold("Examples:"), ...examples.map((example) => typeof example === "string" ? ` ${example}` : ` ${example[0]} ${colors.dim(`# ${example[1]}`)}`)];
|
|
532
579
|
}
|
|
533
|
-
function optionRows(options, colors = paint(
|
|
580
|
+
function optionRows(options, colors = paint(process8.stdout)) {
|
|
534
581
|
const rows = Object.entries(options).map(([name, option]) => {
|
|
535
582
|
const short = option.short === undefined ? " " : `${colors.cyan(`-${option.short}`)}, `;
|
|
536
583
|
const named = option.choices === undefined ? "<value>" : `<${option.choices.join("|")}>`;
|
|
@@ -580,7 +627,6 @@ var DASHES = /^-+/;
|
|
|
580
627
|
function jsonOption(holds) {
|
|
581
628
|
return { type: "boolean", description: holds === undefined ? "print JSON" : `print JSON: ${holds}` };
|
|
582
629
|
}
|
|
583
|
-
|
|
584
630
|
class Exit extends Error {
|
|
585
631
|
code;
|
|
586
632
|
hint;
|
|
@@ -624,7 +670,7 @@ var OUTPUT_OPTIONS = {
|
|
|
624
670
|
color: { type: "string", description: "auto (on a terminal alone), always or never" },
|
|
625
671
|
plain: { type: "boolean", description: "plain text, no colour or spinner: --color never" }
|
|
626
672
|
};
|
|
627
|
-
function applyOutput(color, plain, env =
|
|
673
|
+
function applyOutput(color, plain, env = process9.env) {
|
|
628
674
|
const when = plain === true ? "never" : color ?? "auto";
|
|
629
675
|
if (when === "auto")
|
|
630
676
|
return;
|
|
@@ -801,13 +847,13 @@ var CLOSE_LINK = `${ESC}]8;;${ESC}\\`;
|
|
|
801
847
|
// ../kit/src/cli.ts
|
|
802
848
|
import { readFileSync as readFileSync2, realpathSync } from "fs";
|
|
803
849
|
import { dirname as dirname3, join as join5 } from "path";
|
|
804
|
-
import
|
|
850
|
+
import process11 from "process";
|
|
805
851
|
|
|
806
852
|
// ../kit/src/usage.ts
|
|
807
853
|
import { appendFileSync, mkdirSync } from "fs";
|
|
808
854
|
import { homedir as homedir3 } from "os";
|
|
809
855
|
import { dirname as dirname2, isAbsolute, join as join4 } from "path";
|
|
810
|
-
import
|
|
856
|
+
import process10 from "process";
|
|
811
857
|
|
|
812
858
|
// ../kit/src/logs.ts
|
|
813
859
|
var DAY_MS = 24 * 60 * 60 * 1000;
|
|
@@ -821,14 +867,14 @@ var usageError;
|
|
|
821
867
|
function noteUsageError(message) {
|
|
822
868
|
usageError = message;
|
|
823
869
|
}
|
|
824
|
-
function stateHome(env =
|
|
870
|
+
function stateHome(env = process10.env) {
|
|
825
871
|
const dir = env.XDG_STATE_HOME;
|
|
826
872
|
return dir !== undefined && isAbsolute(dir) ? dir : join4(homedir3(), ".local", "state");
|
|
827
873
|
}
|
|
828
|
-
function usagePath(env =
|
|
874
|
+
function usagePath(env = process10.env) {
|
|
829
875
|
return join4(stateHome(env), CLI_FOLDER, "usage.jsonl");
|
|
830
876
|
}
|
|
831
|
-
function usageRecorded(env =
|
|
877
|
+
function usageRecorded(env = process10.env) {
|
|
832
878
|
const off = env.KAYNOOO_CLI_NO_USAGE;
|
|
833
879
|
return env.NODE_ENV !== "test" && (off === undefined || off === "" || off === "0");
|
|
834
880
|
}
|
|
@@ -842,7 +888,7 @@ function usageEntry(bin, command, argv, code, now = new Date) {
|
|
|
842
888
|
usageError = undefined;
|
|
843
889
|
return { at: now.toISOString(), bin, ...command === undefined ? {} : { command }, flags: flagNames(argv), code, ...unknown === undefined ? {} : { unknown } };
|
|
844
890
|
}
|
|
845
|
-
function recordUsage(entry, env =
|
|
891
|
+
function recordUsage(entry, env = process10.env) {
|
|
846
892
|
if (!usageRecorded(env))
|
|
847
893
|
return;
|
|
848
894
|
try {
|
|
@@ -860,8 +906,8 @@ var LEVEL_OPTIONS = {
|
|
|
860
906
|
};
|
|
861
907
|
var TOP_OPTIONS = { ...LEVEL_OPTIONS, version: { type: "boolean", short: "v", description: "print the version" } };
|
|
862
908
|
function printError(prefix, message, hint, cause) {
|
|
863
|
-
const colors = paint(
|
|
864
|
-
const styled = takesControlCodes(
|
|
909
|
+
const colors = paint(process11.stderr);
|
|
910
|
+
const styled = takesControlCodes(process11.stderr);
|
|
865
911
|
const head = styled ? `${colors.red.bold("error")} ${colors.dim(`${prefix}:`)}` : `error: ${prefix}:`;
|
|
866
912
|
const under = (label, text, tint) => text === undefined ? "" : `
|
|
867
913
|
${styled ? tint(label) : `${label}:`} ${text}`;
|
|
@@ -954,7 +1000,7 @@ function packageVersion(entry = Bun.main) {
|
|
|
954
1000
|
return "0.0.0";
|
|
955
1001
|
}
|
|
956
1002
|
}
|
|
957
|
-
async function runMain({ name, version, run, redact, usage }, argv =
|
|
1003
|
+
async function runMain({ name, version, run, redact, usage }, argv = process11.argv.slice(2)) {
|
|
958
1004
|
if (argv[0] === COMPLETE)
|
|
959
1005
|
return printCandidates(leafCandidates(run, argv.slice(1)));
|
|
960
1006
|
if (argv.length === 1 && (argv[0] === "--version" || argv[0] === "-v")) {
|
|
@@ -985,6 +1031,8 @@ function composeError({ code, stderr }) {
|
|
|
985
1031
|
`).at(-1) ?? "";
|
|
986
1032
|
return last === "" ? `exit ${code}` : last;
|
|
987
1033
|
}
|
|
1034
|
+
// ../kit/src/folders.ts
|
|
1035
|
+
var SKIPPED_FOLDERS = new Set(["node_modules", "vendor", "dist", "build", "target", "coverage", "venv", "__pycache__"]);
|
|
988
1036
|
// ../kit/src/secrets.ts
|
|
989
1037
|
var SECRET_PART = /token|secret|passw|credential|private|dsn|apikey|accesskey|key$/i;
|
|
990
1038
|
var SECRET_WORDS = new Set(["key", "pass", "pwd", "auth", "salt", "cookie", "session", "jwt", "ssn", "iban", "card", "cvv", "otp"]);
|
|
@@ -997,7 +1045,7 @@ var {Glob } = globalThis.Bun;
|
|
|
997
1045
|
var SESSION_FILES = new Glob("*.json");
|
|
998
1046
|
var ACCOUNT_DIRS = new Glob("*/sessions");
|
|
999
1047
|
// src/dlog.ts
|
|
1000
|
-
import
|
|
1048
|
+
import process13 from "process";
|
|
1001
1049
|
|
|
1002
1050
|
// ../env/src/files.ts
|
|
1003
1051
|
import { chmod, chown, readdir, realpath, rename, rm, stat, writeFile } from "fs/promises";
|
|
@@ -1357,13 +1405,12 @@ class Redactor {
|
|
|
1357
1405
|
var LABEL_FORMAT = ["project", "project.config_files", "project.environment_file", "project.working_dir"].map((label) => `{{.Label "com.docker.compose.${label}"}}`).join("\t");
|
|
1358
1406
|
var COMPOSE_FILE_VAR = /^\s*(?:export\s+)?COMPOSE_FILE\s*=\s*\S/m;
|
|
1359
1407
|
var COMPOSE_FILES = ["compose.yaml", "compose.yml", "docker-compose.yaml", "docker-compose.yml"];
|
|
1360
|
-
var SKIPPED2 = new Set(["node_modules", "vendor", "dist", "build", "target", "venv", "__pycache__"]);
|
|
1361
1408
|
var ACTIONS = ["shell", "logs", "restart", "up", "stop", "build"];
|
|
1362
1409
|
function from(dir, command) {
|
|
1363
1410
|
return dir === "." ? command : ["env", "-C", dir, ...command];
|
|
1364
1411
|
}
|
|
1365
1412
|
function children(dir = ".") {
|
|
1366
|
-
return readdirSync(dir, { withFileTypes: true }).filter((child) => child.isDirectory() && !child.name.startsWith(".") && !
|
|
1413
|
+
return readdirSync(dir, { withFileTypes: true }).filter((child) => child.isDirectory() && !child.name.startsWith(".") && !SKIPPED_FOLDERS.has(child.name)).map((child) => child.name).sort();
|
|
1367
1414
|
}
|
|
1368
1415
|
function up(dir) {
|
|
1369
1416
|
const dirs = [];
|
|
@@ -1598,13 +1645,13 @@ function withoutKeys(lines) {
|
|
|
1598
1645
|
});
|
|
1599
1646
|
}
|
|
1600
1647
|
function line(report) {
|
|
1601
|
-
const colors = paint(
|
|
1648
|
+
const colors = paint(process13.stdout);
|
|
1602
1649
|
const status = report.status.replace(STATUS_HEALTH, "").trim();
|
|
1603
1650
|
const detail = [report.health, status].filter(Boolean).join(" \xB7 ");
|
|
1604
1651
|
return `${report.key.padEnd(24)} ${colors[stateColor(report.state)](report.state.padEnd(9))} ${colors.dim(detail)}`.trimEnd();
|
|
1605
1652
|
}
|
|
1606
1653
|
function show(reports) {
|
|
1607
|
-
const colors = paint(
|
|
1654
|
+
const colors = paint(process13.stdout);
|
|
1608
1655
|
for (const report of reports) {
|
|
1609
1656
|
console.log(line(report));
|
|
1610
1657
|
if (report.unreadable !== undefined)
|
|
@@ -1645,9 +1692,9 @@ async function dlog(args) {
|
|
|
1645
1692
|
show(reports);
|
|
1646
1693
|
const down = reports.filter((report) => needsLook(report, failOn));
|
|
1647
1694
|
if (parsed.values.json !== true && down.length > 0)
|
|
1648
|
-
console.error(paint(
|
|
1695
|
+
console.error(paint(process13.stderr).dim(`${down.length} of ${reports.length} services need a look: ${down.map((report) => report.key).join(", ")}`));
|
|
1649
1696
|
return down.length > 0 ? 1 : 0;
|
|
1650
1697
|
}
|
|
1651
1698
|
|
|
1652
1699
|
// src/dlog-cli.ts
|
|
1653
|
-
|
|
1700
|
+
process14.exitCode = await runMain({ name: "dlog", run: dlog });
|