@@ -462,45 +462,90 @@ for (const key in constUsage) {
462
462
// parameterData.json
463
463
// ============================================================================
464
464
465
- function buildParamDocs ( docs ) {
466
- let newClassItems = { } ;
467
- // the fields we need for the FES, discard everything else
468
- let allowed = new Set ( [ 'name' , 'class' , 'module' , 'params' , 'overloads' ] ) ;
469
- for ( let classitem of docs . classitems ) {
470
- if ( classitem . name && classitem . class ) {
471
- for ( let key in classitem ) {
472
- if ( ! allowed . has ( key ) ) {
473
- delete classitem [ key ] ;
474
- }
465
+ function cleanUpClassItems ( data ) {
466
+ for ( const classItem in data ) {
467
+ if ( typeof data [ classItem ] === 'object' ) {
468
+ if ( data [ classItem ] . overloads ) {
469
+ delete data [ classItem ] . name ;
470
+ delete data [ classItem ] . class ;
475
471
}
476
- if ( classitem . hasOwnProperty ( 'overloads' ) ) {
477
- for ( let overload of classitem . overloads ) {
478
- // remove line number and return type
479
- if ( overload . line ) {
480
- delete overload . line ;
481
- }
472
+ cleanUpClassItems ( data [ classItem ] ) ;
473
+ }
474
+ }
482
475
483
- if ( overload . return ) {
484
- delete overload . return ;
485
- }
486
- }
487
- }
488
- if ( ! newClassItems [ classitem . class ] ) {
489
- newClassItems [ classitem . class ] = { } ;
476
+ const flattenOverloads = funcObj => {
477
+ const result = { } ;
478
+
479
+ for ( const [ key , value ] of Object . entries ( funcObj ) ) {
480
+ if ( value && typeof value === 'object' && value . overloads ) {
481
+ result [ key ] = {
482
+ overloads : Object . values ( value . overloads ) . map ( overload => {
483
+ if ( overload . params ) {
484
+ return Object . values ( overload . params ) . map ( param => {
485
+ let type = param . type ;
486
+ if ( param . optional ) {
487
+ type += '?' ;
488
+ }
489
+ return type ;
490
+ } ) ;
491
+ }
492
+ return overload ;
493
+ } )
494
+ } ;
495
+ } else {
496
+ result [ key ] = value ;
490
497
}
498
+ }
491
499
500
+ return result ;
501
+ } ;
502
+
503
+ for ( const classItem in data ) {
504
+ if ( typeof data [ classItem ] === 'object' ) {
505
+ data [ classItem ] = flattenOverloads ( data [ classItem ] ) ;
506
+ }
507
+ }
508
+
509
+ return data ;
510
+ }
511
+
512
+ function buildParamDocs ( docs ) {
513
+ let newClassItems = { } ;
514
+ // the fields we need—note that `name` and `class` are needed at this step because it's used to group classitems together. They will be removed later in cleanUpClassItems.
515
+ let allowed = new Set ( [ 'name' , 'class' , 'params' , 'overloads' ] ) ;
516
+
517
+ for ( let classitem of docs . classitems ) {
518
+ // If `classitem` doesn't have overloads, then it's not a function—skip processing in this case
519
+ if ( classitem . name && classitem . class && classitem . hasOwnProperty ( 'overloads' ) ) {
520
+ // Clean up fields that will not be used in each classitem's overloads
521
+ classitem . overloads ?. forEach ( overload => {
522
+ delete overload . line ;
523
+ delete overload . return ;
524
+ overload . params . forEach ( param => {
525
+ delete param . description ;
526
+ delete param . name ;
527
+ } ) ;
528
+ } ) ;
529
+
530
+ Object . keys ( classitem ) . forEach ( key => {
531
+ if ( ! allowed . has ( key ) ) delete classitem [ key ] ;
532
+ } ) ;
533
+
534
+ newClassItems [ classitem . class ] = newClassItems [ classitem . class ] || { } ;
492
535
newClassItems [ classitem . class ] [ classitem . name ] = classitem ;
493
536
}
494
537
}
495
538
539
+ const cleanedClassItems = cleanUpClassItems ( newClassItems ) ;
540
+
496
541
let out = fs . createWriteStream (
497
542
path . join ( __dirname , '../docs/parameterData.json' ) ,
498
543
{
499
544
flags : 'w' ,
500
545
mode : '0644'
501
546
}
502
547
) ;
503
- out . write ( JSON . stringify ( newClassItems , null , 2 ) ) ;
548
+ out . write ( JSON . stringify ( cleanedClassItems , null , 2 ) ) ;
504
549
out . end ( ) ;
505
550
}
506
551
0 commit comments