Skip to content

Commit fe05df0

Browse files
cjpillsburyclaude
andcommitted
fix(spf): finish post-rebase single-slot reconciliation
Followups after rebasing the discrete-signals work onto main, where the squash-merge collapsed `presentationUrl` back into a single `presentation` slot. The conflict-resolution pass restored most of the slot semantics, but a few stale references slipped through where the files weren't textual conflicts: - Three behaviors (`setupMediaSource`, `trackPlaybackInitiated`, `resolvePresentation`) had `'presentationUrl'` listed in their `defineBehavior` `stateKeys` arrays — replaced with `'presentation'` to match the post-revert state shape (resolvePresentation also drops the now-redundant key). - Test `makeState` factories typed the presentation signal as `signal<Presentation | undefined>(...)` even though the input is `MaybeResolvedPresentation` — switched to the lifecycle type and added imports where missing. Two files (`load-segments`, `sync-text-tracks`) only used the strict type in the import, so it was dropped. - `resolve-presentation.test.ts` had three contradictory assertions left over from a mechanical conversion (asserting the slot is both `undefined` and equal to a specific URL) — narrowed to "URL is present, but no `id` yet" so the unresolved state is checked precisely. - `expose-engine-inputs.test.ts` still wrote `presentationUrl` into the test fixture; switched to `presentation: { url }` and the new `signal<MaybeResolvedPresentation | undefined>` typing for the fixture state. After this, `pnpm -F @videojs/spf build` and `pnpm -F @videojs/spf test` are both clean — 49 test files, 759 tests passing, 12 skipped, no type errors, no unhandled errors. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 98b944c commit fe05df0

16 files changed

Lines changed: 48 additions & 31 deletions

