mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
refactor(packages): move feature presets to subpath exports (#633)
This commit is contained in:
@@ -24,6 +24,39 @@
|
||||
"development": "./dist/dev/index.js",
|
||||
"default": "./dist/default/index.js"
|
||||
},
|
||||
"./video": {
|
||||
"types": "./dist/dev/presets/video.d.ts",
|
||||
"development": "./dist/dev/presets/video.js",
|
||||
"default": "./dist/default/presets/video.js"
|
||||
},
|
||||
"./video/*.css": "./dist/default/define/video/*.css",
|
||||
"./video/*": {
|
||||
"types": "./dist/dev/define/video/*.d.ts",
|
||||
"development": "./dist/dev/define/video/*.js",
|
||||
"default": "./dist/default/define/video/*.js"
|
||||
},
|
||||
"./audio": {
|
||||
"types": "./dist/dev/presets/audio.d.ts",
|
||||
"development": "./dist/dev/presets/audio.js",
|
||||
"default": "./dist/default/presets/audio.js"
|
||||
},
|
||||
"./audio/*.css": "./dist/default/define/audio/*.css",
|
||||
"./audio/*": {
|
||||
"types": "./dist/dev/define/audio/*.d.ts",
|
||||
"development": "./dist/dev/define/audio/*.js",
|
||||
"default": "./dist/default/define/audio/*.js"
|
||||
},
|
||||
"./background": {
|
||||
"types": "./dist/dev/presets/background.d.ts",
|
||||
"development": "./dist/dev/presets/background.js",
|
||||
"default": "./dist/default/presets/background.js"
|
||||
},
|
||||
"./background/*.css": "./dist/default/define/background/*.css",
|
||||
"./background/*": {
|
||||
"types": "./dist/dev/define/background/*.d.ts",
|
||||
"development": "./dist/dev/define/background/*.js",
|
||||
"default": "./dist/default/define/background/*.js"
|
||||
},
|
||||
"./ui/*": {
|
||||
"types": "./dist/dev/define/ui/*.d.ts",
|
||||
"development": "./dist/dev/define/ui/*.js",
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export { audioFeatures } from '@videojs/core/dom';
|
||||
@@ -0,0 +1 @@
|
||||
export { backgroundFeatures } from '@videojs/core/dom';
|
||||
@@ -0,0 +1 @@
|
||||
export { videoFeatures } from '@videojs/core/dom';
|
||||
@@ -13,10 +13,18 @@ const defineEntries = Object.fromEntries(
|
||||
})
|
||||
);
|
||||
|
||||
const presetEntries = Object.fromEntries(
|
||||
globSync('src/presets/*.ts').map((file) => {
|
||||
const key = file.replace('src/', '').replace('.ts', '');
|
||||
return [key, file];
|
||||
})
|
||||
);
|
||||
|
||||
const createConfig = (mode: BuildMode): UserConfig => ({
|
||||
entry: {
|
||||
index: 'src/index.ts',
|
||||
...defineEntries,
|
||||
...presetEntries,
|
||||
},
|
||||
platform: 'browser',
|
||||
format: 'es',
|
||||
|
||||
Reference in New Issue
Block a user