refactor(packages): move feature presets to subpath exports (#633)

This commit is contained in:
rahim
2026-02-27 17:06:36 -08:00
committed by GitHub
parent 40606ff188
commit c92a9f914f
63 changed files with 266 additions and 187 deletions
+2 -2
View File
@@ -1,10 +1,10 @@
import { features } from '@videojs/core/dom';
import { audioFeatures } from '@videojs/core/dom';
import { createPlayer } from '../../player/create-player';
import { MediaElement } from '../../ui/media-element';
import '../media/container';
const { ProviderMixin } = createPlayer({
features: features.audio,
features: audioFeatures,
});
export class AudioPlayerElement extends ProviderMixin(MediaElement) {
@@ -1,10 +1,10 @@
import { features } from '@videojs/core/dom';
import { backgroundFeatures } from '@videojs/core/dom';
import { createPlayer } from '../../player/create-player';
import { MediaElement } from '../../ui/media-element';
import '../media/container';
const { ProviderMixin } = createPlayer({
features: features.background,
features: backgroundFeatures,
});
export class BackgroundVideoPlayerElement extends ProviderMixin(MediaElement) {
+2 -2
View File
@@ -1,10 +1,10 @@
import { features } from '@videojs/core/dom';
import { videoFeatures } from '@videojs/core/dom';
import { createPlayer } from '../../player/create-player';
import { MediaElement } from '../../ui/media-element';
import '../media/container';
const { ProviderMixin } = createPlayer({
features: features.video,
features: videoFeatures,
});
export class VideoPlayerElement extends ProviderMixin(MediaElement) {
+2 -2
View File
@@ -40,11 +40,11 @@ export interface CreatePlayerResult<Store extends PlayerStore> {
*
* @example
* ```ts
* import { features } from '@videojs/core/dom';
* import { createPlayer, MediaElement } from '@videojs/html';
* import { videoFeatures } from '@videojs/html/video';
*
* const { ProviderMixin, ContainerMixin, PlayerController, context } = createPlayer({
* features: features.video,
* features: videoFeatures,
* });
*
* // Provider element: owns the store, provides context to descendants
@@ -1,5 +1,5 @@
import type { AudioPlayerStore, PlayerStore, PlayerTarget, VideoPlayerStore } from '@videojs/core/dom';
import { definePlayerFeature, features } from '@videojs/core/dom';
import { audioFeatures, backgroundFeatures, definePlayerFeature, videoFeatures } from '@videojs/core/dom';
import type { Slice } from '@videojs/store';
import { assertType, describe, it } from 'vitest';
@@ -7,19 +7,19 @@ import { type CreatePlayerResult, createPlayer } from '../create-player';
describe('createPlayer', () => {
it('resolves video features to VideoPlayerStore', () => {
const result = createPlayer({ features: features.video });
const result = createPlayer({ features: videoFeatures });
assertType<CreatePlayerResult<VideoPlayerStore>>(result);
});
it('resolves audio features to AudioPlayerStore', () => {
const result = createPlayer({ features: features.audio });
const result = createPlayer({ features: audioFeatures });
assertType<CreatePlayerResult<AudioPlayerStore>>(result);
});
it('resolves spread video features to VideoPlayerStore', () => {
const result = createPlayer({ features: [...features.video] });
const result = createPlayer({ features: videoFeatures });
assertType<CreatePlayerResult<VideoPlayerStore>>(result);
});
@@ -48,11 +48,11 @@ describe('createPlayer', () => {
});
const result = createPlayer({
features: [...features.video, analyticsFeature],
features: [...videoFeatures, analyticsFeature],
});
// Extended features fall through to the generic overload
assertType<CreatePlayerResult<PlayerStore<[...typeof features.video, typeof analyticsFeature]>>>(result);
assertType<CreatePlayerResult<PlayerStore<[...typeof videoFeatures, typeof analyticsFeature]>>>(result);
// The store has both video and analytics state
const store = result.create();
@@ -63,7 +63,7 @@ describe('createPlayer', () => {
});
it('resolves background features to generic PlayerStore', () => {
const result = createPlayer({ features: features.background });
const result = createPlayer({ features: backgroundFeatures });
assertType<CreatePlayerResult<PlayerStore<[]>>>(result);
});
@@ -78,7 +78,7 @@ describe('createPlayer', () => {
});
const result = createPlayer({
features: [...features.audio, analyticsFeature],
features: [...audioFeatures, analyticsFeature],
});
const store = result.create();
@@ -1,4 +1,4 @@
import { features } from '@videojs/core/dom';
import { audioFeatures, backgroundFeatures, videoFeatures } from '@videojs/core/dom';
import { describe, expect, it } from 'vitest';
import { MediaElement } from '../../ui/media-element';
@@ -6,7 +6,7 @@ import { createPlayer } from '../create-player';
describe('createPlayer', () => {
it('returns expected exports', () => {
const result = createPlayer({ features: features.video });
const result = createPlayer({ features: videoFeatures });
expect(result.context).toBeDefined();
expect(result.create).toBeInstanceOf(Function);
@@ -16,7 +16,7 @@ describe('createPlayer', () => {
});
it('create() returns a store instance', () => {
const { create } = createPlayer({ features: features.video });
const { create } = createPlayer({ features: videoFeatures });
const store = create();
expect(store.attach).toBeInstanceOf(Function);
@@ -25,7 +25,7 @@ describe('createPlayer', () => {
});
it('ProviderMixin produces a valid custom element class', () => {
const { ProviderMixin } = createPlayer({ features: features.video });
const { ProviderMixin } = createPlayer({ features: videoFeatures });
const ProviderElement = ProviderMixin(MediaElement);
expect(typeof ProviderElement).toBe('function');
@@ -33,7 +33,7 @@ describe('createPlayer', () => {
});
it('ContainerMixin produces a valid custom element class', () => {
const { ContainerMixin } = createPlayer({ features: features.video });
const { ContainerMixin } = createPlayer({ features: videoFeatures });
const ContainerElement = ContainerMixin(MediaElement);
expect(typeof ContainerElement).toBe('function');
@@ -41,7 +41,7 @@ describe('createPlayer', () => {
});
it('creates audio player with expected exports', () => {
const result = createPlayer({ features: features.audio });
const result = createPlayer({ features: audioFeatures });
expect(result.context).toBeDefined();
expect(result.create).toBeInstanceOf(Function);
@@ -51,7 +51,7 @@ describe('createPlayer', () => {
});
it('creates background player with expected exports', () => {
const result = createPlayer({ features: features.background });
const result = createPlayer({ features: backgroundFeatures });
expect(result.context).toBeDefined();
expect(result.create).toBeInstanceOf(Function);
+1
View File
@@ -0,0 +1 @@
export { audioFeatures } from '@videojs/core/dom';
+1
View File
@@ -0,0 +1 @@
export { backgroundFeatures } from '@videojs/core/dom';
+1
View File
@@ -0,0 +1 @@
export { videoFeatures } from '@videojs/core/dom';