@redocly/openapi-docs 3.9.0-next.2 → 3.9.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/redocly-openapi-docs.min.js +1025 -928
  2. package/lib/components/ApiInfo/ApiInfo.d.ts +3 -1
  3. package/lib/components/ApiInfo/ApiInfo.js +1 -1
  4. package/lib/components/ContentItem/ContentItem.d.ts +2 -0
  5. package/lib/components/ContentItem/ContentItem.js +1 -1
  6. package/lib/components/ContentItems/useScrollOnRender.js +1 -1
  7. package/lib/components/Download/types.d.ts +1 -0
  8. package/lib/components/Download/useDownloadInfo.d.ts +1 -1
  9. package/lib/components/Download/useDownloadInfo.js +1 -1
  10. package/lib/components/OperationItem/OperationItem.d.ts +3 -0
  11. package/lib/components/OperationItem/OperationItem.js +2 -2
  12. package/lib/components/PanelItem/styled.d.ts +1 -1
  13. package/lib/components/PanelItem/styled.js +1 -1
  14. package/lib/components/PropertyDetails/PropertyDetails.js +1 -1
  15. package/lib/components/PropertyDetails/types.d.ts +1 -0
  16. package/lib/components/Schema/ObjectSchema.js +1 -1
  17. package/lib/components/Schema/types.d.ts +2 -0
  18. package/lib/components/SectionContent/SectionContent.d.ts +9 -0
  19. package/lib/components/SectionContent/SectionContent.js +3 -3
  20. package/lib/components/SectionContent/index.d.ts +1 -1
  21. package/lib/components/SectionContent/index.js +1 -1
  22. package/lib/components/SectionItem/SectionItem.d.ts +2 -0
  23. package/lib/components/SectionItem/SectionItem.js +1 -1
  24. package/lib/components/StickySidebar/SidebarActions.js +1 -1
  25. package/lib/components/common/Fields/fields.js +1 -0
  26. package/lib/components/common/linkify.js +1 -1
  27. package/lib/components/pluggable/RedocSchema.d.ts +3 -1
  28. package/lib/components/pluggable/RedocSchema.js +1 -1
  29. package/lib/hooks/useOtelTelemetry.d.ts +1 -1
  30. package/lib/index.d.ts +24 -2
  31. package/lib/index.js +1 -1
  32. package/lib/services/code-samples/generator.js +1 -1
  33. package/lib/types/open-api.d.ts +1 -0
  34. package/lib-esm/components/ApiInfo/ApiInfo.d.ts +3 -1
  35. package/lib-esm/components/ApiInfo/ApiInfo.js +1 -1
  36. package/lib-esm/components/ContentItem/ContentItem.d.ts +2 -0
  37. package/lib-esm/components/ContentItem/ContentItem.js +1 -1
  38. package/lib-esm/components/ContentItems/useScrollOnRender.js +1 -1
  39. package/lib-esm/components/Download/types.d.ts +1 -0
  40. package/lib-esm/components/Download/useDownloadInfo.d.ts +1 -1
  41. package/lib-esm/components/Download/useDownloadInfo.js +1 -1
  42. package/lib-esm/components/OperationItem/OperationItem.d.ts +3 -0
  43. package/lib-esm/components/OperationItem/OperationItem.js +2 -2
  44. package/lib-esm/components/PanelItem/styled.d.ts +1 -1
  45. package/lib-esm/components/PanelItem/styled.js +1 -1
  46. package/lib-esm/components/PropertyDetails/PropertyDetails.js +1 -1
  47. package/lib-esm/components/PropertyDetails/types.d.ts +1 -0
  48. package/lib-esm/components/Schema/ObjectSchema.js +1 -1
  49. package/lib-esm/components/Schema/types.d.ts +2 -0
  50. package/lib-esm/components/SectionContent/SectionContent.d.ts +9 -0
  51. package/lib-esm/components/SectionContent/SectionContent.js +2 -2
  52. package/lib-esm/components/SectionContent/index.d.ts +1 -1
  53. package/lib-esm/components/SectionContent/index.js +1 -1
  54. package/lib-esm/components/SectionItem/SectionItem.d.ts +2 -0
  55. package/lib-esm/components/SectionItem/SectionItem.js +1 -1
  56. package/lib-esm/components/StickySidebar/SidebarActions.js +1 -1
  57. package/lib-esm/components/common/Fields/fields.js +1 -0
  58. package/lib-esm/components/common/linkify.js +1 -1
  59. package/lib-esm/components/pluggable/RedocSchema.d.ts +3 -1
  60. package/lib-esm/components/pluggable/RedocSchema.js +1 -1
  61. package/lib-esm/hooks/useOtelTelemetry.d.ts +1 -1
  62. package/lib-esm/index.d.ts +24 -2
  63. package/lib-esm/index.js +1 -1
  64. package/lib-esm/services/code-samples/generator.js +1 -1
  65. package/lib-esm/types/open-api.d.ts +1 -0
  66. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
