screenci 0.0.74 → 0.0.76

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.
Files changed (127) hide show
  1. package/dist/cli.d.ts +11 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +150 -37
  4. package/dist/cli.js.map +1 -1
  5. package/dist/docs/manifest.d.ts +42 -11
  6. package/dist/docs/manifest.d.ts.map +1 -1
  7. package/dist/docs/manifest.js +14 -3
  8. package/dist/docs/manifest.js.map +1 -1
  9. package/dist/docs/video-sources/installation.screenci.js +7 -9
  10. package/dist/docs/video-sources/installation.screenci.js.map +1 -1
  11. package/dist/docs/video-sources/landing.screenci.js +6 -8
  12. package/dist/docs/video-sources/landing.screenci.js.map +1 -1
  13. package/dist/docs/video-sources/locator-highlight-animated.screenci.js +3 -4
  14. package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
  15. package/dist/docs/video-sources/locator-highlight-still.screenci.js +3 -4
  16. package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
  17. package/dist/docs/video-sources/studio.screenci.js +8 -10
  18. package/dist/docs/video-sources/studio.screenci.js.map +1 -1
  19. package/dist/e2e/instrument.e2e.js +52 -1
  20. package/dist/e2e/instrument.e2e.js.map +1 -1
  21. package/dist/index.d.ts +4 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/src/asset.d.ts +20 -1
  26. package/dist/src/asset.d.ts.map +1 -1
  27. package/dist/src/asset.js +58 -7
  28. package/dist/src/asset.js.map +1 -1
  29. package/dist/src/audio.d.ts +16 -0
  30. package/dist/src/audio.d.ts.map +1 -1
  31. package/dist/src/audio.js +78 -1
  32. package/dist/src/audio.js.map +1 -1
  33. package/dist/src/autoZoom.d.ts.map +1 -1
  34. package/dist/src/autoZoom.js +3 -1
  35. package/dist/src/autoZoom.js.map +1 -1
  36. package/dist/src/browserLaunchOptions.d.ts +24 -2
  37. package/dist/src/browserLaunchOptions.d.ts.map +1 -1
  38. package/dist/src/browserLaunchOptions.js +57 -3
  39. package/dist/src/browserLaunchOptions.js.map +1 -1
  40. package/dist/src/builder.d.ts +135 -142
  41. package/dist/src/builder.d.ts.map +1 -1
  42. package/dist/src/builder.js +218 -77
  43. package/dist/src/builder.js.map +1 -1
  44. package/dist/src/callerFile.d.ts +12 -0
  45. package/dist/src/callerFile.d.ts.map +1 -0
  46. package/dist/src/callerFile.js +46 -0
  47. package/dist/src/callerFile.js.map +1 -0
  48. package/dist/src/changeFocus.d.ts.map +1 -1
  49. package/dist/src/changeFocus.js +6 -2
  50. package/dist/src/changeFocus.js.map +1 -1
  51. package/dist/src/config.d.ts.map +1 -1
  52. package/dist/src/config.js +15 -0
  53. package/dist/src/config.js.map +1 -1
  54. package/dist/src/declare.d.ts +59 -0
  55. package/dist/src/declare.d.ts.map +1 -0
  56. package/dist/src/declare.js +93 -0
  57. package/dist/src/declare.js.map +1 -0
  58. package/dist/src/defaults.d.ts.map +1 -1
  59. package/dist/src/defaults.js +4 -3
  60. package/dist/src/defaults.js.map +1 -1
  61. package/dist/src/events.d.ts +51 -1
  62. package/dist/src/events.d.ts.map +1 -1
  63. package/dist/src/events.js +107 -15
  64. package/dist/src/events.js.map +1 -1
  65. package/dist/src/init.d.ts.map +1 -1
  66. package/dist/src/init.js +32 -30
  67. package/dist/src/init.js.map +1 -1
  68. package/dist/src/instrument.d.ts.map +1 -1
  69. package/dist/src/instrument.js +139 -1
  70. package/dist/src/instrument.js.map +1 -1
  71. package/dist/src/localize.d.ts +1 -0
  72. package/dist/src/localize.d.ts.map +1 -1
  73. package/dist/src/localize.js +1 -1
  74. package/dist/src/localize.js.map +1 -1
  75. package/dist/src/localizeRuntime.d.ts +17 -26
  76. package/dist/src/localizeRuntime.d.ts.map +1 -1
  77. package/dist/src/localizeRuntime.js +63 -48
  78. package/dist/src/localizeRuntime.js.map +1 -1
  79. package/dist/src/manualZoom.d.ts.map +1 -1
  80. package/dist/src/manualZoom.js +8 -5
  81. package/dist/src/manualZoom.js.map +1 -1
  82. package/dist/src/openBrowser.d.ts +34 -0
  83. package/dist/src/openBrowser.d.ts.map +1 -0
  84. package/dist/src/openBrowser.js +62 -0
  85. package/dist/src/openBrowser.js.map +1 -0
  86. package/dist/src/recordingData.d.ts +20 -0
  87. package/dist/src/recordingData.d.ts.map +1 -1
  88. package/dist/src/screenAudio.d.ts +58 -0
  89. package/dist/src/screenAudio.d.ts.map +1 -0
  90. package/dist/src/screenAudio.js +145 -0
  91. package/dist/src/screenAudio.js.map +1 -0
  92. package/dist/src/screenAudioSink.d.ts +34 -0
  93. package/dist/src/screenAudioSink.d.ts.map +1 -0
  94. package/dist/src/screenAudioSink.js +47 -0
  95. package/dist/src/screenAudioSink.js.map +1 -0
  96. package/dist/src/screenshot.d.ts +20 -24
  97. package/dist/src/screenshot.d.ts.map +1 -1
  98. package/dist/src/screenshot.js +34 -19
  99. package/dist/src/screenshot.js.map +1 -1
  100. package/dist/src/stillCapture.d.ts +5 -0
  101. package/dist/src/stillCapture.d.ts.map +1 -1
  102. package/dist/src/stillCapture.js +11 -1
  103. package/dist/src/stillCapture.js.map +1 -1
  104. package/dist/src/studio.d.ts +3 -59
  105. package/dist/src/studio.d.ts.map +1 -1
  106. package/dist/src/studio.js +1 -41
  107. package/dist/src/studio.js.map +1 -1
  108. package/dist/src/types.d.ts +133 -2
  109. package/dist/src/types.d.ts.map +1 -1
  110. package/dist/src/types.js.map +1 -1
  111. package/dist/src/video.d.ts +63 -52
  112. package/dist/src/video.d.ts.map +1 -1
  113. package/dist/src/video.js +143 -32
  114. package/dist/src/video.js.map +1 -1
  115. package/dist/src/zoom.d.ts +1 -0
  116. package/dist/src/zoom.d.ts.map +1 -1
  117. package/dist/src/zoom.js +3 -0
  118. package/dist/src/zoom.js.map +1 -1
  119. package/dist/tsconfig.tsbuildinfo +1 -1
  120. package/package.json +1 -1
  121. package/skills/screenci/SKILL.md +2 -2
  122. package/skills/screenci/references/init.md +4 -3
  123. package/skills/screenci/references/record.md +1 -1
  124. package/dist/docs/video-sources/public-urls.screenci.d.ts +0 -2
  125. package/dist/docs/video-sources/public-urls.screenci.d.ts.map +0 -1
  126. package/dist/docs/video-sources/public-urls.screenci.js +0 -41
  127. package/dist/docs/video-sources/public-urls.screenci.js.map +0 -1
