@redocly/openapi-docs 3.24.0-next.1 → 3.24.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/redocly-openapi-docs.min.AiChatProvider-DhmZRjCy.js +32 -0
  2. package/dist/redocly-openapi-docs.min.AiChatSqliteDBStorage-D1axMGbc.js +1 -0
  3. package/dist/redocly-openapi-docs.min.AiPanel-DsHL8Tj5.js +773 -0
  4. package/dist/redocly-openapi-docs.min.HistorySqliteDBStorage-DYnaxLim.js +1 -0
  5. package/dist/redocly-openapi-docs.min.SqliteDBStorage-DbMKa2rS.js +14 -0
  6. package/dist/redocly-openapi-docs.min.StepContextSqliteDBStorage-DTB5U2yh.js +1 -0
  7. package/dist/redocly-openapi-docs.min.ai-chat-mappers-CYTtl-vb.js +1 -0
  8. package/dist/redocly-openapi-docs.min.ai-message-parts.schema-C7fjQhYX.js +1 -0
  9. package/dist/redocly-openapi-docs.min.external-resolver-l2gG6VEi.js +2 -0
  10. package/dist/redocly-openapi-docs.min.history.schema-DzAAX18S.js +1 -0
  11. package/dist/redocly-openapi-docs.min.index-Cof5qhpm.js +1 -0
  12. package/dist/redocly-openapi-docs.min.index-DAzSuxAj.js +1 -0
  13. package/dist/redocly-openapi-docs.min.index-DafBC2xj.js +1 -0
  14. package/dist/redocly-openapi-docs.min.index-DdeY52iV.js +7716 -0
  15. package/dist/redocly-openapi-docs.min.indexes-Bp4ld5gB.js +1 -0
  16. package/dist/redocly-openapi-docs.min.js +1 -20958
  17. package/dist/redocly-openapi-docs.min.lint-DzAaVAOn.js +181 -0
  18. package/dist/redocly-openapi-docs.min.lint-graphql-GMwEJAKm.js +3 -0
  19. package/dist/redocly-openapi-docs.min.respect-run-DeLDyD3E.js +78 -0
  20. package/dist/redocly-openapi-docs.min.standalone-DrxWsrqx.js +12112 -0
  21. package/dist/redocly-openapi-docs.min.step-context.schema-DEgzIgw0.js +1 -0
  22. package/dist/redocly-openapi-docs.min.tauri-path-Q8cku-q2.js +1 -0
  23. package/dist/redocly-openapi-docs.min.useAiChatQueries-Bjb0Ax3R.js +381 -0
  24. package/lib/components/ApiInfo/ApiInfo.d.ts +1 -1
  25. package/lib/components/Callbacks/CallbackOperation.js +1 -1
  26. package/lib/components/Callbacks/CallbackSummary.d.ts +1 -1
  27. package/lib/components/Callbacks/CallbackSummary.js +1 -1
  28. package/lib/components/Callbacks/CallbacksList.js +1 -1
  29. package/lib/components/Content/useAutoScroll.js +1 -1
  30. package/lib/components/ContentItem/useIsExpanded.d.ts +1 -1
  31. package/lib/components/ContentItem/useIsExpanded.js +1 -1
  32. package/lib/components/ContentItems/ContentItems.js +1 -1
  33. package/lib/components/ContentItems/VirtualList.d.ts +4 -2
  34. package/lib/components/ContentItems/VirtualList.js +1 -1
  35. package/lib/components/ContentItems/useScrollOnRender.js +1 -1
  36. package/lib/components/Download/DownloadSpecification.d.ts +1 -1
  37. package/lib/components/ExpandAllButton/ExpandAllButton.js +2 -2
  38. package/lib/components/ExpandAllButton/helpers.d.ts +5 -0
  39. package/lib/components/ExpandAllButton/helpers.js +1 -0
  40. package/lib/components/McpOverview/McpOverview.d.ts +1 -1
  41. package/lib/components/PayloadSamples/Example.d.ts +1 -1
  42. package/lib/components/PayloadSamples/ExampleValue.d.ts +1 -1
  43. package/lib/components/PropertyDetails/DescriptionEnums.d.ts +1 -1
  44. package/lib/components/PropertyDetails/SimpleEnums.d.ts +1 -1
  45. package/lib/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.d.ts +1 -1
  46. package/lib/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocsStandalone.d.ts +1 -1
  47. package/lib/components/Replay/EmbeddedReplay.d.ts +1 -1
  48. package/lib/components/Replay/Replay.js +1 -1
  49. package/lib/components/Request/RequestDetails.js +4 -4
  50. package/lib/components/RequestParameters/RequestParameters.d.ts +1 -1
  51. package/lib/components/RequestSamples/useCodeSamples.d.ts +1 -1
  52. package/lib/components/ResponseSamples/ResponseSamples.d.ts +1 -1
  53. package/lib/components/Responses/OperationResponseList.js +2 -2
  54. package/lib/components/Schema/ArraySchema.js +1 -1
  55. package/lib/components/Schema/Schema.js +1 -1
  56. package/lib/components/Schema/SubSchema.js +1 -1
  57. package/lib/components/Schema/helpers.d.ts +1 -1
  58. package/lib/components/Schema/types.d.ts +2 -0
  59. package/lib/components/Schema/useOneOfLocationIdx.js +1 -1
  60. package/lib/components/SectionContent/SectionContent.d.ts +1 -1
  61. package/lib/components/Security/RequiredScopesList.d.ts +1 -1
  62. package/lib/components/Security/ScopeTagWithTooltip.d.ts +1 -1
  63. package/lib/components/Security/SecurityFlow.d.ts +1 -1
  64. package/lib/components/SideMenu/hooks/useMenuItems.js +1 -1
  65. package/lib/components/StickySidebar/StickyResponsiveSidebar.js +1 -1
  66. package/lib/components/TagItem/OperationNavigationItems.d.ts +1 -1
  67. package/lib/components/TagItem/OperationsNavigation.d.ts +1 -1
  68. package/lib/components/TagItem/OperationsNavigation.js +1 -1
  69. package/lib/components/TagItem/TagItem.d.ts +1 -1
  70. package/lib/components/TagItem/TagItem.js +1 -1
  71. package/lib/components/ViewNested/ViewNested.d.ts +1 -0
  72. package/lib/components/ViewNested/ViewNested.js +6 -6
  73. package/lib/components/common/Dropdown/Dropdown.d.ts +1 -1
  74. package/lib/components/common/LinkToField.js +1 -1
  75. package/lib/components/common/SchemaSelection/SchemaSelection.d.ts +1 -1
  76. package/lib/components/common/linkify.js +1 -1
  77. package/lib/contexts/expand-all-depth.d.ts +2 -0
  78. package/lib/contexts/expand-all-depth.js +1 -0
  79. package/lib/hooks/useRouter.js +1 -1
  80. package/lib/hooks/useUppercase2LowercaseRedirect.js +1 -1
  81. package/lib/jotai/operation.d.ts +1 -1
  82. package/lib/models/field.js +1 -1
  83. package/lib/models/mediaContent.d.ts +1 -1
  84. package/lib/models/mediaType.d.ts +1 -1
  85. package/lib/models/request.d.ts +1 -1
  86. package/lib/models/response.d.ts +1 -1
  87. package/lib/models/schema.d.ts +1 -1
  88. package/lib/models/schema.js +2 -2
  89. package/lib/models/security.d.ts +1 -1
  90. package/lib/services/OpenAPIParser.js +1 -1
  91. package/lib/services/code-samples/generator.d.ts +1 -1
  92. package/lib/services/code-samples/httpsnippet/helpers/code-builder.d.ts +1 -1
  93. package/lib/services/code-samples/httpsnippet/helpers/code-helpers.d.ts +1 -1
  94. package/lib/services/config-options/normalizeOptions.js +1 -1
  95. package/lib/utils/dom.js +1 -1
  96. package/lib/utils/path.d.ts +1 -1
  97. package/package.json +14 -14
@@ -1,4 +1,4 @@
1
- import{jsx as a,jsxs as c}from"react/jsx-runtime";import{useAtomValue as m}from"jotai";import{Link as h}from"react-router-dom";import{LinkIcon as o}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{globalOptionsAtom as d}from"../../jotai/store.js";import{tryDecodeURIComponent as f}from"../../utils/index.js";import{styled as k}from"../../styled-components.js";import{joinWithSeparator as e}from"../../services/history/helpers.js";function u(i){const{routingBasePath:n,onDeepLinkClick:r}=m(d),t=i.to,l=r&&{onClick:s=>{s.preventDefault(),r(e(n||"",t))}};return t?a(h,{"aria-label":i["aria-label"]||`link to ${t}`,id:f(i.id||""),className:i.className||"",to:t?.startsWith("#")?t:e(n||"",t),...l,children:i.children}):i.children?c("span",{"aria-label":i["aria-label"]||`link to ${t}`,className:i.className,children:[" ",i.children," "]}):null}const b=k(u)`
1
+ import{jsx as a,jsxs as c}from"react/jsx-runtime";import{useAtomValue as m}from"jotai";import{Link as h}from"react-router";import{LinkIcon as o}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{globalOptionsAtom as d}from"../../jotai/store.js";import{tryDecodeURIComponent as f}from"../../utils/index.js";import{styled as k}from"../../styled-components.js";import{joinWithSeparator as e}from"../../services/history/helpers.js";function u(i){const{routingBasePath:n,onDeepLinkClick:r}=m(d),t=i.to,l=r&&{onClick:s=>{s.preventDefault(),r(e(n||"",t))}};return t?a(h,{"aria-label":i["aria-label"]||`link to ${t}`,id:f(i.id||""),className:i.className||"",to:t?.startsWith("#")?t:e(n||"",t),...l,children:i.children}):i.children?c("span",{"aria-label":i["aria-label"]||`link to ${t}`,className:i.className,children:[" ",i.children," "]}):null}const b=k(u)`
2
2
  position: absolute;
