improve type guards

This commit is contained in:
Ollie Taylor
2023-02-23 00:39:46 +00:00
parent c1f1131c7c
commit 8d4afbd7ff
4 changed files with 20 additions and 20 deletions
+12 -19
View File
@@ -6,6 +6,7 @@
__internal_audio_src, __internal_audio_src,
} from '$lib/components/audio/store'; } from '$lib/components/audio/store';
import type { PlayerElement } from '$lib/components/audio/types'; import type { PlayerElement } from '$lib/components/audio/types';
import { isBoolean, isNumber } from '$lib/helper/check';
let element: PlayerElement; let element: PlayerElement;
let currentTime = 0; let currentTime = 0;
@@ -40,43 +41,35 @@
// TODO: reset player state // TODO: reset player state
// console.log('emptied', e); // console.log('emptied', e);
}} }}
aria-activedescendant="audio-progress"
aria-atomic="true"
aria-busy="false"
aria-controls="audio-progress"
on:loadeddata={() => { on:loadeddata={() => {
__internal_audio_metadata.update((m) => ({ ...m, loading: false })); __internal_audio_metadata.update((m) => ({ ...m, loading: false }));
}} }}
on:loadstart={() => { on:loadstart={() => {
__internal_audio_metadata.update((m) => ({ ...m, loading: true })); __internal_audio_metadata.update((m) => ({ ...m, loading: true }));
}} }}
on:ratechange={(e) => {
// @ts-expect-error event is not fully typed
const rate = e.target.playbackRate;
console.log('rateChange', rate);
if (typeof rate != 'number' || isNaN(rate)) return;
__internal_audio_metadata.update((m) => ({ ...m, playbackRate: rate }));
}}
on:playing={(e) => { on:playing={(e) => {
// @ts-expect-error event is not fully typed // @ts-expect-error event is not fully typed
const is_paused = e.target.paused; const is_paused = e.target.paused;
console.log('playing paused:', is_paused); if (!isBoolean(is_paused)) return;
if (typeof is_paused != 'boolean') return;
__internal_audio_metadata.update((m) => ({ ...m, paused: is_paused })); __internal_audio_metadata.update((m) => ({ ...m, paused: is_paused }));
}} }}
on:pause={(e) => { on:pause={(e) => {
// @ts-expect-error event is not fully typed // @ts-expect-error event is not fully typed
const is_paused = e.target.paused; const is_paused = e.target.paused;
console.log('pause paused:', is_paused); if (!isBoolean(is_paused)) return;
if (typeof is_paused != 'boolean') return;
__internal_audio_metadata.update((m) => ({ ...m, paused: is_paused })); __internal_audio_metadata.update((m) => ({ ...m, paused: is_paused }));
}} }}
on:ratechange={(e) => {
// @ts-expect-error event is not fully typed
const playbackRate = e.target.playbackRate;
if (!isNumber(playbackRate)) return;
__internal_audio_metadata.update((m) => ({ ...m, playbackRate }));
}}
on:durationchange={(e) => { on:durationchange={(e) => {
// @ts-expect-error event is not fully typed // @ts-expect-error event is not fully typed
const dur = e.target?.duration; const duration = e.target?.duration;
console.log('durationchange', dur); if (!isNumber(duration)) return;
if (typeof dur != 'number' || isNaN(dur)) return; __internal_audio_metadata.update((m) => ({ ...m, duration }));
__internal_audio_metadata.update((m) => ({ ...m, duration: dur }));
}} }}
/> />
<!-- <AudioA11yProgress {currentTime} {paused} {duration} /> --> <!-- <AudioA11yProgress {currentTime} {paused} {duration} /> -->
+1 -1
View File
@@ -1,6 +1,6 @@
import { dev } from '$app/environment'; import { dev } from '$app/environment';
import type { PlayerElement, PlayerMetadata } from '$lib/components/audio/types'; import type { PlayerElement, PlayerMetadata } from '$lib/components/audio/types';
import { secondsToTimestamp } from '$lib/helper/s-to-timestamp'; import { secondsToTimestamp } from '$lib/helper/seconds-to-timestamp';
import clamp from 'just-clamp'; import clamp from 'just-clamp';
import { derived, writable } from 'svelte/store'; import { derived, writable } from 'svelte/store';
+7
View File
@@ -0,0 +1,7 @@
export function isBoolean(value: any): value is boolean {
return typeof value === 'boolean';
}
export function isNumber(value: any): value is number {
return typeof value === 'number' && !isNaN(value);
}