@redocly/openapi-docs 3.16.0-next.4 → 3.16.0-next.6
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.
- package/dist/redocly-openapi-docs.min.js +2750 -2448
- package/lib/components/ContentItem/ContentItem.js +1 -1
- package/lib/components/McpTool/McpPrompt.d.ts +6 -0
- package/lib/components/McpTool/McpPrompt.js +9 -0
- package/lib/components/McpTool/McpResource.d.ts +7 -0
- package/lib/components/McpTool/McpResource.js +16 -0
- package/lib/components/McpTool/McpTool.d.ts +1 -1
- package/lib/components/McpTool/McpTool.js +1 -1
- package/lib/components/McpTool/index.d.ts +2 -0
- package/lib/components/McpTool/index.js +1 -1
- package/lib/components/PropertyDetails/FieldDetails.js +6 -6
- package/lib/components/RedoclyOpenAPIDocs/Providers.js +1 -1
- package/lib/components/Replay/EmbeddedReplay.js +2 -2
- package/lib/components/Replay/Replay.js +1 -1
- package/lib/components/Schema/Schema.js +1 -1
- package/lib/components/SideMenu/hooks/useMenuItems.js +1 -1
- package/lib/components/TagItem/OperationsNavigation.js +2 -2
- package/lib/models/group.js +1 -1
- package/lib/services/OpenAPIParser.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/node/fetch.js +1 -1
- package/lib/services/menu/tags.js +4 -2
- package/lib/services/types.d.ts +1 -1
- package/lib/types/open-api.d.ts +7 -0
- package/lib/utils/menu.js +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t,Fragment as i,jsxs as f}from"react/jsx-runtime";import{memo as u}from"react";import{useAtomValue as x}from"jotai";import{joinWithSeparator as I}from"../../services/index.js";import{TagItem as
|
|
1
|
+
import{jsx as t,Fragment as i,jsxs as f}from"react/jsx-runtime";import{memo as u}from"react";import{useAtomValue as x}from"jotai";import{joinWithSeparator as I}from"../../services/index.js";import{TagItem as e}from"../TagItem/index.js";import{OperationItem as g}from"../OperationItem/index.js";import{Section as y}from"../common/index.js";import{useIsExpanded as C}from"./useIsExpanded.js";import{SectionItem as E}from"../SectionItem/index.js";import h from"../ContentItems/useScrollOnRender.js";import{isRootItem as j}from"../ContentItems/helpers.js";import{ApiInfo as R}from"../ApiInfo/index.js";import{layoutAtom as S}from"../../jotai/app.js";import{isRenderableMenuItem as A}from"../../utils/menu.js";const _={group:null,tag:e,section:E,schema:o=>t(e,{...o,item:o.item,isExpanded:!0}),operation:g,tool:o=>t(e,{...o,item:o.item,isExpanded:!0}),rsrc:o=>t(e,{...o,item:o.item,isExpanded:!0}),prompt:o=>t(e,{...o,item:o.item,isExpanded:!0}),root:R};function b({item:o,routingBasePath:n,children:p,layout:s}){const a=j(o),m=_[a?"root":o.type],d=o.type==="tag"&&o.items.length>0,r=C({item:o,routingBasePath:n});let l=h(o,n);const c=x(S);return f(i,{children:[m&&t(y,{id:o.id,ref:l,sectionId:I(n,o.id),underlined:A(o),expanded:d&&!r,children:t(m,{item:o,routingBasePath:n,isExpanded:r,layout:s||c})}),(r||o.type!=="tag")&&!!o.items?.length&&t(i,{children:p})]})}const J=u(b);export{J as ContentItem};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{jsx as t,jsxs as c,Fragment as T}from"react/jsx-runtime";import{memo as k,useCallback as C,useMemo as u}from"react";import{useAtomValue as f}from"jotai";import{LayoutVariant as P}from"@redocly/config";import{getMediaContent as j,getSecurity as A}from"../../models/index.js";import{globalStoreAtom as g}from"../../jotai/store.js";import{Section as b,Row as q,SamplesMiddlePanel as v,SamplesPanel as F,CodeBlockPanel as L}from"../common/index.js";import{Schema as R}from"../Schema/index.js";import{layoutAtom as _}from"../../jotai/app.js";import{MediaTypeSamples as w}from"../PayloadSamples/MediaTypeSamples.js";import{useTranslate as D}from"../../hooks/index.js";import{Title as E}from"../common/OperationItemTitle.js";import{LinkToField as V}from"../common/LinkToField.js";import{makeDeepLink as B}from"../../services/index.js";import{Security as K}from"../Security/Security.js";import{styled as x}from"../../styled-components.js";function N({name:n,id:l}){const{parser:e}=f(g),i=D(),r=u(()=>(e.definition["x-mcp"]?.prompts||[]).find(p=>p.name===n),[e,n]),m=u(()=>r?A(r.security,e):null,[e,r]);return r?t(b,{children:t(z,{id:l,type:"input",prompt:r,title:i("openapi.mcp.inputSchema","Arguments"),exampleTitle:i("openapi.mcp.inputExample","Arguments example"),children:m&&t(K,{securities:m})})}):null}function z({id:n,type:l,prompt:e,title:i,exampleTitle:r,children:m}){const{parser:d,options:p}=f(g),y=f(_),h=y===P.STACKED,a=u(()=>{const S=e.arguments&&{type:"object",properties:e.arguments.reduce((o,s)=>(o[s.name]={type:"",example:s.example||"string",description:s.description,required:s.required},o),{}),required:e.arguments.filter(o=>o.required).map(o=>o.name)};return S?j({parser:d,info:{"application/json":{schema:S}},isRequestType:!1,options:p,data:{operation:{pointer:"McpPrompt"}}}):null},[p,d,e]),M=C(()=>{},[]);return c(G,{layout:y,children:[t(H,{isStacked:h,children:c("div",{children:[m,a&&c(T,{children:[" ",c(E,{children:[n&&t(V,{to:B(n,l)}),i]}),t(R,{schema:a.mediaTypes[0].schema})]})]})}),a&&t(F,{isStacked:h,children:t(L,{className:"panel-response-samples",header:r,children:t(w,{mediaType:a.mediaTypes[0],onChange:M})})})]})}const G=x(q)`
|
|
2
|
+
margin: calc(var(--spacing-unit) * 2) 0;
|
|
3
|
+
|
|
4
|
+
& + & {
|
|
5
|
+
margin-top: calc(var(--spacing-base) * 2);
|
|
6
|
+
}
|
|
7
|
+
`,H=x(v)`
|
|
8
|
+
padding-left: 0;
|
|
9
|
+
`,me=k(N);export{me as McpPrompt};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import{jsxs as l,jsx as o}from"react/jsx-runtime";import{memo as k,useMemo as T}from"react";import*as M from"react";import{useAtomValue as h}from"jotai";import{LayoutVariant as b}from"@redocly/config";import{CodeBlock as v}from"@redocly/theme/components/CodeBlock/CodeBlock";import{Tag as P}from"@redocly/theme/components/Tag/Tag";import{getSecurity as w}from"../../models/index.js";import{globalStoreAtom as j}from"../../jotai/store.js";import{Section as A,Row as B,SamplesMiddlePanel as F,SamplesPanel as L,CodeBlockPanel as E}from"../common/index.js";import{layoutAtom as I}from"../../jotai/app.js";import{useTranslate as V}from"../../hooks/index.js";import{Security as _}from"../Security/Security.js";import{styled as s}from"../../styled-components.js";function D({name:i}){const{parser:t}=h(j),c=V(),e=T(()=>(t.definition["x-mcp"]?.resources||[]).find(p=>p.name===i),[t,i]),r=T(()=>e?w(e.security,t):null,[t,e]);return e?o(A,{children:o(K,{uriTitle:c("openapi.mcp.uriTitle","Resource URI"),mimeTypeTitle:c("openapi.mcp.mimeTypeTitle","Resource MIME type"),exampleTitle:c("openapi.mcp.exampleTitle","Resource content"),uri:e.uri,mimeType:e.mimeType,content:e.blob??e.text??"",children:r&&o(_,{securities:r})})}):l("div",{children:["Resource not found: ",i]})}function K({uriTitle:i,mimeTypeTitle:t,exampleTitle:c,uri:e,mimeType:r,content:a,children:p}){const m=h(I),d=m===b.STACKED,[u,f]=M.useState(null),y=async(n,x,C)=>{C.stopPropagation();try{await navigator.clipboard.writeText(n),f(x),setTimeout(()=>f(null),2e3)}catch(R){console.error("Failed to copy text: ",R)}};return l(N,{layout:m,children:[o(U,{isStacked:d,children:l("div",{children:[p,l(g,{children:[i,":"," ",o(S,{onClick:n=>y(e,"uri",n),title:"Click to copy",children:u==="uri"?"\u2713 Copied!":e})]}),l(g,{children:[t,":"," ",o(S,{onClick:n=>y(r,"mimeType",n),title:"Click to copy",children:u==="mimeType"?"\u2713 Copied!":r})]})]})}),a&&o(L,{isStacked:d,children:o(E,{className:"panel-response-samples",header:c,children:o(q,{source:a,header:{title:r,controls:{copy:{}}}})})})]})}const N=s(B)`
|
|
2
|
+
margin: calc(var(--spacing-unit) * 2) 0;
|
|
3
|
+
|
|
4
|
+
& + & {
|
|
5
|
+
margin-top: calc(var(--spacing-base) * 2);
|
|
6
|
+
}
|
|
7
|
+
`,U=s(F)`
|
|
8
|
+
padding-left: 0;
|
|
9
|
+
`,te=k(D),S=s(P)`
|
|
10
|
+
text-transform: none;
|
|
11
|
+
`,q=s(v)`
|
|
12
|
+
border: none;
|
|
13
|
+
padding: 0 8px;
|
|
14
|
+
`,g=s.div`
|
|
15
|
+
margin: 1em 0;
|
|
16
|
+
`;export{te as McpResource};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as a,jsx as n}from"react/jsx-runtime";import{memo as M,useCallback as g,useMemo as
|
|
1
|
+
import{jsxs as a,jsx as n}from"react/jsx-runtime";import{memo as M,useCallback as g,useMemo as c}from"react";import{useAtomValue as s}from"jotai";import{LayoutVariant as k}from"@redocly/config";import{getMediaContent as C,getSecurity as j}from"../../models/index.js";import{globalStoreAtom as f}from"../../jotai/store.js";import{Section as P,Row as b,SamplesMiddlePanel as v,SamplesPanel as A,CodeBlockPanel as E}from"../common/index.js";import{Schema as R}from"../Schema/index.js";import{getSchema as F}from"../../models/schema.js";import{layoutAtom as L}from"../../jotai/app.js";import{MediaTypeSamples as O}from"../PayloadSamples/MediaTypeSamples.js";import{useTranslate as w}from"../../hooks/index.js";import{Title as D}from"../common/OperationItemTitle.js";import{LinkToField as I}from"../common/LinkToField.js";import{makeDeepLink as V}from"../../services/index.js";import{Security as _}from"../Security/Security.js";import{styled as h}from"../../styled-components.js";function q({name:t,id:m}){const{parser:i}=s(f),o=w(),e=c(()=>(i.definition["x-mcp"]?.tools||[]).find(r=>r.name===t),[i,t]),l=c(()=>e?j(e.security,i):null,[i,e]);return e?a(P,{children:[n(S,{id:m,type:"input",schema:e.inputSchema,title:o("openapi.mcp.inputSchema","Input schema"),exampleTitle:o("openapi.mcp.inputExample","Input example"),children:l&&n(_,{securities:l})}),e.outputSchema&&n(S,{id:m,type:"output",schema:e.outputSchema,title:o("openapi.mcp.outputSchema","Output schema"),exampleTitle:o("openapi.mcp.outputExample","Output example")})]}):a("div",{children:["Tool not found: ",t]})}function S({schema:t,title:m,exampleTitle:i,id:o,type:e,children:l}){const{parser:p,options:r}=s(f),u=s(L),d=u===k.STACKED,T=c(()=>C({parser:p,info:{"application/json":{schema:t}},isRequestType:!1,options:r,data:{operation:{pointer:"McpTool"}}}),[r,p,t]),y=c(()=>t&&F({parser:p,schemaOrRef:t,pointer:"#",options:r,deps:{operation:{pointer:o},parentFieldFullPath:e+"-schema"}}),[r,p,t,o,e]),x=g(()=>{},[]);return a(B,{layout:u,children:[n(K,{isStacked:d,children:a("div",{children:[a(D,{children:[o&&n(I,{to:V(o,e)}),m]}),l,n(R,{schema:y})]})}),n(A,{isStacked:d,children:n(E,{className:"panel-response-samples",header:i,children:n(O,{mediaType:T.mediaTypes[0],onChange:x})})})]})}const B=h(b)`
|
|
2
2
|
margin: calc(var(--spacing-unit) * 2) 0;
|
|
3
3
|
|
|
4
4
|
& + & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./McpTool.js";
|
|
1
|
+
export*from"./McpTool.js";export*from"./McpResource.js";export*from"./McpPrompt.js";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import{jsx as e,jsxs as p,Fragment as E}from"react/jsx-runtime";import{memo as
|
|
1
|
+
import{jsx as e,jsxs as p,Fragment as E}from"react/jsx-runtime";import{memo as T,useMemo as k}from"react";import{useAtomValue as S}from"jotai";import{LinkIcon as L}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{RecursiveLabel as h,Tag as x,AccessLabel as j,RequiredLabel as q,StyledBadge as A}from"../common/index.js";import{ExternalDocumentation as C}from"../ExternalDocumentation/index.js";import{Markdown as M}from"../Markdown/index.js";import{FieldDetail as l}from"./FieldDetail.js";import{Extensions as R}from"./Extensions.js";import{EnumValues as V}from"./EnumValues.js";import{Examples as $,getSerializedValue as N}from"./Examples.js";import{globalOptionsAtom as _}from"../../jotai/store.js";import{SchemaTypeInfo as i}from"./SchemaTypeInfo.js";import{LinkToField as B}from"../common/LinkToField.js";import{Pattern as I}from"./Pattern.js";import{getAccessModeLabelText as O}from"../RenderHook/index.js";import{useTranslate as G}from"../../hooks/index.js";import{styled as n}from"../../styled-components.js";function H({field:t,renderDiscriminatorSwitch:v,deepLink:m,fieldParentsName:y=[]}){const a=G(),{hidePropertiesPrefix:g,hideSchemaTitles:b}=S(_),{schema:r,description:w,example:c,deprecated:D,examples:s,kind:d,required:F,name:f}=t,P=t.in==="header",z=k(()=>{if(c!==void 0||s!==void 0){if(s!==void 0)return e($,{field:t});{const o=!!t.in;return e(l,{label:`${a("openapi.example","Example")}:`,value:N(t,t.example),raw:o})}}else return null},[c,s,t,a]),u=O(t.schema);return p(E,{children:[p(J,{children:[f&&p(Q,{children:[m&&e(B,{to:m}),!g&&y.map(o=>o+".\u200B"),e(U,{className:"schema-name",children:f})]}),e(i,{type:r.typePrefix+r.displayType}),e(i,{type:r.displayFormat&&`(${r.displayFormat})`}),e(i,{type:r.contentEncoding}),e(i,{type:r.title&&!b?`(${r.title})`:""}),r.constraints?.map(o=>e(i,{type:o},o)),D&&e(A,{deprecated:!0,children:a("openapi.badges.deprecated","Deprecated")}),e(I,{pattern:r.pattern}),d==="additionalProperties"&&e(x,{children:a("openapi.additionalProperties","additional property")}),d==="patternProperties"&&e(x,{children:a("openapi.patternProperties","pattern property")}),u&&e(j,{children:u}),F&&e(q,{children:a("openapi.required","required")}),r.isCircular&&e(h,{children:a("openapi.recursive","Recursive")})]}),r.isComplex&&e(h,{children:a("openapi.complex","Complex")}),e(K,{source:w}),e(l,{raw:P,type:"default",label:a("openapi.default","Default"),value:r.default}),e(V,{type:r.type,values:r["x-enumDescriptions"]||r.enum}),z,e(R,{extensions:{...t.extensions,...r.extensions}}),r.externalDocs&&e(C,{externalDocs:r.externalDocs,compact:!0}),v?.(),e(l,{label:a("openapi.value","Value"),value:t.const||void 0})]})}const ue=T(H),J=n.div`
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: center;
|
|
4
4
|
gap: calc(var(--spacing-xxs) / 4) var(--spacing-xxs);
|
|
5
5
|
flex-wrap: wrap;
|
|
6
6
|
margin-bottom: 2px;
|
|
7
7
|
position: relative;
|
|
8
|
-
`,
|
|
8
|
+
`,K=n(M)`
|
|
9
9
|
font-size: var(--font-size-base);
|
|
10
10
|
line-height: var(--line-height-base);
|
|
11
11
|
|
|
12
12
|
article p:last-child {
|
|
13
13
|
margin-bottom: 0;
|
|
14
14
|
}
|
|
15
|
-
`,
|
|
15
|
+
`,Q=n.span`
|
|
16
16
|
position: relative;
|
|
17
17
|
font-family: var(--font-family-monospaced);
|
|
18
18
|
line-height: var(--line-height-base);
|
|
@@ -24,16 +24,16 @@ import{jsx as e,jsxs as p,Fragment as E}from"react/jsx-runtime";import{memo as S
|
|
|
24
24
|
white-space: pre-wrap;
|
|
25
25
|
|
|
26
26
|
:hover {
|
|
27
|
-
${
|
|
27
|
+
${L} {
|
|
28
28
|
opacity: 1;
|
|
29
29
|
visibility: visible;
|
|
30
30
|
background-color: var(--bg-color);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
`,
|
|
33
|
+
`,U=n.span`
|
|
34
34
|
font-family: var(--font-family-monospaced);
|
|
35
35
|
font-weight: var(--font-weight-semibold);
|
|
36
36
|
font-size: var(--schemas-property-name-font-size);
|
|
37
37
|
line-height: var(--schemas-property-name-line-height);
|
|
38
38
|
color: var(--text-color-primary);
|
|
39
|
-
`;export{
|
|
39
|
+
`;export{ue as FieldDetails};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{memo as v,useCallback as y,useEffect as g,useMemo as b}from"react";import
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{memo as v,useCallback as y,useEffect as g,useMemo as b}from"react";import S from"@markdoc/markdoc";import{LayoutVariant as M}from"@redocly/config";import{createStore as E,Provider as O}from"jotai";import{html as A}from"@redocly/theme/markdoc/tags/html";import{Heading as P}from"@redocly/theme/markdoc/components/Heading/Heading";import{normalizeOptions as N,OpenAPIParser as R}from"../../services/index.js";import{SchemaDefinition as T}from"../SchemaDefinition/index.js";import{McpTool as D,McpResource as j,McpPrompt as k}from"../McpTool/index.js";import{getMarkdownHeaderId as x}from"./utils.js";import{mergeInMockServer as C}from"../../models/operation.js";import{normalizeServers as H}from"../../utils/index.js";import{appStore as I,appStoreOverrideAtom as L,layoutAtom as l,allowedEnvironmentsAtom as V,environmentAtom as z,userClaimsAtom as _}from"../../jotai/app.js";import{mapObject as q}from"../../utils/object.js";import{getServerEnvName as B}from"../../utils/environments.js";import{globalStoreAtom as F}from"../../jotai/store.js";import{getDefaultOperationStore as W,operationStore as h}from"../../jotai/operation.js";const G={ignoreNamedSchemas:["java.io.ObjectStreamField"],maxDisplayedEnumValues:10,markdocOptions:{tags:{html:A.schema,schemaDefinition:{render:"SchemaDefinition",attributes:{schemaRef:{type:String},exampleRef:{type:String},showReadOnly:{type:Boolean},showWriteOnly:{type:Boolean},htmlWrap:{type:String,default:!1}}},mcpTool:{render:"McpTool",attributes:{name:{type:String},id:{type:String}}},mcpResource:{render:"McpResource",attributes:{name:{type:String},id:{type:String}}},mcpPrompt:{render:"McpPrompt",attributes:{name:{type:String},id:{type:String}}}},nodes:{heading:{children:["inline"],attributes:{id:{type:String},level:{type:Number,required:!0,default:1}},transform(n,m){const t=n.transformAttributes(m),i=n.transformChildren(m),e=typeof t.id=="string"?t.id:x(i);return new S.Tag("Heading",{...t,id:e,level:n.attributes.level},i)}}},components:{SchemaDefinition:T,McpTool:D,McpResource:j,McpPrompt:k,Heading:P}}},pe=v(({children:n,options:m,definitionUrl:t,definition:i,withState:e})=>{const p=y(()=>{const r=N(m,G),o=new R(i,t,r);return{options:r,parser:o}},[i,t,m]),a=b(()=>{const r=E(),o=p();r.set(F,o);const c=H(o.parser.definitionUrl,C(o.parser.definition?.servers||[],o.options.mockServer));r.sub(I,()=>{}),r.set(l,e?.layout||o.options?.layout||M.THREE_PANEL);const u=Object.fromEntries(c.map(s=>[B(s),{server:s.url,...q(s.variables||{},f=>f.default||"")}]));if(r.set(z,{environments:u}),r.set(_,e?.userClaims||{}),r.set(V,e?.allowedEnvironments),e&&r.set(L,{activeMimeName:e.activeMimeName,userClaims:e.userClaims,environment:e.environment,environments:e.environments}),e?.operation){const s=W(e.operation.pointer,e.operation.state.requestValues,e.operation.state.activeExampleName);r.set(h(e.operation.pointer),s)}return r},[p,e]);return g(()=>{e?.layout&&a.set(l,e?.layout)},[a,e?.layout]),d(O,{store:a,children:n})});export{pe as StoreProvider};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{Suspense as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{Suspense as S,lazy as h,memo as x,useEffect as O,useState as R}from"react";import{useAtomValue as o}from"jotai";import{globalOptionsAtom as T}from"../../jotai/store.js";import{operationStore as A}from"../../jotai/operation.js";import{appStore as C,allowedEnvironmentsAtom as L,environmentsAtom as V}from"../../jotai/app.js";import{useTranslate as j}from"../../hooks/index.js";import{convertOperationToReplayValue as k}from"./utils.js";import{getDefaultCollectorUrl as w}from"../../utils/telemetry.js";import{styled as i}from"../../styled-components.js";import{HTTPSnippet as P}from"../../services/code-samples/httpsnippet/index.js";const U=h(async()=>import("@redocly/replay").then(t=>({default:t.EmbeddedReplay})));function W({activeOperationId:t,corsProxyUrl:l,fullOpenApi:d,pointer:r,hideOtherSecuritySchemes:m}){const n=j(),{mockServer:s}=o(T),c=o(A(r)),f=o(C),u=o(V),a=o(L),[v,y]=R(!1);return O(()=>{y(!0)},[]),e(z,{children:v?e(S,{fallback:e(p,{children:n("openapi.loading","Loading...")}),children:e(U,{activeOperationId:t,activeOperationPointer:r,api:d,settings:{predefinedEnvValues:u,corsProxyUrl:l,mockServer:s,disableCollectionsTab:!0,hideOtherSecuritySchemes:m,...a&&{allowedEnvironments:a},telemetry:{tracerName:"replay-openapi",collectorUrl:w()},HTTPSnippet:P,convertOperationToReplayValue:(g,b,E)=>k(g,b,E,void 0,c,f)}})}):e(p,{children:n("openapi.loading","Loading...")})})}const M=x(W),p=i.div`
|
|
2
2
|
display: flex;
|
|
3
3
|
justify-content: center;
|
|
4
4
|
align-items: center;
|
|
@@ -7,4 +7,4 @@ import{jsx as e}from"react/jsx-runtime";import{Suspense as h,lazy as S,memo as x
|
|
|
7
7
|
border: 1px solid var(--border-color-primary);
|
|
8
8
|
border-radius: var(--border-radius-lg);
|
|
9
9
|
padding: 0;
|
|
10
|
-
`;export{
|
|
10
|
+
`;export{M as EmbeddedReplay};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o,Fragment as M,jsxs as z}from"react/jsx-runtime";import{lazy as
|
|
1
|
+
import{jsx as o,Fragment as M,jsxs as z}from"react/jsx-runtime";import{lazy as H,memo as J,Suspense as K,useCallback as m,useRef as W,useState as w}from"react";import{useAtom as u,useAtomValue as p}from"jotai";import Q from"deepmerge";const X=H(async()=>import("@redocly/replay").then(e=>({default:e.ReplayOverlay})));import{Button as Y}from"@redocly/theme/components/Button/Button";import{useFocusTrap as Z,useModalScrollLock as $}from"@redocly/theme/core/openapi";import{RocketIcon as ee}from"@redocly/theme/icons/RocketIcon/RocketIcon";import{CircleDashIcon as te}from"@redocly/theme/icons/CircleDashIcon/CircleDashIcon";import{Portal as oe}from"@redocly/theme/components/Portal/Portal";import{useConfigureReplay as re}from"@redocly/theme/ext/use-configure-replay";import{globalOptionsAtom as ne,globalStoreAtom as ae}from"../../jotai/store.js";import{allOperationsAtom as se,replayStateAtom as ie}from"../../jotai/replay.js";import{allOperations as le,getDefaultOperationStore as me}from"../../jotai/operation.js";import{LOADING_STATE as n}from"../../constants.js";import{environmentAtom as pe,userClaimsAtom as ce}from"../../jotai/app.js";import{convertOperationToReplayValueForRedoc as fe}from"./utils.js";import{useTranslate as ue,useTelemetry as de}from"../../hooks/index.js";import{JsonPointer as ye}from"../../utils/index.js";import{getDefaultCollectorUrl as he}from"../../utils/telemetry.js";import{createTryItOpenEvent as Oe,createTryItSentEvent as Ie}from"../../events/index.js";import{joinWithSeparator as Re}from"../../services/history/helpers.js";import{HTTPSnippet as ge}from"../../services/code-samples/httpsnippet/index.js";function ve({operation:e,corsProxyUrl:L,fullOpenApi:d}){const y=ue(),P=de(),h=W(null),{mockServer:q,oAuth2RedirectURI:E,routingBasePath:c}=p(ne),O=p(se),{parser:I,options:{events:a}}=p(ae),R=p(ce),[s,N]=w(!1),[l,g]=u(ie),[v,S]=u(le),[[,V],A]=u(pe),{config:j,refresh:T}=re({userClaims:R,info:I?.definition.info,operation:{name:e.name,path:e.path,operationId:e.operationId||"",href:e.href,method:e.httpVerb},servers:e.servers},s);Z(h),$(s);const x=m(()=>T(),[T]),k=m(({operations:t,environment:i,environments:f})=>{const _=t.reduce((C,r)=>{r.requestValues.body=r.requestValues.body instanceof URLSearchParams?Object.fromEntries(r.requestValues.body.entries()):r.requestValues.body;const{path:F,method:B}=r.apiPath,b=ye.compile(["paths",F,B]);return C[b]=Q(me(b),r),C},{});S({...v,..._}),A({environment:i,environments:f})},[v,S,A]),D=()=>{if(l!==n.LOADING){if(!s&&(P.sendTryItOpenedMessage(),a?.tryItOpen&&e)){const t=Oe({operation:e});a.tryItOpen(t)}N(!s)}l===n.NOT_LOADED&&g(n.LOADING)},G=m(t=>{if(a?.tryItSent&&e){const i=Ie({operation:e,isSuccess:t});a.tryItSent(i)}},[a,e]),U=m(t=>{if(!t)return;const i=O.find(f=>f.operationId===t);return Re(c,i?.href)},[O,c]);return d?z(M,{children:[o(Y,{onClick:D,variant:"primary",iconPosition:"left",icon:l===n.LOADING?o(te,{}):o(ee,{}),children:l===n.LOADING?y("openapi.loading","Loading..."):y("openapi.tryIt","Try it")}),s&&o(K,{children:o(oe,{mountId:"api-content",children:o("div",{ref:h,children:o(X,{activeOperationId:e.operationId||e.pointer,api:d,onRequestChange:k,onClose:D,onLoad:()=>g(n.LOADED),settings:{corsProxyUrl:L,mockServer:q,selectedEnvironment:V,apiId:I?.definition.info?.["x-metadata"]?.apiId,oAuth2RedirectURI:E,disableCollectionsTab:!0,storageKey:c,telemetry:{tracerName:"try-it",collectorUrl:he()},HTTPSnippet:ge,convertOperationToReplayValue:fe(R,j),getOperationUrl:U,onRequestReset:x},onRequestSent:G})})})})]}):null}const He=J(ve);export{He as Replay};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{memo as S}from"react";import{useAtomValue as g}from"jotai";import{useLocation as I}from"react-router-dom";import{ArraySchema as b}from"./ArraySchema.js";import{ObjectSchema as p}from"./ObjectSchema.js";import{OneOfSchema as C}from"./OneOfSchema.js";import{RecursiveSchema as s}from"./RecursiveSchema.js";import{operationStore as j}from"../../jotai/operation.js";import{FieldDetails as A}from"../PropertyDetails/index.js";import{pathIncludesLink as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{memo as S}from"react";import{useAtomValue as g}from"jotai";import{useLocation as I}from"react-router-dom";import{ArraySchema as b}from"./ArraySchema.js";import{ObjectSchema as p}from"./ObjectSchema.js";import{OneOfSchema as C}from"./OneOfSchema.js";import{RecursiveSchema as s}from"./RecursiveSchema.js";import{operationStore as j}from"../../jotai/operation.js";import{FieldDetails as A}from"../PropertyDetails/index.js";import{pathIncludesLink as L}from"../../utils/index.js";import{styled as P}from"../../styled-components.js";function k({schema:e,onDiscriminatorChange:u,onOneOfChange:n,...i}){const{activeOneOf:d}=g(j(e?.operationPointer||"")),h=I();if(!e)return null;const{type:t,oneOf:o,discriminatorProp:f,isCircular:O}=e;if(O)return r(s,{schema:e});if(f!==void 0){if(!o||!o.length)return console.warn(`Looks like you are using discriminator wrong: you don't have any definition inherited from the ${e.title}`),null;const m=o.findIndex((N,y)=>L(h,`d=${y}`)),l=m===-1?0:m,x=d[e.pointer]!==void 0?d[e.pointer]:l,a=o[x];return a?.isCircular?r(s,{schema:a}):r(p,{...i,schema:a,discriminator:{fieldName:f,parentSchema:e,activeOneOfIdx:l,onChange:u},onOneOfChange:n})}if(o!==void 0&&o.length>1)return r(C,{...i,schema:e,onChange:n});const c=Array.isArray(t)?t:[t];if(c.includes("object")){if(e.fields?.length)return r(p,{...i,schema:e,onOneOfChange:n})}else if(c.includes("array"))return r(b,{...i,schema:e,onOneOfChange:n});const v={schema:e,name:"",description:i.oneOfLevel?"":e.description,required:!1,deprecated:!1};return r(w,{children:r(A,{field:v,fieldParentsName:i.fieldParentsName})})}const H=S(k),w=P.div`
|
|
2
2
|
width: 100%;
|
|
3
3
|
padding: var(--spacing-xxs) 0;
|
|
4
4
|
border-bottom: 1px solid var(--border-color-primary);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useMemo as b}from"react";import{useLocation as h}from"react-router-dom";import{useActiveSectionId as I}from"@redocly/theme/core/openapi";import{pathMatchedLink as k}from"../../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as A}from"../../../constants.js";import{joinWithSeparator as y}from"../../../services/history/helpers.js";function L({items:s,routingBasePath:
|
|
1
|
+
import{useMemo as b}from"react";import{useLocation as h}from"react-router-dom";import{useActiveSectionId as I}from"@redocly/theme/core/openapi";import{pathMatchedLink as k}from"../../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as A}from"../../../constants.js";import{joinWithSeparator as y}from"../../../services/history/helpers.js";function L({items:s,routingBasePath:r}){const t=h(),o=I(t,!1,!1);return b(()=>S(s,o,t,r),[o,s,t,r])}function S(s,r="",t,o){const n=[];return c({contentItems:s,sidebarItems:n,activeItemId:r,location:t,routingBasePath:o}),n}function d(s,r="",t,o){return s.href?r&&o?y(o,s.id)===r:r&&!o?s.id===r:k(t,s.href):!1}function l(s,r="",t,o){return(s.items||[]).some(i=>d(i,r,t,o)||l(i,r,t,o))}function c(s){const{contentItems:r,sidebarItems:t,activeItemId:o,location:n,routingBasePath:i}=s;let p=!0;for(const e of r){const a=d(e,o,n,i),m=l(e,o,n,i);switch(e.type){case"group":t.push({type:"separator",label:e.name,active:a,hasActiveSubItem:m}),c({...s,contentItems:e.items,sidebarItems:t});break;case"tag":const f={type:"group",label:e.name,items:[],link:e.href,active:a,hasActiveSubItem:m,modified:!0};t.push(f),c({contentItems:e.items,sidebarItems:f.items||[],activeItemId:o,location:n,routingBasePath:i});break;case"operation":case"schema":case"tool":case"rsrc":case"prompt":e.isWebhook&&p&&e.parent.name!==A&&(t.push({type:"separator",label:"Webhooks",variant:"secondary"}),p=!1),t.push({type:"link",label:e.name,httpVerb:e.type=="operation"?e.httpVerb:e.type,link:e.href,badges:e.badges,active:a,hasActiveSubItem:m,modified:!0,deprecated:e.deprecated,isAdditionalOperation:e.isAdditionalOperation});break;case"section":if(e.depth===-1)continue;const u={type:e.items.length?"group":"link",label:e.name,link:e.href,items:[],active:a,hasActiveSubItem:m,modified:!0};t.push(u),e.items.length&&c({contentItems:e.items,sidebarItems:u.items,activeItemId:o,location:n,routingBasePath:i});break}}}export{L as useMenuItems};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as
|
|
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)`
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
gap: var(--spacing-xxs);
|
|
5
5
|
padding-top: var(--spacing-xxl);
|
|
6
|
-
`;export{
|
|
6
|
+
`;export{io as OperationsNavigation,F as OperationsNavigationComponent};
|
package/lib/models/group.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as
|
|
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 +1 @@
|
|
|
1
|
-
import{IS_BROWSER as
|
|
1
|
+
import{IS_BROWSER as E,isObject as R,isString as B,isUndefined as o}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 w(m,e){return e&&m[m.length-1]!==e?[...m,e]:m}function $(m,e){return e?m.concat(e):m}class _{options;definitionUrl;definition;allowMergeRefs=!1;constructor(e,t,f=z({})){this.options=f,this.definition=Object.assign({},e),this.validate(e),this.definition=e,this.allowMergeRefs=e.openapi.startsWith("3.1");const n=E?window.location.href:"";B(t)&&(this.definitionUrl=new URL(t,n).href)}validate(e){if(o(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=[],f=!1,n=0){const i=e?.["x-refsStack"];if(t=$(t,i),n>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 s=this.byRef(e.$ref);if(!s)throw new Error(`Failed to resolve $ref "${e.$ref}"`);return t.includes(e.$ref)?s=Object.assign({},s,{"x-circular-ref":!0}):this.isRef(s)&&(s=this.deref(s,t,f,n).resolved),this.allowMergeRefs&&(s=this.mergeRefs(e,s,f)),{resolved:s,refsStack:w(t,e.$ref)}}return{resolved:e,refsStack:$(t,i)}}mergeRefs(e,t,f){const{$ref:n,...i}=e,r=Object.keys(i);if(r.length===0)return t;if(f&&r.some(s=>!["description","title","externalDocs","x-refsStack","x-parentRefs","readOnly","writeOnly","x-complex"].includes(s))){const{description:s,title:u,readOnly:y,writeOnly:a,...O}=i;return{allOf:[{description:s,title:u,readOnly:y,writeOnly:a},t,O]}}else return{...t,...i}}mergeAllOf(e,t,f,n="",i=0){if(e["x-circular-ref"])return e;if(e=this.hoistOneOfs(e),e.allOf===void 0)return{absolutePointer:n,...e};let r={...e,"x-parentRefs":[],absolutePointer:g.join(n,["allOf"]),allOf:void 0,title:i===0?e.title||I(t):e.title};!o(r.properties)&&R(r.properties)&&(r.properties={...r.properties}),!o(r.items)&&R(r.items)&&(r.items={...r.items});const s=e.allOf.map((u,y)=>{const{resolved:a,refsStack:O}=this.deref(u,f,!0,i),c=u.$ref,p=c||g.join(n,[String(y)]);if(a["x-complex"])return{$ref:c,refsStack:w(O,c),schema:{"x-complex":!0},absolutePointer:p};const d=this.mergeAllOf(a,c,O,p,i+1);if(!(d["x-circular-ref"]&&d.allOf))return c&&r["x-parentRefs"]?.push(...d["x-parentRefs"]||[],c),{$ref:c,refsStack:w(O,c),schema:d,absolutePointer:p}}).filter(Boolean);for(const[u,{$ref:y,schema:a,refsStack:O,absolutePointer:c}]of s.entries()){const{type:p,enum:d,properties:h,items:D,required:k,title:S,description:C,readOnly:M,writeOnly:N,oneOf:P,anyOf:v,"x-circular-ref":A,"x-complex":b,...U}=a||{};if(!(r.type!==p&&!o(r.type)&&!o(p)&&!i)){if(o(p)||(Array.isArray(p)&&Array.isArray(r.type)?r.type=[...p,...r.type]:r.type=p),o(d)||(Array.isArray(d)&&Array.isArray(r.enum)?r.enum=Array.from(new Set([...d,...r.enum])):r.enum=d),!o(h)&&R(h)){r.properties=r.properties||{};for(const l in h){const x=$(O,h[l]?.["x-refsStack"]);if(!r.properties[l])r.properties[l]={...h[l],absolutePointer:g.join(c,["properties",l]),"x-refsStack":x};else if(!A){const q=this.mergeAllOf({allOf:[r.properties[l],h[l]],"x-refsStack":x},t+"/properties/"+l,x,g.join(c,["allOf",String(u),"properties",l]),i+1);r.properties[l]=q}}}if(!o(D)&&!A&&!b){const l=typeof r.items=="boolean"?{}:Object.assign({},r.items),x=typeof a.items=="boolean"?{}:Object.assign({},a.items);r.items=this.mergeAllOf({allOf:[l,x]},t+"/items",O,"",i+1)}o(P)||(r.oneOf=P),o(v)||(r.anyOf=v),Array.isArray(k)&&(r.required=[...r.required||[],...k]),r={...r,title:y&&S?S:r.title||S,description:r.description||C,readOnly:o(r.readOnly)?M:r.readOnly,writeOnly:o(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={},f=this.definition.components&&this.definition.components.schemas||{};for(const n in f){const{resolved:i}=this.deref(f[n]);!o(i.allOf)&&i.allOf.find(r=>!o(r.$ref)&&e.indexOf(r.$ref)>-1)&&(t["#/components/schemas/"+n]=[i["x-discriminator-value"]||n])}return t}hoistOneOfs(e){if(o(e.allOf))return e;const{allOf:t,...f}=e;for(let n=0;n<t.length;n++){const{oneOf:i,...r}=t[n];if(i&&Array.isArray(i)){const s=t.slice(0,n),u=t.slice(n+1),y=Object.keys(r).length>0?[r]:[];return{...f,oneOf:i.map(a=>({allOf:[...s,...y,a,...u]}))}}}return e}}export{_ as OpenAPIParser,$ as concatRefStacks,w as pushRef};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import h from"stringify-object";import{CodeBuilder as y}from"../../helpers/code-builder.js";import{addIndentation as o,getPreserveTransformer as w,buildUrlExpression as $,printUrlVariablesDeclarations as k}from"../../helpers/code-helpers.js";import{Lang as D}from"../../helpers/constants.js";import{normalizeMimeType as f}from"../../../../utils.js";import{HTTPSnippet as g}from"../../index.js";import{MediaTypes as l}from"../../../../../constants.js";import{buildJSDeviceAuthorizationCodeSnippet as j}from"../../helpers/device-auth-snippets.js";const C=function(t,u,{target:b,client:v}){const s=Object.assign({indent:" ",showBoilerplate:!0,level:1},u),{level:a}=s;let d=!1;const e=new y({indentation:s.indent,variablesPrefix:s.variablesPrefix,capitalize:!0,lang:D.NODEJS});s.withComments&&S(e),s.withImports&&(e.push("import fetch from 'node-fetch';"),e.blank()),s.showBoilerplate&&e.push("async function run() {");const n={method:t.method.toUpperCase()};Object.keys(t.headersObj).length&&(n.headers=t.headersObj);let p=!1;if(t.securityOAuth2ExtraCalls?.length){const i=t.securityOAuth2ExtraCalls?.[0],r=new g(i).convert(b,v,{...s,withImports:!1,withComments:!1,variablesPrefix:"oAuth2",showBoilerplate:!1,level:1});e.push(r),e.blank(),i.flowType==="deviceAuthorization"&&j(e,{tokenUrl:i.tokenUrl??"YOUR_TOKEN_URL",clientId:i.clientId??"YOUR_CLIENT_ID",level:a}),n.headers=n.headers||{},n.headers.Authorization="'Bearer ' + accessToken",p=!0}const m=Object.getOwnPropertyNames(t.queryObj).length;if(m&&e.push(a,`const ${e.var("query")} = new URLSearchParams(${o(h(t.queryObj,{indent:s.indent,inlineCharacterLimit:25}),{level:a,indent:s.indent,firstLine:!1})}).toString();`).blank(),t.postData)switch(f(t.postData.mimeType)){case l.URL_ENCODED:n.body=t.postData.paramsObj?`new URLSearchParams(${e.var("formData")}).toString()`:t.postData.text,t.postData.paramsObj&&e.push(a,`const ${e.var("formData")} = ${o(h(t.postData.paramsObj,{indent:s.indent,inlineCharacterLimit:25}),{level:a,firstLine:!1})};`).blank();break;case l.JSON:t.postData.jsonObj&&(n.body=`JSON.stringify(${o(h(t.postData.jsonObj,{indent:s.indent,inlineCharacterLimit:25}),{level:a,firstLine:!1})})`);break;case l.MULTIPART:delete n?.headers?.["Content-Type"],s.withImports&&e.unshift("import FormData from 'form-data';"),e.push(a,`const ${e.var("form")} = new FormData();`),t.postData.params.forEach(function(i){if(!i.fileName&&!i.fileName&&!i.contentType){e.push(a,"form.append('"+i.name+"','"+i.value+"');");return}i.fileName&&(d=!0,e.blank(),e.push(a,`${e.var("form")}.append('${i.name}', fs.createReadStream('${i.fileName}'));`))}),n.body=e.var("form"),e.blank();break;default:t.postData.text&&(n.body=`\`${o(t.postData.text,{level:a+1,indent:s.indent,firstLine:!1}).trim()}\``)}if(t.cookies.length){let i="";t.cookies.forEach(function(r){i=i+encodeURIComponent(r.name)+"="+encodeURIComponent(r.value)+"; "}),i=i.trim(),n.headers||(n.headers={}),n.headers.cookie=i}if(t.basicAuth){const{username:i,password:r}=t.basicAuth;n.headers=n.headers||{},n.headers.Authorization=`'Basic ' + Buffer.from('${i}:${r}').toString('base64')`,p=!0}d&&s.withImports&&e.unshift("import fs from 'fs';");const c=n.headers&&n.headers.Accept&&f(n.headers.Accept)===l.JSON||f(t.postData?.mimeType)===l.JSON;k(t,e,a);const O=$(t,e);return e.push(a,`const ${e.var("resp")} = await fetch(`).push(a+1,"`"+O+(m?"?${"+e.var("query")+"}":"")+"`,").push(a+1,o(h(n,{indent:s.indent,inlineCharacterLimit:25,transform:w({body:!0,authorizationHeader:p})}),{level:a+1,indent:s.indent,firstLine:!1})).push(a,");").blank(),t.allResponseCodes?.includes("204")?(e.push(a,"if (resp.status === 204) {").push(a+1,"console.log('success');").push(a,"} else {"),e.push(a+1,`const ${e.var("data")} = await ${e.var("resp")}.${c?"json()":"text()"};`).push(a+1,`console.log(${e.var("data")});`).push(a,"}")):e.push(a,`const ${e.var("data")} = await ${e.var("resp")}.${c?"json()":"text()"};`).push(a,`console.log(${e.var("data")});`),s.showBoilerplate&&e.push("}").blank().push("run();"),e.join().replace(/"fs\.createReadStream\(\\"(.+)\\"\)"/,'fs.createReadStream("$1")')};function S(t){t.push("/**"),t.push(" * Requires Node.js >= 14"),t.push(" *"),t.push(' * Requires module "node-fetch" >= 2.6.1'),t.push(" * See here for installation details:"),t.push(" * https://www.npmjs.com/package/node-fetch"),t.push(" */"),t.blank()}const E={key:"fetch",title:"Fetch",link:"https://github.com/bitinn/node-fetch",description:"Simplified HTTP node-fetch client"};var P=C;export{P as default,E as info};
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import{getTagOrGroup as d}from"../../models/group.js";import{DEFAULT_WEBHOOKS_TAG_NAME as
|
|
2
|
-
|
|
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 O}from"./markdown.js";import{joinWithSeparator as b}from"../history/helpers.js";const y=["tools","resources","prompts"];function v(r,f,n,o,s){let t;if(o===void 0?t=Object.keys(f):t=o.tags,!Array.isArray(t))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const a=t.map(e=>f[e]?(f[e].used=!0,f[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${o?.name}"`),null)),i=[];for(const e of a){if(!e)continue;const c=d("tag",e,n);if(c.depth=h+1,e.name===""){const m=[...O(T(e,"description")||"",c,c.depth+1),...x(void 0,e,c.depth+1)];i.push(...m);continue}const p=A({definition:r.definition,tag:e,parent:c,schemaDefinitionsTagName:s.schemaDefinitionsTagName}),l=E(r.definition,e,c);c.items=[...p,...l,...O(T(e,"description")||"",c,c.depth+1),...x(c,e,c.depth+1)],i.push(c)}return i.filter(({name:e,items:c})=>e!==g||c.length>0)}function I(r,f,n,o,s){const t=[];for(const a of n){const i=d("group",a,f);i.depth=h,i.items=v(r,o,i,a,s),t.push(i)}return t}function A({definition:r,tag:f,parent:n,schemaDefinitionsTagName:o}){const s=o?[o]:[];return Object.entries(r.components?.schemas||{}).map(([t,a])=>{if(!(a["x-tags"]||s).includes(f.name))return null;const e=d("schema",{name:t,"x-displayName":`${a.title||t}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${t}" /%}`,isSchema:!0,level:2},n);return e.depth=n.depth+1,e}).filter(Boolean)}function E(r,f,n){const o=[];for(const s of y)if(r["x-mcp"]?.[s]){const t=P(s),a=[t];for(const i of r["x-mcp"]?.[s]||[])if((i.tags?.length?i.tags:a).includes(f.name)){const c=b(n.id,k(i.name)),p=s==="tools"?`Tool name: \`${i.name}\`
|
|
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${t.slice(0,-1)} name="${i.name}" id="${c}" /%}`,isSchema:!0,level:2},n);m.depth=n.depth+1,o.push(m)}}return o}function M(r,f){const{definition:n}=r,o={},s=n["x-webhooks"]||n.webhooks,t=n["x-mcp"];for(const a of f||[])o[a.name]={...a,operations:[]};return n.paths&&u(r,n.paths,o),s&&u(r,s,o,!0),t&&j(t,o),o}function j(r,f){for(const n of y)if(r[n])for(const o of r[n]){const s=o.tags&&o.tags.length?o.tags:[P(n)];for(const t of s){let a=f[t];a===void 0&&(a={name:t,operations:[],used:!0},f[t]=a)}}}function $(r,f,n,o,s,t,a,i){if(s.$ref){const{resolved:c}=r.deref(s);u(r,{[o]:c},t,a);return}let e=n?.tags;(!e||!e.length)&&(e=a?[g]:[""]);for(const c of e){let p=t[c];p===void 0&&(p={name:c,operations:[]},t[c]=p),!p["x-traitTag"]&&p.operations.push({...n,pathName:o,pointer:w.compile(["paths",o,f]),httpVerb:f,pathParameters:s.parameters||[],pathServers:s.servers,isWebhook:!!a,isAdditionalOperation:!!i,keywords:n["x-keywords"]})}}function u(r,f,n,o){for(const s of Object.keys(f||{})){const t=f[s],a=Object.keys(t).filter(S);for(const i of a){const e=t[i];$(r,i,e,s,t,n,o)}if(t.additionalOperations)for(const[i,e]of Object.entries(t.additionalOperations))$(r,i,e,s,t,n,o,!0)}}function P(r){return r.charAt(0).toUpperCase()+r.slice(1)}export{P as capitalize,I as getTagGroupsItems,v as getTagsItems,M as getTagsWithOperations,$ as processOperation};
|
package/lib/services/types.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type ExternalLinkSeparator = {
|
|
|
17
17
|
separator?: string;
|
|
18
18
|
separatorLine?: boolean;
|
|
19
19
|
};
|
|
20
|
-
export type MenuItemGroupType = 'group' | 'tag' | 'section' | 'schema' | '
|
|
20
|
+
export type MenuItemGroupType = 'group' | 'tag' | 'section' | 'schema' | 'tool' | 'rsrc' | 'prompt';
|
|
21
21
|
export type MenuItemType = MenuItemGroupType | 'operation';
|
|
22
22
|
/** Generic interface for MenuItems */
|
|
23
23
|
export interface IMenuItem {
|
package/lib/types/open-api.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface OpenAPIDefinition {
|
|
|
16
16
|
name: string;
|
|
17
17
|
tags: Array<string>;
|
|
18
18
|
}>;
|
|
19
|
+
'x-redocly-catalog-key'?: string;
|
|
19
20
|
'x-feedback'?: any;
|
|
20
21
|
'x-schema-catalog-link'?: string;
|
|
21
22
|
'x-keywords'?: unknown;
|
|
@@ -419,6 +420,8 @@ export interface McpResource {
|
|
|
419
420
|
description?: string;
|
|
420
421
|
uri: string;
|
|
421
422
|
mimeType: string;
|
|
423
|
+
blob?: string;
|
|
424
|
+
text?: string;
|
|
422
425
|
security?: OpenAPISecurityRequirement[];
|
|
423
426
|
tags?: string[];
|
|
424
427
|
'x-badges'?: OpenAPIXBadges[];
|
|
@@ -428,9 +431,13 @@ export interface McpPrompt {
|
|
|
428
431
|
title?: string;
|
|
429
432
|
description: string;
|
|
430
433
|
arguments: McpPromptArgument[];
|
|
434
|
+
security?: OpenAPISecurityRequirement[];
|
|
435
|
+
tags?: string[];
|
|
436
|
+
'x-badges'?: OpenAPIXBadges[];
|
|
431
437
|
}
|
|
432
438
|
export interface McpPromptArgument {
|
|
433
439
|
name: string;
|
|
434
440
|
description: string;
|
|
435
441
|
required: boolean;
|
|
442
|
+
example?: string;
|
|
436
443
|
}
|
package/lib/utils/menu.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function p(e){return e.type==="operation"||e.type==="schema"||e.type==="tool"||e.type==="rsrc"||e.type==="prompt"}export{p as isRenderableMenuItem};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/openapi-docs",
|
|
3
|
-
"version": "3.16.0-next.
|
|
3
|
+
"version": "3.16.0-next.6",
|
|
4
4
|
"description": "Redocly OpenAPI Docs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"url-template": "^2.0.8",
|
|
37
37
|
"util": "~0.12.5",
|
|
38
38
|
"web-vitals": "3.3.1",
|
|
39
|
-
"@redocly/config": "0.
|
|
40
|
-
"@redocly/replay": "0.19.0-next.
|
|
39
|
+
"@redocly/config": "0.40.0",
|
|
40
|
+
"@redocly/replay": "0.19.0-next.6"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@jest/globals": "29.5.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@types/react-dom": "^19.1.4",
|
|
55
55
|
"@types/styled-components": "5.1.34",
|
|
56
56
|
"@vitejs/plugin-react": "5.0.4",
|
|
57
|
-
"esbuild": "0.
|
|
57
|
+
"esbuild": "0.27.0",
|
|
58
58
|
"jest": "29.5.0",
|
|
59
59
|
"jest-environment-jsdom": "29.5.0",
|
|
60
60
|
"jest-styled-components": "7.2.0",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"typescript": "5.9.3",
|
|
76
76
|
"url": "~0.11.0",
|
|
77
77
|
"vite": "7.1.9",
|
|
78
|
-
"@redocly/theme": "0.60.0-next.
|
|
78
|
+
"@redocly/theme": "0.60.0-next.5"
|
|
79
79
|
},
|
|
80
80
|
"scripts": {
|
|
81
81
|
"start": "npm run copy-highlight-hook && vite",
|