diff --git a/packages/vidstack/src/providers/hls/loader.test.ts b/packages/vidstack/src/providers/hls/loader.test.ts new file mode 100644 index 000000000..8df85a634 --- /dev/null +++ b/packages/vidstack/src/providers/hls/loader.test.ts @@ -0,0 +1,28 @@ +import { HLSProviderLoader } from './loader'; + +describe('HLSProviderLoader.load', function () { + afterEach(function () { + Reflect.deleteProperty(document, 'pictureInPictureEnabled'); + }); + + it('does not construct the provider with a null target if unmounted during import', async function () { + Object.defineProperty(document, 'pictureInPictureEnabled', { + configurable: true, + value: true, + }); + + const loader = new HLSProviderLoader(), + video = document.createElement('video'), + ctx = { notify() {} } as any; + + loader.target = video; + + const load = loader.load(ctx); + loader.target = null as any; + + const provider = await load; + + expect(provider).to.have.property('type', 'hls'); + expect(provider.video).to.equal(video); + }); +}); diff --git a/packages/vidstack/src/providers/hls/loader.ts b/packages/vidstack/src/providers/hls/loader.ts index 1cdb16c34..78dbeb614 100644 --- a/packages/vidstack/src/providers/hls/loader.ts +++ b/packages/vidstack/src/providers/hls/loader.ts @@ -22,12 +22,22 @@ export class HLSProviderLoader throw Error('[vidstack] can not load hls provider server-side'); } - if (__DEV__ && !this.target) { + const target = this.target; + + if (__DEV__ && !target) { + throw Error( + '[vidstack] `