- import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{memo,useState,useCallback,useMemo}from"react";import styled from"styled-components";import{useAtomValue}from"jotai";import{Feedback,LayoutVariant,BeforeOpenApiOperation,AfterOpenApiOperation}from"@redocly/theme";import{SamplesMiddlePanel,SamplesPanel,ShareLink,Row,CustomBadges}from"../common";import{CallbacksList}from"../Callbacks";import{CallbackSamples}from"../CallbackSamples";import{RequestSamples}from"../RequestSamples";import{OperationResponseList}from"../Responses";import{ResponseSamples}from"../ResponseSamples";import{makeDeepLink,joinWithSeparator}from"../../services";import{layoutAtom,userClaimsAtom}from"../../jotai/app";import{globalStoreAtom}from"../../jotai/store";import{getOperation}from"../../models/operation";import{RenderHook}from"../RenderHook";import{Heading,Title}from"../common/OperationItemTitle";import{LinkToField}from"../common/LinkToField";import{RequestDetails}from"../Request/RequestDetails";import{StyledBadge}from"../common/Badges";import{useTranslate}from"../../hooks";function OperationItemComponent({item:{operationDefinition:e,parent:a,href:o}}){var t,s;const l=useTranslate(),{parser:i,options:n}=useAtomValue(globalStoreAtom),r=useAtomValue(userClaimsAtom),p=useAtomValue(layoutAtom),[d,m]=useState(),{unstable_hooks:c,feedback:u}=n,k=useMemo((()=>getOperation(i,e,a,n,o,void 0,r)),[o,e,n,a,i,r]),{name:S,deprecated:b,isWebhook:x,badges:h}=k||{},j=p===LayoutVariant.STACKED,f=(null==u?void 0:u.type)||"sentiment",g=!0!==(null==u?void 0:u.hide),[_,y]=useState(null),O=useCallback((e=>{d!==e&&m(e)}),[d]),R=useMemo((()=>g?_jsx(FeedbackWrapper,{children:_jsx(Feedback,{type:f,settings:u.settings,path:joinWithSeparator(n.routingBasePath,k.href)})}):null),[g,f,u.settings,n.routingBasePath,k.href]);return _jsxs(OperationRow,{layout:p,children:[_jsx(OperationSubRowStyled,{layout:p,children:_jsxs(SamplesMiddlePanel,{isStacked:j,children:[_jsx(RenderHook,{Hook:BeforeOpenApiOperation||(null==c?void 0:c.BeforeOperation),props:{operation:k}}),_jsxs(Heading,{"data-testid":"operation-item-header",children:[_jsx(ShareLink,{to:o,"aria-label":`link to ${S}`}),_jsx(CustomBadges,{badges:h,children:S}),b&&_jsx(StyledBadge,{deprecated:!0,children:l("openapi.badges.deprecated","Deprecated")}),x&&_jsx(StyledBadge,{children:l("openapi.badges.webhook","Webhook")})]})]})}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsx(SamplesMiddlePanel,{isStacked:j,children:_jsx(RequestDetails,{operation:k,translate:l})}),_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",className:"panel-container-request-samples",children:_jsx(RequestSamples,{operation:k})})]}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsx(SamplesMiddlePanel,{isStacked:j,children:(null===(t=k.responses)||void 0===t?void 0:t.length)?_jsx(OperationResponseList,{responses:k.responses,operationId:k.id,operationPointer:k.pointer,callbackId:k.callbackId,activeResponseTab:d,onTabChange:O}):null}),_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",className:"panel-container-response-samples",children:_jsx(ResponseSamples,{operation:k,activeResponseTab:d,onTabChange:O})})]}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsxs(SamplesMiddlePanel,{isStacked:j,children:[(null===(s=k.callbacks)||void 0===s?void 0:s.length)?_jsxs(_Fragment,{children:[_jsxs(Title,{children:[_jsx(LinkToField,{to:makeDeepLink(k.id,"callbacks")}),l("openapi.callbacks","Callbacks")]}),_jsx(CallbacksList,{callbacks:k.callbacks,onExpand:y,selectedCallback:_})]}):null,_jsx(RenderHook,{Hook:AfterOpenApiOperation||(null==c?void 0:c.AfterOperation),props:{operation:k}})]}),_?_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",children:_jsx(CallbackSamples,{callback:_,translate:l})}):null]}),_jsx(OperationSubRowStyled,{layout:p,children:_jsx(SamplesMiddlePanel,{isStacked:j,fullWidth:!0,children:R})})]})}export const OperationItem=memo(OperationItemComponent);const OperationSamplesPanel=styled(SamplesPanel)`
1
+ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{memo,useState,useCallback,useMemo}from"react";import styled from"styled-components";import{useAtomValue}from"jotai";import{Feedback,LayoutVariant,BeforeOpenApiOperation,AfterOpenApiOperation}from"@redocly/theme";import{SamplesMiddlePanel,SamplesPanel,ShareLink,Row,CustomBadges}from"../common";import{CallbacksList}from"../Callbacks";import{CallbackSamples}from"../CallbackSamples";import{RequestSamples}from"../RequestSamples";import{OperationResponseList}from"../Responses";import{ResponseSamples}from"../ResponseSamples";import{makeDeepLink,joinWithSeparator}from"../../services";import{layoutAtom,userClaimsAtom}from"../../jotai/app";import{globalStoreAtom}from"../../jotai/store";import{getOperation}from"../../models/operation";import{RenderHook}from"../RenderHook";import{Heading,Title}from"../common/OperationItemTitle";import{LinkToField}from"../common/LinkToField";import{RequestDetails}from"../Request/RequestDetails";import{StyledBadge}from"../common/Badges";import{useTranslate}from"../../hooks";function OperationItemComponent({item:{operationDefinition:e,parent:a,href:o}}){var t,s;const l=useTranslate(),{parser:i,options:n}=useAtomValue(globalStoreAtom),r=useAtomValue(userClaimsAtom),p=useAtomValue(layoutAtom),[d,m]=useState(),{unstable_hooks:c,feedback:u}=n,k=useMemo((()=>getOperation(i,e,a,n,o,void 0,r)),[o,e,n,a,i,r]),{name:S,deprecated:b,isWebhook:x,badges:h}=k||{},j=p===LayoutVariant.STACKED,f=(null==u?void 0:u.type)||"sentiment",g=!0!==(null==u?void 0:u.hide),[_,y]=useState(null),O=useCallback((e=>{d!==e&&m(e)}),[d]),R=useMemo((()=>g?_jsx(FeedbackWrapper,{children:_jsx(Feedback,{type:f,settings:u.settings,path:joinWithSeparator(n.routingBasePath,k.href)})}):null),[g,f,u.settings,n.routingBasePath,k.href]);return _jsxs(OperationRow,{layout:p,children:[_jsx(OperationSubRowStyled,{layout:p,children:_jsxs(SamplesMiddlePanel,{isStacked:j,children:[_jsx(RenderHook,{Hook:BeforeOpenApiOperation||(null==c?void 0:c.BeforeOperation),props:{operation:k}}),_jsxs(Heading,{"data-testid":"operation-item-header",children:[_jsx(ShareLink,{to:o,"aria-label":`link to ${S}`}),_jsx(CustomBadges,{badges:h,children:S}),b&&_jsx(StyledBadge,{deprecated:!0,children:l("openapi.badges.deprecated","Deprecated")}),x&&_jsx(StyledBadge,{children:l("openapi.badges.webhook","Webhook")})]})]})}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsx(SamplesMiddlePanel,{isStacked:j,children:_jsx(RequestDetails,{operation:k,translate:l})}),_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",className:"panel-container-request-samples",children:_jsx(RequestSamples,{operation:k})})]}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsx(SamplesMiddlePanel,{isStacked:j,children:(null===(t=k.responses)||void 0===t?void 0:t.length)?_jsx(OperationResponseList,{responses:k.responses,operationId:k.id,operationPointer:k.pointer,callbackId:k.callbackId,activeResponseTab:d,onTabChange:O}):null}),_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",className:"panel-container-response-samples",children:_jsx(ResponseSamples,{operation:k,activeResponseTab:d,onTabChange:O})})]}),_jsxs(OperationSubRowStyled,{layout:p,children:[_jsxs(SamplesMiddlePanel,{isStacked:j,children:[(null===(s=k.callbacks)||void 0===s?void 0:s.length)?_jsxs(_Fragment,{children:[_jsxs(Title,{children:[_jsx(LinkToField,{to:makeDeepLink(k.id,"callbacks")}),l("openapi.callbacks","Callbacks")]}),_jsx(CallbacksList,{callbacks:k.callbacks,onExpand:y,selectedCallback:_})]}):null,_jsx(RenderHook,{Hook:AfterOpenApiOperation||(null==c?void 0:c.AfterOperation),props:{operation:k}})]}),_?_jsx(OperationSamplesPanel,{isStacked:j,"data-testid":"samples-block",children:_jsx(CallbackSamples,{callback:_,translate:l})}):null]}),_jsx(OperationSubRowStyled,{layout:p,children:_jsx(SamplesMiddlePanel,{isStacked:j,fullWidth:!0,children:R})})]})}export const OperationItem=memo(OperationItemComponent);export const OperationSamplesPanel=styled(SamplesPanel)`
2
2
  margin-left: auto;
3
3
  --code-block-padding: var(--spacing-xs) 0 var(--spacing-xs) 20px;
4
- `,FeedbackWrapper=styled.div`
4
+ `;const FeedbackWrapper=styled.div`
5
5
  & > div {
6
6
  flex: 1 1 auto;
7
7
  display: flex;
@@ -1,7 +1,7 @@
1
1
  export declare const PanelItemWrap: import("styled-components").StyledComponent<"span", any, {}, never>;
2
2
  export declare const Item: import("styled-components").StyledComponent<"span", any, {}, never>;
3
3
  export declare const Header: import("styled-components").StyledComponent<"span", any, {}, never>;
4
- export declare const Title: import("styled-components").StyledComponent<"span", any, {
4
+ export declare const Title: import("styled-components").StyledComponent<"p", any, {
5
5
  active?: boolean;
6
6
  }, never>;
7
7
  export declare const ActionsWrap: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -15,7 +15,7 @@ import styled from"styled-components";import{CheckmarkIcon}from"@redocly/theme";
15
15
  color: var(--menu-content-title-color);
16
16
  font-size: var(--h6-font-size);
17
17
  line-height: var(--line-height-xsm);
18
- `;export const Title=styled.span`
18
+ `;export const Title=styled.p`
19
19
  margin: 0;
20
20
  color: var(--text-color-secondary);
21
21
  font-size: var(--font-size-base);
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import styled from"styled-components";import{useAtomValue}from"jotai";import{Schema}from"../Schema";import{FieldDetails}from"./FieldDetails";import{generateDeepLink}from"../common/LinkToField";import{activeMimeNameAtom}from"../../jotai/app";function PropertyDetailsComponent({field:e,skipWriteOnly:i,skipReadOnly:r,level:t=1,showTitle:s,renderDiscriminatorSwitch:a,isFirst:o,fieldParentsName:n,disableDeepLinks:m,oneOfLevel:p}){const d=useAtomValue(activeMimeNameAtom),l=m?void 0:generateDeepLink(e,d),c=!e.schema.isPrimitive&&!e.schema.isCircular;return _jsxs(Wrapper,{isFist:o,expanded:c,className:"property",children:[_jsx(FieldDetails,{field:e,renderDiscriminatorSwitch:a,deepLink:l,fieldParentsName:n}),c&&_jsx(Schema,{schema:e.schema,skipReadOnly:r,skipWriteOnly:i,showTitle:s,expandable:!0,level:t+1,fieldParentsName:[...n||[],e.name],deepLink:l,required:e.required,disableDeepLinks:m,oneOfLevel:p})]})}export const PropertyDetails=memo(PropertyDetailsComponent);const Wrapper=styled.div`
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import styled from"styled-components";import{useAtomValue}from"jotai";import{Schema}from"../Schema";import{FieldDetails}from"./FieldDetails";import{generateDeepLink}from"../common/LinkToField";import{activeMimeNameAtom}from"../../jotai/app";function PropertyDetailsComponent({field:e,skipWriteOnly:i,skipReadOnly:r,level:s=1,showTitle:t,renderDiscriminatorSwitch:a,isFirst:o,fieldParentsName:n,disableDeepLinks:m,oneOfLevel:p,slug:l}){const d=useAtomValue(activeMimeNameAtom),c=m?void 0:generateDeepLink(e,d),h=l&&c?`${l}&${c.replace("#","")}`:c,y=!e.schema.isPrimitive&&!e.schema.isCircular;return _jsxs(Wrapper,{isFist:o,expanded:y,className:"property",children:[_jsx(FieldDetails,{field:e,renderDiscriminatorSwitch:a,deepLink:h,fieldParentsName:n}),y&&_jsx(Schema,{schema:e.schema,skipReadOnly:r,skipWriteOnly:i,showTitle:t,expandable:!0,level:s+1,fieldParentsName:[...n||[],e.name],deepLink:h,required:e.required,disableDeepLinks:m,oneOfLevel:p,slug:l})]})}export const PropertyDetails=memo(PropertyDetailsComponent);const Wrapper=styled.div`
2
2
  width: 100%;
3
3
  padding: ${({isFist:e})=>`var(--schema-${e?"fist-":""}property-details-spacing)`} 0
4
4
  ${({expanded:e})=>e?0:"var(--schema-property-details-spacing)"};
@@ -40,6 +40,7 @@ export interface FieldProps extends SchemaOptions {
40
40
  expandByDefault?: boolean;
41
41
  renderDiscriminatorSwitch?: () => ReactElement;
42
42
  deepLink?: string;
43
+ slug?: string;
43
44
  fieldParentsName?: string[];
44
45
  disableDeepLinks?: boolean;
45
46
  oneOfLevel?: number;
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{useAtomValue}from"jotai";import{PropertiesTableCaption}from"../common";import{Discriminator}from"../Discriminator";import{globalOptionsAtom}from"../../jotai/store";import{PropertyDetails}from"../PropertyDetails";import{SubSchema}from"./SubSchema";import{getExpandByDefault}from"./helpers";import{useTranslate}from"../../hooks";import{ArrayClosingLabel,LabelValue}from"../common/styled";function ObjectSchemaComponent({schema:e,showTitle:a,discriminator:r,level:i,skipWriteOnly:o,skipReadOnly:t,fieldParentsName:n,expandable:l,deepLink:s,required:m,disableDeepLinks:p,shouldCloseArray:c,oneOfLevel:d}){const{fields:h=[],title:f}=e,u=useTranslate(),{schemasExpansionLevel:x}=useAtomValue(globalOptionsAtom),b=t||o?h.filter((e=>!(t&&e.schema.readOnly||o&&e.schema.writeOnly))):h,y=getExpandByDefault({required:m,level:i,schemasExpansionLevel:x});return _jsxs(SubSchema,{expandable:l,expandByDefault:y,level:i,propertyLength:b.length,deepLink:s,operationPointer:e.operationPointer,children:[_jsxs(_Fragment,{children:[a&&_jsx(PropertiesTableCaption,{children:f}),b.map(((e,l)=>_jsx(PropertyDetails,{isFirst:0===l,field:e,fieldParentsName:Number(i)>1?n:[],renderDiscriminatorSwitch:(null==r?void 0:r.fieldName)===e.name&&(null==r?void 0:r.parentSchema)?()=>_jsx(Discriminator,{parent:r.parentSchema,onChange:null==r?void 0:r.onChange,activeOneOfIdx:r.activeOneOfIdx,translate:u}):void 0,skipReadOnly:t,skipWriteOnly:o,showTitle:a,level:i,disableDeepLinks:p,oneOfLevel:d},e.name)))]}),c&&_jsx(ArrayClosingLabel,{className:"array-closing-label",children:_jsx(LabelValue,{children:"]"})})]})}export const ObjectSchema=memo(ObjectSchemaComponent);
1
+ import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{useAtomValue}from"jotai";import{PropertiesTableCaption}from"../common";import{Discriminator}from"../Discriminator";import{globalOptionsAtom}from"../../jotai/store";import{PropertyDetails}from"../PropertyDetails";import{SubSchema}from"./SubSchema";import{getExpandByDefault}from"./helpers";import{useTranslate}from"../../hooks";import{ArrayClosingLabel,LabelValue}from"../common/styled";function ObjectSchemaComponent({schema:e,showTitle:a,discriminator:r,level:i,skipWriteOnly:o,skipReadOnly:t,fieldParentsName:n,expandable:l,deepLink:s,required:m,disableDeepLinks:p,shouldCloseArray:c,oneOfLevel:d,slug:h}){const{fields:u=[],title:f}=e,x=useTranslate(),{schemasExpansionLevel:b}=useAtomValue(globalOptionsAtom),y=t||o?u.filter((e=>!(t&&e.schema.readOnly||o&&e.schema.writeOnly))):u,j=getExpandByDefault({required:m,level:i,schemasExpansionLevel:b});return _jsxs(SubSchema,{expandable:l,expandByDefault:j,level:i,propertyLength:y.length,deepLink:s,operationPointer:e.operationPointer,children:[_jsxs(_Fragment,{children:[a&&_jsx(PropertiesTableCaption,{children:f}),y.map(((e,l)=>_jsx(PropertyDetails,{isFirst:0===l,field:e,fieldParentsName:Number(i)>1?n:[],renderDiscriminatorSwitch:(null==r?void 0:r.fieldName)===e.name&&(null==r?void 0:r.parentSchema)?()=>_jsx(Discriminator,{parent:r.parentSchema,onChange:null==r?void 0:r.onChange,activeOneOfIdx:r.activeOneOfIdx,translate:x}):void 0,skipReadOnly:t,skipWriteOnly:o,showTitle:a,level:i,disableDeepLinks:p,oneOfLevel:d,slug:h},e.name)))]}),c&&_jsx(ArrayClosingLabel,{className:"array-closing-label",children:_jsx(LabelValue,{children:"]"})})]})}export const ObjectSchema=memo(ObjectSchemaComponent);
2
2
  //# sourceMappingURL=ObjectSchema.js.map
@@ -16,6 +16,7 @@ export interface SchemaProps extends SchemaOptions {
16
16
  fieldParentsName?: string[];
17
17
  expandable?: boolean;
18
18
  deepLink?: string;
19
+ slug?: string;
19
20
  required?: boolean;
20
21
  disableDeepLinks?: boolean;
21
22
  oneOfLevel?: number;
@@ -31,6 +32,7 @@ export interface ObjectSchemaProps extends Omit<SchemaProps, 'onDiscriminatorCha
31
32
  fieldParentsName?: string[];
32
33
  expandable?: boolean;
33
34
  required?: boolean;
35
+ slug?: string;
34
36
  oneOfLevel?: number;
35
37
  shouldCloseArray?: boolean;
36
38
  }
@@ -1,3 +1,4 @@
1
+ import { LayoutVariant } from '@redocly/theme';
1
2
  import type { ReactElement } from 'react';
2
3
  import type { ContentItemModel } from '../../models';
3
4
  interface SectionContentProps {
@@ -5,4 +6,12 @@ interface SectionContentProps {
5
6
  hideFooterAndHeader?: boolean;
6
7
  }
7
8
  export declare function SectionContent({ items, hideFooterAndHeader, }: SectionContentProps): ReactElement | null;
9
+ export declare const SectionContainer: import("styled-components").StyledComponent<"div", any, {
10
+ layout?: LayoutVariant;
11
+ }, never>;
12
+ export declare const RightPanelContainer: import("styled-components").StyledComponent<"div", any, {
13
+ isStacked: boolean;
14
+ } & {
15
+ isStacked: boolean;
16
+ }, never>;
8
17
  export {};
@@ -2,13 +2,13 @@ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";i
2
2
  align-self: flex-start;
3
3
  padding-top: var(--panel-gap-vertical);
4
4
  padding-bottom: var(--panel-gap-vertical);
5
- `,SectionContainer=styled.div`
5
+ `;export const SectionContainer=styled.div`
6
6
  width: 100%;
7
7
 
8
8
  @media screen and (min-width: ${breakpoints.large}) {
9
9
  width: ${({layout:e})=>e===LayoutVariant.STACKED?"100%":"calc(100% - var(--panel-samples-width))"};
10
10
  }
11
- `,RightPanelContainer=styled(SamplesPanel)`
11
+ `;export const RightPanelContainer=styled(SamplesPanel)`
12
12
  margin: var(--spacing-base) 0;
13
13
  `;
