@@ -75,17 +75,21 @@ export function parse(string: string | ContentTypeSource): ContentType {
7575 throw new TypeError ( "argument string is required to be a string" ) ;
7676 }
7777
78+ const len = header . length ;
7879 const semiIndex = header . indexOf ( ";" ) ;
80+ const end = semiIndex !== - 1 ? semiIndex : len ;
81+ const valueStart = skipOWS ( header , 0 , end ) ;
82+ const valueEnd = trailingOWS ( header , valueStart , end ) ;
7983 const type =
80- semiIndex !== - 1
81- ? header . slice ( 0 , semiIndex ) . trim ( ) . toLowerCase ( )
82- : header . trim ( ) . toLowerCase ( ) ;
84+ valueStart === 0 && valueEnd === len
85+ ? header . toLowerCase ( )
86+ : header . slice ( valueStart , valueEnd ) . toLowerCase ( ) ;
8387
8488 if ( ! TYPE_REGEXP . test ( type ) ) {
8589 throw new TypeError ( "invalid media type" ) ;
8690 }
8791
88- const parameters = parseParameters ( header , semiIndex ) ;
92+ const parameters = parseParameters ( header , end , len ) ;
8993
9094 return { type, parameters } ;
9195}
@@ -109,11 +113,9 @@ function getcontenttype(obj: ContentTypeSource): string {
109113function parseParameters (
110114 header : string ,
111115 index : number ,
116+ len : number ,
112117) : Record < string , string > {
113118 const parameters = Object . create ( null ) ;
114- if ( index === - 1 ) return parameters ;
115-
116- const len = header . length ;
117119
118120 while ( index < len ) {
119121 // Skip `;` and OWS before parameter key.
0 commit comments