@scrymore/scry-sbcov 0.3.1 → 0.3.2
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/core/built-story-index.d.ts +7 -0
- package/dist/core/built-story-index.d.ts.map +1 -1
- package/dist/core/built-story-index.js +28 -14
- package/dist/core/built-story-index.js.map +1 -1
- package/dist/core/static-server.d.ts +47 -0
- package/dist/core/static-server.d.ts.map +1 -0
- package/dist/core/static-server.js +246 -0
- package/dist/core/static-server.js.map +1 -0
- package/dist/core/story-executor.d.ts.map +1 -1
- package/dist/core/story-executor.js +62 -91
- package/dist/core/story-executor.js.map +1 -1
- package/package.json +1 -1
|
@@ -29,6 +29,13 @@ export interface BuiltStoryIndex {
|
|
|
29
29
|
* rather than an error.
|
|
30
30
|
*/
|
|
31
31
|
export declare function loadBuiltStoryIndex(staticDir: string | undefined): Promise<BuiltStoryIndex | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Parse an `index.json` payload, or null when it is not one.
|
|
34
|
+
*
|
|
35
|
+
* Split out from the disk read because the same payload is also fetched over
|
|
36
|
+
* HTTP to confirm the server being captured is serving this build.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseStoryIndex(raw: string): BuiltStoryIndex | null;
|
|
32
39
|
export interface ReconcileResult<T> {
|
|
33
40
|
/** Stories that exist in the build and should be captured. */
|
|
34
41
|
capture: T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-story-index.d.ts","sourceRoot":"","sources":["../../src/core/built-story-index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"built-story-index.d.ts","sourceRoot":"","sources":["../../src/core/built-story-index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA0BnE;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,8DAA8D;IAC9D,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,yEAAyE;IACzE,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,yEAAyE;IACzE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,UAAU,EAAE,CAAC,EAAE,EACf,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC9B,KAAK,EAAE,eAAe,GAAG,IAAI,GAC5B,eAAe,CAAC,CAAC,CAAC,CAmBpB"}
|
|
@@ -11,25 +11,39 @@ export async function loadBuiltStoryIndex(staticDir) {
|
|
|
11
11
|
if (!staticDir)
|
|
12
12
|
return null;
|
|
13
13
|
try {
|
|
14
|
-
|
|
15
|
-
const parsed = JSON.parse(raw);
|
|
16
|
-
const entries = parsed.entries ?? parsed.stories;
|
|
17
|
-
if (!entries)
|
|
18
|
-
return null;
|
|
19
|
-
const ids = new Set();
|
|
20
|
-
for (const [id, entry] of Object.entries(entries)) {
|
|
21
|
-
// Docs pages are indexed alongside stories but have nothing to capture.
|
|
22
|
-
if (entry && typeof entry === 'object' && entry.type === 'docs') {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
ids.add(id);
|
|
26
|
-
}
|
|
27
|
-
return { ids };
|
|
14
|
+
return parseStoryIndex(await readFile(path.join(staticDir, 'index.json'), 'utf8'));
|
|
28
15
|
}
|
|
29
16
|
catch {
|
|
30
17
|
return null;
|
|
31
18
|
}
|
|
32
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse an `index.json` payload, or null when it is not one.
|
|
22
|
+
*
|
|
23
|
+
* Split out from the disk read because the same payload is also fetched over
|
|
24
|
+
* HTTP to confirm the server being captured is serving this build.
|
|
25
|
+
*/
|
|
26
|
+
export function parseStoryIndex(raw) {
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = JSON.parse(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const entries = parsed?.entries ?? parsed?.stories;
|
|
35
|
+
if (!entries)
|
|
36
|
+
return null;
|
|
37
|
+
const ids = new Set();
|
|
38
|
+
for (const [id, entry] of Object.entries(entries)) {
|
|
39
|
+
// Docs pages are indexed alongside stories but have nothing to capture.
|
|
40
|
+
if (entry && typeof entry === 'object' && entry.type === 'docs') {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
ids.add(id);
|
|
44
|
+
}
|
|
45
|
+
return { ids };
|
|
46
|
+
}
|
|
33
47
|
/**
|
|
34
48
|
* Intersect discovered stories with what the build contains.
|
|
35
49
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-story-index.js","sourceRoot":"","sources":["../../src/core/built-story-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AA2B7B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA6B;IAE7B,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"built-story-index.js","sourceRoot":"","sources":["../../src/core/built-story-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AA2B7B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA6B;IAE7B,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,MAIH,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,CAAC;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,wEAAwE;QACxE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA2B,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAe,EACf,SAA8B,EAC9B,KAA6B;IAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACrC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static Server
|
|
3
|
+
* Serves a built Storybook for capture, on a port nothing else can be holding.
|
|
4
|
+
*/
|
|
5
|
+
import { type BuiltStoryIndex } from './built-story-index.js';
|
|
6
|
+
export interface StaticServer {
|
|
7
|
+
/** Base URL to point the browser at. */
|
|
8
|
+
url: string;
|
|
9
|
+
/** Stop the server and everything it spawned. Safe to call more than once. */
|
|
10
|
+
stop: () => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/** How to serve a directory. Injectable so the lifecycle is testable offline. */
|
|
13
|
+
export type ServerCommand = (staticDir: string, port: number) => {
|
|
14
|
+
command: string;
|
|
15
|
+
args: string[];
|
|
16
|
+
};
|
|
17
|
+
export declare const httpServerCommand: ServerCommand;
|
|
18
|
+
/**
|
|
19
|
+
* Ask the OS for a free port.
|
|
20
|
+
*
|
|
21
|
+
* The port used to be hardcoded to 6006 — Storybook's own dev-server default.
|
|
22
|
+
* Any developer with `storybook dev` running, or any previous capture that
|
|
23
|
+
* leaked its server, took the bind out from under the run; the failure was
|
|
24
|
+
* swallowed and capture continued against whatever else was listening. An
|
|
25
|
+
* OS-assigned port removes the collision instead of detecting it, and lets
|
|
26
|
+
* captures run concurrently.
|
|
27
|
+
*/
|
|
28
|
+
export declare function reserveEphemeralPort(): Promise<number>;
|
|
29
|
+
/**
|
|
30
|
+
* Serve `staticDir` and resolve once it actually answers.
|
|
31
|
+
*/
|
|
32
|
+
export declare function startStaticServer(staticDir: string, verbose: boolean, buildCommand?: ServerCommand): Promise<StaticServer>;
|
|
33
|
+
/**
|
|
34
|
+
* Confirm the server on `url` is serving the build we intend to capture.
|
|
35
|
+
*
|
|
36
|
+
* The port is ours by construction, but a proxy, a container port mapping or a
|
|
37
|
+
* forwarded tunnel can still put a different application behind it. Capturing
|
|
38
|
+
* the wrong application succeeds silently and ships plausible screenshots of
|
|
39
|
+
* something else, which is a worse outcome than crashing.
|
|
40
|
+
*
|
|
41
|
+
* Presence of the ids being captured is not sufficient on its own: component
|
|
42
|
+
* libraries agree on ids like `components-button--primary`, and a stale server
|
|
43
|
+
* for a neighbouring project answers those quite happily. The served index has
|
|
44
|
+
* to describe the same build, not merely a compatible one.
|
|
45
|
+
*/
|
|
46
|
+
export declare function verifyServedBuild(url: string, staticDir: string, built: BuiltStoryIndex, captureIds: readonly string[]): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=static-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-server.d.ts","sourceRoot":"","sources":["../../src/core/static-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAa/E,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,CAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,KACT;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,aAc9B,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAa5D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,YAAY,GAAE,aAAiC,GAC9C,OAAO,CAAC,YAAY,CAAC,CAuDvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static Server
|
|
3
|
+
* Serves a built Storybook for capture, on a port nothing else can be holding.
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import * as net from 'node:net';
|
|
7
|
+
import { parseStoryIndex } from './built-story-index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Loopback only. The build is served for this run, not for the network, and a
|
|
10
|
+
* capture that reaches the LAN is a capture someone else's proxy can answer.
|
|
11
|
+
* An explicit address also sidesteps `localhost` resolving to ::1 on hosts
|
|
12
|
+
* where the server bound IPv4.
|
|
13
|
+
*/
|
|
14
|
+
const HOST = '127.0.0.1';
|
|
15
|
+
/** Windows cannot spawn `npx.cmd` without a shell, and has no process groups. */
|
|
16
|
+
const IS_WINDOWS = process.platform === 'win32';
|
|
17
|
+
export const httpServerCommand = (staticDir, port) => ({
|
|
18
|
+
command: 'npx',
|
|
19
|
+
args: [
|
|
20
|
+
'-y',
|
|
21
|
+
'http-server',
|
|
22
|
+
// Only the shell path needs quoting, and only there does an unquoted path
|
|
23
|
+
// with spaces turn into two arguments.
|
|
24
|
+
IS_WINDOWS ? `"${staticDir}"` : staticDir,
|
|
25
|
+
'-a',
|
|
26
|
+
HOST,
|
|
27
|
+
'-p',
|
|
28
|
+
String(port),
|
|
29
|
+
'--silent',
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Ask the OS for a free port.
|
|
34
|
+
*
|
|
35
|
+
* The port used to be hardcoded to 6006 — Storybook's own dev-server default.
|
|
36
|
+
* Any developer with `storybook dev` running, or any previous capture that
|
|
37
|
+
* leaked its server, took the bind out from under the run; the failure was
|
|
38
|
+
* swallowed and capture continued against whatever else was listening. An
|
|
39
|
+
* OS-assigned port removes the collision instead of detecting it, and lets
|
|
40
|
+
* captures run concurrently.
|
|
41
|
+
*/
|
|
42
|
+
export async function reserveEphemeralPort() {
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const probe = net.createServer();
|
|
45
|
+
probe.once('error', reject);
|
|
46
|
+
probe.listen(0, HOST, () => {
|
|
47
|
+
const address = probe.address();
|
|
48
|
+
probe.close(() => {
|
|
49
|
+
if (address && typeof address === 'object')
|
|
50
|
+
resolve(address.port);
|
|
51
|
+
else
|
|
52
|
+
reject(new Error('Could not obtain a free port to serve the Storybook build on'));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Serve `staticDir` and resolve once it actually answers.
|
|
59
|
+
*/
|
|
60
|
+
export async function startStaticServer(staticDir, verbose, buildCommand = httpServerCommand) {
|
|
61
|
+
const port = await reserveEphemeralPort();
|
|
62
|
+
const url = `http://${HOST}:${port}`;
|
|
63
|
+
const { command, args } = buildCommand(staticDir, port);
|
|
64
|
+
if (verbose) {
|
|
65
|
+
console.log(`Starting static server: ${command} ${args.join(' ')}`);
|
|
66
|
+
}
|
|
67
|
+
const child = spawn(command, args, {
|
|
68
|
+
// Never 'inherit': a server that outlives the run keeps the parent's stdout
|
|
69
|
+
// open, so `scry-sbcov ... | tee log` waits forever for an EOF that the
|
|
70
|
+
// finished deploy already earned.
|
|
71
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
72
|
+
shell: IS_WINDOWS,
|
|
73
|
+
// `npx` launches http-server as a further child, so the pid we hold is the
|
|
74
|
+
// launcher rather than the listener. Its own group is what makes killing
|
|
75
|
+
// both of them possible.
|
|
76
|
+
detached: !IS_WINDOWS,
|
|
77
|
+
});
|
|
78
|
+
// Kept for the failure message, not as a log — the tail is all that explains
|
|
79
|
+
// a refused bind.
|
|
80
|
+
let output = '';
|
|
81
|
+
const record = (chunk) => {
|
|
82
|
+
output = (output + chunk.toString()).slice(-2000);
|
|
83
|
+
if (verbose)
|
|
84
|
+
process.stdout.write(chunk);
|
|
85
|
+
};
|
|
86
|
+
child.stdout?.on('data', record);
|
|
87
|
+
child.stderr?.on('data', record);
|
|
88
|
+
// A refused bind or an unreadable directory ends the process in milliseconds.
|
|
89
|
+
// Unwatched, that used to pass for success and capture ran against a stranger.
|
|
90
|
+
let failure = null;
|
|
91
|
+
child.once('error', (error) => {
|
|
92
|
+
failure = `Could not start a static server for ${staticDir}: ${error.message}`;
|
|
93
|
+
});
|
|
94
|
+
child.once('exit', (code, signal) => {
|
|
95
|
+
failure = `Static server for ${staticDir} exited (${signal ?? `code ${code}`}) before serving ${url}`;
|
|
96
|
+
});
|
|
97
|
+
const stop = createStop(child);
|
|
98
|
+
try {
|
|
99
|
+
await waitForServer(url, 30000, () => {
|
|
100
|
+
if (!failure)
|
|
101
|
+
return null;
|
|
102
|
+
const detail = output.trim();
|
|
103
|
+
return detail ? `${failure}: ${detail}` : failure;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
await stop();
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
return { url, stop };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Confirm the server on `url` is serving the build we intend to capture.
|
|
114
|
+
*
|
|
115
|
+
* The port is ours by construction, but a proxy, a container port mapping or a
|
|
116
|
+
* forwarded tunnel can still put a different application behind it. Capturing
|
|
117
|
+
* the wrong application succeeds silently and ships plausible screenshots of
|
|
118
|
+
* something else, which is a worse outcome than crashing.
|
|
119
|
+
*
|
|
120
|
+
* Presence of the ids being captured is not sufficient on its own: component
|
|
121
|
+
* libraries agree on ids like `components-button--primary`, and a stale server
|
|
122
|
+
* for a neighbouring project answers those quite happily. The served index has
|
|
123
|
+
* to describe the same build, not merely a compatible one.
|
|
124
|
+
*/
|
|
125
|
+
export async function verifyServedBuild(url, staticDir, built, captureIds) {
|
|
126
|
+
const indexUrl = `${url}/index.json`;
|
|
127
|
+
let body;
|
|
128
|
+
try {
|
|
129
|
+
const response = await fetch(indexUrl);
|
|
130
|
+
if (!response.ok)
|
|
131
|
+
throw new Error(`HTTP ${response.status}`);
|
|
132
|
+
body = await response.text();
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
throw new Error(`Refusing to capture: could not read the story index at ${indexUrl} ` +
|
|
136
|
+
`(${error instanceof Error ? error.message : String(error)}). ` +
|
|
137
|
+
`Something other than the build in ${staticDir} is answering on that port.`);
|
|
138
|
+
}
|
|
139
|
+
const served = parseStoryIndex(body);
|
|
140
|
+
if (!served) {
|
|
141
|
+
throw new Error(`Refusing to capture: ${indexUrl} is not a Storybook story index, so the server ` +
|
|
142
|
+
`is not serving the build in ${staticDir}.`);
|
|
143
|
+
}
|
|
144
|
+
const missing = captureIds.filter((id) => !served.ids.has(id));
|
|
145
|
+
if (missing.length > 0) {
|
|
146
|
+
throw new Error(`Refusing to capture: the server at ${url} is not serving the build in ${staticDir}. ` +
|
|
147
|
+
`${missing.length} of ${captureIds.length} stories to capture are absent from its ` +
|
|
148
|
+
`index.json (${sample(missing)}). ` +
|
|
149
|
+
`A proxy, a container port mapping or another Storybook is answering instead.`);
|
|
150
|
+
}
|
|
151
|
+
const absent = [...built.ids].filter((id) => !served.ids.has(id));
|
|
152
|
+
const extra = [...served.ids].filter((id) => !built.ids.has(id));
|
|
153
|
+
if (absent.length > 0 || extra.length > 0) {
|
|
154
|
+
throw new Error(`Refusing to capture: the server at ${url} answers with a different build than ${staticDir}. ` +
|
|
155
|
+
`Its index.json is missing ${absent.length} story(ies) (${sample(absent)}) and carries ` +
|
|
156
|
+
`${extra.length} it should not (${sample(extra)}). ` +
|
|
157
|
+
`A proxy, a container port mapping or another Storybook is answering instead.`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function sample(ids) {
|
|
161
|
+
if (ids.length === 0)
|
|
162
|
+
return 'none';
|
|
163
|
+
return ids.slice(0, 5).join(', ') + (ids.length > 5 ? ', ...' : '');
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build the stop function, and arm it against the exits that skip `finally`.
|
|
167
|
+
*
|
|
168
|
+
* A detached child survives its parent, and terminal Ctrl-C never reaches it
|
|
169
|
+
* because it is in another process group. Every leaked server becomes the
|
|
170
|
+
* squatter that poisons the next run, so the hooks are worth the intrusion.
|
|
171
|
+
*/
|
|
172
|
+
function createStop(child) {
|
|
173
|
+
const killNow = () => killTree(child, 'SIGKILL');
|
|
174
|
+
const onSignal = (signal) => {
|
|
175
|
+
killNow();
|
|
176
|
+
detach();
|
|
177
|
+
// Re-raise so the default disposition applies and the exit code is honest.
|
|
178
|
+
process.kill(process.pid, signal);
|
|
179
|
+
};
|
|
180
|
+
const detach = () => {
|
|
181
|
+
process.removeListener('exit', killNow);
|
|
182
|
+
process.removeListener('SIGINT', onSignal);
|
|
183
|
+
process.removeListener('SIGTERM', onSignal);
|
|
184
|
+
};
|
|
185
|
+
process.once('exit', killNow);
|
|
186
|
+
process.once('SIGINT', onSignal);
|
|
187
|
+
process.once('SIGTERM', onSignal);
|
|
188
|
+
let stopping = null;
|
|
189
|
+
return () => {
|
|
190
|
+
stopping ??= (async () => {
|
|
191
|
+
detach();
|
|
192
|
+
if (hasExited(child))
|
|
193
|
+
return;
|
|
194
|
+
const exited = new Promise((resolve) => child.once('exit', () => resolve()));
|
|
195
|
+
killTree(child, 'SIGTERM');
|
|
196
|
+
// SIGTERM is enough for http-server; the escalation is for a wedged npx.
|
|
197
|
+
const escalation = setTimeout(() => killTree(child, 'SIGKILL'), 3000);
|
|
198
|
+
try {
|
|
199
|
+
await exited;
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
clearTimeout(escalation);
|
|
203
|
+
}
|
|
204
|
+
})();
|
|
205
|
+
return stopping;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function killTree(child, signal) {
|
|
209
|
+
if (child.pid === undefined || hasExited(child))
|
|
210
|
+
return;
|
|
211
|
+
try {
|
|
212
|
+
// A negative pid signals the whole group: `npx` and the server it launched.
|
|
213
|
+
if (IS_WINDOWS)
|
|
214
|
+
child.kill(signal);
|
|
215
|
+
else
|
|
216
|
+
process.kill(-child.pid, signal);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Already gone.
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function hasExited(child) {
|
|
223
|
+
return child.exitCode !== null || child.signalCode !== null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Poll until the server answers, or explain why it never will.
|
|
227
|
+
*/
|
|
228
|
+
async function waitForServer(url, timeout, reasonToStop) {
|
|
229
|
+
const deadline = Date.now() + timeout;
|
|
230
|
+
while (Date.now() < deadline) {
|
|
231
|
+
const reason = reasonToStop();
|
|
232
|
+
if (reason)
|
|
233
|
+
throw new Error(reason);
|
|
234
|
+
try {
|
|
235
|
+
const response = await fetch(url);
|
|
236
|
+
if (response.ok)
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Not listening yet.
|
|
241
|
+
}
|
|
242
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
243
|
+
}
|
|
244
|
+
throw new Error(reasonToStop() ?? `Server at ${url} did not become ready within ${timeout}ms`);
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=static-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-server.js","sourceRoot":"","sources":["../../src/core/static-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"story-executor.d.ts","sourceRoot":"","sources":["../../src/core/story-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EAIf,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAyB3B;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,UAAQ,GACd,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"story-executor.d.ts","sourceRoot":"","sources":["../../src/core/story-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EAIf,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAyB3B;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,UAAQ,GACd,OAAO,CAAC,gBAAgB,CAAC,CA0J3B;AAyPD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,gBAAgB,EAChC,eAAe,EAAE,gBAAgB,GAAG,IAAI,EACxC,WAAW,EAAE,MAAM,GAClB,kBAAkB,CAyCpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAa1E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG9D"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Story Executor
|
|
3
3
|
* Executes stories in a real browser to detect runtime failures using Playwright
|
|
4
4
|
*/
|
|
5
|
-
import { spawn } from 'node:child_process';
|
|
6
5
|
import { loadBuiltStoryIndex, reconcileWithBuild } from './built-story-index.js';
|
|
6
|
+
import { startStaticServer, verifyServedBuild } from './static-server.js';
|
|
7
7
|
import * as fs from 'node:fs';
|
|
8
8
|
import * as path from 'node:path';
|
|
9
9
|
// Dynamic import for Playwright (optional dependency)
|
|
@@ -45,73 +45,81 @@ export async function executeStories(storyFiles, config, verbose = false) {
|
|
|
45
45
|
if (captureFailureScreenshots || captureAllScreenshots) {
|
|
46
46
|
fs.mkdirSync(screenshotDir, { recursive: true });
|
|
47
47
|
}
|
|
48
|
-
// Start static server if needed
|
|
49
|
-
let serverProcess = null;
|
|
50
|
-
let effectiveUrl = storybookUrl;
|
|
51
|
-
if (config.staticDir) {
|
|
52
|
-
const port = 6006;
|
|
53
|
-
effectiveUrl = `http://localhost:${port}`;
|
|
54
|
-
serverProcess = await startStaticServer(config.staticDir, port, verbose);
|
|
55
|
-
// Wait for server to be ready
|
|
56
|
-
await waitForServer(effectiveUrl, 30000);
|
|
57
|
-
}
|
|
58
48
|
const results = [];
|
|
59
49
|
const startTime = Date.now();
|
|
50
|
+
// Collect all stories
|
|
51
|
+
const discovered = [];
|
|
52
|
+
for (const file of storyFiles) {
|
|
53
|
+
for (const story of file.stories) {
|
|
54
|
+
discovered.push({ story, file });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Reconcile against what Storybook actually built. Story-file globs and the
|
|
58
|
+
// `stories` config in .storybook/main.ts are different sets, and navigating
|
|
59
|
+
// to an id that was never built simply waits out the full timeout.
|
|
60
|
+
const builtIndex = await loadBuiltStoryIndex(config.staticDir);
|
|
61
|
+
const { capture: allStories, phantom, missedIds } = reconcileWithBuild(discovered, (item) => item.story.storyId, builtIndex);
|
|
62
|
+
if (phantom.length > 0) {
|
|
63
|
+
// Loud by default, not behind --verbose: this is why a run takes minutes
|
|
64
|
+
// longer than it should, and the cause is not guessable from the output.
|
|
65
|
+
console.warn(` Skipping ${phantom.length} story(ies) found on disk but absent from the build — ` +
|
|
66
|
+
`check the \`stories\` globs in .storybook/main.ts:`);
|
|
67
|
+
for (const item of phantom.slice(0, 10)) {
|
|
68
|
+
console.warn(` ${item.story.storyId} (${item.file.filePath})`);
|
|
69
|
+
}
|
|
70
|
+
if (phantom.length > 10)
|
|
71
|
+
console.warn(` ...and ${phantom.length - 10} more`);
|
|
72
|
+
}
|
|
73
|
+
if (missedIds.length > 0) {
|
|
74
|
+
// The dangerous direction: these were built but never discovered, so they
|
|
75
|
+
// would be absent from the index while the run still reports success.
|
|
76
|
+
console.warn(` ${missedIds.length} built story(ies) were not discovered and will NOT be indexed:`);
|
|
77
|
+
for (const id of missedIds.slice(0, 10))
|
|
78
|
+
console.warn(` ${id}`);
|
|
79
|
+
if (missedIds.length > 10)
|
|
80
|
+
console.warn(` ...and ${missedIds.length - 10} more`);
|
|
81
|
+
}
|
|
82
|
+
// Serve the build ourselves, unless the caller pointed us at a Storybook that
|
|
83
|
+
// is already running — that one is theirs to start and to stop.
|
|
84
|
+
let server = null;
|
|
85
|
+
let effectiveUrl = storybookUrl;
|
|
60
86
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
for (const file of storyFiles) {
|
|
67
|
-
for (const story of file.stories) {
|
|
68
|
-
discovered.push({ story, file });
|
|
87
|
+
if (config.staticDir) {
|
|
88
|
+
server = await startStaticServer(config.staticDir, verbose);
|
|
89
|
+
effectiveUrl = server.url;
|
|
90
|
+
if (builtIndex) {
|
|
91
|
+
await verifyServedBuild(effectiveUrl, config.staticDir, builtIndex, allStories.map((item) => item.story.storyId));
|
|
69
92
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const builtIndex = await loadBuiltStoryIndex(config.staticDir);
|
|
75
|
-
const { capture: allStories, phantom, missedIds } = reconcileWithBuild(discovered, (item) => item.story.storyId, builtIndex);
|
|
76
|
-
if (phantom.length > 0) {
|
|
77
|
-
// Loud by default, not behind --verbose: this is why a run takes minutes
|
|
78
|
-
// longer than it should, and the cause is not guessable from the output.
|
|
79
|
-
console.warn(` Skipping ${phantom.length} story(ies) found on disk but absent from the build — ` +
|
|
80
|
-
`check the \`stories\` globs in .storybook/main.ts:`);
|
|
81
|
-
for (const item of phantom.slice(0, 10)) {
|
|
82
|
-
console.warn(` ${item.story.storyId} (${item.file.filePath})`);
|
|
93
|
+
else {
|
|
94
|
+
// Without an index there is nothing to compare the served build against,
|
|
95
|
+
// so say so rather than let an unverified capture look like a verified one.
|
|
96
|
+
console.warn(` Could not verify the served build: ${config.staticDir} has no readable index.json.`);
|
|
83
97
|
}
|
|
84
|
-
if (phantom.length > 10)
|
|
85
|
-
console.warn(` ...and ${phantom.length - 10} more`);
|
|
86
|
-
}
|
|
87
|
-
if (missedIds.length > 0) {
|
|
88
|
-
// The dangerous direction: these were built but never discovered, so they
|
|
89
|
-
// would be absent from the index while the run still reports success.
|
|
90
|
-
console.warn(` ${missedIds.length} built story(ies) were not discovered and will NOT be indexed:`);
|
|
91
|
-
for (const id of missedIds.slice(0, 10))
|
|
92
|
-
console.warn(` ${id}`);
|
|
93
|
-
if (missedIds.length > 10)
|
|
94
|
-
console.warn(` ...and ${missedIds.length - 10} more`);
|
|
95
98
|
}
|
|
96
99
|
if (verbose) {
|
|
97
100
|
console.log(`Executing ${allStories.length} stories...`);
|
|
98
101
|
}
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
// Launch browser
|
|
103
|
+
const browser = await pw.chromium.launch({ headless: true });
|
|
104
|
+
try {
|
|
105
|
+
const context = await browser.newContext();
|
|
106
|
+
// Execute each story
|
|
107
|
+
for (const { story, file } of allStories) {
|
|
108
|
+
const result = await executeStory(story, file, context, effectiveUrl, timeout, screenshotDir, captureFailureScreenshots, captureAllScreenshots, verbose);
|
|
109
|
+
results.push(result);
|
|
110
|
+
if (verbose) {
|
|
111
|
+
const icon = result.status === 'passed' ? '✓' : '✗';
|
|
112
|
+
console.log(` ${icon} ${result.componentName}/${result.storyName} (${result.duration}ms)`);
|
|
113
|
+
}
|
|
106
114
|
}
|
|
107
115
|
}
|
|
108
|
-
|
|
116
|
+
finally {
|
|
117
|
+
await browser.close();
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
120
|
finally {
|
|
111
121
|
// Stop static server
|
|
112
|
-
|
|
113
|
-
serverProcess.kill();
|
|
114
|
-
}
|
|
122
|
+
await server?.stop();
|
|
115
123
|
}
|
|
116
124
|
const endTime = Date.now();
|
|
117
125
|
const duration = endTime - startTime;
|
|
@@ -319,43 +327,6 @@ async function executeStory(story, file, context, storybookUrl, timeout, screens
|
|
|
319
327
|
};
|
|
320
328
|
}
|
|
321
329
|
}
|
|
322
|
-
/**
|
|
323
|
-
* Start a static server for Storybook
|
|
324
|
-
*/
|
|
325
|
-
async function startStaticServer(staticDir, port, verbose) {
|
|
326
|
-
return new Promise((resolve, reject) => {
|
|
327
|
-
const args = ['-y', 'http-server', staticDir, '-p', String(port), '--silent'];
|
|
328
|
-
if (verbose) {
|
|
329
|
-
console.log(`Starting static server: npx ${args.join(' ')}`);
|
|
330
|
-
}
|
|
331
|
-
const server = spawn('npx', args, {
|
|
332
|
-
stdio: verbose ? 'inherit' : 'pipe',
|
|
333
|
-
shell: true,
|
|
334
|
-
});
|
|
335
|
-
server.on('error', reject);
|
|
336
|
-
// Give server a moment to start
|
|
337
|
-
setTimeout(() => resolve(server), 1000);
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Wait for server to be ready
|
|
342
|
-
*/
|
|
343
|
-
async function waitForServer(url, timeout) {
|
|
344
|
-
const startTime = Date.now();
|
|
345
|
-
while (Date.now() - startTime < timeout) {
|
|
346
|
-
try {
|
|
347
|
-
const response = await fetch(url);
|
|
348
|
-
if (response.ok) {
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
catch {
|
|
353
|
-
// Server not ready yet
|
|
354
|
-
}
|
|
355
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
356
|
-
}
|
|
357
|
-
throw new Error(`Server at ${url} did not become ready within ${timeout}ms`);
|
|
358
|
-
}
|
|
359
330
|
/**
|
|
360
331
|
* Create empty execution results
|
|
361
332
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"story-executor.js","sourceRoot":"","sources":["../../src/core/story-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"story-executor.js","sourceRoot":"","sources":["../../src/core/story-executor.ts"],"names":[],"mappings":"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"}
|