packages/spf/src/playback/behaviors/dom/setup-mediasource.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ function setupMediaSourceSetup({
8888
}
8989

9090
export const setupMediaSource = defineBehavior({
91-
stateKeys: ['presentationUrl', 'mediaSourceReadyState'],
91+
stateKeys: ['presentation', 'mediaSourceReadyState'],
9292
contextKeys: ['mediaElement', 'mediaSource'],
9393
setup: setupMediaSourceSetup,
9494
});

packages/spf/src/playback/behaviors/dom/tests/end-of-stream.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { describe, expect, it, vi } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
4-
import type { Presentation, Segment, VideoTrack } from '../../../../media/types';
4+
import type { MaybeResolvedPresentation, Presentation, Segment, VideoTrack } from '../../../../media/types';
55
import { createSourceBufferActor, type SourceBufferActor } from '../../../actors/dom/source-buffer';
66
import {
77
canEndStream,
@@ -14,7 +14,7 @@ import {
1414

1515
function makeState(initial: EndOfStreamState = {}): StateSignals<EndOfStreamState> {
1616
return {
17-
presentation: signal<Presentation | undefined>(initial.presentation),
17+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
1818
mediaSourceReadyState: signal<MediaSource['readyState'] | undefined>(initial.mediaSourceReadyState),
1919
selectedVideoTrackId: signal<string | undefined>(initial.selectedVideoTrackId),
2020
selectedAudioTrackId: signal<string | undefined>(initial.selectedAudioTrackId),

packages/spf/src/playback/behaviors/dom/tests/load-segments-track-switch.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
44
import type { BandwidthState } from '../../../../media/abr/bandwidth-estimator';
5-
import type { Presentation, VideoSelectionSet } from '../../../../media/types';
5+
import type { MaybeResolvedPresentation, Presentation, VideoSelectionSet } from '../../../../media/types';
66
import { createSourceBufferActor, type SourceBufferActor } from '../../../actors/dom/source-buffer';
77
import type { SegmentLoadingContext, SegmentLoadingState } from '../load-segments';
88
import { loadVideoSegments } from '../load-segments';
@@ -25,7 +25,7 @@ vi.mock('../../../../media/dom/mse/buffer-flusher', () => ({
2525

2626
function makeState(initial: SegmentLoadingState = {}): StateSignals<SegmentLoadingState> {
2727
return {
28-
presentation: signal<Presentation | undefined>(initial.presentation),
28+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
2929
preload: signal<string | undefined>(initial.preload),
3030
bandwidthState: signal<BandwidthState | undefined>(initial.bandwidthState),
3131
currentTime: signal<number | undefined>(initial.currentTime),

packages/spf/src/playback/behaviors/dom/tests/load-segments.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { describe, expect, it, vi } from 'vitest';
66
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
77
import { signal } from '../../../../core/signals/primitives';
88
import type { BandwidthState } from '../../../../media/abr/bandwidth-estimator';
9-
import type { Presentation, Segment } from '../../../../media/types';
9+
import type { MaybeResolvedPresentation, Segment } from '../../../../media/types';
1010
import { createSourceBufferActor, type SourceBufferActor } from '../../../actors/dom/source-buffer';
1111
import {
1212
loadAudioSegments,
@@ -17,7 +17,7 @@ import {
1717

1818
function makeState(initial: SegmentLoadingState = {}): StateSignals<SegmentLoadingState> {
1919
return {
20-
presentation: signal<Presentation | undefined>(initial.presentation),
20+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
2121
preload: signal<string | undefined>(initial.preload),
2222
bandwidthState: signal<BandwidthState | undefined>(initial.bandwidthState),
2323
currentTime: signal<number | undefined>(initial.currentTime),

packages/spf/src/playback/behaviors/dom/tests/load-text-track-cues.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
44
import { resolveVttSegment } from '../../../../media/dom/text/resolve-vtt-segment';
5-
import type { Cue, MediaElementWithTextTracks, Presentation, Segment, TextTrack } from '../../../../media/types';
5+
import type {
6+
Cue,
7+
MaybeResolvedPresentation,
8+
MediaElementWithTextTracks,
9+
Presentation,
10+
Segment,
11+
TextTrack,
12+
} from '../../../../media/types';
613
import type { TextTrackSegmentLoaderActor } from '../../../actors/text-track-segment-loader';
714
import type { TextTracksActor } from '../../../actors/text-tracks';
815
import {
@@ -32,7 +39,7 @@ vi.mock('../../../../media/dom/text/resolve-vtt-segment', () => ({
3239
function makeState(initial: TextTrackCueLoadingState = {}): StateSignals<TextTrackCueLoadingState> {
3340
return {
3441
selectedTextTrackId: signal<string | undefined>(initial.selectedTextTrackId),
35-
presentation: signal<Presentation | undefined>(initial.presentation),
42+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
3643
currentTime: signal<number | undefined>(initial.currentTime),
3744
};
3845
}

packages/spf/src/playback/behaviors/dom/tests/setup-sourcebuffer.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
4-
import type { AudioTrack, Presentation, VideoTrack } from '../../../../media/types';
4+
import type { AudioTrack, MaybeResolvedPresentation, Presentation, VideoTrack } from '../../../../media/types';
55
import type { SourceBufferActor } from '../../../actors/dom/source-buffer';
66
import {
77
buildMimeCodec,
@@ -139,7 +139,7 @@ describe('buildMimeCodec', () => {
139139

140140
function makeState(initial: SourceBufferState = {}): StateSignals<SourceBufferState> {
141141
return {
142-
presentation: signal<Presentation | undefined>(initial.presentation),
142+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
143143
selectedVideoTrackId: signal<string | undefined>(initial.selectedVideoTrackId),
144144
selectedAudioTrackId: signal<string | undefined>(initial.selectedAudioTrackId),
145145
selectedTextTrackId: signal<string | undefined>(initial.selectedTextTrackId),

packages/spf/src/playback/behaviors/dom/tests/sync-text-tracks.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { describe, expect, it } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
4-
import type { Presentation } from '../../../../media/types';
4+
import type { MaybeResolvedPresentation } from '../../../../media/types';
55
import { syncTextTracks, type TextTrackSyncContext, type TextTrackSyncState } from '../sync-text-tracks';
66

77
function makePresentation(tracks: Array<{ id: string; kind?: string; language?: string }>) {
@@ -35,7 +35,7 @@ function makePresentation(tracks: Array<{ id: string; kind?: string; language?:
3535

3636
function makeState(initial: TextTrackSyncState = {}): StateSignals<TextTrackSyncState> {
3737
return {
38-
presentation: signal<Presentation | undefined>(initial.presentation),
38+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
3939
selectedTextTrackId: signal<string | undefined>(initial.selectedTextTrackId),
4040
};
4141
}

packages/spf/src/playback/behaviors/dom/tests/update-duration.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { describe, expect, it, vi } from 'vitest';
22
import type { ContextSignals, StateSignals } from '../../../../core/composition/create-composition';
33
import { signal } from '../../../../core/signals/primitives';
4-
import type { Presentation } from '../../../../media/types';
4+
import type { MaybeResolvedPresentation, Presentation } from '../../../../media/types';
55
import {
66
canUpdateDuration,
77
type DurationUpdateContext,
@@ -12,7 +12,7 @@ import {
1212

1313
function makeState(initial: DurationUpdateState = {}): StateSignals<DurationUpdateState> {
1414
return {
15-
presentation: signal<Presentation | undefined>(initial.presentation),
15+
presentation: signal<MaybeResolvedPresentation | undefined>(initial.presentation),
1616
mediaSourceReadyState: signal<MediaSource['readyState'] | undefined>(initial.mediaSourceReadyState),
1717
};
1818
}

packages/spf/src/playback/behaviors/dom/track-playback-initiated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ function trackPlaybackInitiatedSetup({
110110
}
111111

112112
export const trackPlaybackInitiated = defineBehavior({
113-
stateKeys: ['playbackInitiated', 'presentationUrl'],
113+
stateKeys: ['playbackInitiated', 'presentation'],
114114
contextKeys: ['mediaElement'],
115115
setup: trackPlaybackInitiatedSetup,
116116
});

packages/spf/src/playback/behaviors/resolve-presentation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ function resolvePresentationSetup({
116116
}
117117

118118
export const resolvePresentation = defineBehavior({
119-
stateKeys: ['presentationUrl', 'presentation', 'preload', 'playbackInitiated'],
119+
stateKeys: ['presentation', 'preload', 'playbackInitiated'],
120120
contextKeys: [],
121121
setup: resolvePresentationSetup,
122122
});

0 commit comments

Comments
 (0)