@nwire/cli 0.7.1 → 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/README.md +62 -20
- package/dist/__tests__/bench.test.d.ts +2 -0
- package/dist/__tests__/bench.test.d.ts.map +1 -0
- package/dist/__tests__/bench.test.js +94 -0
- package/dist/__tests__/bench.test.js.map +1 -0
- package/dist/__tests__/replay.test.d.ts +2 -0
- package/dist/__tests__/replay.test.d.ts.map +1 -0
- package/dist/__tests__/replay.test.js +202 -0
- package/dist/__tests__/replay.test.js.map +1 -0
- package/dist/__tests__/trace.test.d.ts +2 -0
- package/dist/__tests__/trace.test.d.ts.map +1 -0
- package/dist/__tests__/trace.test.js +136 -0
- package/dist/__tests__/trace.test.js.map +1 -0
- package/dist/__tests__/watch.test.d.ts +2 -0
- package/dist/__tests__/watch.test.d.ts.map +1 -0
- package/dist/__tests__/watch.test.js +109 -0
- package/dist/__tests__/watch.test.js.map +1 -0
- package/dist/cache-runner.js +62 -14
- package/dist/cache-runner.js.map +1 -1
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/bench.d.ts +103 -0
- package/dist/commands/bench.d.ts.map +1 -0
- package/dist/commands/bench.js +203 -0
- package/dist/commands/bench.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +31 -20
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +29 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +7 -0
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +64 -11
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/replay.d.ts +45 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +159 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -4
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/studio.d.ts.map +1 -1
- package/dist/commands/studio.js +7 -1
- package/dist/commands/studio.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +3 -0
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/trace.d.ts +40 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +195 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/watch.d.ts +33 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +152 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/lib/dev-entry.d.ts +39 -0
- package/dist/lib/dev-entry.d.ts.map +1 -0
- package/dist/lib/dev-entry.js +102 -0
- package/dist/lib/dev-entry.js.map +1 -0
- package/dist/lib/exec.d.ts +7 -0
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +19 -1
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/run-task.d.ts.map +1 -1
- package/dist/lib/run-task.js +6 -1
- package/dist/lib/run-task.js.map +1 -1
- package/dist/lib/sse.d.ts +24 -0
- package/dist/lib/sse.d.ts.map +1 -0
- package/dist/lib/sse.js +63 -0
- package/dist/lib/sse.js.map +1 -0
- package/dist/lib/wire-discovery.d.ts +9 -0
- package/dist/lib/wire-discovery.d.ts.map +1 -0
- package/dist/lib/wire-discovery.js +82 -0
- package/dist/lib/wire-discovery.js.map +1 -0
- package/dist/load-config.d.ts +3 -3
- package/dist/load-config.d.ts.map +1 -1
- package/dist/load-config.js +15 -3
- package/dist/load-config.js.map +1 -1
- package/dist/ls-runner.js +2 -2
- package/dist/ls-runner.js.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nwire replay <recording.json> [--hook <name>]`
|
|
3
|
+
*
|
|
4
|
+
* Replays a previously recorded hook run against the running wire and
|
|
5
|
+
* renders the drift report. The wire-side endpoint contract is:
|
|
6
|
+
*
|
|
7
|
+
* POST /_nwire/hooks/replay body: { recording, hook? }
|
|
8
|
+
* → 200 { matches, drift[], recorded, replayed: { stepCount, outcome } }
|
|
9
|
+
*
|
|
10
|
+
* Wire endpoint gap (as of today): no nwire-http route handler is mounted
|
|
11
|
+
* for `/_nwire/hooks/replay`. When that endpoint is missing we fall back
|
|
12
|
+
* to an *offline* diff — comparing the recording's own `steps[]` against
|
|
13
|
+
* its `ctxIn → ctxOut` snapshot. This is one-sided (it can't show drift,
|
|
14
|
+
* only re-render what was captured) but it keeps the command useful while
|
|
15
|
+
* the wire side catches up.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync } from "node:fs";
|
|
18
|
+
import { resolve } from "node:path";
|
|
19
|
+
import { defineCommand } from "citty";
|
|
20
|
+
import { palette } from "../lib/colors.js";
|
|
21
|
+
import { findWireUrl } from "../lib/wire-discovery.js";
|
|
22
|
+
// ─── Loader ─────────────────────────────────────────────────────────
|
|
23
|
+
export function loadRecording(path) {
|
|
24
|
+
const abs = resolve(process.cwd(), path);
|
|
25
|
+
const raw = readFileSync(abs, "utf8");
|
|
26
|
+
const parsed = JSON.parse(raw);
|
|
27
|
+
if (!parsed ||
|
|
28
|
+
typeof parsed !== "object" ||
|
|
29
|
+
typeof parsed.hookName !== "string" ||
|
|
30
|
+
!Array.isArray(parsed.steps)) {
|
|
31
|
+
throw new Error(`not a Recording: ${abs} (missing hookName / steps[])`);
|
|
32
|
+
}
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
// ─── Renderers (exported for testing) ───────────────────────────────
|
|
36
|
+
export function renderReplayResult(res) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
const header = res.matches
|
|
39
|
+
? palette.ok(`✓ replay matches (${res.recorded.steps.length} steps)`)
|
|
40
|
+
: palette.warn(`! replay drift — ${res.drift.length} issue(s)`);
|
|
41
|
+
lines.push(header);
|
|
42
|
+
if (res.drift.length > 0) {
|
|
43
|
+
lines.push("");
|
|
44
|
+
lines.push(palette.bold("Drift:"));
|
|
45
|
+
for (const d of res.drift) {
|
|
46
|
+
lines.push(` ${palette.warn("•")} ${d}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
lines.push("");
|
|
50
|
+
lines.push(palette.bold("Steps (recorded → replayed):"));
|
|
51
|
+
const lim = Math.max(res.recorded.steps.length, res.replayed.stepCount);
|
|
52
|
+
for (let i = 0; i < lim; i++) {
|
|
53
|
+
const r = res.recorded.steps[i];
|
|
54
|
+
const present = i < res.replayed.stepCount;
|
|
55
|
+
const rec = r ? `${r.stepKind}/${r.stepName ?? ""}/${r.phase}` : palette.dim("(none)");
|
|
56
|
+
const rep = present ? rec : palette.warn("(missing)");
|
|
57
|
+
lines.push(` ${String(i).padStart(3, " ")} ${rec.padEnd(40, " ")} ${palette.dim("→")} ${rep}`);
|
|
58
|
+
}
|
|
59
|
+
lines.push("");
|
|
60
|
+
lines.push(palette.dim(`recorded outcome=${res.recorded.outcome} replayed outcome=${res.replayed.outcome}`));
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Render an offline-only step trace from the recording. No drift can be
|
|
65
|
+
* shown — we only have one side of the comparison — but the user still
|
|
66
|
+
* sees what *was* captured plus a one-line hint pointing them at the
|
|
67
|
+
* online surface for the real diff.
|
|
68
|
+
*/
|
|
69
|
+
export function renderOfflineDiff(recording) {
|
|
70
|
+
const lines = [];
|
|
71
|
+
lines.push(palette.warn("wire does not expose /_nwire/hooks/replay yet — replay is currently offline-only"));
|
|
72
|
+
lines.push(palette.dim("hint: diff is one-sided. Read recording.ctxIn → recording.ctxOut and replay the steps locally."));
|
|
73
|
+
lines.push("");
|
|
74
|
+
lines.push(palette.bold(`Recorded steps (${recording.steps.length}) — hook=${recording.hookName}:`));
|
|
75
|
+
recording.steps.forEach((s, i) => {
|
|
76
|
+
const dur = s.durationMs !== undefined ? ` ${palette.dim(`${s.durationMs.toFixed(1)}ms`)}` : "";
|
|
77
|
+
lines.push(` ${String(i).padStart(3, " ")} ${s.stepKind}/${s.stepName ?? ""}/${s.phase}${dur}`);
|
|
78
|
+
});
|
|
79
|
+
lines.push("");
|
|
80
|
+
lines.push(palette.dim(`outcome=${recording.outcome} capturedAt=${recording.capturedAt}`));
|
|
81
|
+
return lines.join("\n");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* POST the recording at the wire. Resolves to the parsed wire response
|
|
85
|
+
* when the endpoint is mounted, or to `null` when the wire returns 404 /
|
|
86
|
+
* 501 (endpoint missing). Throws on any other transport failure.
|
|
87
|
+
*/
|
|
88
|
+
export async function postReplay(opts) {
|
|
89
|
+
const res = await fetch(`${opts.url}/_nwire/hooks/replay`, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
headers: { "content-type": "application/json" },
|
|
92
|
+
body: JSON.stringify({ recording: opts.recording, hook: opts.hook }),
|
|
93
|
+
signal: opts.signal,
|
|
94
|
+
});
|
|
95
|
+
if (res.status === 404 || res.status === 501) {
|
|
96
|
+
// drain body so the socket can be reused
|
|
97
|
+
await res.text().catch(() => "");
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
if (!res.ok) {
|
|
101
|
+
const body = await res.text().catch(() => "");
|
|
102
|
+
throw new Error(`wire returned ${res.status} ${res.statusText}${body ? `: ${body}` : ""}`);
|
|
103
|
+
}
|
|
104
|
+
return (await res.json());
|
|
105
|
+
}
|
|
106
|
+
// ─── Command ────────────────────────────────────────────────────────
|
|
107
|
+
export const replayCommand = defineCommand({
|
|
108
|
+
meta: {
|
|
109
|
+
name: "replay",
|
|
110
|
+
description: "Replay a recorded hook run against the live wire (or print an offline trace)",
|
|
111
|
+
},
|
|
112
|
+
args: {
|
|
113
|
+
file: {
|
|
114
|
+
type: "positional",
|
|
115
|
+
description: "Path to the recording JSON file",
|
|
116
|
+
required: true,
|
|
117
|
+
},
|
|
118
|
+
hook: {
|
|
119
|
+
type: "string",
|
|
120
|
+
description: "Override hook name (defaults to the recording's hookName)",
|
|
121
|
+
required: false,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
async run({ args }) {
|
|
125
|
+
const file = String(args.file);
|
|
126
|
+
let recording;
|
|
127
|
+
try {
|
|
128
|
+
recording = loadRecording(file);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
console.error(palette.err("nwire replay:") +
|
|
132
|
+
` could not load recording — ${err instanceof Error ? err.message : String(err)}`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
const hook = typeof args.hook === "string" ? args.hook : undefined;
|
|
136
|
+
const url = await findWireUrl();
|
|
137
|
+
if (!url) {
|
|
138
|
+
console.log(palette.dim("# no running wire found (set NWIRE_INSPECT_URL or run `nwire dev`) — offline trace only"));
|
|
139
|
+
console.log(renderOfflineDiff(recording));
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
142
|
+
console.log(palette.dim(`# replaying against ${url}/_nwire/hooks/replay`));
|
|
143
|
+
try {
|
|
144
|
+
const result = await postReplay({ url, recording, hook });
|
|
145
|
+
if (result === null) {
|
|
146
|
+
console.log(renderOfflineDiff(recording));
|
|
147
|
+
process.exit(0);
|
|
148
|
+
}
|
|
149
|
+
console.log(renderReplayResult(result));
|
|
150
|
+
process.exit(result.matches ? 0 : 1);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.error(palette.err("nwire replay:") +
|
|
154
|
+
` ${err instanceof Error ? err.message : String(err)}`);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,eAAO,MAAM,UAAU;;;;;;EAyGrB,CAAC"}
|
package/dist/commands/run.js
CHANGED
|
@@ -10,10 +10,12 @@
|
|
|
10
10
|
* difference is `dev` adds `--watch` and reloads on change.
|
|
11
11
|
*/
|
|
12
12
|
import { defineCommand } from "citty";
|
|
13
|
-
import { resolve } from "node:path";
|
|
13
|
+
import { basename, relative, resolve } from "node:path";
|
|
14
14
|
import { existsSync } from "node:fs";
|
|
15
15
|
import { spawn } from "node:child_process";
|
|
16
16
|
import { palette } from "../lib/colors.js";
|
|
17
|
+
/** Windows toggle — `shell:true` so `.cmd` shims like `pnpm` resolve. */
|
|
18
|
+
const IS_WIN = process.platform === "win32";
|
|
17
19
|
export const runCommand = defineCommand({
|
|
18
20
|
meta: {
|
|
19
21
|
name: "run",
|
|
@@ -47,11 +49,11 @@ export const runCommand = defineCommand({
|
|
|
47
49
|
// eslint-disable-next-line no-console
|
|
48
50
|
console.error(palette.err("nwire run:") +
|
|
49
51
|
` no entry file in ${appDir} for wire "${args.wire}" (looked for ${candidates
|
|
50
|
-
.map((p) => p
|
|
52
|
+
.map((p) => basename(p))
|
|
51
53
|
.join(", ")})`);
|
|
52
54
|
process.exit(1);
|
|
53
55
|
}
|
|
54
|
-
const entryRel =
|
|
56
|
+
const entryRel = relative(cwd, entry);
|
|
55
57
|
const passthrough = rawArgs.slice(rawArgs.indexOf(String(args.wire)) + 1);
|
|
56
58
|
// ── Banner ──────────────────────────────────────────────────────
|
|
57
59
|
// eslint-disable-next-line no-console
|
|
@@ -69,6 +71,7 @@ export const runCommand = defineCommand({
|
|
|
69
71
|
const child = spawn("pnpm", ["exec", "vite-node", entry, ...passthrough], {
|
|
70
72
|
stdio: "inherit",
|
|
71
73
|
cwd,
|
|
74
|
+
shell: IS_WIN,
|
|
72
75
|
});
|
|
73
76
|
let stopping = false;
|
|
74
77
|
const stop = (signal) => {
|
|
@@ -84,7 +87,14 @@ export const runCommand = defineCommand({
|
|
|
84
87
|
setTimeout(() => {
|
|
85
88
|
if (child.exitCode === null && child.signalCode === null) {
|
|
86
89
|
try {
|
|
87
|
-
|
|
90
|
+
// Windows has no signal mechanism — both SIGTERM and SIGKILL
|
|
91
|
+
// collapse to TerminateProcess. Pass no signal so Node uses
|
|
92
|
+
// the platform default; on POSIX this is still SIGKILL via
|
|
93
|
+
// the explicit branch.
|
|
94
|
+
if (IS_WIN)
|
|
95
|
+
child.kill();
|
|
96
|
+
else
|
|
97
|
+
child.kill("SIGKILL");
|
|
88
98
|
}
|
|
89
99
|
catch {
|
|
90
100
|
// gone
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../src/commands/studio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../src/commands/studio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,eAAO,MAAM,aAAa,qDAyCxB,CAAC"}
|
package/dist/commands/studio.js
CHANGED
|
@@ -28,7 +28,13 @@ export const studioCommand = defineCommand({
|
|
|
28
28
|
" @nwire/studio not installed. `pnpm add -D @nwire/studio` first.");
|
|
29
29
|
process.exit(1);
|
|
30
30
|
}
|
|
31
|
-
const
|
|
31
|
+
const posixBin = resolve(studioDir, "node_modules", ".bin", "vite");
|
|
32
|
+
// Windows: pnpm creates both the POSIX shim AND a `vite.cmd` next to
|
|
33
|
+
// it. spawn() with shell:false needs the `.cmd` path; with shell:true
|
|
34
|
+
// (which spawnInteractive sets on Win) either works. Prefer the
|
|
35
|
+
// explicit `.cmd` when present so errors point at the real shim.
|
|
36
|
+
const winBin = `${posixBin}.cmd`;
|
|
37
|
+
const viteBin = process.platform === "win32" && existsSync(winBin) ? winBin : posixBin;
|
|
32
38
|
if (!existsSync(viteBin)) {
|
|
33
39
|
// eslint-disable-next-line no-console
|
|
34
40
|
console.error(palette.err("nwire studio:") +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../../src/commands/studio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;KACjD;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC1B,kEAAkE,CACrE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,
|
|
1
|
+
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../../src/commands/studio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;KACjD;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC1B,kEAAkE,CACrE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,qEAAqE;QACrE,sEAAsE;QACtE,gEAAgE;QAChE,iEAAiE;QACjE,MAAM,MAAM,GAAG,GAAG,QAAQ,MAAM,CAAC;QACjC,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC1B,2BAA2B,OAAO,8BAA8B,SAAS,EAAE,CAC9E,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE;YAClD,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;YACjC,cAAc,EAAE,iBAAiB;SAClC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsEH,eAAO,MAAM,WAAW;;;;;;;;;;;EA0EtB,CAAC"}
|
package/dist/commands/test.js
CHANGED
|
@@ -16,6 +16,8 @@ import { existsSync, readdirSync, statSync } from "node:fs";
|
|
|
16
16
|
import { resolve, join, relative } from "node:path";
|
|
17
17
|
import { palette } from "../lib/colors.js";
|
|
18
18
|
import { runTaskList } from "../lib/run-task.js";
|
|
19
|
+
/** Windows toggle — `shell:true` so `pnpm.cmd` resolves on spawn. */
|
|
20
|
+
const IS_WIN = process.platform === "win32";
|
|
19
21
|
const LAYERS = ["units", "integration", "e2e", "bdd"];
|
|
20
22
|
/** Walk `cwd` looking for `__tests__/<layer>/` dirs that contain test files. */
|
|
21
23
|
function findLayerDirs(cwd, layer, prune) {
|
|
@@ -132,6 +134,7 @@ export const testCommand = defineCommand({
|
|
|
132
134
|
const result = spawnSync(t.command, t.args, {
|
|
133
135
|
stdio: "inherit",
|
|
134
136
|
cwd: t.cwd,
|
|
137
|
+
shell: IS_WIN,
|
|
135
138
|
});
|
|
136
139
|
process.exit(result.status ?? 0);
|
|
137
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
interface EventEnvelope {
|
|
2
|
+
readonly messageId?: string;
|
|
3
|
+
readonly causationId?: string;
|
|
4
|
+
readonly correlationId?: string;
|
|
5
|
+
readonly occurredAt?: string | number;
|
|
6
|
+
}
|
|
7
|
+
interface WireEvent {
|
|
8
|
+
readonly name?: string;
|
|
9
|
+
readonly envelope?: EventEnvelope;
|
|
10
|
+
}
|
|
11
|
+
export declare function formatTimestamp(at: string | number | undefined): string;
|
|
12
|
+
export declare function shortId(id: string | undefined): string;
|
|
13
|
+
/**
|
|
14
|
+
* Render a single event line for the summary view.
|
|
15
|
+
*
|
|
16
|
+
* HH:MM:SS.mmm <corr> <event-name> <cause → msg>
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatSummaryLine(evt: WireEvent): string;
|
|
19
|
+
/**
|
|
20
|
+
* Build an ASCII causation tree for one correlation.
|
|
21
|
+
*
|
|
22
|
+
* `messageId` is the node identity; `causationId` points at the parent.
|
|
23
|
+
* Events whose parent we never see become additional roots (preserves
|
|
24
|
+
* order so out-of-order arrivals still render).
|
|
25
|
+
*/
|
|
26
|
+
export declare function renderTree(events: readonly WireEvent[]): string;
|
|
27
|
+
export declare const traceCommand: import("citty").CommandDef<{
|
|
28
|
+
correlation: {
|
|
29
|
+
type: "string";
|
|
30
|
+
description: string;
|
|
31
|
+
required: false;
|
|
32
|
+
};
|
|
33
|
+
limit: {
|
|
34
|
+
type: "string";
|
|
35
|
+
description: string;
|
|
36
|
+
required: false;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAoBA,UAAU,aAAa;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAM,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAI,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAK,MAAM,GAAG,MAAM,CAAC;CAC1C;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,IAAI,CAAC,EAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACnC;AAOD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAIvE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAQxD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAuB/D;AAmED,eAAO,MAAM,YAAY;;;;;;;;;;;EA4DvB,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nwire trace [--correlation <id>] [--limit <N>]`
|
|
3
|
+
*
|
|
4
|
+
* Streams `/_nwire/events/stream` from the running wire and either:
|
|
5
|
+
*
|
|
6
|
+
* • prints a one-line summary per event (default), or
|
|
7
|
+
* • renders a vertical causation tree for a single `--correlation`.
|
|
8
|
+
*
|
|
9
|
+
* The wire may restart while we're streaming — we reconnect with a 1s
|
|
10
|
+
* backoff after each disconnect and print a small dim banner. SIGINT
|
|
11
|
+
* aborts the stream cleanly.
|
|
12
|
+
*/
|
|
13
|
+
import { defineCommand } from "citty";
|
|
14
|
+
import { palette } from "../lib/colors.js";
|
|
15
|
+
import { findWireUrl } from "../lib/wire-discovery.js";
|
|
16
|
+
import { SseParser } from "../lib/sse.js";
|
|
17
|
+
// ─── Formatters (exported for testing) ─────────────────────────────
|
|
18
|
+
const PAD2 = (n) => n.toString().padStart(2, "0");
|
|
19
|
+
const PAD3 = (n) => n.toString().padStart(3, "0");
|
|
20
|
+
export function formatTimestamp(at) {
|
|
21
|
+
const d = at === undefined ? new Date() : new Date(at);
|
|
22
|
+
if (Number.isNaN(d.getTime()))
|
|
23
|
+
return "??:??:??.???";
|
|
24
|
+
return `${PAD2(d.getHours())}:${PAD2(d.getMinutes())}:${PAD2(d.getSeconds())}.${PAD3(d.getMilliseconds())}`;
|
|
25
|
+
}
|
|
26
|
+
export function shortId(id) {
|
|
27
|
+
if (!id)
|
|
28
|
+
return "--------";
|
|
29
|
+
// strip leading evt_/cmd_ prefixes if present, then take last 8 chars
|
|
30
|
+
const trimmed = id.replace(/^[a-z]{2,5}_/, "");
|
|
31
|
+
return trimmed.length <= 8 ? trimmed.padEnd(8, " ") : trimmed.slice(-8);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Render a single event line for the summary view.
|
|
35
|
+
*
|
|
36
|
+
* HH:MM:SS.mmm <corr> <event-name> <cause → msg>
|
|
37
|
+
*/
|
|
38
|
+
export function formatSummaryLine(evt) {
|
|
39
|
+
const env = evt.envelope ?? {};
|
|
40
|
+
const time = palette.dim(formatTimestamp(env.occurredAt));
|
|
41
|
+
const corr = palette.brand(shortId(env.correlationId));
|
|
42
|
+
const name = (evt.name ?? "(unknown)").padEnd(32, " ");
|
|
43
|
+
const cause = palette.dim(shortId(env.causationId));
|
|
44
|
+
const msg = palette.dim(shortId(env.messageId));
|
|
45
|
+
return `${time} ${corr} ${name} ${cause} ${palette.dim("→")} ${msg}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build an ASCII causation tree for one correlation.
|
|
49
|
+
*
|
|
50
|
+
* `messageId` is the node identity; `causationId` points at the parent.
|
|
51
|
+
* Events whose parent we never see become additional roots (preserves
|
|
52
|
+
* order so out-of-order arrivals still render).
|
|
53
|
+
*/
|
|
54
|
+
export function renderTree(events) {
|
|
55
|
+
const byId = new Map();
|
|
56
|
+
const children = new Map();
|
|
57
|
+
const roots = [];
|
|
58
|
+
for (const e of events) {
|
|
59
|
+
const id = e.envelope?.messageId;
|
|
60
|
+
if (id)
|
|
61
|
+
byId.set(id, e);
|
|
62
|
+
}
|
|
63
|
+
for (const e of events) {
|
|
64
|
+
const cause = e.envelope?.causationId;
|
|
65
|
+
if (cause && byId.has(cause) && cause !== e.envelope?.messageId) {
|
|
66
|
+
const list = children.get(cause) ?? [];
|
|
67
|
+
list.push(e);
|
|
68
|
+
children.set(cause, list);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
roots.push(e);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const lines = [];
|
|
75
|
+
for (const root of roots) {
|
|
76
|
+
walk(root, "", true, children, lines);
|
|
77
|
+
}
|
|
78
|
+
return lines.join("\n");
|
|
79
|
+
}
|
|
80
|
+
function walk(evt, prefix, isLast, children, out) {
|
|
81
|
+
const branch = isLast ? "└─ " : "├─ ";
|
|
82
|
+
const env = evt.envelope ?? {};
|
|
83
|
+
const time = palette.dim(formatTimestamp(env.occurredAt));
|
|
84
|
+
const name = evt.name ?? "(unknown)";
|
|
85
|
+
const id = palette.dim(shortId(env.messageId));
|
|
86
|
+
out.push(`${prefix}${palette.dim(branch)}${time} ${palette.brand(name)} ${id}`);
|
|
87
|
+
const id2 = env.messageId;
|
|
88
|
+
const kids = id2 ? children.get(id2) ?? [] : [];
|
|
89
|
+
const nextPre = prefix + (isLast ? " " : palette.dim("│ "));
|
|
90
|
+
kids.forEach((k, i) => walk(k, nextPre, i === kids.length - 1, children, out));
|
|
91
|
+
}
|
|
92
|
+
async function streamOnce(opts) {
|
|
93
|
+
const res = await fetch(`${opts.url}/_nwire/events/stream`, {
|
|
94
|
+
headers: { accept: "text/event-stream" },
|
|
95
|
+
signal: opts.signal,
|
|
96
|
+
});
|
|
97
|
+
if (!res.ok || !res.body) {
|
|
98
|
+
throw new Error(`stream returned ${res.status}`);
|
|
99
|
+
}
|
|
100
|
+
const reader = res.body.getReader();
|
|
101
|
+
const decoder = new TextDecoder("utf-8");
|
|
102
|
+
const parser = new SseParser();
|
|
103
|
+
let printed = 0;
|
|
104
|
+
const buffer = [];
|
|
105
|
+
while (!opts.signal.aborted) {
|
|
106
|
+
const { value, done } = await reader.read();
|
|
107
|
+
if (done)
|
|
108
|
+
return;
|
|
109
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
110
|
+
for (const payload of parser.feed(chunk)) {
|
|
111
|
+
const evt = payload;
|
|
112
|
+
if (opts.correlation) {
|
|
113
|
+
if (evt.envelope?.correlationId !== opts.correlation)
|
|
114
|
+
continue;
|
|
115
|
+
buffer.push(evt);
|
|
116
|
+
// Re-render the tree each time. Tiny clear so the previous
|
|
117
|
+
// tree doesn't leave stale lines for the same correlation.
|
|
118
|
+
opts.onBanner("\x1b[2J\x1b[H");
|
|
119
|
+
opts.onLine(renderTree(buffer));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
opts.onLine(formatSummaryLine(evt));
|
|
123
|
+
printed += 1;
|
|
124
|
+
if (opts.limit && printed >= opts.limit)
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export const traceCommand = defineCommand({
|
|
131
|
+
meta: {
|
|
132
|
+
name: "trace",
|
|
133
|
+
description: "Tail event stream from a running wire (optionally one correlation)",
|
|
134
|
+
},
|
|
135
|
+
args: {
|
|
136
|
+
correlation: {
|
|
137
|
+
type: "string",
|
|
138
|
+
description: "Show events for this correlationId only — renders as a causation tree",
|
|
139
|
+
required: false,
|
|
140
|
+
},
|
|
141
|
+
limit: {
|
|
142
|
+
type: "string",
|
|
143
|
+
description: "Stop after N events (summary mode only)",
|
|
144
|
+
required: false,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
async run({ args }) {
|
|
148
|
+
const url = await findWireUrl();
|
|
149
|
+
if (!url) {
|
|
150
|
+
console.error(palette.err("nwire trace:") +
|
|
151
|
+
" no running wire found. Start one with `nwire dev`, or set NWIRE_INSPECT_URL.");
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
const correlation = typeof args.correlation === "string" ? args.correlation : undefined;
|
|
155
|
+
const limit = typeof args.limit === "string" ? Number(args.limit) : undefined;
|
|
156
|
+
const ctrl = new AbortController();
|
|
157
|
+
const stop = () => ctrl.abort();
|
|
158
|
+
process.on("SIGINT", stop);
|
|
159
|
+
process.on("SIGTERM", stop);
|
|
160
|
+
console.log(palette.dim(`# tracing ${url}/_nwire/events/stream` +
|
|
161
|
+
(correlation ? ` (correlation=${correlation})` : "") +
|
|
162
|
+
` — Ctrl+C to exit`));
|
|
163
|
+
while (!ctrl.signal.aborted) {
|
|
164
|
+
try {
|
|
165
|
+
await streamOnce({
|
|
166
|
+
url,
|
|
167
|
+
correlation,
|
|
168
|
+
limit,
|
|
169
|
+
signal: ctrl.signal,
|
|
170
|
+
onLine: (l) => console.log(l),
|
|
171
|
+
onBanner: (l) => process.stdout.write(l),
|
|
172
|
+
});
|
|
173
|
+
// Hit the limit or stream EOF — exit cleanly.
|
|
174
|
+
process.exit(0);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
if (ctrl.signal.aborted)
|
|
178
|
+
break;
|
|
179
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
180
|
+
console.log(palette.warn(`# disconnected (${msg}) — reconnecting in 1s…`));
|
|
181
|
+
await sleep(1_000, ctrl.signal);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
process.exit(0);
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
function sleep(ms, signal) {
|
|
188
|
+
return new Promise((res) => {
|
|
189
|
+
if (signal.aborted)
|
|
190
|
+
return res();
|
|
191
|
+
const t = setTimeout(() => res(), ms);
|
|
192
|
+
signal.addEventListener("abort", () => { clearTimeout(t); res(); }, { once: true });
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
interface HookStepTelemetry {
|
|
2
|
+
readonly kind: "hook.step";
|
|
3
|
+
readonly hookName: string;
|
|
4
|
+
readonly phase: "start" | "end" | "error";
|
|
5
|
+
readonly stepKind?: string;
|
|
6
|
+
readonly stepName?: string;
|
|
7
|
+
readonly durationMs?: number;
|
|
8
|
+
readonly error?: {
|
|
9
|
+
readonly message?: string;
|
|
10
|
+
} | string;
|
|
11
|
+
readonly occurredAt?: string | number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Translate a `*`-glob into a `^…$` anchored RegExp. No other glob
|
|
15
|
+
* features (`?`, character classes) are supported — keeping the surface
|
|
16
|
+
* tight matches the rest of the framework's "one obvious way" stance.
|
|
17
|
+
*/
|
|
18
|
+
export declare function hookGlobToRegex(glob: string): RegExp;
|
|
19
|
+
export declare function formatHookStepLine(step: HookStepTelemetry): string;
|
|
20
|
+
export declare const watchCommand: import("citty").CommandDef<{
|
|
21
|
+
hook: {
|
|
22
|
+
type: "positional";
|
|
23
|
+
required: true;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
limit: {
|
|
27
|
+
type: "string";
|
|
28
|
+
description: string;
|
|
29
|
+
required: false;
|
|
30
|
+
};
|
|
31
|
+
}>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAwBA,UAAU,iBAAiB;IACzB,QAAQ,CAAC,IAAI,EAAQ,WAAW,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAI,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAO,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAM;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AASD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAWD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAmBlE;AAuCD,eAAO,MAAM,YAAY;;;;;;;;;;;EA0DvB,CAAC"}
|