Files
ArtPlayer/packages/artplayer-plugin-multiple-subtitles

artplayer-plugin-multiple-subtitles

Multiple subtitles plugin for ArtPlayer

Demo

https://artplayer.org

TypeScript

The root and /legacy type entries preserve the latest published 1.2.0 function shape: a required { subtitles: TrackOption[] } argument and a synchronous { name: 'multipleSubtitles' } registration result. This includes parameter extraction and replacement-factory assignment in both directions; the root factory type has no required .default property. Registration has always been asynchronous. For accurate Promise and selection-method types, use the additive runtime entry, which loads the same implementation:

import multipleSubtitles from 'artplayer-plugin-multiple-subtitles/runtime'

const register = multipleSubtitles({
  subtitles: [{ url: '/subtitles/en.vtt', name: 'en' }],
})
// With an existing ArtPlayer instance:
const result = await register(art)
result.tracks(['en'])
result.reset()

The option object is required; {} means no tracks. tracks() clears the selection; reset() restores all original tracks. Both methods return void. The existing onParser field remains declared for compatibility but is not invoked by the implementation.

Earlier declarations and module resolution

Versions 1.0.0 and 1.1.0 declared export =, whereas 1.2.0 declared a default export. The root follows 1.2.0 under the approved type compatibility policy. For consumers migrating an earlier import = require, use the accurate runtime entry and await registration:

import type Artplayer from 'artplayer'
import multipleSubtitles = require('artplayer-plugin-multiple-subtitles/runtime')

async function registerSubtitles(art: Artplayer) {
  const result = await multipleSubtitles({ subtitles: [] })(art)
  result.reset()
}

This import = require form works with classic Node resolution without esModuleInterop. The runtime default import in the first example requires that flag in classic CommonJS; NodeNext ESM and bundler resolution use its ESM declaration. Runtime types also expose the existing writable .default self alias. JavaScript entrypoints and valid historical require('artplayer-plugin-multiple-subtitles').default(...) calls remain supported. The old 1.0.0/1.1.0 declaration allowed calling the raw require object, but its shipped JavaScript did not; that mismatch is not a supported runtime contract.

NodeNext ESM intentionally retains the 1.2.0 root declaration's module namespace shape (import root from 'artplayer-plugin-multiple-subtitles' exposes the declared factory as root.default). It does not silently become a callable default type. Prefer the /runtime default import for accurate native ESM calls; the same applies to /legacy declarations. See maintenance notes for module responsibilities and validation commands.

License

MIT © Harvey Zhao