11let _ = require ( 'lodash' ) ,
22 Graph = require ( 'graphlib' ) . Graph ,
3+ { resolveRefFromSchema } = require ( '../../schemaUtils' ) ,
34
45 PATH_WEBHOOK = 'path~webhook' ,
56 ALLOWED_HTTP_METHODS = {
@@ -14,8 +15,7 @@ let _ = require('lodash'),
1415 trace : true
1516 } ,
1617
17-
18- _generateTreeFromPathsV2 = function ( openapi , { includeDeprecated } ) {
18+ _generateTreeFromPathsV2 = function ( context , openapi , { includeDeprecated } ) {
1919 /**
2020 * We will create a unidirectional graph
2121 */
@@ -51,6 +51,10 @@ let _ = require('lodash'),
5151 if ( pathSplit . length === 1 ) {
5252 let methods = openapi . paths [ completePath ] ;
5353
54+ if ( methods && methods . $ref ) {
55+ methods = resolveRefFromSchema ( context , methods . $ref ) ;
56+ }
57+
5458 _ . forEach ( methods , function ( data , method ) {
5559 if ( ! ALLOWED_HTTP_METHODS [ method ] ) {
5660 return ;
@@ -100,6 +104,10 @@ let _ = require('lodash'),
100104 if ( ( index + 1 ) === pathSplit . length ) {
101105 let methods = openapi . paths [ completePath ] ;
102106
107+ if ( methods && methods . $ref ) {
108+ methods = resolveRefFromSchema ( context , methods . $ref ) ;
109+ }
110+
103111 _ . forEach ( methods , function ( data , method ) {
104112 if ( ! ALLOWED_HTTP_METHODS [ method ] ) {
105113 return ;
@@ -176,7 +184,7 @@ let _ = require('lodash'),
176184 return tree ;
177185 } ,
178186
179- _generateTreeFromTags = function ( openapi , { includeDeprecated } ) {
187+ _generateTreeFromTags = function ( context , openapi , { includeDeprecated } ) {
180188 let tree = new Graph ( ) ,
181189
182190 tagDescMap = _ . reduce ( openapi . tags , function ( acc , data ) {
@@ -216,6 +224,10 @@ let _ = require('lodash'),
216224 } ) ;
217225
218226 _ . forEach ( openapi . paths , function ( methods , path ) {
227+ if ( methods && methods . $ref ) {
228+ methods = resolveRefFromSchema ( context , methods . $ref ) ;
229+ }
230+
219231 _ . forEach ( methods , function ( data , method ) {
220232 if ( ! ALLOWED_HTTP_METHODS [ method ] ) {
221233 return ;
@@ -284,12 +296,13 @@ let _ = require('lodash'),
284296
285297 /**
286298 * Generates tree structure with nested folders based on tag order
299+ * @param {Object } context - Global context object
287300 * @param {Object } openapi - OpenAPI specification
288301 * @param {Object } options - Generation options
289302 * @param {boolean } options.includeDeprecated - Whether to include deprecated operations
290303 * @returns {Object } - Graph tree with nested folder structure
291304 */
292- _generateTreeFromNestedTags = function ( openapi , { includeDeprecated } ) {
305+ _generateTreeFromNestedTags = function ( context , openapi , { includeDeprecated } ) {
293306 let tree = new Graph ( ) ,
294307
295308 tagDescMap = _ . reduce ( openapi . tags , function ( acc , data ) {
@@ -345,6 +358,10 @@ let _ = require('lodash'),
345358 } ;
346359
347360 _ . forEach ( openapi . paths , function ( methods , path ) {
361+ if ( methods && methods . $ref ) {
362+ methods = resolveRefFromSchema ( context , methods . $ref ) ;
363+ }
364+
348365 _ . forEach ( methods , function ( data , method ) {
349366 if ( ! ALLOWED_HTTP_METHODS [ method ] ) {
350367 return ;
@@ -400,7 +417,7 @@ let _ = require('lodash'),
400417 return tree ;
401418 } ,
402419
403- _generateWebhookEndpoints = function ( openapi , tree , { includeDeprecated } ) {
420+ _generateWebhookEndpoints = function ( context , openapi , tree , { includeDeprecated } ) {
404421 if ( ! _ . isEmpty ( openapi . webhooks ) ) {
405422 tree . setNode ( `${ PATH_WEBHOOK } :folder` , {
406423 type : 'webhook~folder' ,
@@ -416,6 +433,10 @@ let _ = require('lodash'),
416433 }
417434
418435 _ . forEach ( openapi . webhooks , function ( methodData , path ) {
436+ if ( methodData && methodData . $ref ) {
437+ methodData = resolveRefFromSchema ( context , methodData . $ref ) ;
438+ }
439+
419440 _ . forEach ( methodData , function ( data , method ) {
420441 /**
421442 * include deprecated handling.
@@ -441,35 +462,37 @@ let _ = require('lodash'),
441462/**
442463 * Used to generate a tree skeleton for the openapi which will be a collection
443464 *
465+ * @param {Object } context - Global context object
444466 * @param {Object } openapi - openapi schema paths in question
445467 * @param {String } stratergy='PATHS'
446468 *
447469 * @returns {Object } - tree format
448470 */
449- module . exports = function ( openapi , { folderStrategy, includeWebhooks, includeDeprecated, nestedFolderHierarchy } ) {
471+ module . exports = function ( context , openapi ,
472+ { folderStrategy, includeWebhooks, includeDeprecated, nestedFolderHierarchy } ) {
450473 let skeletonTree ;
451474
452475 switch ( folderStrategy ) {
453476 case 'tags' :
454477 if ( nestedFolderHierarchy ) {
455- skeletonTree = _generateTreeFromNestedTags ( openapi , { includeDeprecated } ) ;
478+ skeletonTree = _generateTreeFromNestedTags ( context , openapi , { includeDeprecated } ) ;
456479 }
457480 else {
458- skeletonTree = _generateTreeFromTags ( openapi , { includeDeprecated } ) ;
481+ skeletonTree = _generateTreeFromTags ( context , openapi , { includeDeprecated } ) ;
459482 }
460483
461484 break ;
462485
463486 case 'paths' :
464- skeletonTree = _generateTreeFromPathsV2 ( openapi , { includeDeprecated } ) ;
487+ skeletonTree = _generateTreeFromPathsV2 ( context , openapi , { includeDeprecated } ) ;
465488 break ;
466489
467490 default :
468491 throw new Error ( 'generateSkeletonTreeFromOpenAPI~folderStrategy not valid' ) ;
469492 }
470493
471494 if ( includeWebhooks ) {
472- skeletonTree = _generateWebhookEndpoints ( openapi , skeletonTree , { includeDeprecated } ) ;
495+ skeletonTree = _generateWebhookEndpoints ( context , openapi , skeletonTree , { includeDeprecated } ) ;
473496 }
474497
475498 return skeletonTree ;
0 commit comments