3
3
  top: 50%;
4
4
  left: 0;
@@ -0,0 +1,2 @@
1
+ export declare const ExpandAllDepthContext: import("react").Context<number | undefined>;
2
+ export declare function useExpandAllDepth(): number | undefined;
@@ -0,0 +1 @@
1
+ import{createContext as t,useContext as e}from"react";const n=t(void 0);function p(){return e(n)}export{n as ExpandAllDepthContext,p as useExpandAllDepth};
@@ -1 +1 @@
1
- import{BrowserRouter as s,HashRouter as a,MemoryRouter as n}from"react-router-dom";const m={history:s,memory:n,hash:a},R=(e,o)=>{const r=m[e],t={...e!=="memory"&&{basename:o,feature:{v7_startTransition:!1,v7_relativeSplatPath:!1}}};return{Router:r,routerProps:t}};export{R as useRouter};
1
+ import{BrowserRouter as s,HashRouter as a,MemoryRouter as n}from"react-router";const m={history:s,memory:n,hash:a},R=(e,o)=>{const r=m[e],t={...e!=="memory"&&{basename:o,feature:{v7_startTransition:!1,v7_relativeSplatPath:!1}}};return{Router:r,routerProps:t}};export{R as useRouter};
@@ -1 +1 @@
1
- import{useEffect as t}from"react";import{useLocation as o,useNavigate as r}from"react-router-dom";function p(){const a=r(),e=o();t(()=>{e.pathname.toLowerCase()!==e.pathname&&a(e.pathname.toLowerCase(),{replace:!0})},[e.pathname,a])}export{p as useUppercase2LowercaseRedirect};
1
+ import{useEffect as t}from"react";import{useLocation as o,useNavigate as r}from"react-router";function p(){const a=r(),e=o();t(()=>{e.pathname.toLowerCase()!==e.pathname&&a(e.pathname.toLowerCase(),{replace:!0})},[e.pathname,a])}export{p as useUppercase2LowercaseRedirect};
@@ -19,7 +19,7 @@ export declare function getDefaultOperationStore(pointer: string, requestValues?
19
19
  }, activeExampleName?: string): {
20
20
  activeExampleName: string | undefined;
21
21
  activeOneOf: {
22
- [x: string]: number;
22
+ [pointer]: number;
23
23
  };
24
24
  requestValues: {
25
25
  [field: string]: any;
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as V}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as T}from"../utils/index.js";import{getSchema as _}from"./schema.js";import{getExamples as j}from"./example.js";const F={path:{style:"simple",explode:!1},query:{style:"form",explode:!0},header:{style:"simple",explode:!1},cookie:{style:"form",explode:!0},querystring:{style:"form",explode:!0}};function U(l,i,p,a,d,x,b=p){const{resolved:e}=l.deref(i),P=i.kind||"field",f=i.name||e.name,o=e.in,v=!!e.required;let r=e.schema,u,s="",c;if(!r&&e.in&&e.content){s=Object.keys(e.content)[0];const n=e.content[s];r=n&&n?.example?{...l.deref(n.schema,x,!0).resolved,example:e.example||n.example}:n.schema}const h=V(d.parentFieldFullPath,T(f||"")),t=_({parser:l,schemaOrRef:r||{},pointer:p,options:a,baseRefsStack:x,absolutePointer:i.$ref||e.schema?.absolutePointer||b,deps:{...d,parentFieldFullPath:h,in:o}}),w=e.description===void 0?E(t,"description")||"":E(e,"description"),R=e.example||t.example,y=e.examples||e.content?.[s]?.examples,S=y?L(y,(n,M)=>j({parser:l,infoOrRef:n,mime:M,encoding:e.encoding})):void 0;s?u=s:e.style?c=e.style:o&&(c=F[o]?.style??"form");const A=e.explode===void 0&&o?F[o]?.explode??!0:!!e.explode,k=e.deprecated===void 0?t.deprecated:e.deprecated,q=a.showExtensions?I(e,a.showExtensions):void 0,C=t?.const||e?.const||"",g=e["x-badges"]??t.schema?.["x-badges"];return{deps:d||{},schema:t,name:f,required:v,description:w,example:R,examples:S,deprecated:k,in:o,kind:P,extensions:q,explode:A,style:c,const:C,serializationMime:u,fieldFullPath:h,...g?.length&&{badges:g},...e.allowReserved&&{allowReserved:e.allowReserved},[m]:e[m]||t[m]}}export{U as getField};
1
+ import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as V}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as T}from"../utils/index.js";import{getSchema as _}from"./schema.js";import{getExamples as j}from"./example.js";const F={path:{style:"simple",explode:!1},query:{style:"form",explode:!0},header:{style:"simple",explode:!1},cookie:{style:"form",explode:!0},querystring:{style:"form",explode:!0}};function U(l,d,p,i,a,x,b=p){const{resolved:e}=l.deref(d),P=d.kind||"field",f=d.name||e.name,o=e.in,v=!!e.required;let r=e.schema,u,s="",c;if(!r&&e.in&&e.content){s=Object.keys(e.content)[0];const n=e.content[s];r=n&&n?.example!==void 0?{...l.deref(n.schema,x,!0).resolved,example:e.example!==void 0?e.example:n.example}:n.schema}const h=V(a.parentFieldFullPath,T(f||"")),t=_({parser:l,schemaOrRef:r||{},pointer:p,options:i,baseRefsStack:x,absolutePointer:d.$ref||e.schema?.absolutePointer||b,deps:{...a,parentFieldFullPath:h,in:o}}),w=e.description===void 0?E(t,"description")||"":E(e,"description"),R=e.example!==void 0?e.example:t.example,y=e.examples||e.content?.[s]?.examples,S=y?L(y,(n,M)=>j({parser:l,infoOrRef:n,mime:M,encoding:e.encoding})):void 0;s?u=s:e.style?c=e.style:o&&(c=F[o]?.style??"form");const A=e.explode===void 0&&o?F[o]?.explode??!0:!!e.explode,k=e.deprecated===void 0?t.deprecated:e.deprecated,q=i.showExtensions?I(e,i.showExtensions):void 0,C=t?.const||e?.const||"",g=e["x-badges"]??t.schema?.["x-badges"];return{deps:a||{},schema:t,name:f,required:v,description:w,example:R,examples:S,deprecated:k,in:o,kind:P,extensions:q,explode:A,style:c,const:C,serializationMime:u,fieldFullPath:h,...g?.length&&{badges:g},...e.allowReserved&&{allowReserved:e.allowReserved},[m]:e[m]||t[m]}}export{U as getField};
@@ -3,5 +3,5 @@ import type { MediaContentModel, MediaContentModelInput } from './types.js';
3
3
  * MediaContent model ready to be sued by React components
4
4
  * Contains multiple MediaTypes and keeps track of the currently active one
5
5
  */
6
- export declare function getMediaContent({ parser, info, isRequestType, options, data: { operation, type, response, absolutePointer } }: MediaContentModelInput): MediaContentModel;
6
+ export declare function getMediaContent({ parser, info, isRequestType, options, data: { operation, type, response, absolutePointer }, }: MediaContentModelInput): MediaContentModel;
7
7
  export declare function getActiveMediaType(content: MediaContentModel, activeMimeName?: string): import("./types.js").MediaTypeModel;
@@ -11,7 +11,7 @@ import type { MediaTypeModel, ResponseModel, OperationModel } from './types.js';
11
11
  * @param type
12
12
  * @param response
13
13
  */
