@scenar/cli 0.7.0 → 0.9.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/example-bundle/assets/index-BoIR0_nN.js +147 -0
- package/example-bundle/assets/style-YRMeJPPX.css +1 -0
- package/example-bundle/index.html +2 -2
- package/example-bundle/pack-manifest.json +7 -7
- package/package.json +9 -5
- package/src/__tests__/pack-generate-embed-entry.test.ts +68 -3
- package/src/__tests__/run-shoot.test.ts +270 -0
- package/src/api.d.ts +3 -0
- package/src/api.d.ts.map +1 -1
- package/src/api.js +2 -0
- package/src/api.js.map +1 -1
- package/src/api.ts +5 -0
- package/src/commands/shoot.d.ts +3 -0
- package/src/commands/shoot.d.ts.map +1 -0
- package/src/commands/shoot.js +52 -0
- package/src/commands/shoot.js.map +1 -0
- package/src/commands/shoot.ts +72 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/index.ts +2 -0
- package/src/pack/generate-embed-entry.d.ts +11 -0
- package/src/pack/generate-embed-entry.d.ts.map +1 -1
- package/src/pack/generate-embed-entry.js +82 -1
- package/src/pack/generate-embed-entry.js.map +1 -1
- package/src/pack/generate-embed-entry.ts +83 -1
- package/src/shoot/playwright-browser.d.ts +9 -0
- package/src/shoot/playwright-browser.d.ts.map +1 -0
- package/src/shoot/playwright-browser.js +92 -0
- package/src/shoot/playwright-browser.js.map +1 -0
- package/src/shoot/playwright-browser.ts +121 -0
- package/src/shoot/run-shoot.d.ts +52 -0
- package/src/shoot/run-shoot.d.ts.map +1 -0
- package/src/shoot/run-shoot.js +172 -0
- package/src/shoot/run-shoot.js.map +1 -0
- package/src/shoot/run-shoot.ts +251 -0
- package/src/shoot/types.d.ts +40 -0
- package/src/shoot/types.d.ts.map +1 -0
- package/src/shoot/types.js +2 -0
- package/src/shoot/types.js.map +1 -0
- package/src/shoot/types.ts +40 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/example-bundle/assets/index-CC5MZqKr.js +0 -147
- package/example-bundle/assets/style-Ci-h7jik.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shoot.js","sourceRoot":"","sources":["../../../src/commands/shoot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AASjD,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAEzD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,8DAA8D;QAC5D,oEAAoE;QACpE,qEAAqE;QACrE,+DAA+D;QAC/D,kEAAkE;QAClE,gEAAgE;QAChE,mEAAmE;QACnE,mEAAmE;QACnE,sEAAsE;QACtE,sEAAsE;QACtE,kEAAkE;QAClE,kCAAkC,CACrC;SACA,QAAQ,CAAC,OAAO,EAAE,8CAA8C,CAAC;SACjE,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC;SACpG,MAAM,CACL,UAAU,EACV,kGAAkG,CACnG;SACA,MAAM,CAAC,gBAAgB,EAAE,6DAA6D,EAAE,OAAO,CAAC;SAChG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAqB,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,MAAM,GACV,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAkB,CAAC,CAAC;YAE9E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;gBAC5B,SAAS,EAAE,GAAG;gBACd,MAAM;gBACN,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;gBAC/B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS;gBAC/C,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;aACzD,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,MAAM,CAAC,UAAU,wBAAwB;oBAClF,yEAAyE,CAC5E,CAAC;gBACF,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU;gBACtD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,UAAU;gBACjE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC/D,MAAM,MAAM,CAAC,SAAS,WAAW,CACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { runShoot } from "../shoot/run-shoot.js";
|
|
3
|
+
import type { ShotTheme } from "../shoot/types.js";
|
|
4
|
+
|
|
5
|
+
interface ShootOptions {
|
|
6
|
+
theme: string;
|
|
7
|
+
verify?: boolean;
|
|
8
|
+
timeout: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const THEME_CHOICES = ["light", "dark", "both"] as const;
|
|
12
|
+
|
|
13
|
+
export function registerShootCommand(program: Command): void {
|
|
14
|
+
program
|
|
15
|
+
.command("shoot")
|
|
16
|
+
.description(
|
|
17
|
+
"Render a packed bundle's declared shots to still images.\n\n" +
|
|
18
|
+
"Reads the steps' `shot` names from the running bundle, walks the\n" +
|
|
19
|
+
"timeline sequentially (a deterministic TimeSource walk — the same\n" +
|
|
20
|
+
"model as video export), and screenshots each shot's settled\n" +
|
|
21
|
+
"end-of-step frame into <bundle>/stills/<shot>.<theme>.png, one\n" +
|
|
22
|
+
"image per theme. The pack manifest is rebuilt afterwards, so\n" +
|
|
23
|
+
"`scenar publish` and deploys ship the stills with the bundle.\n\n" +
|
|
24
|
+
"Requires Playwright (optional peer): npm install -D playwright,\n" +
|
|
25
|
+
"then npx playwright install chromium. The bundle must be packed by\n" +
|
|
26
|
+
"the same CLI version (all @scenar packages release in lockstep).\n\n" +
|
|
27
|
+
"Tip: open <bundle-url>?shot=<name> in a browser to eyeball any\n" +
|
|
28
|
+
"declared shot without capturing.",
|
|
29
|
+
)
|
|
30
|
+
.argument("<dir>", "a packed bundle directory (from scenar pack)")
|
|
31
|
+
.option("--theme <theme>", `themes to capture: ${THEME_CHOICES.join(" | ")} (default: both)`, "both")
|
|
32
|
+
.option(
|
|
33
|
+
"--verify",
|
|
34
|
+
"capture everything twice in fresh browser sessions and fail unless every still is byte-identical",
|
|
35
|
+
)
|
|
36
|
+
.option("--timeout <ms>", "per-page readiness timeout in milliseconds (default: 30000)", "30000")
|
|
37
|
+
.action(async (dir: string, options: ShootOptions) => {
|
|
38
|
+
try {
|
|
39
|
+
if (!(THEME_CHOICES as readonly string[]).includes(options.theme)) {
|
|
40
|
+
throw new Error(`--theme must be one of: ${THEME_CHOICES.join(", ")}`);
|
|
41
|
+
}
|
|
42
|
+
const themes: readonly ShotTheme[] =
|
|
43
|
+
options.theme === "both" ? ["light", "dark"] : [options.theme as ShotTheme];
|
|
44
|
+
|
|
45
|
+
const result = await runShoot({
|
|
46
|
+
bundleDir: dir,
|
|
47
|
+
themes,
|
|
48
|
+
verify: options.verify ?? false,
|
|
49
|
+
timeoutMs: Number(options.timeout) || undefined,
|
|
50
|
+
onLog: (message) => process.stderr.write(`${message}\n`),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
if (result.shots.length === 0) {
|
|
54
|
+
process.stderr.write(
|
|
55
|
+
`\n\x1b[32m✓\x1b[0m No shots declared in ${result.scenarioId} — nothing captured.\n` +
|
|
56
|
+
` Name a capture point by setting \`shot: "<kebab-name>"\` on a step.\n`,
|
|
57
|
+
);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
process.stderr.write(
|
|
61
|
+
`\n\x1b[32m✓\x1b[0m Shot ${result.files.length} stills ` +
|
|
62
|
+
`(${result.shots.length} shots x ${result.themes.length} themes)` +
|
|
63
|
+
`${result.verified ? ", byte-identical across sessions" : ""} ` +
|
|
64
|
+
`to ${result.bundleDir}/stills\n`,
|
|
65
|
+
);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
68
|
+
process.stderr.write(`\x1b[31mError:\x1b[0m ${msg}\n`);
|
|
69
|
+
process.exitCode = 1;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,aAAa,IAAI,OAAO,CAmBvC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAGxC"}
|
package/src/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { registerNarrateCommand } from "./commands/narrate.js";
|
|
|
4
4
|
import { registerInstallCommand } from "./commands/install.js";
|
|
5
5
|
import { registerRenderCommand } from "./commands/render.js";
|
|
6
6
|
import { registerPackCommand } from "./commands/pack.js";
|
|
7
|
+
import { registerShootCommand } from "./commands/shoot.js";
|
|
7
8
|
import { registerServeCommand } from "./commands/serve.js";
|
|
8
9
|
import { registerTryCommand } from "./commands/try.js";
|
|
9
10
|
import { registerPublishCommand } from "./commands/publish.js";
|
|
@@ -18,6 +19,7 @@ export function createProgram() {
|
|
|
18
19
|
registerRenderCommand(program);
|
|
19
20
|
registerInstallCommand(program);
|
|
20
21
|
registerPackCommand(program);
|
|
22
|
+
registerShootCommand(program);
|
|
21
23
|
registerServeCommand(program);
|
|
22
24
|
registerTryCommand(program);
|
|
23
25
|
registerPublishCommand(program);
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,+FAA+F,CAAC;SAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAc;IAChC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,+FAA+F,CAAC;SAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAc;IAChC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { registerNarrateCommand } from "./commands/narrate.js";
|
|
|
4
4
|
import { registerInstallCommand } from "./commands/install.js";
|
|
5
5
|
import { registerRenderCommand } from "./commands/render.js";
|
|
6
6
|
import { registerPackCommand } from "./commands/pack.js";
|
|
7
|
+
import { registerShootCommand } from "./commands/shoot.js";
|
|
7
8
|
import { registerServeCommand } from "./commands/serve.js";
|
|
8
9
|
import { registerTryCommand } from "./commands/try.js";
|
|
9
10
|
import { registerPublishCommand } from "./commands/publish.js";
|
|
@@ -21,6 +22,7 @@ export function createProgram(): Command {
|
|
|
21
22
|
registerRenderCommand(program);
|
|
22
23
|
registerInstallCommand(program);
|
|
23
24
|
registerPackCommand(program);
|
|
25
|
+
registerShootCommand(program);
|
|
24
26
|
registerServeCommand(program);
|
|
25
27
|
registerTryCommand(program);
|
|
26
28
|
registerPublishCommand(program);
|
|
@@ -47,6 +47,17 @@ export interface EmbedEntryInput {
|
|
|
47
47
|
* selector). The default is light, so existing embeds are unaffected; a host can
|
|
48
48
|
* theme-sync simply by framing `…/?theme=dark`.
|
|
49
49
|
*
|
|
50
|
+
* Capture (`?shot`): with a `shot` query param present, the entry mounts
|
|
51
|
+
* `ScenarioCaptureMount` instead of the playback tree — the TimeSource-driven
|
|
52
|
+
* catch-up mount behind `scenar shoot` (DD-02). The driver installs on
|
|
53
|
+
* `window.__scenarShot`; failures surface on `window.__scenarShotError`.
|
|
54
|
+
* `?shot=<name>` additionally auto-walks to that shot, so an author can
|
|
55
|
+
* eyeball any still in a plain browser. When the scenario has narration, the
|
|
56
|
+
* capture branch fetches the manifest itself and fails LOUDLY on error —
|
|
57
|
+
* step durations are narration-driven, so a silent fallback would capture
|
|
58
|
+
* every shot at the wrong time (which is why it must not reuse
|
|
59
|
+
* `useNarrationManifest`, whose fetch failure is silent by design).
|
|
60
|
+
*
|
|
50
61
|
* Pure function, no side effects — the caller writes the result to disk.
|
|
51
62
|
*/
|
|
52
63
|
export declare function generateEmbedEntry(input: EmbedEntryInput): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-embed-entry.d.ts","sourceRoot":"","sources":["../../../src/pack/generate-embed-entry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"generate-embed-entry.d.ts","sourceRoot":"","sources":["../../../src/pack/generate-embed-entry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAyPjE;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAMA,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAKhD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,UAAQ,GACZ,MAAM,CAmCR"}
|
|
@@ -20,6 +20,17 @@ import { posix } from "node:path";
|
|
|
20
20
|
* selector). The default is light, so existing embeds are unaffected; a host can
|
|
21
21
|
* theme-sync simply by framing `…/?theme=dark`.
|
|
22
22
|
*
|
|
23
|
+
* Capture (`?shot`): with a `shot` query param present, the entry mounts
|
|
24
|
+
* `ScenarioCaptureMount` instead of the playback tree — the TimeSource-driven
|
|
25
|
+
* catch-up mount behind `scenar shoot` (DD-02). The driver installs on
|
|
26
|
+
* `window.__scenarShot`; failures surface on `window.__scenarShotError`.
|
|
27
|
+
* `?shot=<name>` additionally auto-walks to that shot, so an author can
|
|
28
|
+
* eyeball any still in a plain browser. When the scenario has narration, the
|
|
29
|
+
* capture branch fetches the manifest itself and fails LOUDLY on error —
|
|
30
|
+
* step durations are narration-driven, so a silent fallback would capture
|
|
31
|
+
* every shot at the wrong time (which is why it must not reuse
|
|
32
|
+
* `useNarrationManifest`, whose fetch failure is silent by design).
|
|
33
|
+
*
|
|
23
34
|
* Pure function, no side effects — the caller writes the result to disk.
|
|
24
35
|
*/
|
|
25
36
|
export function generateEmbedEntry(input) {
|
|
@@ -42,6 +53,7 @@ export function generateEmbedEntry(input) {
|
|
|
42
53
|
"useStepInteractions",
|
|
43
54
|
"ViewportTransformLayer",
|
|
44
55
|
"VIEWPORT_TRANSFORM_IDENTITY",
|
|
56
|
+
"ScenarioCaptureMount",
|
|
45
57
|
];
|
|
46
58
|
if (input.stage)
|
|
47
59
|
reactImports.push("ScenarioStage");
|
|
@@ -90,6 +102,15 @@ export function generateEmbedEntry(input) {
|
|
|
90
102
|
lines.push(` catch { return null; }`);
|
|
91
103
|
lines.push(`})();`);
|
|
92
104
|
lines.push(`const _rootClass = _theme === "dark" ? SCENAR_CLASS + " dark" : SCENAR_CLASS;`);
|
|
105
|
+
// --- Capture mode: ?shot (bare = driver only; ?shot=<name> = auto-walk) ---
|
|
106
|
+
// Read the same way as _theme: once, at module load, outside React. A null
|
|
107
|
+
// value (param absent) means normal playback; "" (bare ?shot) means capture
|
|
108
|
+
// mode without an auto-walk target.
|
|
109
|
+
lines.push(``);
|
|
110
|
+
lines.push(`const _shotParam = (() => {`);
|
|
111
|
+
lines.push(` try { return new URLSearchParams(window.location.search).get("shot"); }`);
|
|
112
|
+
lines.push(` catch { return null; }`);
|
|
113
|
+
lines.push(`})();`);
|
|
93
114
|
// --- Page canvas: transparent when framed, theme surface when top-level ---
|
|
94
115
|
// The static HTML keeps html/body transparent (see generateEmbedHtml): a
|
|
95
116
|
// framed embed's canvas then shows the *host page's* background through any
|
|
@@ -183,11 +204,71 @@ export function generateEmbedEntry(input) {
|
|
|
183
204
|
lines.push(` </div>`);
|
|
184
205
|
lines.push(` );`);
|
|
185
206
|
lines.push(`}`);
|
|
207
|
+
// --- Capture mount (?shot) ---
|
|
208
|
+
// The whole capture tree lives in @scenar/react (ScenarioCaptureMount);
|
|
209
|
+
// this branch only feeds it the same inputs the playback tree gets and
|
|
210
|
+
// wires the window contract `scenar shoot` consumes: the driver on
|
|
211
|
+
// `window.__scenarShot`, failures on `window.__scenarShotError`. The
|
|
212
|
+
// narration manifest is fetched HERE, before mounting, and errors are
|
|
213
|
+
// fatal — shot times are narration-driven, so capturing without the
|
|
214
|
+
// manifest would silently shoot every frame at the wrong moment.
|
|
215
|
+
lines.push(``);
|
|
216
|
+
lines.push(`async function _mountCapture(rootEl: HTMLElement) {`);
|
|
217
|
+
if (input.hasNarration) {
|
|
218
|
+
lines.push(` const _manifestResponse = await fetch("./narration/manifest.json");`);
|
|
219
|
+
lines.push(` if (!_manifestResponse.ok) {`);
|
|
220
|
+
lines.push(` throw new Error(`);
|
|
221
|
+
lines.push(` "capture: failed to fetch ./narration/manifest.json (HTTP " +`);
|
|
222
|
+
lines.push(` _manifestResponse.status + ") — shot times are narration-driven, refusing to capture without it",`);
|
|
223
|
+
lines.push(` );`);
|
|
224
|
+
lines.push(` }`);
|
|
225
|
+
lines.push(` const _captureManifest = await _manifestResponse.json();`);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
lines.push(` const _captureManifest = undefined;`);
|
|
229
|
+
}
|
|
230
|
+
lines.push(` createRoot(rootEl).render(`);
|
|
231
|
+
lines.push(` <div className={_rootClass}>`);
|
|
232
|
+
lines.push(` <ScenarioCaptureMount`);
|
|
233
|
+
lines.push(` scenarioId={${JSON.stringify(input.scenarioId)}}`);
|
|
234
|
+
lines.push(` steps={_steps}`);
|
|
235
|
+
lines.push(` renderStep={renderStep}`);
|
|
236
|
+
lines.push(` canonicalWidth={${input.canonicalWidth}}`);
|
|
237
|
+
lines.push(` shellHeight={${input.shellHeight}}`);
|
|
238
|
+
lines.push(` narrationManifest={_captureManifest}`);
|
|
239
|
+
lines.push(` stage={${input.stage ? "true" : "false"}}`);
|
|
240
|
+
lines.push(` providers={${input.providersPath ? "_Providers" : "undefined"}}`);
|
|
241
|
+
lines.push(` onReady={(driver: any) => {`);
|
|
242
|
+
lines.push(` (window as any).__scenarShot = driver;`);
|
|
243
|
+
lines.push(` if (_shotParam) {`);
|
|
244
|
+
lines.push(` const _target = driver.shots.find((s: any) => s.name === _shotParam);`);
|
|
245
|
+
lines.push(` if (!_target) {`);
|
|
246
|
+
lines.push(` (window as any).__scenarShotError =`);
|
|
247
|
+
lines.push(` 'no shot named "' + _shotParam + '" — declared: ' +`);
|
|
248
|
+
lines.push(` (driver.shots.map((s: any) => s.name).join(", ") || "(none)");`);
|
|
249
|
+
lines.push(` return;`);
|
|
250
|
+
lines.push(` }`);
|
|
251
|
+
lines.push(` void driver.walkTo(_target.timeMs);`);
|
|
252
|
+
lines.push(` }`);
|
|
253
|
+
lines.push(` }}`);
|
|
254
|
+
lines.push(` onError={(error: any) => {`);
|
|
255
|
+
lines.push(` (window as any).__scenarShotError = error?.message ?? String(error);`);
|
|
256
|
+
lines.push(` }}`);
|
|
257
|
+
lines.push(` />`);
|
|
258
|
+
lines.push(` </div>,`);
|
|
259
|
+
lines.push(` );`);
|
|
260
|
+
lines.push(`}`);
|
|
186
261
|
// --- Mount ---
|
|
187
262
|
lines.push(``);
|
|
188
263
|
lines.push(`const _rootEl = document.getElementById("root");`);
|
|
189
264
|
lines.push(`if (!_rootEl) throw new Error("Embed root element #root not found");`);
|
|
190
|
-
lines.push(`
|
|
265
|
+
lines.push(`if (_shotParam !== null) {`);
|
|
266
|
+
lines.push(` _mountCapture(_rootEl).catch((error) => {`);
|
|
267
|
+
lines.push(` (window as any).__scenarShotError = error instanceof Error ? error.message : String(error);`);
|
|
268
|
+
lines.push(` });`);
|
|
269
|
+
lines.push(`} else {`);
|
|
270
|
+
lines.push(` createRoot(_rootEl).render(<_App />);`);
|
|
271
|
+
lines.push(`}`);
|
|
191
272
|
lines.push(``);
|
|
192
273
|
return lines.join("\n");
|
|
193
274
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-embed-entry.js","sourceRoot":"","sources":["../../../src/pack/generate-embed-entry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-embed-entry.js","sourceRoot":"","sources":["../../../src/pack/generate-embed-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,17 @@ export interface EmbedEntryInput {
|
|
|
50
50
|
* selector). The default is light, so existing embeds are unaffected; a host can
|
|
51
51
|
* theme-sync simply by framing `…/?theme=dark`.
|
|
52
52
|
*
|
|
53
|
+
* Capture (`?shot`): with a `shot` query param present, the entry mounts
|
|
54
|
+
* `ScenarioCaptureMount` instead of the playback tree — the TimeSource-driven
|
|
55
|
+
* catch-up mount behind `scenar shoot` (DD-02). The driver installs on
|
|
56
|
+
* `window.__scenarShot`; failures surface on `window.__scenarShotError`.
|
|
57
|
+
* `?shot=<name>` additionally auto-walks to that shot, so an author can
|
|
58
|
+
* eyeball any still in a plain browser. When the scenario has narration, the
|
|
59
|
+
* capture branch fetches the manifest itself and fails LOUDLY on error —
|
|
60
|
+
* step durations are narration-driven, so a silent fallback would capture
|
|
61
|
+
* every shot at the wrong time (which is why it must not reuse
|
|
62
|
+
* `useNarrationManifest`, whose fetch failure is silent by design).
|
|
63
|
+
*
|
|
53
64
|
* Pure function, no side effects — the caller writes the result to disk.
|
|
54
65
|
*/
|
|
55
66
|
export function generateEmbedEntry(input: EmbedEntryInput): string {
|
|
@@ -74,6 +85,7 @@ export function generateEmbedEntry(input: EmbedEntryInput): string {
|
|
|
74
85
|
"useStepInteractions",
|
|
75
86
|
"ViewportTransformLayer",
|
|
76
87
|
"VIEWPORT_TRANSFORM_IDENTITY",
|
|
88
|
+
"ScenarioCaptureMount",
|
|
77
89
|
];
|
|
78
90
|
if (input.stage) reactImports.push("ScenarioStage");
|
|
79
91
|
if (input.hasNarration) reactImports.push("useNarrationManifest");
|
|
@@ -127,6 +139,16 @@ export function generateEmbedEntry(input: EmbedEntryInput): string {
|
|
|
127
139
|
lines.push(`})();`);
|
|
128
140
|
lines.push(`const _rootClass = _theme === "dark" ? SCENAR_CLASS + " dark" : SCENAR_CLASS;`);
|
|
129
141
|
|
|
142
|
+
// --- Capture mode: ?shot (bare = driver only; ?shot=<name> = auto-walk) ---
|
|
143
|
+
// Read the same way as _theme: once, at module load, outside React. A null
|
|
144
|
+
// value (param absent) means normal playback; "" (bare ?shot) means capture
|
|
145
|
+
// mode without an auto-walk target.
|
|
146
|
+
lines.push(``);
|
|
147
|
+
lines.push(`const _shotParam = (() => {`);
|
|
148
|
+
lines.push(` try { return new URLSearchParams(window.location.search).get("shot"); }`);
|
|
149
|
+
lines.push(` catch { return null; }`);
|
|
150
|
+
lines.push(`})();`);
|
|
151
|
+
|
|
130
152
|
// --- Page canvas: transparent when framed, theme surface when top-level ---
|
|
131
153
|
// The static HTML keeps html/body transparent (see generateEmbedHtml): a
|
|
132
154
|
// framed embed's canvas then shows the *host page's* background through any
|
|
@@ -222,11 +244,71 @@ export function generateEmbedEntry(input: EmbedEntryInput): string {
|
|
|
222
244
|
lines.push(` );`);
|
|
223
245
|
lines.push(`}`);
|
|
224
246
|
|
|
247
|
+
// --- Capture mount (?shot) ---
|
|
248
|
+
// The whole capture tree lives in @scenar/react (ScenarioCaptureMount);
|
|
249
|
+
// this branch only feeds it the same inputs the playback tree gets and
|
|
250
|
+
// wires the window contract `scenar shoot` consumes: the driver on
|
|
251
|
+
// `window.__scenarShot`, failures on `window.__scenarShotError`. The
|
|
252
|
+
// narration manifest is fetched HERE, before mounting, and errors are
|
|
253
|
+
// fatal — shot times are narration-driven, so capturing without the
|
|
254
|
+
// manifest would silently shoot every frame at the wrong moment.
|
|
255
|
+
lines.push(``);
|
|
256
|
+
lines.push(`async function _mountCapture(rootEl: HTMLElement) {`);
|
|
257
|
+
if (input.hasNarration) {
|
|
258
|
+
lines.push(` const _manifestResponse = await fetch("./narration/manifest.json");`);
|
|
259
|
+
lines.push(` if (!_manifestResponse.ok) {`);
|
|
260
|
+
lines.push(` throw new Error(`);
|
|
261
|
+
lines.push(` "capture: failed to fetch ./narration/manifest.json (HTTP " +`);
|
|
262
|
+
lines.push(` _manifestResponse.status + ") — shot times are narration-driven, refusing to capture without it",`);
|
|
263
|
+
lines.push(` );`);
|
|
264
|
+
lines.push(` }`);
|
|
265
|
+
lines.push(` const _captureManifest = await _manifestResponse.json();`);
|
|
266
|
+
} else {
|
|
267
|
+
lines.push(` const _captureManifest = undefined;`);
|
|
268
|
+
}
|
|
269
|
+
lines.push(` createRoot(rootEl).render(`);
|
|
270
|
+
lines.push(` <div className={_rootClass}>`);
|
|
271
|
+
lines.push(` <ScenarioCaptureMount`);
|
|
272
|
+
lines.push(` scenarioId={${JSON.stringify(input.scenarioId)}}`);
|
|
273
|
+
lines.push(` steps={_steps}`);
|
|
274
|
+
lines.push(` renderStep={renderStep}`);
|
|
275
|
+
lines.push(` canonicalWidth={${input.canonicalWidth}}`);
|
|
276
|
+
lines.push(` shellHeight={${input.shellHeight}}`);
|
|
277
|
+
lines.push(` narrationManifest={_captureManifest}`);
|
|
278
|
+
lines.push(` stage={${input.stage ? "true" : "false"}}`);
|
|
279
|
+
lines.push(` providers={${input.providersPath ? "_Providers" : "undefined"}}`);
|
|
280
|
+
lines.push(` onReady={(driver: any) => {`);
|
|
281
|
+
lines.push(` (window as any).__scenarShot = driver;`);
|
|
282
|
+
lines.push(` if (_shotParam) {`);
|
|
283
|
+
lines.push(` const _target = driver.shots.find((s: any) => s.name === _shotParam);`);
|
|
284
|
+
lines.push(` if (!_target) {`);
|
|
285
|
+
lines.push(` (window as any).__scenarShotError =`);
|
|
286
|
+
lines.push(` 'no shot named "' + _shotParam + '" — declared: ' +`);
|
|
287
|
+
lines.push(` (driver.shots.map((s: any) => s.name).join(", ") || "(none)");`);
|
|
288
|
+
lines.push(` return;`);
|
|
289
|
+
lines.push(` }`);
|
|
290
|
+
lines.push(` void driver.walkTo(_target.timeMs);`);
|
|
291
|
+
lines.push(` }`);
|
|
292
|
+
lines.push(` }}`);
|
|
293
|
+
lines.push(` onError={(error: any) => {`);
|
|
294
|
+
lines.push(` (window as any).__scenarShotError = error?.message ?? String(error);`);
|
|
295
|
+
lines.push(` }}`);
|
|
296
|
+
lines.push(` />`);
|
|
297
|
+
lines.push(` </div>,`);
|
|
298
|
+
lines.push(` );`);
|
|
299
|
+
lines.push(`}`);
|
|
300
|
+
|
|
225
301
|
// --- Mount ---
|
|
226
302
|
lines.push(``);
|
|
227
303
|
lines.push(`const _rootEl = document.getElementById("root");`);
|
|
228
304
|
lines.push(`if (!_rootEl) throw new Error("Embed root element #root not found");`);
|
|
229
|
-
lines.push(`
|
|
305
|
+
lines.push(`if (_shotParam !== null) {`);
|
|
306
|
+
lines.push(` _mountCapture(_rootEl).catch((error) => {`);
|
|
307
|
+
lines.push(` (window as any).__scenarShotError = error instanceof Error ? error.message : String(error);`);
|
|
308
|
+
lines.push(` });`);
|
|
309
|
+
lines.push(`} else {`);
|
|
310
|
+
lines.push(` createRoot(_rootEl).render(<_App />);`);
|
|
311
|
+
lines.push(`}`);
|
|
230
312
|
lines.push(``);
|
|
231
313
|
|
|
232
314
|
return lines.join("\n");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ShotBrowser } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The real {@link ShotBrowser}: Playwright Chromium with the full spike
|
|
4
|
+
* determinism recipe. Playwright is an optional peer dependency (the
|
|
5
|
+
* remotion/echogarden pattern) — loaded lazily so every other command works
|
|
6
|
+
* without it, and failing with install instructions when absent.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createPlaywrightShotBrowser(): Promise<ShotBrowser>;
|
|
9
|
+
//# sourceMappingURL=playwright-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-browser.d.ts","sourceRoot":"","sources":["../../../src/shoot/playwright-browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAuB/D;;;;;GAKG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,WAAW,CAAC,CA2FxE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chromium launch flags for byte-deterministic rasterization — every one
|
|
3
|
+
* proven necessary by the 2026-07-28 determinism spike (without them,
|
|
4
|
+
* ±1-LSB full-frame compositing jitter across sessions):
|
|
5
|
+
*
|
|
6
|
+
* - `--disable-gpu`: software rasterization, no GPU-dependent output.
|
|
7
|
+
* - `--force-color-profile=srgb`: pins color conversion.
|
|
8
|
+
* - `--disable-lcd-text`: subpixel AA depends on the (virtual) display.
|
|
9
|
+
* - `--hide-scrollbars`: platform scrollbar chrome is not content.
|
|
10
|
+
*/
|
|
11
|
+
const DETERMINISM_LAUNCH_FLAGS = [
|
|
12
|
+
"--disable-gpu",
|
|
13
|
+
"--force-color-profile=srgb",
|
|
14
|
+
"--disable-lcd-text",
|
|
15
|
+
"--hide-scrollbars",
|
|
16
|
+
];
|
|
17
|
+
const PLAYWRIGHT_INSTALL_HINT = "Install it in your demos project: npm install -D playwright\n" +
|
|
18
|
+
"Then install the browser binary: npx playwright install chromium";
|
|
19
|
+
/**
|
|
20
|
+
* The real {@link ShotBrowser}: Playwright Chromium with the full spike
|
|
21
|
+
* determinism recipe. Playwright is an optional peer dependency (the
|
|
22
|
+
* remotion/echogarden pattern) — loaded lazily so every other command works
|
|
23
|
+
* without it, and failing with install instructions when absent.
|
|
24
|
+
*/
|
|
25
|
+
export async function createPlaywrightShotBrowser() {
|
|
26
|
+
const playwright = await import("playwright").catch(() => {
|
|
27
|
+
throw new Error(`Could not load playwright.\n${PLAYWRIGHT_INSTALL_HINT}`);
|
|
28
|
+
});
|
|
29
|
+
const browser = await playwright.chromium
|
|
30
|
+
.launch({ args: DETERMINISM_LAUNCH_FLAGS })
|
|
31
|
+
.catch((error) => {
|
|
32
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
33
|
+
throw new Error(`Could not launch Chromium.\n${message}\n\n${PLAYWRIGHT_INSTALL_HINT}`);
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
async newSession({ theme, viewport }) {
|
|
37
|
+
// `reducedMotion: "reduce"` is safe under a TimeSource: step index
|
|
38
|
+
// derives from time, not from the reduced-motion shortcut — and it
|
|
39
|
+
// keeps framer-motion from animating on wall-clock time.
|
|
40
|
+
// `colorScheme` emulation resolves the stage backdrop's light-dark()
|
|
41
|
+
// colors; the `?theme=` param handles the scenar token class — both
|
|
42
|
+
// halves are required for a correct dark variant (DD-02 D2).
|
|
43
|
+
const context = await browser.newContext({
|
|
44
|
+
viewport,
|
|
45
|
+
deviceScaleFactor: 2,
|
|
46
|
+
reducedMotion: "reduce",
|
|
47
|
+
colorScheme: theme,
|
|
48
|
+
});
|
|
49
|
+
const page = await context.newPage();
|
|
50
|
+
let frameSelector = "";
|
|
51
|
+
return {
|
|
52
|
+
async open(url, timeoutMs) {
|
|
53
|
+
await page.goto(url, { waitUntil: "networkidle" });
|
|
54
|
+
await page.waitForFunction(() => window.__scenarShot !== undefined ||
|
|
55
|
+
window.__scenarShotError !== undefined, undefined, { timeout: timeoutMs });
|
|
56
|
+
const result = await page.evaluate(() => {
|
|
57
|
+
const w = window;
|
|
58
|
+
if (w.__scenarShotError !== undefined) {
|
|
59
|
+
return { error: String(w.__scenarShotError), shots: [], frameSelector: "" };
|
|
60
|
+
}
|
|
61
|
+
const driver = w.__scenarShot;
|
|
62
|
+
return { error: null, shots: driver.shots, frameSelector: driver.frameSelector };
|
|
63
|
+
});
|
|
64
|
+
if (result.error !== null) {
|
|
65
|
+
throw new Error(`the capture page reported: ${result.error}`);
|
|
66
|
+
}
|
|
67
|
+
// Webfont rasterization differs from the fallback font — never
|
|
68
|
+
// shoot before every declared font face has loaded.
|
|
69
|
+
await page.evaluate(() => document.fonts.ready.then(() => undefined));
|
|
70
|
+
frameSelector = result.frameSelector;
|
|
71
|
+
return { shots: result.shots, frameSelector: result.frameSelector };
|
|
72
|
+
},
|
|
73
|
+
async walkTo(timeMs) {
|
|
74
|
+
await page.evaluate((ms) => window.__scenarShot.walkTo(ms), timeMs);
|
|
75
|
+
},
|
|
76
|
+
async screenshotFrame() {
|
|
77
|
+
// `animations: "disabled"` is load-bearing: the shells crossfade
|
|
78
|
+
// content on wall-clock CSS time, and this alone caused whole-pane
|
|
79
|
+
// noise in the spike until disabled at screenshot time.
|
|
80
|
+
return page.locator(frameSelector).screenshot({ animations: "disabled" });
|
|
81
|
+
},
|
|
82
|
+
async close() {
|
|
83
|
+
await context.close();
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
async close() {
|
|
88
|
+
await browser.close();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=playwright-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-browser.js","sourceRoot":"","sources":["../../../src/shoot/playwright-browser.ts"],"names":[],"mappings":"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"}
|