14
14
  //# sourceMappingURL=SectionContent.js.map
@@ -1 +1 @@
1
- export { SectionContent } from './SectionContent';
1
+ export { SectionContent, SectionContainer, RightPanelContainer } from './SectionContent';
@@ -1,2 +1,2 @@
1
- export{SectionContent}from"./SectionContent";
1
+ export{SectionContent,SectionContainer,RightPanelContainer}from"./SectionContent";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,7 @@
1
+ import { LayoutVariant } from '@redocly/theme';
1
2
  import type { GroupModel } from '../../models';
2
3
  export interface SectionItemProps {
3
4
  item: GroupModel;
5
+ layout: LayoutVariant;
4
6
  }
5
7
  export declare const SectionItem: import("react").NamedExoticComponent<SectionItemProps>;
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{useAtomValue}from"jotai";import{LayoutVariant}from"@redocly/theme";import{SamplesMiddlePanel,Row}from"../common";import{Markdown}from"../Markdown";import{ExternalDocumentation}from"../ExternalDocumentation";import{layoutAtom}from"../../jotai/app";function SectionItemComponent({item:t}){const{externalDocs:o,ast:e,description:a}=t,m=useAtomValue(layoutAtom)===LayoutVariant.STACKED,r=!t.parent||"tag"!==t.parent.type;return _jsxs(_Fragment,{children:[_jsx(Markdown,{ast:e,source:a,htmlWrap:t=>_jsx(SamplesMiddlePanel,{compact:!0,fullWidth:r,isStacked:m,children:t})}),o&&_jsx(Row,{children:_jsx(SamplesMiddlePanel,{compact:!0,fullWidth:r,isStacked:m,children:_jsx(ExternalDocumentation,{externalDocs:o})})})]})}export const SectionItem=memo(SectionItemComponent);
1
+ import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{LayoutVariant}from"@redocly/theme";import{SamplesMiddlePanel,Row}from"../common";import{Markdown}from"../Markdown";import{ExternalDocumentation}from"../ExternalDocumentation";function SectionItemComponent({item:t,layout:e}){const{externalDocs:o,ast:n,description:a}=t,r=e===LayoutVariant.STACKED,m=!t.parent||"tag"!==t.parent.type;return _jsxs(_Fragment,{children:[_jsx(Markdown,{ast:n,source:a,htmlWrap:t=>_jsx(SamplesMiddlePanel,{compact:!0,fullWidth:m,isStacked:r,children:t})}),o&&_jsx(Row,{children:_jsx(SamplesMiddlePanel,{compact:!0,fullWidth:m,isStacked:r,children:_jsx(ExternalDocumentation,{externalDocs:o})})})]})}export const SectionItem=memo(SectionItemComponent);
2
2
  //# sourceMappingURL=SectionItem.js.map
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useAtom}from"jotai";import{LayoutVariant,SidebarActions as ThemeSidebarActions}from"@redocly/theme";import styled from"styled-components";import{collapsedSidebarAtom,layoutAtom}from"../../jotai/app";export const SidebarActions=()=>{const[a,o]=useAtom(layoutAtom),[t,e]=useAtom(collapsedSidebarAtom);return _jsx(_Fragment,{children:_jsx(Wrapper,{children:_jsx(ThemeSidebarActions,{layout:a,onChangeViewClick:()=>o(a===LayoutVariant.STACKED?LayoutVariant.THREE_PANEL:LayoutVariant.STACKED),collapsedSidebar:t,onChangeCollapseSidebarClick:()=>e(!t),isOpenapiDocs:!0})})})};const Wrapper=styled.div`
1
+ import{jsx as _jsx,Fragment as _Fragment}from"react/jsx-runtime";import{useAtom}from"jotai";import{LayoutVariant,SidebarActions as ThemeSidebarActions}from"@redocly/theme";import styled from"styled-components";import{collapsedSidebarAtom,layoutAtom}from"../../jotai/app";export const SidebarActions=()=>{const[a,o]=useAtom(layoutAtom),[t,e]=useAtom(collapsedSidebarAtom);return _jsx(_Fragment,{children:_jsx(Wrapper,{children:_jsx(ThemeSidebarActions,{layout:a,onChangeViewClick:()=>o(a===LayoutVariant.STACKED?LayoutVariant.THREE_PANEL:LayoutVariant.STACKED),collapsedSidebar:t,onChangeCollapseSidebarClick:()=>e(!t),isApiDocs:!0})})})};const Wrapper=styled.div`
2
2
  position: sticky;
