@@ -318,9 +318,11 @@ function begin(element, is_interface) {
318
318
seen [ element . longname ] = element ;
319
319
} else
320
320
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 " ) ;
324
326
}
325
327
326
328
// writes the function signature describing element
@@ -432,6 +434,11 @@ function handleElement(element, parent) {
432
434
handleClass ( element , parent ) ;
433
435
else switch ( element . kind ) {
434
436
case "module" :
437
+ if ( element . isEnum ) {
438
+ handleEnum ( element , parent ) ;
439
+ break ;
440
+ }
441
+ // eslint-disable-line no-fallthrough
435
442
case "namespace" :
436
443
handleNamespace ( element , parent ) ;
437
444
break ;
@@ -569,69 +576,74 @@ function handleClass(element, parent) {
569
576
}
570
577
}
571
578
572
- // handles a namespace or class member
573
- function handleMember ( element , parent ) {
579
+ // handles an enum
580
+ function handleEnum ( element ) {
574
581
begin ( element ) ;
575
582
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 ;
605
587
}
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 ( ";" ) ;
607
597
} 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
+ }
608
613
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 ) ;
618
621
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 " ) ;
623
631
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 ) , ";" ) ;
635
647
}
636
648
637
649
// handles a function or method
0 commit comments