import { AudioLayerProps } from './layer/AudioLayer/index.js'; import { TypeLayer } from './layer/BaseLayer/index.js'; import { CaptionLayerProps } from './layer/CaptionLayer/index.js'; import { CMTrackLayerProps } from './layer/CMTrackLayer/index.js'; import { GroupLayerProps } from './layer/GroupLayer/index.js'; import { ImageLayerProps } from './layer/ImageLayer/index.js'; import { RootLayerProps } from './layer/RootLayer/index.js'; import { StickerLayerProps } from './layer/StickerLayer/index.js'; import { EffectLayerProps } from './layer/EffectLayer/index.js'; import { TextLayerProps } from './layer/TextLayer/index.js'; import { TrackType, TrackLayerProps } from './layer/TrackLayer/index.js'; import { VideoLayerProps } from './layer/VideoLayer/index.js'; interface BaseNode { type: Type; props: TProps; children?: Array; extendsInfo?: { [key: string]: any; }; } type VideoChildNode = BaseNode<'VideoLayer', VideoLayerProps>; type AudioChildNode = BaseNode<'AudioLayer', AudioLayerProps>; type ImageChildNode = BaseNode<'ImageLayer', ImageLayerProps>; type CaptionChildNode = BaseNode<'CaptionLayer', CaptionLayerProps>; type TextChildNode = BaseNode<'TextLayer', TextLayerProps>; type StickerChildNode = BaseNode<'StickerLayer', StickerLayerProps>; type EffectChildNode = BaseNode<'EffectLayer', EffectLayerProps>; type TrackTypeToChildNode = { video: VideoChildNode; audio: AudioChildNode; image: ImageChildNode; caption: CaptionChildNode; text: TextChildNode; sticker: StickerChildNode; effect: EffectChildNode; }; type TrackLayerChild = T extends keyof TrackTypeToChildNode ? TrackTypeToChildNode[T] : VideoChildNode | AudioChildNode | ImageChildNode | CaptionChildNode | TextChildNode | StickerChildNode | EffectChildNode; type TrackLayerBaseNode = BaseNode<'TrackLayer', TrackLayerProps & { trackType: T; }, TrackLayerChild>; type CMTrackLayerBaseNode = BaseNode<'CMTrackLayer', CMTrackLayerProps & { trackType: T; }, TrackLayerChild>; type VideoTrackNode = TrackLayerBaseNode<'video'>; type AudioTrackNode = TrackLayerBaseNode<'audio'>; type ImageTrackNode = TrackLayerBaseNode<'image'>; type CaptionTrackNode = TrackLayerBaseNode<'caption'>; type TextTrackNode = TrackLayerBaseNode<'text'>; type StickerTrackNode = TrackLayerBaseNode<'sticker'>; type EffectTrackNode = TrackLayerBaseNode<'effect'>; type CMTrackNode = CMTrackLayerBaseNode; type TrackChildNode = VideoTrackNode | AudioTrackNode | ImageTrackNode | CaptionTrackNode | TextTrackNode | StickerTrackNode | EffectTrackNode; type CMTrackChildNode = CMTrackNode; type GroupChildNode = BaseNode<'GroupLayer', GroupLayerProps, GroupChildNode | TrackChildNode | CMTrackChildNode>; type RootChildNode = BaseNode<'RootLayer', RootLayerProps, GroupChildNode | TrackChildNode>; type SchemaNode = RootChildNode | GroupChildNode | TrackChildNode | CMTrackChildNode | VideoChildNode | AudioChildNode | ImageChildNode | CaptionChildNode | TextChildNode | StickerChildNode | EffectChildNode; type LayerChildNodeMap = { RootLayer: RootChildNode; GroupLayer: GroupChildNode; TrackLayer: TrackChildNode; CMTrackLayer: CMTrackChildNode; AudioLayer: AudioChildNode; VideoLayer: VideoChildNode; ImageLayer: ImageChildNode; CaptionLayer: CaptionChildNode; TextLayer: TextChildNode; StickerLayer: StickerChildNode; EffectLayer: EffectChildNode; }; type LayerChildMap = { GroupLayer: GroupChildNode | TrackChildNode; TrackLayer: TrackChildNode; CMTarckLayer: CMTrackChildNode; AudioLayer: AudioChildNode; VideoLayer: VideoChildNode; ImageLayer: ImageChildNode; CaptionLayer: CaptionChildNode; TextLayer: TextChildNode; StickerLayer: StickerChildNode; EffectLayer: EffectChildNode; }; export type { AudioChildNode, AudioTrackNode, CMTrackChildNode, CMTrackNode, CaptionChildNode, CaptionTrackNode, EffectChildNode, EffectTrackNode, GroupChildNode, ImageChildNode, ImageTrackNode, LayerChildMap, LayerChildNodeMap, RootChildNode, SchemaNode, StickerChildNode, StickerTrackNode, TextChildNode, TextTrackNode, TrackChildNode, VideoChildNode, VideoTrackNode };