@@ -318,9 +318,11 @@ function begin(element, is_interface) {
318318        seen [ element . longname ]  =  element ; 
319319    }  else 
320320        writeln ( ) ; 
321-     if  ( element . scope  !==  "global"  ||  options . module ) 
322-         return ; 
323-     write ( "export " ) ; 
321+     // ????: something changed in JSDoc 3.6.0? so that @exports + @enum does 
322+     // no longer yield a 'global' scope, but is some sort of unscoped module 
323+     // element now. The additional condition added below works around this. 
324+     if  ( ( element . scope  ===  "global"  ||  element . isEnum  &&  element . scope  ===  undefined )  &&  ! options . module ) 
325+         write ( "export " ) ; 
324326} 
325327
326328// writes the function signature describing element 
@@ -432,6 +434,11 @@ function handleElement(element, parent) {
432434        handleClass ( element ,  parent ) ; 
433435    else  switch  ( element . kind )  { 
434436        case  "module" :
437+             if  ( element . isEnum )  { 
438+                 handleEnum ( element ,  parent ) ; 
439+                 break ; 
440+             } 
441+             // eslint-disable-line no-fallthrough 
435442        case  "namespace" :
436443            handleNamespace ( element ,  parent ) ; 
437444            break ; 
@@ -569,69 +576,74 @@ function handleClass(element, parent) {
569576    } 
570577} 
571578
572- // handles a namespace or class member  
573- function  handleMember ( element ,   parent )  { 
579+ // handles an enum  
580+ function  handleEnum ( element )  { 
574581    begin ( element ) ; 
575582
576-     if  ( element . isEnum )  { 
577-         var  stringEnum  =  false ; 
578-         element . properties . forEach ( function ( property )  { 
579-             if  ( isNaN ( property . defaultvalue ) )  { 
580-                 stringEnum  =  true ; 
581-             } 
582-         } ) ; 
583-         if  ( stringEnum )  { 
584-             writeln ( "type " ,  element . name ,  " =" ) ; 
585-             ++ indent ; 
586-             element . properties . forEach ( function ( property ,  i )  { 
587-                 write ( i  ===  0  ? ""  : "| " ,  JSON . stringify ( property . defaultvalue ) ) ; 
588-             } ) ; 
589-             -- indent ; 
590-             writeln ( ";" ) ; 
591-         }  else  { 
592-             writeln ( "enum " ,  element . name ,  " {" ) ; 
593-             ++ indent ; 
594-             element . properties . forEach ( function ( property ,  i )  { 
595-                 write ( property . name ) ; 
596-                 if  ( property . defaultvalue  !==  undefined ) 
597-                     write ( " = " ,  JSON . stringify ( property . defaultvalue ) ) ; 
598-                 if  ( i  <  element . properties . length  -  1 ) 
599-                     writeln ( "," ) ; 
600-                 else 
601-                     writeln ( ) ; 
602-             } ) ; 
603-             -- indent ; 
604-             writeln ( "}" ) ; 
583+     var  stringEnum  =  false ; 
584+     element . properties . forEach ( function ( property )  { 
585+         if  ( isNaN ( property . defaultvalue ) )  { 
586+             stringEnum  =  true ; 
605587        } 
606- 
588+     } ) ; 
589+     if  ( stringEnum )  { 
590+         writeln ( "type " ,  element . name ,  " =" ) ; 
591+         ++ indent ; 
592+         element . properties . forEach ( function ( property ,  i )  { 
593+             write ( i  ===  0  ? ""  : "| " ,  JSON . stringify ( property . defaultvalue ) ) ; 
594+         } ) ; 
595+         -- indent ; 
596+         writeln ( ";" ) ; 
607597    }  else  { 
598+         writeln ( "enum " ,  element . name ,  " {" ) ; 
599+         ++ indent ; 
600+         element . properties . forEach ( function ( property ,  i )  { 
601+             write ( property . name ) ; 
602+             if  ( property . defaultvalue  !==  undefined ) 
603+                 write ( " = " ,  JSON . stringify ( property . defaultvalue ) ) ; 
604+             if  ( i  <  element . properties . length  -  1 ) 
605+                 writeln ( "," ) ; 
606+             else 
607+                 writeln ( ) ; 
608+         } ) ; 
609+         -- indent ; 
610+         writeln ( "}" ) ; 
611+     } 
612+ } 
608613
609-         var  inClass  =  isClassLike ( parent ) ; 
610-         if  ( inClass )  { 
611-             write ( element . access  ||  "public" ,  " " ) ; 
612-             if  ( element . scope  ===  "static" ) 
613-                 write ( "static " ) ; 
614-             if  ( element . readonly ) 
615-                 write ( "readonly " ) ; 
616-         }  else 
617-             write ( element . kind  ===  "constant"  ? "const "  : "let " ) ; 
614+ // handles a namespace or class member 
615+ function  handleMember ( element ,  parent )  { 
616+     if  ( element . isEnum )  { 
617+         handleEnum ( element ) ; 
618+         return ; 
619+     } 
620+     begin ( element ) ; 
618621
619-         write ( element . name ) ; 
620-         if  ( element . optional ) 
621-             write ( "?" ) ; 
622-         write ( ": " ) ; 
622+     var  inClass  =  isClassLike ( parent ) ; 
623+     if  ( inClass )  { 
624+         write ( element . access  ||  "public" ,  " " ) ; 
625+         if  ( element . scope  ===  "static" ) 
626+             write ( "static " ) ; 
627+         if  ( element . readonly ) 
628+             write ( "readonly " ) ; 
629+     }  else 
630+         write ( element . kind  ===  "constant"  ? "const "  : "let " ) ; 
623631
624-         if  ( element . type  &&  element . type . names  &&  / ^ O b j e c t \b / i. test ( element . type . names [ 0 ] )  &&  element . properties )  { 
625-             writeln ( "{" ) ; 
626-             ++ indent ; 
627-             element . properties . forEach ( function ( property ,  i )  { 
628-                 writeln ( JSON . stringify ( property . name ) ,  ": " ,  getTypeOf ( property ) ,  i  <  element . properties . length  -  1  ? ","  : "" ) ; 
629-             } ) ; 
630-             -- indent ; 
631-             writeln ( "};" ) ; 
632-         }  else 
633-             writeln ( getTypeOf ( element ) ,  ";" ) ; 
634-     } 
632+     write ( element . name ) ; 
633+     if  ( element . optional ) 
634+         write ( "?" ) ; 
635+     write ( ": " ) ; 
636+ 
637+     if  ( element . type  &&  element . type . names  &&  / ^ O b j e c t \b / i. test ( element . type . names [ 0 ] )  &&  element . properties )  { 
638+         writeln ( "{" ) ; 
639+         ++ indent ; 
640+         element . properties . forEach ( function ( property ,  i )  { 
641+             writeln ( JSON . stringify ( property . name ) ,  ": " ,  getTypeOf ( property ) ,  i  <  element . properties . length  -  1  ? ","  : "" ) ; 
642+         } ) ; 
643+         -- indent ; 
644+         writeln ( "};" ) ; 
645+     }  else 
646+         writeln ( getTypeOf ( element ) ,  ";" ) ; 
635647} 
636648
637649// handles a function or method 
0 commit comments