import type { Signal, SignalReader } from "~/common/signal.d.ts"; import type { DiffuseElement } from "~/common/element.js"; import type { Facet, PlaylistItem, Setting, Track, } from "~/definitions/types.d.ts"; export type OutputElement = & DiffuseElement & OutputManagerDeputy; export type OutputManagerDeputy = & Omit, "signals"> & { ready: SignalReader }; export type OutputManager = { facets: { collection: SignalReader< | { state: "loading" } | { state: "loaded"; data: Encoding extends null ? Facet[] : Encoding } >; reload: () => Promise; save: ( facets: Encoding extends null ? Facet[] : Encoding, ) => Promise; }; playlistItems: { collection: SignalReader< | { state: "loading" } | { state: "loaded"; data: Encoding extends null ? PlaylistItem[] : Encoding } >; reload: () => Promise; save: ( playlistItems: Encoding extends null ? PlaylistItem[] : Encoding, ) => Promise; }; settings: { collection: SignalReader< | { state: "loading" } | { state: "loaded"; data: Encoding extends null ? Setting[] : Encoding } >; reload: () => Promise; save: ( settings: Encoding extends null ? Setting[] : Encoding, ) => Promise; }; signals: { facets: Signal; playlistItems: Signal; settings: Signal; tracks: Signal; }; tracks: { collection: SignalReader< | { state: "loading" } | { state: "loaded"; data: Encoding extends null ? Track[] : Encoding } >; reload: () => Promise; save: (tracks: Encoding extends null ? Track[] : Encoding) => Promise; }; }; export type OutputManagerProperties = { facets: { empty(): Encoding extends null ? Facet[] : Encoding; get(): Promise; put( facets: Encoding extends null ? Facet[] : Encoding, ): Promise; }; init?: () => Promise; playlistItems: { empty(): Encoding extends null ? PlaylistItem[] : Encoding; get(): Promise; put( playlistItems: Encoding extends null ? PlaylistItem[] : Encoding, ): Promise; }; settings: { empty(): Encoding extends null ? Setting[] : Encoding; get(): Promise; put( settings: Encoding extends null ? Setting[] : Encoding, ): Promise; }; tracks: { empty(): Encoding extends null ? Track[] : Encoding; get(): Promise; put(tracks: Encoding extends null ? Track[] : Encoding): Promise; }; }; export type OutputWorkerActions = { get(args: { name: string }): Promise; put(args: { data: DataType; name: string }): Promise; };