@@ -19,18 +19,29 @@ export type FontData = {
19
19
resolution : number
20
20
underlineThickness : number
21
21
}
22
+ type FontInput = string | FontData
22
23
23
24
let fontLoader : FontLoader | null = null
24
25
25
- async function loader ( font : string | FontData ) {
26
- if ( ! fontLoader ) fontLoader = new FontLoader ( )
27
- let data = typeof font === 'string' ? await ( await fetch ( font as string ) ) . json ( ) : font
28
- return fontLoader . parse ( data as FontData )
26
+ async function loadFontData ( font : FontInput ) : Promise < FontData > {
27
+ return typeof font === 'string' ? await ( await fetch ( font ) ) . json ( ) : font
29
28
}
30
29
31
- export function useFont ( font : string | FontData ) {
30
+ function parseFontData ( fontData : FontData ) {
31
+ if ( ! fontLoader ) {
32
+ fontLoader = new FontLoader ( )
33
+ }
34
+ return fontLoader . parse ( fontData )
35
+ }
36
+
37
+ async function loader ( font : FontInput ) {
38
+ const data = await loadFontData ( font )
39
+ return parseFontData ( data )
40
+ }
41
+
42
+ export function useFont ( font : FontInput ) {
32
43
return suspend ( loader , [ font ] )
33
44
}
34
45
35
- useFont . preload = ( font : string | FontData ) => preload ( loader , [ font ] )
36
- useFont . clear = ( font : string | FontData ) => clear ( [ font ] )
46
+ useFont . preload = ( font : FontInput ) => preload ( loader , [ font ] )
47
+ useFont . clear = ( font : FontInput ) => clear ( [ font ] )
0 commit comments