@@ -2,77 +2,193 @@ import { fileURLToPath } from 'node:url';
2
2
  import { resolveLocaleForLanguage } from './locales.js';
3
3
  import { parseRequestedLanguages } from './runtimeMode.js';
4
4
  import { logger } from './logger.js';
5
- import { normalizeLocalizeSpec, } from './localize.js';
6
- import { validateStudioDeclaration } from './studio.js';
5
+ import { normalizeFeature, } from './declare.js';
6
+ function normalizeLanguagesArg(arg) {
7
+ if (arg === 'studio')
8
+ return { languages: 'studio' };
9
+ if (Array.isArray(arg))
10
+ return { languages: arg };
11
+ return arg;
12
+ }
7
13
  function variantVideoName(baseTitle, variant) {
8
14
  return variant === null ? baseTitle : `${baseTitle} ${variant.key}`;
9
15
  }
16
+ /** Languages contributed by the per-feature declarations (union of `byLang`). */
17
+ function featureLanguages(state) {
18
+ const set = new Set();
19
+ for (const feature of [
20
+ state.narration,
21
+ state.text,
22
+ state.overlays,
23
+ state.audio,
24
+ ]) {
25
+ for (const lang of feature?.languages ?? [])
26
+ set.add(lang);
27
+ }
28
+ return [...set];
29
+ }
30
+ /**
31
+ * Resolve the recorded language set at registration time. Priority:
32
+ * 1. `video.languages('studio')` -> the web-owned set, injected via the
33
+ * `--languages` channel (`requestedLanguages`); empty => pending.
34
+ * 2. explicit `video.languages([...])`.
35
+ * 3. union of per-feature language keys (e.g. `narration({ fr })` -> French).
36
+ * 4. default `['en']`.
37
+ * The `requestedLanguages` filter (CLI / studio injection) intersects 2-4.
38
+ */
39
+ export function resolveRecordingLocalize(state, requestedLanguages) {
40
+ const rl = state.recordingLocalize;
41
+ const mode = rl?.mode ?? 'per-language';
42
+ const browserLocale = rl?.browserLocale ?? true;
43
+ const localesPatch = rl?.locales !== undefined ? { locales: rl.locales } : {};
44
+ if (rl?.languages === 'studio') {
45
+ const languages = requestedLanguages ?? [];
46
+ return {
47
+ languages,
48
+ mode,
49
+ browserLocale,
50
+ ...localesPatch,
51
+ studioOwned: true,
52
+ pending: languages.length === 0,
53
+ explicit: true,
54
+ };
55
+ }
56
+ let declared;
57
+ let explicit;
58
+ if (rl !== null && rl !== undefined && Array.isArray(rl.languages)) {
59
+ declared = [...rl.languages];
60
+ explicit = true;
61
+ }
62
+ else {
63
+ const inferred = featureLanguages(state);
64
+ if (inferred.length > 0) {
65
+ declared = inferred;
66
+ explicit = true;
67
+ }
68
+ else {
69
+ declared = ['en'];
70
+ explicit = false;
71
+ }
72
+ }
73
+ const languages = requestedLanguages === null
74
+ ? declared
75
+ : declared.filter((lang) => requestedLanguages.includes(lang));
76
+ return {
77
+ languages,
78
+ mode,
79
+ browserLocale,
80
+ ...localesPatch,
81
+ studioOwned: false,
82
+ pending: false,
83
+ explicit,
84
+ };
85
+ }
86
+ /**
87
+ * Warn about per-feature values declared for a language outside the recorded set
88
+ * (e.g. `narration({ fr })` while the set is `[fi]`): the value is ignored.
89
+ */
90
+ function warnUnusedLanguages(state, resolved) {
91
+ const active = new Set(resolved.languages);
92
+ const source = resolved.studioOwned ? 'web' : 'video.languages()';
93
+ const langList = resolved.languages.join(', ') || '(none)';
94
+ const features = [
95
+ ['Narration', state.narration],
96
+ ['Text', state.text],
97
+ ['Overlay', state.overlays],
98
+ ['Audio', state.audio],
99
+ ];
100
+ for (const [label, feature] of features) {
101
+ if (feature === null)
102
+ continue;
103
+ for (const [lang, entries] of Object.entries(feature.byLang)) {
104
+ if (active.has(lang) || entries === undefined)
105
+ continue;
106
+ for (const name of Object.keys(entries)) {
107
+ logger.warn(`[screenci] ${label} ${name} (${lang}) is not used at all currently, ` +
108
+ `reason: only languages [${langList}] defined in ${source}. ` +
109
+ `See https://screenci.com/docs/localization`);
110
+ }
111
+ }
112
+ }
113
+ }
10
114
  /**
11
- * Expand the localize / each fan-out specs into the concrete list of Playwright
12
- * tests to register. Pure and exported for testing.
115
+ * Expand the fan-out specs into the concrete list of Playwright tests to
116
+ * register. Pure and exported for testing.
13
117
  *
14
- * - With no `localize`, each variant yields a single language-agnostic test.
15
- * - In `'shared'` mode, each variant yields one test that carries every language
16
- * (narration is overdubbed at render); the `--languages` filter does not split
17
- * a shared recording.
18
- * - In `'per-language'` mode, each variant yields one test per language,
19
- * intersected with the `--languages` filter when present. A variant whose
20
- * languages are entirely filtered out yields nothing. The browser locale is set
21
- * per language unless `browserLocale` is `false`.
118
+ * - A single resolved language (default, or one inferred/declared) yields one
119
+ * language-agnostic test (`language: null`).
120
+ * - `'shared'` mode yields one test carrying every language (overdubbed at
121
+ * render); the `--languages` filter does not split a shared recording.
122
+ * - `'per-language'` mode yields one test per resolved language.
123
+ * - A studio-owned set with nothing selected yet yields one pending test that
124
+ * records (so its schema reaches the backend) but renders nothing.
22
125
  */
