1
+ import type { Context } from "hono" ;
1
2
import type { HonoEnv } from "../types" ;
2
3
import { createMiddleware } from "hono/factory" ;
3
4
import { createError } from "../utils" ;
4
5
5
6
const DEFAULT_FALLBACK_VERSION = "15.1" ;
6
7
8
+ function redirectLatest ( c : Context , path : string , latestVersion : string | null ) {
9
+ return c . redirect ( path . replace ( "latest" , latestVersion ?? DEFAULT_FALLBACK_VERSION ) ) ;
10
+ }
11
+
7
12
export const versionMiddleware = createMiddleware < HonoEnv > ( async ( c , next ) => {
8
13
const version = c . req . param ( "version" ) ;
9
14
const fullPath = c . req . path ;
@@ -12,33 +17,37 @@ export const versionMiddleware = createMiddleware<HonoEnv>(async (c, next) => {
12
17
return createError ( c , 400 , "missing version" ) ;
13
18
}
14
19
15
- const res = await c . env . EMOJI_DATA . get ( "versions.json" ) ;
20
+ try {
21
+ const res = await c . env . EMOJI_DATA . get ( "versions.json" ) ;
16
22
17
- if ( res == null ) {
18
- return await next ( ) ;
19
- }
23
+ if ( res == null ) {
24
+ return await next ( ) ;
25
+ }
20
26
21
- const payload = await res . json < {
22
- latest_version : string ;
23
- versions : {
24
- emoji_version : string ;
25
- unicode_version : string ;
26
- draft : boolean ;
27
- } [ ] ;
28
- } > ( ) ;
27
+ const payload = await res . json < {
28
+ latest_version : string ;
29
+ versions : {
30
+ emoji_version : string ;
31
+ unicode_version : string ;
32
+ draft : boolean ;
33
+ } [ ] ;
34
+ } > ( ) ;
29
35
30
- const versions = payload . versions ;
31
- const latestVersion = payload . latest_version ;
36
+ const versions = payload . versions ;
37
+ const latestVersion = payload . latest_version ;
32
38
33
- if ( version !== "latest" && ! versions . some ( ( v ) => v . emoji_version === version ) ) {
34
- return createError ( c , 404 , "version not found" ) ;
35
- }
39
+ if ( version !== "latest" && ! versions . some ( ( v ) => v . emoji_version === version ) ) {
40
+ return createError ( c , 404 , "version not found" ) ;
41
+ }
36
42
37
- if ( version === "latest" ) {
38
- const path = fullPath . replace ( "latest" , latestVersion ?? DEFAULT_FALLBACK_VERSION ) ;
43
+ if ( version === "latest" ) {
44
+ return redirectLatest ( c , fullPath , latestVersion ) ;
45
+ }
39
46
40
- return c . redirect ( path ) ;
41
- }
47
+ return await next ( ) ;
48
+ } catch ( err ) {
49
+ console . error ( err ) ;
42
50
43
- await next ( ) ;
51
+ return redirectLatest ( c , fullPath , null ) ;
52
+ }
44
53
} ) ;
0 commit comments