@redocly/openapi-docs 3.19.0-next.1 → 3.19.0-next.2

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 (34) hide show
  1. package/dist/redocly-openapi-docs.min.js +2296 -2192
  2. package/lib/components/PayloadSamples/ExampleValue.js +1 -1
  3. package/lib/components/RequestParameters/RequestParameters.js +1 -1
  4. package/lib/components/TagItem/Breadcrumbs.d.ts +11 -0
  5. package/lib/components/TagItem/Breadcrumbs.js +41 -0
  6. package/lib/components/TagItem/OperationNavigationItems.d.ts +4 -2
  7. package/lib/components/TagItem/OperationNavigationItems.js +20 -5
  8. package/lib/components/TagItem/OperationsNavigation.js +27 -2
  9. package/lib/components/TagItem/TagItem.js +17 -16
  10. package/lib/components/common/Badges.js +10 -8
  11. package/lib/components/common/linkify.js +7 -2
  12. package/lib/components/common/panels.js +1 -1
  13. package/lib/constants.d.ts +1 -0
  14. package/lib/constants.js +1 -1
  15. package/lib/models/field.js +1 -1
  16. package/lib/models/group.js +1 -1
  17. package/lib/models/operation.js +1 -1
  18. package/lib/services/code-samples/generator.d.ts +1 -0
  19. package/lib/services/code-samples/generator.js +1 -1
  20. package/lib/services/menu/builder.js +1 -1
  21. package/lib/services/menu/operation.d.ts +2 -2
  22. package/lib/services/menu/operation.js +1 -1
  23. package/lib/services/menu/tags.d.ts +1 -0
  24. package/lib/services/menu/tags.js +3 -3
  25. package/lib/types/open-api.d.ts +11 -2
  26. package/lib/utils/calculateMaxLength.d.ts +6 -0
  27. package/lib/utils/calculateMaxLength.js +1 -0
  28. package/lib/utils/getBreadcrumbs.d.ts +7 -0
  29. package/lib/utils/getBreadcrumbs.js +1 -0
  30. package/lib/utils/index.d.ts +2 -0
  31. package/lib/utils/index.js +1 -1
  32. package/lib/utils/openapi.d.ts +1 -0
  33. package/lib/utils/openapi.js +1 -1
  34. package/package.json +5 -5
@@ -1 +1 @@
1
- import{jsx as i}from"react/jsx-runtime";import{useAtomValue as m}from"jotai";import{XMLBuilder as c}from"fast-xml-parser";import{JsonViewer as a}from"@redocly/theme/components/JsonViewer/JsonViewer";import{isFormUrlEncoded as d,isJsonLike as f,isXmlLike as p,langFromMime as x,urlFormEncodePayload as g,isSequentialMediaType as y}from"../../utils/index.js";import{globalOptionsAtom as j}from"../../jotai/store.js";import{StyledCodeBlock as k}from"./styled.js";const L=new c({format:!0});function F({value:o,mimeType:r,encoding:n,onCopyClick:e,onPanelToggle:s}){const{jsonSamplesExpandLevel:l}=m(j);if(f(r)&&!y(r)){let t;try{t=typeof o=="string"?JSON.parse(o):o}catch{t=o}return i(a,{data:t,expandLevel:l,onCopyClick:e,onPanelToggle:s})}if(typeof o=="object")if(d(r))o=g(o,n);else if(p(r)){const t=Array.isArray(o)?o:{root:o};o=L.build(t)}else o=JSON.stringify(o,null,2);return i(k,{lang:x(r),source:o,header:{className:"code-block-header",controls:{copy:{onClick:e}}}})}export{F as ExampleValue};
1
+ import{jsx as i}from"react/jsx-runtime";import{useAtomValue as l}from"jotai";import{XMLBuilder as m}from"fast-xml-parser";import{JsonViewer as c}from"@redocly/theme/components/JsonViewer/JsonViewer";import{isFormUrlEncoded as d,isJsonLike as f,isXmlLike as p,langFromMime as x,urlFormEncodePayload as g,isSequentialMediaType as y}from"../../utils/index.js";import{globalOptionsAtom as j}from"../../jotai/store.js";import{StyledCodeBlock as k}from"./styled.js";const L=new m({format:!0,cdataPropName:"#cdata"});function B({value:o,mimeType:r,encoding:n,onCopyClick:e,onPanelToggle:s}){const{jsonSamplesExpandLevel:a}=l(j);if(f(r)&&!y(r)){let t;try{t=typeof o=="string"?JSON.parse(o):o}catch{t=o}return i(c,{data:t,expandLevel:a,onCopyClick:e,onPanelToggle:s})}if(typeof o=="object")if(d(r))o=g(o,n);else if(p(r)){const t=Array.isArray(o)?o:{root:o};o=L.build(t)}else o=JSON.stringify(o,null,2);return i(k,{lang:x(r),source:o,header:{className:"code-block-header",controls:{copy:{onClick:e}}}})}export{B as ExampleValue};
@@ -1 +1 @@
1
- import{jsx as p,Fragment as A,jsxs as k}from"react/jsx-runtime";import{ParametersGroup as x}from"./ParametersGroup.js";import{Body as y}from"./Body.js";import{makeDeepLink as _}from"../../services/index.js";import{useTranslate as g}from"../../hooks/index.js";const o=["path","query","cookie","header"];function j({body:r,parameters:e=[],operationId:t,callbackId:s}){const i=g();if(!r&&!e.length)return null;const f={[o[0]]:i("openapi.path","Path"),[o[1]]:i("openapi.query","Query"),[o[2]]:i("openapi.cookie","Cookies"),[o[3]]:i("openapi.header","Headers")},d=(n=>{const u={};return n.forEach(m=>{L(u,m.in,m)}),u})(e),h=e.length>0?o:[],{content:a,description:P,required:q}=r||{};return k(A,{children:[h.map(n=>p(x,{title:f[n],parameters:d[n],deepLink:c(t,s,n)},n)),a&&p(y,{content:a,description:P,required:q,deepLink:c(t,s)})]})}function L(r,e="",t){r[e]||(r[e]=[]),r[e].push(t)}function c(r,e,t="body"){const s=`${e?`${e}/request/${t}`:`request/${t}`}`;return _(r,s)}export{j as RequestParameters};
1
+ import{jsx as h,Fragment as D}from"react/jsx-runtime";import{useMemo as C}from"react";import{useAtomValue as _}from"jotai";import{ParametersGroup as S}from"./ParametersGroup.js";import{Body as b}from"./Body.js";import{makeDeepLink as v}from"../../services/index.js";import{useTranslate as Q}from"../../hooks/index.js";import{globalStoreAtom as z}from"../../jotai/store.js";import{getMediaContent as F}from"../../models/mediaContent.js";import{getContentWithLegacyExamples as T}from"../../utils/openapi.js";const p=["path","query","querystring","cookie","header"];function Z({body:i,parameters:t=[],operationId:n,callbackId:u}){const c=Q(),{parser:a,options:q}=_(z),m=(e=>{const o={};return e.forEach(r=>{W(o,r.in,r)}),o})(t),P=m.querystring||[],d=P.filter(e=>e.serializationMime),f=P.filter(e=>!e.serializationMime),l=C(()=>!a||d.length===0?[]:d.map(e=>{const o=e.deps?.operation?.pointer;if(!o)return null;try{const r=a.byRef(o);if(!r?.parameters)return null;const s=r.parameters.find(x=>{const{resolved:M}=a.deref(x);return M.name===e.name&&M.in==="querystring"});if(!s)return null;const{resolved:E}=a.deref(s),L=T(E);return L?{content:F({parser:a,info:L,isRequestType:!0,options:q,data:{operation:e.deps?.operation||{pointer:o},type:"request",absolutePointer:e.absolutePointer||o}}),description:e.description,required:e.required,name:e.name}:null}catch{return null}}).filter(Boolean),[a,q,d]),R={[p[0]]:c("openapi.path","Path"),[p[1]]:c("openapi.query","Query"),[p[2]]:c("openapi.querystring","Query String"),[p[3]]:c("openapi.cookie","Cookies"),[p[4]]:c("openapi.header","Headers")},{content:y,description:k,required:A}=i||{},$=C(()=>{const e=[],o=f.length>0||l.length>0;return p.forEach(r=>{if(!(r==="query"&&o))if(r==="querystring")f.length>0&&e.push({type:"parameters",place:r,params:f});else{const s=m[r];s&&s.length>0&&e.push({type:"parameters",place:r,params:s})}}),l.forEach((r,s)=>{r&&e.push({type:"body",content:r.content,description:r.description,required:r.required,deepLink:g(n,u,`querystring-${r.name}`),key:`querystring-${r.name}-${s}`})}),y&&e.push({type:"body",content:y,description:k,required:A,deepLink:g(n,u),key:"body"}),e},[m,f,l,y,k,A,n,u]);return!i&&!t.length?null:h(D,{children:$.map(e=>e.type==="parameters"?h(S,{title:R[e.place],parameters:e.params,deepLink:g(n,u,e.place)},e.place):h(b,{content:e.content,description:e.description,required:e.required,deepLink:e.deepLink},e.key))})}function W(i,t="",n){i[t]||(i[t]=[]),i[t].push(n)}function g(i,t,n="body"){const u=`${t?`${t}/request/${n}`:`request/${n}`}`;return v(i,u)}export{Z as RequestParameters};
@@ -0,0 +1,11 @@
1
+ import type { ReactElement } from 'react';
2
+ type Breadcrumb = {
3
+ name: string;
4
+ href: string;
5
+ };
6
+ type BreadcrumbsProps = {
7
+ breadcrumbs: Breadcrumb[];
8
+ onClick: (href: string) => void;
9
+ };
10
+ export declare function Breadcrumbs({ breadcrumbs, onClick }: BreadcrumbsProps): ReactElement | null;
11
+ export {};
@@ -0,0 +1,41 @@
1
+ import{jsx as n,Fragment as p,jsxs as h}from"react/jsx-runtime";import w,{useRef as x,useState as L,useMemo as b,useCallback as B,useLayoutEffect as k}from"react";import{Dropdown as E}from"@redocly/theme/components/Dropdown/Dropdown";import{DropdownMenu as M}from"@redocly/theme/components/Dropdown/DropdownMenu";import{DropdownMenuItem as C}from"@redocly/theme/components/Dropdown/DropdownMenuItem";import{Tooltip as T}from"@redocly/theme/components/Tooltip/Tooltip";import{trimText as y}from"@redocly/theme/core/openapi";import{styled as s}from"../../styled-components.js";import{calculateMaxLength as D}from"../../utils/calculateMaxLength.js";const R=25,_=3,u=({breadcrumb:e,onClick:t,maxLength:r})=>{const o=e.name.length>r,i=y(e.name,r);return n(T,{tip:e.name,placement:"bottom",disabled:!o,children:n(v,{onClick:()=>t(e.href),children:i})})},z=({breadcrumbs:e,onClick:t,maxLength:r})=>{const o=e[0],i=e[e.length-1],d=e.slice(1,-1);return h(p,{children:[n(u,{breadcrumb:o,onClick:t,maxLength:r}),n(g,{children:"/"}),n(E,{trigger:n(O,{children:"..."}),closeOnClick:!0,alignment:"end",children:n(M,{children:d.map(a=>n(C,{onAction:()=>t(a.href),children:a.name},a.href))})}),n(g,{children:"/"}),n(u,{breadcrumb:i,onClick:t,maxLength:r})]})},F=({breadcrumbs:e,onClick:t,maxLength:r})=>n(p,{children:e.map((o,i)=>h(w.Fragment,{children:[n(u,{breadcrumb:o,onClick:t,maxLength:r}),i!==e.length-1&&n(g,{children:"/"})]},o.href))});function q({breadcrumbs:e,onClick:t}){const r=x(null),o=x(null),[i,d]=L(R),a=e.length>_,f=b(()=>a?[e[0],e[e.length-1]]:e,[e,a]),m=B(()=>{if(!r.current?.parentElement||!o.current)return;const c=r.current.parentElement.clientWidth,l=D(f,c,a,o.current);d(l)},[f,a]);return k(()=>{m();const c=new ResizeObserver(m),l=r.current?.parentElement;return l&&c.observe(l),()=>{c.disconnect()}},[m]),e.length?h(p,{children:[n(j,{ref:o,"aria-hidden":"true"}),n(A,{ref:r,"data-component-name":"TagItem/Breadcrumbs",children:a?n(z,{breadcrumbs:e,onClick:t,maxLength:i}):n(F,{breadcrumbs:e,onClick:t,maxLength:i})})]}):null}const j=s.span`
2
+ position: absolute;
3
+ visibility: hidden;
4
+ white-space: nowrap;
5
+ `,A=s.div`
6
+ position: absolute;
7
+ top: -26px;
8
+ display: flex;
9
+ align-items: center;
10
+ flex-wrap: nowrap;
11
+ gap: calc(var(--breadcrumbs-gap) / 2);
12
+ margin-bottom: var(--spacing-xxs);
13
+ max-width: 100%;
14
+ `,v=s.button`
15
+ background: none;
16
+ border: none;
17
+ margin: 0;
18
+ font-size: var(--font-size-sm);
19
+ color: var(--breadcrumbs-text-color);
20
+ border-radius: var(--border-radius);
21
+ cursor: pointer;
22
+ padding: 1px calc(var(--spacing-xxs) / 2);
23
+ line-height: var(--line-height-sm);
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ white-space: nowrap;
27
+ flex: 0 1 auto;
28
+ min-width: 0;
29
+
30
+ &:hover {
31
+ background-color: var(--breadcrumbs-background-color-hover);
32
+ }
33
+ `,g=s.span`
34
+ line-height: var(--line-height-sm);
35
+ padding: 0 calc(var(--spacing-xxs) / 2);
36
+ color: var(--breadcrumbs-text-color);
37
+ font-size: var(--font-size-sm);
38
+ `,O=s(v)`
39
+ text-align: center;
40
+ overflow: visible;
41
+ `;export{q as Breadcrumbs};
@@ -1,9 +1,11 @@
1
1
  import type { TFunction } from '@redocly/theme/core/openapi';
