@@ -3926,48 +3926,51 @@ function writeStyleResourceAttributeInJS(
39263926      return ; 
39273927
39283928    // Attribute renames 
3929-     case  'className ':
3929+     case  'className ':  { 
39303930      attributeName  =  'class '; 
3931+       if  ( __DEV__ )  { 
3932+         checkAttributeStringCoercion ( value ,  attributeName ) ; 
3933+       } 
3934+       attributeValue  =  '' +  ( value : any ) ; 
39313935      break ; 
3932- 
3936+      } 
39333937    // Booleans 
3934-     case  'hidden ':
3938+     case  'hidden ':  { 
39353939      if  ( value  ===  false )  { 
39363940        return ; 
39373941      } 
39383942      attributeValue  =  ''; 
39393943      break ; 
3940- 
3944+      } 
39413945    // Santized URLs 
39423946    case  'src ':
39433947    case  'href ': { 
3948+       value  =  sanitizeURL ( value ) ; 
39443949      if  ( __DEV__ )  { 
39453950        checkAttributeStringCoercion ( value ,  attributeName ) ; 
39463951      } 
3947-       value  =  sanitizeURL ( value ) ; 
3952+       attributeValue  =  ''  +   ( value :  any ) ; 
39483953      break ; 
39493954    } 
39503955    default : { 
3956+       if  ( 
3957+         // unrecognized event handlers are not SSR'd and we (apparently) 
3958+         // use on* as hueristic for these handler props 
3959+         name . length  >  2  && 
3960+         ( name [ 0 ]  ===  'o'  ||  name [ 0 ]  ===  'O' )  && 
3961+         ( name [ 1 ]  ===  'n'  ||  name [ 1 ]  ===  'N' ) 
3962+       )  { 
3963+         return ; 
3964+       } 
39513965      if  ( ! isAttributeNameSafe ( name ) )  { 
39523966        return ; 
39533967      } 
3968+       if  ( __DEV__ )  { 
3969+         checkAttributeStringCoercion ( value ,  attributeName ) ; 
3970+       } 
3971+       attributeValue  =  '' +  ( value : any ) ; 
39543972    } 
39553973  } 
3956- 
3957-   if  ( 
3958-     // shouldIgnoreAttribute 
3959-     // We have already filtered out null/undefined and reserved words. 
3960-     name . length  >  2  && 
3961-     ( name [ 0 ]  ===  'o'  ||  name [ 0 ]  ===  'O' )  && 
3962-     ( name [ 1 ]  ===  'n'  ||  name [ 1 ]  ===  'N' ) 
3963-   )  { 
3964-     return ; 
3965-   } 
3966- 
3967-   if  ( __DEV__ )  { 
3968-     checkAttributeStringCoercion ( value ,  attributeName ) ; 
3969-   } 
3970-   attributeValue  =  '' +  ( value : any ) ; 
39713974  writeChunk ( destination ,  arrayInterstitial ) ; 
39723975  writeChunk ( 
39733976    destination , 
@@ -4119,48 +4122,53 @@ function writeStyleResourceAttributeInAttr(
41194122      return ; 
41204123
41214124    // Attribute renames 
4122-     case  'className ':
4125+     case  'className ':  { 
41234126      attributeName  =  'class '; 
4127+       if  ( __DEV__ )  { 
4128+         checkAttributeStringCoercion ( value ,  attributeName ) ; 
4129+       } 
4130+       attributeValue  =  '' +  ( value : any ) ; 
41244131      break ; 
4132+     } 
41254133
41264134    // Booleans 
4127-     case  'hidden ':
4135+     case  'hidden ':  { 
41284136      if  ( value  ===  false )  { 
41294137        return ; 
41304138      } 
41314139      attributeValue  =  ''; 
41324140      break ; 
4141+     } 
41334142
41344143    // Santized URLs 
41354144    case  'src ':
41364145    case  'href ': { 
4146+       value  =  sanitizeURL ( value ) ; 
41374147      if  ( __DEV__ )  { 
41384148        checkAttributeStringCoercion ( value ,  attributeName ) ; 
41394149      } 
4140-       value  =  sanitizeURL ( value ) ; 
4150+       attributeValue  =  ''  +   ( value :  any ) ; 
41414151      break ; 
41424152    } 
41434153    default : { 
4154+       if  ( 
4155+         // unrecognized event handlers are not SSR'd and we (apparently) 
4156+         // use on* as hueristic for these handler props 
4157+         name . length  >  2  && 
4158+         ( name [ 0 ]  ===  'o'  ||  name [ 0 ]  ===  'O' )  && 
4159+         ( name [ 1 ]  ===  'n'  ||  name [ 1 ]  ===  'N' ) 
4160+       )  { 
4161+         return ; 
4162+       } 
41444163      if  ( ! isAttributeNameSafe ( name ) )  { 
41454164        return ; 
41464165      } 
4166+       if  ( __DEV__ )  { 
4167+         checkAttributeStringCoercion ( value ,  attributeName ) ; 
4168+       } 
4169+       attributeValue  =  '' +  ( value : any ) ; 
41474170    } 
41484171  } 
4149- 
4150-   if  ( 
4151-     // shouldIgnoreAttribute 
4152-     // We have already filtered out null/undefined and reserved words. 
4153-     name . length  >  2  && 
4154-     ( name [ 0 ]  ===  'o'  ||  name [ 0 ]  ===  'O' )  && 
4155-     ( name [ 1 ]  ===  'n'  ||  name [ 1 ]  ===  'N' ) 
4156-   )  { 
4157-     return ; 
4158-   } 
4159- 
4160-   if  ( __DEV__ )  { 
4161-     checkAttributeStringCoercion ( value ,  attributeName ) ; 
4162-   } 
4163-   attributeValue  =  '' +  ( value : any ) ; 
41644172  writeChunk ( destination ,  arrayInterstitial ) ; 
41654173  writeChunk ( 
41664174    destination , 
0 commit comments