@@ -32,7 +32,7 @@ export default defineEventHandler(async event => {
3232 return
3333 }
3434
35- const path = event . path . split ( '?' ) [ 0 ] !
35+ const [ path = '/' , query ] = event . path . split ( '?' )
3636
3737 // username
3838 if ( path . startsWith ( '/~' ) || path . startsWith ( '/_' ) ) {
@@ -48,7 +48,7 @@ export default defineEventHandler(async event => {
4848 if ( pkgMatch ?. groups ) {
4949 const args = [ pkgMatch . groups . org , pkgMatch . groups . name ] . filter ( Boolean ) . join ( '/' )
5050 setHeader ( event , 'cache-control' , cacheControl )
51- return sendRedirect ( event , `/package/${ args } ` , 301 )
51+ return sendRedirect ( event , `/package/${ args } ` + ( query ? '?' + query : '' ) , 301 )
5252 }
5353
5454 // /@org /pkg/v/version or /@org /pkg@version → /package/org/pkg/v/version
@@ -60,13 +60,17 @@ export default defineEventHandler(async event => {
6060 if ( pkgVersionMatch ?. groups ) {
6161 const args = [ pkgVersionMatch . groups . org , pkgVersionMatch . groups . name ] . filter ( Boolean ) . join ( '/' )
6262 setHeader ( event , 'cache-control' , cacheControl )
63- return sendRedirect ( event , `/package/${ args } /v/${ pkgVersionMatch . groups . version } ` )
63+ return sendRedirect (
64+ event ,
65+ `/package/${ args } /v/${ pkgVersionMatch . groups . version } ` + ( query ? '?' + query : '' ) ,
66+ 301 ,
67+ )
6468 }
6569
6670 // /@org → /org/org
6771 const orgMatch = path . match ( / ^ \/ @ (?< org > [ ^ / ] + ) $ / )
6872 if ( orgMatch ?. groups ) {
6973 setHeader ( event , 'cache-control' , cacheControl )
70- return sendRedirect ( event , `/org/${ orgMatch . groups . org } ` )
74+ return sendRedirect ( event , `/org/${ orgMatch . groups . org } ` + ( query ? '?' + query : '' ) , 301 )
7175 }
7276} )
0 commit comments