@redocly/openapi-docs 3.15.0-rc.6 → 3.15.0
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 +4324 -3482
- package/lib/components/ApiInfo/ApiInfo.js +1 -1
- package/lib/components/ApiInfo/Metadata.js +1 -1
- package/lib/components/ContentItem/ContentItem.js +1 -1
- package/lib/components/Discriminator/DefaultMappingOption.d.ts +5 -0
- package/lib/components/Discriminator/DefaultMappingOption.js +15 -0
- package/lib/components/Discriminator/Discriminator.js +16 -2
- package/lib/components/Download/DownloadSpecification.js +2 -2
- package/lib/components/ExpandAllButton/ExpandAllButton.js +1 -1
- package/lib/components/Language/LanguageList.js +1 -1
- package/lib/components/McpOverview/McpOverview.js +3 -7
- package/lib/components/McpTool/McpTool.d.ts +1 -1
- package/lib/components/McpTool/McpTool.js +1 -1
- package/lib/components/McpTool/index.d.ts +0 -2
- package/lib/components/McpTool/index.js +1 -1
- package/lib/components/Overview/Overview.js +1 -1
- package/lib/components/PanelItem/styled.js +5 -9
- package/lib/components/RedoclyOpenAPIDocs/Providers.js +1 -1
- package/lib/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.js +1 -1
- package/lib/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocsStandalone.js +1 -1
- package/lib/components/RedoclyOpenAPIDocs/styled.js +6 -2
- package/lib/components/RedoclyOpenAPIDocs/types.d.ts +3 -0
- package/lib/components/Replay/Replay.js +1 -1
- package/lib/components/RequestSamples/Example.js +1 -1
- package/lib/components/RequestSamples/RequestSamples.js +1 -1
- package/lib/components/RightPanel/RightPanel.js +1 -5
- package/lib/components/Samples/ExampleSwitch.js +1 -1
- package/lib/components/SchemaCatalogLink/tests/SchemaCatalogLink.test.js +1 -1
- package/lib/components/SectionContent/SectionContent.js +4 -4
- package/lib/components/ServerList/ServerList.js +11 -11
- package/lib/components/ServerListDropdown/ServerListDropdown.js +1 -1
- package/lib/components/SideMenu/hooks/useMenuItems.js +1 -1
- package/lib/components/TagItem/OperationsNavigation.js +2 -2
- package/lib/components/TagItem/TagItem.js +6 -7
- package/lib/components/common/Dropdown/Dropdown.d.ts +3 -3
- package/lib/components/common/Dropdown/Dropdown.js +9 -9
- package/lib/components/common/Fields/fields.js +3 -5
- package/lib/components/common/SchemaSelection/SchemaSelection.d.ts +2 -2
- package/lib/components/common/SchemaSelection/SchemaSelection.js +1 -1
- package/lib/hooks/index.d.ts +1 -1
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/useRouter.js +1 -1
- package/lib/icons/DefaultMappingIcon/DefaultMappingIcon.d.ts +4 -0
- package/lib/icons/DefaultMappingIcon/DefaultMappingIcon.js +8 -0
- package/lib/icons/DefaultMappingIcon/index.d.ts +1 -0
- package/lib/icons/DefaultMappingIcon/index.js +1 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -1
- package/lib/models/group.js +1 -1
- package/lib/models/mediaType.js +1 -1
- package/lib/models/schema.d.ts +2 -1
- package/lib/models/schema.js +2 -2
- package/lib/models/types.d.ts +2 -0
- package/lib/services/menu/builder.js +1 -1
- package/lib/services/menu/markdown.js +1 -1
- package/lib/services/menu/tags.js +2 -4
- package/lib/services/types.d.ts +2 -7
- package/lib/standalone.js +1 -1
- package/lib/types/open-api.d.ts +3 -13
- package/lib/utils/loadAndBundleSpec.js +1 -1
- package/lib/utils/mcp.d.ts +1 -1
- package/lib/utils/mcp.js +1 -1
- package/lib/utils/menu.js +1 -1
- package/lib/utils/openapi.js +1 -1
- package/lib/utils/string.js +1 -1
- package/package.json +11 -9
- package/lib/components/McpTool/McpPrompt.d.ts +0 -6
- package/lib/components/McpTool/McpPrompt.js +0 -9
- package/lib/components/McpTool/McpResource.d.ts +0 -7
- package/lib/components/McpTool/McpResource.js +0 -14
- package/lib/components/RedoclyOpenAPIDocs/Error.d.ts +0 -3
- package/lib/components/RedoclyOpenAPIDocs/Error.js +0 -25
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as r,jsxs as
|
|
1
|
+
import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useMemo as O,memo as M,useState as A,useCallback as N}from"react";import{useNavigate as j}from"react-router-dom";import{LayoutVariant as E}from"@redocly/config";import{useAtomValue as I}from"jotai/index";import{SamplesPanel as P}from"../common/index.js";import{layoutAtom as W}from"../../jotai/app.js";import{OperationNavigationItems as l}from"./OperationNavigationItems.js";import{StyledButton as B}from"./styled.js";import{useTranslate as _}from"../../hooks/index.js";import{styled as R}from"../../styled-components.js";import{isRenderableMenuItem as V}from"../../utils/menu.js";const p=8;function z({items:m,routingBasePath:n}){const o=_(),[a,x]=A(!1),c=j(),C=I(W)===E.STACKED,{operations:h,webhooks:u,schemas:f,mcpTools:d,showMoreCount:g,totalCount:y}=O(()=>{const e=m.filter(s=>V(s)),w=a?e:e.slice(0,p),{operations:b,webhooks:v,schemas:S,mcpTools:T}=w.reduce((s,t)=>(t.type==="operation"&&t.isWebhook?s.webhooks.push(t):t.type==="operation"?s.operations.push(t):t.type==="schema"?s.schemas.push(t):t.type==="mcp"&&s.mcpTools.push(t),s),{operations:[],webhooks:[],schemas:[],mcpTools:[]});return{operations:b,schemas:S,mcpTools:T,webhooks:v,showMoreCount:!a&&e.length>p?e.length-p:0,totalCount:e.length}},[a,m]),i=N(e=>c(e),[c]);return y?k(D,{isStacked:C,"data-testid":"operation-navigation-list",children:[f.length>0&&r(l,{items:f,onClick:i,routingBasePath:n,translate:o,title:o("openapi.schemas","Schemas")}),d.length>0&&r(l,{items:d,onClick:i,routingBasePath:n,translate:o,title:o("openapi.mcp.tools","MCP Tools")}),h.length>0&&r(l,{items:h,onClick:i,routingBasePath:n,translate:o,title:o("openapi.operations","Operations")}),u.length>0&&r(l,{items:u,onClick:i,routingBasePath:n,translate:o,title:o("openapi.webhooks","Webhooks")}),!a&&!!g&&k(B,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>x(!0),children:[o("openapi.actions.show","Show")," ",g," ",o("openapi.actions.more","more"),"..."]})]}):null}const oo=M(z),D=R(P)`
|
|
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{oo as OperationsNavigation,z as OperationsNavigationComponent};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as a,jsxs as t}from"react/jsx-runtime";import{memo as u,useCallback as v}from"react";import{useNavigate as x}from"react-router-dom";import{useAtomValue as k}from"jotai";import{LayoutVariant as b}from"@redocly/config";import{Markdown as S}from"@redocly/theme/components/Markdown/Markdown";import{breakpoints as w}from"@redocly/theme/core/openapi";import{Button as y}from"@redocly/theme/components/Button/Button";import{PageActions as M}from"@redocly/theme/components/PageActions/PageActions";import{H2 as T}from"@redocly/theme/components/Typography/H2";import{LinkIcon as $}from"@redocly/theme/icons/LinkIcon/LinkIcon";import{joinWithSeparator as j}from"../../services/history/helpers.js";import{Row as C,SamplesMiddlePanel as I,SamplesPanel as A,ShareLink as P}from"../common/index.js";import{Markdown as W}from"../Markdown/index.js";import{OperationsNavigation as B}from"./OperationsNavigation.js";import{layoutAtom as L}from"../../jotai/app.js";import{useTranslate as D}from"../../hooks/index.js";import{styled as r}from"../../styled-components.js";function H({item:o,routingBasePath:e="",isExpanded:m}){const l=D(),{description:c,name:s,href:g}=o,p=x(),d=k(L),i=j(e,o.href),f=v(()=>{p(i)},[p,i]),n=!!o.items.length,h=d===b.STACKED;return t(N,{expanded:m,children:[t(C,{layout:d,children:[t(I,{fullWidth:!n,isStacked:h,children:[t(_,{children:[a(P,{to:g,"aria-label":`link to ${s}`}),s,a(M,{pageSlug:i})]}),a(W,{source:c})]}),n&&a(B,{items:o.items,routingBasePath:e})]}),n&&!m&&t(V,{type:"button",variant:"text",size:"medium",onClick:f,children:["+ ",l("openapi.actions.show","Show")]})]})}const no=u(H),N=r.div`
|
|
2
2
|
padding-top: var(--spacing-lg);
|
|
3
3
|
padding-bottom: ${({expanded:o})=>o?"var(--spacing-xxl)":""};
|
|
4
4
|
|
|
@@ -7,22 +7,22 @@ import{jsx as t,jsxs as a}from"react/jsx-runtime";import{memo as u,useCallback a
|
|
|
7
7
|
E.g. SchemaDefinition, McpTool
|
|
8
8
|
padding is added by the TagItem itself
|
|
9
9
|
*/
|
|
10
|
-
${
|
|
10
|
+
${S} ${A} {
|
|
11
11
|
padding-left: 0;
|
|
12
12
|
padding-right: 0;
|
|
13
13
|
}
|
|
14
|
-
`,V=
|
|
14
|
+
`,V=r(y)`
|
|
15
15
|
margin: var(--spacing-md) var(--spacing-xl) var(--spacing-xxs);
|
|
16
16
|
width: calc(100% - var(--spacing-xl) * 2);
|
|
17
17
|
|
|
18
|
-
@media screen and (min-width: ${
|
|
18
|
+
@media screen and (min-width: ${w.medium}) {
|
|
19
19
|
--button-margin-md: calc(var(--spacing-xl) * 2);
|
|
20
20
|
|
|
21
21
|
margin-left: var(--button-margin-md);
|
|
22
22
|
margin-right: var(--button-margin-md);
|
|
23
23
|
width: calc(100% - var(--button-margin-md) * 2);
|
|
24
24
|
}
|
|
25
|
-
`,_=
|
|
25
|
+
`,_=r(T)`
|
|
26
26
|
display: flex;
|
|
27
27
|
:hover {
|
|
28
28
|
${$} {
|
|
@@ -30,5 +30,4 @@ import{jsx as t,jsxs as a}from"react/jsx-runtime";import{memo as u,useCallback a
|
|
|
30
30
|
visibility: visible;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
`;export{ro as TagItem,H as TagItemComponent};
|
|
33
|
+
`;export{no as TagItem,H as TagItemComponent};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SegmentedOption } from '@redocly/theme/core/openapi';
|
|
2
2
|
export interface DropdownProps<T> {
|
|
3
3
|
value: T;
|
|
4
|
-
onChange: ({ label, value }:
|
|
5
|
-
options:
|
|
4
|
+
onChange: ({ label, value }: SegmentedOption<T>) => void;
|
|
5
|
+
options: SegmentedOption<T>[];
|
|
6
6
|
className?: string;
|
|
7
7
|
triggerVariant?: 'ghost' | 'outlined';
|
|
8
8
|
triggerSize?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{jsx as r,
|
|
1
|
+
import{jsx as r,jsxs as s,Fragment as f}from"react/jsx-runtime";import g,{useMemo as k,useState as C}from"react";import{Dropdown as D}from"@redocly/theme/components/Dropdown/Dropdown";import{CheckmarkIcon as I}from"@redocly/theme/icons/CheckmarkIcon/CheckmarkIcon";import{DropdownMenu as j}from"@redocly/theme/components/Dropdown/DropdownMenu";import{DropdownMenuItem as z}from"@redocly/theme/components/Dropdown/DropdownMenuItem";import{Button as M}from"@redocly/theme/components/Button/Button";import{SearchIcon as F}from"@redocly/theme/icons/SearchIcon/SearchIcon";import{typedMemo as N}from"@redocly/theme/core/openapi";import{styled as n}from"../../../styled-components.js";import{useTranslate as A}from"../../../hooks/index.js";function P({options:t,value:o,onChange:d,className:v,triggerVariant:x="outlined",triggerSize:b="small",withSearch:w=!1}){const[l,h]=C(""),m=A(),a=t.find(e=>e.value===o),p=k(()=>t.filter(e=>e.label?.toLowerCase().includes(l.toLowerCase())??!1),[t,l]);if(t.length===1)return r(V,{children:a?.element||a?.label});const y=e=>{h(e.target.value)},S=()=>w?s(f,{children:[r(R,{prefix:r(L,{children:r(F,{color:"var(--icon-color-additional)",onClick:e=>e.stopPropagation()})}),content:r(O,{placeholder:m("openapi.discriminator.searchPlaceholder","Search items"),onClick:e=>e.stopPropagation(),onChange:y,value:l})}),r(_,{children:p.length?p.map((e,c)=>s(g.Fragment,{children:[e.divider,r(i,{active:e.value===o,onAction:()=>d(e),suffix:e.value===o&&r(u,{}),children:e.element||e.label},e.label)]},c)):r(T,{content:m("openapi.discriminator.searchNoResults","No items found")})})]}):r(f,{children:t.map((e,c)=>s(g.Fragment,{children:[e.divider,r(i,{active:e.value===o,onAction:()=>d(e),suffix:e.value===o&&r(u,{}),children:e.element||e.label},e.label)]},c))});return r(D,{className:v,trigger:r(M,{variant:x,size:b,type:"button",children:a?.element||a?.label}),withArrow:!0,onClose:()=>h(""),children:r(j,{children:S()})})}const Y=N(P),u=n(I)`
|
|
2
2
|
width: 16px;
|
|
3
3
|
height: 16px;
|
|
4
4
|
margin-left: auto;
|
|
5
|
-
`,
|
|
5
|
+
`,i=n(z)`
|
|
6
6
|
--dropdown-menu-item-justify-content: space-between;
|
|
7
7
|
|
|
8
8
|
width: 100%;
|
|
@@ -12,23 +12,23 @@ import{jsx as r,Fragment as p,jsxs as w}from"react/jsx-runtime";import{useMemo a
|
|
|
12
12
|
padding: var(--spacing-xxs) var(--spacing-sm);
|
|
13
13
|
font-size: var(--font-size-base);
|
|
14
14
|
line-height: var(--line-height-base);
|
|
15
|
-
`,
|
|
15
|
+
`,R=n(i)`
|
|
16
16
|
gap: 0;
|
|
17
17
|
padding: var(--spacing-xxs) var(--spacing-xs);
|
|
18
18
|
&:hover {
|
|
19
19
|
background-color: transparent;
|
|
20
20
|
}
|
|
21
|
-
`,
|
|
21
|
+
`,T=n(i)`
|
|
22
22
|
height: 66px;
|
|
23
23
|
justify-content: center;
|
|
24
24
|
&:hover,
|
|
25
25
|
&:focus-visible {
|
|
26
26
|
background-color: transparent;
|
|
27
27
|
}
|
|
28
|
-
`,
|
|
28
|
+
`,_=n.div`
|
|
29
29
|
overflow-y: auto;
|
|
30
30
|
max-height: 300px;
|
|
31
|
-
`,
|
|
31
|
+
`,L=n.div`
|
|
32
32
|
display: flex;
|
|
33
33
|
align-items: center;
|
|
34
34
|
justify-content: center;
|
|
@@ -36,7 +36,7 @@ import{jsx as r,Fragment as p,jsxs as w}from"react/jsx-runtime";import{useMemo a
|
|
|
36
36
|
height: 24px;
|
|
37
37
|
cursor: pointer;
|
|
38
38
|
flex-shrink: 0;
|
|
39
|
-
`,
|
|
39
|
+
`,O=n.input`
|
|
40
40
|
width: 100%;
|
|
41
41
|
border: none;
|
|
42
42
|
outline: none;
|
|
@@ -51,7 +51,7 @@ import{jsx as r,Fragment as p,jsxs as w}from"react/jsx-runtime";import{useMemo a
|
|
|
51
51
|
&::placeholder {
|
|
52
52
|
color: var(--search-trigger-color);
|
|
53
53
|
}
|
|
54
|
-
`,
|
|
54
|
+
`,V=n.span`
|
|
55
55
|
margin-right: var(--spacing-unit);
|
|
56
56
|
cursor: default;
|
|
57
57
|
background: none;
|
|
@@ -62,4 +62,4 @@ import{jsx as r,Fragment as p,jsxs as w}from"react/jsx-runtime";import{useMemo a
|
|
|
62
62
|
line-height: var(--line-height-lg);
|
|
63
63
|
font-family: var(--font-family-base);
|
|
64
64
|
font-weight: var(--font-weight-regular);
|
|
65
|
-
`;export{
|
|
65
|
+
`;export{Y as Dropdown};
|
|
@@ -7,7 +7,7 @@ import{Button as t}from"@redocly/theme/components/Button/Button";import{styled a
|
|
|
7
7
|
color: var(--schema-type-text-color);
|
|
8
8
|
`,d=r(o)`
|
|
9
9
|
color: var(--schema-type-text-color);
|
|
10
|
-
`,
|
|
10
|
+
`,m=r(o)`
|
|
11
11
|
color: var(--schema-type-title-text-color);
|
|
12
12
|
word-break: break-word;
|
|
13
13
|
`,c=r(o).attrs({as:"div"})`
|
|
@@ -16,7 +16,7 @@ import{Button as t}from"@redocly/theme/components/Button/Button";import{styled a
|
|
|
16
16
|
line-height: var(--schema-labels-line-height);
|
|
17
17
|
font-weight: normal;
|
|
18
18
|
display: block;
|
|
19
|
-
`,
|
|
19
|
+
`,p=r(o)`
|
|
20
20
|
color: var(--schema-property-required-label-text-color);
|
|
21
21
|
font-size: var(--font-size-base);
|
|
22
22
|
line-height: var(--line-height-base);
|
|
@@ -32,8 +32,6 @@ import{Button as t}from"@redocly/theme/components/Button/Button";import{styled a
|
|
|
32
32
|
color: var(--text-color-secondary);
|
|
33
33
|
display: inline-flex;
|
|
34
34
|
word-break: var(--code-word-break);
|
|
35
|
-
align-items: center;
|
|
36
|
-
gap: var(--spacing-xxs);
|
|
37
35
|
`,v=r(e)`
|
|
38
36
|
color: var(--schema-property-access-label-text-color);
|
|
39
37
|
background-color: var(--bg-color);
|
|
@@ -91,4 +89,4 @@ import{Button as t}from"@redocly/theme/components/Button/Button";import{styled a
|
|
|
91
89
|
padding: 0;
|
|
92
90
|
font-size: var(--font-size-sm);
|
|
93
91
|
line-height: var(--line-height-sm);
|
|
94
|
-
`;export{v as AccessLabel,b as AdditionalPropertiesLabel,u as ConstraintItem,x as DefaultValue,g as EnumValue,l as ExampleValue,f as ExtensionValue,o as FieldLabel,a as FieldValueLabel,c as PropertyLabel,h as RecursiveLabel,
|
|
92
|
+
`;export{v as AccessLabel,b as AdditionalPropertiesLabel,u as ConstraintItem,x as DefaultValue,g as EnumValue,l as ExampleValue,f as ExtensionValue,o as FieldLabel,a as FieldValueLabel,c as PropertyLabel,h as RecursiveLabel,p as RequiredLabel,e as Tag,y as ToggleButton,d as TypeName,i as TypePrefix,m as TypeTitle};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SegmentedOption } from '@redocly/theme/core/openapi';
|
|
2
2
|
import type { SchemaModel } from '../../../models/index.js';
|
|
3
3
|
interface SchemaSelectionProps {
|
|
4
|
-
options:
|
|
4
|
+
options: SegmentedOption<number>[];
|
|
5
5
|
onChange?: (idx: number) => void;
|
|
6
6
|
pointer: string;
|
|
7
7
|
schema: SchemaModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as m}from"react/jsx-runtime";import{useCallback as h,useEffect as v,useRef as A,useState as T}from"react";import{useAtom as g}from"jotai";import{
|
|
1
|
+
import{jsx as m}from"react/jsx-runtime";import{useCallback as h,useEffect as v,useRef as A,useState as T}from"react";import{useAtom as g}from"jotai";import{isUndefined as w}from"@redocly/theme/core/openapi";import{Segmented as I}from"@redocly/theme/components/Segmented/Segmented";import{Dropdown as x}from"../Dropdown/index.js";import{operationStore as y}from"../../../jotai/operation.js";const L=5,R=7;function _({options:t,onChange:r,pointer:u,schema:n,defaultOneOfIdx:d}){const[S,c]=g(y(u)),p=S.activeOneOf[n.pointer]??d,o=t[p]?.value,[i,E]=T(!1),s=A(null);v(()=>{if(!s.current)return;const e=()=>{const O=s.current?.querySelectorAll('button[role="tab"]'),a=Array.from(O||[]).some(l=>l.offsetWidth<l.scrollWidth);a!==i&&E(a)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[i,t]);const f=h(({value:e})=>{e!==void 0&&(r?r(e):c({activeExampleName:n.oneOf?.[e]?.title,activeOneOf:{[n.pointer]:e},requestValues:{body:null}}))},[r,n.oneOf,n.pointer,c]);return w(o)?null:t.length>L||i?m(x,{options:t,value:o,withSearch:t.length>=R,onChange:f}):m(I,{ref:s,value:o,onChange:f,options:t,size:"small","data-testid":"segmented-schema"})}const k=_;export{k as SchemaSelection};
|
package/lib/hooks/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export { useRouter } from './useRouter.js';
|
|
|
3
3
|
export { useContentItems } from './useContentItems.js';
|
|
4
4
|
export { useActiveWithFallback } from './useActiveWithFallback.js';
|
|
5
5
|
export { useTranslate } from './useTranslate.js';
|
|
6
|
-
export { useUppercase2LowercaseRedirect } from './useUppercase2LowercaseRedirect.js';
|
|
7
6
|
export { useTelemetry } from './useTelemetry.js';
|
|
7
|
+
export { useUppercase2LowercaseRedirect } from './useUppercase2LowercaseRedirect.js';
|
|
8
8
|
export { usePerformanceMetrics } from './usePerformanceMetrics.js';
|
package/lib/hooks/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useActivateExample as o}from"./useActivateExample.js";import{useRouter as s}from"./useRouter.js";import{useContentItems as p}from"./useContentItems.js";import{useActiveWithFallback as f}from"./useActiveWithFallback.js";import{useTranslate as x}from"./useTranslate.js";import{
|
|
1
|
+
import{useActivateExample as o}from"./useActivateExample.js";import{useRouter as s}from"./useRouter.js";import{useContentItems as p}from"./useContentItems.js";import{useActiveWithFallback as f}from"./useActiveWithFallback.js";import{useTranslate as x}from"./useTranslate.js";import{useTelemetry as i}from"./useTelemetry.js";import{useUppercase2LowercaseRedirect as n}from"./useUppercase2LowercaseRedirect.js";import{usePerformanceMetrics as A}from"./usePerformanceMetrics.js";export{o as useActivateExample,f as useActiveWithFallback,p as useContentItems,A as usePerformanceMetrics,s as useRouter,i as useTelemetry,x as useTranslate,n as useUppercase2LowercaseRedirect};
|
package/lib/hooks/useRouter.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BrowserRouter as s,HashRouter as
|
|
1
|
+
import{BrowserRouter as s,HashRouter as a,MemoryRouter as n}from"react-router-dom";const m={history:s,memory:n,hash:a},R=(e,o)=>{const r=m[e],t={...e!=="memory"&&{basename:o,feature:{v7_startTransition:!1,v7_relativeSplatPath:!1}}};return{Router:r,routerProps:t}};export{R as useRouter};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{jsx as t,jsxs as a}from"react/jsx-runtime";import{styled as C}from"../../styled-components.js";const r=o=>a("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o,children:[t("path",{d:"M10.5 9.75H9.375V9H10.5V3H9.375V2.25H10.5C10.6988 2.25023 10.8895 2.32932 11.0301 2.46992C11.1707 2.61052 11.2498 2.80116 11.25 3V9C11.2497 9.19883 11.1706 9.38944 11.03 9.53003C10.8894 9.67063 10.6988 9.74973 10.5 9.75Z"}),t("path",{d:"M8.625 6.75C9.03921 6.75 9.375 6.41421 9.375 6C9.375 5.58579 9.03921 5.25 8.625 5.25C8.21079 5.25 7.875 5.58579 7.875 6C7.875 6.41421 8.21079 6.75 8.625 6.75Z"}),t("path",{d:"M6 6.75C6.41421 6.75 6.75 6.41421 6.75 6C6.75 5.58579 6.41421 5.25 6 5.25C5.58579 5.25 5.25 5.58579 5.25 6C5.25 6.41421 5.58579 6.75 6 6.75Z"}),t("path",{d:"M3.375 6.75C3.78921 6.75 4.125 6.41421 4.125 6C4.125 5.58579 3.78921 5.25 3.375 5.25C2.96079 5.25 2.625 5.58579 2.625 6C2.625 6.41421 2.96079 6.75 3.375 6.75Z"}),t("path",{d:"M2.625 9.75H1.5C1.30116 9.74977 1.11052 9.67068 0.969922 9.53008C0.829319 9.38948 0.750228 9.19884 0.75 9V3C0.750199 2.80115 0.82928 2.6105 0.969889 2.46989C1.1105 2.32928 1.30115 2.2502 1.5 2.25H2.625V3H1.5V9H2.625V9.75Z"})]}),p=C(r).attrs(()=>({"data-component-name":"icons/DefaultMappingIcon"}))`
|
|
2
|
+
path {
|
|
3
|
+
fill: var(--color-warm-grey-11);
|
|
4
|
+
html.dark & {
|
|
5
|
+
fill: var(--text-color-secondary);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
`;export{p as DefaultMappingIcon,r as Icon};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DefaultMappingIcon } from './DefaultMappingIcon.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DefaultMappingIcon as a}from"./DefaultMappingIcon.js";export{a as DefaultMappingIcon};
|
package/lib/index.d.ts
CHANGED
|
@@ -50,7 +50,6 @@ export { getValueFromMdParsedExtension } from './utils/helpers.js';
|
|
|
50
50
|
export { ContentItem } from './components/ContentItem/index.js';
|
|
51
51
|
export { ExampleSwitch } from './components/Samples/ExampleSwitch.js';
|
|
52
52
|
export { CustomBadges } from './components/common/Badges.js';
|
|
53
|
-
export { PanelItem } from './components/PanelItem/PanelItem.js';
|
|
54
53
|
export { Metadata } from './components/ApiInfo/Metadata.js';
|
|
55
54
|
export { useDownloadInfo } from './components/Download/useDownloadInfo.js';
|
|
56
55
|
export { SECTION_ATTR } from './constants.js';
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useAtomValue as e}from"jotai";import{globalOptionsAtom as o}from"./jotai/store.js";import{simplifyAstStructure as n}from"./utils/simplifyAstStructure.js";import{getOperation as x}from"./models/operation.js";import{getServerEnvName as l}from"./utils/environments.js";import{getTagOrGroup as d}from"./models/group.js";import{generateDeepLink as c}from"./components/common/LinkToField.js";import{RequestSamples as
|
|
1
|
+
import{useAtomValue as e}from"jotai";import{globalOptionsAtom as o}from"./jotai/store.js";import{simplifyAstStructure as n}from"./utils/simplifyAstStructure.js";import{getOperation as x}from"./models/operation.js";import{getServerEnvName as l}from"./utils/environments.js";import{getTagOrGroup as d}from"./models/group.js";import{generateDeepLink as c}from"./components/common/LinkToField.js";import{RequestSamples as g}from"./components/RequestSamples/RequestSamples.js";import{ResponseSamples as P}from"./components/ResponseSamples/ResponseSamples.js";import{RedocSchema as I}from"./components/pluggable/RedocSchema.js";import{RedocExample as w}from"./components/pluggable/RedocExample.js";import{RedoclyOpenAPIDocs as v}from"./components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.js";import{StoreProvider as E}from"./components/RedoclyOpenAPIDocs/Providers.js";import{getMarkdownHeaderId as A}from"./components/RedoclyOpenAPIDocs/utils.js";import{safeSlugify as T}from"./utils/string.js";import{JsonPointer as h}from"./utils/JsonPointer.js";import{isOperationName as V}from"./utils/openapi.js";import{pathIncludesLink as F,normalizePath as H}from"./utils/path.js";import{saveTextBeforeHeading as z}from"./utils/saveTextBeforeHeading.js";import{OpenAPIParser as G}from"./services/OpenAPIParser.js";import{buildContentItems as _}from"./services/menu/builder.js";import{normalizeOptions as K}from"./services/config-options/normalizeOptions.js";import{makeDeepLink as U}from"./services/history/helpers.js";function p(){return e(o)}import{EmbeddedReplay as X}from"./components/Replay/EmbeddedReplay.js";import{convertOperationToReplayValue as Z}from"./components/Replay/utils.js";import{SectionContainer as ee}from"./components/SectionContent/index.js";import{Row as re}from"./components/common/panels.js";import{RightPanelContainer as pe}from"./components/SectionContent/index.js";import{Overview as ae}from"./components/Overview/index.js";import{SamplesMiddlePanel as fe,Section as xe,SamplesPanel as ie}from"./components/common/panels.js";import{Heading as se}from"./components/common/OperationItemTitle.js";import{Dropdown as ue}from"./components/common/Dropdown/index.js";import{Markdown as Se}from"./components/Markdown/index.js";import{FieldValueLabel as Oe,FieldLabel as Pe}from"./components/common/Fields/index.js";import{CodeBlockPanel as Ie}from"./components/common/index.js";import{OperationSamplesPanel as we}from"./components/OperationItem/OperationItem.js";import{ExternalDocumentation as ve}from"./components/ExternalDocumentation/index.js";import{PropertyDetails as Ee}from"./components/PropertyDetails/PropertyDetails.js";import{addMarkdownItems as Ae}from"./services/menu/markdown.js";import{getValueFromMdParsedExtension as Te}from"./utils/helpers.js";import{ContentItem as he}from"./components/ContentItem/index.js";import{ExampleSwitch as Ve}from"./components/Samples/ExampleSwitch.js";import{CustomBadges as Fe}from"./components/common/Badges.js";import{Metadata as Ne}from"./components/ApiInfo/Metadata.js";import{useDownloadInfo as qe}from"./components/Download/useDownloadInfo.js";import{SECTION_ATTR as Je}from"./constants.js";export{Ie as CodeBlockPanel,he as ContentItem,Fe as CustomBadges,ue as Dropdown,X as EmbeddedReplay,Ve as ExampleSwitch,ve as ExternalDocumentation,Pe as FieldLabel,Oe as FieldValueLabel,se as Heading,h as JsonPointer,Se as Markdown,Ne as Metadata,G as OpenAPIParser,we as OperationSamplesPanel,ae as Overview,Ee as PropertyDetails,w as RedocExample,I as RedocSchema,v as RedoclyOpenAPIDocs,g as RequestSamples,P as ResponseSamples,pe as RightPanelContainer,re as Row,Je as SECTION_ATTR,fe as SamplesMiddlePanel,ie as SamplesPanel,xe as Section,ee as SectionContainer,E as StoreProvider,Ae as addMarkdownItems,_ as buildContentItems,Z as convertOperationToReplayValue,c as generateDeepLink,A as getMarkdownHeaderId,x as getOperation,l as getServerEnvName,d as getTagOrGroup,Te as getValueFromMdParsedExtension,V as isOperationName,U as makeDeepLink,K as normalizeOptions,H as normalizePath,F as pathIncludesLink,T as safeSlugify,z as saveTextBeforeHeading,n as simplifyAstStructure,qe as useDownloadInfo,p as useOpenapiDocsOptions};
|
package/lib/models/group.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as
|
|
1
|
+
import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as h}from"../services/index.js";import{getValueFromMdParsedExtension as S,safeSlugify as o}from"../utils/index.js";import{getHref as v}from"../services/menu/operation.js";import{saveTextBeforeHeading as w}from"../utils/saveTextBeforeHeading.js";function r(i,e,s){let n;s?.id&&(i==="schema"||i==="mcp")?n=h(s.id,o(e.name)):n=e.id||o(e.name);const d=e["x-displayName"]||e.name,c=e.level||1,t=e.isSchema,f=e.ast||void 0,l=w(S(e,"description")||""),a=e.items||[],x=e.externalDocs;return{id:n.toLowerCase(),type:i,parent:s,name:d,level:c,depth:0,isSchema:t,description:l,items:a,ast:f,externalDocs:x,href:v({id:n}),[m]:e[m]||s?.[m],keywords:i==="tag"?e["x-keywords"]:void 0}}export{r as getTagOrGroup};
|
package/lib/models/mediaType.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getSchema as E}from"./schema.js";import{isFormUrlEncoded as P,isJsonLike as b,isXmlLike as
|
|
1
|
+
import{getSchema as E}from"./schema.js";import{isFormUrlEncoded as P,isJsonLike as b,isXmlLike as g,isMultipartFormData as j,JsonPointer as D,mapValues as M}from"../utils/index.js";import{getExamples as r}from"./example.js";import{safeSample as k}from"../services/code-samples/index.js";function v({parser:i,info:{encoding:e,schema:m},schema:l,mime:s,options:{isRequestType:a,onlyRequiredInSamples:u,generatedSamplesMaxDepth:p,format:d="json"}}){const f={skipReadOnly:a,skipWriteOnly:!a,skipNonRequired:a&&u,maxSampleDepth:p,quiet:!0,format:d};let n={};if(l&&l.oneOf)for(const o of l.oneOf){const t=k(o.rawSchema,f,i.definition);t!==null&&(l.discriminatorProp&&typeof t=="object"&&t&&t[l.discriminatorProp]&&!o.isDefaultMapping&&(t[l.discriminatorProp]=o.title),n[o.title]=r({parser:i,infoOrRef:{value:t},mime:s,encoding:e}))}else if(l){const o=k(m,f,i.definition);o!==null?n={default:r({parser:i,infoOrRef:{value:o},mime:s,encoding:e})}:n={default:{value:null,rawValue:"null"}}}else n={default:{value:null,rawValue:"null"}};return n}function J(i,e,m,l,s,{operation:a,type:u,response:p,absolutePointer:d=""}){let f,n;const o=l.schema&&E({parser:i,schemaOrRef:l.schema,pointer:"",absolutePointer:D.join(d,["content",e,"schema"]),options:s,deps:{operation:a,type:u,response:p}}),{onlyRequiredInSamples:t,generatedSamplesMaxDepth:c}=s,{encoding:x,examples:O,example:S}=l;return s.unstable_skipSamples||(O!==void 0?f=M(O,h=>r({parser:i,infoOrRef:h,mime:e,encoding:x})):S!==void 0?f={default:r({parser:i,infoOrRef:{value:i.deref(S).resolved},mime:e,encoding:x})}:b(e)||g(e)?f=v({parser:i,info:l,schema:o,mime:e,options:{isRequestType:m,onlyRequiredInSamples:t,generatedSamplesMaxDepth:c,format:g(e)?"xml":"json"}}):(P(e)||j(e))&&(n=v({parser:i,info:l,schema:o,mime:e,options:{isRequestType:m,onlyRequiredInSamples:t,generatedSamplesMaxDepth:c}}))),{examples:f,schema:o,name:e,isRequestType:m,formExamples:n,onlyRequiredInSamples:t,operation:a}}export{J as getMediaType};
|
package/lib/models/schema.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { OpenAPISchema, Referenced } from '../types/index.js';
|
|
2
2
|
import type { OpenAPIParser, Options } from '../services/index.js';
|
|
3
3
|
import type { Deps, SchemaModel } from './types.js';
|
|
4
|
-
export declare function getSchema({ parser, schemaOrRef, pointer, options, isChild, baseRefsStack, deps, absolutePointer, }: {
|
|
4
|
+
export declare function getSchema({ parser, schemaOrRef, pointer, options, isChild, isDefaultMapping, baseRefsStack, deps, absolutePointer, }: {
|
|
5
5
|
parser: OpenAPIParser;
|
|
6
6
|
schemaOrRef: Referenced<OpenAPISchema>;
|
|
7
7
|
pointer: string;
|
|
8
8
|
options: Options;
|
|
9
9
|
isChild?: boolean;
|
|
10
|
+
isDefaultMapping?: boolean;
|
|
10
11
|
baseRefsStack?: string[];
|
|
11
12
|
deps: Deps;
|
|
12
13
|
absolutePointer?: string;
|
package/lib/models/schema.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as
|
|
2
|
-
Field must be an object but got ${typeof i} at "${u}"`),{})}function
|
|
1
|
+
import{REDOCLY_TEAMS_RBAC as S}from"@redocly/config";import{isObject as I}from"@redocly/theme/core/openapi";import{pushRef as w}from"../services/OpenAPIParser.js";import{detectType as q,extractExtensions as C,getValueFromMdParsedExtension as M,humanizeConstraints as E,isNamedDefinition as h,isPrimitiveType as B,JsonPointer as A,pluralizeType as z,sortByDeprecated as L,sortByRequired as J}from"../utils/index.js";import{getField as T}from"./field.js";function F({parser:i,schemaOrRef:n,pointer:u,options:l,isChild:P=!1,isDefaultMapping:f=!1,baseRefsStack:m=[],deps:o,absolutePointer:y}){const{resolved:p,refsStack:c}=i.deref(n,m,!0),s=n.$ref||u||y||"",r=w(c,s),e=i.mergeAllOf(p,s,r,n.$ref||y),O=e.type||q(e),t={operationPointer:o.operation?.pointer||y||"",schemaOrRef:n,isChild:P,isDefaultMapping:f,typePrefix:"",pointer:s,absolutePointer:y,refsStack:r,rawSchema:p,type:O,isCircular:!!e["x-circular-ref"],isComplex:!!e["x-complex"],title:e.title||h(s)&&A.baseName(s)||"",description:M(e,"description")||"",format:e.format,enum:e.enum||[],example:e.example,deprecated:!!e.deprecated,pattern:e.pattern,externalDocs:e.externalDocs,displayFormat:e.format,isPrimitive:B(e,O),constraints:E(e),default:e.default,readOnly:!!e.readOnly,writeOnly:!!e.writeOnly,const:e.const||"",contentEncoding:e.contentEncoding,contentMediaType:e.contentMediaType,minItems:e.minItems,maxItems:e.maxItems,nullable:e.nullable||e["x-nullable"],schema:e,displayType:"",items:void 0,extensions:void 0,oneOfType:"",discriminatorProp:void 0,oneOf:void 0,[S]:e[S],"x-enumDescriptions":M(e,"x-enumDescriptions"),get fields(){if(!t.isCircular&&!t.isComplex&&($(t,"object")||$(t,"array")&&v(e)))return K(i,e,s,l,r,o)}};if((e.nullable||e["x-nullable"])&&(Array.isArray(t.type)&&!t.type.some(d=>d===null||d==="null")?t.type=[...t.type,"null"]:!Array.isArray(t.type)&&(t.type!==null||t.type!=="null")&&(t.type=[t.type,"null"])),t.displayType=Array.isArray(t.type)?t.type.map(d=>d===null?"null":d).join(" or "):t.type,t.isCircular)return t;if(e.if&&e.then||e.if&&e.else){const{oneOf:d,oneOfType:a}=_({schema:e,parser:i,pointer:s,options:l,deps:o,refsStack:r});return t.oneOf=d,t.oneOfType=a,t}if(!P&&R(e)!==void 0){const{oneOf:d,discriminatorProp:a}=V({schema:e,parser:i,deps:o,mergedSchema:e,options:l,pointer:s,refsStack:r});return t.oneOf=d,t.discriminatorProp=a,t}else P&&Array.isArray(e.oneOf)&&e.oneOf.find(d=>d.$ref===s)&&delete e.oneOf;if(e.oneOf!==void 0){const{oneOf:d,displayType:a}=j({schemaOneOf:e.oneOf,parser:i,deps:o,options:l,pointer:s,refsStack:r,schema:e});return t.oneOfType="One of",d&&(t.oneOf=d),t.displayType=a,e.anyOf!==void 0&&console.warn(`oneOf and anyOf are not supported on the same level. Skipping anyOf at ${s}`),t}if(e.anyOf!==void 0){const{oneOf:d,displayType:a}=j({schemaOneOf:e.anyOf,parser:i,deps:o,options:l,pointer:s,refsStack:r,schema:e});return d&&(t.oneOf=d),t.displayType=a,t.oneOfType="Any of",t}if($(t,"array")&&(e.items&&!v(e)&&(t.items=F({parser:i,schemaOrRef:Object.assign({type:"object"},e.items),pointer:s+"/items",options:l,baseRefsStack:r,deps:o,absolutePointer:A.join(e.absolutePointer||"",["items"])})),t.displayType=e.prefixItems||Array.isArray(e.items)?"items":z(t.items?.displayType||t.displayType),t.displayFormat=t.items?.format||"",t.typePrefix=t.items?.typePrefix||"Array of ",t.title=t.title||t.items?.title||"",t.isPrimitive=t.items?.isPrimitive!==void 0?t.items?.isPrimitive:t.isPrimitive,t.example===void 0&&t.items?.example!==void 0&&(t.example=[t.items.example]),t.items?.isPrimitive&&(t.enum=t.items.enum,t["x-enumDescriptions"]=M(t.items,"x-enumDescriptions")),Array.isArray(t.type))){const d=t.type.filter(a=>a!=="array");d.length&&(t.displayType+=` or ${d.join(" or ")}`)}return l.showExtensions&&(t.extensions=C(e,l.showExtensions)),t}function V({schema:i,parser:n,pointer:u,options:l,refsStack:P,deps:f,mergedSchema:m}){const o=R(i),y=o?.propertyName,p=n.findDerived([...m["x-parentRefs"]||[],u]);if(i.oneOf)for(const a of i.oneOf){if(a.$ref===void 0)continue;const x=A.baseName(a.$ref);p[a.$ref]=x}const c=o?.mapping||{};let s=o?.["x-explicitMappingOnly"]||!1;Object.keys(c).length===0&&(s=!1);const r={};for(const a in c){const x=c[a];Array.isArray(r[x])?r[x].push(a):r[x]=[a]}const e=s?{...r}:{...p,...r};let O=[];for(const a of Object.keys(e)){const x=e[a];if(Array.isArray(x))for(const g of x)O.push({$ref:a,name:g});else O.push({$ref:a,name:x})}if(o?.defaultMapping){const a=O.findIndex(g=>g.name===A.baseName(o.defaultMapping)),x="Default mapping";~a?O[a]={$ref:o.defaultMapping,name:x,isDefaultMapping:!0}:O.push({$ref:o.defaultMapping,name:x,isDefaultMapping:!0})}const t=Object.keys(c);return t.length!==0&&(O=O.sort((a,x)=>{if(a.isDefaultMapping&&!x.isDefaultMapping)return 1;if(!a.isDefaultMapping&&x.isDefaultMapping)return-1;const g=t.indexOf(a.name),b=t.indexOf(x.name);return g<0&&b<0?a.name.localeCompare(x.name):g<0?1:b<0?-1:g-b})),{oneOf:O.map(({$ref:a,name:x,isDefaultMapping:g},b)=>{const D=F({parser:n,schemaOrRef:{$ref:a},pointer:a,options:l,isChild:!0,isDefaultMapping:g,baseRefsStack:P.slice(0,-1),deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&d="+b:"&d="+b.toString()},absolutePointer:m.absolutePointer});return D.title=x,D}),discriminatorProp:y}}function j({schemaOneOf:i,parser:n,refsStack:u,pointer:l,schema:P,options:f,deps:m}){const o=i.map((p,c)=>{const{resolved:s,refsStack:r}=n.deref(p,u,!0),e=n.mergeAllOf(s,l+"/oneOf/"+c,r),O=h(p.$ref)&&!e.title?A.baseName(p.$ref):`${e.title||""}${e.const&&JSON.stringify(e.const)||""}`;return F({parser:n,schemaOrRef:{...e,title:O,allOf:[{...P,oneOf:void 0,anyOf:void 0}],discriminator:s.allOf?void 0:e.discriminator},pointer:p.$ref||l+"/oneOf/"+c,options:f,baseRefsStack:r,deps:{...m,parentFieldFullPath:m.parentFieldFullPath?m.parentFieldFullPath+"&oneOf="+c:"&oneOf="+c.toString()}})}),y=[...new Set(o.map(p=>{let c=p.typePrefix+(p.title&&!f.hideSchemaTitles?`${p.title} (${p.displayType})`:p.displayType);return c.indexOf(" or ")>-1&&(c=`(${c})`),c}))].join(" or ");return{oneOf:o,displayType:y}}function _({schema:i,parser:n,pointer:u,options:l,refsStack:P,deps:f}){const{if:m,else:o={},then:y={},...p}=i;return{oneOf:[{allOf:[p,y,m],title:m&&m["x-displayName"]||m?.title||"case 1"},{allOf:[p,o],title:o&&o["x-displayName"]||o?.title||"case 2"}].map((e,O)=>F({parser:n,schemaOrRef:{...e},pointer:u+"/oneOf/"+O,options:l,baseRefsStack:P,deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&oneOf="+O:"&oneOf="+O.toString()}})),oneOfType:"One of"}}function k(i,n,u){return i||(console.warn(`Field "${n}" is invalid, skipping.
|
|
2
|
+
Field must be an object but got ${typeof i} at "${u}"`),{})}function K(i,n,u,l,P,f){let m=n.properties||($(n,"array")?n.prefixItems||n.items:void 0)||{};const o=n.patternProperties||{},y=n.additionalProperties||n.unevaluatedProperties,p=n.prefixItems?n.items:n.additionalItems,c=n.default||{};let s=Object.keys(m).map(r=>{const e=k(m[r],r,u),O=n.required===void 0?!1:n.required.indexOf(r)>-1;return T(i,{name:n.properties?r:`[${r}]`,required:O,schema:{...e,example:n.example?.[r]||e.example,default:e.default===void 0&&c?c[r]:e.default}},u+"/properties/"+r,l,f,P,A.join(n.absolutePointer||"",["properties",r]))});return l.sortRequiredPropsFirst&&(s=J(s,n.required)),s.push(...Object.keys(o).map(r=>{const e=k(o[r],r,u);return T(i,{name:r,required:!1,schema:e,kind:"patternProperties"},`${u}/patternProperties/${r}`,l,f,P)})),(I(y)||y===!0)&&s.push(T(i,{name:(I(y)&&y["x-additionalPropertiesName"]||"property name").concat("*"),required:!1,schema:y===!0?{}:y,kind:"additionalProperties"},u+"/additionalProperties",l,f,P,A.join(n.absolutePointer||"",["additionalProperties"]))),s.push(...Y({parser:i,schema:p,fieldsCount:s.length,$ref:u,options:l,refsStack:P,deps:f})),L(s)}function Y({parser:i,schema:n=!1,fieldsCount:u,$ref:l,options:P,refsStack:f,deps:m}){return typeof n=="boolean"?n?[T(i,{name:`[${u}...]`,schema:{},kind:"additionalItems"},`${l}/additionalItems`,P,m,f)]:[]:Array.isArray(n)?[...n.map((o,y)=>T(i,{name:`[${u+y}]`,schema:o,kind:"additionalItems"},`${l}/additionalItems/${y}`,P,m,f))]:I(n)?[T(i,{name:`[${u}...]`,schema:n,kind:"additionalItems"},`${l}/additionalItems`,P,m,f)]:[]}function R(i){return i.discriminator||i["x-discriminator"]}function $(i,n){return i.type===n||Array.isArray(i.type)&&i.type.includes(n)}function v(i){return!!(Array.isArray(i.items)||Array.isArray(i.prefixItems))}export{F as getSchema};
|
package/lib/models/types.d.ts
CHANGED
|
@@ -195,6 +195,7 @@ export type GroupModel = {
|
|
|
195
195
|
depth: number;
|
|
196
196
|
level: number;
|
|
197
197
|
[REDOCLY_TEAMS_RBAC]?: Record<string, string>;
|
|
198
|
+
keywords?: unknown;
|
|
198
199
|
};
|
|
199
200
|
export type OperationMenuItem = {
|
|
200
201
|
id: string;
|
|
@@ -245,6 +246,7 @@ export type SchemaModel = {
|
|
|
245
246
|
oneOf?: SchemaModel[];
|
|
246
247
|
oneOfType: string;
|
|
247
248
|
discriminatorProp?: string;
|
|
249
|
+
isDefaultMapping?: boolean;
|
|
248
250
|
rawSchema: OpenAPISchema;
|
|
249
251
|
schema: MergedOpenAPISchema;
|
|
250
252
|
extensions?: GenericObject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getTagGroupsItems as d,getTagsItems as c,getTagsWithOperations as p}from"./tags.js";import{addMarkdownItems as g}from"./markdown.js";import{flattenByProp as h,getValueFromMdParsedExtension as l}from"../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as r}from"../../constants.js";function x(o,s){const{definition:e}=o,{schemaDefinitionsTagName:i}=s,a=[{id:"",name:e?.info?.["x-seo"]?.title||e?.info?.title||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:e.info,items:[]}],t=[...e.tags||[]];if(t.some(n=>n.name===r)||t.push({name:r}),!t.find(n=>n?.name===i)&&i&&t.push({name:i}),e["x-mcp"])for(const n of["Tools","Resources","Prompts"])e["x-mcp"][n]&&(t.find(u=>u?.name===n)||t.push({name:n}));const m=p(o,t),f=e["x-tagGroups"];return a.push(...g(l(e.info,"description")||"",void 0,1)),f&&f.length>0?a.push(...d(o,void 0,f,m,s)):a.push(...c(o,m,void 0,void 0,s)),a}function
|
|
1
|
+
import{getTagGroupsItems as d,getTagsItems as c,getTagsWithOperations as p}from"./tags.js";import{addMarkdownItems as g}from"./markdown.js";import{flattenByProp as h,getValueFromMdParsedExtension as l}from"../../utils/index.js";import{DEFAULT_WEBHOOKS_TAG_NAME as r}from"../../constants.js";function x(o,s){const{definition:e}=o,{schemaDefinitionsTagName:i}=s,a=[{id:"",name:e?.info?.["x-seo"]?.title||e?.info?.title||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:e.info,items:[],keywords:e["x-keywords"]}],t=[...e.tags||[]];if(t.some(n=>n.name===r)||t.push({name:r}),!t.find(n=>n?.name===i)&&i&&t.push({name:i}),e["x-mcp"])for(const n of["Tools","Resources","Prompts"])e["x-mcp"][n]&&(t.find(u=>u?.name===n)||t.push({name:n}));const m=p(o,t),f=e["x-tagGroups"];return a.push(...g(l(e.info,"description")||"",void 0,1)),f&&f.length>0?a.push(...d(o,void 0,f,m,s)):a.push(...c(o,m,void 0,void 0,s)),a}function E(o,s){const e=x(o,s),i=h(e||[],"items");return{contentItems:e,flatItems:i}}export{E as buildContentItems,x as buildMenuStructure};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import y from"@markdoc/markdoc";import{isString as A}from"@redocly/theme/core/openapi";import{getTagOrGroup as S}from"../../models/index.js";import{safeSlugify as h,unescapeHTMLChars as T}from"../../utils/index.js";import{simplifyAstStructure as d}from"../../utils/simplifyAstStructure.js";function O(e,u,f){const i=A(e)?d(y.parse(e)):y.Ast.fromJSON(JSON.stringify(e?.result)),s=[];let o;const l=(t,n,g=s,r,p)=>{t=T(t);let a;r.attributes.id?a=r.attributes.id:(a=p?`${p}/${h(t)}`:`section/${h(t)}`,r.attributes.id=a);const b={id:a.toLowerCase(),name:t,level:n,items:[],ast:[r]};return g.push(b),b},c=(t,n)=>{t[t.length-1]?.ast?.push(n)},m=t=>{const n=C(t)||"",r=u&&u.type==="tag"?u.id:void 0;t.type==="heading"&&t.attributes.level===1?o=l(n,t.attributes.level,void 0,t,r):t.attributes.level?l(n,t.attributes.level,o?.items,t,o?.id??r):o?.items?.length?c(o?.items,t):s?.length&&c(s,t)};if(Array.isArray(i))for(const t of i)m(t);else m(i);return v(u,s,f)}function v(e,u,f=1){return u.map(i=>{const s=S("section",i,e);return s.depth=f,i.items&&(s.items=v(s,i.items,f+1)),s})}function C(e){if(typeof e?.attributes?.content=="string")return e.attributes?.content;if(e?.children)return C(e.children[0])}export{O as addMarkdownItems};
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import{getTagOrGroup as
|
|
2
|
-
|
|
3
|
-
`:"",u=l(r==="tools"?"tool":r==="resources"?"rsrc":"prompt",{name:n.name,"x-displayName":n.title||n.name,description:`${p}${n.description||""}
|
|
4
|
-
{% mcp${t.slice(0,-1)} name="${n.name}" id="${a}" /%}`,isSchema:!0,level:2},o);u.depth=o.depth+1,e.push(u)}}return e}function U(i,c){const{definition:o}=i,e={},r=o["x-webhooks"]||o.webhooks,t=o["x-mcp"];for(const f of c||[])e[f.name]={...f,operations:[]};return o.paths&&d(i,o.paths,e),r&&d(i,r,e,!0),t&&N(t,e),e}function N(i,c){for(const o of O)if(i[o])for(const e of i[o]){const r=e.tags&&e.tags.length?e.tags:[$(o)];for(const t of r){let f=c[t];f===void 0&&(f={name:t,operations:[],used:!0},c[t]=f)}}}function d(i,c,o,e){for(const r of Object.keys(c||{})){const t=c[r],f=Object.keys(t).filter(P);for(const n of f){const s=t[n];if(t.$ref){const{resolved:p}=i.deref(t);d(i,{[r]:p},o,e);continue}let a=s?.tags;(!a||!a.length)&&(a=e?[g]:[""]);for(const p of a){let m=o[p];m===void 0&&(m={name:p,operations:[]},o[p]=m),!m["x-traitTag"]&&m.operations.push({...s,pathName:r,pointer:S.compile(["paths",r,n]),httpVerb:n,pathParameters:t.parameters||[],pathServers:t.servers,isWebhook:!!e})}}}}function $(i){return i.charAt(0).toUpperCase()+i.slice(1)}export{$ as capitalize,R as getTagGroupsItems,v as getTagsItems,U as getTagsWithOperations};
|
|
1
|
+
import{getTagOrGroup as d}from"../../models/group.js";import{DEFAULT_WEBHOOKS_TAG_NAME as l,GROUP_DEPTH as g}from"../../constants.js";import{getValueFromMdParsedExtension as h,isOperationName as S,JsonPointer as k,safeSlugify as w}from"../../utils/index.js";import{getOperationsItems as T}from"./operation.js";import{addMarkdownItems as x}from"./markdown.js";import{joinWithSeparator as $}from"../history/helpers.js";const y=["tools"];function N(s,c,o,e,a){let t;if(e===void 0?t=Object.keys(c):t=e.tags,!Array.isArray(t))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const f=t.map(n=>c[n]?(c[n].used=!0,c[n]):(console.warn(`Non-existing tag "${n}" is added to the group "${e?.name}"`),null)),i=[];for(const n of f){if(!n)continue;const r=d("tag",n,o);if(r.depth=g+1,n.name===""){const P=[...x(h(n,"description")||"",r,r.depth+1),...T(void 0,n,r.depth+1)];i.push(...P);continue}const p=b({definition:s.definition,tag:n,parent:r,schemaDefinitionsTagName:a.schemaDefinitionsTagName}),m=v(s.definition,n,r);r.items=[...p,...m,...x(h(n,"description")||"",r,r.depth+1),...T(r,n,r.depth+1)],i.push(r)}return i.filter(({name:n,items:r})=>n!==l||r.length>0)}function R(s,c,o,e,a){const t=[];for(const f of o){const i=d("group",f,c);i.depth=g,i.items=N(s,e,i,f,a),t.push(i)}return t}function b({definition:s,tag:c,parent:o,schemaDefinitionsTagName:e}){const a=e?[e]:[];return Object.entries(s.components?.schemas||{}).map(([t,f])=>{if(!(f["x-tags"]||a).includes(c.name))return null;const n=d("schema",{name:t,"x-displayName":`${f.title||t}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${t}" /%}`,isSchema:!0,level:2},o);return n.depth=o.depth+1,n}).filter(Boolean)}function v(s,c,o){const e=[];for(const a of y)if(s["x-mcp"]?.[a]){const t=O(a),f=[t];for(const i of s["x-mcp"]?.[a]||[])if((i.tags?.length?i.tags:f).includes(c.name)){const r=$(o.id,w(i.name)),p=d("mcp",{name:i.name,"x-displayName":i.title||i.name,description:`${i.description||""}
|
|
2
|
+
{% mcp${t.slice(0,-1)} toolName="${i.name}" id="${r}" /%}`,isSchema:!0,level:2},o);p.depth=o.depth+1,e.push(p)}}return e}function U(s,c){const{definition:o}=s,e={},a=o["x-webhooks"]||o.webhooks,t=o["x-mcp"];for(const f of c||[])e[f.name]={...f,operations:[]};return o.paths&&u(s,o.paths,e),a&&u(s,a,e,!0),t&&E(t,e),e}function E(s,c){for(const o of y)if(s[o])for(const e of s[o]){const a=e.tags&&e.tags.length?e.tags:[O(o)];for(const t of a){let f=c[t];f===void 0&&(f={name:t,operations:[],used:!0},c[t]=f)}}}function u(s,c,o,e){for(const a of Object.keys(c||{})){const t=c[a],f=Object.keys(t).filter(S);for(const i of f){const n=t[i];if(t.$ref){const{resolved:p}=s.deref(t);u(s,{[a]:p},o,e);continue}let r=n?.tags;(!r||!r.length)&&(r=e?[l]:[""]);for(const p of r){let m=o[p];m===void 0&&(m={name:p,operations:[]},o[p]=m),!m["x-traitTag"]&&m.operations.push({...n,pathName:a,pointer:k.compile(["paths",a,i]),httpVerb:i,pathParameters:t.parameters||[],pathServers:t.servers,isWebhook:!!e,keywords:n["x-keywords"]})}}}}function O(s){return s.charAt(0).toUpperCase()+s.slice(1)}export{O as capitalize,R as getTagGroupsItems,N as getTagsItems,U as getTagsWithOperations};
|
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' | 'mcp';
|
|
21
21
|
export type MenuItemType = MenuItemGroupType | 'operation';
|
|
22
22
|
/** Generic interface for MenuItems */
|
|
23
23
|
export interface IMenuItem {
|
|
@@ -51,6 +51,7 @@ export type ExtendedOpenAPIOperation = {
|
|
|
51
51
|
pathServers: Array<OpenAPIServer> | undefined;
|
|
52
52
|
isWebhook: boolean;
|
|
53
53
|
defaultSampleName?: string | false;
|
|
54
|
+
keywords?: unknown;
|
|
54
55
|
} & OpenAPIOperation;
|
|
55
56
|
export type TagsInfoMap = Record<string, TagInfo>;
|
|
56
57
|
export interface TagGroup {
|
|
@@ -91,9 +92,6 @@ export interface HooksConfig {
|
|
|
91
92
|
AfterApiTitle?: HookConfig<{
|
|
92
93
|
info: OpenAPIInfo;
|
|
93
94
|
}>;
|
|
94
|
-
AfterOpenApiDescription?: HookConfig<{
|
|
95
|
-
info: OpenAPIInfo;
|
|
96
|
-
}>;
|
|
97
95
|
BeforeOperation?: HookConfig<{
|
|
98
96
|
operation: OperationModel;
|
|
99
97
|
}>;
|
|
@@ -115,9 +113,6 @@ export interface HooksConfig {
|
|
|
115
113
|
sanitize?: (raw: string) => string;
|
|
116
114
|
MiddlePanelFooter?: HookConfig<undefined>;
|
|
117
115
|
MiddlePanelHeader?: HookConfig<undefined>;
|
|
118
|
-
AfterOpenApiInfo?: HookConfig<{
|
|
119
|
-
info: OpenAPIInfo;
|
|
120
|
-
}>;
|
|
121
116
|
}
|
|
122
117
|
export type ExtendedMenuItem = Omit<IMenuItem, 'type'> & {
|
|
123
118
|
type: MenuItemType | 'spec';
|
package/lib/standalone.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as i}from"react/jsx-runtime";import{createElement as p}from"react";import{createRoot as u,hydrateRoot as m}from"react-dom/client";import{querySelector as a}from"./utils/dom.js";import{RedoclyOpenAPIDocs as l}from"./components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.js";import{RedoclyOpenAPIDocsStandalone as f}from"./components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocsStandalone.js";import{setSecurityDetails as P,setSecurityDetailsVariants as V}from"./utils/security-details.js";import{setParameterValue as D}from"./utils/parameters.js";function d(t){const e={},o=t.attributes;for(let r=0;r<o.length;r++){const n=o[r];e[n.name]=n.value}return e}function E(t){const e=d(t),o={};for(const r in e){const n=r.replace(/-(.)/g,(c,s)=>s.toUpperCase());o[n]=e[r]}return o}function A(t,e=document.querySelector("redoc")){m(e,i(l,{store:t}),{onRecoverableError:(o,r)=>{o.message.includes("Minified React error #418")||console.error(o.message,r)}})}function _(t,e={},o=a("redoc")){if(o===null)throw new Error('"element" argument is not provided and <redoc> tag is not found on the page');const{router:r,...n}=e;let c,s;typeof t=="string"?c=t:typeof t=="object"&&(s=t),u(o).render(p(f,{definition:s,definitionUrl:c,options:
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import{createElement as p}from"react";import{createRoot as u,hydrateRoot as m}from"react-dom/client";import{querySelector as a}from"./utils/dom.js";import{RedoclyOpenAPIDocs as l}from"./components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.js";import{RedoclyOpenAPIDocsStandalone as f}from"./components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocsStandalone.js";import{setSecurityDetails as P,setSecurityDetailsVariants as V}from"./utils/security-details.js";import{setParameterValue as D}from"./utils/parameters.js";function d(t){const e={},o=t.attributes;for(let r=0;r<o.length;r++){const n=o[r];e[n.name]=n.value}return e}function E(t){const e=d(t),o={};for(const r in e){const n=r.replace(/-(.)/g,(c,s)=>s.toUpperCase());o[n]=e[r]}return o}function A(t,e=document.querySelector("redoc")){m(e,i(l,{store:t}),{onRecoverableError:(o,r)=>{o.message.includes("Minified React error #418")||console.error(o.message,r)}})}function _(t,e={},o=a("redoc")){if(o===null)throw new Error('"element" argument is not provided and <redoc> tag is not found on the page');const{router:r,...n}={...e,...E(o)};let c,s;typeof t=="string"?c=t:typeof t=="object"&&(s=t),u(o).render(p(f,{definition:s,definitionUrl:c,options:n,router:r??"hash"},["Loading..."]))}const N=__REDOCLY_API_REFERENCE_VERSION__,v=__REDOCLY_API_REFERENCE_REVISION__;function R(){const t=a("redoc");if(!t)return;const e=t.getAttribute("spec-url");e&&_(e,{},t)}R();export{A as hydrate,_ as init,v as revision,D as setParameterValue,P as setSecurityDetails,V as setSecurityDetailsVariants,N as version};
|
package/lib/types/open-api.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ export interface OpenAPIDefinition {
|
|
|
4
4
|
openapi: string;
|
|
5
5
|
info: OpenAPIInfo;
|
|
6
6
|
servers?: OpenAPIServer[];
|
|
7
|
-
'x-servers'?: OpenAPIServer[];
|
|
8
7
|
paths: OpenAPIPaths;
|
|
9
8
|
components?: OpenAPIComponents;
|
|
10
9
|
security?: OpenAPISecurityRequirement[];
|
|
@@ -19,6 +18,7 @@ export interface OpenAPIDefinition {
|
|
|
19
18
|
}>;
|
|
20
19
|
'x-feedback'?: any;
|
|
21
20
|
'x-schema-catalog-link'?: string;
|
|
21
|
+
'x-keywords'?: unknown;
|
|
22
22
|
}
|
|
23
23
|
export interface OpenAPIInfo extends ParsedDescriptionWithSummary {
|
|
24
24
|
title: string;
|
|
@@ -51,12 +51,6 @@ export interface OpenAPIServer extends ParsedDescription {
|
|
|
51
51
|
description?: string;
|
|
52
52
|
name?: string;
|
|
53
53
|
variables?: OpenAPIServerVariables;
|
|
54
|
-
'x-isLive'?: boolean;
|
|
55
|
-
'x-labels'?: {
|
|
56
|
-
label?: string;
|
|
57
|
-
color?: string;
|
|
58
|
-
value: string;
|
|
59
|
-
}[];
|
|
60
54
|
}
|
|
61
55
|
export interface OpenAPIServerVariables {
|
|
62
56
|
[name: string]: OpenAPIServerVariable;
|
|
@@ -214,6 +208,7 @@ export interface OpenAPIDiscriminator {
|
|
|
214
208
|
[name: string]: string;
|
|
215
209
|
};
|
|
216
210
|
'x-explicitMappingOnly'?: boolean;
|
|
211
|
+
defaultMapping?: string;
|
|
217
212
|
}
|
|
218
213
|
export interface OpenAPIMediaType {
|
|
219
214
|
schema?: Referenced<OpenAPISchema>;
|
|
@@ -368,6 +363,7 @@ export interface OpenAPITag extends ParsedDescription {
|
|
|
368
363
|
externalDocs?: OpenAPIExternalDocumentation;
|
|
369
364
|
'x-displayName'?: string;
|
|
370
365
|
'x-rbac'?: Record<string, unknown>;
|
|
366
|
+
'x-keywords'?: unknown;
|
|
371
367
|
}
|
|
372
368
|
export interface OpenAPIExternalDocumentation extends ParsedDescription {
|
|
373
369
|
description?: string;
|
|
@@ -422,8 +418,6 @@ export interface McpResource {
|
|
|
422
418
|
description?: string;
|
|
423
419
|
uri: string;
|
|
424
420
|
mimeType: string;
|
|
425
|
-
blob?: string;
|
|
426
|
-
text?: string;
|
|
427
421
|
security?: OpenAPISecurityRequirement[];
|
|
428
422
|
tags?: string[];
|
|
429
423
|
'x-badges'?: OpenAPIXBadges[];
|
|
@@ -433,13 +427,9 @@ export interface McpPrompt {
|
|
|
433
427
|
title?: string;
|
|
434
428
|
description: string;
|
|
435
429
|
arguments: McpPromptArgument[];
|
|
436
|
-
security?: OpenAPISecurityRequirement[];
|
|
437
|
-
tags?: string[];
|
|
438
|
-
'x-badges'?: OpenAPIXBadges[];
|
|
439
430
|
}
|
|
440
431
|
export interface McpPromptArgument {
|
|
441
432
|
name: string;
|
|
442
433
|
description: string;
|
|
443
434
|
required: boolean;
|
|
444
|
-
example?: string;
|
|
445
435
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bundleOas as r,createEmptyRedoclyConfig as i}from"@redocly/openapi-core/lib/bundle-oas";import{convertSwagger2OpenAPI as c}from"./convertSwagger2OpenAPI.js";import{IS_BROWSER as a}from"./dom.js";async function l(){try{return(await i())?.resolvedConfig.openapi||{}}catch{return{}}}async function p(o){const t=await i(),e={config:t,base:a?window.location.origin:typeof globalThis.process<"u"?globalThis.process.cwd():""};a&&(t.resolve.http.customFetch=globalThis.fetch),typeof o=="object"&&o!==null?e.doc=s(o):e.ref=o;const{bundle:{parsed:n}}=await r(e);return n.swagger!==void 0?c(n):n}function s(o){return{source:{absoluteRef:""},parsed:o}}export{p as loadAndBundleDefinition,l as loadOpenapiConfig};
|
package/lib/utils/mcp.d.ts
CHANGED
package/lib/utils/mcp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const o=["tools","resources","prompts","logging","subscribe","completions"],s="experimental",e=["mcp-
|
|
1
|
+
const o=["tools","resources","prompts","logging","subscribe","completions"],s="experimental",e=["mcp-cursor"];export{o as MCP_SERVER_CAPABILITIES,s as MCP_SERVER_EXPERIMENTAL_CAPABILITIES,e as PAGE_ACTIONS_MCP};
|