screenci 0.0.67 → 0.0.69
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 +1 -1
- package/dist/cli.d.ts +3 -18
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +105 -154
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +13 -13
- package/dist/docs/manifest.js +4 -4
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/studio.video.d.ts +2 -0
- package/dist/docs/video-sources/studio.video.d.ts.map +1 -0
- package/dist/docs/video-sources/studio.video.js +57 -0
- package/dist/docs/video-sources/studio.video.js.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.d.ts +2 -0
- package/dist/e2e/htmlRasterizer.e2e.d.ts.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.js +107 -0
- package/dist/e2e/htmlRasterizer.e2e.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +141 -53
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +533 -78
- package/dist/src/asset.js.map +1 -1
- package/dist/src/audio.d.ts +113 -0
- package/dist/src/audio.d.ts.map +1 -0
- package/dist/src/audio.js +204 -0
- package/dist/src/audio.js.map +1 -0
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +17 -3
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/defaults.d.ts +7 -1
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +9 -2
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +138 -6
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +80 -2
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +110 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -0
- package/dist/src/htmlRasterizer.js +364 -0
- package/dist/src/htmlRasterizer.js.map +1 -0
- package/dist/src/init.d.ts +17 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +127 -7
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +5 -3
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/linkSession.d.ts +36 -0
- package/dist/src/linkSession.d.ts.map +1 -0
- package/dist/src/linkSession.js +122 -0
- package/dist/src/linkSession.js.map +1 -0
- package/dist/src/mouse.d.ts +4 -0
- package/dist/src/mouse.d.ts.map +1 -1
- package/dist/src/mouse.js +31 -10
- package/dist/src/mouse.js.map +1 -1
- package/dist/src/performance.d.ts +41 -0
- package/dist/src/performance.d.ts.map +1 -0
- package/dist/src/performance.js +49 -0
- package/dist/src/performance.js.map +1 -0
- package/dist/src/recording.d.ts +1 -1
- package/dist/src/recording.d.ts.map +1 -1
- package/dist/src/recordingData.d.ts +2 -2
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/runtimeContext.d.ts +38 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +25 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +7 -0
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +10 -0
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/types.d.ts +40 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +34 -1
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +120 -19
- package/dist/src/video.js.map +1 -1
- package/dist/src/voices.d.ts +22 -9
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +6 -24
- package/dist/src/voices.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -2
- package/skills/screenci/SKILL.md +27 -5
- package/skills/screenci/references/init.md +2 -0
- package/skills/screenci/references/record.md +6 -1
package/dist/src/asset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { IEventRecorder } from './events.js';
|
|
2
|
+
/**
|
|
3
|
+
* Display/playback options for a background audio track.
|
|
4
|
+
*
|
|
5
|
+
* Background audio is mixed *under* the recording (and any narration). Unlike
|
|
6
|
+
* overlays it has no visual and never freezes a frame: it simply plays from the
|
|
7
|
+
* point it is started until it is ended (or until the end of the video).
|
|
8
|
+
*/
|
|
9
|
+
export type AudioConfig = {
|
|
10
|
+
/** File path: `.mp3`, `.wav`, `.m4a`, `.aac`, or an audio-only `.mp4`. */
|
|
11
|
+
path: string;
|
|
12
|
+
/**
|
|
13
|
+
* Linear gain. `1` (the default) plays the source at its natural level, `0`
|
|
14
|
+
* mutes it, and values above `1` boost it (e.g. `2` is twice as loud). Capped
|
|
15
|
+
* at {@link MAX_AUDIO_LEVEL}.
|
|
16
|
+
*/
|
|
17
|
+
volume?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Loop the source to fill the playback span. With `repeat: true` a short
|
|
20
|
+
* track repeats until the track is ended (or the video ends). Defaults to
|
|
21
|
+
* `false` (the source plays once and then falls silent).
|
|
22
|
+
*/
|
|
23
|
+
repeat?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A value accepted by {@link createAudio} for each key: a file path string or an
|
|
27
|
+
* {@link AudioConfig} object.
|
|
28
|
+
*/
|
|
29
|
+
export type AudioInput = string | AudioConfig;
|
|
30
|
+
/**
|
|
31
|
+
* A background audio controller.
|
|
32
|
+
*
|
|
33
|
+
* Calling it (`await music.theme()`) starts the track at the current point and
|
|
34
|
+
* lets it play for the rest of the video. Use `start()`/`end()` to bound the
|
|
35
|
+
* track to a specific span. Tracks are non-exclusive: starting one never stops
|
|
36
|
+
* another, so music and a sound effect can overlap.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // Background music for the whole video:
|
|
41
|
+
* await music.theme()
|
|
42
|
+
*
|
|
43
|
+
* // Bounded span:
|
|
44
|
+
* await music.sting.start()
|
|
45
|
+
* await page.click('#celebrate')
|
|
46
|
+
* await music.sting.end()
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export type AudioController = {
|
|
50
|
+
(): Promise<void>;
|
|
51
|
+
start(): Promise<void>;
|
|
52
|
+
end(): Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
/** Typed audio controllers keyed by the names passed to {@link createAudio}. */
|
|
55
|
+
export type AudioTracks<T extends Record<string, AudioInput>> = {
|
|
56
|
+
[K in keyof T]: AudioController;
|
|
57
|
+
};
|
|
58
|
+
export declare function setActiveAudioRecorder(recorder: IEventRecorder | null): void;
|
|
59
|
+
export declare function resetAudioChain(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a set of typed background audio controllers, one per key in the map.
|
|
62
|
+
* Each value is a file path string or an {@link AudioConfig} object.
|
|
63
|
+
*
|
|
64
|
+
* Background audio is mixed under the recording (and narration). Calling a
|
|
65
|
+
* controller starts the track at the current point and plays it for the rest of
|
|
66
|
+
* the video; `start()`/`end()` bound it to a span. Set `repeat: true` to loop a
|
|
67
|
+
* short track and `volume` to balance it against the recording.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const music = createAudio({
|
|
72
|
+
* theme: { path: 'bg.mp3', volume: 0.3, repeat: true },
|
|
73
|
+
* sting: 'celebrate.wav',
|
|
74
|
+
* })
|
|
75
|
+
*
|
|
76
|
+
* video('Product demo', async ({ page }) => {
|
|
77
|
+
* await music.theme() // plays under the whole video, looping
|
|
78
|
+
* await page.goto('/dashboard')
|
|
79
|
+
* await music.sting.start()
|
|
80
|
+
* await page.click('#celebrate')
|
|
81
|
+
* await music.sting.end()
|
|
82
|
+
* })
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function createAudio<const T extends Record<string, AudioInput>>(tracks: T): AudioTracks<T>;
|
|
86
|
+
/**
|
|
87
|
+
* Creates typed background audio controllers whose files, volume, and repeat are
|
|
88
|
+
* configured on the ScreenCI Studio page instead of in code. Business tier only.
|
|
89
|
+
*
|
|
90
|
+
* Each key becomes a callable controller with the same timeline behavior as
|
|
91
|
+
* {@link createAudio} controllers, including `start()`/`end()`. The audio file,
|
|
92
|
+
* volume, and repeat all come from Studio (mirrors {@link createStudioOverlays}
|
|
93
|
+
* for overlays).
|
|
94
|
+
*
|
|
95
|
+
* On the first upload of a studio-mode video, rendering is held until the video
|
|
96
|
+
* is configured in Studio (the CLI prints a direct link). Later uploads reuse
|
|
97
|
+
* the saved Studio configuration automatically.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const music = createStudioAudio('theme', 'sting')
|
|
102
|
+
*
|
|
103
|
+
* video('Product demo', async ({ page }) => {
|
|
104
|
+
* await music.theme() // plays under the whole video
|
|
105
|
+
* await page.goto('/dashboard')
|
|
106
|
+
* await music.sting.start()
|
|
107
|
+
* await page.click('#celebrate')
|
|
108
|
+
* await music.sting.end()
|
|
109
|
+
* })
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export declare function createStudioAudio<const K extends readonly [string, ...string[]]>(...keys: K): Record<K[number], AudioController>;
|
|
113
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAA;AAcpE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAA;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB,CAAA;AAED,gFAAgF;AAChF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI;KAC7D,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe;CAChC,CAAA;AAID,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAG5E;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0DD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACpE,MAAM,EAAE,CAAC,GACR,WAAW,CAAC,CAAC,CAAC,CAMhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAC9C,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAgBhD"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
import { dirname, resolve } from 'path';
|
|
4
|
+
import { isInsideHide } from './hide.js';
|
|
5
|
+
import { MAX_AUDIO_LEVEL } from './asset.js';
|
|
6
|
+
import { getScreenCIRuntimeContext, getRuntimeAudioRecorder, setRuntimeAudioRecorder, resetAudioRuntimeState, } from './runtimeContext.js';
|
|
7
|
+
const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.m4a', '.aac', '.mp4'];
|
|
8
|
+
export function setActiveAudioRecorder(recorder) {
|
|
9
|
+
setRuntimeAudioRecorder(recorder);
|
|
10
|
+
resetAudioRuntimeState();
|
|
11
|
+
}
|
|
12
|
+
export function resetAudioChain() {
|
|
13
|
+
resetAudioRuntimeState();
|
|
14
|
+
}
|
|
15
|
+
function hasAudioExtension(path) {
|
|
16
|
+
const dotIndex = path.lastIndexOf('.');
|
|
17
|
+
if (dotIndex === -1)
|
|
18
|
+
return false;
|
|
19
|
+
const extension = path.slice(dotIndex).toLowerCase();
|
|
20
|
+
return AUDIO_EXTENSIONS.includes(extension);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves an audio file path (as-is or relative to the test file) and returns
|
|
24
|
+
* its absolute path plus a SHA-256 hash for upload/caching. Throws when the file
|
|
25
|
+
* does not exist.
|
|
26
|
+
*/
|
|
27
|
+
async function resolveAudioFile(name, path, testFilePath) {
|
|
28
|
+
const candidates = [path];
|
|
29
|
+
if (testFilePath !== null) {
|
|
30
|
+
candidates.push(resolve(dirname(testFilePath), path));
|
|
31
|
+
}
|
|
32
|
+
for (const candidate of candidates) {
|
|
33
|
+
try {
|
|
34
|
+
const fileBuffer = await readFile(candidate);
|
|
35
|
+
return {
|
|
36
|
+
path,
|
|
37
|
+
fileHash: createHash('sha256').update(fileBuffer).digest('hex'),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// try next candidate
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`[screenci] Audio file not found for "${name}": ${path}`);
|
|
45
|
+
}
|
|
46
|
+
function normalizeAudioConfig(name, input) {
|
|
47
|
+
const config = typeof input === 'string' ? { path: input } : input;
|
|
48
|
+
if (!hasAudioExtension(config.path)) {
|
|
49
|
+
throw new Error(`[screenci] Audio "${name}" must use one of: ${AUDIO_EXTENSIONS.join(', ')}. Received: ${config.path}`);
|
|
50
|
+
}
|
|
51
|
+
if (config.volume !== undefined &&
|
|
52
|
+
(!Number.isFinite(config.volume) ||
|
|
53
|
+
config.volume < 0 ||
|
|
54
|
+
config.volume > MAX_AUDIO_LEVEL)) {
|
|
55
|
+
throw new Error(`[screenci] Audio "${name}" (${config.path}) must provide a finite volume between 0 and ${MAX_AUDIO_LEVEL}. 1 is the natural level, 0 is silent, and values above 1 boost it.`);
|
|
56
|
+
}
|
|
57
|
+
return config;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates a set of typed background audio controllers, one per key in the map.
|
|
61
|
+
* Each value is a file path string or an {@link AudioConfig} object.
|
|
62
|
+
*
|
|
63
|
+
* Background audio is mixed under the recording (and narration). Calling a
|
|
64
|
+
* controller starts the track at the current point and plays it for the rest of
|
|
65
|
+
* the video; `start()`/`end()` bound it to a span. Set `repeat: true` to loop a
|
|
66
|
+
* short track and `volume` to balance it against the recording.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const music = createAudio({
|
|
71
|
+
* theme: { path: 'bg.mp3', volume: 0.3, repeat: true },
|
|
72
|
+
* sting: 'celebrate.wav',
|
|
73
|
+
* })
|
|
74
|
+
*
|
|
75
|
+
* video('Product demo', async ({ page }) => {
|
|
76
|
+
* await music.theme() // plays under the whole video, looping
|
|
77
|
+
* await page.goto('/dashboard')
|
|
78
|
+
* await music.sting.start()
|
|
79
|
+
* await page.click('#celebrate')
|
|
80
|
+
* await music.sting.end()
|
|
81
|
+
* })
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function createAudio(tracks) {
|
|
85
|
+
const result = {};
|
|
86
|
+
for (const name in tracks) {
|
|
87
|
+
result[name] = buildAudioController(name, tracks[name]);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates typed background audio controllers whose files, volume, and repeat are
|
|
93
|
+
* configured on the ScreenCI Studio page instead of in code. Business tier only.
|
|
94
|
+
*
|
|
95
|
+
* Each key becomes a callable controller with the same timeline behavior as
|
|
96
|
+
* {@link createAudio} controllers, including `start()`/`end()`. The audio file,
|
|
97
|
+
* volume, and repeat all come from Studio (mirrors {@link createStudioOverlays}
|
|
98
|
+
* for overlays).
|
|
99
|
+
*
|
|
100
|
+
* On the first upload of a studio-mode video, rendering is held until the video
|
|
101
|
+
* is configured in Studio (the CLI prints a direct link). Later uploads reuse
|
|
102
|
+
* the saved Studio configuration automatically.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* const music = createStudioAudio('theme', 'sting')
|
|
107
|
+
*
|
|
108
|
+
* video('Product demo', async ({ page }) => {
|
|
109
|
+
* await music.theme() // plays under the whole video
|
|
110
|
+
* await page.goto('/dashboard')
|
|
111
|
+
* await music.sting.start()
|
|
112
|
+
* await page.click('#celebrate')
|
|
113
|
+
* await music.sting.end()
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export function createStudioAudio(...keys) {
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
for (const key of keys) {
|
|
120
|
+
if (seen.has(key)) {
|
|
121
|
+
throw new Error(`Duplicate audio key "${key}" passed to createStudioAudio. Audio keys must be unique.`);
|
|
122
|
+
}
|
|
123
|
+
seen.add(key);
|
|
124
|
+
}
|
|
125
|
+
const result = {};
|
|
126
|
+
for (const key of keys) {
|
|
127
|
+
result[key] = buildStudioAudioController(key);
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Builds the callable/`start()`/`end()` audio controller shared by code-defined
|
|
133
|
+
* ({@link createAudio}) and Studio ({@link createStudioAudio}) tracks. The only
|
|
134
|
+
* difference is how `emitStart` records the start event.
|
|
135
|
+
*/
|
|
136
|
+
function createAudioControllerCore(name, emitStart) {
|
|
137
|
+
// start()/end() register a live run so end() can pair to its start and a
|
|
138
|
+
// double start() is rejected.
|
|
139
|
+
const start = async () => {
|
|
140
|
+
if (isInsideHide()) {
|
|
141
|
+
throw new Error('[screenci] Cannot start audio inside hide()');
|
|
142
|
+
}
|
|
143
|
+
const context = getScreenCIRuntimeContext();
|
|
144
|
+
if (context.audio.activeRuns.has(name)) {
|
|
145
|
+
throw new Error(`[screenci] Audio "${name}" is already started. Call end() for it before starting it again.`);
|
|
146
|
+
}
|
|
147
|
+
let resolveFinished;
|
|
148
|
+
const finished = new Promise((res) => {
|
|
149
|
+
resolveFinished = res;
|
|
150
|
+
});
|
|
151
|
+
const run = { finished, resolveFinished };
|
|
152
|
+
context.audio.activeRuns.set(name, run);
|
|
153
|
+
await emitStart(getRuntimeAudioRecorder());
|
|
154
|
+
};
|
|
155
|
+
const end = async () => {
|
|
156
|
+
if (isInsideHide()) {
|
|
157
|
+
throw new Error('[screenci] Cannot call end() for audio inside hide()');
|
|
158
|
+
}
|
|
159
|
+
const context = getScreenCIRuntimeContext();
|
|
160
|
+
const run = context.audio.activeRuns.get(name);
|
|
161
|
+
if (run === undefined) {
|
|
162
|
+
throw new Error(`Cannot call end() for audio "${name}" because it is not a started track`);
|
|
163
|
+
}
|
|
164
|
+
getRuntimeAudioRecorder().addAudioEnd(name, 'wait');
|
|
165
|
+
context.audio.activeRuns.delete(name);
|
|
166
|
+
run.resolveFinished();
|
|
167
|
+
await run.finished;
|
|
168
|
+
};
|
|
169
|
+
// Bare call: play from here to the end of the video (no end recorded). It is
|
|
170
|
+
// fire-and-forget, so it never registers a live run.
|
|
171
|
+
const controller = (async () => {
|
|
172
|
+
if (isInsideHide()) {
|
|
173
|
+
throw new Error('[screenci] Cannot start audio inside hide()');
|
|
174
|
+
}
|
|
175
|
+
await emitStart(getRuntimeAudioRecorder());
|
|
176
|
+
});
|
|
177
|
+
controller.start = start;
|
|
178
|
+
controller.end = end;
|
|
179
|
+
return controller;
|
|
180
|
+
}
|
|
181
|
+
function buildAudioController(name, input) {
|
|
182
|
+
const config = normalizeAudioConfig(name, input);
|
|
183
|
+
const buildPayload = async () => {
|
|
184
|
+
const testFilePath = getScreenCIRuntimeContext().testFilePath;
|
|
185
|
+
const resolved = await resolveAudioFile(name, config.path, testFilePath);
|
|
186
|
+
return {
|
|
187
|
+
path: resolved.path,
|
|
188
|
+
fileHash: resolved.fileHash,
|
|
189
|
+
volume: config.volume ?? 1,
|
|
190
|
+
repeat: config.repeat ?? false,
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
return createAudioControllerCore(name, async (recorder) => {
|
|
194
|
+
const payload = await buildPayload();
|
|
195
|
+
recorder.addAudioStart(name, payload);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function buildStudioAudioController(name) {
|
|
199
|
+
return createAudioControllerCore(name, (recorder) => {
|
|
200
|
+
recorder.addStudioAudioStart(name);
|
|
201
|
+
return Promise.resolve();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAMhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"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"}
|
package/dist/src/changeFocus.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { evaluateEasingAtT } from './easing.js';
|
|
2
2
|
import { DEFAULT_CLICK_MOUSE_MOVE_DURATION, DEFAULT_ZOOM_OPTIONS, } from './defaults.js';
|
|
3
|
-
import { getMousePosition, performMouseMove, resolveMouseMoveDuration, } from './mouse.js';
|
|
3
|
+
import { getMousePosition, getScrollDispatchIntervalMs, performMouseMove, resolveMouseMoveDuration, } from './mouse.js';
|
|
4
4
|
import { getAutoZoomState, setCurrentZoomViewport } from './autoZoom.js';
|
|
5
5
|
import { logger } from './logger.js';
|
|
6
6
|
import { buildZoomEvent, resolveAutoZoomOptions, resolveZoomTarget, } from './zoom.js';
|
|
7
|
-
import { resolveRecordingTimingDuration } from './runtimeMode.js';
|
|
7
|
+
import { isTimingDebugEnabled, resolveRecordingTimingDuration, } from './runtimeMode.js';
|
|
8
8
|
const POSITION_EPSILON_PX = 0.5;
|
|
9
9
|
const CURSOR_TRIGGER_EDGE_THRESHOLD = 0.3;
|
|
10
10
|
const CURSOR_TRIGGER_MAX_PROGRESS = 0.6;
|
|
@@ -634,7 +634,7 @@ async function executeScrollAndZoomPlan(params) {
|
|
|
634
634
|
// stretch a ~1s scroll into several seconds. Progress is time-based: a
|
|
635
635
|
// laggy machine renders fewer frames and a fast one renders the full set,
|
|
636
636
|
// and either way the scroll finishes in ~duration.
|
|
637
|
-
const frameMs =
|
|
637
|
+
const frameMs = getScrollDispatchIntervalMs(locator.page());
|
|
638
638
|
const animStart = Date.now();
|
|
639
639
|
const applyScrollAtProgress = (easedT) => locator.evaluate((element, args) => {
|
|
640
640
|
const doc = element.ownerDocument;
|
|
@@ -705,14 +705,19 @@ async function executeScrollAndZoomPlan(params) {
|
|
|
705
705
|
easedT,
|
|
706
706
|
positionEpsilonPx: POSITION_EPSILON_PX,
|
|
707
707
|
});
|
|
708
|
+
let frames = 0;
|
|
708
709
|
for (;;) {
|
|
709
710
|
const elapsed = Date.now() - animStart;
|
|
710
711
|
const t = duration > 0 ? Math.min(1, elapsed / duration) : 1;
|
|
711
712
|
await applyScrollAtProgress(evaluateEasingAtT(t, easing));
|
|
713
|
+
frames += 1;
|
|
712
714
|
if (t >= 1)
|
|
713
715
|
break;
|
|
714
716
|
await new Promise((resolve) => setTimeout(resolve, frameMs));
|
|
715
717
|
}
|
|
718
|
+
if (isTimingDebugEnabled()) {
|
|
719
|
+
logger.info(`[screenci:timing] scroll=${Date.now() - animStart}ms (planned ~${Math.round(duration)}ms) frames=${frames}`);
|
|
720
|
+
}
|
|
716
721
|
}
|
|
717
722
|
else if (zoomed && duration > 0) {
|
|
718
723
|
await sleep(duration);
|
|
@@ -802,7 +807,9 @@ export async function changeFocus(locator, options = {}, mouseMove, allowStandal
|
|
|
802
807
|
const state = getAutoZoomState();
|
|
803
808
|
const shouldApplyZoom = state.insideAutoZoom || allowStandaloneZoom;
|
|
804
809
|
const shouldSuppressAutoScroll = state.mode === 'manual' && !state.insideAutoZoom && !allowStandaloneZoom;
|
|
810
|
+
const snapshotStartMs = Date.now();
|
|
805
811
|
const snapshot = await captureFocusSnapshot(locator);
|
|
812
|
+
const snapshotMs = Date.now() - snapshotStartMs;
|
|
806
813
|
if (shouldApplyZoom &&
|
|
807
814
|
(snapshot.locatorRect.width > snapshot.viewportSize.width ||
|
|
808
815
|
snapshot.locatorRect.height > snapshot.viewportSize.height)) {
|
|
@@ -929,6 +936,7 @@ export async function changeFocus(locator, options = {}, mouseMove, allowStandal
|
|
|
929
936
|
mousePromise,
|
|
930
937
|
scrollAndZoomPromise,
|
|
931
938
|
]);
|
|
939
|
+
const animationMs = Date.now() - focusChangeStartMs;
|
|
932
940
|
const zoomTarget = shouldApplyZoom
|
|
933
941
|
? resolveZoomTarget({
|
|
934
942
|
locatorRect: plan.finalLocatorRect,
|
|
@@ -957,6 +965,12 @@ export async function changeFocus(locator, options = {}, mouseMove, allowStandal
|
|
|
957
965
|
await sleep(focusOptions.postZoomDelay);
|
|
958
966
|
}
|
|
959
967
|
const focusChangeEndMs = Date.now();
|
|
968
|
+
if (isTimingDebugEnabled()) {
|
|
969
|
+
logger.info(`[screenci:timing] changeFocus total=${focusChangeEndMs - snapshotStartMs}ms ` +
|
|
970
|
+
`snapshot=${snapshotMs}ms ` +
|
|
971
|
+
`animation=${animationMs}ms (planned ~${Math.round(timing.duration)}ms) ` +
|
|
972
|
+
`postZoom=${focusOptions.postZoomDelay}ms`);
|
|
973
|
+
}
|
|
960
974
|
const focusChange = {
|
|
961
975
|
type: 'focusChange',
|
|
962
976
|
startMs: focusChangeStartMs,
|