51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { EventMediaQueries, MediaQueries, RecordingMediaQueries } from './media-queries';
|
|
|
|
export type MediaQueriesType = 'event' | 'recording';
|
|
type MediaType = 'clips' | 'snapshots' | 'recordings';
|
|
|
|
export class MediaQueriesClassifier {
|
|
public static areEventQueries(
|
|
queries?: MediaQueries | null,
|
|
): queries is EventMediaQueries {
|
|
return queries instanceof EventMediaQueries;
|
|
}
|
|
|
|
public static areRecordingQueries(
|
|
queries?: MediaQueries | null,
|
|
): queries is RecordingMediaQueries {
|
|
return queries instanceof RecordingMediaQueries;
|
|
}
|
|
|
|
public static areClipsQueries(queries?: MediaQueries | null): boolean {
|
|
return (
|
|
this.areEventQueries(queries) &&
|
|
!!queries?.getQueries()?.every((query) => query.hasClip)
|
|
);
|
|
}
|
|
|
|
public static areSnapshotQueries(queries?: MediaQueries | null): boolean {
|
|
return (
|
|
this.areEventQueries(queries) &&
|
|
!!queries?.getQueries()?.every((query) => query.hasSnapshot)
|
|
);
|
|
}
|
|
|
|
public static getQueriesType(queries?: MediaQueries | null): MediaQueriesType | null {
|
|
return this.areEventQueries(queries)
|
|
? 'event'
|
|
: this.areRecordingQueries(queries)
|
|
? 'recording'
|
|
: null;
|
|
}
|
|
|
|
public static getMediaType(queries?: MediaQueries | null): MediaType | null {
|
|
return this.areClipsQueries(queries)
|
|
? 'clips'
|
|
: this.areSnapshotQueries(queries)
|
|
? 'snapshots'
|
|
: this.areRecordingQueries(queries)
|
|
? 'recordings'
|
|
: null;
|
|
}
|
|
}
|