@redocly/openapi-docs 3.16.0-custom.4 → 3.16.0-custom.5
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 +1690 -1690
- package/lib/components/OperationItem/OperationItem.js +1 -1
- package/lib/components/PayloadSamples/PayloadSamples.js +1 -1
- package/lib/components/PayloadSamples/types.d.ts +1 -0
- package/lib/components/Request/RequestDetails.js +2 -2
- package/lib/components/Request/types.d.ts +1 -1
- package/lib/components/RequestParameters/Body.d.ts +1 -0
- package/lib/components/RequestParameters/Body.js +1 -1
- package/lib/components/RequestParameters/RequestParameters.d.ts +2 -1
- package/lib/components/RequestParameters/RequestParameters.js +1 -1
- package/lib/components/RequestSamples/RequestSamples.js +2 -2
- package/lib/components/RequestSamples/useCodeSamples.d.ts +1 -1
- package/lib/components/RequestSamples/useCodeSamples.js +1 -1
- package/lib/components/ResponseSamples/ResponseSamples.js +1 -1
- package/lib/components/ResponseSamples/Summary.d.ts +2 -1
- package/lib/components/ResponseSamples/Summary.js +1 -1
- package/lib/components/Responses/OperationResponseList.d.ts +1 -0
- package/lib/components/Responses/OperationResponseList.js +2 -2
- package/lib/components/Responses/ResponseDetails.js +1 -1
- package/lib/components/Responses/types.d.ts +1 -0
- package/lib/components/RightPanel/RightPanel.js +3 -3
- package/lib/components/ServerListDropdown/ServerListDropdown.js +1 -1
- package/lib/components/TagItem/OperationsNavigation.js +2 -2
- package/lib/components/common/BodyContent/BodyContent.d.ts +2 -0
- package/lib/components/common/BodyContent/BodyContent.js +4 -4
- package/lib/models/operation.js +1 -1
- package/lib/models/response.js +1 -1
- package/lib/models/types.d.ts +2 -0
- package/lib/services/menu/operation.js +1 -1
- package/lib/services/menu/tags.js +3 -3
- package/lib/services/types.d.ts +1 -0
- package/lib/utils/openapi.d.ts +1 -1
- package/lib/utils/openapi.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t,Fragment as V}from"react/jsx-runtime";import{memo as K,useState as F,useCallback as L,useMemo as j}from"react";import{useAtomValue as g}from"jotai";import{LayoutVariant as $}from"@redocly/config";import{AfterOpenApiOperation as z}from"@redocly/theme/components/OpenApiDocs/hooks/AfterOpenApiOperation";import{BeforeOpenApiOperation as G}from"@redocly/theme/components/OpenApiDocs/hooks/BeforeOpenApiOperation";import{PageActions as J}from"@redocly/theme/components/PageActions/PageActions";import{Feedback as Q}from"@redocly/theme/components/Feedback/Feedback";import{SamplesMiddlePanel as s,SamplesPanel as U,ShareLink as X,Row as W,CustomBadges as Y}from"../common/index.js";import{CallbacksList as Z}from"../Callbacks/index.js";import{CallbackSamples as ee}from"../CallbackSamples/index.js";import{RequestSamples as ae}from"../RequestSamples/index.js";import{OperationResponseList as te}from"../Responses/index.js";import{ResponseSamples as oe}from"../ResponseSamples/index.js";import{makeDeepLink as ne,joinWithSeparator as se}from"../../services/index.js";import{layoutAtom as re,userClaimsAtom as ie}from"../../jotai/app.js";import{globalOptionsAtom as le,globalStoreAtom as ce}from"../../jotai/store.js";import{getOperation as pe}from"../../models/operation.js";import{RenderHook as B}from"../RenderHook/index.js";import{Heading as de,HeadingWrapper as me,Title as ge}from"../common/OperationItemTitle.js";import{LinkToField as ke}from"../common/LinkToField.js";import{RequestDetails as he}from"../Request/RequestDetails.js";import{StyledBadge as H}from"../common/Badges.js";import{useTranslate as ue}from"../../hooks/index.js";import{styled as k}from"../../styled-components.js";import{createPanelToggleEvent as be}from"../../events/index.js";import{SchemaCatalogLink as fe}from"../SchemaCatalogLink/SchemaCatalogLink.js";function Se({item:{operationDefinition:S,parent:v,href:h}}){const r=ue(),{parser:y,options:l}=g(ce),{events:x}=g(le),T=g(ie),n=g(re),[c,I]=F(),{unstable_hooks:C,feedback:p}=l,a=j(()=>pe(y,S,v,l,h,void 0,T),[h,S,l,v,y,T]),{name:
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as V}from"react/jsx-runtime";import{memo as K,useState as F,useCallback as L,useMemo as j}from"react";import{useAtomValue as g}from"jotai";import{LayoutVariant as $}from"@redocly/config";import{AfterOpenApiOperation as z}from"@redocly/theme/components/OpenApiDocs/hooks/AfterOpenApiOperation";import{BeforeOpenApiOperation as G}from"@redocly/theme/components/OpenApiDocs/hooks/BeforeOpenApiOperation";import{PageActions as J}from"@redocly/theme/components/PageActions/PageActions";import{Feedback as Q}from"@redocly/theme/components/Feedback/Feedback";import{SamplesMiddlePanel as s,SamplesPanel as U,ShareLink as X,Row as W,CustomBadges as Y}from"../common/index.js";import{CallbacksList as Z}from"../Callbacks/index.js";import{CallbackSamples as ee}from"../CallbackSamples/index.js";import{RequestSamples as ae}from"../RequestSamples/index.js";import{OperationResponseList as te}from"../Responses/index.js";import{ResponseSamples as oe}from"../ResponseSamples/index.js";import{makeDeepLink as ne,joinWithSeparator as se}from"../../services/index.js";import{layoutAtom as re,userClaimsAtom as ie}from"../../jotai/app.js";import{globalOptionsAtom as le,globalStoreAtom as ce}from"../../jotai/store.js";import{getOperation as pe}from"../../models/operation.js";import{RenderHook as B}from"../RenderHook/index.js";import{Heading as de,HeadingWrapper as me,Title as ge}from"../common/OperationItemTitle.js";import{LinkToField as ke}from"../common/LinkToField.js";import{RequestDetails as he}from"../Request/RequestDetails.js";import{StyledBadge as H}from"../common/Badges.js";import{useTranslate as ue}from"../../hooks/index.js";import{styled as k}from"../../styled-components.js";import{createPanelToggleEvent as be}from"../../events/index.js";import{SchemaCatalogLink as fe}from"../SchemaCatalogLink/SchemaCatalogLink.js";function Se({item:{operationDefinition:S,parent:v,href:h}}){const r=ue(),{parser:y,options:l}=g(ce),{events:x}=g(le),T=g(ie),n=g(re),[c,I]=F(),{unstable_hooks:C,feedback:p}=l,a=j(()=>pe(y,S,v,l,h,void 0,T),[h,S,l,v,y,T]),{name:R,deprecated:_,isWebhook:q,badges:D}=a||{},o=n===$.STACKED,O=p?.type||"sentiment",A=p?.hide!==!0,u=se(l.routingBasePath,a.href),[b,E]=F(null),P=L(m=>{c!==m&&I(m)},[c]),d=L((m,w)=>{if(!w)return;const N=be({operation:a,isExpanded:m,panelType:w});x?.panelToggle?.(N)},[x,a]),M=j(()=>A?e(ve,{children:e(Q,{type:O,settings:p.settings,path:u})}):null,[A,O,p.settings,u]);return t(ye,{layout:n,children:[e(i,{layout:n,children:t(s,{isStacked:o,children:[e(B,{Hook:G||C?.BeforeOperation,props:{operation:a}}),t(me,{children:[t(de,{"data-testid":"operation-item-header",children:[e(X,{to:h,"aria-label":`link to ${R}`}),e(Y,{badges:D,children:R}),_&&e(H,{deprecated:!0,children:r("openapi.badges.deprecated","Deprecated")}),q&&e(H,{children:r("openapi.badges.webhook","Webhook")})]}),e(J,{pageSlug:u})]})]})}),e(s,{isStacked:o,children:e(fe,{schemaRef:"#"+a.pointer})}),t(i,{layout:n,children:[e(s,{isStacked:o,children:e(he,{operation:a,translate:r,onPanelToggle:d})}),e(f,{isStacked:o,"data-testid":"samples-block",className:"panel-container-request-samples",children:e(ae,{operation:a,onPanelToggle:d})})]}),t(i,{layout:n,children:[e(s,{isStacked:o,children:a.responses?.length?e(te,{responses:a.responses,operationId:a.id,operationPointer:a.pointer,callbackId:a.callbackId,activeResponseTab:c,isRpc:a.isRpc,onTabChange:P,onPanelToggle:d}):null}),e(f,{isStacked:o,"data-testid":"samples-block",className:"panel-container-response-samples",children:e(oe,{operation:a,activeResponseTab:c,onTabChange:P,onPanelToggle:d})})]}),t(i,{layout:n,children:[t(s,{isStacked:o,children:[a.callbacks?.length?t(V,{children:[t(ge,{children:[e(ke,{to:ne(a.id,"callbacks")}),r("openapi.callbacks","Callbacks")]}),e(Z,{callbacks:a.callbacks,onExpand:E,selectedCallback:b})]}):null,e(B,{Hook:z||C?.AfterOperation,props:{operation:a}})]}),b?e(f,{isStacked:o,"data-testid":"samples-block",children:e(ee,{callback:b,translate:r})}):null]}),e(i,{layout:n,children:e(s,{isStacked:o,fullWidth:!0,children:M})})]})}const Qe=K(Se),f=k(U)`
|
|
2
2
|
margin-left: auto;
|
|
3
3
|
--code-block-padding: var(--spacing-xs) 0 var(--spacing-xs) 20px;
|
|
4
4
|
`,ve=k.div`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{memo as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{memo as d,useCallback as u}from"react";import{useAtomValue as f}from"jotai";import{SelectOrLabel as y}from"../SelectOrLabel/index.js";import{MediaTypesSwitch as S}from"../MediaTypeSwitch/index.js";import{MimeLabel as h,Select as M}from"../common/index.js";import{MediaTypeSamples as T}from"./MediaTypeSamples.js";import{SelectWrapper as x,StyledCodeBlock as b}from"./styled.js";import{activeMimeNameAtom as v}from"../../jotai/app.js";import{useActivateExample as A,useTranslate as g}from"../../hooks/index.js";function k({onlyDefaultMimeType:l,content:o,isRpc:a,...m}){const n=A(o),p=f(v),r=l&&p,s=g(),i=u(e=>r||a?null:t(x,{children:t(y,{Label:h,Select:M,variant:"dark",fullWidth:!0,...e})}),[r,a]),c=e=>n(e);return o?t(S,{content:o,renderSelect:i,children:e=>t(T,{mediaType:e,...m,onChange:c},"samples")}):t(b,{lang:"text",source:s("openapi.noRequestPayload","No request payload"),header:{controls:!1}})}const D=d(k);export{D as PayloadSamples};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{jsx as e,jsxs as i,Fragment as
|
|
1
|
+
import{jsx as e,jsxs as i,Fragment as A}from"react/jsx-runtime";import{memo as P,useMemo as R}from"react";import{useAtomValue as q}from"jotai";import{Row as D}from"../common/index.js";import{Title as E}from"../common/OperationItemTitle.js";import{LinkToField as F}from"../common/LinkToField.js";import{makeDeepLink as M}from"../../services/index.js";import{Description as N}from"../OperationItem/Description.js";import{Security as T}from"../Security/index.js";import{hasNestedFields as b}from"../../utils/index.js";import{ExpandAllButton as w}from"../ExpandAllButton/index.js";import{RequestParameters as y}from"../RequestParameters/index.js";import{activeMimeNameAtom as C}from"../../jotai/app.js";import{getActiveMediaType as _}from"../../models/mediaContent.js";import{styled as I}from"../../styled-components.js";import{Extensions as L}from"../common/Extensions.js";function H({operation:{id:o,description:m,externalDocs:n,parameters:r,requestBody:t,pointer:f,security:u,extensions:s,callbackId:d,isRpc:a},title:h,translate:x,onPanelToggle:g}){const p=q(C),j=R(()=>{const c=r.some(({schema:l})=>!l.isPrimitive&&!l.isCircular);if(!t?.content||c)return c;const{schema:v}=_(t.content,p)||{};return b(v)},[p,r,t?.content]),k=Object.keys(s||{}).length>0;return i(A,{children:[e(D,{children:i(O,{children:[!a&&i(E,{children:[o&&e(F,{to:M(o,"request")}),h||x?.("openapi.request","Request"),j&&e(w,{operationPointer:f,type:"request",onPanelToggle:g})]}),e(N,{description:m||n?m:void 0,externalDocs:n}),k&&e(L,{extensions:s}),e(T,{securities:u})]})}),e(y,{parameters:r,body:t,operationId:o,callbackId:d,isRpc:a})]})}const O=I.div`
|
|
2
2
|
width: 100%;
|
|
3
|
-
`,
|
|
3
|
+
`,oe=P(H);export{oe as RequestDetails};
|
|
@@ -3,7 +3,7 @@ import type { ReactNode } from 'react';
|
|
|
3
3
|
import type { OperationModel } from '../../models';
|
|
4
4
|
import type { PanelType } from '../../events/types';
|
|
5
5
|
export interface RequestProps {
|
|
6
|
-
operation: Pick<OperationModel, 'security' | 'pointer' | 'description' | 'externalDocs' | 'extensions' | 'parameters' | 'requestBody' | 'id' | 'callbackId'>;
|
|
6
|
+
operation: Pick<OperationModel, 'security' | 'pointer' | 'description' | 'externalDocs' | 'extensions' | 'parameters' | 'requestBody' | 'id' | 'callbackId' | 'isRpc'>;
|
|
7
7
|
title?: string | ReactNode;
|
|
8
8
|
translate?: TFunction;
|
|
9
9
|
onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{memo as s}from"react";import{BodyContent as p}from"../common/BodyContent/index.js";function m({content:e,description:i,required:r,deepLink:t,isRpc:o}){return n(p,{content:e,required:r,description:i,skipReadOnly:e.isRequestType,skipWriteOnly:!e.isRequestType,deepLink:t,isRpc:o,title:o?"Parameters":void 0})}const f=s(m);export{f as Body};
|
|
@@ -5,5 +5,6 @@ export interface ParametersProps {
|
|
|
5
5
|
body?: RequestBodyModel;
|
|
6
6
|
operationId: string;
|
|
7
7
|
callbackId: string;
|
|
8
|
+
isRpc?: boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare function RequestParameters({ body, parameters, operationId, callbackId, }: ParametersProps): ReactElement | null;
|
|
10
|
+
export declare function RequestParameters({ body, parameters, operationId, callbackId, isRpc, }: ParametersProps): ReactElement | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as m,Fragment as k,jsxs as x}from"react/jsx-runtime";import{ParametersGroup as y}from"./ParametersGroup.js";import{Body as _}from"./Body.js";import{makeDeepLink as g}from"../../services/index.js";import{useTranslate as L}from"../../hooks/index.js";const s=["path","query","cookie","header"];function F({body:r,parameters:e=[],operationId:t,callbackId:o,isRpc:f}){const i=L();if(!r&&!e.length)return null;const d={[s[0]]:i("openapi.path","Path"),[s[1]]:i("openapi.query","Query"),[s[2]]:i("openapi.cookie","Cookies"),[s[3]]:i("openapi.header","Headers")},h=(n=>{const u={};return n.forEach(p=>{M(u,p.in,p)}),u})(e),P=e.length>0?s:[],{content:a,description:q,required:A}=r||{};return x(k,{children:[P.map(n=>m(y,{title:d[n],parameters:h[n],deepLink:c(t,o,n)},n)),a&&m(_,{content:a,description:q,required:A,deepLink:c(t,o),isRpc:f})]})}function M(r,e="",t){r[e]||(r[e]=[]),r[e].push(t)}function c(r,e,t="body"){const o=`${e?`${e}/request/${t}`:`request/${t}`}`;return g(r,o)}export{F as RequestParameters};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as o,jsxs as D}from"react/jsx-runtime";import{memo as T,useCallback as L,useMemo as k}from"react";import{useAtomValue as y,useAtom as U}from"jotai";import{PanelHeader as W}from"@redocly/theme/components/Panel/PanelHeader";import{PayloadSamples as B}from"../PayloadSamples/index.js";import{CodeSample as F}from"./CodeSample.js";import{useCodeSamples as H}from"./useCodeSamples.js";import{isPayloadSample as O}from"../../models/index.js";import{createCodeSampleCopyEvent as _,createLanguageSwitchEvent as V}from"../../events/index.js";import{globalStoreAtom as $}from"../../jotai/store.js";import{ServerListDropdown as z}from"../ServerListDropdown/index.js";import{LanguageDropdown as G}from"../Language/index.js";import{activeMimeNameAtom as J,languageAtom as K}from"../../jotai/app.js";import{Replay as A}from"../Replay/index.js";import{CodeBlockPanel as
|
|
1
|
+
import{jsx as o,jsxs as D}from"react/jsx-runtime";import{memo as T,useCallback as L,useMemo as k}from"react";import{useAtomValue as y,useAtom as U}from"jotai";import{PanelHeader as W}from"@redocly/theme/components/Panel/PanelHeader";import{PayloadSamples as B}from"../PayloadSamples/index.js";import{CodeSample as F}from"./CodeSample.js";import{useCodeSamples as H}from"./useCodeSamples.js";import{isPayloadSample as O}from"../../models/index.js";import{createCodeSampleCopyEvent as _,createLanguageSwitchEvent as V}from"../../events/index.js";import{globalStoreAtom as $}from"../../jotai/store.js";import{ServerListDropdown as z}from"../ServerListDropdown/index.js";import{LanguageDropdown as G}from"../Language/index.js";import{activeMimeNameAtom as J,languageAtom as K}from"../../jotai/app.js";import{Replay as A}from"../Replay/index.js";import{CodeBlockPanel as R}from"../common/index.js";import{useActiveWithFallback as Q,useTelemetry as X}from"../../hooks/index.js";import{operationStore as Y}from"../../jotai/operation.js";import{styled as S}from"../../styled-components.js";function Z({operation:e,disableFooter:w,onPanelToggle:v,...p}){const m=X(),[{activeLanguage:P,languages:c},q]=U(K),{samples:n}=H(e),{parser:d,options:{events:l,corsProxyUrl:g,hideReplay:E}}=y($),i=!w&&!e.isWebhook&&!e.isRpc&&!E&&!e.hideReplay,t=!!c?.length,u=Q(n,P),j=a=>{q(a),m.sendSelectLanguageClickedMessage({language:a});const s=c?.find(r=>r.key===a);if(l?.codeSamplesLanguageSwitch&&s){const r=V({operation:e,sample:{lang:s.lang,label:s.title}});l.codeSamplesLanguageSwitch(r)}},h=y(J),{activeExampleName:C}=y(Y(e.pointer)),f=L(({lang:a,title:s})=>()=>{const r=_({operation:e,label:s,lang:a,type:"request",activeMimeName:h,activeExampleName:C});m.sendCopyCodeSnippetClickedMessage({snippetType:"request",language:a}),l?.codeSamplesCopy?.(r)},[e,m,l,h,C]),x=L(a=>{v?.(a,"request-samples")},[v]),b=()=>D(I,{isExpandable:!1,withReplay:!t&&i,children:[o(ee,{operation:e}),t&&o(G,{activeTab:u,samples:n,onChange:j}),!t&&i&&o(A,{operation:e,corsProxyUrl:g,fullOpenApi:d.definition})]}),M=k(()=>{if(i&&t)return o(ae,{children:o(A,{operation:e,corsProxyUrl:g,fullOpenApi:d.definition})})},[i,t,e,g,d.definition]),N=k(()=>n.map(a=>a.key===u?o("div",{children:O(a)?o(B,{isRpc:e.isRpc,content:a.requestBodyContent,onCopyClick:f(a),onPanelToggle:x,...p}):o(F,{lang:a.lang,source:a.source,externalSample:a,operation:e,onCopyClick:f(a),...p})},a.key+e.id):null),[u,f,x,e,p,n]);return c&&!n.length?o(R,{className:"panel-request-samples",header:b,isExpandable:!1,expanded:!1}):n.length?o(R,{className:"panel-request-samples",header:b,footer:M,isExpandable:!1,children:N}):null}const Ce=T(Z),I=S(W)`
|
|
2
2
|
flex-wrap: nowrap;
|
|
3
|
-
${({withReplay:
|
|
3
|
+
${({withReplay:e})=>e&&"padding: var(--spacing-xs) var(--spacing-sm);"}
|
|
4
4
|
`,ee=S(z)`
|
|
5
5
|
padding-right: var(--spacing-base);
|
|
6
6
|
min-width: 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Unstable_ExternalCodeSample } from '../../services/index.js';
|
|
2
2
|
import type { OperationModel } from '../../models/index.js';
|
|
3
3
|
import type { OpenAPIXCodeSample } from '../../types/index.js';
|
|
4
|
-
export declare function useCodeSamples({ payload, isWebhook, definitionSamples, pointer, envVariables, }: OperationModel): {
|
|
4
|
+
export declare function useCodeSamples({ payload, isWebhook, definitionSamples, pointer, envVariables, isRpc, }: OperationModel): {
|
|
5
5
|
samples: Array<{
|
|
6
6
|
key: string;
|
|
7
7
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useAtomValue as
|
|
1
|
+
import{useAtomValue as p}from"jotai";import{getCodeSample as D}from"../../services/index.js";import{globalStoreAtom as K}from"../../jotai/store.js";import{operationStore as k}from"../../jotai/operation.js";import{environmentAtom as E,getLangKey as f,languageAtom as j,activeMimeNameAtom as N}from"../../jotai/app.js";import{useTranslate as O}from"../../hooks/index.js";function H({payload:t,isWebhook:s,definitionSamples:u,pointer:a,envVariables:n,isRpc:i}){const{parser:r,options:{codeSamples:l,generatedSamplesMaxDepth:m}}=p(K),g=p(N),v=p(k(a)),{languages:d}=p(j),[S]=p(E),M=O(),c=new Map(d?.map(({key:e,order:o})=>[e,o])),b=u.filter(e=>c.has(f(e))),y=T(b,n,S),w=new Set(y.map(f));let C=[];if(!s&&!i){const e=l.languages?.filter(({lang:o,label:x})=>o!=="Payload"&&!w.has(f({lang:o,label:x})))||[];C=P(e,l,r.definition,m,v,S,M,g)}const L=[...y,...C],A=d?.find(({lang:e})=>e===t?.lang)?.title,h=t&&f({label:A,lang:t.lang});return t&&(h&&c.has(h)||i)&&L.push({...t,label:A,order:i?0:c.get(h)}),{samples:L.map(e=>{const o=e.label??e.lang;return{key:f(e),title:o,order:typeof c.get(o.toLowerCase())=="number"?c.get(o.toLowerCase()):9999,...e}}).sort((e,o)=>e.order-o.order)}}function P(t,{skipOptionalParameters:s,withOAuth2Call:u},a,n,i,r,l,m){return t.map(({lang:g,label:v,options:d})=>({lang:g,label:v,get:S=>D({...S,lang:g,options:{...d,skipOptionalParameters:s,withOAuth2Call:u,spec:a,generatedPayloadSamplesMaxDepth:n,store:i,activeMimeName:m},environment:r,translate:l})}))}function T(t,s,u){if(!s||!t.length)return t;const a=u?.server;let n={...s.values||{}};return a&&s.serverValues?.[a]&&(n={...n,...s.serverValues[a]}),Object.keys(n).length===0?t:t.map(i=>{const r={...i};return"source"in r&&typeof r.source=="string"&&(r.source=r.source.replace(/\{\{([^}]+)\}\}/g,(l,m)=>n[m]!==void 0?n[m]:l)),r})}export{H as useCodeSamples};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{memo as h,useCallback as i}from"react";import{useAtomValue as n}from"jotai";import{PayloadSamples as v,StyledCodeBlock as R}from"../PayloadSamples/index.js";import{createCodeSampleCopyEvent as k}from"../../events/index.js";import{globalOptionsAtom as T}from"../../jotai/store.js";import{Summary as g}from"./Summary.js";import{Tabs as x}from"../Tabs/index.js";import{CodeBlockPanel as N}from"../common/index.js";import{useTelemetry as A,useTranslate as E}from"../../hooks/index.js";import{activeMimeNameAtom as M}from"../../jotai/app.js";import{operationStore as P}from"../../jotai/operation.js";function j({operation:s,activeResponseTab:d,onTabChange:f,onPanelToggle:m}){const y=s.isRpc,a=A(),{events:p}=n(T),u=E(),C=s.responses.filter(e=>e.content?.hasSample??!1),t=s.responses.map(({code:e})=>({key:e,title:y&&e==="200"?"result":e})),r=t?.find(({key:e})=>e===d)||t?.[0],l=n(M),{activeExampleName:c}=n(P(s.pointer)),S=i(()=>{a.sendCopyCodeSnippetClickedMessage({snippetType:"response"});const e=k({operation:s,type:"response",activeMimeName:l,activeExampleName:c});p?.codeSamplesCopy?.(e)},[a,s,p,l,c]),b=i(e=>{m?.(e,"response-samples")},[m]);return C.length?o(N,{className:"panel-response-samples",header:()=>o(g,{tabs:o(x,{tabs:t,activeTab:r,onChange:e=>f(e.key)}),isRpc:s.isRpc}),isExpandable:!1,children:s.responses.map(e=>e.code===r.key?o("div",{children:e?.content?.hasSample?o(v,{content:e.content,onCopyClick:S,onPanelToggle:b,isRpc:s.isRpc}):o(R,{source:u("openapi.noResponseContent","No content")})},e.code):null)}):null}const K=h(j);export{K as ResponseSamples};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode, ReactElement } from 'react';
|
|
2
2
|
export interface SummaryProps {
|
|
3
3
|
tabs?: ReactNode;
|
|
4
|
+
isRpc?: boolean;
|
|
4
5
|
}
|
|
5
|
-
export declare const Summary: ({ tabs }: SummaryProps) => ReactElement;
|
|
6
|
+
export declare const Summary: ({ tabs, isRpc }: SummaryProps) => ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as a}from"react/jsx-runtime";import{PanelHeader as o}from"@redocly/theme/components/Panel/PanelHeader";import{PanelHeaderTitle as n}from"@redocly/theme/components/Panel/PanelHeaderTitle";import{useTranslate as l}from"../../hooks/index.js";const x=({tabs:s,isRpc:e})=>{const r=l();return a(o,{isExpandable:!1,children:[t(n,{"data-testid":"title",children:r(e?"openapi.result":"openapi.response",e?"Result":"Response")}),s]})};export{x as Summary};
|
|
@@ -9,6 +9,7 @@ interface IOperationResponseList {
|
|
|
9
9
|
callbackId: string;
|
|
10
10
|
renderTitle?: (tab: TabType) => ReactNode;
|
|
11
11
|
activeResponseTab?: string;
|
|
12
|
+
isRpc?: boolean;
|
|
12
13
|
onTabChange?: (key: string) => void;
|
|
13
14
|
onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
|
|
14
15
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as n,jsxs as
|
|
1
|
+
import{jsx as n,jsxs as i,Fragment as A}from"react/jsx-runtime";import{memo as L,useMemo as j}from"react";import{useLocation as w}from"react-router-dom";import{useAtomValue as F}from"jotai";import{Tabs as M,useTabsState as C}from"../Tabs/index.js";import{ResponseDetails as N}from"./ResponseDetails.js";import{makeDeepLink as _}from"../../services/index.js";import{Row as B,StyledTitle as D}from"./styled.js";import{LinkToField as E}from"../common/LinkToField.js";import{pathIncludesLink as f,hasNestedFields as P}from"../../utils/index.js";import{ExpandAllButton as R}from"../ExpandAllButton/index.js";import{useTranslate as S}from"../../hooks/index.js";import{getActiveMediaType as $}from"../../models/index.js";import{activeMimeNameAtom as I}from"../../jotai/app.js";import{styled as O}from"../../styled-components.js";const ne=L(({responses:m,renderTitle:u,operationId:s,operationPointer:d,activeResponseTab:l,isRpc:r,onTabChange:h,callbackId:T,onPanelToggle:b})=>{const p=w(),g=S(),c=F(I),a=m.map(({code:e})=>({key:e,title:r&&e==="200"?"result":e})),k=a.find(({key:e})=>e===l||f(p,s)&&f(p,`c=${e}`)),{activeTab:x,handleTabChange:y}=C({tabs:a,defaultTab:k?.key,onChange:h}),o=a.find(e=>e.key===(l||x)),t=m.find(e=>e.code===o?.key),v=j(()=>{if(!t?.content)return!1;const{schema:e}=$(t?.content,c)||{};return P(e)},[c,t?.content]);return o?i(A,{children:[i(V,{children:[u?.(o)||i(D,{children:[n(E,{to:_(s,`response&c=${o.key}`)}),g("openapi.result",r?"Result":"Responses")]}),n(M,{tabs:a,activeTab:o,onChange:y}),v&&n(R,{type:"response",operationPointer:d,onPanelToggle:b})]}),t?n("div",{children:n(N,{response:t,operationId:s,callbackId:T,isRpc:r})},t.code):null]}):null}),V=O(B)`
|
|
2
2
|
flex-wrap: wrap;
|
|
3
3
|
gap: var(--spacing-unit);
|
|
4
|
-
`;export{
|
|
4
|
+
`;export{ne as OperationResponseList};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o,Fragment as u,jsxs as x}from"react/jsx-runtime";import{memo as k}from"react";import{ResponseHeaders as y}from"./ResponseHeaders.js";import{StyledDescription as i}from"./styled.js";import{BodyContent as $}from"../common/BodyContent/index.js";import{makeDeepLink as h}from"../../services/index.js";function j({response:r,operationId:e,callbackId:s,disableDeepLinks:n,isRpc:t}){const{description:d,headers:c,content:a,summary:f,code:m}=r;return x(u,{children:[o(i,{className:"redoc-markdown",source:f}),o(i,{className:"redoc-markdown",source:d}),o(y,{headers:c,deepLink:n?void 0:p(e,s,m,"headers")}),o($,{content:a,skipWriteOnly:!0,deepLink:n?void 0:p(e,s,m,"body"),isRpc:t})]})}const C=k(j);function p(r,e="",s,n){const t=e?`${e}/response&c=${s}/${n}`:`response&c=${s}/${n}`;return h(r,t)}export{C as ResponseDetails};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{jsx as e,Fragment as
|
|
2
|
-
&:has(${
|
|
1
|
+
import{jsx as e,Fragment as S,jsxs as b}from"react/jsx-runtime";import{useAtomValue as f}from"jotai";import{Panel as o}from"@redocly/theme/components/Panel/Panel";import{Markdown as I}from"@redocly/theme/components/Markdown/Markdown";import{DownloadSpecification as P}from"../Download/index.js";import{Overview as j}from"../Overview/index.js";import{ServerList as O}from"../ServerList/index.js";import{globalStoreAtom as y}from"../../jotai/store.js";import{normalizeServers as v}from"../../utils/index.js";import{LanguageList as M}from"../Language/index.js";import{mergeInMockServer as k}from"../../models/operation.js";import{languageAtom as D}from"../../jotai/app.js";import{useTranslate as E}from"../../hooks/index.js";import{styled as N}from"../../styled-components.js";import{PanelItemsList as A}from"../PanelItem/styled.js";import{useDownloadInfo as _}from"../Download/useDownloadInfo.js";import{McpOverview as F}from"../McpOverview/McpOverview.js";const re=({item:{infoDefinition:n}})=>{const r=E(),{options:{hideDownloadButtons:g,downloadUrls:h,mockServer:u},parser:{definition:a,definitionUrl:t}}=f(y),{languages:i,activeLanguage:w}=f(D),l=_({downloadUrls:h}),p=v(t,k(a.servers||[],u)).sort((c,d)=>c["x-isLive"]&&!d["x-isLive"]?-1:!c["x-isLive"]&&d["x-isLive"]?1:0),x=!!a?.["x-redocly-openrpc"],s=a?.["x-mcp"],L=v(t,s?.servers||a.servers||[]),m=!(Object.keys(a.paths||{}).length>0)&&s;return b(S,{children:[!g&&l&&e(o,{className:"panel-download",header:r("openapi.download.description.title","Download OpenAPI description"),isExpandable:!1,children:e(P,{downloadObjects:l})}),n&&e(R,{className:"panel-overview",header:r("openapi.info.title","Overview"),isExpandable:!1,children:e(I,{children:e(j,{info:n,translate:r})})}),!!s&&e(o,{className:"panel-download",header:r("openapi.mcp.title","MCP server"),isExpandable:!1,children:e(F,{mcpInfo:s,mcpServers:L})}),!!i?.length&&!m&&!x&&e(o,{className:"panel-language-list",header:r("openapi.languages.title","Languages"),isExpandable:!1,children:e(M,{languages:i,activeLanguage:w})}),!!p.length&&!m&&e(o,{className:"panel-servers-list",header:r("openapi.servers.title","Servers"),isExpandable:!1,children:e(O,{servers:p,path:"/",translate:r})})]})},R=N(o)`
|
|
2
|
+
&:has(${A}:empty) {
|
|
3
3
|
display: none;
|
|
4
4
|
}
|
|
5
|
-
`;export{
|
|
5
|
+
`;export{re as RightPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as S}from"react/jsx-runtime";import{useMemo as g,useCallback as c}from"react";import{useAtom as w,useAtomValue as y}from"jotai";import{DropdownMenu as A}from"@redocly/theme/components/Dropdown/DropdownMenu";import{Dropdown as C}from"@redocly/theme/components/Dropdown/Dropdown";import{getOperationColor as b}from"@redocly/theme/core/openapi";import{HttpVerb as k}from"../common/index.js";import{PathWrapper as P,Path as V,StyledCopyButton as j,StyledDropdownMenuItem as x}from"./styled.js";import{PanelItem as D}from"../PanelItem/index.js";import{joinWithSeparator as M}from"../../services/index.js";import{getServerDisplayName as E,replaceVariables as p}from"../../utils/index.js";import{environmentAtom as N}from"../../jotai/app.js";import{useActiveWithFallback as O,useTelemetry as W}from"../../hooks/index.js";import{getServerEnvName as h}from"../../utils/environments.js";import{createTargetServerSwitchEvent as I}from"../../events/index.js";import{globalStoreAtom as R}from"../../jotai/store.js";const $=({operation:r,className:d})=>{const m=W(),[[u],n]=w(N),{options:{events:i}}=y(R),s=O(r.servers.map(t=>({...t,key:t.url})),u.server),l=c(t=>{t.stopPropagation()},[]),a=c(t=>()=>{if(r.servers.length!==1&&(n({environment:h(t)}),m.sendSwitchServersClickedMessage({server:h(t)}),i?.targetServerSwitch&&t)){const o=I({operation:r,serverUrl:t.url});i.targetServerSwitch(o)}},[r,n,m,i]),v=g(()=>r.servers.map(t=>{const o=r.isRpc?p(t):M(p(t),r.path);return e(x,{onAction:a(t),children:e(D,{header:E(t),title:o,actions:[e(j,{data:o,toasterPlacement:"left",onCopyClick:l},o)],active:t.url===s,withCheckmark:!0})},o)}),[r.servers,r.isRpc,r.path,a,l,s]),f=b({isAdditionalOperation:r.isAdditionalOperation,httpVerb:r.httpVerb});return e(C,{className:d,trigger:S(P,{variant:"ghost",children:[e(k,{color:f,children:r.httpVerb}),e(V,{children:r.path})]}),withArrow:!0,children:e(A,{children:v})})};export{$ as ServerListDropdown};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as i,jsxs as y}from"react/jsx-runtime";import{useMemo as
|
|
1
|
+
import{jsx as i,jsxs as y}from"react/jsx-runtime";import{useMemo as E,memo as W,useState as B,useCallback as _}from"react";import{useNavigate as V}from"react-router-dom";import{LayoutVariant as z}from"@redocly/config";import{useAtomValue as D}from"jotai/index";import{SamplesPanel as K}from"../common/index.js";import{layoutAtom as L}from"../../jotai/app.js";import{OperationNavigationItems as p}from"./OperationNavigationItems.js";import{StyledButton as X}from"./styled.js";import{useTranslate as q}from"../../hooks/index.js";import{styled as F}from"../../styled-components.js";import{isRenderableMenuItem as G}from"../../utils/menu.js";const m=8;function H({items:c,routingBasePath:s}){const o=q(),[l,P]=B(!1),h=V(),w=D(L)===z.STACKED,{operations:u,rpcOperations:d,webhooks:f,schemas:g,mcpTools:k,showMoreCount:C,totalCount:b,mcpResources:O,mcpPrompts:x}=E(()=>{const a=c.filter(e=>G(e)),v=l?a:a.slice(0,m),{operations:M,rpcOperations:R,additionalOperations:S,webhooks:T,schemas:A,mcpTools:I,mcpResources:N,mcpPrompts:j}=v.reduce((e,t)=>{if(t.type==="operation"&&t.isWebhook)e.webhooks.push(t);else if(t.type==="operation"){const r=t;r.isRpc?e.rpcOperations.push(r):r.isAdditionalOperation?e.additionalOperations.push(r):e.operations.push(r)}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:[],rpcOperations:[],additionalOperations:[],webhooks:[],schemas:[],mcpTools:[],mcpResources:[],mcpPrompts:[]});return{operations:[...M,...S],rpcOperations:R,schemas:A,mcpTools:I,webhooks:T,mcpResources:N,mcpPrompts:j,showMoreCount:!l&&a.length>m?a.length-m:0,totalCount:a.length}},[l,c]),n=_(a=>h(a),[h]);return b?y(J,{isStacked:w,"data-testid":"operation-navigation-list",children:[g.length>0&&i(p,{items:g,onClick:n,routingBasePath:s,translate:o,title:o("openapi.schemas","Schemas")}),k.length>0&&i(p,{items:k,onClick:n,routingBasePath:s,translate:o,title:o("openapi.mcp.tools","MCP Tools")}),O.length>0&&i(p,{items:O,onClick:n,routingBasePath:s,translate:o,title:o("openapi.mcp.resources","MCP Resources")}),x.length>0&&i(p,{items:x,onClick:n,routingBasePath:s,translate:o,title:o("openapi.mcp.prompts","MCP Prompts")}),d.length>0&&i(p,{items:d,onClick:n,routingBasePath:s,translate:o,title:o("openapi.rpcMethods","RPC methods")}),u.length>0&&i(p,{items:u,onClick:n,routingBasePath:s,translate:o,title:o("openapi.operations","Operations")}),f.length>0&&i(p,{items:f,onClick:n,routingBasePath:s,translate:o,title:o("openapi.webhooks","Webhooks")}),!l&&!!C&&y(X,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>P(!0),children:[o("openapi.actions.show","Show")," ",C," ",o("openapi.actions.more","more"),"..."]})]}):null}const ro=W(H),J=F(K)`
|
|
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{ro as OperationsNavigation,H as OperationsNavigationComponent};
|
|
@@ -6,6 +6,8 @@ interface BodyContentProps {
|
|
|
6
6
|
description?: string | GenericObject;
|
|
7
7
|
content?: MediaContentModel;
|
|
8
8
|
deepLink?: string;
|
|
9
|
+
isRpc?: boolean;
|
|
10
|
+
title?: string;
|
|
9
11
|
}
|
|
10
12
|
export declare const BodyContent: import("react").NamedExoticComponent<BodyContentProps>;
|
|
11
13
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as e,
|
|
1
|
+
import{jsx as e,Fragment as h,jsxs as s}from"react/jsx-runtime";import{memo as k}from"react";import{useAtom as C}from"jotai";import{LinkIcon as q}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{Dropdown as z}from"../Dropdown/index.js";import{RequiredLabel as v}from"../Fields/index.js";import{ConstraintsView as y}from"../ConstraintsView.js";import{Schema as u}from"../../Schema/index.js";import{getActiveMediaType as A}from"../../../models/index.js";import{Markdown as N}from"../../Markdown/index.js";import{activeMimeNameAtom as B}from"../../../jotai/app.js";import{LinkToField as D}from"../LinkToField.js";import{useTranslate as F}from"../../../hooks/index.js";import{styled as x}from"../../../styled-components.js";function O({required:m,skipReadOnly:p,skipWriteOnly:l,description:c,content:r,deepLink:i,isRpc:a,title:d}){const n=F(),[j,w]=C(B);if(!r)return null;const{schema:o,examples:g,operation:f,name:M}=A(r,j),T=r.mediaTypes.map(({name:t})=>({label:t,value:t}));return a&&!d?s(h,{children:[m&&e(v,{children:n("openapi.badges.required","required")}),e(b,{source:c}),o?.type==="object"&&o?.constraints&&e(y,{constraints:o?.constraints||[]}),e(u,{skipReadOnly:p,skipWriteOnly:l,schema:o,examples:g,operation:f,level:1,disableDeepLinks:!i},"schema")]}):s(h,{children:[s(S,{children:[i&&e(D,{to:i}),d||n("openapi.body","Body"),!a&&e(z,{options:T,value:M,triggerVariant:"ghost",triggerSize:"large",onChange:({value:t})=>w(t)})]}),m&&e(v,{children:n("openapi.badges.required","required")}),e(b,{source:c}),o?.type==="object"&&o?.constraints&&e(y,{constraints:o?.constraints||[]}),e(u,{skipReadOnly:p,skipWriteOnly:l,schema:o,examples:g,operation:f,level:1,disableDeepLinks:!i},"schema"),a&&o===void 0?e("em",{children:"No parameters"}):null]})}const U=k(O),b=x(N)`
|
|
2
2
|
margin: var(--spacing-xxs) 0 0;
|
|
3
|
-
`,
|
|
3
|
+
`,S=x.span`
|
|
4
4
|
position: relative;
|
|
5
5
|
display: flex;
|
|
6
6
|
align-items: center;
|
|
@@ -13,7 +13,7 @@ import{jsx as e,jsxs as n,Fragment as x}from"react/jsx-runtime";import{memo as u
|
|
|
13
13
|
padding: var(--spacing-xxs) 0;
|
|
14
14
|
|
|
15
15
|
:hover {
|
|
16
|
-
${
|
|
16
|
+
${q} {
|
|
17
17
|
opacity: 1;
|
|
18
18
|
visibility: visible;
|
|
19
19
|
}
|
|
@@ -24,4 +24,4 @@ import{jsx as e,jsxs as n,Fragment as x}from"react/jsx-runtime";import{memo as u
|
|
|
24
24
|
font-size: var(--font-size-sm);
|
|
25
25
|
line-height: var(--line-height-lg);
|
|
26
26
|
}
|
|
27
|
-
`;export{
|
|
27
|
+
`;export{U as BodyContent};
|
package/lib/models/operation.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as
|
|
1
|
+
import{REDOCLY_TEAMS_RBAC as g}from"@redocly/config";import{removeLeadingSlash as b}from"@redocly/theme/core/openapi";import{configure as v}from"@redocly/theme/ext/configure";import{extractExtensions as q,getOperationId as P,getOperationName as B,getStatusCodeType as E,getValueFromMdParsedExtension as C,isStatusCode as k,JsonPointer as O,mergeParams as V,normalizeServers as f,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 n}from"./security.js";import{getResponse as j}from"./response.js";import{getHref as L}from"../services/menu/operation.js";function $(r){return r.lang==="Payload"&&"requestBodyContent"in r}function i(r,e,t,a,c,u,p,h){const m=e.isWebhook,s={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:m,isRpc:e.isRpc||!!e["x-redocly-openrpc"]||!!r.definition["x-redocly-openrpc"],isAdditionalOperation:e.isAdditionalOperation,isCallback:!!u?.isCallback,isEvent:u?.isCallback||m,name:B(e),defaultExampleName:e.defaultSampleName,[g]:e[g]||t?.[g],type:"operation",callbackId:u?.id,href:c,get callbacks(){return Object.keys(e.callbacks||[]).map(d=>w(r,d,e.callbacks?.[d],s.pointer,a,c,t,p))},get responses(){let d=!1;return Object.keys(e.responses||[]).filter(l=>l==="default"?!0:(E(l,!1,s.isRpc)==="success"&&(d=!0),k(l))).map(l=>j({parser:r,code:l,defaultAsError:d,infoOrRef:e.responses[l],options:a,isEvent:s.isEvent,operation:s}))},get parameters(){return T(r,e,s,a,o)}};if(u?.isCallback)s.security=n(e.security,r),s.servers=f("",e.servers||e.pathServers||[]),s.id=b(c);else{s.id=P(e,t),s.href=s.href||L(s),s.security=n(e.security||r.definition.security,r);const d=e.servers||(e.pathServers?.length?e.pathServers:null)||r.definition.servers||[];s.servers=f(r.definitionUrl,U(d,a.mockServer))}a.showExtensions&&(s.extensions=q(e,a.showExtensions)),s.requestBody=e.requestBody?M({parser:r,infoOrRef:e.requestBody,options:a,operation:s,isEvent:s.isEvent}):void 0;const y=s.requestBody?.content;s.payload={lang:"Payload",source:"",requestBodyContent:y?.hasSample?y:void 0},s.definitionSamples=e["x-codeSamples"]||[],s.badges=e["x-badges"]?.map(({name:d,color:l,position:R})=>({name:d,color:l||"var(--color-info-base)",position:R||"after"}))||[],s.hasSamples=y?.hasSample||s.definitionSamples.length>0,s.hideReplay=e["x-hideReplay"]===!0;const S={userClaims:p,info:r.definition.info||{},operation:{operationId:s.operationId,name:s.name,path:s.path,href:s.href,method:s.httpVerb},servers:s.servers},x=v(S)||{},o=h||x.requestValues||{};return N(s,o),s}function T(r,e,t,a,c){let u=V(r,e.pathParameters,e.parameters,{pathPointer:O.dirName(t.pointer),operationPointer:t.pointer}).map(({paramOrRef:p,pointer:h})=>{const m=F(r,p,h,a,{operation:t,type:"request"});return W(m,c),m});return a.sortRequiredPropsFirst&&(u=A(u)),I(u)}function U(r,e){if(!e)return r;const t={url:e.url,description:e.description};switch(e.position){case"first":return[t,...r];case"last":return[...r,t];case"replace":return[t];default:return r}}export{i as getOperation,$ as isPayloadSample,U as mergeInMockServer};
|
package/lib/models/response.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getStatusCodeType as h,getContentWithLegacyExamples as x,JsonPointer as
|
|
1
|
+
import{getStatusCodeType as h,getContentWithLegacyExamples as x,JsonPointer as a,getValueFromMdParsedExtension as d}from"../utils/index.js";import{getField as C}from"./field.js";import{getMediaContent as j}from"./mediaContent.js";function F({parser:n,code:o,defaultAsError:f,infoOrRef:m,options:p,isEvent:y,operation:s}){const g=!!y,{resolved:t}=n.deref(m),e={code:o};t["x-summary"]!==void 0?(e.summary=d(t,"x-summary"),e.description=d(t,"description")||""):(e.summary=d(t,"description")||"",e.description=""),e.type=h(o,f,s.isRpc);const i=t.headers,c=m.$ref||a.join(s?.pointer||"",["responses",o]);i!==void 0&&(e.headers=Object.keys(i).map(r=>{const l=i[r];return C(n,{...l,name:r},a.join(c,["headers",r]),p,{operation:s,type:"response",response:e})}));const u=x(t);return u!==void 0&&(e.content=j({parser:n,info:u,isRequestType:g,options:p,data:{operation:s,type:"response",response:e,absolutePointer:c}})),e}export{F as getResponse};
|
package/lib/models/types.d.ts
CHANGED
|
@@ -155,6 +155,7 @@ export type OperationModel = {
|
|
|
155
155
|
extensions: GenericObject;
|
|
156
156
|
isCallback: boolean;
|
|
157
157
|
isWebhook: boolean;
|
|
158
|
+
isRpc?: boolean;
|
|
158
159
|
isAdditionalOperation: boolean;
|
|
159
160
|
isEvent: boolean;
|
|
160
161
|
callbackId: string;
|
|
@@ -212,6 +213,7 @@ export type OperationMenuItem = {
|
|
|
212
213
|
httpVerb: string;
|
|
213
214
|
path: string;
|
|
214
215
|
isWebhook: boolean;
|
|
216
|
+
isRpc?: boolean;
|
|
215
217
|
isAdditionalOperation: boolean;
|
|
216
218
|
operationId?: string;
|
|
217
219
|
badges?: OpenAPIXBadges[];
|
|
@@ -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
|
|
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 l(t,i,a){if(i.operations.length===0)return[];const n=[],p=[];for(const e of i.operations){const o=c(e,t),s={id:o,type:"operation",parent:t,operationDefinition:e,depth:a,name:m(e),httpVerb:e.httpVerb,path:e.pathName,items:[],isAdditionalOperation:e.isAdditionalOperation,isWebhook:e.isWebhook,isRpc:e.isRpc||!!e["x-redocly-openrpc"],operationId:e.operationId,badges:e["x-badges"]||[],href:b({id:o}),deprecated:!!e.deprecated,[r]:e[r]||t?.[r]};e.isWebhook?p.push(s):n.push(s)}return[...n.sort((e,o)=>Number(e.deprecated)-Number(o.deprecated)||Number(e.isAdditionalOperation)-Number(o.isAdditionalOperation)),...p.sort((e,o)=>Number(e.deprecated)-Number(o.deprecated))]}function b({id:t}){return d(`/${t}`.toLowerCase())}export{b as getHref,l as getOperationsItems};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{getTagOrGroup as
|
|
1
|
+
import{getTagOrGroup as l}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 A}from"../history/helpers.js";const O=["tools","resources","prompts"];function R(s,f,e,n,i){let t;if(n===void 0?t=Object.keys(f):t=n.tags,!Array.isArray(t))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const c=t.map(o=>f[o]?(f[o].used=!0,f[o]):(console.warn(`Non-existing tag "${o}" is added to the group "${n?.name}"`),null)),r=[];for(const o of c){if(!o)continue;const a=l("tag",o,e);if(a.depth=h+1,o.name===""){const m=[...y(T(o,"description")||"",a,a.depth+1),...x(void 0,o,a.depth+1)];r.push(...m);continue}const p=b({definition:s.definition,tag:o,parent:a,schemaDefinitionsTagName:i.schemaDefinitionsTagName}),d=j(s.definition,o,a);a.items=[...p,...d,...y(T(o,"description")||"",a,a.depth+1),...x(a,o,a.depth+1)],r.push(a)}return r.filter(({name:o,items:a})=>o!==g||a.length>0)}function C(s,f,e,n,i){const t=[];for(const c of e){const r=l("group",c,f);r.depth=h,r.items=R(s,n,r,c,i),t.push(r)}return t}function b({definition:s,tag:f,parent:e,schemaDefinitionsTagName:n}){const i=n?[n]:[];return Object.entries(s.components?.schemas||{}).map(([t,c])=>{if(!(c["x-tags"]||i).includes(f.name))return null;const o=l("schema",{name:t,"x-displayName":`${c.title||t}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${t}" /%}`,isSchema:!0,level:2},e);return o.depth=e.depth+1,o}).filter(Boolean)}function j(s,f,e){const n=[];for(const i of O)if(s["x-mcp"]?.[i]){const t=P(i),c=[t];for(const r of s["x-mcp"]?.[i]||[])if((r.tags?.length?r.tags:c).includes(f.name)){const a=A(e.id,k(r.name)),p=i==="tools"?`Tool name: \`${r.name}\`
|
|
2
2
|
|
|
3
|
-
`:"",m=
|
|
4
|
-
{% mcp${t.slice(0,-1)} name="${
|
|
3
|
+
`:"",m=l(i==="tools"?"tool":i==="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="${a}" /%}`,isSchema:!0,level:2},e);m.depth=e.depth+1,n.push(m)}}return n}function M(s,f){const{definition:e}=s,n={},i=e["x-webhooks"]||e.webhooks,t=e["x-mcp"];for(const c of f||[])n[c.name]={...c,operations:[]};return e.paths&&u(s,e.paths,n),i&&u(s,i,n,!0),t&&v(t,n),n}function v(s,f){for(const e of O)if(s[e])for(const n of s[e]){const i=n.tags&&n.tags.length?n.tags:[P(e)];for(const t of i){let c=f[t];c===void 0&&(c={name:t,operations:[],used:!0},f[t]=c)}}}function $(s,f,e,n,i,t,c,r){if(i.$ref){const{resolved:a}=s.deref(i);u(s,{[n]:a},t,c);return}let o=e?.tags;(!o||!o.length)&&(o=c?[g]:[""]);for(const a of o){let p=t[a];if(p===void 0&&(p={name:a,operations:[]},t[a]=p),p["x-traitTag"])continue;const d=e.isRpc||!!e["x-redocly-openrpc"]||!!s.definition["x-redocly-openrpc"],m=!e.responses[200]?.content?.["application/json"];p.operations.push({...e,pathName:n,pointer:w.compile(["paths",n,f]),httpVerb:d?m?"NOTIF":"CALL":f,pathParameters:i.parameters||[],pathServers:i.servers,isWebhook:!!c,isRpc:d,isAdditionalOperation:!!r,keywords:e["x-keywords"]})}}function u(s,f,e,n){for(const i of Object.keys(f||{})){const t=f[i],c=Object.keys(t).filter(S);for(const r of c){const o=t[r];$(s,r,o,i,t,e,n)}if(t.additionalOperations)for(const[r,o]of Object.entries(t.additionalOperations))$(s,r,o,i,t,e,n,!0)}}function P(s){return s.charAt(0).toUpperCase()+s.slice(1)}export{P as capitalize,C as getTagGroupsItems,R as getTagsItems,M as getTagsWithOperations,$ as processOperation};
|
package/lib/services/types.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export type ExtendedOpenAPIOperation = {
|
|
|
51
51
|
pathParameters: Array<Referenced<OpenAPIParameter>>;
|
|
52
52
|
pathServers: Array<OpenAPIServer> | undefined;
|
|
53
53
|
isWebhook: boolean;
|
|
54
|
+
isRpc?: boolean;
|
|
54
55
|
isAdditionalOperation: boolean;
|
|
55
56
|
defaultSampleName?: string | false;
|
|
56
57
|
keywords?: unknown;
|
package/lib/utils/openapi.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ExtendedOpenAPIOperation, OpenAPIParser } from '../services/index.
|
|
|
3
3
|
import type { FieldModel, GroupModel } from '../models/index.js';
|
|
4
4
|
import { OpenAPIParameter } from '../types/index.js';
|
|
5
5
|
export declare function isStatusCode(statusCode: string): boolean;
|
|
6
|
-
export declare function getStatusCodeType(statusCode: string | number, defaultAsError?: boolean): string;
|
|
6
|
+
export declare function getStatusCodeType(statusCode: string | number, defaultAsError?: boolean, isRpc?: boolean): string;
|
|
7
7
|
export declare function isOperationName(key: string): boolean;
|
|
8
8
|
export declare function getOperationName(operation: ExtendedOpenAPIOperation): string;
|
|
9
9
|
export declare function getOperationId(operation: ExtendedOpenAPIOperation, parent?: GroupModel): string;
|
package/lib/utils/openapi.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{dirname as y}from"path";import f from"url-template";import{deleteEmptyArrayItem as M,isArrayOfObjects as E,isNumeric as T,removeQueryStringAndHash as S,resolveUrl as z,sanitizeItemId as m,normalizeText as b,getValueFromMdParsedExtension as g,isAbsoluteUrl as D}from"./helpers.js";import{DEFAULT_TAG_SLUG as N,MediaTypes as j}from"../constants.js";import{JsonPointer as $}from"./JsonPointer.js";import{joinWithSeparator as _}from"../services/index.js";import{tryDecodeURIComponent as R}from"./string.js";import{getUrlDirname as F}from"./url.js";import{IS_BROWSER as U}from"./dom.js";function P(e){return typeof e=="string"&&/\dxx/i.test(e)}function ne(e){return e==="default"||T(e)||P(e)}function ie(e,r=!1){if(e==="default")return r?"error":"success";let
|
|
1
|
+
import{dirname as y}from"path";import f from"url-template";import{deleteEmptyArrayItem as M,isArrayOfObjects as E,isNumeric as T,removeQueryStringAndHash as S,resolveUrl as z,sanitizeItemId as m,normalizeText as b,getValueFromMdParsedExtension as g,isAbsoluteUrl as D}from"./helpers.js";import{DEFAULT_TAG_SLUG as N,MediaTypes as j}from"../constants.js";import{JsonPointer as $}from"./JsonPointer.js";import{joinWithSeparator as _}from"../services/index.js";import{tryDecodeURIComponent as R}from"./string.js";import{getUrlDirname as F}from"./url.js";import{IS_BROWSER as U}from"./dom.js";function P(e){return typeof e=="string"&&/\dxx/i.test(e)}function ne(e){return e==="default"||T(e)||P(e)}function ie(e,r=!1,t=!1){if(e==="default")return r?"error":"success";if(t)return e==="200"?"success":"error";let n=typeof e=="string"?parseInt(e,10):e;if(P(e)&&(n*=100),n<100||n>599)throw new Error("invalid HTTP code");let i="success";return n>=300&&n<400?i="redirect":n>=400?i="error":n<200&&(i="info"),i}const L={get:!0,post:!0,put:!0,head:!0,patch:!0,delete:!0,options:!0,$ref:!0};function oe(e){return e in L}function ue(e){const{operationId:r,pathName:t}=e,n=b(g(e,"description"));return b(g(e,"summary"))||r||n&&n.substring(0,50)||t||"<no summary>"}function se(e,r){return r?.id?_(r.id,m(e.operationId?e.operationId:l(e.pointer))).toLowerCase():e.tags?.length?m(e.operationId?e.operationId:l(e.pointer)):m(e.operationId?_(N,e.operationId):l(e.pointer))}function l(e){return e?.startsWith("/")?e.slice(1,e.length):e}const A={multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",maxLength:"string",minLength:"string",pattern:"string",contentEncoding:"string",contentMediaType:"string",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",maxProperties:"object",minProperties:"object",required:"object",additionalProperties:"object",unevaluatedProperties:"object",patternProperties:"object",properties:"object"};function ae(e){if(e.type!==void 0&&!Array.isArray(e.type))return e.type;const r=Object.keys(A);for(const t of r){const n=A[t];if(e[t]!==void 0)return n}return"any"}function k(e,r=e.type){if(e["x-circular-ref"]||e["x-complex"])return!0;if(e.oneOf!==void 0||e.anyOf!==void 0||e.if&&e.then||e.if&&e.else)return!1;let t=!0;const n=Array.isArray(r);return(r==="object"||n&&r?.includes("object"))&&(t=e.properties!==void 0?Object.keys(e.properties).length===0:e.additionalProperties===void 0&&e.unevaluatedProperties===void 0&&e.patternProperties===void 0),Array.isArray(e.items)||Array.isArray(e.prefixItems)?!1:(e.items!==void 0&&typeof e.items!="boolean"&&(r==="array"||n&&r?.includes("array"))&&(t=k(e.items,e.items.type)),t)}function q(e){return e.search(/json/i)!==-1}function ce(e){return e?.search(/xml/i)!==-1}function pe(e){return e===j.URL_ENCODED}function fe(e){return e===j.MULTIPART}function c(e,r,t){return Array.isArray(e)?e.map(n=>n.toString()).join(t):typeof e=="object"?Object.keys(e).map(n=>`${n}${t}${e[n]}`).join(t):r+"="+e.toString()}function h(e,r){return Array.isArray(e)?(console.warn("deepObject style cannot be used with array value:"+e.toString()),""):typeof e=="object"?Object.keys(e).map(t=>e[t]?`${r}[${t}]=${e[t]}`:void 0).filter(Boolean).join("&"):(console.warn("deepObject style cannot be used with non-object value:"+e.toString()),"")}function a(e,r,t){const n="__redoc_param_name__",i=r?"*":"";return f.parse(`{?${n}${i}}`).expand({[n]:t}).substring(1).replace(/__redoc_param_name__/g,e)}function w(e,r){const t=e?"*":"",n="__redoc_param_name__",i=f.parse(`{${n}${t}}`);return R(i.expand({[n]:r}))}function me(e,r={}){if(Array.isArray(e))throw new Error("Payload must have fields: "+e.toString());return Object.keys(e).map(t=>{const n=e[t],{style:i="form",explode:o=!0}=r[t]||{};switch(i){case"form":return a(t,o,n);case"spaceDelimited":return c(n,t,"%20");case"pipeDelimited":return c(n,t,"|");case"deepObject":return h(n,t);default:return console.warn("Incorrect or unsupported encoding style: "+i),""}}).join("&")}function W(e,r,t,n){const i=t?"*":"";let o="";r==="label"?o=".":r==="matrix"&&(o=";");const s="__redoc_param_name__";return f.parse(`{${o}${s}${i}}`).expand({[s]:n}).replace(/__redoc_param_name__/g,e)}function H(e,r,t,n){const i=o=>{switch(r){case"form":return a(e,t,o);case"spaceDelimited":return!Array.isArray(o)&&typeof o!="object"?(console.warn("The style spaceDelimited is applicable to arrays or objects"),""):t?a(e,t,o):c(n,e,"%20");case"pipeDelimited":return!Array.isArray(o)&&typeof o!="object"?(console.warn("The style pipeDelimited is applicable to arrays or objects"),""):t?a(e,t,o):c(n,e,"|");case"deepObject":return!t||Array.isArray(o)||typeof o!="object"?(console.warn("The style deepObject is only applicable for objects with explode=true"),""):h(o,e);case"simple":return w(t,n);default:return console.warn("Unexpected style for query: "+r),""}};return E(n)&&(n=M(n).map(o=>i(o))),i(n)}function B(e,r,t){switch(e){case"simple":return w(r,t);default:return console.warn("Unexpected style for header: "+e),""}}function C(e,r,t,n){switch(r){case"form":return a(e,t,n);default:return console.warn("Unexpected style for cookie: "+r),""}}function O(e,r){return q(r)?JSON.stringify(e):(console.warn(`Parameter serialization as ${r} is not supported`),"")}function le(e,r){const{name:t,style:n,explode:i=!1,serializationMime:o}=e;if(o)switch(e.in){case"path":case"header":return O(r,o);case"cookie":case"query":return`${t}=${O(r,o)}`;default:return console.warn("Unexpected parameter location: "+e.in),""}if(!n)return console.warn(`Missing style attribute or content for parameter ${t}`),"";switch(e.in){case"path":return W(t,n,i,r);case"query":return H(t,n,i,r);case"header":return B(n,i,r);case"cookie":return C(t,n,i,r);default:return console.warn("Unexpected parameter location: "+e.in),""}}function de(e){return e.search(/xml/i)!==-1?"xml":"clike"}const I=/^#\/components\/(schemas|pathItems)\/([^/]+)$/;function xe(e){return I.test(e||"")}function ye(e){return e?.match(I)?.pop()}function G(e){if(e===void 0)return;const r=e.toString(10);return/^0\.0*1$/.test(r)?`decimal places <= ${r.split(".")[1].length}`:`multiple of ${r}`}function d(e,r,t){let n;return r!==void 0&&t!==void 0?r===t?n=`= ${r} ${e}`:n=`[ ${r} .. ${t} ] ${e}`:t!==void 0?n=`<= ${t} ${e}`:r!==void 0&&(r===1?n="non-empty":n=`>= ${r} ${e}`),n}function J(e){const r=typeof e.exclusiveMinimum=="number"?Math.min(e.exclusiveMinimum,e.minimum??1/0):e.minimum,t=typeof e.exclusiveMaximum=="number"?Math.max(e.exclusiveMaximum,e.maximum??-1/0):e.maximum,n=typeof e.exclusiveMinimum=="number"||e.exclusiveMinimum,i=typeof e.exclusiveMaximum=="number"||e.exclusiveMaximum;if(r!==void 0&&t!==void 0)return`${n?"( ":"[ "}${r} .. ${t}${i?" )":" ]"}`;if(t!==void 0)return`${i?"< ":"<= "}${t}`;if(r!==void 0)return`${n?"> ":">= "}${r}`}function be(e){const r=[],t=d("characters",e.minLength,e.maxLength);t!==void 0&&r.push(t);const n=d("items",e.minItems,e.maxItems);n!==void 0&&r.push(n);const i=d(e.minProperties===1&&e.maxProperties===1?"property":"properties",e.minProperties,e.maxProperties);i!==void 0&&r.push(i);const o=G(e.multipleOf);o!==void 0&&r.push(o);const s=J(e);return s!==void 0&&r.push(s),e.uniqueItems&&r.push("unique"),r}function ge(e,r=[]){const t=[],n=[],i=[];return e.forEach(o=>{o.required?r.includes(o.name)?n.push(o):i.push(o):t.push(o)}),n.sort((o,s)=>r.indexOf(o.name)-r.indexOf(s.name)),[...n,...i,...t]}function je(e){return e.sort((r,t)=>Number(r.deprecated)-Number(t.deprecated))}function $e(e,r=[],t=[],{pathPointer:n,operationPointer:i}){const o={};if(!Array.isArray(t))return[];t.forEach(u=>{({resolved:u}=e.deref(u)),o[u.name+"_"+u.in]=!0});const s=r.map((u,p)=>({paramOrRef:u,pointer:$.join(n,["parameters",String(p)])})).filter(({paramOrRef:u})=>({resolved:u}=e.deref(u),!o[u.name+"_"+u.in])),x=t.map((u,p)=>({paramOrRef:u,pointer:$.join(i,["parameters",String(p)])}));return[...s,...x]}function _e(e,r){const n=e===void 0?S((()=>{if(!U)return globalThis.SSR_HOSTNAME||"";const i=window.location.href;return i.endsWith(".html")?y(i):i})()):D(e)?F(e):y(e);return r.length===0&&(r=[{url:"/"}]),r.map(i=>({...i,url:n?z(n,i.url):i.url,description:i.description||""}))}const Pe=e=>({delete:"del",options:"opts"})[e]||e;function Q(e){return e in{"x-circular-ref":!0,"x-complex":!0,"x-parentRefs":!0,"x-refsStack":!0,"x-codeSamples":!0,"x-displayName":!0,"x-examples":!0,"x-logo":!0,"x-nullable":!0,"x-servers":!0,"x-tagGroups":!0,"x-traitTag":!0,"x-additionalPropertiesName":!0,"x-explicitMappingOnly":!0,"x-enumDescriptions":!0,"x-badges":!0,"x-hideReplay":!0,"x-feedback":!0,"x-assertionType":!0,"x-rbac":!0}||e.startsWith("x-parsed-md-")}function Ae(e,r){return Object.keys(e).filter(t=>r===!0?t.startsWith("x-")&&!Q(t):t.startsWith("x-")&&r.indexOf(t)>-1).reduce((t,n)=>(t[n]=e[n],t),{})}function he(e){return e.split(" or ").map(r=>r.replace(/^(string|object|number|integer|array|boolean)s?( ?.*)/,"$1s$2")).join(" or ")}function we(e){let r=e.content;const t=e["x-examples"],n=e["x-example"];if(t){r={...r};for(const i of Object.keys(t)){const o=t[i];r[i]={...r[i],examples:o}}}else if(n){r={...r};for(const i of Object.keys(n)){const o=n[i];r[i]={...r[i],example:o}}}return r}export{ae as detectType,Ae as extractExtensions,we as getContentWithLegacyExamples,ye as getDefinitionName,se as getOperationId,ue as getOperationName,ie as getStatusCodeType,be as humanizeConstraints,J as humanizeNumberRange,pe as isFormUrlEncoded,q as isJsonLike,fe as isMultipartFormData,xe as isNamedDefinition,oe as isOperationName,k as isPrimitiveType,Q as isRedocExtension,ne as isStatusCode,ce as isXmlLike,de as langFromMime,$e as mergeParams,_e as normalizeServers,he as pluralizeType,le as serializeParameterValue,O as serializeParameterValueWithMime,H as serializeQueryParameter,Pe as shortenHTTPVerb,je as sortByDeprecated,ge as sortByRequired,me as urlFormEncodePayload};
|