mirror of
				https://github.com/Redocly/redoc.git
				synced 2025-10-31 07:47:29 +03:00 
			
		
		
		
	fix: use correct parent section for security definition
This commit is contained in:
		
							parent
							
								
									4ef4a971ce
								
							
						
					
					
						commit
						f903406c14
					
				|  | @ -1,5 +1,9 @@ | |||
| import { OpenAPIOperation, OpenAPIParameter, OpenAPISpec, OpenAPITag, Referenced } from '../types'; | ||||
| import { isOperationName } from '../utils'; | ||||
| import { | ||||
|   isOperationName, | ||||
|   SECURITY_DEFINITIONS_COMPONENT_NAME, | ||||
|   setSecuritySchemePrefix, | ||||
| } from '../utils'; | ||||
| import { MarkdownRenderer } from './MarkdownRenderer'; | ||||
| import { GroupModel, OperationModel } from './models'; | ||||
| import { OpenAPIParser } from './OpenAPIParser'; | ||||
|  | @ -38,7 +42,7 @@ export class MenuBuilder { | |||
| 
 | ||||
|     const items: ContentItemModel[] = []; | ||||
|     const tagsMap = MenuBuilder.getTagsWithOperations(spec); | ||||
|     items.push(...MenuBuilder.addMarkdownItems(spec.info.description || '')); | ||||
|     items.push(...MenuBuilder.addMarkdownItems(spec.info.description || '', options)); | ||||
|     if (spec['x-tagGroups']) { | ||||
|       items.push( | ||||
|         ...MenuBuilder.getTagGroupsItems(parser, undefined, spec['x-tagGroups'], tagsMap, options), | ||||
|  | @ -53,8 +57,11 @@ export class MenuBuilder { | |||
|    * extracts items from markdown description | ||||
|    * @param description - markdown source | ||||
|    */ | ||||
|   static addMarkdownItems(description: string): ContentItemModel[] { | ||||
|     const renderer = new MarkdownRenderer(); | ||||
|   static addMarkdownItems( | ||||
|     description: string, | ||||
|     options: RedocNormalizedOptions, | ||||
|   ): ContentItemModel[] { | ||||
|     const renderer = new MarkdownRenderer(options); | ||||
|     const headings = renderer.extractHeadings(description || ''); | ||||
| 
 | ||||
|     const mapHeadingsDeep = (parent, items, depth = 1) => | ||||
|  | @ -64,6 +71,14 @@ export class MenuBuilder { | |||
|         if (heading.items) { | ||||
|           group.items = mapHeadingsDeep(group, heading.items, depth + 1); | ||||
|         } | ||||
|         if ( | ||||
|           MarkdownRenderer.containsComponent( | ||||
|             group.description || '', | ||||
|             SECURITY_DEFINITIONS_COMPONENT_NAME, | ||||
|           ) | ||||
|         ) { | ||||
|           setSecuritySchemePrefix(group.id + '/'); | ||||
|         } | ||||
|         return group; | ||||
|       }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -145,9 +145,12 @@ export class MenuStore { | |||
|     if (item) { | ||||
|       this.activateAndScroll(item, false); | ||||
|     } else { | ||||
|       if (hash.startsWith(SECURITY_SCHEMES_SECTION_PREFIX)) { | ||||
|         item = this.flatItems.find(i => SECURITY_SCHEMES_SECTION_PREFIX.startsWith(i.id)); | ||||
|         this.activate(item); | ||||
|       } | ||||
|       this.scroll.scrollIntoViewBySelector(`[${SECTION_ATTR}="${hash}"]`); | ||||
|     } | ||||
|     return item !== undefined; | ||||
|   }; | ||||
| 
 | ||||
|   /** | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import { OpenAPIRef, OpenAPISchema, OpenAPISpec, Referenced } from '../types'; | |||
| 
 | ||||
| import { appendToMdHeading, IS_BROWSER } from '../utils/'; | ||||
| import { JsonPointer } from '../utils/JsonPointer'; | ||||
| import { isNamedDefinition } from '../utils/openapi'; | ||||
| import { isNamedDefinition, SECURITY_DEFINITIONS_COMPONENT_NAME } from '../utils/openapi'; | ||||
| import { buildComponentComment, MarkdownRenderer } from './MarkdownRenderer'; | ||||
| import { RedocNormalizedOptions } from './RedocNormalizedOptions'; | ||||
| 
 | ||||
|  | @ -74,8 +74,8 @@ export class OpenAPIParser { | |||
|     ) { | ||||
|       // Automatically inject Authentication section with SecurityDefinitions component
 | ||||
|       const description = spec.info.description || ''; | ||||
|       if (!MarkdownRenderer.containsComponent(description, 'security-definitions')) { | ||||
|         const comment = buildComponentComment('security-definitions'); | ||||
|       if (!MarkdownRenderer.containsComponent(description, SECURITY_DEFINITIONS_COMPONENT_NAME)) { | ||||
|         const comment = buildComponentComment(SECURITY_DEFINITIONS_COMPONENT_NAME); | ||||
|         spec.info.description = appendToMdHeading(description, 'Authentication', comment); | ||||
|       } | ||||
|     } | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import { OpenAPISecurityRequirement, OpenAPISecurityScheme } from '../../types'; | ||||
| import { SECURITY_SCHEMES_SECTION } from '../../utils/openapi'; | ||||
| import { SECURITY_SCHEMES_SECTION_PREFIX } from '../../utils/openapi'; | ||||
| import { OpenAPIParser } from '../OpenAPIParser'; | ||||
| 
 | ||||
| export interface SecurityScheme extends OpenAPISecurityScheme { | ||||
|  | @ -27,7 +27,7 @@ export class SecurityRequirementModel { | |||
|         return { | ||||
|           ...scheme, | ||||
|           id, | ||||
|           sectionId: SECURITY_SCHEMES_SECTION + id, | ||||
|           sectionId: SECURITY_SCHEMES_SECTION_PREFIX + id, | ||||
|           scopes, | ||||
|         }; | ||||
|       }) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import { OpenAPISecurityScheme, Referenced } from '../../types'; | ||||
| import { SECURITY_SCHEMES_SECTION } from '../../utils/openapi'; | ||||
| import { SECURITY_SCHEMES_SECTION_PREFIX } from '../../utils/openapi'; | ||||
| import { OpenAPIParser } from '../OpenAPIParser'; | ||||
| 
 | ||||
| export class SecuritySchemeModel { | ||||
|  | @ -25,7 +25,7 @@ export class SecuritySchemeModel { | |||
|   constructor(parser: OpenAPIParser, id: string, scheme: Referenced<OpenAPISecurityScheme>) { | ||||
|     const info = parser.deref(scheme); | ||||
|     this.id = id; | ||||
|     this.sectionId = SECURITY_SCHEMES_SECTION + id; | ||||
|     this.sectionId = SECURITY_SCHEMES_SECTION_PREFIX + id; | ||||
|     this.type = info.type; | ||||
|     this.description = info.description || ''; | ||||
|     if (info.type === 'apiKey') { | ||||
|  |  | |||
|  | @ -275,4 +275,8 @@ export function normalizeServers( | |||
|   }); | ||||
| } | ||||
| 
 | ||||
| export const SECURITY_SCHEMES_SECTION = 'section/Authentication/'; | ||||
| export const SECURITY_DEFINITIONS_COMPONENT_NAME = 'security-definitions'; | ||||
| export let SECURITY_SCHEMES_SECTION_PREFIX = 'section/Authentication/'; | ||||
| export function setSecuritySchemePrefix(prefix: string) { | ||||
|   SECURITY_SCHEMES_SECTION_PREFIX = prefix; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user