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
@@ -1,16 +1,15 @@
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 { NarrationMarkers, TextValues } from './localizeRuntime.js';
7
- import { type LocalizeSpec, type LocalizeNarrationValue, type NormalizedLocalize } from './localize.js';
8
- import { type StudioDeclaration } from './studio.js';
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
9
  /**
10
10
  * One variant in a generic `video.each(...)` fan-out. Each variant produces a
11
11
  * separate video (its own identity and stored history), differing only in its
12
- * recording options and/or forwarded Playwright `use` options (e.g. a viewport
13
- * via `recordOptions.aspectRatio`, or a theme via `use.colorScheme`).
12
+ * recording options and/or forwarded Playwright `use` options.
14
13
  */
15
14
  export type EachVariant = {
16
15
  /** Stable label appended to the video name, e.g. `'mobile'` or `'dark'`. */
@@ -20,6 +19,26 @@ export type EachVariant = {
20
19
  /** Forwarded Playwright `use` options for this variant, e.g. `{ colorScheme: 'dark' }`. */
21
20
  use?: Record<string, unknown>;
22
21
  };
22
+ /** Capture strategy across languages. */
23
+ export type LocalizeMode = 'shared' | 'per-language';
24
+ /**
25
+ * Recording-level localization config, declared via `video.languages(...)`. It
26
+ * drives the registration-time fan-out (one Playwright test per language), so it
27
+ * lives on a builder method rather than in `recordOptions` (a run-time option).
28
+ *
29
+ * `languages` may be `'studio'`, meaning the set is owned by the ScreenCI web app
30
+ * and injected at record time through the same channel as `--languages`. When the
31
+ * web has selected none yet, the set is empty and the render stays pending (the
32
+ * recording still runs so its declared schema reaches the backend to be filled).
33
+ */
34
+ export type RecordingLocalize = {
35
+ languages: readonly Lang[] | 'studio';
36
+ mode?: LocalizeMode;
37
+ locales?: Partial<Record<Lang, string>>;
38
+ browserLocale?: boolean;
39
+ };
40
+ /** The argument accepted by `video.languages(...)`. */
41
+ export type LanguagesArg = 'studio' | readonly Lang[] | RecordingLocalize;
23
42
  /** A single Playwright test to register, fully resolved from the fan-out specs. */
24
43
  export type Registration = {
25
44
  /** Label for the wrapping `describe` block (scopes per-test `use` options). */
@@ -28,7 +47,7 @@ export type Registration = {
28
47
  leafTitle: string;
29
48
  /** Grouping key written to `metadata.videoName`; shared across a video's languages. */
30
49
  videoName: string;
31
- /** Active language for this pass, or `null` in shared / no-localize mode. */
50
+ /** Active language for this pass, or `null` in shared / single-language mode. */
32
51
  language: string | null;
33
52
  /** Browser locale for this pass, or `null` to leave the default. */
34
53
  locale: string | null;
@@ -36,29 +55,57 @@ export type Registration = {
36
55
  recordOptions: Partial<RecordOptions> | null;
37
56
  /** Forwarded Playwright `use` options for this pass, or `null` for none. */
38
57
  use: Record<string, unknown> | null;
39
- /** The normalized localize spec for this video, or `null` when not localized. */
40
- localize: NormalizedLocalize | null;
41
- /** The studio declaration for this video, or `null` when not studio-managed. */
42
- studio: StudioDeclaration | null;
58
+ /** Per-feature declarations carried into the fixtures. */
59
+ narration: NormalizedFeature<LocalizeNarrationValue> | null;
60
+ text: NormalizedFeature<string> | null;
61
+ overlays: NormalizedFeature<OverlayInputOrFactory> | null;
62
+ audio: NormalizedFeature<AudioInput> | null;
63
+ /** Resolved recording-level localize config (languages/mode/locales). */
64
+ recordingLocalize: ResolvedRecordingLocalize;
43
65
  };
66
+ /** The recording-level localize config after registration-time resolution. */
67
+ export type ResolvedRecordingLocalize = {
68
+ /** Every language this video records (the resolved set). */
69
+ languages: string[];
70
+ mode: LocalizeMode;
71
+ browserLocale: boolean;
72
+ locales?: Partial<Record<Lang, string>>;
73
+ /** Whether the set is owned by the web app (`video.languages('studio')`). */
74
+ studioOwned: boolean;
75
+ /** Studio-owned set with nothing selected yet: record for metadata, do not render. */
76
+ pending: boolean;
77
+ /**
78
+ * Whether the languages were explicitly declared (via `video.languages(...)`,
79
+ * `'studio'`, or per-feature keys) rather than the implicit `['en']` default. A
80
+ * plain video with no language info stays language-agnostic (no `[lang]` tag).
81
+ */
82
+ explicit: boolean;
83
+ };
84
+ /**
85
+ * Resolve the recorded language set at registration time. Priority:
86
+ * 1. `video.languages('studio')` -> the web-owned set, injected via the
87
+ * `--languages` channel (`requestedLanguages`); empty => pending.
88
+ * 2. explicit `video.languages([...])`.
89
+ * 3. union of per-feature language keys (e.g. `narration({ fr })` -> French).
90
+ * 4. default `['en']`.
91
+ * The `requestedLanguages` filter (CLI / studio injection) intersects 2-4.
92
+ */
93
+ export declare function resolveRecordingLocalize(state: BuilderState, requestedLanguages: string[] | null): ResolvedRecordingLocalize;
44
94
  /**
45
- * Expand the localize / each fan-out specs into the concrete list of Playwright
46
- * tests to register. Pure and exported for testing.
95
+ * Expand the fan-out specs into the concrete list of Playwright tests to
96
+ * register. Pure and exported for testing.
47
97
  *
48
- * - With no `localize`, each variant yields a single language-agnostic test.
49
- * - In `'shared'` mode, each variant yields one test that carries every language
50
- * (narration is overdubbed at render); the `--languages` filter does not split
51
- * a shared recording.
52
- * - In `'per-language'` mode, each variant yields one test per language,
53
- * intersected with the `--languages` filter when present. A variant whose
54
- * languages are entirely filtered out yields nothing. The browser locale is set
55
- * per language unless `browserLocale` is `false`.
98
+ * - A single resolved language (default, or one inferred/declared) yields one
99
+ * language-agnostic test (`language: null`).
100
+ * - `'shared'` mode yields one test carrying every language (overdubbed at
101
+ * render); the `--languages` filter does not split a shared recording.
102
+ * - `'per-language'` mode yields one test per resolved language.
103
+ * - A studio-owned set with nothing selected yet yields one pending test that
104
+ * records (so its schema reaches the backend) but renders nothing.
56
105
  */
57
106
  export declare function expandRegistrations(params: {
58
107
  baseTitle: string;
59
- localize: NormalizedLocalize | null;
60
- studio: StudioDeclaration | null;
61
- eachVariants: EachVariant[] | null;
108
+ state: BuilderState;
62
109
  requestedLanguages: string[] | null;
63
110
  }): Registration[];
64
111
  type TestCall = {
@@ -74,141 +121,87 @@ type RegistrarTest = TestCall & {
74
121
  fixme: TestCall;
75
122
  fail: TestCall;
76
123
  };
77
- /** Converts a union type to an intersection: `A | B` -> `A & B`. */
78
- type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
79
- /**
80
- * Union of every inner key across all languages of a seeded map `M` (e.g. the
81
- * cue names of `{ en: { intro, save }, fi: { intro, save } }`). Uses each
82
- * language's key set before intersecting, so each language must cover the union
83
- * (the identical-keys guarantee, enforced via {@link EnforceIdenticalKeys}).
84
- */
85
- type SeededKeys<M> = [M] extends [object] ? Extract<keyof UnionToIntersection<{
86
- [L in keyof M]-?: NonNullable<M[L]> extends Record<string, unknown> ? Record<keyof NonNullable<M[L]> & string, unknown> : never;
87
- }[keyof M]>, string> : never;
88
- /** Studio-managed names from a `video.studio({...})` name list. */
89
- type StudioNamesOf<N> = N extends readonly string[] ? N[number] : never;
90
- /** Seeded cue names (declared in the per-language `narration` map). */
91
- type CueNamesOf<S> = S extends {
92
- narration: infer M;
93
- } ? SeededKeys<M> : never;
94
- /** Seeded `text` field names (declared in the per-language `text` map). */
95
- type FieldNamesOf<S> = S extends {
96
- text: infer T;
97
- } ? SeededKeys<T> : never;
98
124
  /**
99
- * Constrains a seeded map so every language declares the same key set: each
100
- * language is required to provide every key that appears in any language. A
101
- * missing key fails to compile; an unrelated extra key is not part of the union,
102
- * so it is rejected as excess.
125
+ * The content names declared by a {@link FeatureArg}. Array elements for the
126
+ * studio form; for objects, the union of content-major top-level keys (those that
127
+ * are not language codes or `default`) and the language-major inner keys.
103
128
  */
104
- type EnforceIdenticalKeys<M, Value> = {
105
- [L in keyof M]: Record<SeededKeys<M>, Value>;
129
+ type LangKey = Lang | 'default';
130
+ type LangMajorNamesOf<A> = NonNullable<{
131
+ [K in keyof A & LangKey]: A[K] extends Record<string, unknown> ? Extract<keyof A[K], string> : never;
132
+ }[keyof A & LangKey]>;
133
+ export type FeatureNamesOf<A> = A extends readonly string[] ? A[number] : A extends object ? Extract<Exclude<keyof A, LangKey>, string> | LangMajorNamesOf<A> : never;
134
+ /** The overlay controller type for a single declared name. */
135
+ type OverlayControllerForName<A, K extends string> = A extends readonly string[] ? OverlayController : K extends keyof A ? OverlayControllerFor<A[K]> : OverlayController;
136
+ type NarrationOverrideFor<Args, A> = 'narration' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
137
+ narration: Record<FeatureNamesOf<A>, NarrationCue>;
138
+ } : object;
139
+ type TextOverrideFor<Args, A> = 'text' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
140
+ text: Record<FeatureNamesOf<A>, string>;
141
+ } : object;
142
+ type OverlayOverrideFor<Args, A> = 'overlays' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
143
+ overlays: {
144
+ [K in FeatureNamesOf<A>]: OverlayControllerForName<A, K>;
145
+ };
146
+ } : object;
147
+ type AudioOverrideFor<Args, A> = 'audio' extends keyof Args ? [FeatureNamesOf<A>] extends [never] ? object : {
148
+ audio: Record<FeatureNamesOf<A>, AudioController>;
149
+ } : object;
150
+ type MergeArgs<Args, O> = {
151
+ [K in keyof Args | keyof O]: K extends keyof O ? O[K] : K extends keyof Args ? Args[K] : never;
106
152
  };
107
- /**
108
- * Refines a localize spec so its `narration`/`text` maps have identical keys
109
- * across languages. Intersected with the inferred spec `S` at the `.localize`
110
- * call site so a dropped per-language key is a compile error.
111
- */
112
- type ValidateLocalizeSpec<S> = (S extends {
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.
128
- */
129
- type TextOverrideFor<S> = [FieldNamesOf<S>] extends [never] ? TextValues : Record<FieldNamesOf<S>, string>;
130
- /**
131
- * The fixture arg overrides a `localize(spec)` contributes: `narration` typed to
132
- * the spec's cue names (only when the medium has narration) and `text` typed to
133
- * its field names. Keys absent from `Args` (e.g. `narration` on a screenshot)
134
- * are not added.
135
- */
136
- type LocalizeOverrides<Args, S> = ('narration' extends keyof Args ? {
137
- narration: NarrationOverrideFor<S>;
138
- } : object) & ('text' extends keyof Args ? {
139
- text: TextOverrideFor<S>;
140
- } : object);
141
- /** Studio-managed names of each kind declared in a `video.studio({...})` spec. */
142
- type StudioNarrationNamesOf<SD> = SD extends {
143
- narration: infer N;
144
- } ? StudioNamesOf<N> : never;
145
- type StudioTextNamesOf<SD> = SD extends {
146
- text: infer N;
147
- } ? StudioNamesOf<N> : never;
148
- type StudioOverlayNamesOf<SD> = SD extends {
149
- overlays: infer N;
150
- } ? StudioNamesOf<N> : never;
151
- type StudioAudioNamesOf<SD> = SD extends {
152
- audio: infer N;
153
- } ? StudioNamesOf<N> : never;
154
- /**
155
- * The fixture arg overrides a `studio(decl)` contributes: each declared name
156
- * list types its fixture (`narration`/`text`/`overlays`/`audio`) to the exact
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;
171
153
  type BodyFn<Args> = (args: Args, testInfo: TestInfo) => void | Promise<void>;
172
154
  /**
173
- * A chainable fan-out builder. Callable to register the test(s), and exposes
174
- * `.localize()` / `.each()` to refine the fan-out before the terminal call. `O`
175
- * accumulates the typed fixture overrides from `.localize(...)` so the body sees
176
- * `narration`/`text` typed to the spec's names.
155
+ * A chainable fan-out builder. Callable to register the test(s), and exposes the
156
+ * per-feature declaration methods plus `.languages()` / `.each()` to refine the
157
+ * fan-out. `O` accumulates the typed fixture overrides so the body sees
158
+ * `narration`/`text`/`overlays`/`audio` typed to the declared names.
177
159
  */
178
160
  type BuilderTerminal<Args, O> = {
179
161
  (title: string, body: BodyFn<MergeArgs<Args, O>>): void;
180
162
  (title: string, details: TestDetails, body: BodyFn<MergeArgs<Args, O>>): void;
181
163
  };
182
- export interface VideoBuilder<Args, O = object> extends BuilderTerminal<Args, O> {
183
- /** Record one localized pass per language (or one shared capture). */
184
- localize<const S extends LocalizeSpec>(spec: S & ValidateLocalizeSpec<S>): VideoBuilder<Args, O & LocalizeOverrides<Args, S>>;
185
- /**
186
- * Defer render/record options and declare Studio-managed narration, text,
187
- * overlays, and audio (configured in the ScreenCI web app). The declared name
188
- * lists type the matching fixtures to the exact names.
189
- */
190
- studio<const SD extends StudioDeclaration>(declaration: SD): VideoBuilder<Args, O & StudioOverrides<Args, SD>>;
164
+ /** The fixture keys a medium supports (videos: all; screenshots: text+overlays). */
165
+ export type FeatureKey = 'narration' | 'text' | 'overlays' | 'audio';
166
+ export interface MediaBuilder<Args, O = object> extends BuilderTerminal<Args, O> {
167
+ /** Declare narration cues: Studio-owned (array) or code values (object). */
168
+ narration<const A extends FeatureArg<LocalizeNarrationValue>>(arg: A): MediaBuilder<Args, O & NarrationOverrideFor<Args, A>>;
169
+ /** Declare on-screen text fields. */
170
+ text<const A extends FeatureArg<string>>(arg: A): MediaBuilder<Args, O & TextOverrideFor<Args, A>>;
171
+ /** Declare overlays. */
172
+ overlays<const A extends FeatureArg<OverlayInputOrFactory>>(arg: A): MediaBuilder<Args, O & OverlayOverrideFor<Args, A>>;
173
+ /** Declare background-audio tracks. */
174
+ audio<const A extends FeatureArg<AudioInput>>(arg: A): MediaBuilder<Args, O & AudioOverrideFor<Args, A>>;
175
+ /** Declare the recorded language set / capture mode. */
176
+ languages(arg: LanguagesArg): MediaBuilder<Args, O>;
191
177
  /** Produce a separate video per variant (viewport, theme, ...). */
192
- each(variants: EachVariant[]): VideoBuilder<Args, O>;
193
- /** Register the localized test(s) with `test.only`. */
178
+ each(variants: EachVariant[]): MediaBuilder<Args, O>;
194
179
  only: BuilderTerminal<Args, O>;
195
- /** Register the localized test(s) with `test.skip`. */
196
180
  skip: BuilderTerminal<Args, O>;
197
- /** Register the localized test(s) with `test.fixme`. */
198
181
  fixme: BuilderTerminal<Args, O>;
199
- /** Register the localized test(s) with `test.fail`. */
200
182
  fail: BuilderTerminal<Args, O>;
201
183
  }
202
- type BuilderState = {
203
- localize: NormalizedLocalize | null;
204
- studio: StudioDeclaration | null;
184
+ /** Backwards-compatible alias used by the video/screenshot entry points. */
185
+ export type VideoBuilder<Args, O = object> = MediaBuilder<Args, O>;
186
+ export type BuilderState = {
187
+ narration: NormalizedFeature<LocalizeNarrationValue> | null;
188
+ text: NormalizedFeature<string> | null;
189
+ overlays: NormalizedFeature<OverlayInputOrFactory> | null;
190
+ audio: NormalizedFeature<AudioInput> | null;
191
+ recordingLocalize: RecordingLocalize | null;
205
192
  eachVariants: EachVariant[] | null;
193
+ /** Fixtures this medium supports; declaring an unsupported one throws. */
194
+ features: ReadonlySet<FeatureKey>;
206
195
  };
196
+ /** The full set of feature fixtures for videos. */
197
+ export declare const VIDEO_FEATURES: ReadonlySet<FeatureKey>;
198
+ /** Stills are silent: only text + overlays. */
199
+ export declare const SCREENSHOT_FEATURES: ReadonlySet<FeatureKey>;
207
200
  /**
208
- * Create a fan-out builder bound to a registrar test instance. `video.localize`
209
- * and `video.each` are the `localize`/`each` methods of a root builder created
210
- * with this factory. `Args` is the medium's fixture arg type (video/screenshot).
201
+ * Create a fan-out builder bound to a registrar test instance. `Args` is the
202
+ * medium's fixture arg type (video/screenshot); `features` selects which
203
+ * per-feature methods are valid for the medium.
211
204
  */
212
- export declare function createVideoBuilder<Args>(test: RegistrarTest, state?: BuilderState): VideoBuilder<Args>;
213
- export {};
205
+ export declare function createVideoBuilder<Args>(test: RegistrarTest, features?: ReadonlySet<FeatureKey>, state?: BuilderState): MediaBuilder<Args>;
206
+ export type { VoiceConfig };
214
207
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}