3
3
  top: calc(100vh);
4
4
  padding: var(--spacing-sm) var(--spacing-md);
@@ -41,6 +41,7 @@ import styled from"styled-components";import{Button}from"@redocly/theme";export
41
41
  border-radius: var(--border-radius);
42
42
  border: var(--schema-inline-border);
43
43
  padding: 0 var(--spacing-unit);
44
+ width: fit-content;
44
45
  `;export const RecursiveLabel=styled(Tag)`
45
46
  background-color: var(--schema-recursive-bg-color);
46
47
  border-color: var(--schema-recursive-border-color);
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import styled from"styled-components";import{useAtomValue}from"jotai";import{Link as LinkRouter}from"react-router-dom";import{LinkIcon}from"@redocly/theme";import{globalOptionsAtom}from"../../jotai/store";import{tryDecodeURIComponent}from"../../utils";export function Link(i){var o;const{routingBasePath:t,unstable_hooks:e,onDeepLinkClick:n}=useAtomValue(globalOptionsAtom),r=i.security?null===(o=null==e?void 0:e.replaceSecurityLink)||void 0===o?void 0:o.call(e,{securityRequirementId:i.to}):i.to,a=n&&{onClick:i=>{i.preventDefault(),n(t+r)}};return r?_jsx(LinkRouter,Object.assign({"aria-label":i["aria-label"]||`link to ${r}`,id:tryDecodeURIComponent(i.id||""),className:i.className||"",to:(null==r?void 0:r.startsWith("#"))?r:t+r},a,{children:i.children})):i.children?_jsxs("span",{"aria-label":i["aria-label"]||`link to ${r}`,className:i.className,children:[" ",i.children," "]}):null}export const StyledShareLink=styled(Link)`
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import styled from"styled-components";import{useAtomValue}from"jotai";import{Link as LinkRouter}from"react-router-dom";import{LinkIcon}from"@redocly/theme";import{globalOptionsAtom}from"../../jotai/store";import{tryDecodeURIComponent}from"../../utils";export function Link(i){var o;const{routingBasePath:t,unstable_hooks:e,onDeepLinkClick:n}=useAtomValue(globalOptionsAtom),r=i.security?null===(o=null==e?void 0:e.replaceSecurityLink)||void 0===o?void 0:o.call(e,{securityRequirementId:i.to}):i.to,a=n&&{onClick:i=>{i.preventDefault(),n((t||"")+r)}};return r?_jsx(LinkRouter,Object.assign({"aria-label":i["aria-label"]||`link to ${r}`,id:tryDecodeURIComponent(i.id||""),className:i.className||"",to:(null==r?void 0:r.startsWith("#"))?r:(t||"")+r},a,{children:i.children})):i.children?_jsxs("span",{"aria-label":i["aria-label"]||`link to ${r}`,className:i.className,children:[" ",i.children," "]}):null}export const StyledShareLink=styled(Link)`
2
2
  position: absolute;
3
3
  top: 50%;
4
4
  left: 0;
@@ -3,6 +3,8 @@ import type { OpenAPISchema } from '../../types';
3
3
  interface RedocSchemaProps {
4
4
  pointer?: string;
5
5
  schema?: OpenAPISchema;
6
+ disableDeepLinks?: boolean;
7
+ slug?: string;
6
8
  }
7
- export declare const RedocSchema: ({ pointer, schema }: RedocSchemaProps) => ReactElement;
9
+ export declare const RedocSchema: ({ pointer, schema, disableDeepLinks, slug, }: RedocSchemaProps) => ReactElement;
8
10
  export {};
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{useAtomValue}from"jotai";import{getSchema}from"../../models";import{Row}from"../common";import{FullWidthPanel}from"./styled.components";import{Schema}from"../Schema";import{globalStoreAtom}from"../../jotai/store";export const RedocSchema=({pointer:e,schema:o})=>{const{options:r,parser:t}=useAtomValue(globalStoreAtom),m=getSchema({parser:t,schemaOrRef:o||{$ref:e},pointer:e||"",options:r,deps:{operation:{pointer:"RedocSchema"}}});return _jsx(Row,{children:_jsx(FullWidthPanel,{children:_jsx(Schema,{schema:m,level:1,disableDeepLinks:!0})})})};
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{useAtomValue}from"jotai";import{getSchema}from"../../models";import{Row}from"../common";import{FullWidthPanel}from"./styled.components";import{Schema}from"../Schema";import{globalStoreAtom}from"../../jotai/store";export const RedocSchema=({pointer:e,schema:o,disableDeepLinks:r,slug:t})=>{const{options:m,parser:s}=useAtomValue(globalStoreAtom),a=getSchema({parser:s,schemaOrRef:o||{$ref:e},pointer:e||"",options:m,deps:{operation:{pointer:"RedocSchema"}}});return _jsx(Row,{children:_jsx(FullWidthPanel,{children:_jsx(Schema,{schema:a,level:1,disableDeepLinks:r,slug:t})})})};
2
2
  //# sourceMappingURL=RedocSchema.js.map
