screenci 0.0.75 → 0.0.78
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/cli.d.ts +62 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +699 -229
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +277 -91
- package/dist/docs/manifest.d.ts.map +1 -1
- package/dist/docs/manifest.js +101 -30
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
- package/dist/docs/video-sources/installation.screenci.js +19 -10
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/landing.screenci.js +6 -8
- package/dist/docs/video-sources/landing.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
- package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +68 -0
- package/dist/docs/video-sources/languages.screenci.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +4 -5
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +3 -4
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
- package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/narration.screenci.js +71 -0
- package/dist/docs/video-sources/narration.screenci.js.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
- package/dist/docs/video-sources/studio.screenci.js +8 -10
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
- package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
- package/dist/docs/videos.d.ts +20 -0
- package/dist/docs/videos.d.ts.map +1 -1
- package/dist/docs/videos.js +25 -0
- package/dist/docs/videos.js.map +1 -1
- package/dist/e2e/instrument.e2e.js +60 -1
- package/dist/e2e/instrument.e2e.js.map +1 -1
- package/dist/e2e/redact.e2e.d.ts +2 -0
- package/dist/e2e/redact.e2e.d.ts.map +1 -0
- package/dist/e2e/redact.e2e.js +161 -0
- package/dist/e2e/redact.e2e.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +174 -14
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +320 -39
- package/dist/src/asset.js.map +1 -1
- package/dist/src/assetHash.d.ts +27 -0
- package/dist/src/assetHash.d.ts.map +1 -0
- package/dist/src/assetHash.js +0 -0
- package/dist/src/assetHash.js.map +1 -0
- package/dist/src/audio.d.ts +20 -1
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +126 -24
- package/dist/src/audio.js.map +1 -1
- package/dist/src/autoZoom.d.ts.map +1 -1
- package/dist/src/autoZoom.js +3 -1
- package/dist/src/autoZoom.js.map +1 -1
- package/dist/src/browserLaunchOptions.d.ts +24 -2
- package/dist/src/browserLaunchOptions.d.ts.map +1 -1
- package/dist/src/browserLaunchOptions.js +57 -3
- package/dist/src/browserLaunchOptions.js.map +1 -1
- package/dist/src/builder.d.ts +229 -136
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +264 -77
- package/dist/src/builder.js.map +1 -1
- package/dist/src/callerFile.d.ts +12 -0
- package/dist/src/callerFile.d.ts.map +1 -0
- package/dist/src/callerFile.js +46 -0
- package/dist/src/callerFile.js.map +1 -0
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +109 -36
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +15 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/cue.d.ts +29 -17
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +138 -61
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +63 -0
- package/dist/src/declare.d.ts.map +1 -0
- package/dist/src/declare.js +111 -0
- package/dist/src/declare.js.map +1 -0
- package/dist/src/defaults.d.ts +23 -0
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +27 -3
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +339 -25
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +250 -26
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +10 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +12 -2
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +81 -33
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +164 -8
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/locales.d.ts.map +1 -1
- package/dist/src/locales.js +1 -0
- package/dist/src/locales.js.map +1 -1
- package/dist/src/localize.d.ts +26 -17
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +19 -11
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +29 -33
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +74 -49
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +7 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/manualZoom.d.ts.map +1 -1
- package/dist/src/manualZoom.js +8 -5
- package/dist/src/manualZoom.js.map +1 -1
- package/dist/src/narrationVisibility.d.ts +19 -0
- package/dist/src/narrationVisibility.d.ts.map +1 -0
- package/dist/src/narrationVisibility.js +26 -0
- package/dist/src/narrationVisibility.js.map +1 -0
- package/dist/src/openBrowser.d.ts +34 -0
- package/dist/src/openBrowser.d.ts.map +1 -0
- package/dist/src/openBrowser.js +62 -0
- package/dist/src/openBrowser.js.map +1 -0
- package/dist/src/recordingData.d.ts +27 -0
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/recordingSize.d.ts +32 -0
- package/dist/src/recordingSize.d.ts.map +1 -0
- package/dist/src/recordingSize.js +54 -0
- package/dist/src/recordingSize.js.map +1 -0
- package/dist/src/redact.d.ts +68 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +138 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/redactController.d.ts +61 -0
- package/dist/src/redactController.d.ts.map +1 -0
- package/dist/src/redactController.js +232 -0
- package/dist/src/redactController.js.map +1 -0
- package/dist/src/runtimeContext.d.ts +32 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +21 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +15 -7
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +17 -6
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenAudio.d.ts +88 -0
- package/dist/src/screenAudio.d.ts.map +1 -0
- package/dist/src/screenAudio.js +0 -0
- package/dist/src/screenAudio.js.map +1 -0
- package/dist/src/screenAudioSink.d.ts +46 -0
- package/dist/src/screenAudioSink.d.ts.map +1 -0
- package/dist/src/screenAudioSink.js +77 -0
- package/dist/src/screenAudioSink.js.map +1 -0
- package/dist/src/screenshot.d.ts +27 -29
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +39 -24
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/sourceTrim.d.ts +29 -0
- package/dist/src/sourceTrim.d.ts.map +1 -0
- package/dist/src/sourceTrim.js +76 -0
- package/dist/src/sourceTrim.js.map +1 -0
- package/dist/src/stillCapture.d.ts +5 -0
- package/dist/src/stillCapture.d.ts.map +1 -1
- package/dist/src/stillCapture.js +11 -1
- package/dist/src/stillCapture.js.map +1 -1
- package/dist/src/studio.d.ts +69 -57
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +16 -38
- package/dist/src/studio.js.map +1 -1
- package/dist/src/timelineOffset.d.ts +46 -0
- package/dist/src/timelineOffset.d.ts.map +1 -0
- package/dist/src/timelineOffset.js +66 -0
- package/dist/src/timelineOffset.js.map +1 -0
- package/dist/src/titleValidation.d.ts +38 -0
- package/dist/src/titleValidation.d.ts.map +1 -1
- package/dist/src/titleValidation.js +42 -0
- package/dist/src/titleValidation.js.map +1 -1
- package/dist/src/types.d.ts +218 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +74 -60
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +201 -39
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceSampleAudio.d.ts +34 -0
- package/dist/src/voiceSampleAudio.d.ts.map +1 -0
- package/dist/src/voiceSampleAudio.js +105 -0
- package/dist/src/voiceSampleAudio.js.map +1 -0
- package/dist/src/voices.d.ts +2 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +8 -3
- package/dist/src/voices.js.map +1 -1
- package/dist/src/zoom.d.ts +1 -0
- package/dist/src/zoom.d.ts.map +1 -1
- package/dist/src/zoom.js +3 -0
- package/dist/src/zoom.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/skills/screenci/SKILL.md +2 -2
- package/skills/screenci/references/init.md +4 -3
- package/skills/screenci/references/record.md +1 -1
- package/templates/recordings/assets/logo.png +0 -0
- package/dist/docs/video-sources/public-urls.screenci.d.ts +0 -2
- package/dist/docs/video-sources/public-urls.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/public-urls.screenci.js +0 -41
- package/dist/docs/video-sources/public-urls.screenci.js.map +0 -1
package/dist/src/builder.js
CHANGED
|
@@ -2,77 +2,239 @@ 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 {
|
|
6
|
-
import {
|
|
5
|
+
import { normalizeFeature, } from './declare.js';
|
|
6
|
+
import { STUDIO, isStudioMarker, } from './studio.js';
|
|
7
|
+
function normalizeLanguagesArg(arg) {
|
|
8
|
+
if (isStudioMarker(arg)) {
|
|
9
|
+
// `studio({ languages, mode, ... })`: the seed is a whole config the web app
|
|
10
|
+
// starts from and owns. `studio()` / `studio(['en', ...])`: the names are the
|
|
11
|
+
// seed languages (empty => pending until the web selects a set).
|
|
12
|
+
const cfg = arg.seed ?? {
|
|
13
|
+
languages: arg.names,
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
languages: 'studio',
|
|
17
|
+
...(cfg.languages !== undefined &&
|
|
18
|
+
cfg.languages.length > 0 && { studioSeed: cfg.languages }),
|
|
19
|
+
...(cfg.mode !== undefined && { mode: cfg.mode }),
|
|
20
|
+
...(cfg.locales !== undefined && { locales: cfg.locales }),
|
|
21
|
+
...(cfg.browserLocale !== undefined && {
|
|
22
|
+
browserLocale: cfg.browserLocale,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(arg))
|
|
27
|
+
return { languages: arg };
|
|
28
|
+
return arg;
|
|
29
|
+
}
|
|
7
30
|
function variantVideoName(baseTitle, variant) {
|
|
8
31
|
return variant === null ? baseTitle : `${baseTitle} ${variant.key}`;
|
|
9
32
|
}
|
|
33
|
+
/** Languages contributed by the per-feature declarations (union of `byLang`). */
|
|
34
|
+
function featureLanguages(state) {
|
|
35
|
+
const set = new Set();
|
|
36
|
+
for (const feature of [
|
|
37
|
+
state.narration,
|
|
38
|
+
state.values,
|
|
39
|
+
state.overlays,
|
|
40
|
+
state.audio,
|
|
41
|
+
]) {
|
|
42
|
+
for (const lang of feature?.languages ?? [])
|
|
43
|
+
set.add(lang);
|
|
44
|
+
}
|
|
45
|
+
return [...set];
|
|
46
|
+
}
|
|
10
47
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
48
|
+
* Resolve the recorded language set at registration time. Priority:
|
|
49
|
+
* 1. `video.languages(studio())` -> web-owned: the UNION of the web's current
|
|
50
|
+
* selection (`requestedLanguages`, injected at record time), the `studioSeed`
|
|
51
|
+
* (`studio(['en', ...])`), and the per-feature language keys defined in code.
|
|
52
|
+
* Empty (none anywhere) => pending.
|
|
53
|
+
* 2. explicit `video.languages([...])`.
|
|
54
|
+
* 3. union of per-feature language keys (e.g. `narration({ fr })` -> French).
|
|
55
|
+
* 4. default `['en']`.
|
|
56
|
+
* The `requestedLanguages` filter (CLI / studio injection) intersects 2-4; for the
|
|
57
|
+
* web-owned set (1) it is unioned in instead, since the web only adds languages.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveRecordingLocalize(state, requestedLanguages) {
|
|
60
|
+
const rl = state.recordingLocalize;
|
|
61
|
+
const mode = rl?.mode ?? 'per-language';
|
|
62
|
+
const browserLocale = rl?.browserLocale ?? true;
|
|
63
|
+
const localesPatch = rl?.locales !== undefined ? { locales: rl.locales } : {};
|
|
64
|
+
if (rl?.languages === 'studio') {
|
|
65
|
+
// The web app owns the set, but the recorded languages are the union of:
|
|
66
|
+
// the web's current selection (`requestedLanguages`, fetched/injected at
|
|
67
|
+
// record time), the code seed (`studio(['en', ...])`), and the per-feature
|
|
68
|
+
// languages defined in code (e.g. `narration({ en, fi })`). So a studio-owned
|
|
69
|
+
// video still records every language its code defines, plus whatever the web
|
|
70
|
+
// added, even on the first run before anything is configured in the web.
|
|
71
|
+
const languages = [
|
|
72
|
+
...new Set([
|
|
73
|
+
...(requestedLanguages ?? []),
|
|
74
|
+
...(rl.studioSeed ?? []),
|
|
75
|
+
...featureLanguages(state),
|
|
76
|
+
]),
|
|
77
|
+
];
|
|
78
|
+
return {
|
|
79
|
+
languages,
|
|
80
|
+
// Studio-owned sets render every language they record, so the available
|
|
81
|
+
// set is the recorded set (the union above).
|
|
82
|
+
availableLanguages: languages,
|
|
83
|
+
mode,
|
|
84
|
+
browserLocale,
|
|
85
|
+
...localesPatch,
|
|
86
|
+
studioOwned: true,
|
|
87
|
+
pending: languages.length === 0,
|
|
88
|
+
explicit: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
let declared;
|
|
92
|
+
let explicit;
|
|
93
|
+
if (rl !== null && rl !== undefined && Array.isArray(rl.languages)) {
|
|
94
|
+
declared = [...rl.languages];
|
|
95
|
+
explicit = true;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const inferred = featureLanguages(state);
|
|
99
|
+
if (inferred.length > 0) {
|
|
100
|
+
declared = inferred;
|
|
101
|
+
explicit = true;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
declared = ['en'];
|
|
105
|
+
explicit = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const languages = requestedLanguages === null
|
|
109
|
+
? declared
|
|
110
|
+
: declared.filter((lang) => requestedLanguages.includes(lang));
|
|
111
|
+
return {
|
|
112
|
+
languages,
|
|
113
|
+
// The full declared set, regardless of the `--languages` render filter. The
|
|
114
|
+
// app reads this so a code-defined language that simply was not rendered this
|
|
115
|
+
// run is not mistaken for one removed from code.
|
|
116
|
+
availableLanguages: declared,
|
|
117
|
+
mode,
|
|
118
|
+
browserLocale,
|
|
119
|
+
...localesPatch,
|
|
120
|
+
studioOwned: false,
|
|
121
|
+
pending: false,
|
|
122
|
+
explicit,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Warn about per-feature values declared for a language outside the recorded set
|
|
127
|
+
* (e.g. `narration({ fr })` while the set is `[fi]`): the value is ignored.
|
|
128
|
+
*/
|
|
129
|
+
function warnUnusedLanguages(state, resolved) {
|
|
130
|
+
const active = new Set(resolved.languages);
|
|
131
|
+
const source = resolved.studioOwned ? 'web' : 'video.languages()';
|
|
132
|
+
const langList = resolved.languages.join(', ') || '(none)';
|
|
133
|
+
const features = [
|
|
134
|
+
['Narration', state.narration],
|
|
135
|
+
['Values', state.values],
|
|
136
|
+
['Overlay', state.overlays],
|
|
137
|
+
['Audio', state.audio],
|
|
138
|
+
];
|
|
139
|
+
for (const [label, feature] of features) {
|
|
140
|
+
if (feature === null)
|
|
141
|
+
continue;
|
|
142
|
+
for (const [lang, entries] of Object.entries(feature.byLang)) {
|
|
143
|
+
if (active.has(lang) || entries === undefined)
|
|
144
|
+
continue;
|
|
145
|
+
for (const name of Object.keys(entries)) {
|
|
146
|
+
logger.warn(`[screenci] ${label} ${name} (${lang}) is not used at all currently, ` +
|
|
147
|
+
`reason: only languages [${langList}] defined in ${source}. ` +
|
|
148
|
+
`See https://screenci.com/docs/localization`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Expand the fan-out specs into the concrete list of Playwright tests to
|
|
155
|
+
* register. Pure and exported for testing.
|
|
13
156
|
*
|
|
14
|
-
* -
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* a shared recording.
|
|
18
|
-
* -
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* per language unless `browserLocale` is `false`.
|
|
157
|
+
* - A single resolved language (default, or one inferred/declared) yields one
|
|
158
|
+
* language-agnostic test (`language: null`).
|
|
159
|
+
* - `'shared'` mode yields one test carrying every language (overdubbed at
|
|
160
|
+
* render); the `--languages` filter does not split a shared recording.
|
|
161
|
+
* - `'per-language'` mode yields one test per resolved language.
|
|
162
|
+
* - A studio-owned set with nothing selected yet yields one pending test that
|
|
163
|
+
* records (so its schema reaches the backend) but renders nothing.
|
|
22
164
|
*/
|
|
23
165
|
export function expandRegistrations(params) {
|
|
24
|
-
const { baseTitle,
|
|
25
|
-
const variants = eachVariants ?? [null];
|
|
166
|
+
const { baseTitle, state } = params;
|
|
167
|
+
const variants = state.eachVariants ?? [null];
|
|
26
168
|
const registrations = [];
|
|
27
169
|
for (const variant of variants) {
|
|
28
170
|
const videoName = variantVideoName(baseTitle, variant);
|
|
29
171
|
const recordOptions = variant?.recordOptions ?? null;
|
|
30
172
|
const use = variant?.use ?? null;
|
|
31
173
|
const variantLabel = variant === null ? '' : `${variant.key} `;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
recordOptions,
|
|
40
|
-
use,
|
|
41
|
-
localize: null,
|
|
42
|
-
studio,
|
|
43
|
-
});
|
|
174
|
+
const resolved = resolveRecordingLocalize(state, params.requestedLanguages);
|
|
175
|
+
warnUnusedLanguages(state, resolved);
|
|
176
|
+
// Explicitly-declared languages all filtered out (`--languages`) and not a
|
|
177
|
+
// pending studio set: register nothing for this variant.
|
|
178
|
+
if (resolved.explicit &&
|
|
179
|
+
!resolved.studioOwned &&
|
|
180
|
+
resolved.languages.length === 0) {
|
|
44
181
|
continue;
|
|
45
182
|
}
|
|
46
|
-
|
|
183
|
+
const base = {
|
|
184
|
+
videoName,
|
|
185
|
+
recordOptions,
|
|
186
|
+
use,
|
|
187
|
+
narration: state.narration,
|
|
188
|
+
values: state.values,
|
|
189
|
+
overlays: state.overlays,
|
|
190
|
+
audio: state.audio,
|
|
191
|
+
recordingLocalize: resolved,
|
|
192
|
+
};
|
|
193
|
+
// Pending studio set, shared mode, or a single language-agnostic pass: one
|
|
194
|
+
// registration that carries every (or no) language without splitting.
|
|
195
|
+
const singlePass = resolved.pending ||
|
|
196
|
+
resolved.mode === 'shared' ||
|
|
197
|
+
resolved.languages.length <= 1;
|
|
198
|
+
if (singlePass) {
|
|
199
|
+
// A single explicitly-declared language is tagged `[lang]`; the implicit
|
|
200
|
+
// `['en']` default (a plain video) stays language-agnostic (no `[en]` tag).
|
|
201
|
+
const onlyLang = resolved.explicit &&
|
|
202
|
+
resolved.mode === 'per-language' &&
|
|
203
|
+
resolved.languages.length === 1
|
|
204
|
+
? resolved.languages[0]
|
|
205
|
+
: null;
|
|
206
|
+
// Locale: an explicitly tagged single language uses its locale; the implicit
|
|
207
|
+
// default records one round pinned to en-US (the `['en']` default) while
|
|
208
|
+
// staying language-agnostic. Shared / pending passes leave the locale unset.
|
|
209
|
+
const localeLang = onlyLang ??
|
|
210
|
+
(!resolved.explicit && resolved.languages.length === 1
|
|
211
|
+
? resolved.languages[0]
|
|
212
|
+
: null);
|
|
213
|
+
const describeTitle = onlyLang
|
|
214
|
+
? `${variantLabel}${onlyLang}`.trim()
|
|
215
|
+
: resolved.mode === 'shared' || resolved.pending
|
|
216
|
+
? `${variantLabel}shared`.trim()
|
|
217
|
+
: (variant?.key ?? baseTitle);
|
|
47
218
|
registrations.push({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
videoName,
|
|
51
|
-
language:
|
|
52
|
-
locale:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
localize,
|
|
56
|
-
studio,
|
|
219
|
+
...base,
|
|
220
|
+
describeTitle,
|
|
221
|
+
leafTitle: onlyLang ? `${videoName} [${onlyLang}]` : videoName,
|
|
222
|
+
language: onlyLang,
|
|
223
|
+
locale: localeLang && resolved.browserLocale
|
|
224
|
+
? resolveLocaleForLanguage(localeLang, resolved.locales)
|
|
225
|
+
: null,
|
|
57
226
|
});
|
|
58
227
|
continue;
|
|
59
228
|
}
|
|
60
|
-
const
|
|
61
|
-
? localize.languages
|
|
62
|
-
: localize.languages.filter((lang) => requestedLanguages.includes(lang));
|
|
63
|
-
for (const lang of languages) {
|
|
229
|
+
for (const lang of resolved.languages) {
|
|
64
230
|
registrations.push({
|
|
231
|
+
...base,
|
|
65
232
|
describeTitle: `${variantLabel}${lang}`,
|
|
66
233
|
leafTitle: `${videoName} [${lang}]`,
|
|
67
|
-
videoName,
|
|
68
234
|
language: lang,
|
|
69
|
-
locale:
|
|
70
|
-
? resolveLocaleForLanguage(lang,
|
|
235
|
+
locale: resolved.browserLocale
|
|
236
|
+
? resolveLocaleForLanguage(lang, resolved.locales)
|
|
71
237
|
: null,
|
|
72
|
-
recordOptions,
|
|
73
|
-
use,
|
|
74
|
-
localize,
|
|
75
|
-
studio,
|
|
76
238
|
});
|
|
77
239
|
}
|
|
78
240
|
}
|
|
@@ -81,8 +243,11 @@ export function expandRegistrations(params) {
|
|
|
81
243
|
/** Internal option keys the page/context fixtures read off a registered test. */
|
|
82
244
|
const SCREENCI_LANGUAGE_OPTION = '_screenciLanguage';
|
|
83
245
|
const SCREENCI_VIDEO_NAME_OPTION = '_screenciVideoName';
|
|
84
|
-
const
|
|
85
|
-
const
|
|
246
|
+
const SCREENCI_NARRATION_OPTION = '_screenciNarration';
|
|
247
|
+
const SCREENCI_VALUES_OPTION = '_screenciValues';
|
|
248
|
+
const SCREENCI_OVERLAYS_OPTION = '_screenciOverlays';
|
|
249
|
+
const SCREENCI_AUDIO_OPTION = '_screenciAudio';
|
|
250
|
+
const SCREENCI_RECORDING_LOCALIZE_OPTION = '_screenciRecordingLocalize';
|
|
86
251
|
const SCREENCI_SOURCE_FILE_OPTION = '_screenciSourceFile';
|
|
87
252
|
/** Absolute path of this module, used to skip our own frames when capturing. */
|
|
88
253
|
const BUILDER_MODULE_PATH = fileURLToPath(import.meta.url);
|
|
@@ -95,12 +260,9 @@ function callSiteFile(frame) {
|
|
|
95
260
|
}
|
|
96
261
|
/**
|
|
97
262
|
* Capture the source file of the user's `.screenci` script that called the
|
|
98
|
-
* builder. Playwright attributes `testInfo.file` to this module
|
|
99
|
-
*
|
|
100
|
-
* the
|
|
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`).
|
|
263
|
+
* builder. Playwright attributes `testInfo.file` to this module, so asset paths
|
|
264
|
+
* authored relative to the script would otherwise resolve against this package.
|
|
265
|
+
* We walk the call stack and return the first frame outside this module.
|
|
104
266
|
*/
|
|
105
267
|
function captureSourceFile() {
|
|
106
268
|
const originalPrepare = Error.prepareStackTrace;
|
|
@@ -131,8 +293,11 @@ function registerOne(test, reg, details, body, modifier, sourceFile) {
|
|
|
131
293
|
...(reg.locale !== null ? { locale: reg.locale } : {}),
|
|
132
294
|
[SCREENCI_LANGUAGE_OPTION]: reg.language ?? undefined,
|
|
133
295
|
[SCREENCI_VIDEO_NAME_OPTION]: reg.videoName,
|
|
134
|
-
[
|
|
135
|
-
[
|
|
296
|
+
[SCREENCI_NARRATION_OPTION]: reg.narration ?? undefined,
|
|
297
|
+
[SCREENCI_VALUES_OPTION]: reg.values ?? undefined,
|
|
298
|
+
[SCREENCI_OVERLAYS_OPTION]: reg.overlays ?? undefined,
|
|
299
|
+
[SCREENCI_AUDIO_OPTION]: reg.audio ?? undefined,
|
|
300
|
+
[SCREENCI_RECORDING_LOCALIZE_OPTION]: reg.recordingLocalize,
|
|
136
301
|
[SCREENCI_SOURCE_FILE_OPTION]: sourceFile ?? undefined,
|
|
137
302
|
};
|
|
138
303
|
const register = modifier ? test[modifier] : test;
|
|
@@ -159,28 +324,41 @@ function normalizeVariants(variants) {
|
|
|
159
324
|
}
|
|
160
325
|
return variants;
|
|
161
326
|
}
|
|
327
|
+
const EMPTY_STATE = (features) => ({
|
|
328
|
+
narration: null,
|
|
329
|
+
values: null,
|
|
330
|
+
overlays: null,
|
|
331
|
+
audio: null,
|
|
332
|
+
recordingLocalize: null,
|
|
333
|
+
eachVariants: null,
|
|
334
|
+
features,
|
|
335
|
+
});
|
|
336
|
+
/** The full set of feature fixtures for videos. */
|
|
337
|
+
export const VIDEO_FEATURES = new Set([
|
|
338
|
+
'narration',
|
|
339
|
+
'values',
|
|
340
|
+
'overlays',
|
|
341
|
+
'audio',
|
|
342
|
+
]);
|
|
343
|
+
/** Stills are silent: only values + overlays. */
|
|
344
|
+
export const SCREENSHOT_FEATURES = new Set([
|
|
345
|
+
'values',
|
|
346
|
+
'overlays',
|
|
347
|
+
]);
|
|
162
348
|
/**
|
|
163
|
-
* Create a fan-out builder bound to a registrar test instance. `
|
|
164
|
-
*
|
|
165
|
-
*
|
|
349
|
+
* Create a fan-out builder bound to a registrar test instance. `Args` is the
|
|
350
|
+
* medium's fixture arg type (video/screenshot); `features` selects which
|
|
351
|
+
* per-feature methods are valid for the medium.
|
|
166
352
|
*/
|
|
167
|
-
export function createVideoBuilder(test,
|
|
353
|
+
export function createVideoBuilder(test, features = VIDEO_FEATURES, state = EMPTY_STATE(features)) {
|
|
168
354
|
const runTerminal = (modifier, title, detailsOrBody, maybeBody) => {
|
|
169
355
|
const hasDetails = typeof detailsOrBody !== 'function';
|
|
170
356
|
const details = hasDetails ? detailsOrBody : undefined;
|
|
171
357
|
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
358
|
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
359
|
const registrations = expandRegistrations({
|
|
180
360
|
baseTitle: title,
|
|
181
|
-
|
|
182
|
-
studio: state.studio,
|
|
183
|
-
eachVariants: state.eachVariants,
|
|
361
|
+
state,
|
|
184
362
|
requestedLanguages: parseRequestedLanguages(),
|
|
185
363
|
});
|
|
186
364
|
if (registrations.length === 0) {
|
|
@@ -195,15 +373,24 @@ export function createVideoBuilder(test, state = { localize: null, studio: null,
|
|
|
195
373
|
for (const modifier of ['only', 'skip', 'fixme', 'fail']) {
|
|
196
374
|
callable[modifier] = ((title, detailsOrBody, maybeBody) => runTerminal(modifier, title, detailsOrBody, maybeBody));
|
|
197
375
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
376
|
+
const withFeature = (key, arg) => {
|
|
377
|
+
if (!features.has(key)) {
|
|
378
|
+
throw new Error(`[screenci] ${key}() is not available for this medium (a screenshot is silent: only values and overlays apply).`);
|
|
379
|
+
}
|
|
380
|
+
return createVideoBuilder(test, features, {
|
|
381
|
+
...state,
|
|
382
|
+
[key]: normalizeFeature(key, arg),
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
callable.narration = ((arg) => withFeature('narration', arg));
|
|
386
|
+
callable.values = ((arg) => withFeature('values', arg));
|
|
387
|
+
callable.overlays = ((arg) => withFeature('overlays', arg));
|
|
388
|
+
callable.audio = ((arg) => withFeature('audio', arg));
|
|
389
|
+
callable.languages = ((arg) => createVideoBuilder(test, features, {
|
|
203
390
|
...state,
|
|
204
|
-
|
|
391
|
+
recordingLocalize: normalizeLanguagesArg(arg),
|
|
205
392
|
}));
|
|
206
|
-
callable.each = (variants) => createVideoBuilder(test, {
|
|
393
|
+
callable.each = (variants) => createVideoBuilder(test, features, {
|
|
207
394
|
...state,
|
|
208
395
|
eachVariants: normalizeVariants(variants),
|
|
209
396
|
});
|
package/dist/src/builder.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"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"}
|