import type { AnyRecord } from '../../../framework-types/BaseTypes'; import type { ContextHaving } from '../../../framework-types/execution-context/Types'; import type { NamedTask, Task } from '../../../framework-types/task/Types'; import type { BaseContext } from '../../../framework-types/Types'; import type { EmptyObject } from '../../Types'; import type { Constants, PlaybackTechnology, ResourceType } from '../core/Constants'; import type { CoreEffects, CoreExportNames } from '../core/Types'; import type { Resource } from '../source/atoms/SourceConfigAtom'; import type { SourceStateAtom } from '../source/atoms/SourceStateAtom'; import type { SourceExportNames } from '../source/Types'; import type { ContextWithState } from '../Types'; import type { PlaybackTechnologyEntryType } from './PlaybackTechnologyEntryType'; export type { PlaybackTechnologyEntryType } from './PlaybackTechnologyEntryType'; export interface TechnologyEntryBase { type: PlaybackTechnologyEntryType; name: string; depends: PlaybackTechnologyEntryType[]; supported: (resource: Resource, playbackTechnology?: PlaybackTechnology) => boolean; instantiate: NamedTask, Resource, void>>; } export type PresentationTechnologyEntry = TechnologyEntryBase & { type: PlaybackTechnologyEntryType.Presentation; supported: (resource: Resource, playbackTechnology: PlaybackTechnology) => boolean; }; export type ManifestTechnologyEntry = TechnologyEntryBase & { type: PlaybackTechnologyEntryType.Manifest; supported: (resource: Resource) => boolean; }; export type TechnologyEntry = PresentationTechnologyEntry | ManifestTechnologyEntry; export interface TechnologyChain { technologies: TechnologyEntry[]; playbackTechnology: PlaybackTechnology; } export type TechnologyPriority = { manifest: ResourceType[]; playback: PlaybackTechnology[]; }; export type PlaybackTechnologyDependencies = { [SourceExportNames.SourceState]: SourceStateAtom; [CoreExportNames.CoreEffects]: CoreEffects; [CoreExportNames.Constants]: Constants; }; export type PlaybackTechnologyContext = ContextHaving; export interface PlaybackTechnologyComponent { addTechnology: NamedTask, void>>; } export declare const PlaybackTechnologyComponent = "playback-technology-component"; export declare enum PlaybackTechnologyExportNames { EntryType = "playback-technology-entry-type" } export type PlaybackTechnologyExports = { [PlaybackTechnologyComponent]: PlaybackTechnologyComponent; [PlaybackTechnologyExportNames.EntryType]: typeof PlaybackTechnologyEntryType; };