@@ -1,3 +1,3 @@
1
1
  export declare function useOtelTelemetry(): {
2
- send(action: "error" | "page.viewed" | "search.ai.query" | "search.query" | "search.result.clicked" | "openapi_docs.viewed" | "openapi_docs.performance_metrics" | "openapi_docs.download_definition.clicked" | "openapi_docs.select_language.clicked" | "openapi_docs.expand_collapse_all.clicked" | "openapi_docs.copy_code_snippet.clicked" | "openapi_docs.switch_servers.clicked" | "openapi_docs.examples_switcher.clicked" | "openapi_docs.try_it.opened", data: unknown): void;
2
+ send(action: "error" | "page.viewed" | "search.ai.query" | "search.query" | "search.result.clicked" | "openapi_docs.viewed" | "openapi_docs.performance_metrics" | "openapi_docs.download_definition.clicked" | "openapi_docs.select_language.clicked" | "openapi_docs.expand_collapse_all.clicked" | "openapi_docs.copy_code_snippet.clicked" | "openapi_docs.switch_servers.clicked" | "openapi_docs.examples_switcher.clicked" | "openapi_docs.try_it.opened" | "asyncapi_docs.performance_metrics" | "asyncapi_docs.viewed" | "asyncapi_docs.switch_message.clicked" | "asyncapi_docs.switch_example.clicked" | "asyncapi_docs.message.clicked", data: unknown): void;
3
3
  };
@@ -1,8 +1,10 @@
1
1
  export type { Options } from './services/config-options/types';
2
2
  export type { IMenuItem } from './services/types';
3
- export type { OperationModel, SchemaModel, ContentItemModel } from './models/types';
3
+ export type { OperationModel, SchemaModel, ContentItemModel, GroupModel, FieldModel, } from './models/types';
4
4
  export type { CodeSampleOptions } from './models/code-sample-options';
5
5
  export type { SecurityDetails, OpenAPIDefinition, OpenAPIOperation, OpenAPIParameterLocation, OpenAPISchema, } from './types';
6
+ export type { ServerListProps } from './components/ServerList/types';
7
+ export type { DownloadUrlsConfig, DownloadIconType, UseDownloadInfoProps, UseDownloadInfoReturnType, } from './components/Download/types';
6
8
  export { simplifyAstStructure } from './utils/simplifyAstStructure';
7
9
  export { getOperation } from './models/operation';
8
10
  export { getServerEnvName } from './utils/environments';
@@ -14,8 +16,28 @@ export { RedocSchema, RedocExample } from './components/pluggable';
14
16
  export { RedoclyOpenAPIDocs, RedoclyOpenAPIDocsStandalone, AppProvider, StoreProvider, getMarkdownHeaderId, } from './components/RedoclyOpenAPIDocs';
15
17
  export { JsonPointer } from './utils/JsonPointer';
16
18
  export { isOperationName } from './utils/openapi';
19
+ export { pathIncludesLink } from './utils/path';
17
20
  export { OpenAPIParser } from './services';
18
- export { buildContentItems, normalizeOptions } from './services';
21
+ export { buildContentItems, normalizeOptions, makeDeepLink } from './services';
19
22
  export declare function useOpenapiDocsOptions(): import("./services").Options;
20
23
  export { EmbeddedReplay } from './components/Replay/EmbeddedReplay';
21
24
  export { convertOperationToReplayValue } from './components/Replay/utils';
