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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserLaunchOptions.js","sourceRoot":"","sources":["../../src/browserLaunchOptions.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG;IAC9B,qBAAqB;IACrB,0BAA0B;IAC1B,yBAAyB,EAAE,uBAAuB;IAClD,gCAAgC,EAAE,6BAA6B;IAC/D,2BAA2B;IAC3B,oBAAoB,EAAE,4CAA4C;IAClE,gBAAgB,EAAE,oBAAoB;IACtC,mBAAmB,EAAE,qCAAqC;CAClD,CAAA;AAEV,MAAM,UAAU,wBAAwB,
|
|
1
|
+
{"version":3,"file":"browserLaunchOptions.js","sourceRoot":"","sources":["../../src/browserLaunchOptions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AAEzD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAA;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAC3C,oBAA4B,EAC5B,mBAA4B;IAE5B,OAAO,oBAAoB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAA;AACzD,CAAC;AAED,MAAM,uBAAuB,GAAG;IAC9B,qBAAqB;IACrB,0BAA0B;IAC1B,yBAAyB,EAAE,uBAAuB;IAClD,gCAAgC,EAAE,6BAA6B;IAC/D,2BAA2B;IAC3B,oBAAoB,EAAE,4CAA4C;IAClE,gBAAgB,EAAE,oBAAoB;IACtC,mBAAmB,EAAE,qCAAqC;CAClD,CAAA;AAEV,MAAM,UAAU,wBAAwB,CACtC,YAAqB,EACrB,mBAAmB,GAAG,KAAK;IAQ3B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,CAAC,GAAG,uBAAuB,CAAC;YAClC,iBAAiB,EAAE,EAAE;SACtB,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,YAAY;IACZ,EAAE;IACF,wEAAwE;IACxE,6EAA6E;IAC7E,wEAAwE;IACxE,6EAA6E;IAC7E,oEAAoE;IACpE,EAAE;IACF,8EAA8E;IAC9E,oEAAoE;IACpE,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,+EAA+E;IAC/E,2DAA2D;IAC3D,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,GAAG,uBAAuB,EAAE,gBAAgB,CAAC;QACpD,iBAAiB,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;KAClD,CAAA;AACH,CAAC"}
|
package/dist/src/builder.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { TestDetails, TestInfo } from '@playwright/test';
|
|
2
2
|
import type { RecordOptions } from './types.js';
|
|
3
3
|
import type { NarrationCue } from './cue.js';
|
|
4
|
-
import type { OverlayController } from './asset.js';
|
|
5
|
-
import type { AudioController } from './audio.js';
|
|
6
|
-
import type {
|
|
7
|
-
import
|
|
8
|
-
import { type
|
|
4
|
+
import type { OverlayController, OverlayControllerFor, OverlayInputOrFactory } from './asset.js';
|
|
5
|
+
import type { AudioController, AudioInput } from './audio.js';
|
|
6
|
+
import type { LocalizeNarrationValue, VoiceConfig } from './localize.js';
|
|
7
|
+
import type { Lang } from './voices.js';
|
|
8
|
+
import { type FeatureArg, type NormalizedFeature } from './declare.js';
|
|
9
|
+
import { STUDIO, type StudioNames, type StudioPending, type StudioSeeded } from './studio.js';
|
|
9
10
|
/**
|
|
10
11
|
* One variant in a generic `video.each(...)` fan-out. Each variant produces a
|
|
11
12
|
* separate video (its own identity and stored history), differing only in its
|
|
12
|
-
* recording options and/or forwarded Playwright `use` options
|
|
13
|
-
* via `recordOptions.aspectRatio`, or a theme via `use.colorScheme`).
|
|
13
|
+
* recording options and/or forwarded Playwright `use` options.
|
|
14
14
|
*/
|
|
15
15
|
export type EachVariant = {
|
|
16
16
|
/** Stable label appended to the video name, e.g. `'mobile'` or `'dark'`. */
|
|
@@ -20,6 +20,53 @@ export type EachVariant = {
|
|
|
20
20
|
/** Forwarded Playwright `use` options for this variant, e.g. `{ colorScheme: 'dark' }`. */
|
|
21
21
|
use?: Record<string, unknown>;
|
|
22
22
|
};
|
|
23
|
+
/** Capture strategy across languages. */
|
|
24
|
+
export type LocalizeMode = 'shared' | 'per-language';
|
|
25
|
+
/**
|
|
26
|
+
* Recording-level localization config, declared via `video.languages(...)`. It
|
|
27
|
+
* drives the registration-time fan-out (one Playwright test per language), so it
|
|
28
|
+
* lives on a builder method rather than in `recordOptions` (a run-time option).
|
|
29
|
+
*
|
|
30
|
+
* `languages` may be `'studio'` (set via `video.languages(studio())`), meaning the
|
|
31
|
+
* set is owned by the ScreenCI web app and injected at record time through the same
|
|
32
|
+
* channel as `--languages`. When the web has selected none yet and there is no
|
|
33
|
+
* `studioSeed`, the set is empty and the render stays pending (the recording still
|
|
34
|
+
* runs so its declared schema reaches the backend to be filled). A `studioSeed`
|
|
35
|
+
* (from `video.languages(studio(['en', 'fi']))`) supplies the initial set the web
|
|
36
|
+
* app starts from but may change.
|
|
37
|
+
*/
|
|
38
|
+
export type RecordingLocalize = {
|
|
39
|
+
languages: readonly Lang[] | 'studio';
|
|
40
|
+
mode?: LocalizeMode;
|
|
41
|
+
locales?: Partial<Record<Lang, string>>;
|
|
42
|
+
browserLocale?: boolean;
|
|
43
|
+
/** Initial web-owned set when `languages === 'studio'` (`studio(['en', ...])`). */
|
|
44
|
+
studioSeed?: readonly Lang[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The capture config for `video.languages(...)`. Code-owns the set when passed
|
|
48
|
+
* directly; the web app owns it (and may edit these fields later) when wrapped in
|
|
49
|
+
* `studio({ ... })`. `languages` may be omitted to infer the set from the
|
|
50
|
+
* per-feature keys (e.g. `narration({ en, fi })`), the usual pairing with
|
|
51
|
+
* `mode: 'shared'`.
|
|
52
|
+
*/
|
|
53
|
+
export type LanguagesConfig = {
|
|
54
|
+
languages?: readonly Lang[];
|
|
55
|
+
mode?: LocalizeMode;
|
|
56
|
+
locales?: Partial<Record<Lang, string>>;
|
|
57
|
+
browserLocale?: boolean;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* The argument accepted by `video.languages(...)`:
|
|
61
|
+
*
|
|
62
|
+
* - `['en', 'fi']` or `{ languages, mode, ... }`: code owns the config.
|
|
63
|
+
* - `studio()`: the web app owns the set (nothing seeded, render pending).
|
|
64
|
+
* - `studio(['en', 'fi'])`: the web app owns the set, seeded with these languages.
|
|
65
|
+
* - `studio({ languages, mode, ... })`: the web app owns the whole config, seeded
|
|
66
|
+
* with these values (it can edit the set, and later the mode/locales, from the
|
|
67
|
+
* web).
|
|
68
|
+
*/
|
|
69
|
+
export type LanguagesArg = StudioPending | StudioNames | StudioSeeded<LanguagesConfig> | readonly Lang[] | LanguagesConfig;
|
|
23
70
|
/** A single Playwright test to register, fully resolved from the fan-out specs. */
|
|
24
71
|
export type Registration = {
|
|
25
72
|
/** Label for the wrapping `describe` block (scopes per-test `use` options). */
|
|
@@ -28,7 +75,7 @@ export type Registration = {
|
|
|
28
75
|
leafTitle: string;
|
|
29
76
|
/** Grouping key written to `metadata.videoName`; shared across a video's languages. */
|
|
30
77
|
videoName: string;
|
|
31
|
-
/** Active language for this pass, or `null` in shared /
|
|
78
|
+
/** Active language for this pass, or `null` in shared / single-language mode. */
|
|
32
79
|
language: string | null;
|
|
33
80
|
/** Browser locale for this pass, or `null` to leave the default. */
|
|
34
81
|
locale: string | null;
|
|
@@ -36,29 +83,69 @@ export type Registration = {
|
|
|
36
83
|
recordOptions: Partial<RecordOptions> | null;
|
|
37
84
|
/** Forwarded Playwright `use` options for this pass, or `null` for none. */
|
|
38
85
|
use: Record<string, unknown> | null;
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
86
|
+
/** Per-feature declarations carried into the fixtures. */
|
|
87
|
+
narration: NormalizedFeature<LocalizeNarrationValue> | null;
|
|
88
|
+
values: NormalizedFeature<string> | null;
|
|
89
|
+
overlays: NormalizedFeature<OverlayInputOrFactory> | null;
|
|
90
|
+
audio: NormalizedFeature<AudioInput> | null;
|
|
91
|
+
/** Resolved recording-level localize config (languages/mode/locales). */
|
|
92
|
+
recordingLocalize: ResolvedRecordingLocalize;
|
|
93
|
+
};
|
|
94
|
+
/** The recording-level localize config after registration-time resolution. */
|
|
95
|
+
export type ResolvedRecordingLocalize = {
|
|
96
|
+
/** Every language this video records (the resolved set). */
|
|
97
|
+
languages: string[];
|
|
98
|
+
/**
|
|
99
|
+
* Every language this video *defines* (the full code-defined / web-owned set),
|
|
100
|
+
* independent of the `--languages` render filter. `languages` is the subset
|
|
101
|
+
* actually rendered this run; `availableLanguages` is the complete set so the
|
|
102
|
+
* app knows which languages exist even when only some were rendered. A render
|
|
103
|
+
* restricted to `--languages fr` still reports `de`, `en`, ... here, so the app
|
|
104
|
+
* does not treat them as removed-from-code.
|
|
105
|
+
*/
|
|
106
|
+
availableLanguages: string[];
|
|
107
|
+
mode: LocalizeMode;
|
|
108
|
+
browserLocale: boolean;
|
|
109
|
+
locales?: Partial<Record<Lang, string>>;
|
|
110
|
+
/** Whether the set is owned by the web app (`video.languages(studio())`). */
|
|
111
|
+
studioOwned: boolean;
|
|
112
|
+
/** Studio-owned set with nothing selected yet: record for metadata, do not render. */
|
|
113
|
+
pending: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Whether the languages were explicitly declared (via `video.languages(...)`,
|
|
116
|
+
* `'studio'`, or per-feature keys) rather than the implicit `['en']` default. A
|
|
117
|
+
* plain video with no language info stays language-agnostic (no `[lang]` tag).
|
|
118
|
+
*/
|
|
119
|
+
explicit: boolean;
|
|
43
120
|
};
|
|
44
121
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
122
|
+
* Resolve the recorded language set at registration time. Priority:
|
|
123
|
+
* 1. `video.languages(studio())` -> web-owned: the UNION of the web's current
|
|
124
|
+
* selection (`requestedLanguages`, injected at record time), the `studioSeed`
|
|
125
|
+
* (`studio(['en', ...])`), and the per-feature language keys defined in code.
|
|
126
|
+
* Empty (none anywhere) => pending.
|
|
127
|
+
* 2. explicit `video.languages([...])`.
|
|
128
|
+
* 3. union of per-feature language keys (e.g. `narration({ fr })` -> French).
|
|
129
|
+
* 4. default `['en']`.
|
|
130
|
+
* The `requestedLanguages` filter (CLI / studio injection) intersects 2-4; for the
|
|
131
|
+
* web-owned set (1) it is unioned in instead, since the web only adds languages.
|
|
132
|
+
*/
|
|
133
|
+
export declare function resolveRecordingLocalize(state: BuilderState, requestedLanguages: string[] | null): ResolvedRecordingLocalize;
|
|
134
|
+
/**
|
|
135
|
+
* Expand the fan-out specs into the concrete list of Playwright tests to
|
|
136
|
+
* register. Pure and exported for testing.
|
|
47
137
|
*
|
|
48
|
-
* -
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* a shared recording.
|
|
52
|
-
* -
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* per language unless `browserLocale` is `false`.
|
|
138
|
+
* - A single resolved language (default, or one inferred/declared) yields one
|
|
139
|
+
* language-agnostic test (`language: null`).
|
|
140
|
+
* - `'shared'` mode yields one test carrying every language (overdubbed at
|
|
141
|
+
* render); the `--languages` filter does not split a shared recording.
|
|
142
|
+
* - `'per-language'` mode yields one test per resolved language.
|
|
143
|
+
* - A studio-owned set with nothing selected yet yields one pending test that
|
|
144
|
+
* records (so its schema reaches the backend) but renders nothing.
|
|
56
145
|
*/
|
|
57
146
|
export declare function expandRegistrations(params: {
|
|
58
147
|
baseTitle: string;
|
|
59
|
-
|
|
60
|
-
studio: StudioDeclaration | null;
|
|
61
|
-
eachVariants: EachVariant[] | null;
|
|
148
|
+
state: BuilderState;
|
|
62
149
|
requestedLanguages: string[] | null;
|
|
63
150
|
}): Registration[];
|
|
64
151
|
type TestCall = {
|
|
@@ -77,138 +164,144 @@ type RegistrarTest = TestCall & {
|
|
|
77
164
|
/** Converts a union type to an intersection: `A | B` -> `A & B`. */
|
|
78
165
|
type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
79
166
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
167
|
+
* The content names declared by a {@link FeatureArg}. For a Studio marker
|
|
168
|
+
* (`studio([...])`/`studio({...})`) the declared names (or the seed's names); for
|
|
169
|
+
* objects, the union of content-major top-level keys (those that are not language
|
|
170
|
+
* codes or `default`) and the language-major inner keys.
|
|
84
171
|
*/
|
|
85
|
-
type
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
} ?
|
|
172
|
+
type LangKey = Lang | 'default';
|
|
173
|
+
type LangMajorNamesOf<A> = NonNullable<{
|
|
174
|
+
[K in keyof A & LangKey]: A[K] extends Record<string, unknown> ? Extract<keyof A[K], string> : never;
|
|
175
|
+
}[keyof A & LangKey]>;
|
|
176
|
+
/** Names declared by a Studio marker's `names` tuple. */
|
|
177
|
+
type StudioNamesOf<A> = A extends {
|
|
178
|
+
readonly names: infer N;
|
|
179
|
+
} ? N extends readonly string[] ? N[number] : never : never;
|
|
180
|
+
export type FeatureNamesOf<A> = A extends {
|
|
181
|
+
readonly [STUDIO]: true;
|
|
182
|
+
} ? A extends {
|
|
183
|
+
readonly seed: infer S;
|
|
184
|
+
} ? FeatureNamesOf<S> : StudioNamesOf<A> : A extends object ? Extract<Exclude<keyof A, LangKey>, string> | LangMajorNamesOf<A> : never;
|
|
98
185
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
186
|
+
* Builds a feature's fixture controller map so each declared name is a *real*
|
|
187
|
+
* property mapped homomorphically from the object that declared it, rather than
|
|
188
|
+
* a synthesized `Record<Union, V>` entry.
|
|
189
|
+
*
|
|
190
|
+
* Why this matters: `Record<FeatureNamesOf<A>, V>` collapses the names into a
|
|
191
|
+
* string-literal union and then re-synthesizes fresh properties, which severs
|
|
192
|
+
* the link back to the literal that declared each name. An editor then has no
|
|
193
|
+
* source location to jump to, so control-clicking `narration.intro` cannot land
|
|
194
|
+
* on the `intro:` line. A homomorphic map (`[K in keyof Src]`) keeps each
|
|
195
|
+
* property's declaration symbol, which is exactly what "Go to Definition"
|
|
196
|
+
* follows. The `-readonly`/`-?` modifiers drop the modifiers that `const`
|
|
197
|
+
* inference adds to the source literal, so the resolved value type stays
|
|
198
|
+
* identical to the old `Record` form (only navigability is gained).
|
|
199
|
+
*
|
|
200
|
+
* The blank Studio form (`studio([...])`) has no declaring object in code (its
|
|
201
|
+
* content lives in the web app), so it keeps the plain `Record` mapping and is not
|
|
202
|
+
* navigable. A seeded Studio form (`studio({...})`) recurses into its seed object,
|
|
203
|
+
* so it stays navigable like the content-major form.
|
|
103
204
|
*/
|
|
104
|
-
type
|
|
105
|
-
[
|
|
205
|
+
type ContentMajorControllers<A, V> = {
|
|
206
|
+
-readonly [K in keyof A as K extends LangKey ? never : Extract<K, string>]-?: V;
|
|
106
207
|
};
|
|
208
|
+
type LangMajorControllers<A, V> = UnionToIntersection<{
|
|
209
|
+
[L in Extract<keyof A, LangKey>]: A[L] extends Record<string, unknown> ? {
|
|
210
|
+
-readonly [K in keyof A[L] as Extract<K, string>]-?: V;
|
|
211
|
+
} : never;
|
|
212
|
+
}[Extract<keyof A, LangKey>]>;
|
|
213
|
+
type FeatureControllers<A, V> = A extends {
|
|
214
|
+
readonly [STUDIO]: true;
|
|
215
|
+
} ? A extends {
|
|
216
|
+
readonly seed: infer S;
|
|
217
|
+
} ? FeatureControllers<S, V> : Record<StudioNamesOf<A>, V> : [Extract<Exclude<keyof A, LangKey>, string>] extends [never] ? LangMajorControllers<A, V> : ContentMajorControllers<A, V>;
|
|
107
218
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
narration: infer M;
|
|
114
|
-
} ? {
|
|
115
|
-
narration: EnforceIdenticalKeys<M, LocalizeNarrationValue>;
|
|
116
|
-
} : object) & (S extends {
|
|
117
|
-
text: infer T;
|
|
118
|
-
} ? {
|
|
119
|
-
text: EnforceIdenticalKeys<T, string>;
|
|
120
|
-
} : object);
|
|
121
|
-
type NarrationOverrideFor<S> = [CueNamesOf<S>] extends [never] ? NarrationMarkers : Record<CueNamesOf<S>, NarrationCue>;
|
|
122
|
-
/**
|
|
123
|
-
* The `text` fixture type for a spec: every field is a `string`. A seeded field
|
|
124
|
-
* carries its per-language value; a Studio-managed field (`studio.text`) is the
|
|
125
|
-
* empty string until it is set in Studio (the recording still succeeds). In
|
|
126
|
-
* `shared` mode there is no per-language injection, so seeded fields are also
|
|
127
|
-
* empty until provided.
|
|
219
|
+
* Overlays mirror {@link FeatureControllers} but resolve each name's controller
|
|
220
|
+
* type from its declared input (`OverlayControllerFor<A[K]>`), so the precise
|
|
221
|
+
* controller variant is preserved alongside navigability. Language-major and
|
|
222
|
+
* Studio names fall back to the broad {@link OverlayController}, matching the
|
|
223
|
+
* prior behavior.
|
|
128
224
|
*/
|
|
129
|
-
type
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
type
|
|
143
|
-
narration:
|
|
144
|
-
}
|
|
145
|
-
type
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
type
|
|
149
|
-
overlays:
|
|
150
|
-
}
|
|
151
|
-
type
|
|
152
|
-
audio:
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
* names so a typo is a compile error. Keys absent from `Args` (e.g. `narration`
|
|
158
|
-
* on a screenshot) or kinds not declared are not added. When combined with
|
|
159
|
-
* `localize(...)`, the per-fixture records intersect, unioning the names.
|
|
160
|
-
*/
|
|
161
|
-
type StudioOverrides<Args, SD> = ('narration' extends keyof Args ? [StudioNarrationNamesOf<SD>] extends [never] ? object : {
|
|
162
|
-
narration: Record<StudioNarrationNamesOf<SD>, NarrationCue>;
|
|
163
|
-
} : object) & ('text' extends keyof Args ? [StudioTextNamesOf<SD>] extends [never] ? object : {
|
|
164
|
-
text: Record<StudioTextNamesOf<SD>, string>;
|
|
165
|
-
} : object) & ('overlays' extends keyof Args ? [StudioOverlayNamesOf<SD>] extends [never] ? object : {
|
|
166
|
-
overlays: Record<StudioOverlayNamesOf<SD>, OverlayController>;
|
|
167
|
-
} : object) & ('audio' extends keyof Args ? [StudioAudioNamesOf<SD>] extends [never] ? object : {
|
|
168
|
-
audio: Record<StudioAudioNamesOf<SD>, AudioController>;
|
|
169
|
-
} : object);
|
|
170
|
-
type MergeArgs<Args, O> = Omit<Args, keyof O> & O;
|
|
225
|
+
type OverlayContentMajorControllers<A> = {
|
|
226
|
+
-readonly [K in keyof A as K extends LangKey ? never : Extract<K, string>]-?: OverlayControllerFor<A[K]>;
|
|
227
|
+
};
|
|
228
|
+
type OverlayLangMajorControllers<A> = UnionToIntersection<{
|
|
229
|
+
[L in Extract<keyof A, LangKey>]: A[L] extends Record<string, unknown> ? {
|
|
230
|
+
-readonly [K in keyof A[L] as Extract<K, string>]-?: OverlayController;
|
|
231
|
+
} : never;
|
|
232
|
+
}[Extract<keyof A, LangKey>]>;
|
|
233
|
+
type OverlayControllers<A> = A extends {
|
|
234
|
+
readonly [STUDIO]: true;
|
|
235
|
+
} ? A extends {
|
|
236
|
+
readonly seed: infer S;
|
|
237
|
+
} ? OverlayControllers<S> : Record<StudioNamesOf<A>, OverlayController> : [Extract<Exclude<keyof A, LangKey>, string>] extends [never] ? OverlayLangMajorControllers<A> : OverlayContentMajorControllers<A>;
|
|
238
|
+
type NarrationOverrideFor<Args, A> = 'narration' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
|
|
239
|
+
narration: FeatureControllers<A, NarrationCue>;
|
|
240
|
+
} : object;
|
|
241
|
+
type ValuesOverrideFor<Args, A> = 'values' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
|
|
242
|
+
values: FeatureControllers<A, string>;
|
|
243
|
+
} : object;
|
|
244
|
+
type OverlayOverrideFor<Args, A> = 'overlays' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
|
|
245
|
+
overlays: OverlayControllers<A>;
|
|
246
|
+
} : object;
|
|
247
|
+
type AudioOverrideFor<Args, A> = 'audio' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
|
|
248
|
+
audio: FeatureControllers<A, AudioController>;
|
|
249
|
+
} : object;
|
|
250
|
+
type MergeArgs<Args, O> = {
|
|
251
|
+
[K in keyof Args | keyof O]: K extends keyof O ? O[K] : K extends keyof Args ? Args[K] : never;
|
|
252
|
+
};
|
|
171
253
|
type BodyFn<Args> = (args: Args, testInfo: TestInfo) => void | Promise<void>;
|
|
172
254
|
/**
|
|
173
|
-
* A chainable fan-out builder. Callable to register the test(s), and exposes
|
|
174
|
-
* `.
|
|
175
|
-
* accumulates the typed fixture overrides
|
|
176
|
-
* `narration`/`
|
|
255
|
+
* A chainable fan-out builder. Callable to register the test(s), and exposes the
|
|
256
|
+
* per-feature declaration methods plus `.languages()` / `.each()` to refine the
|
|
257
|
+
* fan-out. `O` accumulates the typed fixture overrides so the body sees
|
|
258
|
+
* `narration`/`values`/`overlays`/`audio` typed to the declared names.
|
|
177
259
|
*/
|
|
178
260
|
type BuilderTerminal<Args, O> = {
|
|
179
261
|
(title: string, body: BodyFn<MergeArgs<Args, O>>): void;
|
|
180
262
|
(title: string, details: TestDetails, body: BodyFn<MergeArgs<Args, O>>): void;
|
|
181
263
|
};
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
264
|
+
/** The fixture keys a medium supports (videos: all; screenshots: values+overlays). */
|
|
265
|
+
export type FeatureKey = 'narration' | 'values' | 'overlays' | 'audio';
|
|
266
|
+
export interface MediaBuilder<Args, O = object> extends BuilderTerminal<Args, O> {
|
|
267
|
+
/** Declare narration cues: Studio-owned (`studio([...])`) or code values (object). */
|
|
268
|
+
narration<const A extends FeatureArg<LocalizeNarrationValue>>(arg: A): MediaBuilder<Args, O & NarrationOverrideFor<Args, A>>;
|
|
269
|
+
/** Declare on-screen values fields. */
|
|
270
|
+
values<const A extends FeatureArg<string>>(arg: A): MediaBuilder<Args, O & ValuesOverrideFor<Args, A>>;
|
|
271
|
+
/** Declare overlays. */
|
|
272
|
+
overlays<const A extends FeatureArg<OverlayInputOrFactory>>(arg: A): MediaBuilder<Args, O & OverlayOverrideFor<Args, A>>;
|
|
273
|
+
/** Declare background-audio tracks. */
|
|
274
|
+
audio<const A extends FeatureArg<AudioInput>>(arg: A): MediaBuilder<Args, O & AudioOverrideFor<Args, A>>;
|
|
275
|
+
/** Declare the recorded language set / capture mode. */
|
|
276
|
+
languages(arg: LanguagesArg): MediaBuilder<Args, O>;
|
|
191
277
|
/** Produce a separate video per variant (viewport, theme, ...). */
|
|
192
|
-
each(variants: EachVariant[]):
|
|
193
|
-
/** Register the localized test(s) with `test.only`. */
|
|
278
|
+
each(variants: EachVariant[]): MediaBuilder<Args, O>;
|
|
194
279
|
only: BuilderTerminal<Args, O>;
|
|
195
|
-
/** Register the localized test(s) with `test.skip`. */
|
|
196
280
|
skip: BuilderTerminal<Args, O>;
|
|
197
|
-
/** Register the localized test(s) with `test.fixme`. */
|
|
198
281
|
fixme: BuilderTerminal<Args, O>;
|
|
199
|
-
/** Register the localized test(s) with `test.fail`. */
|
|
200
282
|
fail: BuilderTerminal<Args, O>;
|
|
201
283
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
284
|
+
/** Backwards-compatible alias used by the video/screenshot entry points. */
|
|
285
|
+
export type VideoBuilder<Args, O = object> = MediaBuilder<Args, O>;
|
|
286
|
+
export type BuilderState = {
|
|
287
|
+
narration: NormalizedFeature<LocalizeNarrationValue> | null;
|
|
288
|
+
values: NormalizedFeature<string> | null;
|
|
289
|
+
overlays: NormalizedFeature<OverlayInputOrFactory> | null;
|
|
290
|
+
audio: NormalizedFeature<AudioInput> | null;
|
|
291
|
+
recordingLocalize: RecordingLocalize | null;
|
|
205
292
|
eachVariants: EachVariant[] | null;
|
|
293
|
+
/** Fixtures this medium supports; declaring an unsupported one throws. */
|
|
294
|
+
features: ReadonlySet<FeatureKey>;
|
|
206
295
|
};
|
|
296
|
+
/** The full set of feature fixtures for videos. */
|
|
297
|
+
export declare const VIDEO_FEATURES: ReadonlySet<FeatureKey>;
|
|
298
|
+
/** Stills are silent: only values + overlays. */
|
|
299
|
+
export declare const SCREENSHOT_FEATURES: ReadonlySet<FeatureKey>;
|
|
207
300
|
/**
|
|
208
|
-
* Create a fan-out builder bound to a registrar test instance. `
|
|
209
|
-
*
|
|
210
|
-
*
|
|
301
|
+
* Create a fan-out builder bound to a registrar test instance. `Args` is the
|
|
302
|
+
* medium's fixture arg type (video/screenshot); `features` selects which
|
|
303
|
+
* per-feature methods are valid for the medium.
|
|
211
304
|
*/
|
|
212
|
-
export declare function createVideoBuilder<Args>(test: RegistrarTest, state?: BuilderState):
|
|
213
|
-
export {};
|
|
305
|
+
export declare function createVideoBuilder<Args>(test: RegistrarTest, features?: ReadonlySet<FeatureKey>, state?: BuilderState): MediaBuilder<Args>;
|
|
306
|
+
export type { VoiceConfig };
|
|
214
307
|
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
|