Skip to content

Commit d1888ea

Browse files
committed
feat: Improve player initialization and build output
- Remove setTimeout from player initialization in `src/index.ts` to ensure immediate setup on mount. - Add `!playerRef.value` check to prevent re-initialization of the player. - Configure tsup to use `.mjs` for ESM and `.cjs` for CJS output formats in `tsup.config.ts`. - Bump package version to 0.0.5.
1 parent bcbdb77 commit d1888ea

File tree

3 files changed

+29
-32
lines changed

3 files changed

+29
-32
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@interactive-video-labs/vue",
3-
"version": "0.0.4",
3+
"version": "0.0.5",
44
"type": "module",
55
"description": "Thin Vue wrapper for the @interactive-video-labs/core engine. Enables cue-based interactive video playback in Vue 3 applications.",
66
"main": "dist/index.cjs",

src/index.ts

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,10 @@ export default defineComponent({
7474
const playerRef = ref<IVLabsPlayer | null>(null);
7575
const uniqueId = `ivlabs-player-${Math.random().toString(36).substr(2, 9)}`;
7676

77-
/**
78-
* Initializes the player when the component is mounted.
79-
*/
77+
// Initialize player only after the component is mounted and the DOM is ready
8078
onMounted(() => {
81-
if (containerRef.value) {
79+
const newContainer = containerRef.value;
80+
if (newContainer && !playerRef.value) {
8281
const playerConfig: PlayerConfig = {
8382
...attrs,
8483
videoUrl: props.videoUrl,
@@ -87,37 +86,30 @@ export default defineComponent({
8786
locale: props.locale,
8887
};
8988

90-
setTimeout(() => {
91-
try {
92-
if (containerRef.value) {
93-
const player = new IVLabsPlayer(`#${uniqueId}`, playerConfig);
94-
playerRef.value = player;
89+
try {
90+
const player = new IVLabsPlayer(`#${uniqueId}`, playerConfig);
91+
playerRef.value = player;
9592

96-
// Register event listeners if onAnalyticsEvent is provided.
97-
if (props.onAnalyticsEvent) {
98-
player.on('PLAYER_LOADED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('PLAYER_LOADED', payload));
99-
player.on('VIDEO_STARTED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_STARTED', payload));
100-
player.on('VIDEO_PAUSED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_PAUSED', payload));
101-
player.on('VIDEO_ENDED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_ENDED', payload));
102-
player.on('CUE_TRIGGERED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('CUE_TRIGGERED', payload));
103-
player.on('INTERACTION_COMPLETED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('INTERACTION_COMPLETED', payload));
104-
player.on('ERROR', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('ERROR', payload));
105-
}
93+
if (props.onAnalyticsEvent) {
94+
player.on('PLAYER_LOADED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('PLAYER_LOADED', payload));
95+
player.on('VIDEO_STARTED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_STARTED', payload));
96+
player.on('VIDEO_PAUSED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_PAUSED', payload));
97+
player.on('VIDEO_ENDED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('VIDEO_ENDED', payload));
98+
player.on('CUE_TRIGGERED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('CUE_TRIGGERED', payload));
99+
player.on('INTERACTION_COMPLETED', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('INTERACTION_COMPLETED', payload));
100+
player.on('ERROR', (payload?: AnalyticsPayload) => (props.onAnalyticsEvent as Function)('ERROR', payload));
101+
}
106102

107-
// Load initial cues if provided.
108-
if (props.cues) {
109-
player.loadCues(props.cues);
110-
}
103+
if (props.cues) {
104+
player.loadCues(props.cues);
105+
}
111106

112-
// Load initial translations if provided.
113-
if (props.translations) {
114-
player.loadTranslations(props.locale, props.translations);
115-
}
116-
}
117-
} catch (error) {
118-
console.error('Error initializing IVLabsPlayer:', error);
107+
if (props.translations) {
108+
player.loadTranslations(props.locale, props.translations);
119109
}
120-
}, 0);
110+
} catch (error) {
111+
console.error('Error initializing IVLabsPlayer:', error);
112+
}
121113
}
122114
});
123115

tsup.config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import pkg from './package.json';
44
export default defineConfig((options) => ({
55
entry: ['src/index.ts'],
66
format: ['esm', 'cjs'],
7+
outExtension({ format }) {
8+
return {
9+
js: `.${format === 'esm' ? 'mjs' : 'cjs'}`,
10+
};
11+
},
712
dts: true,
813
watch: options.watch,
914
clean: true,

0 commit comments

Comments
 (0)