2
2
  import type { OperationsNavigationProps } from './types.js';
3
3
  type OperationNavigationItemsProps = OperationsNavigationProps & {
4
- title: string;
4
+ title?: string;
5
5
  onClick: (link: string) => void;
6
6
  translate: TFunction;
7
+ disableTooltip?: boolean;
7
8
  };
8
- export declare const OperationNavigationItems: import("react").NamedExoticComponent<OperationNavigationItemsProps>;
9
+ declare function OperationNavigationItemsComponent({ title, items, onClick, routingBasePath, translate, disableTooltip, }: OperationNavigationItemsProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare const OperationNavigationItems: import("react").MemoExoticComponent<typeof OperationNavigationItemsComponent>;
9
11
  export {};
@@ -1,10 +1,10 @@
1
- import{jsx as e,jsxs as s,Fragment as w}from"react/jsx-runtime";import{memo as j}from"react";import{getOperationColor as z}from"@redocly/theme/core/openapi";import{Tooltip as k}from"@redocly/theme/components/Tooltip/Tooltip";import{joinWithSeparator as C}from"../../services/index.js";import{encodeBackSlashes as O}from"../../utils/index.js";import{HttpVerb as B,NavigationBadge as p}from"../common/index.js";import{styled as o}from"../../styled-components.js";import{StyledButton as I}from"./styled.js";function N({title:l,items:c,onClick:d,routingBasePath:h,translate:m}){return s(w,{children:[e(S,{children:l}),c.map(t=>{const{id:g,href:f,deprecated:r,badges:v,isAdditionalOperation:b,name:a}=t,x=t.type==="operation"?t.path:a,i=t.type==="operation"?t.httpVerb:t.type,u=z({isAdditionalOperation:b,deprecated:r,httpVerb:i});return e(k,{tip:a,placement:"left",children:e(V,{variant:"outlined",size:"large",onClick:()=>d(C(h,O(f))),children:s("span",{children:[e(B,{color:u,children:i}),e(_,{children:x}),r&&e(p,{deprecated:!0,children:m("openapi.badges.deprecated","Deprecated")}),v?.map(({name:n,color:y})=>e(p,{color:y,children:n},n))]})})},g)})]})}const G=j(N),S=o.span`
1
+ import{jsx as r,jsxs as s,Fragment as x}from"react/jsx-runtime";import{memo as y}from"react";import{GenericIcon as w}from"@redocly/theme/icons/GenericIcon/GenericIcon";import{DirectionRightIcon as I}from"@redocly/theme/icons/DirectionRightIcon/DirectionRightIcon";import{getOperationColor as j}from"@redocly/theme/core/openapi";import{Tooltip as k}from"@redocly/theme/components/Tooltip/Tooltip";import{joinWithSeparator as z}from"../../services/index.js";import{encodeBackSlashes as O}from"../../utils/index.js";import{HttpVerb as V,NavigationBadge as d}from"../common/index.js";import{styled as o}from"../../styled-components.js";import{StyledButton as B}from"./styled.js";function C({verb:e,deprecated:t,isAdditionalOperation:n}){const i=j({httpVerb:e,deprecated:t,isAdditionalOperation:n});return r(V,{color:i,children:e})}function H(e){if(e.type==="tag")return r(F,{children:r(I,{size:"12px"})});const t=e.type==="operation"?e.httpVerb:e.type;return C({verb:t,deprecated:e.deprecated,isAdditionalOperation:e.isAdditionalOperation})}function N(e){return e.type==="operation"?e.path:e.name}function S({title:e,items:t,onClick:n,routingBasePath:i,translate:l,disableTooltip:h}){return s(x,{children:[e&&r(_,{children:e}),t.map(a=>{const{id:g,href:f,name:m,deprecated:v,badges:b}=a;return r(k,{tip:m,placement:"left",disabled:h,children:r(A,{variant:"outlined",size:"large",onClick:()=>n(z(i,O(f))),children:s("span",{children:[H(a),r(D,{children:N(a)}),v&&r(d,{deprecated:!0,children:l("openapi.badges.deprecated","Deprecated")}),b?.map(({name:p,color:u,icon:c})=>r(d,{color:u,icon:c&&r(w,{icon:c}),children:p},p))]})})},g)})]})}const Q=y(S),_=o.span`
2
2
  font-size: var(--font-size-base);
3
3
  line-height: var(--line-height-base);
4
4
  font-weight: var(--font-weight-bold);
5
5
  color: var(--text-color-primary);
6
6
  margin: var(--spacing-sm) 0 var(--spacing-xxs) 0;
7
- `,V=o(I)`
7
+ `,A=o(B)`
8
8
  border-radius: var(--border-radius);
9
9
  background: var(--bg-color);
10
10
  justify-content: space-between;
@@ -12,7 +12,7 @@ import{jsx as e,jsxs as s,Fragment as w}from"react/jsx-runtime";import{memo as j
12
12
 
13
13
  & > span {
14
14
  display: flex;
15
- align-items: baseline;
15
+ align-items: center;
16
16
  gap: var(--spacing-unit);
17
17
  overflow-x: hidden;
18
18
  }
@@ -25,7 +25,7 @@ import{jsx as e,jsxs as s,Fragment as w}from"react/jsx-runtime";import{memo as j
25
25
  content: '→';
26
26
  line-height: var(--line-height-base);
27
27
  }
28
- `,_=o.span`
28
+ `,D=o.span`
29
29
  font-family: var(--font-family-base);
30
30
  font-size: var(--font-size-base);
31
31
  line-height: var(--line-height-base);
@@ -34,4 +34,19 @@ import{jsx as e,jsxs as s,Fragment as w}from"react/jsx-runtime";import{memo as j
34
34
  white-space: nowrap;
35
35
  text-overflow: ellipsis;
36
36
  overflow-x: hidden;
37
- `;export{G as OperationNavigationItems};
37
+ `,F=o.div`
38
+ width: 20px;
39
+ height: 20px;
40
+ border-radius: 50%;
41
+ align-items: center;
42
+ justify-content: center;
43
+ display: flex;
44
+ flex-shrink: 0;
45
+ background-color: var(--layer-color-hover);
46
+ margin-right: var(--spacing-unit);
47
+
48
+ & > svg {
49
+ height: 12px;
50
+ width: 12px;
51
+ }
52
+ `;export{Q as OperationNavigationItems};
@@ -1,6 +1,31 @@
1
- import{jsx as i,jsxs as y}from"react/jsx-runtime";import{useMemo as N,memo as j,useState as E,useCallback as W}from"react";import{useNavigate as B}from"react-router-dom";import{LayoutVariant as _}from"@redocly/config";import{useAtomValue as V}from"jotai/index";import{SamplesPanel as z}from"../common/index.js";import{layoutAtom as D}from"../../jotai/app.js";import{OperationNavigationItems as p}from"./OperationNavigationItems.js";import{StyledButton as K}from"./styled.js";import{useTranslate as L}from"../../hooks/index.js";import{styled as X}from"../../styled-components.js";import{isRenderableMenuItem as q}from"../../utils/menu.js";const m=8;function F({items:c,routingBasePath:n}){const o=L(),[r,O]=E(!1),u=B(),P=V(D)===_.STACKED,{operations:h,webhooks:d,schemas:f,mcpTools:g,showMoreCount:k,totalCount:w,mcpResources:C,mcpPrompts:x}=N(()=>{const s=c.filter(e=>q(e)),b=r?s:s.slice(0,m),{operations:v,additionalOperations:S,webhooks:M,schemas:T,mcpTools:R,mcpResources:A,mcpPrompts:I}=b.reduce((e,t)=>{if(t.type==="operation"&&t.isWebhook)e.webhooks.push(t);else if(t.type==="operation"){const l=t;l.isAdditionalOperation?e.additionalOperations.push(l):e.operations.push(l)}else t.type==="schema"?e.schemas.push(t):t.type==="tool"?e.mcpTools.push(t):t.type==="rsrc"?e.mcpResources.push(t):t.type==="prompt"&&e.mcpPrompts.push(t);return e},{operations:[],additionalOperations:[],webhooks:[],schemas:[],mcpTools:[],mcpResources:[],mcpPrompts:[]});return{operations:[...v,...S],schemas:T,mcpTools:R,webhooks:M,mcpResources:A,mcpPrompts:I,showMoreCount:!r&&s.length>m?s.length-m:0,totalCount:s.length}},[r,c]),a=W(s=>u(s),[u]);return w?y(G,{isStacked:P,"data-testid":"operation-navigation-list",children:[f.length>0&&i(p,{items:f,onClick:a,routingBasePath:n,translate:o,title:o("openapi.schemas","Schemas")}),g.length>0&&i(p,{items:g,onClick:a,routingBasePath:n,translate:o,title:o("openapi.mcp.tools","MCP Tools")}),C.length>0&&i(p,{items:C,onClick:a,routingBasePath:n,translate:o,title:o("openapi.mcp.resources","MCP Resources")}),x.length>0&&i(p,{items:x,onClick:a,routingBasePath:n,translate:o,title:o("openapi.mcp.prompts","MCP Prompts")}),h.length>0&&i(p,{items:h,onClick:a,routingBasePath:n,translate:o,title:o("openapi.operations","Operations")}),d.length>0&&i(p,{items:d,onClick:a,routingBasePath:n,translate:o,title:o("openapi.webhooks","Webhooks")}),!r&&!!k&&y(K,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>O(!0),children:[o("openapi.actions.show","Show")," ",k," ",o("openapi.actions.more","more"),"..."]})]}):null}const io=j(F),G=X(z)`
1
+ import{jsx as s,jsxs as y}from"react/jsx-runtime";import{useMemo as E,memo as W,useState as _,useCallback as D}from"react";import{useNavigate as V}from"react-router-dom";import{LayoutVariant as z}from"@redocly/config";import{useAtomValue as K}from"jotai/index";import{SamplesPanel as L}from"../common/index.js";import{layoutAtom as X}from"../../jotai/app.js";import{OperationNavigationItems as i}from"./OperationNavigationItems.js";import{StyledButton as q}from"./styled.js";import{useTranslate as F}from"../../hooks/index.js";import{styled as x}from"../../styled-components.js";import{isRenderableMenuItem as G}from"../../utils/menu.js";const b=8;function H({items:c,routingBasePath:n}){const o=F(),[p,w]=_(!1),C=V(),O=K(X)===z.STACKED,{operations:m,webhooks:h,schemas:u,mcpTools:d,showMoreCount:v,totalCount:P,mcpResources:g,mcpPrompts:f,tags:l}=E(()=>{const a=c.filter(e=>G(e)),T=p?a:a.slice(0,b),{operations:M,additionalOperations:R,webhooks:A,schemas:B,mcpTools:I,mcpResources:N,mcpPrompts:j}=T.reduce((e,t)=>{if(t.type==="operation"&&t.isWebhook)e.webhooks.push(t);else if(t.type==="operation"){const k=t;k.isAdditionalOperation?e.additionalOperations.push(k):e.operations.push(k)}else t.type==="schema"?e.schemas.push(t):t.type==="tool"?e.mcpTools.push(t):t.type==="rsrc"?e.mcpResources.push(t):t.type==="prompt"&&e.mcpPrompts.push(t);return e},{operations:[],additionalOperations:[],webhooks:[],schemas:[],mcpTools:[],mcpResources:[],mcpPrompts:[]});return{operations:[...M,...R],schemas:B,mcpTools:I,webhooks:A,mcpResources:N,mcpPrompts:j,showMoreCount:!p&&a.length>b?a.length-b:0,totalCount:a.length,tags:c.filter(e=>e.type==="tag")}},[p,c]),r=D(a=>C(a),[C]),S=u.length>0||d.length>0||g.length>0||f.length>0||m.length>0||h.length>0;return!P&&l.length===0?null:y(J,{isStacked:O,"data-testid":"operation-navigation-list",children:[u.length>0&&s(i,{items:u,onClick:r,routingBasePath:n,translate:o,title:o("openapi.schemas","Schemas")}),d.length>0&&s(i,{items:d,onClick:r,routingBasePath:n,translate:o,title:o("openapi.mcp.tools","MCP Tools")}),g.length>0&&s(i,{items:g,onClick:r,routingBasePath:n,translate:o,title:o("openapi.mcp.resources","MCP Resources")}),f.length>0&&s(i,{items:f,onClick:r,routingBasePath:n,translate:o,title:o("openapi.mcp.prompts","MCP Prompts")}),m.length>0&&s(i,{items:m,onClick:r,routingBasePath:n,translate:o,title:o("openapi.operations","Operations")}),h.length>0&&s(i,{items:h,onClick:r,routingBasePath:n,translate:o,title:o("openapi.webhooks","Webhooks")}),!p&&!!v&&y(U,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>w(!0),children:[o("openapi.actions.show","Show")," ",v," ",o("openapi.actions.more","more"),"..."]}),l.length>0&&S&&s(Q,{}),l.length>0&&s(i,{items:l,onClick:r,routingBasePath:n,translate:o,disableTooltip:!0})]})}const co=W(H),J=x(L)`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--spacing-xxs);
5
5
  padding-top: var(--spacing-xxl);
6
- `;export{io as OperationsNavigation,F as OperationsNavigationComponent};
6
+ `,Q=x.div`
7
+ border-bottom: 1px solid var(--border-color-secondary);
8
+ margin: var(--spacing-xs) 0;
9
+ position: relative;
10
+
11
+ &::before,
12
+ &::after {
13
+ content: '';
14
+ position: absolute;
15
+ bottom: -3px;
16
+ width: 6px;
17
+ height: 6px;
18
+ background-color: var(--border-color-secondary);
19
+ border-radius: 50%;
20
+ }
21
+
22
+ &::before {
23
+ left: 0;
24
+ }
25
+
26
+ &::after {
27
+ right: 0;
28
+ }
29
+ `,U=x(q)`
30
+ margin-top: var(--spacing-xxs);
31
+ `;export{co as OperationsNavigation,H as OperationsNavigationComponent};
@@ -1,48 +1,49 @@
1
- import{jsx as t,jsxs as n}from"react/jsx-runtime";import{memo as x,useCallback as S}from"react";import{useNavigate as b}from"react-router-dom";import{useAtomValue as y}from"jotai";import{LayoutVariant as T}from"@redocly/config";import{Markdown as m}from"@redocly/theme/components/Markdown/Markdown";import{breakpoints as r}from"@redocly/theme/core/openapi";import{Button as W}from"@redocly/theme/components/Button/Button";import{PageActions as M}from"@redocly/theme/components/PageActions/PageActions";import{H2 as z}from"@redocly/theme/components/Typography/H2";import{LinkIcon as j}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{joinWithSeparator as C}from"../../services/history/helpers.js";import{Row as I,SamplesMiddlePanel as f,SamplesPanel as u,ShareLink as P}from"../common/index.js";import{Markdown as A}from"../Markdown/index.js";import{OperationsNavigation as L}from"./OperationsNavigation.js";import{layoutAtom as B}from"../../jotai/app.js";import{useTranslate as H}from"../../hooks/index.js";import{styled as e}from"../../styled-components.js";import{StyledShareLink as D}from"../common/linkify.js";function N({item:a,routingBasePath:i="",isExpanded:s}){const v=H(),{description:w,name:g,href:$}=a,c=b(),h=y(B),o=C(i,a.href),k=S(()=>{c(o)},[c,o]),d=!!a.items.length,l=h===T.STACKED,p=!d;return n(V,{expanded:s,children:[n(I,{layout:h,children:[n(_,{fullWidth:p,isStacked:l,children:[n(E,{fullWidth:p,isStacked:l,children:[n(K,{children:[t(P,{to:$,"aria-label":`link to ${g}`}),g]}),t(M,{pageSlug:o})]}),t(F,{fullWidth:p,isStacked:l,children:t(A,{source:w})})]}),d&&t(L,{items:a.items,routingBasePath:i})]}),d&&!s&&n(O,{type:"button",variant:"text",size:"medium",onClick:k,children:["+ ",v("openapi.actions.show","Show")]})]})}const ma=x(N),V=e.div`
1
+ import{jsx as n,jsxs as e}from"react/jsx-runtime";import{memo as W,useCallback as u}from"react";import{useNavigate as M}from"react-router-dom";import{useAtomValue as z}from"jotai";import{LayoutVariant as C}from"@redocly/config";import{Markdown as s}from"@redocly/theme/components/Markdown/Markdown";import{breakpoints as o}from"@redocly/theme/core/openapi";import{Button as I}from"@redocly/theme/components/Button/Button";import{PageActions as j}from"@redocly/theme/components/PageActions/PageActions";import{H2 as B}from"@redocly/theme/components/Typography/H2";import{LinkIcon as A}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{encodeBackSlashes as L,getBreadcrumbs as H}from"../../utils/index.js";import{joinWithSeparator as v}from"../../services/history/helpers.js";import{Row as P,SamplesMiddlePanel as w,SamplesPanel as $,ShareLink as D}from"../common/index.js";import{Markdown as N}from"../Markdown/index.js";import{OperationsNavigation as V}from"./OperationsNavigation.js";import{Breadcrumbs as _}from"./Breadcrumbs.js";import{layoutAtom as E}from"../../jotai/app.js";import{useTranslate as F}from"../../hooks/index.js";import{styled as r}from"../../styled-components.js";import{StyledShareLink as K}from"../common/linkify.js";function O({item:a,routingBasePath:i="",isExpanded:c}){const b=F(),{description:k,name:g,href:x}=a,t=M(),f=z(E),d=v(i,a.href),S=u(()=>{t(d)},[t,d]),l=!!a.items.length,m=f===C.STACKED,p=!l,h=H(a),y=u(T=>{t(v(i,L(T)))},[t,i]);return e(R,{expanded:c,children:[e(P,{layout:f,children:[e(q,{fullWidth:p,isStacked:m,children:[e(G,{fullWidth:p,isStacked:m,children:[h.length>0&&n(_,{breadcrumbs:h,onClick:y}),e(Q,{children:[n(D,{to:x,"aria-label":`link to ${g}`}),g]}),n(j,{pageSlug:d})]}),n(J,{fullWidth:p,isStacked:m,children:n(N,{source:k})})]}),l&&n(V,{items:a.items,routingBasePath:i})]}),l&&!c&&e(U,{type:"button",variant:"text",size:"medium",onClick:S,children:["+ ",b("openapi.actions.show","Show")]})]})}const wa=W(O),R=r.div`
2
2
  padding-top: var(--spacing-lg);
3
3
  padding-bottom: ${({expanded:a})=>a?"var(--spacing-xxl)":""};
4
- `,_=e(f)`
5
- @media screen and (min-width: ${r.large}) {
4
+ `,q=r(w)`
5
+ @media screen and (min-width: ${o.large}) {
6
6
  padding-left: ${({fullWidth:a,isStacked:i})=>a&&!i?"0":void 0};
7
7
  padding-right: ${({fullWidth:a,isStacked:i})=>a&&!i?"0":void 0};
8
8
  }
9
- `,E=e.div`
9
+ `,G=r.div`
10
10
  display: flex;
11
11
  align-items: flex-start;
12
12
  margin: var(--h2-margin-top) 0 var(--h2-margin-bottom);
13
+ position: relative;
13
14
 
14
- @media screen and (min-width: ${r.large}) {
15
+ @media screen and (min-width: ${o.large}) {
15
16
  padding-left: ${({fullWidth:a,isStacked:i})=>a&&!i?"calc(var(--panel-gap-horizontal) * 2)":void 0};
16
17
  padding-right: ${({fullWidth:a,isStacked:i})=>a&&!i?"var(--panel-gap-horizontal)":void 0};
17
18
  width: ${({fullWidth:a,isStacked:i})=>a&&!i?"calc(100% - var(--panel-samples-width))":void 0};
18
19
 
19
- ${D} {
20
+ ${K} {
20
21
  left: ${({fullWidth:a,isStacked:i})=>a&&!i?"unset":void 0};
21
22
  }
22
23
  }
23
- `,F=e.div`
24
+ `,J=r.div`
24
25
  /*
25
26
  Markdoc components inside markdown that use SamplesPanel should not have padding.
26
27
  E.g. SchemaDefinition, McpTool
27
28
  padding is added by the TagItem itself
28
29
  */
29
- ${m} ${u} {
30
+ ${s} ${$} {
30
31
  padding-left: 0;
31
32
  padding-right: 0;
32
33
  }
33
34
 
34
- @media screen and (min-width: ${r.large}) {
35
- ${m} ${f} {
35
+ @media screen and (min-width: ${o.large}) {
36
+ ${s} ${w} {
36
37
  padding-left: ${({fullWidth:a,isStacked:i})=>a&&!i?"calc(var(--panel-gap-horizontal) * 2)":void 0};
37
38
  padding-right: ${({fullWidth:a,isStacked:i})=>a&&!i?"var(--panel-gap-horizontal)":void 0};
38
39
  }
39
40
 
40
- ${m} .schema-definition ${u} {
41
+ ${s} .schema-definition ${$} {
41
42
  padding-left: ${({fullWidth:a,isStacked:i})=>a&&!i?"var(--panel-gap-horizontal)":void 0};
42
43
  padding-right: ${({fullWidth:a,isStacked:i})=>a&&!i?"calc(var(--panel-gap-horizontal) * 2)":void 0};
43
44
  }
44
45
  }
45
- `,K=e(z)`
46
+ `,Q=r(B)`
46
47
  position: relative;
47
48
  display: flex;
48
49
  align-items: center;
@@ -53,20 +54,20 @@ import{jsx as t,jsxs as n}from"react/jsx-runtime";import{memo as x,useCallback a
53
54
  margin: 0;
54
55
 
55
56
  :hover {
56
- ${j} {
57
+ ${A} {
57
58
  opacity: 1;
58
59
  visibility: visible;
59
60
  }
60
61
  }
61
- `,O=e(W)`
62
+ `,U=r(I)`
62
63
  margin: var(--spacing-md) var(--spacing-xl) var(--spacing-xxs);
63
64
  width: calc(100% - var(--spacing-xl) * 2);
64
65
 
65
- @media screen and (min-width: ${r.medium}) {
66
+ @media screen and (min-width: ${o.medium}) {
66
67
  --button-margin-md: calc(var(--spacing-xl) * 2);
67
68
 
68
69
  margin-left: var(--button-margin-md);
69
70
  margin-right: var(--button-margin-md);
70
71
  width: calc(100% - var(--button-margin-md) * 2);
71
72
  }
72
- `;export{ma as TagItem,N as TagItemComponent};
73
+ `;export{wa as TagItem,O as TagItemComponent};
@@ -1,18 +1,20 @@
1
- import{Fragment as i,jsx as t,jsxs as l}from"react/jsx-runtime";import{memo as m}from"react";import{css as f}from"styled-components";import{Badge as g}from"@redocly/theme/components/Badge/Badge";import{styled as d}from"../../styled-components.js";function p({badges:e,children:s}){if(!e)return t(i,{children:s});const n=e.filter(({position:r})=>r==="before"),c=e.filter(({position:r})=>r==="after");return l(i,{children:[n.map(({name:r,color:o})=>t(a,{color:o,children:r},r)),s,c.map(({name:r,color:o})=>t(a,{color:o,children:r},r))]})}const B=m(p),a=d(g)`
2
- margin-left: 0;
3
- background-color: ${({color:e})=>e||"var(--color-info-base)"};
4
- ${({deprecated:e})=>e&&f`
1
+ import{jsx as a,Fragment as n,jsxs as c}from"react/jsx-runtime";import{memo as p}from"react";import{css as l}from"styled-components";import{Tag as f}from"@redocly/theme/components/Tag/Tag";import{GenericIcon as g}from"@redocly/theme/icons/GenericIcon/GenericIcon";import{Tooltip as x}from"@redocly/theme/components/Tooltip/Tooltip";import{styled as s}from"../../styled-components.js";function d({name:r,color:e,description:o,icon:t}){return a(x,{tip:o,placement:"top",disabled:!o,children:a(m,{color:e,icon:t&&a(g,{icon:t}),children:r})},r)}function h({badges:r,children:e}){if(!r)return a(n,{children:e});const o=r.filter(({position:i})=>i==="before"),t=r.filter(({position:i})=>i==="after");return c(n,{children:[o.map(d),e,t.map(d)]})}const _=p(h),m=s(f)`
2
+ margin: 0;
3
+ ${({deprecated:r})=>r&&l`
5
4
  color: var(--badge-deprecated-text-color);
6
5
  background-color: var(--badge-deprecated-bg-color);
7
6
  border-radius: var(--badge-deprecated-border-radius);
8
7
  `};
9
- `,w=d(a)`
10
- margin-left: 0;
8
+
9
+ svg {
10
+ flex-shrink: 0;
11
+ }
12
+ `,k=s(m)`
13
+ margin: 0;
11
14
  font-size: var(--font-size-sm);
12
15
  line-height: var(--line-height-sm);
13
16
  padding: 0 var(--spacing-xxs);
14
- max-width: 80px;
15
17
  text-overflow: ellipsis;
16
18
  white-space: nowrap;
17
19
  overflow: hidden;
18
- `;export{B as CustomBadges,w as NavigationBadge,a as StyledBadge};
20
+ `;export{_ as CustomBadges,k as NavigationBadge,m as StyledBadge};
@@ -1,4 +1,4 @@
1
- import{jsx as n,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 r}from"../../services/history/helpers.js";function u(i){const{routingBasePath:a,onDeepLinkClick:e}=m(d),t=i.to,l=e&&{onClick:s=>{s.preventDefault(),e(r(a||"",t))}};return t?n(h,{"aria-label":i["aria-label"]||`link to ${t}`,id:f(i.id||""),className:i.className||"",to:t?.startsWith("#")?t:r(a||"",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-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)`
2
2
  position: absolute;
3
3
  top: 50%;
4
4
  left: 0;
@@ -17,4 +17,9 @@ import{jsx as n,jsxs as c}from"react/jsx-runtime";import{useAtomValue as m}from"
17
17
  visibility: visible;
18
18
  opacity: 1;
19
19
  }
20
- `;function N(i){return n(b,{...i,children:n(o,{size:"13px",color:"--heading-anchor-color"})})}export{u as Link,N as ShareLink,b as StyledShareLink};
20
+
21
+ h2 & {
22
+ top: 0;
23
+ transform: translate(-100%);
24
+ }
25
+ `;function N(i){return a(b,{...i,children:a(o,{size:"13px",color:"--heading-anchor-color"})})}export{u as Link,N as ShareLink,b as StyledShareLink};
@@ -71,7 +71,7 @@ import{css as i}from"styled-components";import{LayoutVariant as l}from"@redocly/
71
71
  width: 100%;
72
72
  display: block;
73
73
  content: '';
74
- border-bottom: 1px solid var(--border-color-primary);
74
+ border-bottom: 1px solid var(--border-color-secondary);
75
75
  }
76
76
  `}
77
77
  ${p} {
@@ -27,3 +27,4 @@ export declare const DISABLE_DEEP_LINK_IF_FIELDS_EXIST: string[];
27
27
  export declare const SEARCH_LIMIT = 100;
28
28
  export declare const HIGHLIGHTED_TEXT_MAX_LENGTH = 150;
29
29
  export declare const SEARCH_INDEX_FIELDS: string[];
30
+ export declare const MAX_NESTING_TAGS_LEVEL = 5;
package/lib/constants.js CHANGED
@@ -1 +1 @@
1
- var o;(function(t){t.ON_DEEP_LINK_CLICK="onDeepLinkClick",t.HOOKS="hooks"})(o||(o={}));var E;(function(t){t.OCTET_STREAM="application/octet-stream",t.MULTIPART="multipart/form-data",t.MULTIPART_MIXED="multipart/mixed",t.URL_ENCODED="application/x-www-form-urlencoded",t.JSON="application/json",t.XML="application/xml",t.JSONL="application/jsonl",t.NDJSON="application/x-ndjson",t.JSON_SEQ="application/json-seq",t.EVENT_STREAM="text/event-stream"})(E||(E={}));const n="data-section-id",r=0,a="other",p="webhooks",_={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"},D=["title"],L=100,c=150,e=["text","title","path","httpPath","parameters[]:name","parameters[]:description","parameters[]:place","parameters[]:path"];export{a as DEFAULT_TAG_SLUG,p as DEFAULT_WEBHOOKS_TAG_NAME,D as DISABLE_DEEP_LINK_IF_FIELDS_EXIST,r as GROUP_DEPTH,c as HIGHLIGHTED_TEXT_MAX_LENGTH,_ as LOADING_STATE,E as MediaTypes,e as SEARCH_INDEX_FIELDS,L as SEARCH_LIMIT,n as SECTION_ATTR,o as WindowReferenceOptions};
1
+ var o;(function(t){t.ON_DEEP_LINK_CLICK="onDeepLinkClick",t.HOOKS="hooks"})(o||(o={}));var E;(function(t){t.OCTET_STREAM="application/octet-stream",t.MULTIPART="multipart/form-data",t.MULTIPART_MIXED="multipart/mixed",t.URL_ENCODED="application/x-www-form-urlencoded",t.JSON="application/json",t.XML="application/xml",t.JSONL="application/jsonl",t.NDJSON="application/x-ndjson",t.JSON_SEQ="application/json-seq",t.EVENT_STREAM="text/event-stream"})(E||(E={}));const n="data-section-id",_=0,r="other",p="webhooks",a={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"},L=["title"],D=100,c=150,e=["text","title","path","httpPath","parameters[]:name","parameters[]:description","parameters[]:place","parameters[]:path"],A=5;export{r as DEFAULT_TAG_SLUG,p as DEFAULT_WEBHOOKS_TAG_NAME,L as DISABLE_DEEP_LINK_IF_FIELDS_EXIST,_ as GROUP_DEPTH,c as HIGHLIGHTED_TEXT_MAX_LENGTH,a as LOADING_STATE,A as MAX_NESTING_TAGS_LEVEL,E as MediaTypes,e as SEARCH_INDEX_FIELDS,D as SEARCH_LIMIT,n as SECTION_ATTR,o as WindowReferenceOptions};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as r}from"@redocly/config";import{joinWithSeparator as w}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as R}from"../utils/index.js";import{getSchema as T}from"./schema.js";import{getExamples as _}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}};function N(l,i,p,a,d,x,P=p){const{resolved:e}=l.deref(i),g=i.kind||"field",f=i.name||e.name,n=e.in,S=!!e.required;let c=e.schema,u,s="",m;if(!c&&e.in&&e.content){s=Object.keys(e.content)[0];const t=e.content[s];c=t&&t?.example?{...l.deref(t.schema,x,!0).resolved,example:e.example||t.example}:t.schema}const h=w(d.parentFieldFullPath,R(f||"")),o=T({parser:l,schemaOrRef:c||{},pointer:p,options:a,baseRefsStack:x,absolutePointer:i.$ref||e.schema?.absolutePointer||P,deps:{...d,parentFieldFullPath:h,in:n}}),A=e.description===void 0?E(o,"description")||"":E(e,"description"),b=e.example||o.example,y=e.examples||e.content?.[s]?.examples,k=y?L(y,(t,v)=>_({parser:l,infoOrRef:t,mime:v,encoding:e.encoding})):void 0;s?u=s:e.style?m=e.style:n&&(m=F[n]?.style??"form");const C=e.explode===void 0&&n?F[n]?.explode??!0:!!e.explode,M=e.deprecated===void 0?o.deprecated:e.deprecated,V=a.showExtensions?I(e,a.showExtensions):void 0,q=o?.const||e?.const||"";return{deps:d||{},schema:o,name:f,required:S,description:A,example:b,examples:k,deprecated:M,in:n,kind:g,extensions:V,explode:C,style:m,const:q,serializationMime:u,fieldFullPath:h,[r]:e[r]||o[r]}}export{N as getField};
1
+ import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as w}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as R}from"../utils/index.js";import{getSchema as T}from"./schema.js";import{getExamples as _}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 N(l,i,p,a,d,x,g=p){const{resolved:e}=l.deref(i),P=i.kind||"field",f=i.name||e.name,n=e.in,S=!!e.required;let r=e.schema,u,s="",c;if(!r&&e.in&&e.content){s=Object.keys(e.content)[0];const t=e.content[s];r=t&&t?.example?{...l.deref(t.schema,x,!0).resolved,example:e.example||t.example}:t.schema}const h=w(d.parentFieldFullPath,R(f||"")),o=T({parser:l,schemaOrRef:r||{},pointer:p,options:a,baseRefsStack:x,absolutePointer:i.$ref||e.schema?.absolutePointer||g,deps:{...d,parentFieldFullPath:h,in:n}}),A=e.description===void 0?E(o,"description")||"":E(e,"description"),b=e.example||o.example,y=e.examples||e.content?.[s]?.examples,k=y?L(y,(t,v)=>_({parser:l,infoOrRef:t,mime:v,encoding:e.encoding})):void 0;s?u=s:e.style?c=e.style:n&&(c=F[n]?.style??"form");const q=e.explode===void 0&&n?F[n]?.explode??!0:!!e.explode,C=e.deprecated===void 0?o.deprecated:e.deprecated,M=a.showExtensions?I(e,a.showExtensions):void 0,V=o?.const||e?.const||"";return{deps:d||{},schema:o,name:f,required:S,description:A,example:b,examples:k,deprecated:C,in:n,kind:P,extensions:M,explode:q,style:c,const:V,serializationMime:u,fieldFullPath:h,[m]:e[m]||o[m]}}export{N as getField};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as n}from"@redocly/config";import{joinWithSeparator as h}from"../services/index.js";import{getValueFromMdParsedExtension as r,safeSlugify as m}from"../utils/index.js";import{getHref as S}from"../services/menu/operation.js";import{saveTextBeforeHeading as v}from"../utils/saveTextBeforeHeading.js";function k(i,e,s){let o;s?.id&&(i==="schema"||i==="tool"||i==="rsrc"||i==="prompt")?o=h(s.id,m(e.name)):o=e.id||m(e.name);const d=e["x-displayName"]||e.name,c=e.level||1,t=e.isSchema,f=e.ast||void 0,l=v(r(e,"description")||""),a=e.items||[],x=e.externalDocs;return{id:o.toLowerCase(),type:i,parent:s,name:d,level:c,depth:0,isSchema:t,description:l,items:a,ast:f,externalDocs:x,href:S({id:o}),[n]:e[n]||s?.[n],keywords:i==="tag"?e["x-keywords"]:void 0}}export{k as getTagOrGroup};
1
+ import{REDOCLY_TEAMS_RBAC as o}from"@redocly/config";import{joinWithSeparator as d}from"../services/index.js";import{getValueFromMdParsedExtension as v,safeSlugify as n}from"../utils/index.js";import{getHref as w}from"../services/menu/operation.js";import{saveTextBeforeHeading as C}from"../utils/saveTextBeforeHeading.js";function B(i,e,s){let m;if(s?.id&&(i==="schema"||i==="tool"||i==="rsrc"||i==="prompt"))m=d(s.id,n(e.name));else if(s?.id&&s?.type==="tag"&&i==="tag"){const S=n(e.name);m=d(s.id,S)}else m=e.id||n(e.name);const c=e.summary||e["x-displayName"]||e.name,f=e.level||1,t=e.isSchema,l=e.ast||void 0,a=C(v(e,"description")||""),x=e.items||[],h=e.externalDocs;return{id:m.toLowerCase(),type:i,parent:s,name:c,level:f,depth:0,isSchema:t,description:a,items:x,ast:l,externalDocs:h,href:w({id:m}),[o]:e[o]||s?.[o],keywords:i==="tag"?e["x-keywords"]:void 0}}export{B as getTagOrGroup};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as o}from"@redocly/config";import{removeLeadingSlash as x}from"@redocly/theme/core/openapi";import{configure as q}from"@redocly/theme/ext/configure";import{extractExtensions as R,getOperationId as P,getOperationName as B,getStatusCodeType as E,getValueFromMdParsedExtension as C,isStatusCode as k,JsonPointer as O,mergeParams as V,normalizeServers as n,sortByDeprecated as I,sortByRequired as A,updateOperationWithRequestValues as N,updateParametersWithUserValues as W}from"../utils/index.js";import{getCallback as w}from"./callback.js";import{getField as F}from"./field.js";import{getRequestBody as M}from"./request.js";import{getSecurity as f}from"./security.js";import{getResponse as j}from"./response.js";import{getHref as L}from"../services/menu/operation.js";function $(s){return s.lang==="Payload"&&"requestBodyContent"in s}function i(s,e,t,a,m,d,h,p){const c=e.isWebhook,r={operationDefinition:e,parent:t,pointer:e.pointer,description:C(e,"description"),externalDocs:e.externalDocs,deprecated:!!e.deprecated,httpVerb:e.httpVerb,operationId:e.operationId,path:e.pathName,isWebhook:c,isAdditionalOperation:e.isAdditionalOperation,isCallback:!!d?.isCallback,isEvent:d?.isCallback||c,name:B(e),defaultExampleName:e.defaultSampleName,[o]:e[o]||t?.[o],type:"operation",callbackId:d?.id,href:m,get callbacks(){return Object.keys(e.callbacks||[]).map(u=>w(s,u,e.callbacks?.[u],r.pointer,a,m,t,h))},get responses(){let u=!1;return Object.keys(e.responses||[]).filter(l=>l==="default"?!0:(E(l)==="success"&&(u=!0),k(l))).map(l=>j({parser:s,code:l,defaultAsError:u,infoOrRef:e.responses[l],options:a,isEvent:r.isEvent,operation:r}))},get parameters(){return T(s,e,r,a,g)}};if(d?.isCallback)r.security=f(e.security,s),r.servers=n("",e.servers||e.pathServers||[]),r.id=x(m);else{r.id=P(e,t),r.href=r.href||L(r),r.security=f(e.security||s.definition.security,s);const u=e.servers||(e.pathServers?.length?e.pathServers:null)||s.definition.servers||[];r.servers=n(s.definitionUrl,U(u,a.mockServer))}a.showExtensions&&(r.extensions=R(e,a.showExtensions)),r.requestBody=e.requestBody?M({parser:s,infoOrRef:e.requestBody,options:a,operation:r,isEvent:r.isEvent}):void 0;const y=r.requestBody?.content;r.payload={lang:"Payload",source:"",requestBodyContent:y?.hasSample?y:void 0},r.definitionSamples=e["x-codeSamples"]||[],r.badges=e["x-badges"]?.map(({name:u,color:l,position:v})=>({name:u,color:l||"var(--color-info-base)",position:v||"after"}))||[],r.hasSamples=y?.hasSample||r.definitionSamples.length>0,r.hideReplay=e["x-hideReplay"]===!0;const S={userClaims:h,info:s.definition.info||{},operation:{operationId:r.operationId,name:r.name,path:r.path,href:r.href,method:r.httpVerb},servers:r.servers},b=q(S)||{},g=p||b.requestValues||{};return N(r,g),r}function T(s,e,t,a,m){let d=V(s,e.pathParameters,e.parameters,{pathPointer:O.dirName(t.pointer),operationPointer:t.pointer}).map(({paramOrRef:h,pointer:p})=>{const c=F(s,h,p,a,{operation:t,type:"request"});return W(c,m),c});return a.sortRequiredPropsFirst&&(d=A(d)),I(d)}function U(s,e){if(!e)return s;const t={url:e.url,description:e.description};switch(e.position){case"first":return[t,...s];case"last":return[...s,t];case"replace":return[t];default:return s}}export{i as getOperation,$ as isPayloadSample,U as mergeInMockServer};
1
+ import{REDOCLY_TEAMS_RBAC as h}from"@redocly/config";import{removeLeadingSlash as R}from"@redocly/theme/core/openapi";import{configure as k}from"@redocly/theme/ext/configure";import{extractExtensions as B,getOperationId as P,getOperationName as E,getStatusCodeType as C,getValueFromMdParsedExtension as O,isStatusCode as V,JsonPointer as I,mergeParams as T,normalizeServers as b,sortByDeprecated as i,sortByRequired as A,updateOperationWithRequestValues as N,updateParametersWithUserValues as W}from"../utils/index.js";import{getCallback as w}from"./callback.js";import{getField as F}from"./field.js";import{getRequestBody as M}from"./request.js";import{getSecurity as S}from"./security.js";import{getResponse as j}from"./response.js";import{getHref as L}from"../services/menu/operation.js";function ee(r){return r.lang==="Payload"&&"requestBodyContent"in r}function se(r,e,d,u,l,c,n,g){const m=e.isWebhook,s={operationDefinition:e,parent:d,pointer:e.pointer,description:O(e,"description"),externalDocs:e.externalDocs,deprecated:!!e.deprecated,httpVerb:e.httpVerb,operationId:e.operationId,path:e.pathName,isWebhook:m,isAdditionalOperation:e.isAdditionalOperation,isCallback:!!c?.isCallback,isEvent:c?.isCallback||m,name:E(e),defaultExampleName:e.defaultSampleName,[h]:e[h]||d?.[h],type:"operation",callbackId:c?.id,href:l,get callbacks(){return Object.keys(e.callbacks||[]).map(a=>w(r,a,e.callbacks?.[a],s.pointer,u,l,d,n))},get responses(){let a=!1;return Object.keys(e.responses||[]).filter(t=>t==="default"?!0:(C(t)==="success"&&(a=!0),V(t))).map(t=>j({parser:r,code:t,defaultAsError:a,infoOrRef:e.responses[t],options:u,isEvent:s.isEvent,operation:s}))},get parameters(){return U(r,e,s,u,f)}};if(c?.isCallback)s.security=S(e.security,r),s.servers=b("",e.servers||e.pathServers||[]),s.id=R(l);else{s.id=P(e,d),s.href=s.href||L(s),s.security=S(e.security||r.definition.security,r);const a=e.servers||(e.pathServers?.length?e.pathServers:null)||r.definition.servers||[];s.servers=b(r.definitionUrl,_(a,u.mockServer))}u.showExtensions&&(s.extensions=B(e,u.showExtensions)),s.requestBody=e.requestBody?M({parser:r,infoOrRef:e.requestBody,options:u,operation:s,isEvent:s.isEvent}):void 0;const o=s.requestBody?.content;s.payload={lang:"Payload",source:"",requestBodyContent:o?.hasSample?o:void 0},s.definitionSamples=e["x-codeSamples"]||[];const x=(r.definition.tags||[]).filter(a=>a.kind==="badge"||a.kind==="audience"),y=e["x-badges"]?.map(({name:a,color:t,position:p})=>({name:a,color:t||"blue",position:p||"after"}))??[];if(e.tags)for(const a of e.tags){const t=x.find(p=>p.name===a);t&&y.push({name:t.summary??t.name,color:t.kind==="audience"?"grey":"blue",icon:t.kind==="audience"?"user-group":void 0,position:"after",description:t.description})}s.badges=y,s.hasSamples=o?.hasSample||s.definitionSamples.length>0,s.hideReplay=e["x-hideReplay"]===!0;const q={userClaims:n,info:r.definition.info||{},operation:{operationId:s.operationId,name:s.name,path:s.path,href:s.href,method:s.httpVerb},servers:s.servers},v=k(q)||{},f=g||v.requestValues||{};return N(s,f),s}function U(r,e,d,u,l){let c=T(r,e.pathParameters,e.parameters,{pathPointer:I.dirName(d.pointer),operationPointer:d.pointer}).map(({paramOrRef:n,pointer:g})=>{const m=F(r,n,g,u,{operation:d,type:"request"});return W(m,l),m});return u.sortRequiredPropsFirst&&(c=A(c)),i(c)}function _(r,e){if(!e)return r;const d={url:e.url,description:e.description};switch(e.position){case"first":return[d,...r];case"last":return[...r,d];case"replace":return[d];default:return r}}export{se as getOperation,ee as isPayloadSample,_ as mergeInMockServer};
@@ -34,6 +34,7 @@ type OAuth2ExtraCall = HAR.Request & {
34
34
  clientId?: string;
35
35
  };
36
36
  export declare function getDataRequest(exampleValue: any, properties: any): boolean | any;
37
+ export declare function objectToHarParams(obj: GenericObject, parentKey?: string): HAR.Param[];
37
38
  export declare function isDefined<T>(arg?: T): arg is T;
38
39
  export declare function capitalizeFirst(str: string): string;
39
40
  export {};
@@ -1 +1 @@
1
- import*as ne from"openapi-sampler";import L from"deepmerge";import{isObject as oe}from"@redocly/theme/core/openapi";import{areArraysEqual as ce,serializeParameterValue as I,getSecurityDetails as ie,getParameterValue as $,queryString as P,isArrayOfObjects as ue,deleteEmptyArrayItem as le}from"../../utils/index.js";import{normalizeMimeType as pe,arrayMergeStrategy as M}from"../utils.js";import{MediaTypes as m}from"../../constants.js";import{HTTPSnippet as me}from"./httpsnippet/index.js";import{getActiveMediaType as de}from"../../models/mediaContent.js";import J from"./httpsnippet/helpers/string-utility.js";function C(t,a,o){try{return ne.sample(t,a,o)}catch(n){return console.error(`Error sampling schema: ${n.message}`),null}}function fe(t,a){return t.find(o=>{const n=o.schemes.map(s=>s.id);return ce(n,a||[])})}function ye(t,{exampleName:a="",skipOptionalParameters:o=!1,withOAuth2Call:n=!1,spec:s,generatedPayloadSamplesMaxDepth:r=8,pathParams:i={},properties:u={},activeMimeName:c=""},{environment:y,requestValues:k,activeSecuritySchemeIds:T}){const l=y.server,b=t.servers.find(e=>e.url===l)||t.servers[0],w=fe(t.security,T),{securityHeaders:R,securityCookies:B,securityQueries:F,securityOAuth2ExtraCalls:X,basicAuth:K}=he(w||t.security?.[0],n,y),p=t?.requestBody?.content&&de(t.requestBody.content,c),g={skipNonRequired:o,skipReadOnly:!0,maxSampleDepth:r,quiet:!0},S=k;let H=!1;const N=t.parameters.filter(e=>e.in==="header").filter(e=>!(o&&!e.required)).map(e=>({name:e.name,value:S.header?.[e.name]||$("header",e.name)||e.serverValues?.[l]?.example||e.example||I(e,C(e.schema.rawSchema,g,s))})).map(e=>(p?.name&&e.name.toLowerCase()==="content-type"&&(H=!0,e.value=p.name),e)).concat(R);!H&&p?.name&&N.unshift({name:"Content-Type",value:p?.name});const Q=t.parameters.filter(e=>e.in==="cookie").filter(e=>!(o&&!e.required)).map(e=>P.parse(I(e,e.serverValues?.[l]?.example||e.example||C(e.schema.rawSchema,g,s)))).reduce((e,f)=>{for(const[h,_]of Object.entries(f))e.push({name:h,value:String(S.cookie?.[h]||_)});return e},[]).concat(B),G=t.parameters.filter(e=>e.in==="query").filter(e=>!(o&&!e.required)).map(e=>P.parse(I(e,e.serverValues?.[l]?.example||e.example||C(e.schema.rawSchema,g,s)))).reduce((e,f)=>{for(const[h,_]of Object.entries(f))e.push({name:h,value:ue(S.query?.[h])&&JSON.stringify(le(S.query?.[h]))||String(S.query?.[h]||_)});return e},[]).concat(F),W=b?.url.replace(/\/$/,""),Z=t.path.replace(/^\//,""),ee=`${W}/${Z}`,te=t.parameters.filter(e=>e.in==="path").reduce((e,f)=>{const{in:h,name:_}=f;return e[_]=S.path?.[_]||f.serverValues?.[l]?.example||f.example||i[_]||$(h,_),e},{}),q=p?.name.toLowerCase(),E=p?.examples?.[a]||p?.formExamples?.[a],re={...p?.formExamples||{},...p?.examples||{}},[x]=Object.values(re),U=E?.serverValues?.[l]?.value||x?.serverValues?.[l]?.value,D=e=>!e||typeof e!="object"||!p?.schema?.rawSchema?null:C(Oe(p.schema.rawSchema,e),{...g,format:"xml"},s),v=(()=>{if(S?.body)return S.body;if(q===m.XML){const e=U||E?.value||x?.value;if(typeof e=="string")return e;const f=D(U)||D(E?.value)||D(x?.value);if(f)return f;if(p?.schema)return C(p.schema.rawSchema,{...g,format:"xml"},s)}else{const e=p?.schema&&C(p.schema.rawSchema,{...g,format:"json"},s);return U||E?.value||x?.value||e}return""})();let O="",z=[];switch(pe(q)){case m.JSON:O=JSON.stringify(j(v,u));break;case m.XML:O=v;break;case m.MULTIPART:case m.URL_ENCODED:typeof v=="string"?O=v:(O=P.stringify(j(v,u)),z=Y(j(v,u)));break;default:O=String(v||"")}const ae=O?{mimeType:p?.name||m.OCTET_STREAM,text:O,params:z}:void 0,se=t.responses.map(e=>e.code);return{method:t.httpVerb,url:ee,httpVersion:"HTTP/1.1",cookies:Q,headers:N,queryString:G,postData:ae,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:X,basicAuth:K,pathParameters:te,serverVariables:y,allResponseCodes:se}}const d={withImports:!0,withComments:!1},A={curl:{code:"shell",defaultTarget:"curl",defaultOptions:{...d,short:!0}},JavaScript:{code:"javascript",defaultTarget:"fetch",defaultOptions:{...d,withImports:!1}},"Node.js":{code:"node",defaultTarget:"fetch",defaultOptions:{...d}},Python:{code:"python",defaultTarget:"requests",defaultOptions:{...d}},"Java8+Apache":{code:"java8",defaultTarget:"apachehttp",defaultOptions:{...d}},Java:{code:"java",defaultTarget:"httpclient",defaultOptions:{...d}},"C#":{code:"csharp",defaultTarget:"httpclient",defaultOptions:{...d}},"C#+Newtonsoft":{code:"csharpNewtonsoft",defaultTarget:"httpclient",defaultOptions:{...d}},Go:{code:"go",defaultTarget:"http.DefaultClient",defaultOptions:{...d}},PHP:{code:"php",defaultTarget:"curl",defaultOptions:{...d}},Ruby:{code:"ruby",defaultTarget:"net::http",defaultOptions:{...d}},R:{code:"r",defaultTarget:"httr",defaultOptions:{...d}}};function Ue({lang:t,operation:a,exampleName:o,pathParams:n,properties:s,options:r={},environment:i,translate:u}){try{const{skipOptionalParameters:c,withOAuth2Call:y,spec:k,generatedPayloadSamplesMaxDepth:T,store:l,activeMimeName:b}=r,w=ye(a,{exampleName:o,pathParams:n,properties:s,skipOptionalParameters:c,withOAuth2Call:y,spec:k,generatedPayloadSamplesMaxDepth:T,activeMimeName:b},{environment:i,requestValues:l.requestValues,activeSecuritySchemeIds:l.activeSecuritySchemeIds}),R=new me(w);return A[t]?R.convert(A[t].code,A[t].defaultTarget,{...A[t].defaultOptions,...r}):u("openapi.unsupportedLanguage","Language is not supported.")}catch(c){return console.error(c),u("openapi.failedToGenerateCodeSample","Failed to generate code sample.")}}function he(t,a,o){const n={securityHeaders:[],securityCookies:[],securityQueries:[],securityOAuth2ExtraCalls:[],basicAuth:void 0},s=o?.server;for(const r of t?.schemes||[]){const i=ie(r.id,o),u=s&&r.serverValues&&r.serverValues[s],c={access_token:u?.["x-defaultAccessToken"]||r["x-defaultAccessToken"],token_type:u?.["x-defaultTokenType"]||r["x-defaultTokenType"],client_id:u?.["x-defaultClientId"]||r["x-defaultClientId"],client_secret:u?.["x-defaultClientSecret"]||r["x-defaultClientSecret"]},y=u?.["x-defaultUsername"]||r["x-defaultUsername"],k=u?.["x-defaultPassword"]||r["x-defaultPassword"],T=u&&"scopes"in u?u.scopes||[]:r.scopes||[];switch(r.type){case"openIdConnect":n.securityHeaders?.push({name:"Authorization",value:c.access_token?`${c.token_type||"Bearer"} ${c.access_token}`:i.token?`${c.token_type||i.token.token_type||"Bearer"} ${i.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const l=c.access_token?`${c.token_type||"Bearer"} ${c.access_token}`:i.token?`${i.token.token_type||"Bearer"} ${i.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";r.flows.deviceAuthorization&&a?n.securityOAuth2ExtraCalls.push(Se(r.flows.deviceAuthorization,T)):r.flows.clientCredentials&&a?n.securityOAuth2ExtraCalls.push(Te(r.flows.clientCredentials,T,{...i,client_id:c.client_id||i.client_id,client_secret:c.client_secret||i.client_secret})):r.flows.password&&a&&n.securityOAuth2ExtraCalls.push(_e(r.flows.password,T,{...i,client_id:c.client_id||i.client_id,client_secret:c.client_secret||i.client_secret})),n.securityHeaders?.push({name:"Authorization",value:l});break}case"apiKey":{const l=c.access_token||i.raw||"YOUR_API_KEY_HERE";r.in==="header"&&n.securityHeaders?.push({name:r.name,value:l}),r.in==="cookie"&&n.securityCookies.push({name:r.name,value:l}),r.in==="query"&&n.securityQueries.push({name:r.name,value:l});break}case"http":if(r.scheme==="basic")n.basicAuth={username:y||i.username||`<${J.toSnakeCase("Username")}>`,password:k||i.password||`<${J.toSnakeCase("Password")}>`};else{const l=c?.access_token||i.token?.access_token||`<YOUR_${r.bearerFormat||"TOKEN"}_HERE>`;n.securityHeaders?.push({name:"Authorization",value:`${ve(r.scheme||"bearer")} ${l}`})}break}}return n}function Se(t,a){const o=t["x-defaultClientId"]??"YOUR_CLIENT_ID",{tokenUrl:n,deviceAuthorizationUrl:s}=t;return{method:"POST",url:s,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:m.URL_ENCODED},{name:"Accept",value:m.JSON}],queryString:[],postData:{mimeType:m.URL_ENCODED,text:"",params:[{name:"client_id",value:o},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"deviceAuthorization",tokenUrl:n,clientId:o}}function _e(t,a,o){const{tokenUrl:n}=t,s=o.client_id??"YOUR_CLIENT_ID";return{method:"POST",url:t.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:m.URL_ENCODED},{name:"Accept",value:m.JSON}],queryString:[],postData:{mimeType:m.URL_ENCODED,text:"",params:[{name:"grant_type",value:"password"},{name:"client_id",value:s},{name:"client_secret",value:o.client_secret||"YOUR_CLIENT_SECRET"},{name:"username",value:o.username||"<username>"},{name:"password",value:o.password||"<password>"},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"password",tokenUrl:n,clientId:s}}function Te(t,a,o){const{tokenUrl:n}=t,s=o.client_id??"YOUR_CLIENT_ID";return{method:"POST",url:t.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:m.URL_ENCODED},{name:"Accept",value:m.JSON}],queryString:[],postData:{mimeType:m.URL_ENCODED,text:"",params:[{name:"grant_type",value:"client_credentials"},{name:"client_id",value:s},{name:"client_secret",value:o.client_secret||"YOUR_CLIENT_SECRET"},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"clientCredentials",tokenUrl:n,clientId:s}}function j(t,a){if(t){if(oe(t))return Object.keys(t).length>0&&Object.keys(a).length===0?t:L(t,a,{arrayMerge:M});try{return L(JSON.parse(t),a,{arrayMerge:M})}catch{return!1}}return!1}function Y(t,a=""){const o=[];for(const[n,s]of Object.entries(t)){const r=a?`${a}[${n}]`:n;if(typeof s=="object"&&s!==null)o.push(...Y(s,r));else{const i=Array.isArray(t)&&typeof s=="string"&&a?a:r;o.push({name:i,value:String(s)})}}return o}function V(t){return t!==void 0}function ve(t){return t.charAt(0).toUpperCase()+t.slice(1)}function Oe(t,a){if(!t||typeof t!="object"||!a||typeof a!="object")return t;const o=JSON.parse(JSON.stringify(t));function n(s,r){if(!(!s||!r||typeof s!="object"||typeof r!="object")&&s.properties){for(const i in s.properties)if(r[i]!==void 0){const u=s.properties[i],c=r[i];if(u.type==="object"&&typeof c=="object"&&!Array.isArray(c))n(u,c);else if(u.type==="array"&&Array.isArray(c)&&c.length>0){const y=c[0];u.items&&u.items.properties&&n(u.items,y)}else u.example=c}}}return n(o,a),o}export{ve as capitalizeFirst,Ue as getCodeSample,j as getDataRequest,V as isDefined,C as safeSample};
1
+ import*as ce from"openapi-sampler";import $ from"deepmerge";import{isObject as ue}from"@redocly/theme/core/openapi";import{areArraysEqual as le,serializeParameterValue as P,getSecurityDetails as pe,getParameterValue as M,queryString as I,isArrayOfObjects as me,deleteEmptyArrayItem as de}from"../../utils/index.js";import{normalizeMimeType as fe,arrayMergeStrategy as J}from"../utils.js";import{MediaTypes as d}from"../../constants.js";import{HTTPSnippet as ye}from"./httpsnippet/index.js";import{getActiveMediaType as he}from"../../models/mediaContent.js";import Y from"./httpsnippet/helpers/string-utility.js";function C(e,a,o){try{return ce.sample(e,a,o)}catch(n){return console.error(`Error sampling schema: ${n.message}`),null}}function Se(e,a){return e.find(o=>{const n=o.schemes.map(s=>s.id);return le(n,a||[])})}function _e(e,{exampleName:a="",skipOptionalParameters:o=!1,withOAuth2Call:n=!1,spec:s,generatedPayloadSamplesMaxDepth:r=8,pathParams:c={},properties:u={},activeMimeName:i=""},{environment:h,requestValues:k,activeSecuritySchemeIds:_}){const p=h.server,b=e.servers.find(t=>t.url===p)||e.servers[0],w=Se(e.security,_),{securityHeaders:R,securityCookies:Q,securityQueries:F,securityOAuth2ExtraCalls:X,basicAuth:K}=Te(w||e.security?.[0],n,h),m=e?.requestBody?.content&&he(e.requestBody.content,i),v={skipNonRequired:o,skipReadOnly:!0,maxSampleDepth:r,quiet:!0},S=k;let H=!1;const N=e.parameters.filter(t=>t.in==="header").filter(t=>!(o&&!t.required)).map(t=>({name:t.name,value:S.header?.[t.name]||M("header",t.name)||t.serverValues?.[p]?.example||t.example||P(t,C(t.schema.rawSchema,v,s))})).map(t=>(m?.name&&t.name.toLowerCase()==="content-type"&&(H=!0,t.value=m.name),t)).concat(R);!H&&m?.name&&N.unshift({name:"Content-Type",value:m?.name});const G=e.parameters.filter(t=>t.in==="cookie").filter(t=>!(o&&!t.required)).map(t=>I.parse(P(t,t.serverValues?.[p]?.example||t.example||C(t.schema.rawSchema,v,s)))).reduce((t,l)=>{for(const[O,y]of Object.entries(l))t.push({name:O,value:String(S.cookie?.[O]||y)});return t},[]).concat(Q);function q(t){return e.parameters.filter(l=>l.in===t).filter(l=>!(o&&!l.required)).map(l=>I.parse(P(l,l.serverValues?.[p]?.example||l.example||C(l.schema.rawSchema,v,s)))).reduce((l,O)=>{for(const[y,ie]of Object.entries(O))l.push({name:y,value:me(S[t]?.[y])&&JSON.stringify(de(S[t]?.[y]))||String(S[t]?.[y]||ie)});return l},[]).concat(F)}const W=e.parameters.some(t=>t.in==="querystring"),Z=q(W?"querystring":"query"),ee=b?.url.replace(/\/$/,""),te=e.path.replace(/^\//,""),re=`${ee}/${te}`,ae=e.parameters.filter(t=>t.in==="path").reduce((t,l)=>{const{in:O,name:y}=l;return t[y]=S.path?.[y]||l.serverValues?.[p]?.example||l.example||c[y]||M(O,y),t},{}),z=m?.name.toLowerCase(),E=m?.examples?.[a]||m?.formExamples?.[a],se={...m?.formExamples||{},...m?.examples||{}},[x]=Object.values(se),U=E?.serverValues?.[p]?.value||x?.serverValues?.[p]?.value,D=t=>!t||typeof t!="object"||!m?.schema?.rawSchema?null:C(ke(m.schema.rawSchema,t),{...v,format:"xml"},s),T=(()=>{if(S?.body)return S.body;if(z===d.XML){const t=U||E?.value||x?.value;if(typeof t=="string")return t;const l=D(U)||D(E?.value)||D(x?.value);if(l)return l;if(m?.schema)return C(m.schema.rawSchema,{...v,format:"xml"},s)}else{const t=m?.schema&&C(m.schema.rawSchema,{...v,format:"json"},s);return U||E?.value||x?.value||t}return""})();let g="",L=[];switch(fe(z)){case d.JSON:g=JSON.stringify(j(T,u));break;case d.XML:g=T;break;case d.MULTIPART:case d.URL_ENCODED:typeof T=="string"?g=T:(g=I.stringify(j(T,u)),L=B(j(T,u)));break;default:g=String(T||"")}const ne=g?{mimeType:m?.name||d.OCTET_STREAM,text:g,params:L}:void 0,oe=e.responses.map(t=>t.code);return{method:e.httpVerb,url:re,httpVersion:"HTTP/1.1",cookies:G,headers:N,queryString:Z,postData:ne,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:X,basicAuth:K,pathParameters:ae,serverVariables:h,allResponseCodes:oe}}const f={withImports:!0,withComments:!1},A={curl:{code:"shell",defaultTarget:"curl",defaultOptions:{...f,short:!0}},JavaScript:{code:"javascript",defaultTarget:"fetch",defaultOptions:{...f,withImports:!1}},"Node.js":{code:"node",defaultTarget:"fetch",defaultOptions:{...f}},Python:{code:"python",defaultTarget:"requests",defaultOptions:{...f}},"Java8+Apache":{code:"java8",defaultTarget:"apachehttp",defaultOptions:{...f}},Java:{code:"java",defaultTarget:"httpclient",defaultOptions:{...f}},"C#":{code:"csharp",defaultTarget:"httpclient",defaultOptions:{...f}},"C#+Newtonsoft":{code:"csharpNewtonsoft",defaultTarget:"httpclient",defaultOptions:{...f}},Go:{code:"go",defaultTarget:"http.DefaultClient",defaultOptions:{...f}},PHP:{code:"php",defaultTarget:"curl",defaultOptions:{...f}},Ruby:{code:"ruby",defaultTarget:"net::http",defaultOptions:{...f}},R:{code:"r",defaultTarget:"httr",defaultOptions:{...f}}};function Ie({lang:e,operation:a,exampleName:o,pathParams:n,properties:s,options:r={},environment:c,translate:u}){try{const{skipOptionalParameters:i,withOAuth2Call:h,spec:k,generatedPayloadSamplesMaxDepth:_,store:p,activeMimeName:b}=r,w=_e(a,{exampleName:o,pathParams:n,properties:s,skipOptionalParameters:i,withOAuth2Call:h,spec:k,generatedPayloadSamplesMaxDepth:_,activeMimeName:b},{environment:c,requestValues:p.requestValues,activeSecuritySchemeIds:p.activeSecuritySchemeIds}),R=new ye(w);return A[e]?R.convert(A[e].code,A[e].defaultTarget,{...A[e].defaultOptions,...r}):u("openapi.unsupportedLanguage","Language is not supported.")}catch(i){return console.error(i),u("openapi.failedToGenerateCodeSample","Failed to generate code sample.")}}function Te(e,a,o){const n={securityHeaders:[],securityCookies:[],securityQueries:[],securityOAuth2ExtraCalls:[],basicAuth:void 0},s=o?.server;for(const r of e?.schemes||[]){const c=pe(r.id,o),u=s&&r.serverValues&&r.serverValues[s],i={access_token:u?.["x-defaultAccessToken"]||r["x-defaultAccessToken"],token_type:u?.["x-defaultTokenType"]||r["x-defaultTokenType"],client_id:u?.["x-defaultClientId"]||r["x-defaultClientId"],client_secret:u?.["x-defaultClientSecret"]||r["x-defaultClientSecret"]},h=u?.["x-defaultUsername"]||r["x-defaultUsername"],k=u?.["x-defaultPassword"]||r["x-defaultPassword"],_=u&&"scopes"in u?u.scopes||[]:r.scopes||[];switch(r.type){case"openIdConnect":n.securityHeaders?.push({name:"Authorization",value:i.access_token?`${i.token_type||"Bearer"} ${i.access_token}`:c.token?`${i.token_type||c.token.token_type||"Bearer"} ${c.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const p=i.access_token?`${i.token_type||"Bearer"} ${i.access_token}`:c.token?`${c.token.token_type||"Bearer"} ${c.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";r.flows.deviceAuthorization&&a?n.securityOAuth2ExtraCalls.push(ge(r.flows.deviceAuthorization,_)):r.flows.clientCredentials&&a?n.securityOAuth2ExtraCalls.push(Oe(r.flows.clientCredentials,_,{...c,client_id:i.client_id||c.client_id,client_secret:i.client_secret||c.client_secret})):r.flows.password&&a&&n.securityOAuth2ExtraCalls.push(ve(r.flows.password,_,{...c,client_id:i.client_id||c.client_id,client_secret:i.client_secret||c.client_secret})),n.securityHeaders?.push({name:"Authorization",value:p});break}case"apiKey":{const p=i.access_token||c.raw||"YOUR_API_KEY_HERE";r.in==="header"&&n.securityHeaders?.push({name:r.name,value:p}),r.in==="cookie"&&n.securityCookies.push({name:r.name,value:p}),(r.in==="query"||r.in==="querystring")&&n.securityQueries.push({name:r.name,value:p});break}case"http":if(r.scheme==="basic")n.basicAuth={username:h||c.username||`<${Y.toSnakeCase("Username")}>`,password:k||c.password||`<${Y.toSnakeCase("Password")}>`};else{const p=i?.access_token||c.token?.access_token||`<YOUR_${r.bearerFormat||"TOKEN"}_HERE>`;n.securityHeaders?.push({name:"Authorization",value:`${Ce(r.scheme||"bearer")} ${p}`})}break}}return n}function ge(e,a){const o=e["x-defaultClientId"]??"YOUR_CLIENT_ID",{tokenUrl:n,deviceAuthorizationUrl:s}=e;return{method:"POST",url:s,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:d.URL_ENCODED},{name:"Accept",value:d.JSON}],queryString:[],postData:{mimeType:d.URL_ENCODED,text:"",params:[{name:"client_id",value:o},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"deviceAuthorization",tokenUrl:n,clientId:o}}function ve(e,a,o){const{tokenUrl:n}=e,s=o.client_id??"YOUR_CLIENT_ID";return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:d.URL_ENCODED},{name:"Accept",value:d.JSON}],queryString:[],postData:{mimeType:d.URL_ENCODED,text:"",params:[{name:"grant_type",value:"password"},{name:"client_id",value:s},{name:"client_secret",value:o.client_secret||"YOUR_CLIENT_SECRET"},{name:"username",value:o.username||"<username>"},{name:"password",value:o.password||"<password>"},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"password",tokenUrl:n,clientId:s}}function Oe(e,a,o){const{tokenUrl:n}=e,s=o.client_id??"YOUR_CLIENT_ID";return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:d.URL_ENCODED},{name:"Accept",value:d.JSON}],queryString:[],postData:{mimeType:d.URL_ENCODED,text:"",params:[{name:"grant_type",value:"client_credentials"},{name:"client_id",value:s},{name:"client_secret",value:o.client_secret||"YOUR_CLIENT_SECRET"},a.length?{name:"scope",value:a.join(" ")}:void 0].filter(V)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[],flowType:"clientCredentials",tokenUrl:n,clientId:s}}function j(e,a){if(e){if(ue(e))return Object.keys(e).length>0&&Object.keys(a).length===0?e:$(e,a,{arrayMerge:J});try{return $(JSON.parse(e),a,{arrayMerge:J})}catch{return!1}}return!1}function B(e,a=""){const o=[];for(const[n,s]of Object.entries(e)){const r=a?`${a}[${n}]`:n;if(typeof s=="object"&&s!==null)o.push(...B(s,r));else{const c=Array.isArray(e)&&typeof s=="string"&&a?a:r;o.push({name:c,value:String(s)})}}return o}function V(e){return e!==void 0}function Ce(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ke(e,a){if(!e||typeof e!="object"||!a||typeof a!="object")return e;const o=JSON.parse(JSON.stringify(e));function n(s,r){if(!(!s||!r||typeof s!="object"||typeof r!="object")&&s.properties){for(const c in s.properties)if(r[c]!==void 0){const u=s.properties[c],i=r[c];if(u.type==="object"&&typeof i=="object"&&!Array.isArray(i))n(u,i);else if(u.type==="array"&&Array.isArray(i)&&i.length>0){const h=i[0];u.items&&u.items.properties&&n(u.items,h)}else u.example=i}}}return n(o,a),o}export{Ce as capitalizeFirst,Ie as getCodeSample,j as getDataRequest,V as isDefined,B as objectToHarParams,C as safeSample};
@@ -1 +1 @@
1
- import{getTagGroupsItems as d,getTagsItems as c,getTagsWithOperations as p}from"./tags.js";import{addMarkdownItems as g}from"./markdown.js";import{flattenByProp as h,getValueFromMdParsedExtension as l}from"../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as r}from"../../constants.js";function x(o,s){const{definition:e}=o,{schemaDefinitionsTagName:i}=s,a=[{id:"",name:e?.info?.["x-seo"]?.title||e?.info?.title||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:e.info,items:[],keywords:e["x-keywords"]}],t=[...e.tags||[]];if(t.some(n=>n.name===r)||t.push({name:r}),!t.find(n=>n?.name===i)&&i&&t.push({name:i}),e["x-mcp"])for(const n of["Tools","Resources","Prompts"])e["x-mcp"][n]&&(t.find(u=>u?.name===n)||t.push({name:n}));const m=p(o,t),f=e["x-tagGroups"];return a.push(...g(l(e.info,"description")||"",void 0,1)),f&&f.length>0?a.push(...d(o,void 0,f,m,s)):a.push(...c(o,m,void 0,void 0,s)),a}function E(o,s){const e=x(o,s),i=h(e||[],"items");return{contentItems:e,flatItems:i}}export{E as buildContentItems,x as buildMenuStructure};
1
+ import{getTagGroupsItems as c,getTagsItems as g,getTagsWithOperations as p,buildNestedTagsItems as h}from"./tags.js";import{addMarkdownItems as l}from"./markdown.js";import{flattenByProp as T,getValueFromMdParsedExtension as x}from"../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as d}from"../../constants.js";function A(n,o){const{definition:e}=n,{schemaDefinitionsTagName:i}=o,a=[{id:"",name:e?.info?.["x-seo"]?.title||e?.info?.title||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:e.info,items:[],keywords:e["x-keywords"]}],s=[...e.tags||[]];if(s.some(t=>t.name===d)||s.push({name:d}),!s.find(t=>t?.name===i)&&i&&s.push({name:i}),e["x-mcp"])for(const t of["Tools","Resources","Prompts"])e["x-mcp"][t]&&(s.find(r=>r?.name===t)||s.push({name:t}));const f=p(n,s),m=e["x-tagGroups"],u=Object.values(f).some(t=>t.parent);return a.push(...l(x(e.info,"description")||"",void 0,1)),u?a.push(...h(n,f,void 0,o)):m&&m.length>0?a.push(...c(n,void 0,m,f,o)):a.push(...g(n,f,void 0,void 0,o)),a}function w(n,o){const e=A(n,o),i=T(e||[],"items");return{contentItems:e,flatItems:i}}export{w as buildContentItems,A as buildMenuStructure};
@@ -1,10 +1,10 @@
1
1
  import type { GroupModel, OperationMenuItem, ContentItemModel } from '../../models/index.js';
2
- import type { TagInfo } from '../types.js';
2
+ import type { TagInfo, TagsInfoMap } from '../types.js';
3
3
  /**
4
4
  * Returns array of Operation items for the tag
5
5
  * @param parent parent OperationsGroup
6
6
  * @param tag tag info returned from `getTagsWithOperations`
7
7
  * @param depth items depth
8
8
  */
9
- export declare function getOperationsItems(parent: GroupModel | undefined, tag: TagInfo, depth: number): OperationMenuItem[];
9
+ export declare function getOperationsItems(parent: GroupModel | undefined, tag: TagInfo, depth: number, tagsMap?: TagsInfoMap): OperationMenuItem[];
10
10
  export declare function getHref({ id }: Pick<ContentItemModel, 'id'>): string;
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as r}from"@redocly/config";import{encodeBackSlashes as d,getOperationId as c,getOperationName as m}from"../../utils/index.js";function N(o,i,s){if(i.operations.length===0)return[];const n=[],a=[];for(const e of i.operations){const t=c(e,o),p={id:t,type:"operation",parent:o,operationDefinition:e,depth:s,name:m(e),httpVerb:e.httpVerb,path:e.pathName,items:[],isAdditionalOperation:e.isAdditionalOperation,isWebhook:e.isWebhook,operationId:e.operationId,badges:e["x-badges"]||[],href:b({id:t}),deprecated:!!e.deprecated,[r]:e[r]||o?.[r]};e.isWebhook?a.push(p):n.push(p)}return[...n.sort((e,t)=>Number(e.deprecated)-Number(t.deprecated)||Number(e.isAdditionalOperation)-Number(t.isAdditionalOperation)),...a.sort((e,t)=>Number(e.deprecated)-Number(t.deprecated))]}function b({id:o}){return d(`/${o}`.toLowerCase())}export{b as getHref,N as getOperationsItems};
1
+ import{REDOCLY_TEAMS_RBAC as n}from"@redocly/config";import{encodeBackSlashes as h,getOperationId as l,getOperationName as k}from"../../utils/index.js";function I(t,r,f,a){if(r.operations.length===0)return[];const s=[],d=[],p=[];if(a)for(const e of Object.values(a))(e.kind==="badge"||e.kind==="audience")&&p.push(e);for(const e of r.operations){const o=l(e,t),m="operation",c=[...e["x-badges"]||[]];if(e.tags)for(const b of e.tags){const i=p.find(g=>g.name===b);i&&c.push({name:i.summary||i.name,color:i.kind==="audience"?"grey":"blue",position:"after",icon:i.kind==="audience"?"user-group":void 0})}const u={id:o,type:m,parent:t,operationDefinition:e,depth:f,name:k(e),httpVerb:e.httpVerb,path:e.pathName,items:[],isAdditionalOperation:e.isAdditionalOperation,isWebhook:e.isWebhook,operationId:e.operationId,badges:c,href:N({id:o}),deprecated:!!e.deprecated,[n]:e[n]||t?.[n]};e.isWebhook?d.push(u):s.push(u)}return[...s.sort((e,o)=>Number(e.deprecated)-Number(o.deprecated)||Number(e.isAdditionalOperation)-Number(o.isAdditionalOperation)),...d.sort((e,o)=>Number(e.deprecated)-Number(o.deprecated))]}function N({id:t}){return h(`/${t}`.toLowerCase())}export{N as getHref,I as getOperationsItems};
@@ -26,4 +26,5 @@ export declare function getTagGroupsItems(parser: OpenAPIParser, parent: GroupMo
26
26
  */
27
27
  export declare function getTagsWithOperations(parser: OpenAPIParser, explicitTags: OpenAPITag[]): TagsInfoMap;
28
28
  export declare function processOperation(parser: OpenAPIParser, operationName: string, operationInfo: any, pathName: string, path: any, tags: TagsInfoMap, isWebhook?: boolean, isAdditionalOperation?: boolean): void;
29
+ export declare function buildNestedTagsItems(parser: OpenAPIParser, tagsMap: TagsInfoMap, parent: GroupModel | undefined, options: Options): ContentItemModel[];
29
30
  export declare function capitalize(input: string): string;
@@ -1,4 +1,4 @@
1
- import{getTagOrGroup as d}from"../../models/group.js";import{DEFAULT_WEBHOOKS_TAG_NAME as g,GROUP_DEPTH as h}from"../../constants.js";import{getValueFromMdParsedExtension as T,isOperationName as S,JsonPointer as w,safeSlugify as k}from"../../utils/index.js";import{getOperationsItems as x}from"./operation.js";import{addMarkdownItems as y}from"./markdown.js";import{joinWithSeparator as b}from"../history/helpers.js";const O=["tools","resources","prompts"];function v(r,a,n,o,s){let e;if(o===void 0?e=Object.keys(a):e=o.tags,!Array.isArray(e))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const c=e.map(t=>a[t]?(a[t].used=!0,a[t]):(console.warn(`Non-existing tag "${t}" is added to the group "${o?.name}"`),null)),i=[];for(const t of c){if(!t)continue;const f=d("tag",t,n);if(f.depth=h+1,t.name===""){const m=[...y(T(t,"description")||"",f,f.depth+1),...x(void 0,t,f.depth+1)];i.push(...m);continue}const p=A({definition:r.definition,tag:t,parent:f,schemaDefinitionsTagName:s.schemaDefinitionsTagName}),l=E(r.definition,t,f);f.items=[...p,...l,...y(T(t,"description")||"",f,f.depth+1),...x(f,t,f.depth+1)],i.push(f)}return i.filter(({name:t,items:f})=>t!==g||f.length>0)}function M(r,a,n,o,s){const e=[];for(const c of n){const i=d("group",c,a);i.depth=h,i.items=v(r,o,i,c,s),e.push(i)}return e}function A({definition:r,tag:a,parent:n,schemaDefinitionsTagName:o}){const s=o?[o]:[];return Object.entries(r.components?.schemas||{}).map(([e,c])=>{if(!(c["x-tags"]||s).includes(a.name))return null;const t=d("schema",{name:e,"x-displayName":`${c.title||e}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${e}" /%}`,isSchema:!0,level:2},n);return t.depth=n.depth+1,t}).filter(Boolean)}function E(r,a,n){const o=[];for(const s of O)if(r["x-mcp"]?.[s]){const e=P(s),c=[e];for(const i of r["x-mcp"]?.[s]||[])if((i.tags?.length?i.tags:c).includes(a.name)){const f=b(n.id,k(i.name)),p=s==="tools"?`Tool name: \`${i.name}\`
1
+ import{getTagOrGroup as l}from"../../models/group.js";import{DEFAULT_WEBHOOKS_TAG_NAME as y,GROUP_DEPTH as O,MAX_NESTING_TAGS_LEVEL as _}from"../../constants.js";import{getValueFromMdParsedExtension as h,isOperationName as j,JsonPointer as D,safeSlugify as G}from"../../utils/index.js";import{getOperationsItems as g}from"./operation.js";import{addMarkdownItems as T}from"./markdown.js";import{joinWithSeparator as I}from"../history/helpers.js";const N=["tools","resources","prompts"];function R(c,a,i,o,s){let t;if(o===void 0?t=Object.keys(a):t=o.tags,!Array.isArray(t))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const f=t.map(e=>a[e]?(a[e].used=!0,a[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${o?.name}"`),null)),r=[];for(const e of f){if(!e)continue;const n=l("tag",e,i);if(n.depth=O+1,e.name===""){const d=[...T(h(e,"description")||"",n,n.depth+1),...g(void 0,e,n.depth+1,a)];r.push(...d);continue}const p=w({definition:c.definition,tag:e,parent:n,schemaDefinitionsTagName:s.schemaDefinitionsTagName}),u=E(c.definition,e,n);n.items=[...p,...u,...T(h(e,"description")||"",n,n.depth+1),...g(n,e,n.depth+1,a)],r.push(n)}return r.filter(({name:e,items:n})=>e!==y||n.length>0)}function L(c,a,i,o,s){const t=[];for(const f of i){const r=l("group",f,a);r.depth=O,r.items=R(c,o,r,f,s),t.push(r)}return t}function w({definition:c,tag:a,parent:i,schemaDefinitionsTagName:o}){const s=o?[o]:[];return Object.entries(c.components?.schemas||{}).map(([t,f])=>{if(!(f["x-tags"]||s).includes(a.name))return null;const e=l("schema",{name:t,"x-displayName":`${f.title||t}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${t}" /%}`,isSchema:!0,level:2},i);return e.depth=i.depth+1,e}).filter(Boolean)}function E(c,a,i){const o=[];for(const s of N)if(c["x-mcp"]?.[s]){const t=$(s),f=[t];for(const r of c["x-mcp"]?.[s]||[])if((r.tags?.length?r.tags:f).includes(a.name)){const n=I(i.id,G(r.name)),p=s==="tools"?`Tool name: \`${r.name}\`
2
2
 
3
- `:"",m=d(s==="tools"?"tool":s==="resources"?"rsrc":"prompt",{name:i.name,"x-displayName":i.title||i.name,description:`${p}${i.description||""}
4
- {% mcp${e.slice(0,-1)} name="${i.name}" id="${f}" /%}`,isSchema:!0,level:2},n);m.depth=n.depth+1,o.push(m)}}return o}function N(r,a){const{definition:n}=r,o={},s=n["x-webhooks"]||n.webhooks,e=n["x-mcp"];for(const c of a||[])o[c.name]={...c,operations:[]};return n.paths&&u(r,n.paths,o),s&&u(r,s,o,!0),e&&j(e,o),o}function j(r,a){for(const n of O)if(r[n])for(const o of r[n]){const s=o.tags&&o.tags.length?o.tags:[P(n)];for(const e of s){let c=a[e];c===void 0&&(c={name:e,operations:[],used:!0},a[e]=c)}}}function $(r,a,n,o,s,e,c,i){if(s.$ref){const{resolved:f}=r.deref(s);u(r,{[o]:f},e,c);return}let t=n?.tags;(!t||!t.length)&&(t=c?[g]:[""]);for(const f of t){let p=e[f];p===void 0&&(p={name:f,operations:[]},e[f]=p),!p["x-traitTag"]&&p.operations.push({...n,pathName:o,pointer:w.compile(["paths",o,a]),httpVerb:a==="x-query"?"query":a,pathParameters:s.parameters||[],pathServers:s.servers,isWebhook:!!c,isAdditionalOperation:!!i,keywords:n["x-keywords"]})}}function u(r,a,n,o){for(const s of Object.keys(a||{})){const e=a[s],c=Object.keys(e).filter(S);for(const i of c){const t=e[i];$(r,i,t,s,e,n,o)}if(e.additionalOperations)for(const[i,t]of Object.entries(e.additionalOperations))$(r,i,t,s,e,n,o,!0)}}function P(r){return r.charAt(0).toUpperCase()+r.slice(1)}export{P as capitalize,M as getTagGroupsItems,v as getTagsItems,N as getTagsWithOperations,$ as processOperation};
3
+ `:"",d=l(s==="tools"?"tool":s==="resources"?"rsrc":"prompt",{name:r.name,"x-displayName":r.title||r.name,description:`${p}${r.description||""}
4
+ {% mcp${t.slice(0,-1)} name="${r.name}" id="${n}" /%}`,isSchema:!0,level:2},i);d.depth=i.depth+1,o.push(d)}}return o}function W(c,a){const{definition:i}=c,o={},s=i["x-webhooks"]||i.webhooks,t=i["x-mcp"];for(const f of a||[])o[f.name]={...f,operations:[]};return i.paths&&S(c,i.paths,o),s&&S(c,s,o,!0),t&&U(t,o),o}function U(c,a){for(const i of N)if(c[i])for(const o of c[i]){const s=o.tags&&o.tags.length?o.tags:[$(i)];for(const t of s){let f=a[t];f===void 0&&(f={name:t,operations:[],used:!0},a[t]=f)}}}function P(c,a,i,o,s,t,f,r){if(s.$ref){const{resolved:n}=c.deref(s);S(c,{[o]:n},t,f);return}let e=i?.tags;(!e||!e.length)&&(e=f?[y]:[""]);for(const n of e){let p=t[n];p===void 0&&(p={name:n,operations:[]},t[n]=p),!p["x-traitTag"]&&p.operations.push({...i,pathName:o,pointer:D.compile(["paths",o,a]),httpVerb:a==="x-query"?"query":a,pathParameters:s.parameters||[],pathServers:s.servers,isWebhook:!!f,isAdditionalOperation:!!r,keywords:i["x-keywords"]})}}function S(c,a,i,o){for(const s of Object.keys(a||{})){const t=a[s],f=Object.keys(t).filter(j);for(const r of f){const e=t[r];P(c,r,e,s,t,i,o)}if(t.additionalOperations)for(const[r,e]of Object.entries(t.additionalOperations))P(c,r,e,s,t,i,o,!0)}}function z(c,a,i,o){const s=Object.values(a).filter(e=>{const n=e.kind;return n===void 0||n==="nav"}),t=new Map;s.forEach(e=>{t.set(e.name,e)});const f=s.filter(e=>{const n=e.parent;return!n||!t.has(n)}),r=(e,n,p=1)=>{if(p>_)return console.warn("The tags exceed the maximum nesting level."),[];const u=[];for(const d of e){const m=l("tag",d,n);if(m.depth=(n?.depth||O)+1,d.name===""){const x=[...T(h(d,"description")||"",m,m.depth+1),...g(void 0,d,m.depth+1,a)];u.push(...x);continue}const b=s.filter(x=>x.parent===d.name),k=w({definition:c.definition,tag:d,parent:m,schemaDefinitionsTagName:o.schemaDefinitionsTagName}),v=E(c.definition,d,m),A=r(b,m,p+1);m.items=[...k,...v,...T(h(d,"description")||"",m,m.depth+1),...g(m,d,m.depth+1,a),...A],u.push(m)}return u};return r(f,i,1).filter(({name:e,items:n})=>e!==y||n.length>0)}function $(c){return c.charAt(0).toUpperCase()+c.slice(1)}export{z as buildNestedTagsItems,$ as capitalize,L as getTagGroupsItems,R as getTagsItems,W as getTagsWithOperations,P as processOperation};