23
126
  export function expandRegistrations(params) {
24
- const { baseTitle, localize, studio, eachVariants, requestedLanguages } = params;
25
- const variants = eachVariants ?? [null];
127
+ const { baseTitle, state } = params;
128
+ const variants = state.eachVariants ?? [null];
26
129
  const registrations = [];
27
130
  for (const variant of variants) {
28
131
  const videoName = variantVideoName(baseTitle, variant);
29
132
  const recordOptions = variant?.recordOptions ?? null;
30
133
  const use = variant?.use ?? null;
31
134
  const variantLabel = variant === null ? '' : `${variant.key} `;
32
- if (localize === null) {
33
- registrations.push({
34
- describeTitle: variant?.key ?? baseTitle,
35
- leafTitle: videoName,
36
- videoName,
37
- language: null,
38
- locale: null,
39
- recordOptions,
40
- use,
41
- localize: null,
42
- studio,
43
- });
135
+ const resolved = resolveRecordingLocalize(state, params.requestedLanguages);
136
+ warnUnusedLanguages(state, resolved);
137
+ // Explicitly-declared languages all filtered out (`--languages`) and not a
138
+ // pending studio set: register nothing for this variant.
139
+ if (resolved.explicit &&
140
+ !resolved.studioOwned &&
141
+ resolved.languages.length === 0) {
44
142
  continue;
45
143
  }
46
- if (localize.mode === 'shared') {
144
+ const base = {
145
+ videoName,
146
+ recordOptions,
147
+ use,
148
+ narration: state.narration,
149
+ text: state.text,
150
+ overlays: state.overlays,
151
+ audio: state.audio,
152
+ recordingLocalize: resolved,
153
+ };
154
+ // Pending studio set, shared mode, or a single language-agnostic pass: one
155
+ // registration that carries every (or no) language without splitting.
156
+ const singlePass = resolved.pending ||
157
+ resolved.mode === 'shared' ||
158
+ resolved.languages.length <= 1;
159
+ if (singlePass) {
160
+ // A single explicitly-declared language is tagged `[lang]`; the implicit
161
+ // `['en']` default (a plain video) stays language-agnostic.
162
+ const onlyLang = resolved.explicit &&
163
+ resolved.mode === 'per-language' &&
164
+ resolved.languages.length === 1
165
+ ? resolved.languages[0]
166
+ : null;
167
+ const describeTitle = onlyLang
168
+ ? `${variantLabel}${onlyLang}`.trim()
169
+ : resolved.mode === 'shared' || resolved.pending
170
+ ? `${variantLabel}shared`.trim()
171
+ : (variant?.key ?? baseTitle);
47
172
  registrations.push({
48
- describeTitle: `${variantLabel}shared`.trim(),
49
- leafTitle: videoName,
50
- videoName,
51
- language: null,
52
- locale: null,
53
- recordOptions,
54
- use,
55
- localize,
56
- studio,
173
+ ...base,
174
+ describeTitle,
175
+ leafTitle: onlyLang ? `${videoName} [${onlyLang}]` : videoName,
176
+ language: onlyLang,
177
+ locale: onlyLang && resolved.browserLocale
178
+ ? resolveLocaleForLanguage(onlyLang, resolved.locales)
179
+ : null,
57
180
  });
58
181
  continue;
59
182
  }
60
- const languages = requestedLanguages === null
61
- ? localize.languages
62
- : localize.languages.filter((lang) => requestedLanguages.includes(lang));
63
- for (const lang of languages) {
183
+ for (const lang of resolved.languages) {
64
184
  registrations.push({
185
+ ...base,
65
186
  describeTitle: `${variantLabel}${lang}`,
66
187
  leafTitle: `${videoName} [${lang}]`,
67
- videoName,
68
188
  language: lang,
69
- locale: localize.browserLocale
70
- ? resolveLocaleForLanguage(lang, localize.locales)
189
+ locale: resolved.browserLocale
190
+ ? resolveLocaleForLanguage(lang, resolved.locales)
71
191
  : null,
72
- recordOptions,
73
- use,
74
- localize,
75
- studio,
76
192
  });
77
193
  }
78
194
  }
@@ -81,8 +197,11 @@ export function expandRegistrations(params) {
81
197
  /** Internal option keys the page/context fixtures read off a registered test. */
82
198
  const SCREENCI_LANGUAGE_OPTION = '_screenciLanguage';
83
199
  const SCREENCI_VIDEO_NAME_OPTION = '_screenciVideoName';
84
- const SCREENCI_LOCALIZE_OPTION = '_screenciLocalize';
85
- const SCREENCI_STUDIO_OPTION = '_screenciStudio';
200
+ const SCREENCI_NARRATION_OPTION = '_screenciNarration';
201
+ const SCREENCI_TEXT_OPTION = '_screenciText';
202
+ const SCREENCI_OVERLAYS_OPTION = '_screenciOverlays';
203
+ const SCREENCI_AUDIO_OPTION = '_screenciAudio';
204
+ const SCREENCI_RECORDING_LOCALIZE_OPTION = '_screenciRecordingLocalize';
86
205
  const SCREENCI_SOURCE_FILE_OPTION = '_screenciSourceFile';
87
206
  /** Absolute path of this module, used to skip our own frames when capturing. */
88
207
  const BUILDER_MODULE_PATH = fileURLToPath(import.meta.url);
@@ -95,12 +214,9 @@ function callSiteFile(frame) {
95
214
  }
96
215
  /**
97
216
  * Capture the source file of the user's `.screenci` script that called the
98
- * builder. Playwright attributes `testInfo.file` to this module (the test is
99
- * registered here, not in the user's file), so asset paths authored relative to
100
- * the script would otherwise resolve against this package. We walk the call
101
- * stack and return the first frame outside this module, which is the script.
102
- * Returns `null` if no such frame is found (fixtures then fall back to
103
- * `testInfo.file`).
217
+ * builder. Playwright attributes `testInfo.file` to this module, so asset paths
218
+ * authored relative to the script would otherwise resolve against this package.
219
+ * We walk the call stack and return the first frame outside this module.
104
220
  */
105
221
  function captureSourceFile() {
106
222
  const originalPrepare = Error.prepareStackTrace;
@@ -131,8 +247,11 @@ function registerOne(test, reg, details, body, modifier, sourceFile) {
131
247
  ...(reg.locale !== null ? { locale: reg.locale } : {}),
132
248
  [SCREENCI_LANGUAGE_OPTION]: reg.language ?? undefined,
133
249
  [SCREENCI_VIDEO_NAME_OPTION]: reg.videoName,
134
- [SCREENCI_LOCALIZE_OPTION]: reg.localize ?? undefined,
135
- [SCREENCI_STUDIO_OPTION]: reg.studio ?? undefined,
250
+ [SCREENCI_NARRATION_OPTION]: reg.narration ?? undefined,
251
+ [SCREENCI_TEXT_OPTION]: reg.text ?? undefined,
252
+ [SCREENCI_OVERLAYS_OPTION]: reg.overlays ?? undefined,
253
+ [SCREENCI_AUDIO_OPTION]: reg.audio ?? undefined,
254
+ [SCREENCI_RECORDING_LOCALIZE_OPTION]: reg.recordingLocalize,
136
255
  [SCREENCI_SOURCE_FILE_OPTION]: sourceFile ?? undefined,
137
256
  };
138
257
  const register = modifier ? test[modifier] : test;
@@ -159,28 +278,41 @@ function normalizeVariants(variants) {
159
278
  }
160
279
  return variants;
161
280
  }
281
+ const EMPTY_STATE = (features) => ({
282
+ narration: null,
283
+ text: null,
284
+ overlays: null,
285
+ audio: null,
286
+ recordingLocalize: null,
287
+ eachVariants: null,
288
+ features,
289
+ });
290
+ /** The full set of feature fixtures for videos. */
291
+ export const VIDEO_FEATURES = new Set([
292
+ 'narration',
293
+ 'text',
294
+ 'overlays',
295
+ 'audio',
296
+ ]);
297
+ /** Stills are silent: only text + overlays. */
298
+ export const SCREENSHOT_FEATURES = new Set([
299
+ 'text',
300
+ 'overlays',
301
+ ]);
162
302
  /**
163
- * Create a fan-out builder bound to a registrar test instance. `video.localize`
164
- * and `video.each` are the `localize`/`each` methods of a root builder created
165
- * with this factory. `Args` is the medium's fixture arg type (video/screenshot).
303
+ * Create a fan-out builder bound to a registrar test instance. `Args` is the
304
+ * medium's fixture arg type (video/screenshot); `features` selects which
305
+ * per-feature methods are valid for the medium.
166
306
  */
167
- export function createVideoBuilder(test, state = { localize: null, studio: null, eachVariants: null }) {
307
+ export function createVideoBuilder(test, features = VIDEO_FEATURES, state = EMPTY_STATE(features)) {
168
308
  const runTerminal = (modifier, title, detailsOrBody, maybeBody) => {
169
309
  const hasDetails = typeof detailsOrBody !== 'function';
170
310
  const details = hasDetails ? detailsOrBody : undefined;
171
311
  const body = (hasDetails ? maybeBody : detailsOrBody);
172
- // Captured here, at the user's call site, so the script's path survives
173
- // even though Playwright records the test as declared in this module.
174
312
  const sourceFile = captureSourceFile();
175
- // Studio-managed names must be unique and disjoint from the seeded localize
176
- // names. Validate once, here, where both the localize spec and the studio
177
- // declaration are known (they can be chained in either order).
178
- validateStudioDeclaration(state.studio, state.localize?.narration?.seededNames ?? [], state.localize?.text?.seededNames ?? []);
179
313
  const registrations = expandRegistrations({
180
314
  baseTitle: title,
181
- localize: state.localize,
182
- studio: state.studio,
183
- eachVariants: state.eachVariants,
315
+ state,
184
316
  requestedLanguages: parseRequestedLanguages(),
185
317
  });
186
318
  if (registrations.length === 0) {
@@ -195,15 +327,24 @@ export function createVideoBuilder(test, state = { localize: null, studio: null,
195
327
  for (const modifier of ['only', 'skip', 'fixme', 'fail']) {
196
328
  callable[modifier] = ((title, detailsOrBody, maybeBody) => runTerminal(modifier, title, detailsOrBody, maybeBody));
197
329
  }
198
- callable.localize = ((spec) => createVideoBuilder(test, {
199
- ...state,
200
- localize: normalizeLocalizeSpec(spec),
201
- }));
202
- callable.studio = ((declaration) => createVideoBuilder(test, {
330
+ const withFeature = (key, arg) => {
331
+ if (!features.has(key)) {
332
+ throw new Error(`[screenci] ${key}() is not available for this medium (a screenshot is silent: only text and overlays apply).`);
333
+ }
334
+ return createVideoBuilder(test, features, {
335
+ ...state,
336
+ [key]: normalizeFeature(key, arg),
337
+ });
338
+ };
339
+ callable.narration = ((arg) => withFeature('narration', arg));
340
+ callable.text = ((arg) => withFeature('text', arg));
341
+ callable.overlays = ((arg) => withFeature('overlays', arg));
342
+ callable.audio = ((arg) => withFeature('audio', arg));
343
+ callable.languages = ((arg) => createVideoBuilder(test, features, {
203
344
  ...state,
204
- studio: declaration,
345
+ recordingLocalize: normalizeLanguagesArg(arg),
205
346
  }));
206
- callable.each = (variants) => createVideoBuilder(test, {
347
+ callable.each = (variants) => createVideoBuilder(test, features, {
207
348
  ...state,
208
349
  eachVariants: normalizeVariants(variants),
209
350
  });
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Capture the absolute path of the first stack frame outside {@link moduleUrl}
3
+ * (the calling module's own `import.meta.url`). Used by `createOverlays` /
4
+ * `createAudio` to attribute each registered asset to the user's `.screenci`
5
+ * script, so up-front validation only checks the assets that script declared
6
+ * (assets from other test files loaded in the same worker are skipped).
7
+ *
8
+ * Returns `null` when no outside frame is found, in which case the registration
9
+ * is left unattributed and validated against every recording.
10
+ */
11
+ export declare function captureCallerFile(moduleUrl: string): string | null;
12
+ //# sourceMappingURL=callerFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callerFile.d.ts","sourceRoot":"","sources":["../../src/callerFile.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBlE"}
@@ -0,0 +1,46 @@
1
+ import { fileURLToPath } from 'url';
2
+ /** Normalize a V8 call-site filename (which may be a `file://` URL) to a path. */
3
+ function callSiteFile(frame) {
4
+ const fileName = frame.getFileName();
5
+ if (!fileName)
6
+ return null;
7
+ return fileName.startsWith('file://') ? fileURLToPath(fileName) : fileName;
8
+ }
9
+ /**
10
+ * Capture the absolute path of the first stack frame outside {@link moduleUrl}
11
+ * (the calling module's own `import.meta.url`). Used by `createOverlays` /
12
+ * `createAudio` to attribute each registered asset to the user's `.screenci`
13
+ * script, so up-front validation only checks the assets that script declared
14
+ * (assets from other test files loaded in the same worker are skipped).
15
+ *
16
+ * Returns `null` when no outside frame is found, in which case the registration
17
+ * is left unattributed and validated against every recording.
18
+ */
19
+ export function captureCallerFile(moduleUrl) {
20
+ // Skip frames belonging to this helper and to the module that called it (the
21
+ // SDK module doing the registration), so the first remaining frame is the
22
+ // user's `.screenci` script.
23
+ const selfPath = fileURLToPath(import.meta.url);
24
+ const callerModulePath = fileURLToPath(moduleUrl);
25
+ const originalPrepare = Error.prepareStackTrace;
26
+ const originalLimit = Error.stackTraceLimit;
27
+ try {
28
+ Error.stackTraceLimit = 50;
29
+ Error.prepareStackTrace = (_error, stack) => stack;
30
+ const stack = new Error().stack;
31
+ if (!Array.isArray(stack))
32
+ return null;
33
+ for (const frame of stack) {
34
+ const file = callSiteFile(frame);
35
+ if (file !== null && file !== selfPath && file !== callerModulePath) {
36
+ return file;
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ finally {
42
+ Error.prepareStackTrace = originalPrepare;
43
+ Error.stackTraceLimit = originalLimit;
44
+ }
45
+ }
46
+ //# sourceMappingURL=callerFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callerFile.js","sourceRoot":"","sources":["../../src/callerFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,kFAAkF;AAClF,SAAS,YAAY,CAAC,KAAsB;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IACpC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACjD,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAA;IAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAA;IAC3C,IAAI,CAAC;QACH,KAAK,CAAC,eAAe,GAAG,EAAE,CAAA;QAC1B,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAA;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAqC,CAAA;QAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACpE,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,iBAAiB,GAAG,eAAe,CAAA;QACzC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAA;IACvC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { DEFAULT_CLICK_MOUSE_MOVE_DURATION, DEFAULT_ZOOM_OPTIONS, } from './defa
3
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
- import { buildZoomEvent, resolveAutoZoomOptions, resolveZoomTarget, } from './zoom.js';
6
+ import { buildZoomEvent, resolveAutoZoomOptions, resolveEffectiveDuration, resolveZoomTarget, } from './zoom.js';
7
7
  import { isTimingDebugEnabled, resolveRecordingTimingDuration, } from './runtimeMode.js';
8
8
  const POSITION_EPSILON_PX = 0.5;
9
9
  const CURSOR_TRIGGER_EDGE_THRESHOLD = 0.3;
@@ -880,6 +880,7 @@ export async function changeFocus(locator, options = {}, mouseMove, allowStandal
880
880
  x: plan.finalLocatorRect.x + plan.finalLocatorRect.width / 2,
881
881
  y: plan.finalLocatorRect.y + plan.finalLocatorRect.height / 2,
882
882
  };
883
+ const isZoomOut = plan.targetViewport.width >= currentZoomEnd.size.widthPx;
883
884
  const timing = mouseMove !== undefined
884
885
  ? {
885
886
  duration: resolveMouseMoveDuration(page, mouseTarget.x, mouseTarget.y, {
@@ -890,7 +891,10 @@ export async function changeFocus(locator, options = {}, mouseMove, allowStandal
890
891
  }),
891
892
  easing: mouseMove.easing,
892
893
  }
893
- : focusTiming;
894
+ : {
895
+ ...focusTiming,
896
+ duration: resolveRecordingTimingDuration(resolveEffectiveDuration(focusOptions, isZoomOut)),
897
+ };
894
898
  const mouseMovePlan = resolveMouseMovePlan({
895
899
  mouseMove,
896
900
  startViewportPos,