14
- export declare function getMediaType(parser: OpenAPIParser, name: string, isRequestType: boolean, info: OpenAPIMediaType, options: Options, { operation, type, response, absolutePointer }: {
14
+ export declare function getMediaType(parser: OpenAPIParser, name: string, isRequestType: boolean, info: OpenAPIMediaType, options: Options, { operation, type, response, absolutePointer, }: {
15
15
  operation: OperationModel;
16
16
  type?: 'request' | 'response';
17
17
  response?: ResponseModel;
@@ -8,5 +8,5 @@ type GetRequestBodyInput = {
8
8
  isEvent?: boolean;
9
9
  operation: OperationModel;
10
10
  };
11
- export declare function getRequestBody({ parser, infoOrRef, options, isEvent, operation }: GetRequestBodyInput): RequestBodyModel;
11
+ export declare function getRequestBody({ parser, infoOrRef, options, isEvent, operation, }: GetRequestBodyInput): RequestBodyModel;
12
12
  export {};
@@ -10,5 +10,5 @@ type ResponseProps = {
10
10
  operation: OperationModel;
11
11
  isEvent?: boolean;
12
12
  };
13
- export declare function getResponse({ parser, code, defaultAsError, infoOrRef, options, isEvent, operation }: ResponseProps): ResponseModel;
13
+ export declare function getResponse({ parser, code, defaultAsError, infoOrRef, options, isEvent, operation, }: ResponseProps): ResponseModel;
14
14
  export {};
@@ -1,7 +1,7 @@
1
1
  import type { OpenAPISchema, Referenced } from '../types/index.js';
2
2
  import type { OpenAPIParser, Options } from '../services/index.js';
3
3
  import type { Deps, SchemaModel } from './types.js';
4
- export declare function getSchema({ parser, schemaOrRef, pointer, options, isChild, isDefaultMapping, baseRefsStack, deps, absolutePointer }: {
4
+ export declare function getSchema({ parser, schemaOrRef, pointer, options, isChild, isDefaultMapping, baseRefsStack, deps, absolutePointer, }: {
5
5
  parser: OpenAPIParser;
6
6
  schemaOrRef: Referenced<OpenAPISchema>;
7
7
  pointer: string;
@@ -1,2 +1,2 @@
1
- import{REDOCLY_TEAMS_RBAC as S}from"@redocly/config";import{isObject as I}from"@redocly/theme/core/openapi";import{pushRef as w}from"../services/OpenAPIParser.js";import{detectType as q,extractExtensions as C,getValueFromMdParsedExtension as M,humanizeConstraints as E,isNamedDefinition as h,isPrimitiveType as B,JsonPointer as A,pluralizeType as z,sortByDeprecated as L,sortByRequired as J}from"../utils/index.js";import{getField as b}from"./field.js";function F({parser:i,schemaOrRef:n,pointer:u,options:l,isChild:P=!1,isDefaultMapping:f=!1,baseRefsStack:m=[],deps:a,absolutePointer:y}){const{resolved:p,refsStack:c}=i.deref(n,m,!0),s=n.$ref||u||y||"",r=w(c,s),t=i.mergeAllOf(p,s,r,n.$ref||y),O=t.type||q(t),e={operationPointer:a.operation?.pointer||y||"",schemaOrRef:n,isChild:P,isDefaultMapping:f,typePrefix:"",pointer:s,absolutePointer:y,refsStack:r,rawSchema:p,type:O,isCircular:!!t["x-circular-ref"],isComplex:!!t["x-complex"],title:t.title||h(s)&&A.baseName(s)||"",description:M(t,"description")||"",format:t.format,enum:t.enum||[],example:t.example,deprecated:!!t.deprecated,pattern:t.pattern,externalDocs:t.externalDocs,displayFormat:t.format,isPrimitive:B(t,O),constraints:E(t),default:t.default,readOnly:!!t.readOnly,writeOnly:!!t.writeOnly,const:t.const||"",contentEncoding:t.contentEncoding,contentMediaType:t.contentMediaType,minItems:t.minItems,maxItems:t.maxItems,nullable:t.nullable||t["x-nullable"],schema:t,displayType:"",items:void 0,extensions:void 0,oneOfType:"",discriminatorProp:void 0,oneOf:void 0,[S]:t[S],"x-enumDescriptions":M(t,"x-enumDescriptions"),get fields(){if(!e.isCircular&&!e.isComplex&&($(e,"object")||$(e,"array")&&v(t)))return K(i,t,s,l,r,a)}};if((t.nullable||t["x-nullable"])&&(Array.isArray(e.type)&&!e.type.some(d=>d===null||d==="null")?e.type=[...e.type,"null"]:!Array.isArray(e.type)&&(e.type!==null||e.type!=="null")&&(e.type=[e.type,"null"])),e.displayType=Array.isArray(e.type)?e.type.map(d=>d===null?"null":d).join(" or "):e.type,e.isCircular)return e;if(t.if&&t.then||t.if&&t.else){const{oneOf:d,oneOfType:o}=_({schema:t,parser:i,pointer:s,options:l,deps:a,refsStack:r});return e.oneOf=d,e.oneOfType=o,e}if(!P&&j(t)!==void 0){const{oneOf:d,discriminatorProp:o}=V({schema:t,parser:i,deps:a,mergedSchema:t,options:l,pointer:s,refsStack:r});return e.oneOf=d,e.discriminatorProp=o,e}else P&&Array.isArray(t.oneOf)&&t.oneOf.find(d=>d.$ref===s)&&delete t.oneOf;if(t.oneOf!==void 0){const{oneOf:d,displayType:o}=k({schemaOneOf:t.oneOf,parser:i,deps:a,options:l,pointer:s,refsStack:r,schema:t});return e.oneOfType="One of",d&&(e.oneOf=d),e.displayType=o,t.anyOf!==void 0&&console.warn(`oneOf and anyOf are not supported on the same level. Skipping anyOf at ${s}`),e}if(t.anyOf!==void 0){const{oneOf:d,displayType:o}=k({schemaOneOf:t.anyOf,parser:i,deps:a,options:l,pointer:s,refsStack:r,schema:t});return d&&(e.oneOf=d),e.displayType=o,e.oneOfType="Any of",e}if($(e,"array")&&(t.items&&!v(t)&&(e.items=F({parser:i,schemaOrRef:t.items,pointer:s+"/items",options:l,baseRefsStack:r,deps:a,absolutePointer:A.join(t.absolutePointer||"",["items"])}),e.items.isPrimitive&&(e.description=e.items.description||e.description,e.pattern=e.items.pattern||e.pattern,e.format=e.items.format||e.format,e.constraints=[...e.constraints,...e.items.constraints])),e.displayType=t.prefixItems||Array.isArray(t.items)?"items":z(e.items?.displayType||e.displayType),e.displayFormat=e.items?.format||"",e.typePrefix=e.items?.typePrefix||"Array of ",e.title=e.title||e.items?.title||"",e.isPrimitive=e.items?.isPrimitive!==void 0?e.items?.isPrimitive:e.isPrimitive,e.example===void 0&&e.items?.example!==void 0&&(e.example=[e.items.example]),e.items?.isPrimitive&&(e.enum=e.items.enum,e["x-enumDescriptions"]=M(e.items,"x-enumDescriptions")),Array.isArray(e.type))){const d=e.type.filter(o=>o!=="array");d.length&&(e.displayType+=` or ${d.join(" or ")}`)}return l.showExtensions&&(e.extensions=C(t,l.showExtensions)),e}function V({schema:i,parser:n,pointer:u,options:l,refsStack:P,deps:f,mergedSchema:m}){const a=j(i),y=a?.propertyName,p=n.findDerived([...m["x-parentRefs"]||[],u]);if(i.oneOf)for(const o of i.oneOf){if(o.$ref===void 0)continue;const x=A.baseName(o.$ref);p[o.$ref]=x}const c=a?.mapping||{},s=a?.["x-explicitMappingOnly"]??Object.keys(c).length>0,r={};for(const o in c){const x=c[o];Array.isArray(r[x])?r[x].push(o):r[x]=[o]}const t=s?{...r}:{...p,...r};let O=[];for(const o of Object.keys(t)){const x=t[o];if(Array.isArray(x))for(const g of x)O.push({$ref:o,name:g});else O.push({$ref:o,name:x})}if(a?.defaultMapping){const o=O.findIndex(g=>g.name===A.baseName(a.defaultMapping)),x="Default mapping";~o?O[o]={$ref:a.defaultMapping,name:x,isDefaultMapping:!0}:O.push({$ref:a.defaultMapping,name:x,isDefaultMapping:!0})}const e=Object.keys(c);return e.length!==0&&(O=O.sort((o,x)=>{if(o.isDefaultMapping&&!x.isDefaultMapping)return 1;if(!o.isDefaultMapping&&x.isDefaultMapping)return-1;const g=e.indexOf(o.name),T=e.indexOf(x.name);return g<0&&T<0?o.name.localeCompare(x.name):g<0?1:T<0?-1:g-T})),{oneOf:O.map(({$ref:o,name:x,isDefaultMapping:g},T)=>{const D=F({parser:n,schemaOrRef:{$ref:o},pointer:o,options:l,isChild:!0,isDefaultMapping:g,baseRefsStack:P.slice(0,-1),deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&d="+T:"&d="+T.toString()},absolutePointer:m.absolutePointer});return D.title=x,D}),discriminatorProp:y}}function k({schemaOneOf:i,parser:n,refsStack:u,pointer:l,schema:P,options:f,deps:m}){const a=i.map((p,c)=>{const{resolved:s,refsStack:r}=n.deref(p,u,!0),t=n.mergeAllOf(s,l+"/oneOf/"+c,r),O=h(p.$ref)&&!t.title?A.baseName(p.$ref):`${t.title||""}${t.const&&JSON.stringify(t.const)||""}`;return F({parser:n,schemaOrRef:{...t,title:O,allOf:[{...P,oneOf:void 0,anyOf:void 0}],discriminator:s.allOf?void 0:t.discriminator},pointer:p.$ref||l+"/oneOf/"+c,options:f,baseRefsStack:r,deps:{...m,parentFieldFullPath:m.parentFieldFullPath?m.parentFieldFullPath+"&oneOf="+c:"&oneOf="+c.toString()}})}),y=[...new Set(a.map(p=>{let c=p.typePrefix+(p.title&&!f.hideSchemaTitles?`${p.title} (${p.displayType})`:p.displayType);return c.indexOf(" or ")>-1&&(c=`(${c})`),c}))].join(" or ");return{oneOf:a,displayType:y}}function _({schema:i,parser:n,pointer:u,options:l,refsStack:P,deps:f}){const{if:m,else:a={},then:y={},...p}=i;return{oneOf:[{allOf:[p,y,m],title:m&&m["x-displayName"]||m?.title||"case 1"},{allOf:[p,a],title:a&&a["x-displayName"]||a?.title||"case 2"}].map((t,O)=>F({parser:n,schemaOrRef:{...t},pointer:u+"/oneOf/"+O,options:l,baseRefsStack:P,deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&oneOf="+O:"&oneOf="+O.toString()}})),oneOfType:"One of"}}function R(i,n,u){return i||(console.warn(`Field "${n}" is invalid, skipping.
2
- Field must be an object but got ${typeof i} at "${u}"`),{})}function K(i,n,u,l,P,f){let m=n.properties||($(n,"array")?n.prefixItems||n.items:void 0)||{};const a=n.patternProperties||{},y=n.additionalProperties||n.unevaluatedProperties,p=n.prefixItems?n.items:n.additionalItems,c=n.default||{};let s=Object.keys(m).map(r=>{const t=R(m[r],r,u),O=n.required===void 0?!1:n.required.indexOf(r)>-1;return b(i,{name:n.properties?r:`[${r}]`,required:O,schema:{...t,example:n.example?.[r]||t.example,default:t.default===void 0&&c?c[r]:t.default}},u+"/properties/"+r,l,f,P,A.join(n.absolutePointer||"",["properties",r]))});return l.sortRequiredPropsFirst&&(s=J(s,n.required)),s.push(...Object.keys(a).map(r=>{const t=R(a[r],r,u);return b(i,{name:r,required:!1,schema:t,kind:"patternProperties"},`${u}/patternProperties/${r}`,l,f,P)})),(I(y)||y===!0)&&s.push(b(i,{name:(I(y)&&y["x-additionalPropertiesName"]||"property name").concat("*"),required:!1,schema:y===!0?{}:y,kind:"additionalProperties"},u+"/additionalProperties",l,f,P,A.join(n.absolutePointer||"",["additionalProperties"]))),s.push(...Y({parser:i,schema:p,fieldsCount:s.length,$ref:u,options:l,refsStack:P,deps:f})),L(s)}function Y({parser:i,schema:n=!1,fieldsCount:u,$ref:l,options:P,refsStack:f,deps:m}){return typeof n=="boolean"?n?[b(i,{name:`[${u}...]`,schema:{},kind:"additionalItems"},`${l}/additionalItems`,P,m,f)]:[]:Array.isArray(n)?[...n.map((a,y)=>b(i,{name:`[${u+y}]`,schema:a,kind:"additionalItems"},`${l}/additionalItems/${y}`,P,m,f))]:I(n)?[b(i,{name:`[${u}...]`,schema:n,kind:"additionalItems"},`${l}/additionalItems`,P,m,f)]:[]}function j(i){return i.discriminator||i["x-discriminator"]}function $(i,n){return i.type===n||Array.isArray(i.type)&&i.type.includes(n)}function v(i){return!!(Array.isArray(i.items)||Array.isArray(i.prefixItems))}export{F as getSchema};
1
+ import{REDOCLY_TEAMS_RBAC as h}from"@redocly/config";import{isObject as D}from"@redocly/theme/core/openapi";import{pushRef as w}from"../services/OpenAPIParser.js";import{detectType as C,extractExtensions as q,getValueFromMdParsedExtension as M,humanizeConstraints as B,isNamedDefinition as S,isPrimitiveType as z,JsonPointer as b,pluralizeType as L,sortByDeprecated as J,sortByRequired as V}from"../utils/index.js";import{getField as T}from"./field.js";function I({parser:r,schemaOrRef:n,pointer:m,options:l,isChild:x=!1,isDefaultMapping:p=!1,baseRefsStack:f=[],deps:a,absolutePointer:y}){const{resolved:d,refsStack:c}=r.deref(n,f,!0),u=n.$ref||m||y||"",o=w(c,u),t=r.mergeAllOf(d,u,o,n.$ref||y),s=t.type||C(t);let g,A=!1;const e={operationPointer:a.operation?.pointer||y||"",schemaOrRef:n,isChild:x,isDefaultMapping:p,typePrefix:"",pointer:u,absolutePointer:y,refsStack:o,rawSchema:d,type:s,isCircular:!!t["x-circular-ref"],isComplex:!!t["x-complex"],title:t.title||S(u)&&b.baseName(u)||"",description:M(t,"description")||"",format:t.format,enum:t.enum||[],example:t.example,deprecated:!!t.deprecated,pattern:t.pattern,externalDocs:t.externalDocs,displayFormat:t.format,isPrimitive:z(t,s),constraints:B(t),default:t.default,readOnly:!!t.readOnly,writeOnly:!!t.writeOnly,const:t.const||"",contentEncoding:t.contentEncoding,contentMediaType:t.contentMediaType,minItems:t.minItems,maxItems:t.maxItems,nullable:t.nullable||t["x-nullable"],schema:t,displayType:"",items:void 0,extensions:void 0,oneOfType:"",discriminatorProp:void 0,oneOf:void 0,[h]:t[h],"x-enumDescriptions":M(t,"x-enumDescriptions"),get fields(){return A||(A=!0,!e.isCircular&&!e.isComplex&&($(e,"object")||$(e,"array")&&R(t))&&(g=K(r,t,u,l,o,a))),g}};if((t.nullable||t["x-nullable"])&&(Array.isArray(e.type)&&!e.type.some(i=>i===null||i==="null")?e.type=[...e.type,"null"]:!Array.isArray(e.type)&&(e.type!==null||e.type!=="null")&&(e.type=[e.type,"null"])),e.displayType=Array.isArray(e.type)?e.type.map(i=>i===null?"null":i).join(" or "):e.type,e.isCircular)return e;if(t.if&&t.then||t.if&&t.else){const{oneOf:i,oneOfType:O}=H({schema:t,parser:r,pointer:u,options:l,deps:a,refsStack:o});return e.oneOf=i,e.oneOfType=O,e}if(!x&&v(t)!==void 0){const{oneOf:i,discriminatorProp:O}=_({schema:t,parser:r,deps:a,mergedSchema:t,options:l,pointer:u,refsStack:o});return e.oneOf=i,e.discriminatorProp=O,e}else x&&Array.isArray(t.oneOf)&&t.oneOf.find(i=>i.$ref===u)&&delete t.oneOf;if(t.oneOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.oneOf,parser:r,deps:a,options:l,pointer:u,refsStack:o,schema:t});return e.oneOfType="One of",i&&(e.oneOf=i),e.displayType=O,t.anyOf!==void 0&&console.warn(`oneOf and anyOf are not supported on the same level. Skipping anyOf at ${u}`),e}if(t.anyOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.anyOf,parser:r,deps:a,options:l,pointer:u,refsStack:o,schema:t});return i&&(e.oneOf=i),e.displayType=O,e.oneOfType="Any of",e}if($(e,"array")){t.items&&!R(t)&&(e.items=I({parser:r,schemaOrRef:t.items,pointer:u+"/items",options:l,baseRefsStack:o,deps:a,absolutePointer:b.join(t.absolutePointer||"",["items"])}));const i=!!(e.items?.isPrimitive&&(e.items.description||e.items.pattern||e.items.constraints.length||e.items.externalDocs||e.items.default!==void 0||e.items.const||e.items.deprecated||e.items.contentEncoding)),O=e.items&&$(e.items,"array")&&e.items.displayType==="any"?"array":e.items?.displayType;e.displayType=t.prefixItems||Array.isArray(t.items)||t.items===!1?"items":L(O||"any"),e.typePrefix=e.items?.typePrefix||"Array of ",i||(e.displayFormat=e.items?.format||"",e.title=e.title||e.items?.title||""),e.isPrimitive=i?!1:e.items?.isPrimitive!==void 0?e.items?.isPrimitive:e.isPrimitive,e.example===void 0&&e.items?.example!==void 0&&!i&&(e.example=[e.items.example]);const P=t.prefixItems||(Array.isArray(t.items)?t.items:[]);if(Array.isArray(e.example)&&e.example.length&&P.length&&e.example.length<=P.length&&(e.example=void 0),e.items?.isPrimitive&&!i&&(e.enum=e.items.enum,e["x-enumDescriptions"]=M(e.items,"x-enumDescriptions")),Array.isArray(e.type)){const F=e.type.filter(E=>E!=="array");F.length&&(e.displayType+=` or ${F.join(" or ")}`)}}return l.showExtensions&&(e.extensions=q(t,l.showExtensions)),e}function _({schema:r,parser:n,pointer:m,options:l,refsStack:x,deps:p,mergedSchema:f}){const a=v(r),y=a?.propertyName,d=n.findDerived([...f["x-parentRefs"]||[],m]);if(r.oneOf)for(const e of r.oneOf){if(e.$ref===void 0)continue;const i=b.baseName(e.$ref);d[e.$ref]=i}const c=a?.mapping||{},u=a?.["x-explicitMappingOnly"]??Object.keys(c).length>0,o={};for(const e in c){const i=c[e];Array.isArray(o[i])?o[i].push(e):o[i]=[e]}const t=u?{...o}:{...d,...o};let s=[];for(const e of Object.keys(t)){const i=t[e];if(Array.isArray(i))for(const O of i)s.push({$ref:e,name:O});else s.push({$ref:e,name:i})}if(a?.defaultMapping){const e=s.findIndex(O=>O.name===b.baseName(a.defaultMapping)),i="Default mapping";~e?s[e]={$ref:a.defaultMapping,name:i,isDefaultMapping:!0}:s.push({$ref:a.defaultMapping,name:i,isDefaultMapping:!0})}const g=Object.keys(c);return g.length!==0&&(s=s.sort((e,i)=>{if(e.isDefaultMapping&&!i.isDefaultMapping)return 1;if(!e.isDefaultMapping&&i.isDefaultMapping)return-1;const O=g.indexOf(e.name),P=g.indexOf(i.name);return O<0&&P<0?e.name.localeCompare(i.name):O<0?1:P<0?-1:O-P})),{oneOf:s.map(({$ref:e,name:i,isDefaultMapping:O},P)=>{const F=I({parser:n,schemaOrRef:{$ref:e},pointer:e,options:l,isChild:!0,isDefaultMapping:O,baseRefsStack:x.slice(0,-1),deps:{...p,parentFieldFullPath:p.parentFieldFullPath?p.parentFieldFullPath+"&d="+P:"&d="+P.toString()},absolutePointer:f.absolutePointer});return F.title=i,F}),discriminatorProp:y}}function k({schemaOneOf:r,parser:n,refsStack:m,pointer:l,schema:x,options:p,deps:f}){const a=r.map((d,c)=>{const{resolved:u,refsStack:o}=n.deref(d,m,!0),t=n.mergeAllOf(u,l+"/oneOf/"+c,o),s=S(d.$ref)&&!t.title?b.baseName(d.$ref):`${t.title||""}${t.const&&JSON.stringify(t.const)||""}`;return I({parser:n,schemaOrRef:{...t,title:s,allOf:[{...x,oneOf:void 0,anyOf:void 0}],discriminator:u.allOf?void 0:t.discriminator},pointer:d.$ref||l+"/oneOf/"+c,options:p,baseRefsStack:o,deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&oneOf="+c:"&oneOf="+c.toString()}})}),y=[...new Set(a.map(d=>{let c=d.typePrefix+(d.title&&!p.hideSchemaTitles?`${d.title} (${d.displayType})`:d.displayType);return c.indexOf(" or ")>-1&&(c=`(${c})`),c}))].join(" or ");return{oneOf:a,displayType:y}}function H({schema:r,parser:n,pointer:m,options:l,refsStack:x,deps:p}){const{if:f,else:a={},then:y={},...d}=r;return{oneOf:[{allOf:[d,y,f],title:f&&f["x-displayName"]||f?.title||"case 1"},{allOf:[d,a],title:a&&a["x-displayName"]||a?.title||"case 2"}].map((t,s)=>I({parser:n,schemaOrRef:{...t},pointer:m+"/oneOf/"+s,options:l,baseRefsStack:x,deps:{...p,parentFieldFullPath:p.parentFieldFullPath?p.parentFieldFullPath+"&oneOf="+s:"&oneOf="+s.toString()}})),oneOfType:"One of"}}function j(r,n,m){return r||(console.warn(`Field "${n}" is invalid, skipping.
2
+ Field must be an object but got ${typeof r} at "${m}"`),{})}function K(r,n,m,l,x,p){let f=n.properties||($(n,"array")?n.prefixItems||n.items:void 0)||{};const a=n.patternProperties||{},y=n.additionalProperties||n.unevaluatedProperties,d=n.prefixItems?n.items:n.additionalItems,c=n.default||{},u=!!n.properties||Array.isArray(n.example)&&n.example.length>0&&n.example.length<=Object.keys(f).length;let o=Object.keys(f).map(t=>{const s=j(f[t],t,m),g=n.required===void 0?!1:n.required.indexOf(t)>-1,A=u?n.example?.[t]:void 0,e=n.properties?s.example!==void 0?s.example:A:A!==void 0?A:s.example;return T(r,{name:n.properties?t:`[${t}]`,required:g,schema:{...s,example:e,default:s.default===void 0&&c?c[t]:s.default}},m+"/properties/"+t,l,p,x,b.join(n.absolutePointer||"",["properties",t]))});return l.sortRequiredPropsFirst&&(o=V(o,n.required)),o.push(...Object.keys(a).map(t=>{const s=j(a[t],t,m);return T(r,{name:t,required:!1,schema:s,kind:"patternProperties"},`${m}/patternProperties/${t}`,l,p,x)})),(D(y)||y===!0)&&o.push(T(r,{name:(D(y)&&y["x-additionalPropertiesName"]||"property name").concat("*"),required:!1,schema:y===!0?{}:y,kind:"additionalProperties"},m+"/additionalProperties",l,p,x,b.join(n.absolutePointer||"",["additionalProperties"]))),o.push(...Y({parser:r,schema:d,fieldsCount:o.length,$ref:m,options:l,refsStack:x,deps:p})),J(o)}function Y({parser:r,schema:n=!1,fieldsCount:m,$ref:l,options:x,refsStack:p,deps:f}){return typeof n=="boolean"?n?[T(r,{name:`[${m}...]`,schema:{},kind:"additionalItems"},`${l}/additionalItems`,x,f,p)]:[]:Array.isArray(n)?[...n.map((a,y)=>T(r,{name:`[${m+y}]`,schema:a,kind:"additionalItems"},`${l}/additionalItems/${y}`,x,f,p))]:D(n)?[T(r,{name:`[${m}...]`,schema:n,kind:"additionalItems"},`${l}/additionalItems`,x,f,p)]:[]}function v(r){return r.discriminator||r["x-discriminator"]}function $(r,n){return r.type===n||Array.isArray(r.type)&&r.type.includes(n)}function R(r){return!!(Array.isArray(r.items)||Array.isArray(r.prefixItems))}export{I as getSchema};
@@ -3,6 +3,6 @@ import type { OpenAPIParser } from '../services/index.js';
3
3
  import type { SecurityRequirement, SecurityScheme } from './types.js';
4
4
  export declare function getSecurity(requirements: OpenAPISecurityRequirement[] | undefined, parser: OpenAPIParser): SecurityRequirement[];
5
5
  export declare function getSecurityScheme(parser: Partial<OpenAPIParser>, id: string, scheme: Referenced<OpenAPISecurityScheme>): SecurityScheme;
6
- export declare function getSecuritySchemes({ parser }: {
6
+ export declare function getSecuritySchemes({ parser, }: {
7
7
  parser: Partial<OpenAPIParser>;
8
8
  }): Array<SecurityScheme>;
@@ -1 +1 @@
1
- import{IS_BROWSER as E,isObject as w,isString as B,isUndefined as i}from"@redocly/theme/core/openapi";import{tryDecodeURIComponent as W,getDefinitionName as I}from"../utils/index.js";import{JsonPointer as g}from"../utils/JsonPointer.js";import{normalizeOptions as z}from"./config-options/normalizeOptions.js";function R(O,e){return e&&O[O.length-1]!==e?[...O,e]:O}function $(O,e){return e?O.concat(e):O}class _{options;definitionUrl;definition;allowMergeRefs=!1;constructor(e,t,l=z({})){this.options=l,this.definition=Object.assign({},e),this.validate(e),this.definition=e,this.allowMergeRefs=e.openapi.startsWith("3.1");const s=E?window.location.href:"";B(t)&&(this.definitionUrl=new URL(t,s).href)}validate(e){if(i(e.openapi))throw new Error("Document must be valid OpenAPI 3.0.0 definition")}byRef=e=>{let t;if(this.definition){e.charAt(0)!=="#"&&(e="#"+e),e=W(e);try{t=g.get(this.definition,e)}catch{}return t||{}}};isRef(e){return e?(e=e,e.$ref!==void 0&&e.$ref!==null):!1}deref(e,t=[],l=!1,s=0){const n=e?.["x-refsStack"];if(t=$(t,n),s>5)return{resolved:Object.assign({},e,{"x-complex":!0}),refsStack:t};if(this.isRef(e)){const r=I(e.$ref);if(r&&this.options.ignoreNamedSchemas.has(r))return{resolved:{type:"object",title:r},refsStack:t};let f=this.byRef(e.$ref);if(!f)throw new Error(`Failed to resolve $ref "${e.$ref}"`);return t.includes(e.$ref)?f=Object.assign({},f,{"x-circular-ref":!0}):this.isRef(f)&&(f=this.deref(f,t,l,s).resolved),this.allowMergeRefs&&(f=this.mergeRefs(e,f,l)),{resolved:f,refsStack:R(t,e.$ref)}}return{resolved:e,refsStack:$(t,n)}}mergeRefs(e,t,l){const{$ref:s,...n}=e,r=Object.keys(n);if(r.length===0)return t;if(l&&r.some(f=>!["description","title","externalDocs","x-refsStack","x-parentRefs","readOnly","writeOnly","x-complex"].includes(f))){const{description:f,title:d,readOnly:h,writeOnly:o,...y}=n;return{allOf:[{description:f,title:d,readOnly:h,writeOnly:o},t,y]}}else return{...t,...n}}mergeAllOf(e,t,l,s="",n=0){if(e["x-circular-ref"])return e;if(e=this.hoistOneOfs(e),e.allOf===void 0)return{absolutePointer:s,...e};let r={...e,"x-parentRefs":[],absolutePointer:g.join(s,["allOf"]),allOf:void 0,title:n===0?e.title||I(t):e.title};!i(r.properties)&&w(r.properties)&&(r.properties={...r.properties}),!i(r.items)&&w(r.items)&&(r.items={...r.items});const f=e.allOf.map((d,h)=>{const{resolved:o,refsStack:y}=this.deref(d,l,!0,n),p=d.$ref,u=p||g.join(s,[String(h)]);if(o["x-complex"]){const c={"x-complex":!0};return i(o.readOnly)||(c.readOnly=o.readOnly),i(o.writeOnly)||(c.writeOnly=o.writeOnly),i(o.title)||(c.title=o.title),i(o.description)||(c.description=o.description),{$ref:p,refsStack:R(y,p),schema:c,absolutePointer:u}}const m=this.mergeAllOf(o,p,y,u,n+1);if(!(m["x-circular-ref"]&&m.allOf))return p&&r["x-parentRefs"]?.push(...m["x-parentRefs"]||[],p),{$ref:p,refsStack:R(y,p),schema:m,absolutePointer:u}}).filter(Boolean);for(const[d,{$ref:h,schema:o,refsStack:y,absolutePointer:p}]of f.entries()){const{type:u,enum:m,properties:c,items:D,required:k,title:S,description:C,readOnly:M,writeOnly:N,oneOf:P,anyOf:v,"x-circular-ref":A,"x-complex":b,...U}=o||{};if(!(r.type!==u&&!i(r.type)&&!i(u)&&!n)){if(i(u)||(Array.isArray(u)&&Array.isArray(r.type)?r.type=[...u,...r.type]:r.type=u),i(m)||(Array.isArray(m)&&Array.isArray(r.enum)?r.enum=Array.from(new Set([...m,...r.enum])):r.enum=m),!i(c)&&w(c)){r.properties=r.properties||{};for(const a in c){const x=$(y,c[a]?.["x-refsStack"]);if(!r.properties[a])r.properties[a]={...c[a],absolutePointer:g.join(p,["properties",a]),"x-refsStack":x};else if(!A){const q=this.mergeAllOf({allOf:[r.properties[a],c[a]],"x-refsStack":x},t+"/properties/"+a,x,g.join(p,["allOf",String(d),"properties",a]),n+1);r.properties[a]=q}}}if(!i(D)&&!A&&!b){const a=typeof r.items=="boolean"?{}:Object.assign({},r.items),x=typeof o.items=="boolean"?{}:Object.assign({},o.items);r.items=this.mergeAllOf({allOf:[a,x]},t+"/items",y,"",n+1)}i(P)||(r.oneOf=P),i(v)||(r.anyOf=v),Array.isArray(k)&&(r.required=[...r.required||[],...k]),r={...r,title:e.title||(h&&S?S:r.title||S),description:r.description||C,readOnly:i(r.readOnly)?M:r.readOnly,writeOnly:i(r.writeOnly)?N:r.writeOnly,"x-circular-ref":r["x-circular-ref"]||A,"x-complex":r["x-complex"]||b,...U}}}return r}findDerived(e){const t={},l=this.definition.components&&this.definition.components.schemas||{};for(const s in l){const{resolved:n}=this.deref(l[s]);!i(n.allOf)&&n.allOf.find(r=>!i(r.$ref)&&e.indexOf(r.$ref)>-1)&&(t["#/components/schemas/"+s]=[n["x-discriminator-value"]||s])}return t}hoistOneOfs(e){if(i(e.allOf))return e;const{allOf:t,...l}=e;for(let s=0;s<t.length;s++){const{oneOf:n,...r}=t[s];if(n&&Array.isArray(n)&&i(r.discriminator)&&i(r["x-discriminator"])){const f=t.slice(0,s),d=t.slice(s+1),h=Object.keys(r).length>0?[r]:[];return{...l,oneOf:n.map(o=>({allOf:[...f,...h,o,...d]}))}}}return e}}export{_ as OpenAPIParser,$ as concatRefStacks,R as pushRef};
1
+ import{IS_BROWSER as W,isObject as R,isString as z,isUndefined as i}from"@redocly/theme/core/openapi";import{tryDecodeURIComponent as F,getDefinitionName as I}from"../utils/index.js";import{JsonPointer as g}from"../utils/JsonPointer.js";import{normalizeOptions as J}from"./config-options/normalizeOptions.js";function $(y,r){return r&&y[y.length-1]!==r?[...y,r]:y}function k(y,r){return r?y.concat(r):y}class j{options;definitionUrl;definition;allowMergeRefs=!1;constructor(r,t,l=J({})){this.options=l,this.definition=Object.assign({},r),this.validate(r),this.definition=r,this.allowMergeRefs=r.openapi.startsWith("3.1");const o=W?window.location.href:"";z(t)&&(this.definitionUrl=new URL(t,o).href)}validate(r){if(i(r.openapi))throw new Error("Document must be valid OpenAPI 3.0.0 definition")}byRef=r=>{let t;if(this.definition){r.charAt(0)!=="#"&&(r="#"+r),r=F(r);try{t=g.get(this.definition,r)}catch{}return t||{}}};isRef(r){return r?(r=r,r.$ref!==void 0&&r.$ref!==null):!1}deref(r,t=[],l=!1,o=0){const n=r?.["x-refsStack"];if(t=k(t,n),o>5)return{resolved:Object.assign({},r,{"x-complex":!0}),refsStack:t};if(this.isRef(r)){const e=I(r.$ref);if(e&&this.options.ignoreNamedSchemas.has(e))return{resolved:{type:"object",title:e},refsStack:t};let s=this.byRef(r.$ref);if(!s)throw new Error(`Failed to resolve $ref "${r.$ref}"`);return t.includes(r.$ref)?s=Object.assign({},s,{"x-circular-ref":!0}):this.isRef(s)&&(s=this.deref(s,t,l,o).resolved),this.allowMergeRefs&&(s=this.mergeRefs(r,s,l)),{resolved:s,refsStack:$(t,r.$ref)}}return{resolved:r,refsStack:k(t,n)}}mergeRefs(r,t,l){const{$ref:o,...n}=r,e=Object.keys(n);if(e.length===0)return t;if(l&&e.some(s=>!["description","x-parsed-md-description","title","externalDocs","x-refsStack","x-parentRefs","readOnly","writeOnly","x-complex"].includes(s))){const{description:s,"x-parsed-md-description":d,title:u,readOnly:f,writeOnly:x,...c}=n;return{allOf:[{description:s,"x-parsed-md-description":d,title:u,readOnly:f,writeOnly:x},t,c]}}else{const s={...t,...n};for(const d of e){const u=`x-parsed-md-${d}`;!(u in n)&&u in s&&delete s[u]}return s}}mergeAllOf(r,t,l,o="",n=0){if(r["x-circular-ref"])return r;if(r=this.hoistOneOfs(r),r.allOf===void 0)return{absolutePointer:o,...r};let e={...r,"x-parentRefs":[],absolutePointer:g.join(o,["allOf"]),allOf:void 0,title:n===0?r.title||I(t):r.title};!i(e.properties)&&R(e.properties)&&(e.properties={...e.properties}),!i(e.items)&&R(e.items)&&(e.items={...e.items});const s=r.allOf.map((d,u)=>{const{resolved:f,refsStack:x}=this.deref(d,l,!0,n),c=d.$ref,m=c||g.join(o,[String(u)]);if(f["x-complex"]){const p={"x-complex":!0};return i(f.readOnly)||(p.readOnly=f.readOnly),i(f.writeOnly)||(p.writeOnly=f.writeOnly),i(f.title)||(p.title=f.title),i(f.description)||(p.description=f.description),{$ref:c,refsStack:$(x,c),schema:p,absolutePointer:m}}const O=this.mergeAllOf(f,c,x,m,n+1);if(!(O["x-circular-ref"]&&O.allOf))return c&&e["x-parentRefs"]?.push(...O["x-parentRefs"]||[],c),{$ref:c,refsStack:$(x,c),schema:O,absolutePointer:m}}).filter(Boolean);for(const[d,{$ref:u,schema:f,refsStack:x,absolutePointer:c}]of s.entries()){const{type:m,enum:O,properties:p,items:C,required:P,title:S,description:M,"x-parsed-md-description":N,readOnly:U,writeOnly:q,oneOf:D,anyOf:v,"x-circular-ref":A,"x-complex":b,...E}=f||{};if(e.type!==m&&!i(e.type)&&!i(m)&&!n)continue;if(i(m)||(Array.isArray(m)&&Array.isArray(e.type)?e.type=[...m,...e.type]:e.type=m),i(O)||(Array.isArray(O)&&Array.isArray(e.enum)?e.enum=Array.from(new Set([...O,...e.enum])):e.enum=O),!i(p)&&R(p)){e.properties=e.properties||{};for(const a in p){const h=k(x,p[a]?.["x-refsStack"]);if(!e.properties[a])e.properties[a]={...p[a],absolutePointer:g.join(c,["properties",a]),"x-refsStack":h};else if(!A){const B=this.mergeAllOf({allOf:[e.properties[a],p[a]],"x-refsStack":h},t+"/properties/"+a,h,g.join(c,["allOf",String(d),"properties",a]),n+1);e.properties[a]=B}}}if(!i(C)&&!A&&!b){const a=typeof e.items=="boolean"?{}:Object.assign({},e.items),h=typeof f.items=="boolean"?{}:Object.assign({},f.items);e.items=this.mergeAllOf({allOf:[a,h]},t+"/items",x,"",n+1)}i(D)||(e.oneOf=D),i(v)||(e.anyOf=v),Array.isArray(P)&&(e.required=[...e.required||[],...P]);const w=e.description?e["x-parsed-md-description"]:N;e["x-parsed-md-description"]!==w&&delete e["x-parsed-md-description"],e={...e,...i(w)?{}:{"x-parsed-md-description":w},title:r.title||(u&&S?S:e.title||S),description:e.description||M,readOnly:i(e.readOnly)?U:e.readOnly,writeOnly:i(e.writeOnly)?q:e.writeOnly,"x-circular-ref":e["x-circular-ref"]||A,"x-complex":e["x-complex"]||b,...E}}return e}findDerived(r){const t={},l=this.definition.components&&this.definition.components.schemas||{};for(const o in l){const{resolved:n}=this.deref(l[o]);!i(n.allOf)&&n.allOf.find(e=>!i(e.$ref)&&r.indexOf(e.$ref)>-1)&&(t["#/components/schemas/"+o]=[n["x-discriminator-value"]||o])}return t}hoistOneOfs(r){if(i(r.allOf))return r;const{allOf:t,...l}=r;for(let o=0;o<t.length;o++){const{oneOf:n,...e}=t[o];if(n&&Array.isArray(n)&&i(e.discriminator)&&i(e["x-discriminator"])){const s=t.slice(0,o),d=t.slice(o+1),u=Object.keys(e).length>0?[e]:[];return{...l,oneOf:n.map(f=>({allOf:[...s,...u,f,...d]}))}}}return r}}export{j as OpenAPIParser,k as concatRefStacks,$ as pushRef};
@@ -18,7 +18,7 @@ export type CustomHAR = HAR.Request & {
18
18
  };
19
19
  export declare function safeSample(schema: JSONSchema7, options: Sampler.Options, document: object): any;
20
20
  export declare function objectToHarParams(obj: GenericObject, parentKey?: string): HAR.Param[];
21
- export declare function getCodeSample({ lang, operation, exampleName, pathParams, properties, options, environment, translate }: {
21
+ export declare function getCodeSample({ lang, operation, exampleName, pathParams, properties, options, environment, translate, }: {
22
22
  lang: Languages;
23
23
  operation: OperationModel;
24
24
  exampleName?: string;
@@ -25,7 +25,7 @@ export declare class CodeBuilder {
25
25
  urlFieldName: string;
26
26
  rawName: boolean;
27
27
  };
28
- constructor({ indentation, lineJoin, variablesPrefix, capitalize, lang }: {
28
+ constructor({ indentation, lineJoin, variablesPrefix, capitalize, lang, }: {
29
29
  indentation: string;
30
30
  lineJoin?: string;
31
31
  variablesPrefix?: string;
@@ -1,6 +1,6 @@
1
1
  import type { SnippetRequest } from '../index.js';
2
2
  import type { CodeBuilder } from './code-builder.js';
3
- export declare function getPreserveTransformer({ body, authorizationHeader }: {
3
+ export declare function getPreserveTransformer({ body, authorizationHeader, }: {
4
4
  body?: boolean;
5
5
  authorizationHeader?: boolean;
6
6
  }): (input: GenericObject, prop: string, originalResult: string) => string;
@@ -1 +1 @@
1
- import{LayoutVariant as d}from"@redocly/config";import{isUndefined as m,addTrailingSlash as r}from"@redocly/theme/core/openapi";import{WindowReferenceOptions as n}from"../../constants.js";import{argValueToBoolean as o,argValueToExpandLevel as i,argValueToInt as p,argValueToNumber as c,getWindowReferenceOptions as a,normalizePath as h}from"../../utils/index.js";import{normalizeShowExtensions as f,normalizeScrollYOffset as u,normalizeCodeSamples as S}from"./helpers.js";function y(e,s){e={...s,...e,markdocOptions:{...e?.markdocOptions,components:{...s?.markdocOptions?.components,...e?.markdocOptions?.components},tags:{...s?.markdocOptions?.tags,...e?.markdocOptions?.tags},nodes:{...s?.markdocOptions?.nodes,...e?.markdocOptions?.nodes,heading:s?.markdocOptions?.nodes?.heading||e?.markdocOptions?.nodes.heading}}};const t=Array.isArray(e.ignoreNamedSchemas)?e.ignoreNamedSchemas:e.ignoreNamedSchemas?.split(",").map(l=>l.trim());return{downloadUrls:e.downloadUrls,schemaDefinitionsTagName:e.schemaDefinitionsTagName,corsProxyUrl:e.corsProxyUrl&&r(e.corsProxyUrl),hideSidebar:o(e.hideSidebar,!1),jsonSamplesExpandLevel:i(e.jsonSamplesExpandLevel,2),generatedSamplesMaxDepth:p(e.generatedSamplesMaxDepth,8),hideDownloadButtons:o(e.hideDownloadButtons,!1),hideInfoMetadata:o(e.hideInfoMetadata,!1),hideLoading:o(e.hideLoading,!1),hideSchemaTitles:o(e.hideSchemaTitles,!1),maxDisplayedEnumValues:c(e.maxDisplayedEnumValues),mockServer:e.mockServer?.url?{url:e.mockServer.url,position:e.mockServer.position||"first",description:e.mockServer.description||"Mock server"}:void 0,hideReplay:o(e.hideReplay,!1),oAuth2RedirectURI:e.oAuth2RedirectURI,onlyRequiredInSamples:o(e.onlyRequiredInSamples,!1),onDeepLinkClick:e.onDeepLinkClick||a(n.ON_DEEP_LINK_CLICK),routingBasePath:m(e.disableRouter)?"":e.routingBasePath&&h(e.routingBasePath)||"",schemasExpansionLevel:i(e.schemasExpansionLevel),feedback:e.feedback||{hide:!1},sortRequiredPropsFirst:o(e.sortRequiredPropsFirst,!1),scrollYOffset:u(e.scrollYOffset),showExtensions:f(e.showExtensions),sanitize:o(e.sanitize,!1),skipBundle:o(e.skipBundle,!1),ignoreNamedSchemas:new Set(t),markdocOptions:e?.markdocOptions,codeSamples:S(e.codeSamples),layout:e.layout||d.THREE_PANEL,events:e.events||{},unstable_hooks:e.unstable_hooks||a(n.HOOKS)||{},unstable_skipSamples:o(e.unstable_skipSamples,!1),unstable_externalCodeSamples:e.unstable_externalCodeSamples||[],hidePropertiesPrefix:o(e?.hidePropertiesPrefix,!1)}}export{y as normalizeOptions};
1
+ import{LayoutVariant as d}from"@redocly/config";import{isUndefined as m,addTrailingSlash as r}from"@redocly/theme/core/openapi";import{WindowReferenceOptions as n}from"../../constants.js";import{argValueToBoolean as o,argValueToExpandLevel as i,argValueToInt as p,argValueToNumber as c,getWindowReferenceOptions as a,normalizePath as h}from"../../utils/index.js";import{normalizeShowExtensions as f,normalizeScrollYOffset as u,normalizeCodeSamples as S}from"./helpers.js";function y(e,s){e={...s,...e,markdocOptions:{...e?.markdocOptions,components:{...s?.markdocOptions?.components,...e?.markdocOptions?.components},tags:{...s?.markdocOptions?.tags,...e?.markdocOptions?.tags},nodes:{...s?.markdocOptions?.nodes,...e?.markdocOptions?.nodes,heading:s?.markdocOptions?.nodes?.heading||e?.markdocOptions?.nodes.heading}}};const t=Array.isArray(e.ignoreNamedSchemas)?e.ignoreNamedSchemas:e.ignoreNamedSchemas?.split(",").map(l=>l.trim());return{downloadUrls:e.downloadUrls,schemaDefinitionsTagName:e.schemaDefinitionsTagName,corsProxyUrl:e.corsProxyUrl&&r(e.corsProxyUrl),hideSidebar:o(e.hideSidebar,!1),jsonSamplesExpandLevel:i(e.jsonSamplesExpandLevel,2),generatedSamplesMaxDepth:p(e.generatedSamplesMaxDepth,8),hideDownloadButtons:o(e.hideDownloadButtons,!1),hideInfoMetadata:o(e.hideInfoMetadata,!1),hideLoading:o(e.hideLoading,!1),hideSchemaTitles:o(e.hideSchemaTitles,!1),maxDisplayedEnumValues:c(e.maxDisplayedEnumValues),mockServer:e.mockServer?.url?{url:e.mockServer.url,position:e.mockServer.position||"first",description:e.mockServer.description||"Mock server"}:void 0,hideReplay:o(e.hideReplay,!1),oAuth2RedirectURI:e.oAuth2RedirectURI,onlyRequiredInSamples:o(e.onlyRequiredInSamples,!1),onDeepLinkClick:e.onDeepLinkClick||a(n.ON_DEEP_LINK_CLICK),routingBasePath:m(e?.disableRouter)?"":e.routingBasePath&&h(e.routingBasePath)||"",schemasExpansionLevel:i(e.schemasExpansionLevel),feedback:e.feedback||{hide:!1},sortRequiredPropsFirst:o(e.sortRequiredPropsFirst,!1),scrollYOffset:u(e.scrollYOffset),showExtensions:f(e.showExtensions),sanitize:o(e.sanitize,!1),skipBundle:o(e.skipBundle,!1),ignoreNamedSchemas:new Set(t),markdocOptions:e?.markdocOptions,codeSamples:S(e.codeSamples),layout:e.layout||d.THREE_PANEL,events:e.events||{},unstable_hooks:e.unstable_hooks||a(n.HOOKS)||{},unstable_skipSamples:o(e.unstable_skipSamples,!1),unstable_externalCodeSamples:e.unstable_externalCodeSamples||[],hidePropertiesPrefix:o(e?.hidePropertiesPrefix,!1)}}export{y as normalizeOptions};
package/lib/utils/dom.js CHANGED
@@ -1 +1 @@
1
- function c(e){return typeof document<"u"?document.querySelector(e):null}function h(e){return e.split(/<[^>]+>/).map(t=>t.trim()).filter(t=>t.length>0).join(" ")}typeof Element<"u"&&!Element.prototype.scrollIntoViewIfNeeded&&(Element.prototype.scrollIntoViewIfNeeded=function(e){e=arguments.length===0?!0:!!e;const t=this.parentNode,i=window.getComputedStyle(t,void 0),r=parseInt(i.getPropertyValue("border-top-width"),10),f=parseInt(i.getPropertyValue("border-left-width"),10),o=this.offsetTop-t.offsetTop<t.scrollTop,n=this.offsetTop-t.offsetTop+this.clientHeight-r>t.scrollTop+t.clientHeight,s=this.offsetLeft-t.offsetLeft<t.scrollLeft,l=this.offsetLeft-t.offsetLeft+this.clientWidth-f>t.scrollLeft+t.clientWidth,p=o&&!n;(o||n)&&e&&(t.scrollTop=this.offsetTop-t.offsetTop-t.clientHeight/2-r+this.clientHeight/2),(s||l)&&e&&(t.scrollLeft=this.offsetLeft-t.offsetLeft-t.clientWidth/2-f+this.clientWidth/2),(o||n||s||l)&&!e&&this.scrollIntoView(p)});const d=typeof window<"u"&&"HTMLElement"in window;export{d as IS_BROWSER,h as html2Str,c as querySelector};
1
+ function c(e){return typeof document<"u"?document.querySelector(e):null}function h(e){return e.split(/<[^>]+>/).map(t=>t.trim()).filter(t=>t.length>0).join(" ")}typeof Element<"u"&&!Element.prototype.scrollIntoViewIfNeeded&&(Element.prototype.scrollIntoViewIfNeeded=function(e){e=arguments.length===0?!0:!!e;const t=this.parentNode;if(!t)return;let o;try{o=window.getComputedStyle(t,void 0)}catch{o={getPropertyValue:()=>"0"}}const r=parseInt(o.getPropertyValue("border-top-width"),10),f=parseInt(o.getPropertyValue("border-left-width"),10),i=this.offsetTop-t.offsetTop<t.scrollTop,n=this.offsetTop-t.offsetTop+this.clientHeight-r>t.scrollTop+t.clientHeight,l=this.offsetLeft-t.offsetLeft<t.scrollLeft,s=this.offsetLeft-t.offsetLeft+this.clientWidth-f>t.scrollLeft+t.clientWidth,p=i&&!n;(i||n)&&e&&(t.scrollTop=this.offsetTop-t.offsetTop-t.clientHeight/2-r+this.clientHeight/2),(l||s)&&e&&(t.scrollLeft=this.offsetLeft-t.offsetLeft-t.clientWidth/2-f+this.clientWidth/2),(i||n||l||s)&&!e&&this.scrollIntoView(p)});const u=typeof window<"u"&&"HTMLElement"in window;export{u as IS_BROWSER,h as html2Str,c as querySelector};
@@ -1,4 +1,4 @@
1
- import type { Location } from 'react-router-dom';
1
+ import type { Location } from 'react-router';
2
2
  export declare function pathIncludesLink(location: Location, link?: string): boolean;
3
3
  export declare function pathMatchedLink(location: Location, link?: string): boolean;
4
4
  export declare function normalizePath(path: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.24.0-next.1",
3
+ "version": "3.24.0-next.10",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -15,23 +15,23 @@
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@redocly/theme": ">=0.68.0-next.0",
18
- "react": "^19.2.4",
19
- "react-dom": "^19.2.4",
18
+ "react": "^19.2.7",
19
+ "react-dom": "^19.2.7",
20
20
  "styled-components": "^4.1.1 || ^5.3.11 || ^6.0.0"
21
21
  },
22
22
  "dependencies": {
23
23
  "@babel/core": "7.29.7",
24
24
  "@markdoc/markdoc": "0.5.2",
25
- "@redocly/openapi-core": "2.39.0",
25
+ "@redocly/openapi-core": "2.45.0",
26
26
  "deepmerge": "^4.2.2",
27
- "dompurify": "3.4.11",
27
+ "dompurify": "3.4.12",
28
28
  "fast-deep-equal": "^3.1.3",
29
29
  "fast-xml-parser": "5.7.3",
30
30
  "jotai": "^2.12.5",
31
31
  "jotai-family": "1.0.1",
32
32
  "json-pointer": "^0.6.2",
33
33
  "openapi-sampler": "^1.7.2",
34
- "react-router-dom": "^6.30.3",
34
+ "react-router": "^8.3.0",
35
35
  "slugify": "^1.4.7",
36
36
  "stringify-object": "^3.3.0",
37
37
  "styled-components": "^6.4.2",
@@ -39,9 +39,9 @@
39
39
  "url-template": "^2.0.8",
40
40
  "util": "~0.12.5",
41
41
  "web-vitals": "3.3.1",
42
- "@redocly/config": "0.52.0",
42
+ "@redocly/config": "0.53.1",
43
43
  "@redocly/redoc-opentelemetry": "0.2.2",
44
- "@redocly/replay": "0.27.0-next.1"
44
+ "@redocly/replay": "0.27.0-next.9"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@shikijs/transformers": "3.21.0",
@@ -54,15 +54,15 @@
54
54
  "@types/react": "^19.2.7",
55
55
  "@types/react-dom": "^19.2.3",
56
56
  "@vitejs/plugin-react": "5.1.2",
57
- "@vitest/coverage-v8": "4.1.8",
57
+ "@vitest/coverage-v8": "4.1.10",
58
58
  "esbuild": "0.28.1",
59
59
  "jest-styled-components": "7.2.0",
60
- "js-yaml": "4.2.0",
60
+ "js-yaml": "4.3.0",
61
61
  "json-schema": "0.4.0",
62
62
  "outdent": "0.8.0",
63
63
  "path-browserify": "1.0.1",
64
- "react": "^19.2.4",
65
- "react-dom": "^19.2.4",
64
+ "react": "^19.2.7",
65
+ "react-dom": "^19.2.7",
66
66
  "rimraf": "5.0.7",
67
67
  "rollup-plugin-bundle-stats": "^4.22.1",
68
68
  "shiki": "3.21.0",
@@ -70,8 +70,8 @@
70
70
  "typescript": "6.0.3",
71
71
  "url": "~0.11.0",
72
72
  "vite": "7.3.6",
73
- "vitest": "4.1.8",
74
- "@redocly/theme": "0.68.0-next.0"
73
+ "vitest": "4.1.10",
74
+ "@redocly/theme": "0.68.0-next.7"
75
75
  },
76
76
  "scripts": {
77
77
  "start": "pnpm run copy-highlight-hook && vite",