From 1f2ee5f06f884ac0319cdbe045f112ab71fa8439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Moska=C5=82a?= Date: Wed, 25 Mar 2026 11:23:10 +0100 Subject: [PATCH] chore: split tsconfig into web & default --- packages/react-native-video/package.json | 7 ++++-- .../src/core/VideoPlayer.web.ts | 24 +++++++++++++++++++ .../src/core/VideoPlayerEvents.ts | 18 -------------- packages/react-native-video/tsconfig.json | 1 + packages/react-native-video/tsconfig.web.json | 7 ++++++ 5 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 packages/react-native-video/tsconfig.web.json diff --git a/packages/react-native-video/package.json b/packages/react-native-video/package.json index 59b095b1..7cfb66d1 100644 --- a/packages/react-native-video/package.json +++ b/packages/react-native-video/package.json @@ -48,6 +48,7 @@ "scripts": { "postinstall": "bun run build || exit 0;", "typecheck": "tsc", + "typecheck:web": "tsc -p tsconfig.web.json", "lint": "eslint \"**/*.{js,ts,tsx}\"", "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib", "prepare": "bun run build", @@ -73,6 +74,9 @@ "publishConfig": { "registry": "https://registry.npmjs.org/" }, + "dependencies": { + "video.js": "^8.23.4" + }, "devDependencies": { "@expo/config-plugins": "^10.0.2", "@react-native/eslint-config": "^0.77.0", @@ -88,8 +92,7 @@ "react-native": "^0.77.0", "react-native-builder-bob": "^0.40.0", "react-native-nitro-modules": "0.35.0", - "typescript": "^5.2.2", - "video.js": "^8.23.4" + "typescript": "^5.2.2" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native-video/src/core/VideoPlayer.web.ts b/packages/react-native-video/src/core/VideoPlayer.web.ts index e6dfac1c..fb817434 100644 --- a/packages/react-native-video/src/core/VideoPlayer.web.ts +++ b/packages/react-native-video/src/core/VideoPlayer.web.ts @@ -18,6 +18,8 @@ import { WebEventEmitter } from "./web/WebEventEmitter"; import type { VideoTrack } from "./types/VideoTrack"; import type { QualityLevel } from "./types/QualityLevel"; import type { SupportedFeatures } from "./types/SupportedFeatures"; +import type { ListenerSubscription } from "./types/EventEmitter"; +import type { AllPlayerEvents as PlayerEvents } from "./types/Events"; import { mapVideoJsTracks, type VideoJsPlayer, @@ -406,6 +408,28 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase { qualitySelection: true, }; } + + addEventListener( + event: Event, + callback: PlayerEvents[Event], + ): ListenerSubscription { + switch (event) { + case "onAudioTrackChange": + return (this.eventEmitter as WebEventEmitter).addOnAudioTrackChangeListener( + callback as PlayerEvents["onAudioTrackChange"], + ); + case "onVideoTrackChange": + return (this.eventEmitter as WebEventEmitter).addOnVideoTrackChangeListener( + callback as PlayerEvents["onVideoTrackChange"], + ); + case "onQualityChange": + return (this.eventEmitter as WebEventEmitter).addOnQualityChangeListener( + callback as PlayerEvents["onQualityChange"], + ); + default: + return super.addEventListener(event, callback); + } + } } export { VideoPlayer }; diff --git a/packages/react-native-video/src/core/VideoPlayerEvents.ts b/packages/react-native-video/src/core/VideoPlayerEvents.ts index 94b88290..62409a12 100644 --- a/packages/react-native-video/src/core/VideoPlayerEvents.ts +++ b/packages/react-native-video/src/core/VideoPlayerEvents.ts @@ -7,8 +7,6 @@ import type { ListenerSubscription, VideoPlayerEventEmitterBase, } from "./types/EventEmitter"; -import type { WebEventEmitter } from "./web/WebEventEmitter"; -import { Platform } from "react-native"; export class VideoPlayerEvents { protected eventEmitter: VideoPlayerEventEmitterBase; @@ -133,22 +131,6 @@ export class VideoPlayerEvents { return this.eventEmitter.addOnStatusChangeListener( callback as PlayerEvents['onStatusChange'] ); - // ----------------- Web Events ----------------- - case 'onAudioTrackChange': - if (Platform.OS !== "web") return { remove:()=>{} }; - return (this.eventEmitter as WebEventEmitter).addOnAudioTrackChangeListener( - callback as PlayerEvents['onAudioTrackChange'] - ); - case 'onVideoTrackChange': - if (Platform.OS !== "web") return { remove:()=>{} }; - return (this.eventEmitter as WebEventEmitter).addOnVideoTrackChangeListener( - callback as PlayerEvents['onVideoTrackChange'] - ); - case 'onQualityChange': - if (Platform.OS !== "web") return { remove:()=>{} }; - return (this.eventEmitter as WebEventEmitter).addOnQualityChangeListener( - callback as PlayerEvents['onQualityChange'] - ); default: throw new Error(`[React Native Video] Unsupported event: ${event}`); } diff --git a/packages/react-native-video/tsconfig.json b/packages/react-native-video/tsconfig.json index 2d8c52c9..6d0cdea0 100644 --- a/packages/react-native-video/tsconfig.json +++ b/packages/react-native-video/tsconfig.json @@ -1,6 +1,7 @@ { "extends": ["../../config/tsconfig.json"], "include": ["src", "./app.plugin.js"], + "exclude": ["src/**/*.web.ts", "src/**/*.web.tsx", "src/core/web/**"], "compilerOptions": { "rootDir": ".", "jsx": "react-jsx", diff --git a/packages/react-native-video/tsconfig.web.json b/packages/react-native-video/tsconfig.web.json new file mode 100644 index 00000000..9d0989e2 --- /dev/null +++ b/packages/react-native-video/tsconfig.web.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ESNext", "dom"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"] +}