25
+ export { SectionContainer } from './components/SectionContent';
26
+ export { Row } from './components/common';
27
+ export { RightPanelContainer } from './components/SectionContent';
28
+ export { Overview } from './components/Overview';
29
+ export { SamplesMiddlePanel, Section, SamplesPanel } from './components/common';
30
+ export { Heading } from './components/common/OperationItemTitle';
31
+ export { Dropdown } from './components/common/Dropdown';
32
+ export { Markdown } from './components/Markdown';
33
+ export { FieldValueLabel, FieldLabel } from './components/common';
34
+ export { CodeBlockPanel } from './components/common';
35
+ export { OperationSamplesPanel } from './components/OperationItem/OperationItem';
36
+ export { ExternalDocumentation } from './components/ExternalDocumentation';
37
+ export { PropertyDetails } from './components/PropertyDetails';
38
+ export { addMarkdownItems } from './services/menu/markdown';
39
+ export { getValueFromMdParsedExtension } from './utils/helpers';
40
+ export { ContentItem } from './components/ContentItem';
41
+ export { ExampleSwitch } from './components/Samples/ExampleSwitch';
42
+ export { useDownloadInfo } from './components/Download/useDownloadInfo';
43
+ export { SECTION_ATTR } from './constants';
package/lib-esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{useAtomValue}from"jotai";import{globalOptionsAtom}from"./jotai/store";export{simplifyAstStructure}from"./utils/simplifyAstStructure";export{getOperation}from"./models/operation";export{getServerEnvName}from"./utils/environments";export{getTagOrGroup}from"./models/group";export{generateDeepLink}from"./components/common";export{RequestSamples}from"./components/RequestSamples";export{ResponseSamples}from"./components/ResponseSamples";export{RedocSchema,RedocExample}from"./components/pluggable";export{RedoclyOpenAPIDocs,RedoclyOpenAPIDocsStandalone,AppProvider,StoreProvider,getMarkdownHeaderId}from"./components/RedoclyOpenAPIDocs";export{JsonPointer}from"./utils/JsonPointer";export{isOperationName}from"./utils/openapi";export{OpenAPIParser}from"./services";export{buildContentItems,normalizeOptions}from"./services";export function useOpenapiDocsOptions(){return useAtomValue(globalOptionsAtom)}export{EmbeddedReplay}from"./components/Replay/EmbeddedReplay";export{convertOperationToReplayValue}from"./components/Replay/utils";
1
+ import{useAtomValue}from"jotai";import{globalOptionsAtom}from"./jotai/store";export{simplifyAstStructure}from"./utils/simplifyAstStructure";export{getOperation}from"./models/operation";export{getServerEnvName}from"./utils/environments";export{getTagOrGroup}from"./models/group";export{generateDeepLink}from"./components/common";export{RequestSamples}from"./components/RequestSamples";export{ResponseSamples}from"./components/ResponseSamples";export{RedocSchema,RedocExample}from"./components/pluggable";export{RedoclyOpenAPIDocs,RedoclyOpenAPIDocsStandalone,AppProvider,StoreProvider,getMarkdownHeaderId}from"./components/RedoclyOpenAPIDocs";export{JsonPointer}from"./utils/JsonPointer";export{isOperationName}from"./utils/openapi";export{pathIncludesLink}from"./utils/path";export{OpenAPIParser}from"./services";export{buildContentItems,normalizeOptions,makeDeepLink}from"./services";export function useOpenapiDocsOptions(){return useAtomValue(globalOptionsAtom)}export{EmbeddedReplay}from"./components/Replay/EmbeddedReplay";export{convertOperationToReplayValue}from"./components/Replay/utils";export{SectionContainer}from"./components/SectionContent";export{Row}from"./components/common";export{RightPanelContainer}from"./components/SectionContent";export{Overview}from"./components/Overview";export{SamplesMiddlePanel,Section,SamplesPanel}from"./components/common";export{Heading}from"./components/common/OperationItemTitle";export{Dropdown}from"./components/common/Dropdown";export{Markdown}from"./components/Markdown";export{FieldValueLabel,FieldLabel}from"./components/common";export{CodeBlockPanel}from"./components/common";export{OperationSamplesPanel}from"./components/OperationItem/OperationItem";export{ExternalDocumentation}from"./components/ExternalDocumentation";export{PropertyDetails}from"./components/PropertyDetails";export{addMarkdownItems}from"./services/menu/markdown";export{getValueFromMdParsedExtension}from"./utils/helpers";export{ContentItem}from"./components/ContentItem";export{ExampleSwitch}from"./components/Samples/ExampleSwitch";export{useDownloadInfo}from"./components/Download/useDownloadInfo";export{SECTION_ATTR}from"./constants";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import*as Sampler from"openapi-sampler";import merge from"deepmerge";import{isObject}from"@redocly/theme";import{areArraysEqual,serializeParameterValue,getSecurityDetails,getParameterValue,queryString,isArrayOfObjects,deleteEmptyArrayItem}from"../../utils";import{normalizeMimeType,arrayMergeStrategy}from"../utils";import{MediaTypes}from"../../constants";import{HTTPSnippet}from"./httpsnippet";import{getActiveMediaType}from"../../models/mediaContent";import StringUtility from"./httpsnippet/helpers/string-utility";function getSelectedSecurityScheme(e,t){return e.find((e=>{const a=e.schemes.map((e=>e.id));return areArraysEqual(a,t||[])}))}function mapOperationToHAR(e,{exampleName:t="",skipOptionalParameters:a=!1,withOAuth2Call:r=!1,spec:s,generatedPayloadSamplesMaxDepth:i=8,pathParams:n={},properties:o={},activeMimeName:l=""},{environment:c,requestValues:u,activeSecuritySchemeIds:p}){var d,m,y;const h=c.server,f=e.servers.find((e=>e.url===h))||e.servers[0],g=getSelectedSecurityScheme(e.security,p),{securityHeaders:O,securityCookies:v,securityQueries:S,securityOAuth2ExtraCalls:T,basicAuth:_}=getSecurityData(g||(null===(d=e.security)||void 0===d?void 0:d[0]),r,c),C=(null===(m=null==e?void 0:e.requestBody)||void 0===m?void 0:m.content)&&getActiveMediaType(e.requestBody.content,l),b={skipNonRequired:a,skipReadOnly:!0,maxSampleDepth:i,quiet:!0},k=u;let j=!1;const E=e.parameters.filter((e=>"header"===e.in)).filter((e=>!(a&&!e.required))).map((e=>{var t;return{name:e.name,value:(null===(t=k.header)||void 0===t?void 0:t[e.name])||getParameterValue("header",e.name)||e.example||serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,b,s))}})).map((e=>((null==C?void 0:C.name)&&"content-type"===e.name.toLowerCase()&&(j=!0,e.value=C.name),e))).concat(O);!j&&(null==C?void 0:C.name)&&E.unshift({name:"Content-Type",value:null==C?void 0:C.name});const A=e.parameters.filter((e=>"cookie"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,e.example||Sampler.sample(e.schema.rawSchema,b,s))))).reduce(((e,t)=>{var a;for(const[r,s]of Object.entries(t))e.push({name:r,value:String((null===(a=k.cookie)||void 0===a?void 0:a[r])||s)});return e}),[]).concat(v),P=e.parameters.filter((e=>"query"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,e.example||Sampler.sample(e.schema.rawSchema,b,s))))).reduce(((e,t)=>{var a,r,s;for(const[i,n]of Object.entries(t))e.push({name:i,value:isArrayOfObjects(null===(a=k.query)||void 0===a?void 0:a[i])&&JSON.stringify(deleteEmptyArrayItem(null===(r=k.query)||void 0===r?void 0:r[i]))||String((null===(s=k.query)||void 0===s?void 0:s[i])||n)});return e}),[]).concat(S),w=`${null==f?void 0:f.url.replace(/\/$/,"")}/${e.path.replace(/^\//,"")}`,x=e.parameters.filter((e=>"path"===e.in)).reduce(((e,t)=>{var a;const{in:r,name:s}=t;return e[s]=(null===(a=k.path)||void 0===a?void 0:a[s])||t.example||n[s]||getParameterValue(r,s),e}),{}),M=null===(y=null==C?void 0:C.examples)||void 0===y?void 0:y[t],R=(null==C?void 0:C.examples)||{},[D]=Object.values(R),q=null==C?void 0:C.name.toLowerCase(),N=(null==k?void 0:k.body)||(null==M?void 0:M.value)||(null==D?void 0:D.value)||(null==C?void 0:C.schema)&&Sampler.sample(null==C?void 0:C.schema.rawSchema,Object.assign(Object.assign({},b),{format:q===MediaTypes.XML?"xml":"json"}),s);let H="",U=[];switch(normalizeMimeType(q)){case MediaTypes.JSON:H=JSON.stringify(getDataRequest(N,o));break;case MediaTypes.XML:H=N;break;case MediaTypes.URL_ENCODED:case MediaTypes.MULTIPART:H=queryString.stringify(getDataRequest(N,o)),U=objectToHarParams(getDataRequest(N,o));break;default:H=String(N||"")}const $=H?{mimeType:(null==C?void 0:C.name)||MediaTypes.OCTET_STREAM,text:H,params:U}:void 0,z=e.responses.map((e=>e.code));return{method:e.httpVerb,url:w,httpVersion:"HTTP/1.1",cookies:A,headers:E,queryString:P,postData:$,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:T,basicAuth:_,pathParameters:x,serverVariables:c,allResponseCodes:z}}const defaultOptions={withImports:!0,withComments:!1},langToSnippetConfig={curl:{code:"shell",defaultTarget:"curl",defaultOptions:Object.assign(Object.assign({},defaultOptions),{short:!0})},JavaScript:{code:"javascript",defaultTarget:"fetch",defaultOptions:Object.assign(Object.assign({},defaultOptions),{withImports:!1})},"Node.js":{code:"node",defaultTarget:"fetch",defaultOptions:Object.assign({},defaultOptions)},Python:{code:"python",defaultTarget:"requests",defaultOptions:Object.assign({},defaultOptions)},"Java8+Apache":{code:"java8",defaultTarget:"apachehttp",defaultOptions:Object.assign({},defaultOptions)},Java:{code:"java",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},"C#":{code:"csharp",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},"C#+Newtonsoft":{code:"csharpNewtonsoft",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},Go:{code:"go",defaultTarget:"http.DefaultClient",defaultOptions:Object.assign({},defaultOptions)},PHP:{code:"php",defaultTarget:"curl",defaultOptions:Object.assign({},defaultOptions)},Ruby:{code:"ruby",defaultTarget:"net::http",defaultOptions:Object.assign({},defaultOptions)},R:{code:"r",defaultTarget:"httr",defaultOptions:Object.assign({},defaultOptions)}};export function getCodeSample({lang:e,operation:t,exampleName:a,pathParams:r,properties:s,options:i={},environment:n,translate:o}){try{const{skipOptionalParameters:l,withOAuth2Call:c,spec:u,generatedPayloadSamplesMaxDepth:p,store:d,activeMimeName:m}=i,y=mapOperationToHAR(t,{exampleName:a,pathParams:r,properties:s,skipOptionalParameters:l,withOAuth2Call:c,spec:u,generatedPayloadSamplesMaxDepth:p,activeMimeName:m},{environment:n,requestValues:d.requestValues,activeSecuritySchemeIds:d.activeSecuritySchemeIds}),h=new HTTPSnippet(y);return langToSnippetConfig[e]?h.convert(langToSnippetConfig[e].code,langToSnippetConfig[e].defaultTarget,Object.assign(Object.assign({},langToSnippetConfig[e].defaultOptions),i)):o("openapi.unsupportedLanguage","Language is not supported.")}catch(e){return console.error(e),o("openapi.failedToGenerateCodeSample","Failed to generate code sample.")}}function getSecurityData(e,t,a){var r,s,i,n,o;const l={securityHeaders:[],securityCookies:[],securityQueries:[],securityOAuth2ExtraCalls:[],basicAuth:void 0};for(const c of(null==e?void 0:e.schemes)||[]){const e=getSecurityDetails(c.id,a),u={access_token:c["x-defaultAccessToken"],token_type:c["x-defaultTokenType"],client_id:c["x-defaultClientId"],client_secret:c["x-defaultClientSecret"]},p=c["x-defaultUsername"],d=c["x-defaultPassword"];switch(c.type){case"openIdConnect":null===(r=l.securityHeaders)||void 0===r||r.push({name:"Authorization",value:u.access_token?`${u.token_type||"Bearer"} ${u.access_token}`:e.token?`${u.token_type||e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const a=u.access_token?`${u.token_type||"Bearer"} ${u.access_token}`:e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";c.flows.clientCredentials&&t?l.securityOAuth2ExtraCalls.push(getOAuth2ClientCredsCallHar(c.flows.clientCredentials,c.scopes,Object.assign(Object.assign({},e),{client_id:u.client_id||e.client_id,client_secret:u.client_secret||e.client_secret}))):c.flows.password&&t&&l.securityOAuth2ExtraCalls.push(getOAuth2PasswordCallHar(c.flows.password,c.scopes,Object.assign(Object.assign({},e),{client_id:u.client_id||e.client_id,client_secret:u.client_secret||e.client_secret}))),null===(s=l.securityHeaders)||void 0===s||s.push({name:"Authorization",value:a});break}case"apiKey":{const t=u.access_token||e.raw||"YOUR_API_KEY_HERE";"header"===c.in&&(null===(i=l.securityHeaders)||void 0===i||i.push({name:c.name,value:t})),"cookie"===c.in&&l.securityCookies.push({name:c.name,value:t}),"query"===c.in&&l.securityQueries.push({name:c.name,value:t});break}case"http":if("basic"===c.scheme)l.basicAuth={username:p||e.username||`<${StringUtility.toSnakeCase("Username")}>`,password:d||e.password||`<${StringUtility.toSnakeCase("Password")}>`};else{const t=(null==u?void 0:u.access_token)||(null===(n=e.token)||void 0===n?void 0:n.access_token)||`<YOUR_${c.bearerFormat||"TOKEN"}_HERE>`;null===(o=l.securityHeaders)||void 0===o||o.push({name:"Authorization",value:`${capitalizeFirst(c.scheme||"bearer")} ${t}`})}}}return l}function getOAuth2PasswordCallHar(e,t,a){return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:MediaTypes.URL_ENCODED},{name:"Accept",value:MediaTypes.JSON}],queryString:[],postData:{mimeType:MediaTypes.URL_ENCODED,text:"",params:[{name:"grant_type",value:"password"},{name:"client_id",value:a.client_id||"YOUR_CLIENT_ID"},{name:"client_secret",value:a.client_secret||"YOUR_CLIENT_SECRET"},{name:"username",value:a.username||"<username>"},{name:"password",value:a.password||"<password>"},t.length?{name:"scope",value:t.join(" ")}:void 0].filter(isDefined)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[]}}function getOAuth2ClientCredsCallHar(e,t,a){return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:MediaTypes.URL_ENCODED},{name:"Accept",value:MediaTypes.JSON}],queryString:[],postData:{mimeType:MediaTypes.URL_ENCODED,text:"",params:[{name:"grant_type",value:"client_credentials"},{name:"client_id",value:a.client_id||"YOUR_CLIENT_ID"},{name:"client_secret",value:a.client_secret||"YOUR_CLIENT_SECRET"},t.length?{name:"scope",value:t.join(" ")}:void 0].filter(isDefined)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[]}}export function getDataRequest(e,t){if(e){if(isObject(e))return Object.keys(e).length>0&&0===Object.keys(t).length?e:merge(e,t,{arrayMerge:arrayMergeStrategy});try{return merge(JSON.parse(e),t,{arrayMerge:arrayMergeStrategy})}catch(e){return!1}}return!1}function objectToHarParams(e,t=""){const a=[];if(Array.isArray(e))return e.map((e=>({name:`${t}`,value:String(e)})));for(const[r,s]of Object.entries(e)){const e=t?`${t}[${r}]`:r;"object"==typeof s&&null!==s?a.push(...objectToHarParams(s,e)):a.push({name:e,value:String(s)})}return a}export function isDefined(e){return void 0!==e}export function capitalizeFirst(e){return e.charAt(0).toUpperCase()+e.slice(1)}
1
+ import*as Sampler from"openapi-sampler";import merge from"deepmerge";import{isObject}from"@redocly/theme";import{areArraysEqual,serializeParameterValue,getSecurityDetails,getParameterValue,queryString,isArrayOfObjects,deleteEmptyArrayItem}from"../../utils";import{normalizeMimeType,arrayMergeStrategy}from"../utils";import{MediaTypes}from"../../constants";import{HTTPSnippet}from"./httpsnippet";import{getActiveMediaType}from"../../models/mediaContent";import StringUtility from"./httpsnippet/helpers/string-utility";function getSelectedSecurityScheme(e,t){return e.find((e=>{const a=e.schemes.map((e=>e.id));return areArraysEqual(a,t||[])}))}function mapOperationToHAR(e,{exampleName:t="",skipOptionalParameters:a=!1,withOAuth2Call:r=!1,spec:s,generatedPayloadSamplesMaxDepth:i=8,pathParams:n={},properties:o={},activeMimeName:l=""},{environment:c,requestValues:u,activeSecuritySchemeIds:p}){var d,m,y;const h=c.server,f=e.servers.find((e=>e.url===h))||e.servers[0],g=getSelectedSecurityScheme(e.security,p),{securityHeaders:O,securityCookies:v,securityQueries:S,securityOAuth2ExtraCalls:T,basicAuth:_}=getSecurityData(g||(null===(d=e.security)||void 0===d?void 0:d[0]),r,c),C=(null===(m=null==e?void 0:e.requestBody)||void 0===m?void 0:m.content)&&getActiveMediaType(e.requestBody.content,l),b={skipNonRequired:a,skipReadOnly:!0,maxSampleDepth:i,quiet:!0},k=u;let j=!1;const E=e.parameters.filter((e=>"header"===e.in)).filter((e=>!(a&&!e.required))).map((e=>{var t;return{name:e.name,value:(null===(t=k.header)||void 0===t?void 0:t[e.name])||getParameterValue("header",e.name)||e.example||serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,b,s))}})).map((e=>((null==C?void 0:C.name)&&"content-type"===e.name.toLowerCase()&&(j=!0,e.value=C.name),e))).concat(O);!j&&(null==C?void 0:C.name)&&E.unshift({name:"Content-Type",value:null==C?void 0:C.name});const A=e.parameters.filter((e=>"cookie"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,e.example||Sampler.sample(e.schema.rawSchema,b,s))))).reduce(((e,t)=>{var a;for(const[r,s]of Object.entries(t))e.push({name:r,value:String((null===(a=k.cookie)||void 0===a?void 0:a[r])||s)});return e}),[]).concat(v),P=e.parameters.filter((e=>"query"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,e.example||Sampler.sample(e.schema.rawSchema,b,s))))).reduce(((e,t)=>{var a,r,s;for(const[i,n]of Object.entries(t))e.push({name:i,value:isArrayOfObjects(null===(a=k.query)||void 0===a?void 0:a[i])&&JSON.stringify(deleteEmptyArrayItem(null===(r=k.query)||void 0===r?void 0:r[i]))||String((null===(s=k.query)||void 0===s?void 0:s[i])||n)});return e}),[]).concat(S),w=`${null==f?void 0:f.url.replace(/\/$/,"")}/${e.path.replace(/^\//,"")}`,x=e.parameters.filter((e=>"path"===e.in)).reduce(((e,t)=>{var a;const{in:r,name:s}=t;return e[s]=(null===(a=k.path)||void 0===a?void 0:a[s])||t.example||n[s]||getParameterValue(r,s),e}),{}),M=null===(y=null==C?void 0:C.examples)||void 0===y?void 0:y[t],R=(null==C?void 0:C.examples)||{},[D]=Object.values(R),q=null==C?void 0:C.name.toLowerCase(),N=(null==k?void 0:k.body)||(null==M?void 0:M.value)||(null==D?void 0:D.value)||(null==C?void 0:C.schema)&&Sampler.sample(null==C?void 0:C.schema.rawSchema,Object.assign(Object.assign({},b),{format:q===MediaTypes.XML?"xml":"json"}),s);let H="",U=[];switch(normalizeMimeType(q)){case MediaTypes.JSON:H=JSON.stringify(getDataRequest(N,o));break;case MediaTypes.XML:H=N;break;case MediaTypes.URL_ENCODED:case MediaTypes.MULTIPART:H=queryString.stringify(getDataRequest(N,o)),U=objectToHarParams(getDataRequest(N,o));break;default:H=String(N||"")}const $=H?{mimeType:(null==C?void 0:C.name)||MediaTypes.OCTET_STREAM,text:H,params:U}:void 0,z=e.responses.map((e=>e.code));return{method:e.httpVerb,url:w,httpVersion:"HTTP/1.1",cookies:A,headers:E,queryString:P,postData:$,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:T,basicAuth:_,pathParameters:x,serverVariables:c,allResponseCodes:z}}const defaultOptions={withImports:!0,withComments:!1},langToSnippetConfig={curl:{code:"shell",defaultTarget:"curl",defaultOptions:Object.assign(Object.assign({},defaultOptions),{short:!0})},JavaScript:{code:"javascript",defaultTarget:"fetch",defaultOptions:Object.assign(Object.assign({},defaultOptions),{withImports:!1})},"Node.js":{code:"node",defaultTarget:"fetch",defaultOptions:Object.assign({},defaultOptions)},Python:{code:"python",defaultTarget:"requests",defaultOptions:Object.assign({},defaultOptions)},"Java8+Apache":{code:"java8",defaultTarget:"apachehttp",defaultOptions:Object.assign({},defaultOptions)},Java:{code:"java",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},"C#":{code:"csharp",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},"C#+Newtonsoft":{code:"csharpNewtonsoft",defaultTarget:"httpclient",defaultOptions:Object.assign({},defaultOptions)},Go:{code:"go",defaultTarget:"http.DefaultClient",defaultOptions:Object.assign({},defaultOptions)},PHP:{code:"php",defaultTarget:"curl",defaultOptions:Object.assign({},defaultOptions)},Ruby:{code:"ruby",defaultTarget:"net::http",defaultOptions:Object.assign({},defaultOptions)},R:{code:"r",defaultTarget:"httr",defaultOptions:Object.assign({},defaultOptions)}};export function getCodeSample({lang:e,operation:t,exampleName:a,pathParams:r,properties:s,options:i={},environment:n,translate:o}){try{const{skipOptionalParameters:l,withOAuth2Call:c,spec:u,generatedPayloadSamplesMaxDepth:p,store:d,activeMimeName:m}=i,y=mapOperationToHAR(t,{exampleName:a,pathParams:r,properties:s,skipOptionalParameters:l,withOAuth2Call:c,spec:u,generatedPayloadSamplesMaxDepth:p,activeMimeName:m},{environment:n,requestValues:d.requestValues,activeSecuritySchemeIds:d.activeSecuritySchemeIds}),h=new HTTPSnippet(y);return langToSnippetConfig[e]?h.convert(langToSnippetConfig[e].code,langToSnippetConfig[e].defaultTarget,Object.assign(Object.assign({},langToSnippetConfig[e].defaultOptions),i)):o("openapi.unsupportedLanguage","Language is not supported.")}catch(e){return console.error(e),o("openapi.failedToGenerateCodeSample","Failed to generate code sample.")}}function getSecurityData(e,t,a){var r,s,i,n,o;const l={securityHeaders:[],securityCookies:[],securityQueries:[],securityOAuth2ExtraCalls:[],basicAuth:void 0};for(const c of(null==e?void 0:e.schemes)||[]){const e=getSecurityDetails(c.id,a),u={access_token:c["x-defaultAccessToken"],token_type:c["x-defaultTokenType"],client_id:c["x-defaultClientId"],client_secret:c["x-defaultClientSecret"]},p=c["x-defaultUsername"],d=c["x-defaultPassword"];switch(c.type){case"openIdConnect":null===(r=l.securityHeaders)||void 0===r||r.push({name:"Authorization",value:u.access_token?`${u.token_type||"Bearer"} ${u.access_token}`:e.token?`${u.token_type||e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const a=u.access_token?`${u.token_type||"Bearer"} ${u.access_token}`:e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";c.flows.clientCredentials&&t?l.securityOAuth2ExtraCalls.push(getOAuth2ClientCredsCallHar(c.flows.clientCredentials,c.scopes,Object.assign(Object.assign({},e),{client_id:u.client_id||e.client_id,client_secret:u.client_secret||e.client_secret}))):c.flows.password&&t&&l.securityOAuth2ExtraCalls.push(getOAuth2PasswordCallHar(c.flows.password,c.scopes,Object.assign(Object.assign({},e),{client_id:u.client_id||e.client_id,client_secret:u.client_secret||e.client_secret}))),null===(s=l.securityHeaders)||void 0===s||s.push({name:"Authorization",value:a});break}case"apiKey":{const t=u.access_token||e.raw||"YOUR_API_KEY_HERE";"header"===c.in&&(null===(i=l.securityHeaders)||void 0===i||i.push({name:c.name,value:t})),"cookie"===c.in&&l.securityCookies.push({name:c.name,value:t}),"query"===c.in&&l.securityQueries.push({name:c.name,value:t});break}case"http":if("basic"===c.scheme)l.basicAuth={username:p||e.username||`<${StringUtility.toSnakeCase("Username")}>`,password:d||e.password||`<${StringUtility.toSnakeCase("Password")}>`};else{const t=(null==u?void 0:u.access_token)||(null===(n=e.token)||void 0===n?void 0:n.access_token)||`<YOUR_${c.bearerFormat||"TOKEN"}_HERE>`;null===(o=l.securityHeaders)||void 0===o||o.push({name:"Authorization",value:`${capitalizeFirst(c.scheme||"bearer")} ${t}`})}}}return l}function getOAuth2PasswordCallHar(e,t,a){return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:MediaTypes.URL_ENCODED},{name:"Accept",value:MediaTypes.JSON}],queryString:[],postData:{mimeType:MediaTypes.URL_ENCODED,text:"",params:[{name:"grant_type",value:"password"},{name:"client_id",value:a.client_id||"YOUR_CLIENT_ID"},{name:"client_secret",value:a.client_secret||"YOUR_CLIENT_SECRET"},{name:"username",value:a.username||"<username>"},{name:"password",value:a.password||"<password>"},t.length?{name:"scope",value:t.join(" ")}:void 0].filter(isDefined)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[]}}function getOAuth2ClientCredsCallHar(e,t,a){return{method:"POST",url:e.tokenUrl,httpVersion:"HTTP/1.1",headers:[{name:"Content-Type",value:MediaTypes.URL_ENCODED},{name:"Accept",value:MediaTypes.JSON}],queryString:[],postData:{mimeType:MediaTypes.URL_ENCODED,text:"",params:[{name:"grant_type",value:"client_credentials"},{name:"client_id",value:a.client_id||"YOUR_CLIENT_ID"},{name:"client_secret",value:a.client_secret||"YOUR_CLIENT_SECRET"},t.length?{name:"scope",value:t.join(" ")}:void 0].filter(isDefined)},cookies:[],headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:[]}}export function getDataRequest(e,t){if(e){if(isObject(e))return Object.keys(e).length>0&&0===Object.keys(t).length?e:merge(e,t,{arrayMerge:arrayMergeStrategy});try{return merge(JSON.parse(e),t,{arrayMerge:arrayMergeStrategy})}catch(e){return!1}}return!1}function objectToHarParams(e,t=""){const a=[];for(const[r,s]of Object.entries(e)){const i=t?`${t}[${r}]`:r;if("object"==typeof s&&null!==s)a.push(...objectToHarParams(s,i));else{const r=Array.isArray(e)&&"string"==typeof s&&t?t:i;a.push({name:r,value:String(s)})}}return a}export function isDefined(e){return void 0!==e}export function capitalizeFirst(e){return e.charAt(0).toUpperCase()+e.slice(1)}
2
2
  //# sourceMappingURL=generator.js.map
@@ -24,6 +24,7 @@ export interface OpenAPIInfo extends ParsedDescriptionWithSummary {
24
24
  termsOfService?: string;
25
25
  contact?: OpenAPIContact;
26
26
  license?: OpenAPILicense;
27
+ externalDocs?: OpenAPIExternalDocumentation;
27
28
  'x-logo'?: XLogo;
28
29
  'x-metadata'?: XMetadata;
29
30
  'x-seo'?: XSEO;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.9.0-next.2",
3
+ "version": "3.9.0-next.3",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -39,12 +39,14 @@
39
39
  "styled-components": "^4.1.1 || ^5.3.11",
40
40
  "swagger2openapi": "^7.0.8",
41
41
  "tslib": "^2.2.0",
42
+ "unfetch": "4.2.0",
42
43
  "url": "~0.11.0",
44
+ "url-polyfill": "1.1.12",
43
45
  "url-template": "^2.0.8",
44
46
  "util": "~0.12.5",
45
47
  "web-vitals": "3.3.1",
46
- "@redocly/replay": "0.12.0-next.2",
47
- "@redocly/config": "0.24.0"
48
+ "@redocly/config": "0.24.1",
49
+ "@redocly/replay": "0.12.0-next.3"
48
50
  },
49
51
  "devDependencies": {
50
52
  "@shikijs/transformers": "1.24.0",
@@ -87,12 +89,10 @@
87
89
  "ts-jest": "29.1.2",
88
90
  "ts-node": "10.9.2",
89
91
  "typescript": "5.6.2",
90
- "unfetch": "4.2.0",
91
- "url-polyfill": "1.1.12",
92
92
  "webpack": "5.94.0",
93
93
  "webpack-cli": "5.1.4",
94
94
  "webpack-dev-server": "5.1.0",
95
- "@redocly/theme": "0.53.0-next.2"
95
+ "@redocly/theme": "0.53.0-next.3"
96
96
  },
97
97
  "scripts": {
98
98
  "start": "npm run copy-highlight-hook && webpack serve --mode=development --hot",