diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1817764775b..6b613d4144c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -80,8 +80,7 @@ jobs: - name: build run: | - npm run type-check - npm run build + npm run build:ci npm run docs # check that hls.js doesn't error if requiring in node # see https://github.com/video-dev/hls.js/pull/1642 diff --git a/.gitignore b/.gitignore index b0716c30ef6..fc022768d70 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ coverage/ .idea/* # Build +/lib /dist /dist.zip /netlify diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 46a5d086559..00000000000 --- a/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -demo -docs/html -misc -test -API.md -bower.json -design.md -hls.js.sublime-project -/streams.js diff --git a/.prettierignore b/.prettierignore index a6678488399..70bcd295c56 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,3 +3,4 @@ package-lock.json /coverage libs/ +/api-extractor/report* diff --git a/README.md b/README.md index 65ddb53a891..a4fc45f7de3 100644 --- a/README.md +++ b/README.md @@ -223,12 +223,6 @@ Or type npm install --save hls.js ``` -Optionally there is a declaration file available to help with code completion and hinting within your IDE for the hls.js api - -```sh -npm install --save-dev @types/hls.js -``` - ### Server-side-rendering (SSR) and `require` from a Node.js runtime We support this now. You can safely require this library in Node and absolutely nothing will happen :) See https://github.com/video-dev/hls.js/pull/1841 diff --git a/api-extractor.json b/api-extractor.json new file mode 100644 index 00000000000..f3aa1965b4a --- /dev/null +++ b/api-extractor.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "mainEntryPointFilePath": "/lib/hls.d.ts", + "bundledPackages": [], + "compiler": { + "tsconfigFilePath": "/tsconfig-lib.json" + }, + "apiReport": { + "enabled": true, + "reportFolder": "/api-extractor/report", + "reportTempFolder": "/api-extractor/report-temp" + }, + "docModel": { + "enabled": false + }, + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "/dist/hls.js.d.ts" + }, + "tsdocMetadata": { + "enabled": false + }, + "newlineKind": "lf", + "messages": { + "compilerMessageReporting": { + "default": { + "logLevel": "warning", + "addToApiReportFile": true + } + }, + "extractorMessageReporting": { + "default": { + "logLevel": "warning", + "addToApiReportFile": true + } + }, + "tsdocMessageReporting": { + "default": { + "logLevel": "none", + "addToApiReportFile": false + } + } + } +} diff --git a/api-extractor/.gitignore b/api-extractor/.gitignore new file mode 100644 index 00000000000..3047372951a --- /dev/null +++ b/api-extractor/.gitignore @@ -0,0 +1 @@ +/report-temp diff --git a/api-extractor/report/hls.js.api.md b/api-extractor/report/hls.js.api.md new file mode 100644 index 00000000000..cd1c1fcf88c --- /dev/null +++ b/api-extractor/report/hls.js.api.md @@ -0,0 +1,2109 @@ +## API Report File for "hls.js" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +// Warning: (ae-missing-release-tag) "ABRControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ABRControllerConfig = { + abrEwmaFastLive: number; + abrEwmaSlowLive: number; + abrEwmaFastVoD: number; + abrEwmaSlowVoD: number; + abrEwmaDefaultEstimate: number; + abrBandWidthFactor: number; + abrBandWidthUpFactor: number; + abrMaxWithRealBitrate: boolean; + maxStarvationDelay: number; + maxLoadingDelay: number; +}; + +// Warning: (ae-missing-release-tag) "AttrList" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AttrList { + constructor(attrs: string | Record); + // (undocumented) + [key: string]: any; + // (undocumented) + bool(attrName: string): boolean; + // (undocumented) + decimalFloatingPoint(attrName: string): number; + // (undocumented) + decimalInteger(attrName: string): number; + // (undocumented) + decimalResolution(attrName: string): { + width: number; + height: number; + } | undefined; + // (undocumented) + enumeratedString(attrName: string): string | undefined; + // (undocumented) + hexadecimalInteger(attrName: string): Uint8Array | null; + // (undocumented) + hexadecimalIntegerAsNumber(attrName: string): number; + // (undocumented) + optionalFloat(attrName: string, defaultValue: number): number; + // (undocumented) + static parseAttrList(input: string): Record; +} + +// Warning: (ae-missing-release-tag) "AudioPlaylistType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type AudioPlaylistType = 'AUDIO'; + +// Warning: (ae-missing-release-tag) "AudioTrackLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AudioTrackLoadedData extends TrackLoadedData { +} + +// Warning: (ae-missing-release-tag) "AudioTracksUpdatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AudioTracksUpdatedData { + // (undocumented) + audioTracks: MediaPlaylist[]; +} + +// Warning: (ae-missing-release-tag) "AudioTrackSwitchedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AudioTrackSwitchedData { + // (undocumented) + id: number; +} + +// Warning: (ae-missing-release-tag) "AudioTrackSwitchingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AudioTrackSwitchingData { + // (undocumented) + id: number; + // (undocumented) + type: MediaPlaylistType | 'main'; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "BaseSegment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class BaseSegment { + constructor(baseurl: string); + // (undocumented) + readonly baseurl: string; + // (undocumented) + get byteRange(): number[]; + // (undocumented) + get byteRangeEndOffset(): number; + // (undocumented) + get byteRangeStartOffset(): number; + // (undocumented) + elementaryStreams: ElementaryStreams; + // (undocumented) + relurl?: string; + // (undocumented) + setByteRange(value: string, previous?: BaseSegment): void; + // (undocumented) + get url(): string; + set url(value: string); + } + +// Warning: (ae-missing-release-tag) "BufferAppendedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferAppendedData { + // (undocumented) + chunkMeta: ChunkMetadata; + // (undocumented) + frag: Fragment; + // (undocumented) + parent: PlaylistLevelType; + // (undocumented) + part: Part | null; + // (undocumented) + timeRanges: { + audio?: TimeRanges; + video?: TimeRanges; + audiovideo?: TimeRanges; + }; +} + +// Warning: (ae-missing-release-tag) "BufferAppendingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferAppendingData { + // (undocumented) + chunkMeta: ChunkMetadata; + // (undocumented) + data: Uint8Array; + // (undocumented) + frag: Fragment; + // (undocumented) + part: Part | null; + // (undocumented) + type: SourceBufferName; +} + +// Warning: (ae-missing-release-tag) "BufferCodecsData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferCodecsData { + // (undocumented) + audio?: Track; + // (undocumented) + video?: Track; +} + +// Warning: (ae-missing-release-tag) "BufferControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type BufferControllerConfig = { + appendErrorMaxRetry: number; + liveDurationInfinity: boolean; + liveBackBufferLength: number; +}; + +// Warning: (ae-missing-release-tag) "BufferCreatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferCreatedData { + // (undocumented) + tracks: TrackSet; +} + +// Warning: (ae-missing-release-tag) "BufferEOSData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferEOSData { + // (undocumented) + type?: SourceBufferName; +} + +// Warning: (ae-missing-release-tag) "BufferFlushedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferFlushedData { + // (undocumented) + type: SourceBufferName; +} + +// Warning: (ae-missing-release-tag) "BufferFlushingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BufferFlushingData { + // (undocumented) + endOffset: number; + // (undocumented) + startOffset: number; + // (undocumented) + type: SourceBufferName | null; +} + +// Warning: (ae-missing-release-tag) "CapLevelControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type CapLevelControllerConfig = { + capLevelToPlayerSize: boolean; +}; + +// Warning: (ae-missing-release-tag) "ChunkMetadata" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ChunkMetadata { + constructor(level: number, sn: number, id: number, size?: number, part?: number, partial?: boolean); + // (undocumented) + readonly buffering: { + [key in SourceBufferName]: HlsChunkPerformanceTiming; + }; + // (undocumented) + readonly id: number; + // (undocumented) + readonly level: number; + // (undocumented) + readonly part: number; + // (undocumented) + readonly partial: boolean; + // (undocumented) + readonly size: number; + // (undocumented) + readonly sn: number; + // (undocumented) + readonly transmuxing: HlsChunkPerformanceTiming; +} + +// Warning: (ae-missing-release-tag) "CuesInterface" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface CuesInterface { + // Warning: (ae-forgotten-export) The symbol "CaptionScreen" needs to be exported by the entry point hls.d.ts + // + // (undocumented) + newCue(track: TextTrack | null, startTime: number, endTime: number, captionScreen: CaptionScreen): VTTCue[]; +} + +// Warning: (ae-missing-release-tag) "CuesParsedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface CuesParsedData { + // (undocumented) + cues: any; + // (undocumented) + track: string; + // (undocumented) + type: 'captions' | 'subtitles'; +} + +// Warning: (ae-missing-release-tag) "DRMSystemOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type DRMSystemOptions = { + audioRobustness?: string; + videoRobustness?: string; +}; + +// Warning: (ae-missing-release-tag) "ElementaryStreamInfo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ElementaryStreamInfo { + // (undocumented) + endDTS: number; + // (undocumented) + endPTS: number; + // (undocumented) + partial?: boolean; + // (undocumented) + startDTS: number; + // (undocumented) + startPTS: number; +} + +// Warning: (ae-missing-release-tag) "ElementaryStreams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ElementaryStreams = Record; + +// Warning: (ae-missing-release-tag) "ElementaryStreamTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum ElementaryStreamTypes { + // (undocumented) + AUDIO = "audio", + // (undocumented) + AUDIOVIDEO = "audiovideo", + // (undocumented) + VIDEO = "video" +} + +// Warning: (ae-missing-release-tag) "EMEControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type EMEControllerConfig = { + licenseXhrSetup?: (xhr: XMLHttpRequest, url: string) => void; + emeEnabled: boolean; + widevineLicenseUrl?: string; + drmSystemOptions: DRMSystemOptions; + requestMediaKeySystemAccessFunc: MediaKeyFunc | null; +}; + +// Warning: (ae-missing-release-tag) "ErrorData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ErrorData { + // (undocumented) + buffer?: number; + // (undocumented) + bytes?: number; + // (undocumented) + context?: PlaylistLoaderContext; + // (undocumented) + details: ErrorDetails; + // (undocumented) + err?: { + message: string; + }; + // (undocumented) + error?: Error; + // (undocumented) + event?: keyof HlsListeners | 'demuxerWorker'; + // (undocumented) + fatal: boolean; + // (undocumented) + frag?: Fragment; + // (undocumented) + level?: number | undefined; + // (undocumented) + levelRetry?: boolean; + // (undocumented) + loader?: Loader; + // (undocumented) + mimeType?: string; + // (undocumented) + networkDetails?: any; + // (undocumented) + parent?: PlaylistLevelType; + // (undocumented) + reason?: string; + // (undocumented) + response?: LoaderResponse; + // (undocumented) + type: ErrorTypes; + // (undocumented) + url?: string; +} + +// Warning: (ae-missing-release-tag) "ErrorDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum ErrorDetails { + // (undocumented) + AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError", + // (undocumented) + AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut", + // (undocumented) + BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError", + // (undocumented) + BUFFER_APPEND_ERROR = "bufferAppendError", + // (undocumented) + BUFFER_APPENDING_ERROR = "bufferAppendingError", + // (undocumented) + BUFFER_FULL_ERROR = "bufferFullError", + // (undocumented) + BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall", + // (undocumented) + BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole", + // (undocumented) + BUFFER_STALLED_ERROR = "bufferStalledError", + // (undocumented) + FRAG_DECRYPT_ERROR = "fragDecryptError", + // (undocumented) + FRAG_LOAD_ERROR = "fragLoadError", + // (undocumented) + FRAG_LOAD_TIMEOUT = "fragLoadTimeOut", + // (undocumented) + FRAG_PARSING_ERROR = "fragParsingError", + // (undocumented) + INTERNAL_ABORTED = "aborted", + // (undocumented) + INTERNAL_EXCEPTION = "internalException", + // (undocumented) + KEY_LOAD_ERROR = "keyLoadError", + // (undocumented) + KEY_LOAD_TIMEOUT = "keyLoadTimeOut", + // (undocumented) + KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed", + // (undocumented) + KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess", + // (undocumented) + KEY_SYSTEM_NO_INIT_DATA = "keySystemNoInitData", + // (undocumented) + KEY_SYSTEM_NO_KEYS = "keySystemNoKeys", + // (undocumented) + KEY_SYSTEM_NO_SESSION = "keySystemNoSession", + // (undocumented) + LEVEL_EMPTY_ERROR = "levelEmptyError", + // (undocumented) + LEVEL_LOAD_ERROR = "levelLoadError", + // (undocumented) + LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut", + // (undocumented) + LEVEL_SWITCH_ERROR = "levelSwitchError", + // (undocumented) + MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError", + // (undocumented) + MANIFEST_LOAD_ERROR = "manifestLoadError", + // (undocumented) + MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut", + // (undocumented) + MANIFEST_PARSING_ERROR = "manifestParsingError", + // (undocumented) + REMUX_ALLOC_ERROR = "remuxAllocError", + // (undocumented) + SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError", + // (undocumented) + SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut", + // (undocumented) + UNKNOWN = "unknown" +} + +// Warning: (ae-missing-release-tag) "ErrorTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum ErrorTypes { + // (undocumented) + KEY_SYSTEM_ERROR = "keySystemError", + // (undocumented) + MEDIA_ERROR = "mediaError", + // (undocumented) + MUX_ERROR = "muxError", + // (undocumented) + NETWORK_ERROR = "networkError", + // (undocumented) + OTHER_ERROR = "otherError" +} + +// Warning: (ae-missing-release-tag) "Events" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum Events { + // (undocumented) + AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", + // (undocumented) + AUDIO_TRACK_LOADING = "hlsAudioTrackLoading", + // (undocumented) + AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", + // (undocumented) + AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching", + // (undocumented) + AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", + // (undocumented) + BUFFER_APPENDED = "hlsBufferAppended", + // (undocumented) + BUFFER_APPENDING = "hlsBufferAppending", + // (undocumented) + BUFFER_CODECS = "hlsBufferCodecs", + // (undocumented) + BUFFER_CREATED = "hlsBufferCreated", + // (undocumented) + BUFFER_EOS = "hlsBufferEos", + // (undocumented) + BUFFER_FLUSHED = "hlsBufferFlushed", + // (undocumented) + BUFFER_FLUSHING = "hlsBufferFlushing", + // (undocumented) + BUFFER_RESET = "hlsBufferReset", + // (undocumented) + CUES_PARSED = "hlsCuesParsed", + // (undocumented) + DESTROYING = "hlsDestroying", + // (undocumented) + ERROR = "hlsError", + // (undocumented) + FPS_DROP = "hlsFpsDrop", + // (undocumented) + FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping", + // (undocumented) + FRAG_BUFFERED = "hlsFragBuffered", + // (undocumented) + FRAG_CHANGED = "hlsFragChanged", + // (undocumented) + FRAG_DECRYPTED = "hlsFragDecrypted", + // (undocumented) + FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted", + // (undocumented) + FRAG_LOADED = "hlsFragLoaded", + // (undocumented) + FRAG_LOADING = "hlsFragLoading", + // (undocumented) + FRAG_PARSED = "hlsFragParsed", + // (undocumented) + FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", + // (undocumented) + FRAG_PARSING_METADATA = "hlsFragParsingMetadata", + // (undocumented) + FRAG_PARSING_USERDATA = "hlsFragParsingUserdata", + // (undocumented) + INIT_PTS_FOUND = "hlsInitPtsFound", + // (undocumented) + KEY_LOADED = "hlsKeyLoaded", + // (undocumented) + KEY_LOADING = "hlsKeyLoading", + // (undocumented) + LEVEL_LOADED = "hlsLevelLoaded", + // (undocumented) + LEVEL_LOADING = "hlsLevelLoading", + // (undocumented) + LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated", + // (undocumented) + LEVEL_SWITCHED = "hlsLevelSwitched", + // (undocumented) + LEVEL_SWITCHING = "hlsLevelSwitching", + // (undocumented) + LEVEL_UPDATED = "hlsLevelUpdated", + // (undocumented) + LEVELS_UPDATED = "hlsLevelsUpdated", + // (undocumented) + LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached", + // (undocumented) + MANIFEST_LOADED = "hlsManifestLoaded", + // (undocumented) + MANIFEST_LOADING = "hlsManifestLoading", + // (undocumented) + MANIFEST_PARSED = "hlsManifestParsed", + // (undocumented) + MEDIA_ATTACHED = "hlsMediaAttached", + // (undocumented) + MEDIA_ATTACHING = "hlsMediaAttaching", + // (undocumented) + MEDIA_DETACHED = "hlsMediaDetached", + // (undocumented) + MEDIA_DETACHING = "hlsMediaDetaching", + // (undocumented) + NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound", + // (undocumented) + SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed", + // (undocumented) + SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded", + // (undocumented) + SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading", + // (undocumented) + SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", + // (undocumented) + SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared", + // (undocumented) + SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated" +} + +// Warning: (ae-missing-release-tag) "FPSControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type FPSControllerConfig = { + capLevelOnFPSDrop: boolean; + fpsDroppedMonitoringPeriod: number; + fpsDroppedMonitoringThreshold: number; +}; + +// Warning: (ae-missing-release-tag) "FPSDropData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FPSDropData { + // (undocumented) + currentDecoded: number; + // (undocumented) + currentDropped: number; + // (undocumented) + totalDroppedFrames: number; +} + +// Warning: (ae-missing-release-tag) "FPSDropLevelCappingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FPSDropLevelCappingData { + // (undocumented) + droppedLevel: number; + // (undocumented) + level: number; +} + +// Warning: (ae-missing-release-tag) "FragBufferedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragBufferedData { + // (undocumented) + frag: Fragment; + // (undocumented) + id: string; + // (undocumented) + part: Part | null; + // (undocumented) + stats: LoadStats; +} + +// Warning: (ae-missing-release-tag) "FragChangedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragChangedData { + // (undocumented) + frag: Fragment; +} + +// Warning: (ae-missing-release-tag) "FragDecryptedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragDecryptedData { + // (undocumented) + frag: Fragment; + // (undocumented) + payload: ArrayBuffer; + // (undocumented) + stats: { + tstart: number; + tdecrypt: number; + }; +} + +// Warning: (ae-missing-release-tag) "FragLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragLoadedData { + // (undocumented) + frag: Fragment; + // (undocumented) + networkDetails: unknown; + // (undocumented) + part: Part | null; + // (undocumented) + payload: ArrayBuffer; +} + +// Warning: (ae-missing-release-tag) "FragLoadEmergencyAbortedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragLoadEmergencyAbortedData { + // (undocumented) + frag: Fragment; + // (undocumented) + part: Part | null; + // (undocumented) + stats: LoaderStats; +} + +// Warning: (ae-missing-release-tag) "FragLoadingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragLoadingData { + // (undocumented) + frag: Fragment; + // (undocumented) + part?: Part; + // (undocumented) + targetBufferTime: number | null; +} + +// Warning: (ae-missing-release-tag) "Fragment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Fragment extends BaseSegment { + constructor(type: PlaylistLevelType, baseurl: string); + // (undocumented) + appendedPTS?: number; + // (undocumented) + bitrateTest: boolean; + // (undocumented) + cc: number; + // (undocumented) + clearElementaryStreamInfo(): void; + createInitializationVector(segmentNumber: number): Uint8Array; + // (undocumented) + data?: Uint8Array; + // (undocumented) + get decryptdata(): LevelKey | null; + // (undocumented) + deltaPTS?: number; + // (undocumented) + duration: number; + // (undocumented) + get encrypted(): boolean; + // (undocumented) + get end(): number; + // (undocumented) + endDTS: number; + // (undocumented) + get endProgramDateTime(): number | null; + // (undocumented) + endPTS?: number; + // (undocumented) + level: number; + // (undocumented) + levelkey?: LevelKey; + // (undocumented) + loader: Loader | null; + // (undocumented) + maxStartPTS?: number; + // (undocumented) + minEndPTS?: number; + // (undocumented) + programDateTime: number | null; + // (undocumented) + rawProgramDateTime: string | null; + setDecryptDataFromLevelKey(levelkey: LevelKey, segmentNumber: number): LevelKey; + // (undocumented) + setElementaryStreamInfo(type: ElementaryStreamTypes, startPTS: number, endPTS: number, startDTS: number, endDTS: number, partial?: boolean): void; + // (undocumented) + sn: number | 'initSegment'; + // (undocumented) + start: number; + // (undocumented) + startDTS: number; + // (undocumented) + startPTS?: number; + // (undocumented) + stats: LoadStats; + // (undocumented) + tagList: Array; + // (undocumented) + title: string | null; + // (undocumented) + readonly type: PlaylistLevelType; + // (undocumented) + urlId: number; +} + +// Warning: (ae-missing-release-tag) "FragmentLoaderConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type FragmentLoaderConfig = { + fLoader?: { + new (confg: HlsConfig): Loader; + }; + fragLoadingTimeOut: number; + fragLoadingMaxRetry: number; + fragLoadingRetryDelay: number; + fragLoadingMaxRetryTimeout: number; +}; + +// Warning: (ae-missing-release-tag) "FragmentLoaderContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragmentLoaderContext extends LoaderContext { + // (undocumented) + frag: Fragment; + // (undocumented) + part: Part | null; +} + +// Warning: (ae-missing-release-tag) "FragParsedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragParsedData { + // (undocumented) + frag: Fragment; + // (undocumented) + part: Part | null; +} + +// Warning: (ae-missing-release-tag) "FragParsingInitSegmentData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragParsingInitSegmentData { +} + +// Warning: (ae-missing-release-tag) "FragParsingMetadataData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragParsingMetadataData { + // (undocumented) + frag: Fragment; + // (undocumented) + id: string; + // (undocumented) + samples: MetadataSample[]; +} + +// Warning: (ae-missing-release-tag) "FragParsingUserdataData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FragParsingUserdataData { + // (undocumented) + frag: Fragment; + // (undocumented) + id: string; + // (undocumented) + samples: UserdataSample[]; +} + +// Warning: (ae-missing-release-tag) "Hls" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +class Hls implements HlsEventEmitter { + constructor(userConfig?: Partial); + attachMedia(media: HTMLMediaElement): void; + get audioTrack(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "audioTrack" must appear on the getter, not the setter. + set audioTrack(audioTrackId: number); + get audioTracks(): Array; + get autoLevelCapping(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "autoLevelCapping" must appear on the getter, not the setter. + set autoLevelCapping(newLevel: number); + get autoLevelEnabled(): boolean; + get bandwidthEstimate(): number; + get capLevelToPlayerSize(): boolean; + // Warning: (ae-setter-with-docs) The doc comment for the property "capLevelToPlayerSize" must appear on the getter, not the setter. + set capLevelToPlayerSize(shouldStartCapping: boolean); + // (undocumented) + readonly config: HlsConfig; + // (undocumented) + createController(ControllerClass: any, fragmentTracker: any, components: any): any; + get currentLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "currentLevel" must appear on the getter, not the setter. + set currentLevel(newLevel: number); + // (undocumented) + static get DefaultConfig(): HlsConfig; + // Warning: (ae-setter-with-docs) The doc comment for the property "DefaultConfig" must appear on the getter, not the setter. + static set DefaultConfig(defaultConfig: HlsConfig); + destroy(): void; + detachMedia(): void; + // (undocumented) + emit(event: E, name: E, eventObject: Parameters[1]): boolean; + // (undocumented) + static get ErrorDetails(): typeof ErrorDetails; + // (undocumented) + static get ErrorTypes(): typeof ErrorTypes; + // (undocumented) + static get Events(): typeof Events; + get firstLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "firstLevel" must appear on the getter, not the setter. + set firstLevel(newLevel: number); + // (undocumented) + static isSupported(): boolean; + get latency(): number; + get levels(): Array; + // (undocumented) + listenerCount(event: E): number; + // (undocumented) + listeners(event: E): HlsListeners[E][]; + get liveSyncPosition(): number | null; + get loadLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "loadLevel" must appear on the getter, not the setter. + set loadLevel(newLevel: number); + loadSource(url: string): void; + get lowLatencyMode(): boolean; + // Warning: (ae-setter-with-docs) The doc comment for the property "lowLatencyMode" must appear on the getter, not the setter. + set lowLatencyMode(mode: boolean); + get manualLevel(): number; + get maxAutoLevel(): number; + get maxLatency(): number; + // (undocumented) + get media(): HTMLMediaElement | null; + get minAutoLevel(): number; + get nextAutoLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "nextAutoLevel" must appear on the getter, not the setter. + set nextAutoLevel(nextLevel: number); + get nextLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "nextLevel" must appear on the getter, not the setter. + set nextLevel(newLevel: number); + get nextLoadLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "nextLoadLevel" must appear on the getter, not the setter. + set nextLoadLevel(level: number); + // (undocumented) + off(event: E, listener?: HlsListeners[E] | undefined, context?: Context, once?: boolean | undefined): void; + // (undocumented) + on(event: E, listener: HlsListeners[E], context?: Context): void; + // (undocumented) + once(event: E, listener: HlsListeners[E], context?: Context): void; + recoverMediaError(): void; + // (undocumented) + removeAllListeners(event?: E | undefined): void; + // (undocumented) + removeLevel(levelIndex: any, urlId?: number): void; + get startLevel(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "startLevel" must appear on the getter, not the setter. + set startLevel(newLevel: number); + startLoad(startPosition?: number): void; + stopLoad(): void; + get subtitleDisplay(): boolean; + // Warning: (ae-setter-with-docs) The doc comment for the property "subtitleDisplay" must appear on the getter, not the setter. + set subtitleDisplay(value: boolean); + get subtitleTrack(): number; + // Warning: (ae-setter-with-docs) The doc comment for the property "subtitleTrack" must appear on the getter, not the setter. + set subtitleTrack(subtitleTrackId: number); + get subtitleTracks(): Array; + swapAudioCodec(): void; + get targetLatency(): number | null; + // (undocumented) + trigger(event: E, eventObject: Parameters[1]): boolean; + // (undocumented) + readonly userConfig: Partial; + // (undocumented) + static get version(): string; +} + +export default Hls; + +// Warning: (ae-missing-release-tag) "HlsChunkPerformanceTiming" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HlsChunkPerformanceTiming extends HlsPerformanceTiming { + // (undocumented) + executeEnd: number; + // (undocumented) + executeStart: number; +} + +// Warning: (ae-missing-release-tag) "HlsConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type HlsConfig = { + debug: boolean; + enableWorker: boolean; + enableSoftwareAES: boolean; + minAutoBitrate: number; + loader: { + new (confg: HlsConfig): Loader; + }; + xhrSetup?: (xhr: XMLHttpRequest, url: string) => void; + audioStreamController?: typeof AudioStreamController; + audioTrackController?: typeof AudioTrackController; + subtitleStreamController?: typeof SubtitleStreamController; + subtitleTrackController?: typeof SubtitleTrackController; + timelineController?: typeof TimelineController; + emeController?: typeof EMEController; + abrController: typeof AbrController; + bufferController: typeof BufferController; + capLevelController: typeof CapLevelController; + fpsController: typeof FPSController; + progressive: boolean; + lowLatencyMode: boolean; +} & ABRControllerConfig & BufferControllerConfig & CapLevelControllerConfig & EMEControllerConfig & FPSControllerConfig & FragmentLoaderConfig & LevelControllerConfig & MP4RemuxerConfig & PlaylistLoaderConfig & StreamControllerConfig & LatencyControllerConfig & TimelineControllerConfig & TSDemuxerConfig; + +// Warning: (ae-missing-release-tag) "HlsEventEmitter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HlsEventEmitter { + // (undocumented) + emit(event: E, name: E, eventObject: Parameters[1]): boolean; + // (undocumented) + listenerCount(event: E): number; + // (undocumented) + listeners(event: E): HlsListeners[E][]; + // (undocumented) + off(event: E, listener?: HlsListeners[E], context?: Context, once?: boolean): void; + // (undocumented) + on(event: E, listener: HlsListeners[E], context?: Context): void; + // (undocumented) + once(event: E, listener: HlsListeners[E], context?: Context): void; + // (undocumented) + removeAllListeners(event?: E): void; +} + +// Warning: (ae-missing-release-tag) "HlsListeners" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HlsListeners { + // (undocumented) + [Events.AUDIO_TRACK_LOADED]: (event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData) => void; + // (undocumented) + [Events.AUDIO_TRACK_LOADING]: (event: Events.AUDIO_TRACK_LOADING, data: TrackLoadingData) => void; + // (undocumented) + [Events.AUDIO_TRACKS_UPDATED]: (event: Events.AUDIO_TRACKS_UPDATED, data: AudioTracksUpdatedData) => void; + // (undocumented) + [Events.AUDIO_TRACK_SWITCHED]: (event: Events.AUDIO_TRACK_SWITCHED, data: AudioTrackSwitchedData) => void; + // (undocumented) + [Events.AUDIO_TRACK_SWITCHING]: (event: Events.AUDIO_TRACK_SWITCHING, data: AudioTrackSwitchingData) => void; + // (undocumented) + [Events.BUFFER_APPENDED]: (event: Events.BUFFER_APPENDED, data: BufferAppendedData) => void; + // (undocumented) + [Events.BUFFER_APPENDING]: (event: Events.BUFFER_APPENDING, data: BufferAppendingData) => void; + // (undocumented) + [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void; + // (undocumented) + [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void; + // (undocumented) + [Events.BUFFER_EOS]: (event: Events.BUFFER_EOS, data: BufferEOSData) => void; + // (undocumented) + [Events.BUFFER_FLUSHED]: (event: Events.BUFFER_FLUSHED, data: BufferFlushedData) => void; + // (undocumented) + [Events.BUFFER_FLUSHING]: (event: Events.BUFFER_FLUSHING, data: BufferFlushingData) => void; + // (undocumented) + [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void; + // (undocumented) + [Events.CUES_PARSED]: (event: Events.CUES_PARSED, data: CuesParsedData) => void; + // (undocumented) + [Events.DESTROYING]: (event: Events.DESTROYING) => void; + // (undocumented) + [Events.ERROR]: (event: Events.ERROR, data: ErrorData) => void; + // (undocumented) + [Events.FPS_DROP]: (event: Events.FPS_DROP, data: FPSDropData) => void; + // (undocumented) + [Events.FPS_DROP_LEVEL_CAPPING]: (event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData) => void; + // (undocumented) + [Events.FRAG_BUFFERED]: (event: Events.FRAG_BUFFERED, data: FragBufferedData) => void; + // (undocumented) + [Events.FRAG_CHANGED]: (event: Events.FRAG_CHANGED, data: FragChangedData) => void; + // (undocumented) + [Events.FRAG_DECRYPTED]: (event: Events.FRAG_DECRYPTED, data: FragDecryptedData) => void; + // (undocumented) + [Events.FRAG_LOADED]: (event: Events.FRAG_LOADED, data: FragLoadedData) => void; + // (undocumented) + [Events.FRAG_LOAD_EMERGENCY_ABORTED]: (event: Events.FRAG_LOAD_EMERGENCY_ABORTED, data: FragLoadEmergencyAbortedData) => void; + // (undocumented) + [Events.FRAG_LOADING]: (event: Events.FRAG_LOADING, data: FragLoadingData) => void; + // (undocumented) + [Events.FRAG_PARSED]: (event: Events.FRAG_PARSED, data: FragParsedData) => void; + // (undocumented) + [Events.FRAG_PARSING_INIT_SEGMENT]: (event: Events.FRAG_PARSING_INIT_SEGMENT, data: FragParsingInitSegmentData) => void; + // (undocumented) + [Events.FRAG_PARSING_METADATA]: (event: Events.FRAG_PARSING_METADATA, data: FragParsingMetadataData) => void; + // (undocumented) + [Events.FRAG_PARSING_USERDATA]: (event: Events.FRAG_PARSING_USERDATA, data: FragParsingUserdataData) => void; + // (undocumented) + [Events.INIT_PTS_FOUND]: (event: Events.INIT_PTS_FOUND, data: InitPTSFoundData) => void; + // (undocumented) + [Events.KEY_LOADED]: (event: Events.KEY_LOADED, data: KeyLoadedData) => void; + // (undocumented) + [Events.KEY_LOADING]: (event: Events.KEY_LOADING, data: KeyLoadingData) => void; + // (undocumented) + [Events.LEVEL_LOADED]: (event: Events.LEVEL_LOADED, data: LevelLoadedData) => void; + // (undocumented) + [Events.LEVEL_LOADING]: (event: Events.LEVEL_LOADING, data: LevelLoadingData) => void; + // (undocumented) + [Events.LEVEL_PTS_UPDATED]: (event: Events.LEVEL_PTS_UPDATED, data: LevelPTSUpdatedData) => void; + // (undocumented) + [Events.LEVELS_UPDATED]: (event: Events.LEVELS_UPDATED, data: LevelsUpdatedData) => void; + // (undocumented) + [Events.LEVEL_SWITCHED]: (event: Events.LEVEL_SWITCHED, data: LevelSwitchedData) => void; + // (undocumented) + [Events.LEVEL_SWITCHING]: (event: Events.LEVEL_SWITCHING, data: LevelSwitchingData) => void; + // (undocumented) + [Events.LEVEL_UPDATED]: (event: Events.LEVEL_UPDATED, data: LevelUpdatedData) => void; + // (undocumented) + [Events.LIVE_BACK_BUFFER_REACHED]: (event: Events.LIVE_BACK_BUFFER_REACHED, data: LiveBackBufferData) => void; + // (undocumented) + [Events.MANIFEST_LOADED]: (event: Events.MANIFEST_LOADED, data: ManifestLoadedData) => void; + // (undocumented) + [Events.MANIFEST_LOADING]: (event: Events.MANIFEST_LOADING, data: ManifestLoadingData) => void; + // (undocumented) + [Events.MANIFEST_PARSED]: (event: Events.MANIFEST_PARSED, data: ManifestParsedData) => void; + // (undocumented) + [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void; + // (undocumented) + [Events.MEDIA_ATTACHING]: (event: Events.MEDIA_ATTACHING, data: MediaAttachingData) => void; + // (undocumented) + [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void; + // (undocumented) + [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void; + // (undocumented) + [Events.NON_NATIVE_TEXT_TRACKS_FOUND]: (event: Events.NON_NATIVE_TEXT_TRACKS_FOUND, data: NonNativeTextTracksData) => void; + // (undocumented) + [Events.SUBTITLE_FRAG_PROCESSED]: (event: Events.SUBTITLE_FRAG_PROCESSED, data: SubtitleFragProcessedData) => void; + // (undocumented) + [Events.SUBTITLE_TRACK_LOADED]: (event: Events.SUBTITLE_TRACK_LOADED, data: SubtitleTrackLoadedData) => void; + // (undocumented) + [Events.SUBTITLE_TRACK_LOADING]: (event: Events.SUBTITLE_TRACK_LOADING, data: TrackLoadingData) => void; + // (undocumented) + [Events.SUBTITLE_TRACKS_CLEARED]: (event: Events.SUBTITLE_TRACKS_CLEARED) => void; + // (undocumented) + [Events.SUBTITLE_TRACKS_UPDATED]: (event: Events.SUBTITLE_TRACKS_UPDATED, data: SubtitleTracksUpdatedData) => void; + // (undocumented) + [Events.SUBTITLE_TRACK_SWITCH]: (event: Events.SUBTITLE_TRACK_SWITCH, data: SubtitleTrackSwitchData) => void; +} + +// Warning: (ae-missing-release-tag) "HlsPerformanceTiming" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HlsPerformanceTiming { + // (undocumented) + end: number; + // (undocumented) + start: number; +} + +// Warning: (ae-missing-release-tag) "HlsProgressivePerformanceTiming" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HlsProgressivePerformanceTiming extends HlsPerformanceTiming { + // (undocumented) + first: number; +} + +// Warning: (ae-missing-release-tag) "HlsSkip" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum HlsSkip { + // (undocumented) + No = "", + // (undocumented) + v2 = "v2", + // (undocumented) + Yes = "YES" +} + +// Warning: (ae-missing-release-tag) "HlsUrlParameters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class HlsUrlParameters { + constructor(msn: number, part?: number, skip?: HlsSkip); + // (undocumented) + addDirectives(uri: string): string | never; + // (undocumented) + msn: number; + // (undocumented) + part?: number; + // (undocumented) + skip?: HlsSkip; +} + +// Warning: (ae-missing-release-tag) "InitPTSFoundData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface InitPTSFoundData { + // (undocumented) + frag: Fragment; + // (undocumented) + id: string; + // (undocumented) + initPTS: number; + // (undocumented) + timescale: number; +} + +// Warning: (ae-missing-release-tag) "KeyLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KeyLoadedData { + // (undocumented) + frag: Fragment; +} + +// Warning: (ae-missing-release-tag) "KeyLoadingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KeyLoadingData { + // (undocumented) + frag: Fragment; +} + +// Warning: (ae-missing-release-tag) "KeySystems" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum KeySystems { + // (undocumented) + PLAYREADY = "com.microsoft.playready", + // (undocumented) + WIDEVINE = "com.widevine.alpha" +} + +// Warning: (ae-missing-release-tag) "LatencyControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LatencyControllerConfig = { + liveSyncDurationCount: number; + liveMaxLatencyDurationCount: number; + liveSyncDuration?: number; + liveMaxLatencyDuration?: number; + maxLiveSyncPlaybackRate: number; +}; + +// Warning: (ae-missing-release-tag) "Level" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Level { + constructor(data: LevelParsed); + // (undocumented) + readonly attrs: LevelAttributes; + // (undocumented) + readonly audioCodec: string | undefined; + // (undocumented) + audioGroupIds?: string[]; + // (undocumented) + readonly bitrate: number; + // (undocumented) + readonly codecSet: string; + // (undocumented) + details?: LevelDetails; + // (undocumented) + fragmentError: number; + // (undocumented) + readonly height: number; + // (undocumented) + readonly id: number; + // (undocumented) + loaded?: { + bytes: number; + duration: number; + }; + // (undocumented) + loadError: number; + // (undocumented) + get maxBitrate(): number; + // (undocumented) + readonly name: string | undefined; + // (undocumented) + realBitrate: number; + // (undocumented) + textGroupIds?: string[]; + // (undocumented) + readonly unknownCodecs: string[] | undefined; + // (undocumented) + get uri(): string; + // (undocumented) + url: string[]; + // (undocumented) + get urlId(): number; + set urlId(value: number); + // (undocumented) + readonly videoCodec: string | undefined; + // (undocumented) + readonly width: number; +} + +// Warning: (ae-missing-release-tag) "LevelAttributes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelAttributes extends AttrList { + // (undocumented) + 'AVERAGE-BANDWIDTH'?: string; + // (undocumented) + 'CLOSED-CAPTIONS'?: string; + // (undocumented) + 'FRAME-RATE'?: string; + // (undocumented) + 'PROGRAM-ID'?: string; + // (undocumented) + AUDIO?: string; + // (undocumented) + AUTOSELECT?: string; + // (undocumented) + BANDWIDTH?: string; + // (undocumented) + BYTERANGE?: string; + // (undocumented) + CODECS?: string; + // (undocumented) + DEFAULT?: string; + // (undocumented) + FORCED?: string; + // (undocumented) + LANGUAGE?: string; + // (undocumented) + NAME?: string; + // (undocumented) + RESOLUTION?: string; + // (undocumented) + SUBTITLES?: string; + // (undocumented) + TYPE?: string; + // (undocumented) + URI?: string; +} + +// Warning: (ae-missing-release-tag) "LevelControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LevelControllerConfig = { + startLevel?: number; +}; + +// Warning: (ae-missing-release-tag) "LevelDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class LevelDetails { + constructor(baseUrl: any); + // (undocumented) + advanced: boolean; + // (undocumented) + advancedDateTime?: number; + // (undocumented) + get age(): number; + // (undocumented) + ageHeader: number; + // (undocumented) + alignedSliding: boolean; + // (undocumented) + availabilityDelay?: number; + // (undocumented) + averagetargetduration?: number; + // (undocumented) + canBlockReload: boolean; + // (undocumented) + canSkipDateRanges: boolean; + // (undocumented) + canSkipUntil: number; + // (undocumented) + deltaUpdateFailed?: boolean; + // (undocumented) + get edge(): number; + // (undocumented) + endCC: number; + // (undocumented) + endSN: number; + // (undocumented) + get fragmentEnd(): number; + // (undocumented) + fragmentHint?: Fragment; + // (undocumented) + fragments: Fragment[]; + // (undocumented) + get hasProgramDateTime(): boolean; + // (undocumented) + holdBack: number; + // (undocumented) + initSegment: Fragment | null; + // (undocumented) + get lastPartIndex(): number; + // (undocumented) + get lastPartSn(): number; + // (undocumented) + get levelTargetDuration(): number; + // (undocumented) + live: boolean; + // (undocumented) + m3u8: string; + // (undocumented) + misses: number; + // (undocumented) + needSidxRanges: boolean; + // (undocumented) + get partEnd(): number; + // (undocumented) + partHoldBack: number; + // (undocumented) + partList: Part[] | null; + // (undocumented) + partTarget: number; + // (undocumented) + preloadHint?: AttrList; + // (undocumented) + PTSKnown: boolean; + // (undocumented) + recentlyRemovedDateranges?: string[]; + // (undocumented) + reloaded(previous: LevelDetails | undefined): void; + // (undocumented) + renditionReports?: AttrList[]; + // (undocumented) + skippedSegments: number; + // (undocumented) + startCC: number; + // (undocumented) + startSN: number; + // (undocumented) + startTimeOffset: number | null; + // (undocumented) + targetduration: number; + // (undocumented) + totalduration: number; + // (undocumented) + tuneInGoal: number; + // (undocumented) + type: string | null; + // (undocumented) + updated: boolean; + // (undocumented) + url: string; + // (undocumented) + version: number | null; +} + +// Warning: (ae-missing-release-tag) "LevelKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class LevelKey { + // (undocumented) + static fromURI(uri: string): LevelKey; + // (undocumented) + static fromURL(baseUrl: string, relativeUrl: string): LevelKey; + // (undocumented) + iv: Uint8Array | null; + // (undocumented) + key: Uint8Array | null; + // (undocumented) + keyFormat: string | null; + // (undocumented) + keyFormatVersions: string | null; + // (undocumented) + keyID: string | null; + // (undocumented) + method: string | null; + // (undocumented) + get uri(): string | null; + } + +// Warning: (ae-missing-release-tag) "LevelLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelLoadedData { + // (undocumented) + deliveryDirectives: HlsUrlParameters | null; + // (undocumented) + details: LevelDetails; + // (undocumented) + id: number; + // (undocumented) + level: number; + // (undocumented) + networkDetails: any; + // (undocumented) + stats: LoaderStats; +} + +// Warning: (ae-missing-release-tag) "LevelLoadingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelLoadingData { + // (undocumented) + deliveryDirectives: HlsUrlParameters | null; + // (undocumented) + id: number; + // (undocumented) + level: number; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "LevelParsed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelParsed { + // (undocumented) + attrs: LevelAttributes; + // (undocumented) + audioCodec?: string; + // (undocumented) + bitrate: number; + // (undocumented) + details?: LevelDetails; + // (undocumented) + height?: number; + // (undocumented) + id?: number; + // (undocumented) + level?: number; + // (undocumented) + name: string; + // (undocumented) + textCodec?: string; + // (undocumented) + unknownCodecs?: string[]; + // (undocumented) + url: string; + // (undocumented) + videoCodec?: string; + // (undocumented) + width?: number; +} + +// Warning: (ae-missing-release-tag) "LevelPTSUpdatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelPTSUpdatedData { + // (undocumented) + details: LevelDetails; + // (undocumented) + drift: number; + // (undocumented) + end: number; + // (undocumented) + frag: Fragment; + // (undocumented) + level: Level; + // (undocumented) + start: number; + // (undocumented) + type: string; +} + +// Warning: (ae-missing-release-tag) "LevelsUpdatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelsUpdatedData { + // (undocumented) + levels: Array; +} + +// Warning: (ae-missing-release-tag) "LevelSwitchedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelSwitchedData { + // (undocumented) + level: number; +} + +// Warning: (ae-missing-release-tag) "LevelSwitchingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelSwitchingData extends Omit { + // (undocumented) + level: number; +} + +// Warning: (ae-missing-release-tag) "LevelUpdatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LevelUpdatedData { + // (undocumented) + details: LevelDetails; + // (undocumented) + level: number; +} + +// Warning: (ae-missing-release-tag) "LiveBackBufferData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LiveBackBufferData { + // (undocumented) + bufferEnd: number; +} + +// Warning: (ae-missing-release-tag) "Loader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Loader { + // (undocumented) + abort(): void; + // (undocumented) + context: T; + // (undocumented) + destroy(): void; + // (undocumented) + getResponseHeader(name: string): string | null; + // (undocumented) + load(context: LoaderContext, config: LoaderConfiguration, callbacks: LoaderCallbacks): void; + // (undocumented) + loader: any; + // (undocumented) + stats: LoaderStats; +} + +// Warning: (ae-missing-release-tag) "LoaderCallbacks" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LoaderCallbacks { + // (undocumented) + onAbort?: LoaderOnAbort; + // (undocumented) + onError: LoaderOnError; + // (undocumented) + onProgress?: LoaderOnProgress; + // (undocumented) + onSuccess: LoaderOnSuccess; + // (undocumented) + onTimeout: LoaderOnTimeout; +} + +// Warning: (ae-missing-release-tag) "LoaderConfiguration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LoaderConfiguration { + // (undocumented) + highWaterMark: number; + // (undocumented) + maxRetry: number; + // (undocumented) + maxRetryDelay: number; + // (undocumented) + retryDelay: number; + // (undocumented) + timeout: number; +} + +// Warning: (ae-missing-release-tag) "LoaderContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LoaderContext { + // (undocumented) + progressData?: boolean; + // (undocumented) + rangeEnd?: number; + // (undocumented) + rangeStart?: number; + // (undocumented) + responseType: string; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "LoaderOnAbort" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LoaderOnAbort = (stats: LoaderStats, context: T, networkDetails: any) => void; + +// Warning: (ae-missing-release-tag) "LoaderOnError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LoaderOnError = (error: { + code: number; + text: string; +}, context: T, networkDetails: any) => void; + +// Warning: (ae-missing-release-tag) "LoaderOnProgress" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LoaderOnProgress = (stats: LoaderStats, context: T, data: string | ArrayBuffer, networkDetails: any) => void; + +// Warning: (ae-missing-release-tag) "LoaderOnSuccess" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LoaderOnSuccess = (response: LoaderResponse, stats: LoaderStats, context: T, networkDetails: any) => void; + +// Warning: (ae-missing-release-tag) "LoaderOnTimeout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LoaderOnTimeout = (stats: LoaderStats, context: T, networkDetails: any) => void; + +// Warning: (ae-missing-release-tag) "LoaderResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LoaderResponse { + // (undocumented) + data: string | ArrayBuffer; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "LoaderStats" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LoaderStats { + // (undocumented) + aborted: boolean; + // (undocumented) + buffering: HlsProgressivePerformanceTiming; + // (undocumented) + bwEstimate: number; + // (undocumented) + chunkCount: number; + // (undocumented) + loaded: number; + // (undocumented) + loading: HlsProgressivePerformanceTiming; + // (undocumented) + parsing: HlsPerformanceTiming; + // (undocumented) + retry: number; + // (undocumented) + total: number; +} + +// Warning: (ae-missing-release-tag) "LoadStats" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class LoadStats implements LoaderStats { + // (undocumented) + aborted: boolean; + // (undocumented) + buffering: HlsProgressivePerformanceTiming; + // (undocumented) + bwEstimate: number; + // (undocumented) + chunkCount: number; + // (undocumented) + loaded: number; + // (undocumented) + loading: HlsProgressivePerformanceTiming; + // (undocumented) + parsing: HlsPerformanceTiming; + // (undocumented) + retry: number; + // (undocumented) + total: number; +} + +// Warning: (ae-missing-release-tag) "MainPlaylistType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type MainPlaylistType = AudioPlaylistType | 'VIDEO'; + +// Warning: (ae-missing-release-tag) "ManifestLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ManifestLoadedData { + // (undocumented) + audioTracks: MediaPlaylist[]; + // (undocumented) + captions?: MediaPlaylist[]; + // (undocumented) + levels: LevelParsed[]; + // (undocumented) + networkDetails: any; + // (undocumented) + sessionData: Record | null; + // (undocumented) + stats: LoaderStats; + // (undocumented) + subtitles?: MediaPlaylist[]; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "ManifestLoadingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ManifestLoadingData { + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "ManifestParsedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ManifestParsedData { + // (undocumented) + altAudio: boolean; + // (undocumented) + audio: boolean; + // (undocumented) + audioTracks: MediaPlaylist[]; + // (undocumented) + firstLevel: number; + // (undocumented) + levels: Level[]; + // (undocumented) + stats: LoaderStats; + // (undocumented) + subtitleTracks: MediaPlaylist[]; + // (undocumented) + video: boolean; +} + +// Warning: (ae-missing-release-tag) "MediaAttachedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface MediaAttachedData { + // (undocumented) + media: HTMLMediaElement; +} + +// Warning: (ae-missing-release-tag) "MediaAttachingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface MediaAttachingData { + // (undocumented) + media: HTMLMediaElement; +} + +// Warning: (ae-missing-release-tag) "MediaKeyFunc" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise; + +// Warning: (ae-missing-release-tag) "MediaPlaylist" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface MediaPlaylist extends LevelParsed { + // (undocumented) + autoselect: boolean; + // (undocumented) + default: boolean; + // (undocumented) + forced: boolean; + // (undocumented) + groupId?: string; + // (undocumented) + id: number; + // (undocumented) + instreamId?: string; + // (undocumented) + lang?: string; + // (undocumented) + name: string; + // (undocumented) + type: MediaPlaylistType | 'main'; +} + +// Warning: (ae-missing-release-tag) "MediaPlaylistType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type MediaPlaylistType = MainPlaylistType | SubtitlePlaylistType; + +// Warning: (ae-missing-release-tag) "MetadataSample" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface MetadataSample { + // (undocumented) + data: Uint8Array; + // (undocumented) + dts: number; + // (undocumented) + len?: number; + // (undocumented) + pts: number; +} + +// Warning: (ae-missing-release-tag) "MP4RemuxerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type MP4RemuxerConfig = { + stretchShortVideoTrack: boolean; + maxAudioFramesDrift: number; +}; + +// Warning: (ae-missing-release-tag) "NonNativeTextTrack" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface NonNativeTextTrack { + // (undocumented) + closedCaptions?: MediaPlaylist; + // (undocumented) + default: boolean; + // (undocumented) + _id?: string; + // (undocumented) + kind: string; + // (undocumented) + label: any; + // (undocumented) + subtitleTrack?: MediaPlaylist; +} + +// Warning: (ae-missing-release-tag) "NonNativeTextTracksData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface NonNativeTextTracksData { + // (undocumented) + tracks: Array; +} + +// Warning: (ae-missing-release-tag) "Part" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Part extends BaseSegment { + constructor(partAttrs: AttrList, frag: Fragment, baseurl: string, index: number, previous?: Part); + // (undocumented) + readonly duration: number; + // (undocumented) + get end(): number; + // (undocumented) + readonly fragment: Fragment; + // (undocumented) + readonly fragOffset: number; + // (undocumented) + readonly gap: boolean; + // (undocumented) + readonly independent: boolean; + // (undocumented) + readonly index: number; + // (undocumented) + get loaded(): boolean; + // (undocumented) + readonly relurl: string; + // (undocumented) + get start(): number; + // (undocumented) + stats: LoadStats; +} + +// Warning: (ae-missing-release-tag) "PlaylistContextType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum PlaylistContextType { + // (undocumented) + AUDIO_TRACK = "audioTrack", + // (undocumented) + LEVEL = "level", + // (undocumented) + MANIFEST = "manifest", + // (undocumented) + SUBTITLE_TRACK = "subtitleTrack" +} + +// Warning: (ae-missing-release-tag) "PlaylistLevelType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum PlaylistLevelType { + // (undocumented) + AUDIO = "audio", + // (undocumented) + MAIN = "main", + // (undocumented) + SUBTITLE = "subtitle" +} + +// Warning: (ae-missing-release-tag) "PlaylistLoaderConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PlaylistLoaderConfig = { + pLoader?: { + new (confg: HlsConfig): Loader; + }; + manifestLoadingTimeOut: number; + manifestLoadingMaxRetry: number; + manifestLoadingRetryDelay: number; + manifestLoadingMaxRetryTimeout: number; + levelLoadingTimeOut: number; + levelLoadingMaxRetry: number; + levelLoadingRetryDelay: number; + levelLoadingMaxRetryTimeout: number; +}; + +// Warning: (ae-missing-release-tag) "PlaylistLoaderContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PlaylistLoaderContext extends LoaderContext { + // (undocumented) + deliveryDirectives: HlsUrlParameters | null; + // (undocumented) + groupId: string | null; + // (undocumented) + id: number | null; + // (undocumented) + isSidxRequest?: boolean; + // (undocumented) + level: number | null; + // (undocumented) + levelDetails?: LevelDetails; + // (undocumented) + loader?: Loader; + // (undocumented) + type: PlaylistContextType; +} + +// Warning: (ae-missing-release-tag) "SourceBufferName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type SourceBufferName = 'video' | 'audio' | 'audiovideo'; + +// Warning: (ae-missing-release-tag) "StreamControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type StreamControllerConfig = { + autoStartLoad: boolean; + startPosition: number; + defaultAudioCodec?: string; + initialLiveManifestSize: number; + maxBufferLength: number; + maxBufferSize: number; + maxBufferHole: number; + highBufferWatchdogPeriod: number; + nudgeOffset: number; + nudgeMaxRetry: number; + maxFragLookUpTolerance: number; + maxMaxBufferLength: number; + startFragPrefetch: boolean; + testBandwidth: boolean; +}; + +// Warning: (ae-missing-release-tag) "SubtitleFragProcessedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SubtitleFragProcessedData { + // (undocumented) + error?: Error; + // (undocumented) + frag: Fragment; + // (undocumented) + success: boolean; +} + +// Warning: (ae-missing-release-tag) "SubtitlePlaylistType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type SubtitlePlaylistType = 'SUBTITLES' | 'CLOSED-CAPTIONS'; + +// Warning: (ae-missing-release-tag) "SubtitleTrackLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SubtitleTrackLoadedData extends TrackLoadedData { +} + +// Warning: (ae-missing-release-tag) "SubtitleTracksUpdatedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SubtitleTracksUpdatedData { + // (undocumented) + subtitleTracks: MediaPlaylist[]; +} + +// Warning: (ae-missing-release-tag) "SubtitleTrackSwitchData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SubtitleTrackSwitchData { + // (undocumented) + id: number; + // (undocumented) + type?: MediaPlaylistType | 'main'; + // (undocumented) + url?: string; +} + +// Warning: (ae-missing-release-tag) "TimelineControllerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type TimelineControllerConfig = { + cueHandler: CuesInterface; + enableCEA708Captions: boolean; + enableWebVTT: boolean; + enableIMSC1: boolean; + captionsTextTrack1Label: string; + captionsTextTrack1LanguageCode: string; + captionsTextTrack2Label: string; + captionsTextTrack2LanguageCode: string; + captionsTextTrack3Label: string; + captionsTextTrack3LanguageCode: string; + captionsTextTrack4Label: string; + captionsTextTrack4LanguageCode: string; + renderTextTracksNatively: boolean; +}; + +// Warning: (ae-missing-release-tag) "Track" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Track { + // (undocumented) + buffer?: SourceBuffer; + // (undocumented) + codec?: string; + // (undocumented) + container: string; + // (undocumented) + id: 'audio' | 'main'; + // (undocumented) + initSegment?: Uint8Array; + // (undocumented) + levelCodec?: string; + // (undocumented) + metadata?: any; +} + +// Warning: (ae-missing-release-tag) "TrackLoadedData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface TrackLoadedData { + // (undocumented) + deliveryDirectives: HlsUrlParameters | null; + // (undocumented) + details: LevelDetails; + // (undocumented) + groupId: string; + // (undocumented) + id: number; + // (undocumented) + networkDetails: any; + // (undocumented) + stats: LoaderStats; +} + +// Warning: (ae-missing-release-tag) "TrackLoadingData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface TrackLoadingData { + // (undocumented) + deliveryDirectives: HlsUrlParameters | null; + // (undocumented) + groupId: string; + // (undocumented) + id: number; + // (undocumented) + url: string; +} + +// Warning: (ae-missing-release-tag) "TrackSet" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface TrackSet { + // (undocumented) + audio?: Track; + // (undocumented) + audiovideo?: Track; + // (undocumented) + video?: Track; +} + +// Warning: (ae-missing-release-tag) "TSDemuxerConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type TSDemuxerConfig = { + forceKeyFrameOnDiscontinuity: boolean; +}; + +// Warning: (ae-missing-release-tag) "UserdataSample" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface UserdataSample { + // (undocumented) + bytes: Uint8Array; + // (undocumented) + pts: number; +} + + +// Warnings were encountered during analysis: +// +// src/config.ts:153:3 - (ae-forgotten-export) The symbol "AudioStreamController" needs to be exported by the entry point hls.d.ts +// src/config.ts:154:3 - (ae-forgotten-export) The symbol "AudioTrackController" needs to be exported by the entry point hls.d.ts +// src/config.ts:156:3 - (ae-forgotten-export) The symbol "SubtitleStreamController" needs to be exported by the entry point hls.d.ts +// src/config.ts:157:3 - (ae-forgotten-export) The symbol "SubtitleTrackController" needs to be exported by the entry point hls.d.ts +// src/config.ts:158:3 - (ae-forgotten-export) The symbol "TimelineController" needs to be exported by the entry point hls.d.ts +// src/config.ts:160:3 - (ae-forgotten-export) The symbol "EMEController" needs to be exported by the entry point hls.d.ts +// src/config.ts:162:3 - (ae-forgotten-export) The symbol "AbrController" needs to be exported by the entry point hls.d.ts +// src/config.ts:163:3 - (ae-forgotten-export) The symbol "BufferController" needs to be exported by the entry point hls.d.ts +// src/config.ts:164:3 - (ae-forgotten-export) The symbol "CapLevelController" needs to be exported by the entry point hls.d.ts +// src/config.ts:165:3 - (ae-forgotten-export) The symbol "FPSController" needs to be exported by the entry point hls.d.ts + +// (No @packageDocumentation comment for this package) + +``` diff --git a/demo/chart/timeline-chart.ts b/demo/chart/timeline-chart.ts index 51d92a8140f..a9b05519414 100644 --- a/demo/chart/timeline-chart.ts +++ b/demo/chart/timeline-chart.ts @@ -1,11 +1,11 @@ import Chart from 'chart.js'; import 'chartjs-plugin-zoom'; import { applyChartInstanceOverrides, hhmmss } from './chartjs-horizontal-bar'; -import Fragment from '../../src/loader/fragment'; +import { Fragment } from '../../src/loader/fragment'; import type { Level } from '../../src/types/level'; import type { TrackSet } from '../../src/types/track'; import type { MediaPlaylist } from '../../src/types/media-playlist'; -import type LevelDetails from '../../src/loader/level-details'; +import type { LevelDetails } from '../../src/loader/level-details'; import { FragChangedData, FragLoadedData, @@ -83,7 +83,7 @@ export class TimelineChart { const obj = dataset.data![(element[0] as any)._index]; // eslint-disable-next-line no-console console.log(obj); - if (self.hls && self.hls.media) { + if (self.hls?.media) { const scale = this.chartScales[X_AXIS_SECONDS]; const pos = Chart.helpers.getRelativePosition(event, chart); self.hls.media.currentTime = scale.getValueForPixel(pos.x); @@ -600,7 +600,7 @@ export class TimelineChart { drawCurrentTime() { const chart = this.chart; - if (self.hls && self.hls.media && chart.data.datasets!.length) { + if (self.hls?.media && chart.data.datasets!.length) { const currentTime = self.hls.media.currentTime; const scale = this.chartScales[X_AXIS_SECONDS]; const ctx = chart.ctx; @@ -672,14 +672,12 @@ function datasetWithDefaults(options) { } function getPlaylistStart(details: LevelDetails): number { - return details.fragments && details.fragments.length - ? details.fragments[0].start - : 0; + return details.fragments?.length ? details.fragments[0].start : 0; } function getLevelName(level: Level, index: number) { let label = '(main playlist)'; - if (level.attrs && level.attrs.BANDWIDTH) { + if (level.attrs?.BANDWIDTH) { label = `${getMainLevelAttribute(level)}@${level.attrs.BANDWIDTH}`; if (level.name) { label = `${label} (${level.name})`; diff --git a/package-lock.json b/package-lock.json index b0e6413063b..605a3f7817b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4529,6 +4529,64 @@ "@types/yargs": "^13.0.0" } }, + "@microsoft/api-extractor": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.13.1.tgz", + "integrity": "sha512-mnWb5Vuyn/JnjC359HfsRmLDM4/vzyKcJuxQr5Cg/apbkMHuTB1hQrqA8zBda4N+MJZ5ET2BPsrKaUX1qhz8jw==", + "dev": true, + "requires": { + "@microsoft/api-extractor-model": "7.12.2", + "@microsoft/tsdoc": "0.12.24", + "@rushstack/node-core-library": "3.36.0", + "@rushstack/rig-package": "0.2.9", + "@rushstack/ts-command-line": "4.7.8", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "source-map": "~0.6.1", + "typescript": "~4.1.3" + }, + "dependencies": { + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@microsoft/api-extractor-model": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.12.2.tgz", + "integrity": "sha512-EU+U09Mj65zUH0qwPF4PFJiL6Y+PQQE/RRGEHEDGJJzab/mRQDpKOyrzSdb00xvcd/URehIHJqC55cY2Y4jGOA==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.12.24", + "@rushstack/node-core-library": "3.36.0" + } + }, + "@microsoft/tsdoc": { + "version": "0.12.24", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.24.tgz", + "integrity": "sha512-Mfmij13RUTmHEMi9vRUhMXD7rnGR2VvxeNYtaGtaJ4redwwjT4UXYJ+nzmVJF7hhd4pn/Fx5sncDKxMVFJSWPg==", + "dev": true + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -7028,6 +7086,111 @@ } } }, + "@rushstack/node-core-library": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.36.0.tgz", + "integrity": "sha512-bID2vzXpg8zweXdXgQkKToEdZwVrVCN9vE9viTRk58gqzYaTlz4fMId6V3ZfpXN6H0d319uGi2KDlm+lUEeqCg==", + "dev": true, + "requires": { + "@types/node": "10.17.13", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "timsort": "~0.3.0", + "z-schema": "~3.18.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "dev": true + }, + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rushstack/rig-package": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.2.9.tgz", + "integrity": "sha512-4tqsZ/m+BjeNAGeAJYzPF53CT96TsAYeZ3Pq3T4tb1pGGM3d3TWfkmALZdKNhpRlAeShKUrb/o/f/0sAuK/1VQ==", + "dev": true, + "requires": { + "@types/node": "10.17.13", + "resolve": "~1.17.0", + "strip-json-comments": "~3.1.1" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rushstack/ts-command-line": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.7.8.tgz", + "integrity": "sha512-8ghIWhkph7NnLCMDJtthpsb7TMOsVGXVDvmxjE/CeklTqjbbUFBjGXizJfpbEkRQTELuZQ2+vGn7sGwIWKN2uA==", + "dev": true, + "requires": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + }, + "dependencies": { + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true + } + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -7126,6 +7289,12 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, "@types/chai": { "version": "4.2.14", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.14.tgz", @@ -15936,6 +16105,12 @@ } } }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", @@ -16975,6 +17150,12 @@ "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, "lodash.islength": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.islength/-/lodash.islength-4.0.1.tgz", @@ -22632,6 +22813,12 @@ "setimmediate": "^1.0.4" } }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -23365,6 +23552,12 @@ "builtins": "^1.0.3" } }, + "validator": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", + "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", + "dev": true + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -25209,6 +25402,18 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, + "z-schema": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", + "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", + "dev": true, + "requires": { + "commander": "^2.7.1", + "lodash.get": "^4.0.0", + "lodash.isequal": "^4.0.0", + "validator": "^8.0.0" + } + }, "zip-stream": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", diff --git a/package.json b/package.json index c5a7b293334..2f39eda59d9 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/video-dev/hls.js/issues" }, "main": "./dist/hls.js", - "types": "./dist/hls.d.ts", + "types": "./dist/hls.js.d.ts", "files": [ "dist/**/*", "src/**/*" @@ -26,11 +26,11 @@ } }, "scripts": { - "build": "webpack --progress", - "build:ci": "webpack", + "build": "webpack --progress && npm run build:types", + "build:ci": "webpack && tsc --build tsconfig-lib.json && api-extractor run", "build:debug": "webpack --progress --env debug --env demo", "build:watch": "webpack --progress --env debug --env demo --watch", - "build:types": "tsc --emitDeclarationOnly", + "build:types": "tsc --build tsconfig-lib.json && api-extractor run --local", "dev": "webpack serve --progress --env debug --env demo --port 8000", "docs": "esdoc", "lint": "eslint src/ tests/ --ext .js --ext .ts", @@ -69,6 +69,7 @@ "@itsjamie/esdoc-ecmascript-proposal-plugin": "^0.3.1", "@itsjamie/esdoc-standard-plugin": "^0.3.1", "@itsjamie/esdoc-typescript-plugin": "^0.3.1", + "@microsoft/api-extractor": "^7.13.1", "@types/chai": "^4.2.14", "@types/chart.js": "^2.9.29", "@types/mocha": "^8.2.0", diff --git a/src/config.ts b/src/config.ts index 34836132bcd..f93033bf5ac 100644 --- a/src/config.ts +++ b/src/config.ts @@ -10,7 +10,7 @@ import FPSController from './controller/fps-controller'; import EMEController from './controller/eme-controller'; import XhrLoader from './utils/xhr-loader'; import FetchLoader, { fetchSupported } from './utils/fetch-loader'; -import * as Cues from './utils/cues'; +import { CuesInterface, newCue } from './utils/cues'; import { requestMediaKeySystemAccess } from './utils/mediakeys-helper'; import { logger } from './utils/logger'; @@ -22,7 +22,7 @@ import type { PlaylistLoaderContext, } from './types/loader'; -type ABRControllerConfig = { +export type ABRControllerConfig = { abrEwmaFastLive: number; abrEwmaSlowLive: number; abrEwmaFastVoD: number; @@ -41,7 +41,7 @@ export type BufferControllerConfig = { liveBackBufferLength: number; }; -type CapLevelControllerConfig = { +export type CapLevelControllerConfig = { capLevelToPlayerSize: boolean; }; @@ -58,7 +58,7 @@ export type EMEControllerConfig = { requestMediaKeySystemAccessFunc: MediaKeyFunc | null; }; -type FragmentLoaderConfig = { +export type FragmentLoaderConfig = { fLoader?: { new (confg: HlsConfig): Loader }; fragLoadingTimeOut: number; @@ -67,13 +67,13 @@ type FragmentLoaderConfig = { fragLoadingMaxRetryTimeout: number; }; -type FPSControllerConfig = { +export type FPSControllerConfig = { capLevelOnFPSDrop: boolean; fpsDroppedMonitoringPeriod: number; fpsDroppedMonitoringThreshold: number; }; -type LevelControllerConfig = { +export type LevelControllerConfig = { startLevel?: number; }; @@ -82,7 +82,7 @@ export type MP4RemuxerConfig = { maxAudioFramesDrift: number; }; -type PlaylistLoaderConfig = { +export type PlaylistLoaderConfig = { pLoader?: { new (confg: HlsConfig): Loader }; manifestLoadingTimeOut: number; @@ -96,7 +96,7 @@ type PlaylistLoaderConfig = { levelLoadingMaxRetryTimeout: number; }; -type StreamControllerConfig = { +export type StreamControllerConfig = { autoStartLoad: boolean; startPosition: number; defaultAudioCodec?: string; @@ -113,7 +113,7 @@ type StreamControllerConfig = { testBandwidth: boolean; }; -type LatencyControllerConfig = { +export type LatencyControllerConfig = { liveSyncDurationCount: number; liveMaxLatencyDurationCount: number; liveSyncDuration?: number; @@ -121,8 +121,8 @@ type LatencyControllerConfig = { maxLiveSyncPlaybackRate: number; }; -type TimelineControllerConfig = { - cueHandler: Cues.CuesInterface; +export type TimelineControllerConfig = { + cueHandler: CuesInterface; enableCEA708Captions: boolean; enableWebVTT: boolean; enableIMSC1: boolean; @@ -137,7 +137,7 @@ type TimelineControllerConfig = { renderTextTracksNatively: boolean; }; -type TSDemuxerConfig = { +export type TSDemuxerConfig = { forceKeyFrameOnDiscontinuity: boolean; }; @@ -272,7 +272,7 @@ export const hlsDefaultConfig: HlsConfig = { function timelineConfig(): TimelineControllerConfig { return { - cueHandler: Cues, // used by timeline-controller + cueHandler: { newCue }, // used by timeline-controller enableCEA708Captions: __USE_SUBTITLES__, // used by timeline-controller enableWebVTT: __USE_SUBTITLES__, // used by timeline-controller enableIMSC1: __USE_SUBTITLES__, // used by timeline-controller diff --git a/src/controller/abr-controller.ts b/src/controller/abr-controller.ts index d9d0ffd77cc..1cf74502a3c 100644 --- a/src/controller/abr-controller.ts +++ b/src/controller/abr-controller.ts @@ -5,7 +5,7 @@ import { ErrorDetails } from '../errors'; import { PlaylistLevelType } from '../types/loader'; import { logger } from '../utils/logger'; import type { Bufferable } from '../utils/buffer-helper'; -import type Fragment from '../loader/fragment'; +import type { Fragment } from '../loader/fragment'; import type { Part } from '../loader/fragment'; import type { LoaderStats } from '../types/loader'; import type Hls from '../hls'; diff --git a/src/controller/audio-stream-controller.ts b/src/controller/audio-stream-controller.ts index 2971416b64b..96b2aa6d4d2 100644 --- a/src/controller/audio-stream-controller.ts +++ b/src/controller/audio-stream-controller.ts @@ -6,7 +6,7 @@ import type { FragmentTracker } from './fragment-tracker'; import { FragmentState } from './fragment-tracker'; import { Level } from '../types/level'; import { PlaylistLevelType } from '../types/loader'; -import Fragment, { ElementaryStreamTypes, Part } from '../loader/fragment'; +import { Fragment, ElementaryStreamTypes, Part } from '../loader/fragment'; import FragmentLoader from '../loader/fragment-loader'; import ChunkCache from '../demux/chunk-cache'; import TransmuxerInterface from '../demux/transmuxer-interface'; @@ -18,7 +18,7 @@ import { MAX_START_GAP_JUMP } from './gap-controller'; import { ErrorDetails } from '../errors'; import { logger } from '../utils/logger'; import type Hls from '../hls'; -import type LevelDetails from '../loader/level-details'; +import type { LevelDetails } from '../loader/level-details'; import type { TrackSet } from '../types/track'; import type { BufferCreatedData, diff --git a/src/controller/base-playlist-controller.ts b/src/controller/base-playlist-controller.ts index 4b40d4661a3..5cf0baa2a9a 100644 --- a/src/controller/base-playlist-controller.ts +++ b/src/controller/base-playlist-controller.ts @@ -3,7 +3,7 @@ import type { NetworkComponentAPI } from '../types/component-api'; import { getSkipValue, HlsSkip, HlsUrlParameters } from '../types/level'; import { computeReloadInterval } from './level-helper'; import { logger } from '../utils/logger'; -import type LevelDetails from '../loader/level-details'; +import type { LevelDetails } from '../loader/level-details'; import type { MediaPlaylist } from '../types/media-playlist'; import type { AudioTrackLoadedData, diff --git a/src/controller/base-stream-controller.ts b/src/controller/base-stream-controller.ts index 50cd2b1abb6..d0fde54a7f9 100644 --- a/src/controller/base-stream-controller.ts +++ b/src/controller/base-stream-controller.ts @@ -14,12 +14,12 @@ import { findFragWithCC, } from './fragment-finders'; import TransmuxerInterface from '../demux/transmuxer-interface'; -import Fragment, { Part } from '../loader/fragment'; +import { Fragment, Part } from '../loader/fragment'; import FragmentLoader, { FragmentLoadProgressCallback, LoadError, } from '../loader/fragment-loader'; -import LevelDetails from '../loader/level-details'; +import { LevelDetails } from '../loader/level-details'; import { BufferAppendingData, ErrorData, diff --git a/src/controller/buffer-controller.ts b/src/controller/buffer-controller.ts index b3899fe7b57..fac644091c4 100644 --- a/src/controller/buffer-controller.ts +++ b/src/controller/buffer-controller.ts @@ -25,7 +25,7 @@ import type { } from '../types/events'; import type { ComponentAPI } from '../types/component-api'; import type Hls from '../hls'; -import LevelDetails from '../loader/level-details'; +import { LevelDetails } from '../loader/level-details'; const MediaSource = getMediaSource(); const VIDEO_CODEC_PROFILE_REPACE = /([ha]vc.)(?:\.[^.,]+)+/; diff --git a/src/controller/fragment-finders.ts b/src/controller/fragment-finders.ts index da63f2456fa..e933716273a 100644 --- a/src/controller/fragment-finders.ts +++ b/src/controller/fragment-finders.ts @@ -1,5 +1,5 @@ import BinarySearch from '../utils/binary-search'; -import Fragment from '../loader/fragment'; +import { Fragment } from '../loader/fragment'; /** * Returns first fragment whose endPdt value exceeds the given PDT. diff --git a/src/controller/fragment-tracker.ts b/src/controller/fragment-tracker.ts index 2eae19e8bfb..55ad89ec37b 100644 --- a/src/controller/fragment-tracker.ts +++ b/src/controller/fragment-tracker.ts @@ -1,5 +1,5 @@ import { Events } from '../events'; -import Fragment, { Part } from '../loader/fragment'; +import { Fragment, Part } from '../loader/fragment'; import type { SourceBufferName } from '../types/buffer'; import type { FragmentBufferedRange, diff --git a/src/controller/gap-controller.ts b/src/controller/gap-controller.ts index d0a69e5ddac..a116bc1f76e 100644 --- a/src/controller/gap-controller.ts +++ b/src/controller/gap-controller.ts @@ -6,7 +6,7 @@ import { logger } from '../utils/logger'; import type Hls from '../hls'; import type { HlsConfig } from '../config'; import type { FragmentTracker } from './fragment-tracker'; -import Fragment from '../loader/fragment'; +import { Fragment } from '../loader/fragment'; export const STALL_MINIMUM_DURATION_MS = 250; export const MAX_START_GAP_JUMP = 2.0; diff --git a/src/controller/latency-controller.ts b/src/controller/latency-controller.ts index 991e4601226..9295a4c7f66 100644 --- a/src/controller/latency-controller.ts +++ b/src/controller/latency-controller.ts @@ -1,4 +1,4 @@ -import LevelDetails from '../loader/level-details'; +import { LevelDetails } from '../loader/level-details'; import { ErrorDetails } from '../errors'; import { Events } from '../events'; import type { diff --git a/src/controller/level-helper.ts b/src/controller/level-helper.ts index 01468eaaa33..ca20c0c059b 100644 --- a/src/controller/level-helper.ts +++ b/src/controller/level-helper.ts @@ -4,8 +4,8 @@ * */ import { logger } from '../utils/logger'; -import Fragment, { Part } from '../loader/fragment'; -import LevelDetails from '../loader/level-details'; +import { Fragment, Part } from '../loader/fragment'; +import { LevelDetails } from '../loader/level-details'; import type { Level } from '../types/level'; import type { LoaderStats } from '../types/loader'; import type { MediaPlaylist } from '../types/media-playlist'; diff --git a/src/controller/stream-controller.ts b/src/controller/stream-controller.ts index ef9333a589b..caf996285d6 100644 --- a/src/controller/stream-controller.ts +++ b/src/controller/stream-controller.ts @@ -7,7 +7,7 @@ import type { FragmentTracker } from './fragment-tracker'; import { FragmentState } from './fragment-tracker'; import type { Level } from '../types/level'; import { PlaylistLevelType } from '../types/loader'; -import Fragment, { ElementaryStreamTypes } from '../loader/fragment'; +import { Fragment, ElementaryStreamTypes } from '../loader/fragment'; import FragmentLoader from '../loader/fragment-loader'; import TransmuxerInterface from '../demux/transmuxer-interface'; import type { TransmuxerResult } from '../types/transmuxer'; @@ -16,7 +16,7 @@ import GapController, { MAX_START_GAP_JUMP } from './gap-controller'; import { ErrorDetails } from '../errors'; import { logger } from '../utils/logger'; import type Hls from '../hls'; -import type LevelDetails from '../loader/level-details'; +import type { LevelDetails } from '../loader/level-details'; import type { TrackSet } from '../types/track'; import type { SourceBufferName } from '../types/buffer'; import type { diff --git a/src/controller/subtitle-stream-controller.ts b/src/controller/subtitle-stream-controller.ts index 2bef436a7d2..7152456c513 100644 --- a/src/controller/subtitle-stream-controller.ts +++ b/src/controller/subtitle-stream-controller.ts @@ -10,8 +10,8 @@ import { PlaylistLevelType } from '../types/loader'; import { Level } from '../types/level'; import type { NetworkComponentAPI } from '../types/component-api'; import type Hls from '../hls'; -import type LevelDetails from '../loader/level-details'; -import type Fragment from '../loader/fragment'; +import type { LevelDetails } from '../loader/level-details'; +import type { Fragment } from '../loader/fragment'; import type { ErrorData, FragLoadedData, diff --git a/src/controller/subtitle-track-controller.ts b/src/controller/subtitle-track-controller.ts index 9f9e6226cee..6a397aeb157 100644 --- a/src/controller/subtitle-track-controller.ts +++ b/src/controller/subtitle-track-controller.ts @@ -241,12 +241,11 @@ class SubtitleTrackController extends BasePlaylistController { return this.tracksInGroup; } - /** get index of the selected subtitle track (index in subtitle track lists) **/ + /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/ get subtitleTrack(): number { return this.trackId; } - /** select a subtitle track, based on its index in subtitle track lists**/ set subtitleTrack(newId: number) { this.selectDefaultTrack = false; const lastTrack = this.tracksInGroup diff --git a/src/controller/timeline-controller.ts b/src/controller/timeline-controller.ts index 809b4b2b855..3439e8da057 100644 --- a/src/controller/timeline-controller.ts +++ b/src/controller/timeline-controller.ts @@ -10,7 +10,7 @@ import { } from '../utils/texttrack-utils'; import { parseIMSC1, IMSC1_CODEC } from '../utils/imsc1-ttml-parser'; import { PlaylistLevelType } from '../types/loader'; -import Fragment from '../loader/fragment'; +import { Fragment } from '../loader/fragment'; import { FragParsingUserdataData, FragLoadedData, diff --git a/src/demux/transmuxer-interface.ts b/src/demux/transmuxer-interface.ts index 43ba84818d6..8008e0fead5 100644 --- a/src/demux/transmuxer-interface.ts +++ b/src/demux/transmuxer-interface.ts @@ -9,7 +9,7 @@ import { logger } from '../utils/logger'; import { ErrorTypes, ErrorDetails } from '../errors'; import { getMediaSource } from '../utils/mediasource-helper'; import { EventEmitter } from 'eventemitter3'; -import Fragment, { Part } from '../loader/fragment'; +import { Fragment, Part } from '../loader/fragment'; import type { ChunkMetadata, TransmuxerResult } from '../types/transmuxer'; import type Hls from '../hls'; import type { HlsEventEmitter } from '../events'; diff --git a/src/demux/transmuxer.ts b/src/demux/transmuxer.ts index f6bcecc98ed..34b31bd2b25 100644 --- a/src/demux/transmuxer.ts +++ b/src/demux/transmuxer.ts @@ -16,7 +16,7 @@ import { appendUint8Array } from '../utils/mp4-tools'; import { logger } from '../utils/logger'; import type { HlsConfig } from '../config'; -import LevelKey from '../loader/level-key'; +import { LevelKey } from '../loader/level-key'; let now; // performance.now() not available on WebWorker, at least on Safari Desktop diff --git a/src/hls.ts b/src/hls.ts index 3ab1ced3d99..de2c05972d6 100644 --- a/src/hls.ts +++ b/src/hls.ts @@ -11,17 +11,12 @@ import LevelController from './controller/level-controller'; import { isSupported } from './is-supported'; import { logger, enableLogs } from './utils/logger'; -import { - enableStreamingMode, - HlsConfig, - hlsDefaultConfig, - mergeConfig, -} from './config'; - +import { enableStreamingMode, hlsDefaultConfig, mergeConfig } from './config'; +import type { HlsConfig } from './config'; import { Events } from './events'; import { EventEmitter } from 'eventemitter3'; import { Level } from './types/level'; -import { MediaPlaylist } from './types/media-playlist'; +import type { MediaPlaylist } from './types/media-playlist'; import AudioTrackController from './controller/audio-track-controller'; import SubtitleTrackController from './controller/subtitle-track-controller'; import ID3TrackController from './controller/id3-track-controller'; @@ -31,6 +26,7 @@ import AbrController from './controller/abr-controller'; import LatencyController from './controller/latency-controller'; import { ComponentAPI, NetworkComponentAPI } from './types/component-api'; import type { HlsEventEmitter, HlsListeners } from './events'; +import { Fragment } from './loader/fragment'; /** * @module Hls @@ -821,3 +817,132 @@ export default class Hls implements HlsEventEmitter { return this.latencyController.targetLatency; } } + +export type { + MediaPlaylist, + ErrorDetails, + ErrorTypes, + Events, + Level, + HlsListeners, + HlsEventEmitter, + HlsConfig, + Fragment, +}; + +export type { + ABRControllerConfig, + BufferControllerConfig, + CapLevelControllerConfig, + EMEControllerConfig, + DRMSystemOptions, + FPSControllerConfig, + FragmentLoaderConfig, + LevelControllerConfig, + MP4RemuxerConfig, + PlaylistLoaderConfig, + StreamControllerConfig, + LatencyControllerConfig, + TimelineControllerConfig, + TSDemuxerConfig, +} from './config'; +export type { CuesInterface } from './utils/cues'; +export type { MediaKeyFunc, KeySystems } from './utils/mediakeys-helper'; +export type { LoadStats } from './loader/load-stats'; +export type { LevelKey } from './loader/level-key'; +export type { LevelDetails } from './loader/level-details'; +export type { SourceBufferName } from './types/buffer'; +export type { MetadataSample, UserdataSample } from './types/demuxer'; +export type { + LevelParsed, + LevelAttributes, + HlsUrlParameters, + HlsSkip, +} from './types/level'; +export type { + PlaylistLevelType, + HlsChunkPerformanceTiming, + HlsPerformanceTiming, + PlaylistContextType, + PlaylistLoaderContext, + FragmentLoaderContext, + Loader, + LoaderStats, + LoaderContext, + LoaderResponse, + LoaderConfiguration, + LoaderCallbacks, + LoaderOnProgress, + LoaderOnAbort, + LoaderOnError, + LoaderOnSuccess, + LoaderOnTimeout, + HlsProgressivePerformanceTiming, +} from './types/loader'; +export type { + MediaPlaylistType, + MainPlaylistType, + AudioPlaylistType, + SubtitlePlaylistType, +} from './types/media-playlist'; +export type { Track, TrackSet } from './types/track'; +export type { ChunkMetadata } from './types/transmuxer'; +export type { + BaseSegment, + Part, + ElementaryStreams, + ElementaryStreamTypes, + ElementaryStreamInfo, +} from './loader/fragment'; +export type { + TrackLoadingData, + TrackLoadedData, + AudioTrackLoadedData, + AudioTracksUpdatedData, + AudioTrackSwitchedData, + AudioTrackSwitchingData, + BufferAppendedData, + BufferAppendingData, + BufferCodecsData, + BufferCreatedData, + BufferEOSData, + BufferFlushedData, + BufferFlushingData, + CuesParsedData, + ErrorData, + FPSDropData, + FPSDropLevelCappingData, + FragBufferedData, + FragChangedData, + FragDecryptedData, + FragLoadedData, + FragLoadEmergencyAbortedData, + FragLoadingData, + FragParsedData, + FragParsingInitSegmentData, + FragParsingMetadataData, + FragParsingUserdataData, + InitPTSFoundData, + KeyLoadedData, + KeyLoadingData, + LevelLoadedData, + LevelLoadingData, + LevelPTSUpdatedData, + LevelsUpdatedData, + LevelSwitchedData, + LevelSwitchingData, + LevelUpdatedData, + LiveBackBufferData, + ManifestLoadedData, + ManifestLoadingData, + ManifestParsedData, + MediaAttachedData, + MediaAttachingData, + NonNativeTextTrack, + NonNativeTextTracksData, + SubtitleFragProcessedData, + SubtitleTrackLoadedData, + SubtitleTracksUpdatedData, + SubtitleTrackSwitchData, +} from './types/events'; +export type { AttrList } from './utils/attr-list'; diff --git a/src/loader/fragment-loader.ts b/src/loader/fragment-loader.ts index d7c33b26311..7cc6d638ea4 100644 --- a/src/loader/fragment-loader.ts +++ b/src/loader/fragment-loader.ts @@ -1,5 +1,5 @@ import { ErrorTypes, ErrorDetails } from '../errors'; -import Fragment from './fragment'; +import { Fragment } from './fragment'; import { Loader, LoaderConfiguration, diff --git a/src/loader/fragment.ts b/src/loader/fragment.ts index e3f836cea0b..e1ee78376fd 100644 --- a/src/loader/fragment.ts +++ b/src/loader/fragment.ts @@ -1,8 +1,8 @@ import { buildAbsoluteURL } from 'url-toolkit'; import { logger } from '../utils/logger'; -import LevelKey from './level-key'; -import LoadStats from './load-stats'; -import AttrList from '../utils/attr-list'; +import { LevelKey } from './level-key'; +import { LoadStats } from './load-stats'; +import { AttrList } from '../utils/attr-list'; import type { FragmentLoaderContext, Loader, @@ -15,7 +15,7 @@ export enum ElementaryStreamTypes { AUDIOVIDEO = 'audiovideo', } -interface ElementaryStreamInfo { +export interface ElementaryStreamInfo { startPTS: number; endPTS: number; startDTS: number; @@ -23,7 +23,7 @@ interface ElementaryStreamInfo { partial?: boolean; } -type ElementaryStreams = Record< +export type ElementaryStreams = Record< ElementaryStreamTypes, ElementaryStreamInfo | null >; @@ -90,7 +90,7 @@ export class BaseSegment { } } -export default class Fragment extends BaseSegment { +export class Fragment extends BaseSegment { private _decryptdata: LevelKey | null = null; public rawProgramDateTime: string | null = null; diff --git a/src/loader/key-loader.ts b/src/loader/key-loader.ts index 89fdd415df2..0b06cd44647 100644 --- a/src/loader/key-loader.ts +++ b/src/loader/key-loader.ts @@ -5,7 +5,7 @@ import { Events } from '../events'; import { ErrorTypes, ErrorDetails } from '../errors'; import { logger } from '../utils/logger'; import type Hls from '../hls'; -import Fragment from './fragment'; +import { Fragment } from './fragment'; import { LoaderStats, LoaderResponse, diff --git a/src/loader/level-details.ts b/src/loader/level-details.ts index 6008a5891c0..1084e588688 100644 --- a/src/loader/level-details.ts +++ b/src/loader/level-details.ts @@ -1,9 +1,10 @@ -import Fragment, { Part } from './fragment'; -import type AttrList from '../utils/attr-list'; +import { Part } from './fragment'; +import type { Fragment } from './fragment'; +import type { AttrList } from '../utils/attr-list'; const DEFAULT_TARGET_DURATION = 10; -export default class LevelDetails { +export class LevelDetails { public PTSKnown: boolean = false; public alignedSliding: boolean = false; public averagetargetduration?: number; diff --git a/src/loader/level-key.ts b/src/loader/level-key.ts index b4db012091f..90fcf253b1b 100644 --- a/src/loader/level-key.ts +++ b/src/loader/level-key.ts @@ -1,6 +1,6 @@ import { buildAbsoluteURL } from 'url-toolkit'; -export default class LevelKey { +export class LevelKey { private _uri: string | null = null; public method: string | null = null; public keyFormat: string | null = null; diff --git a/src/loader/load-stats.ts b/src/loader/load-stats.ts index 267a84a7736..0bb0e6adb54 100644 --- a/src/loader/load-stats.ts +++ b/src/loader/load-stats.ts @@ -4,7 +4,7 @@ import type { LoaderStats, } from '../types/loader'; -export default class LoadStats implements LoaderStats { +export class LoadStats implements LoaderStats { aborted: boolean = false; loaded: number = 0; retry: number = 0; diff --git a/src/loader/m3u8-parser.ts b/src/loader/m3u8-parser.ts index dbe39ce8df9..e3e00c2d51a 100644 --- a/src/loader/m3u8-parser.ts +++ b/src/loader/m3u8-parser.ts @@ -1,10 +1,10 @@ import * as URLToolkit from 'url-toolkit'; -import Fragment, { Part } from './fragment'; -import LevelDetails from './level-details'; -import LevelKey from './level-key'; +import { Fragment, Part } from './fragment'; +import { LevelDetails } from './level-details'; +import { LevelKey } from './level-key'; -import AttrList from '../utils/attr-list'; +import { AttrList } from '../utils/attr-list'; import { logger } from '../utils/logger'; import type { CodecType } from '../utils/codecs'; import { isCodecType } from '../utils/codecs'; diff --git a/src/loader/playlist-loader.ts b/src/loader/playlist-loader.ts index 49ec78621d8..385f8575a79 100644 --- a/src/loader/playlist-loader.ts +++ b/src/loader/playlist-loader.ts @@ -24,10 +24,10 @@ import type { PlaylistLoaderContext, } from '../types/loader'; import { PlaylistContextType, PlaylistLevelType } from '../types/loader'; -import LevelDetails from './level-details'; -import Fragment from './fragment'; +import { LevelDetails } from './level-details'; +import { Fragment } from './fragment'; import type Hls from '../hls'; -import AttrList from '../utils/attr-list'; +import { AttrList } from '../utils/attr-list'; import type { ErrorData, LevelLoadingData, diff --git a/src/remux/mp4-remuxer.ts b/src/remux/mp4-remuxer.ts index 85794209ce2..027d0cdc40e 100644 --- a/src/remux/mp4-remuxer.ts +++ b/src/remux/mp4-remuxer.ts @@ -22,7 +22,7 @@ import type { } from '../types/demuxer'; import type { TrackSet } from '../types/track'; import type { SourceBufferName } from '../types/buffer'; -import Fragment from '../loader/fragment'; +import type { Fragment } from '../loader/fragment'; import type { HlsConfig } from '../config'; import { toMsFromMpegTsClock } from '../utils/timescale-conversion'; diff --git a/src/types/events.ts b/src/types/events.ts index 5b09f5b304d..16528b9708f 100644 --- a/src/types/events.ts +++ b/src/types/events.ts @@ -1,8 +1,8 @@ // eslint-disable-next-line import/no-duplicates -import type Fragment from '../loader/fragment'; +import type { Fragment } from '../loader/fragment'; // eslint-disable-next-line import/no-duplicates import type { Part } from '../loader/fragment'; -import type LevelDetails from '../loader/level-details'; +import type { LevelDetails } from '../loader/level-details'; import type { HlsUrlParameters, Level, LevelParsed } from './level'; import type { MediaPlaylist, MediaPlaylistType } from './media-playlist'; import type { @@ -16,10 +16,10 @@ import type { import type { Track, TrackSet } from './track'; import type { SourceBufferName } from './buffer'; import type { ChunkMetadata } from './transmuxer'; -import type LoadStats from '../loader/load-stats'; +import type { LoadStats } from '../loader/load-stats'; import type { ErrorDetails, ErrorTypes } from '../errors'; import type { MetadataSample, UserdataSample } from './demuxer'; -import type AttrList from '../utils/attr-list'; +import type { AttrList } from '../utils/attr-list'; import type { HlsListeners } from '../events'; export interface MediaAttachingData { @@ -243,7 +243,7 @@ export interface CuesParsedData { track: string; } -interface NonNativeTextTrack { +export interface NonNativeTextTrack { _id?: string; label: any; kind: string; diff --git a/src/types/fragment-tracker.ts b/src/types/fragment-tracker.ts index 7e8fd1aeb2b..4fa1c81cd82 100644 --- a/src/types/fragment-tracker.ts +++ b/src/types/fragment-tracker.ts @@ -1,5 +1,5 @@ // eslint-disable-next-line import/no-duplicates -import type Fragment from '../loader/fragment'; +import type { Fragment } from '../loader/fragment'; // eslint-disable-next-line import/no-duplicates import type { Part } from '../loader/fragment'; import type { SourceBufferName } from './buffer'; diff --git a/src/types/general.ts b/src/types/general.ts index fb3afbf485d..6d92b6abdff 100644 --- a/src/types/general.ts +++ b/src/types/general.ts @@ -1,7 +1,3 @@ -export interface StringMap { - [key: string]: any; -} - /** * Make specific properties in T required */ diff --git a/src/types/level.ts b/src/types/level.ts index 1b664d57b6f..baf455530b2 100644 --- a/src/types/level.ts +++ b/src/types/level.ts @@ -1,5 +1,5 @@ -import LevelDetails from '../loader/level-details'; -import AttrList from '../utils/attr-list'; +import { LevelDetails } from '../loader/level-details'; +import { AttrList } from '../utils/attr-list'; export interface LevelParsed { attrs: LevelAttributes; diff --git a/src/types/loader.ts b/src/types/loader.ts index cbfe6b5f0a8..3bcf950904f 100644 --- a/src/types/loader.ts +++ b/src/types/loader.ts @@ -1,6 +1,6 @@ -import Fragment from '../loader/fragment'; +import type { Fragment } from '../loader/fragment'; import type { Part } from '../loader/fragment'; -import type LevelDetails from '../loader/level-details'; +import type { LevelDetails } from '../loader/level-details'; import type { HlsUrlParameters } from './level'; export interface LoaderContext { @@ -67,7 +67,7 @@ export interface HlsProgressivePerformanceTiming extends HlsPerformanceTiming { first: number; } -type LoaderOnSuccess = ( +export type LoaderOnSuccess = ( response: LoaderResponse, stats: LoaderStats, context: T, @@ -81,7 +81,7 @@ export type LoaderOnProgress = ( networkDetails: any ) => void; -type LoaderOnError = ( +export type LoaderOnError = ( error: { // error status code code: number; @@ -92,13 +92,13 @@ type LoaderOnError = ( networkDetails: any ) => void; -type LoaderOnTimeout = ( +export type LoaderOnTimeout = ( stats: LoaderStats, context: T, networkDetails: any ) => void; -type LoaderOnAbort = ( +export type LoaderOnAbort = ( stats: LoaderStats, context: T, networkDetails: any diff --git a/src/utils/attr-list.ts b/src/utils/attr-list.ts index bdedfea1ec4..3c9b07a5dc1 100755 --- a/src/utils/attr-list.ts +++ b/src/utils/attr-list.ts @@ -1,13 +1,11 @@ -import type { StringMap } from '../types/general'; - const DECIMAL_RESOLUTION_REGEX = /^(\d+)x(\d+)$/; // eslint-disable-line no-useless-escape const ATTR_LIST_REGEX = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g; // eslint-disable-line no-useless-escape // adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js -class AttrList { +export class AttrList { [key: string]: any; - constructor(attrs: string | StringMap) { + constructor(attrs: string | Record) { if (typeof attrs === 'string') { attrs = AttrList.parseAttrList(attrs); } @@ -89,7 +87,7 @@ class AttrList { }; } - static parseAttrList(input: string): StringMap { + static parseAttrList(input: string): Record { let match; const attrs = {}; const quote = '"'; @@ -109,5 +107,3 @@ class AttrList { return attrs; } } - -export default AttrList; diff --git a/src/utils/discontinuities.ts b/src/utils/discontinuities.ts index c460a3efa99..175d34f0f21 100644 --- a/src/utils/discontinuities.ts +++ b/src/utils/discontinuities.ts @@ -1,7 +1,7 @@ import { logger } from './logger'; -import type Fragment from '../loader/fragment'; -import type LevelDetails from '../loader/level-details'; +import type { Fragment } from '../loader/fragment'; +import type { LevelDetails } from '../loader/level-details'; import type { Level } from '../types/level'; import type { RequiredProperties } from '../types/general'; import { adjustSliding } from '../controller/level-helper'; diff --git a/src/utils/fetch-loader.ts b/src/utils/fetch-loader.ts index 28889e172fd..e8b17ee3fd1 100644 --- a/src/utils/fetch-loader.ts +++ b/src/utils/fetch-loader.ts @@ -6,7 +6,7 @@ import { LoaderConfiguration, LoaderOnProgress, } from '../types/loader'; -import LoadStats from '../loader/load-stats'; +import { LoadStats } from '../loader/load-stats'; import ChunkCache from '../demux/chunk-cache'; export function fetchSupported() { diff --git a/src/utils/xhr-loader.ts b/src/utils/xhr-loader.ts index 95677754d33..f742ea81b96 100644 --- a/src/utils/xhr-loader.ts +++ b/src/utils/xhr-loader.ts @@ -6,7 +6,7 @@ import type { Loader, LoaderConfiguration, } from '../types/loader'; -import LoadStats from '../loader/load-stats'; +import { LoadStats } from '../loader/load-stats'; class XhrLoader implements Loader { private xhrSetup: Function | null; diff --git a/tests/mocks/data.js b/tests/mocks/data.js index 47815ba35bb..71df3645198 100644 --- a/tests/mocks/data.js +++ b/tests/mocks/data.js @@ -1,4 +1,4 @@ -import Fragment from '../../src/loader/fragment'; +import { Fragment } from '../../src/loader/fragment'; import { PlaylistLevelType } from '../../src/types/loader'; function fragment(options) { diff --git a/tests/unit/controller/buffer-controller-operations.ts b/tests/unit/controller/buffer-controller-operations.ts index 89ad2cf286d..ea766233fd2 100644 --- a/tests/unit/controller/buffer-controller-operations.ts +++ b/tests/unit/controller/buffer-controller-operations.ts @@ -9,10 +9,10 @@ import { BufferOperation, SourceBufferName } from '../../../src/types/buffer'; import { BufferAppendingData } from '../../../src/types/events'; import { Events } from '../../../src/events'; import { ErrorDetails, ErrorTypes } from '../../../src/errors'; -import Fragment, { ElementaryStreamTypes } from '../../../src/loader/fragment'; +import { Fragment, ElementaryStreamTypes } from '../../../src/loader/fragment'; import { PlaylistLevelType } from '../../../src/types/loader'; import { ChunkMetadata } from '../../../src/types/transmuxer'; -import LevelDetails from '../../../src/loader/level-details'; +import { LevelDetails } from '../../../src/loader/level-details'; chai.use(sinonChai); const expect = chai.expect; diff --git a/tests/unit/controller/fragment-tracker.ts b/tests/unit/controller/fragment-tracker.ts index 4cdfb9dbdff..9ece7d20220 100644 --- a/tests/unit/controller/fragment-tracker.ts +++ b/tests/unit/controller/fragment-tracker.ts @@ -6,8 +6,8 @@ import { } from '../../../src/controller/fragment-tracker'; import { PlaylistLevelType } from '../../../src/types/loader'; import { ChunkMetadata } from '../../../src/types/transmuxer'; -import Fragment, { ElementaryStreamTypes } from '../../../src/loader/fragment'; -import LoadStats from '../../../src/loader/load-stats'; +import { Fragment, ElementaryStreamTypes } from '../../../src/loader/fragment'; +import { LoadStats } from '../../../src/loader/load-stats'; import type { BufferAppendedData, FragBufferedData, diff --git a/tests/unit/controller/latency-controller.ts b/tests/unit/controller/latency-controller.ts index a151f386671..1c122d413b8 100644 --- a/tests/unit/controller/latency-controller.ts +++ b/tests/unit/controller/latency-controller.ts @@ -2,7 +2,7 @@ import LatencyController from '../../../src/controller/latency-controller'; import Hls from '../../../src/hls'; import { Events } from '../../../src/events'; -import LevelDetails from '../../../src/loader/level-details'; +import { LevelDetails } from '../../../src/loader/level-details'; import { LevelUpdatedData } from '../../../src/types/events'; import * as sinon from 'sinon'; diff --git a/tests/unit/controller/level-helper.ts b/tests/unit/controller/level-helper.ts index cddd926e2ae..d70155c02fe 100644 --- a/tests/unit/controller/level-helper.ts +++ b/tests/unit/controller/level-helper.ts @@ -5,14 +5,14 @@ import { mapPartIntersection, mergeDetails, } from '../../../src/controller/level-helper'; -import LevelDetails from '../../../src/loader/level-details'; -import Fragment, { Part } from '../../../src/loader/fragment'; -import LoadStats from '../../../src/loader/load-stats'; +import { LevelDetails } from '../../../src/loader/level-details'; +import { Fragment, Part } from '../../../src/loader/fragment'; +import { LoadStats } from '../../../src/loader/load-stats'; import { PlaylistLevelType } from '../../../src/types/loader'; import * as sinon from 'sinon'; import * as chai from 'chai'; import * as sinonChai from 'sinon-chai'; -import AttrList from '../../../src/utils/attr-list'; +import { AttrList } from '../../../src/utils/attr-list'; chai.use(sinonChai); const expect = chai.expect; diff --git a/tests/unit/controller/stream-controller.ts b/tests/unit/controller/stream-controller.ts index a57e1208db1..beeb8453601 100644 --- a/tests/unit/controller/stream-controller.ts +++ b/tests/unit/controller/stream-controller.ts @@ -8,11 +8,11 @@ import { import StreamController from '../../../src/controller/stream-controller'; import { State } from '../../../src/controller/base-stream-controller'; import { mockFragments } from '../../mocks/data'; -import Fragment from '../../../src/loader/fragment'; -import LevelDetails from '../../../src/loader/level-details'; +import { Fragment } from '../../../src/loader/fragment'; +import { LevelDetails } from '../../../src/loader/level-details'; import M3U8Parser from '../../../src/loader/m3u8-parser'; import { PlaylistLevelType } from '../../../src/types/loader'; -import AttrList from '../../../src/utils/attr-list'; +import { AttrList } from '../../../src/utils/attr-list'; import { Level, LevelAttributes } from '../../../src/types/level'; import * as sinon from 'sinon'; diff --git a/tests/unit/controller/subtitle-track-controller.js b/tests/unit/controller/subtitle-track-controller.js index dcbd9020ee6..56933a62eb3 100644 --- a/tests/unit/controller/subtitle-track-controller.js +++ b/tests/unit/controller/subtitle-track-controller.js @@ -1,8 +1,8 @@ import SubtitleTrackController from '../../../src/controller/subtitle-track-controller'; import Hls from '../../../src/hls'; import sinon from 'sinon'; -import LoadStats from '../../../src/loader/load-stats'; -import LevelDetails from '../../../src/loader/level-details'; +import { LoadStats } from '../../../src/loader/load-stats'; +import { LevelDetails } from '../../../src/loader/level-details'; import { Events } from '../../../src/events'; describe('SubtitleTrackController', function () { diff --git a/tests/unit/demuxer/transmuxer.ts b/tests/unit/demuxer/transmuxer.ts index cd097a67dce..0ce3758ba83 100644 --- a/tests/unit/demuxer/transmuxer.ts +++ b/tests/unit/demuxer/transmuxer.ts @@ -1,7 +1,7 @@ import TransmuxerInterface from '../../../src/demux/transmuxer-interface'; import { TransmuxState, TransmuxConfig } from '../../../src/demux/transmuxer'; import { ChunkMetadata, TransmuxerResult } from '../../../src/types/transmuxer'; -import Fragment from '../../../src/loader/fragment'; +import { Fragment } from '../../../src/loader/fragment'; import { PlaylistLevelType } from '../../../src/types/loader'; import Hls from '../../../src/hls'; diff --git a/tests/unit/loader/fragment-loader.ts b/tests/unit/loader/fragment-loader.ts index 4212d7051d7..0fd614fc9f2 100644 --- a/tests/unit/loader/fragment-loader.ts +++ b/tests/unit/loader/fragment-loader.ts @@ -1,7 +1,7 @@ import FragmentLoader, { LoadError } from '../../../src/loader/fragment-loader'; -import Fragment from '../../../src/loader/fragment'; +import { Fragment } from '../../../src/loader/fragment'; import { ErrorDetails, ErrorTypes } from '../../../src/errors'; -import LoadStats from '../../../src/loader/load-stats'; +import { LoadStats } from '../../../src/loader/load-stats'; import { FragmentLoaderContext, Loader, @@ -15,7 +15,7 @@ import type { HlsConfig } from '../../../src/config'; import * as sinon from 'sinon'; import * as chai from 'chai'; import * as sinonChai from 'sinon-chai'; -import LevelDetails from '../../../src/loader/level-details'; +import { LevelDetails } from '../../../src/loader/level-details'; chai.use(sinonChai); const expect = chai.expect; diff --git a/tests/unit/loader/fragment.js b/tests/unit/loader/fragment.js index 62bceb14385..ab222fe62bd 100644 --- a/tests/unit/loader/fragment.js +++ b/tests/unit/loader/fragment.js @@ -1,5 +1,5 @@ -import Fragment from '../../../src/loader/fragment'; -import LevelKey from '../../../src/loader/level-key'; +import { Fragment } from '../../../src/loader/fragment'; +import { LevelKey } from '../../../src/loader/level-key'; import { PlaylistLevelType } from '../../../src/types/loader'; describe('Fragment class tests', function () { diff --git a/tests/unit/loader/level.js b/tests/unit/loader/level.js index 45cd1c53dc3..b96edad7229 100644 --- a/tests/unit/loader/level.js +++ b/tests/unit/loader/level.js @@ -1,4 +1,4 @@ -import LevelDetails from '../../../src/loader/level-details'; +import { LevelDetails } from '../../../src/loader/level-details'; describe('Level Class tests', function () { it('sets programDateTime to true when the first fragment has valid pdt', function () { diff --git a/tests/unit/loader/playlist-loader.js b/tests/unit/loader/playlist-loader.js index e98ebd12020..92a9e9e6e70 100644 --- a/tests/unit/loader/playlist-loader.js +++ b/tests/unit/loader/playlist-loader.js @@ -1,5 +1,5 @@ import M3U8Parser from '../../../src/loader/m3u8-parser'; -import AttrList from '../../../src/utils/attr-list'; +import { AttrList } from '../../../src/utils/attr-list'; import { PlaylistLevelType } from '../../../src/types/loader'; describe('PlaylistLoader', function () { diff --git a/tests/unit/utils/attr-list.js b/tests/unit/utils/attr-list.js index f2f1cd8484f..1b3fa4d7db6 100644 --- a/tests/unit/utils/attr-list.js +++ b/tests/unit/utils/attr-list.js @@ -1,4 +1,4 @@ -import AttrList from '../../../src/utils/attr-list'; +import { AttrList } from '../../../src/utils/attr-list'; describe('AttrList', function () { it('constructor() supports empty arguments', function () { diff --git a/tsconfig-lib.json b/tsconfig-lib.json new file mode 100644 index 00000000000..a6df3a51dca --- /dev/null +++ b/tsconfig-lib.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": false, + "strictNullChecks": true, + "strictPropertyInitialization": true, + "lib": ["dom", "es2015"], + "outDir": "./lib/", + "allowSyntheticDefaultImports": true, + "emitDeclarationOnly": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist/**/*", "demo/libs/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index 3c87e29f542..8e975f58387 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,7 @@ { + "extends": "./tsconfig-lib.json", "compilerOptions": { - "target": "esnext", - "module": "commonjs", - "declaration": true, - "sourceMap": true, - "strict": false, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "lib": ["dom", "es2015"], - "outDir": "./dist/", - "allowSyntheticDefaultImports": true + "emitDeclarationOnly": false }, - "include": ["src/**/*", "tests/unit/**/*", "demo/**/*"], - "exclude": ["node_modules", "dist/**/*", "demo/libs/**/*", "**/*.spec.*"] + "include": ["src/**/*", "tests/unit/**/*", "demo/**/*"] }