@@ -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