@redocly/openapi-docs 3.9.0-next.1 → 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 (86) hide show
  1. package/dist/redocly-openapi-docs.min.js +1919 -1759
  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/empty.d.ts +1 -0
  30. package/lib/empty.js +1 -1
  31. package/lib/hooks/useOtelTelemetry.d.ts +1 -1
  32. package/lib/index.d.ts +25 -2
  33. package/lib/index.js +1 -1
  34. package/lib/services/code-samples/generator.js +1 -1
  35. package/lib/services/code-samples/types.d.ts +5 -2
  36. package/lib/services/menu/markdown.js +1 -1
  37. package/lib/types/open-api.d.ts +1 -0
  38. package/lib/utils/helpers.js +1 -1
  39. package/lib/utils/loadAndBundleSpec.js +1 -1
  40. package/lib/utils/saveTextBeforeHeading.d.ts +7 -1
  41. package/lib/utils/saveTextBeforeHeading.js +1 -1
  42. package/lib/utils/simplifyAstStructure.d.ts +2 -0
  43. package/lib/utils/simplifyAstStructure.js +2 -0
  44. package/lib-esm/components/ApiInfo/ApiInfo.d.ts +3 -1
  45. package/lib-esm/components/ApiInfo/ApiInfo.js +1 -1
  46. package/lib-esm/components/ContentItem/ContentItem.d.ts +2 -0
  47. package/lib-esm/components/ContentItem/ContentItem.js +1 -1
  48. package/lib-esm/components/ContentItems/useScrollOnRender.js +1 -1
  49. package/lib-esm/components/Download/types.d.ts +1 -0
  50. package/lib-esm/components/Download/useDownloadInfo.d.ts +1 -1
  51. package/lib-esm/components/Download/useDownloadInfo.js +1 -1
  52. package/lib-esm/components/OperationItem/OperationItem.d.ts +3 -0
  53. package/lib-esm/components/OperationItem/OperationItem.js +2 -2
  54. package/lib-esm/components/PanelItem/styled.d.ts +1 -1
  55. package/lib-esm/components/PanelItem/styled.js +1 -1
  56. package/lib-esm/components/PropertyDetails/PropertyDetails.js +1 -1
  57. package/lib-esm/components/PropertyDetails/types.d.ts +1 -0
  58. package/lib-esm/components/Schema/ObjectSchema.js +1 -1
  59. package/lib-esm/components/Schema/types.d.ts +2 -0
  60. package/lib-esm/components/SectionContent/SectionContent.d.ts +9 -0
  61. package/lib-esm/components/SectionContent/SectionContent.js +2 -2
  62. package/lib-esm/components/SectionContent/index.d.ts +1 -1
  63. package/lib-esm/components/SectionContent/index.js +1 -1
  64. package/lib-esm/components/SectionItem/SectionItem.d.ts +2 -0
  65. package/lib-esm/components/SectionItem/SectionItem.js +1 -1
  66. package/lib-esm/components/StickySidebar/SidebarActions.js +1 -1
  67. package/lib-esm/components/common/Fields/fields.js +1 -0
  68. package/lib-esm/components/common/linkify.js +1 -1
  69. package/lib-esm/components/pluggable/RedocSchema.d.ts +3 -1
  70. package/lib-esm/components/pluggable/RedocSchema.js +1 -1
  71. package/lib-esm/empty.d.ts +1 -0
  72. package/lib-esm/empty.js +1 -1
  73. package/lib-esm/hooks/useOtelTelemetry.d.ts +1 -1
  74. package/lib-esm/index.d.ts +25 -2
  75. package/lib-esm/index.js +1 -1
  76. package/lib-esm/services/code-samples/generator.js +1 -1
  77. package/lib-esm/services/code-samples/types.d.ts +5 -2
  78. package/lib-esm/services/menu/markdown.js +1 -1
  79. package/lib-esm/types/open-api.d.ts +1 -0
  80. package/lib-esm/utils/helpers.js +1 -1
  81. package/lib-esm/utils/loadAndBundleSpec.js +1 -1
  82. package/lib-esm/utils/saveTextBeforeHeading.d.ts +7 -1
  83. package/lib-esm/utils/saveTextBeforeHeading.js +1 -1
  84. package/lib-esm/utils/simplifyAstStructure.d.ts +2 -0
  85. package/lib-esm/utils/simplifyAstStructure.js +2 -0
  86. package/package.json +9 -9
@@ -1 +1,7 @@
1
- export declare function saveTextBeforeHeading(description: string | GenericObject): any;
1
+ import type { Node } from '@markdoc/markdoc';
2
+ interface DescriptionObject {
3
+ result: string | Node | Node[];
4
+ raw: string;
5
+ }
6
+ export declare function saveTextBeforeHeading(description: string | DescriptionObject): string | DescriptionObject;
7
+ export {};
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.saveTextBeforeHeading=saveTextBeforeHeading;const markdoc_1=require("@markdoc/markdoc"),theme_1=require("@redocly/theme"),utils_1=require("../services/utils");function saveTextBeforeHeading(e){if(!(0,theme_1.isString)(e)&&(null==e?void 0:e.result)){const r=(0,utils_1.deepClone)(e),i=markdoc_1.Ast.fromJSON(JSON.stringify(null==r?void 0:r.result));if(Array.isArray(i))for(const e of i)modifyNodeByHeading(e);else modifyNodeByHeading(i);return r.result=JSON.stringify(i),r.raw=saveTextBeforeHeading(r.raw),r}const r=new RegExp("^#{1,6}?\\s+","m"),i=e.search(r);return i>-1?e.substring(0,i):e}function modifyNodeByHeading(e){if(!Array.isArray(e.children))return;const r=e.children.findIndex((e=>"heading"===e.type));return-1===r||(e.children=e.children.slice(0,r)),e}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.saveTextBeforeHeading=saveTextBeforeHeading;const markdoc_1=require("@markdoc/markdoc"),theme_1=require("@redocly/theme");function saveTextBeforeHeading(e){if(!e)return"";if(!(0,theme_1.isString)(e))return(null==e?void 0:e.result)?{result:modifyNodeByHeading(markdoc_1.Ast.fromJSON(JSON.stringify(e.result)))||"",raw:saveTextBeforeHeading(e.raw)}:e;const r=new RegExp("^#{1,6}?\\s+","m"),i=e.search(r);return i>-1?e.substring(0,i):e}function modifyNodeByHeading(e){if(Array.isArray(e)){const r=e.findIndex((e=>"heading"===e.type));return-1===r?e:e.slice(0,r)}if(!e.children||!Array.isArray(e.children))return;const r=e.children.findIndex((e=>"heading"===e.type));return-1===r||(e.children=e.children.slice(0,r)),e}
2
2
  //# sourceMappingURL=saveTextBeforeHeading.js.map
@@ -0,0 +1,2 @@
1
+ import type { Node } from '@markdoc/markdoc';
2
+ export declare const simplifyAstStructure: (ast: Node) => Node | Node[];
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.simplifyAstStructure=void 0;const simplifyAstStructure=t=>{var e,l;i(t);for(const l of t.walk())i(l),(null===(e=null==l?void 0:l.children)||void 0===e?void 0:e.length)&&(0,exports.simplifyAstStructure)(l);function i(t){(null==t?void 0:t.location)&&delete t.location,void 0===t.tag&&delete t.tag}return"document"===t.type&&(null===(l=null==t?void 0:t.children)||void 0===l?void 0:l.length)?null==t?void 0:t.children:t};exports.simplifyAstStructure=simplifyAstStructure;
2
+ //# sourceMappingURL=simplifyAstStructure.js.map
@@ -1,5 +1,7 @@
1
+ import { LayoutVariant } from '@redocly/theme';
1
2
  import type { ReactElement } from 'react';
2
3
  import type { GroupModel } from '../../models';
3
- export declare function ApiInfo({ item }: {
4
+ export declare function ApiInfo({ item, layout, }: {
4
5
  item: GroupModel;
6
+ layout: LayoutVariant;
5
7
  }): ReactElement | null;
@@ -1,2 +1,2 @@
1
- import{jsxs as _jsxs,jsx as _jsx}from"react/jsx-runtime";import{useAtomValue}from"jotai";import{AfterOpenApiTitle,LayoutVariant}from"@redocly/theme";import{layoutAtom}from"../../jotai/app";import{SamplesMiddlePanel,Row}from"../common";import{ExternalDocumentation}from"../ExternalDocumentation";import{Markdown}from"../Markdown";import{ApiHeader}from"./styled";import{globalStoreAtom}from"../../jotai/store";import{saveTextBeforeHeading}from"../../utils/saveTextBeforeHeading";import{getValueFromMdParsedExtension}from"../../utils/helpers";import{RenderHook}from"../RenderHook";import{Metadata}from"./Metadata";import{useTranslate}from"../../hooks";export function ApiInfo({item:e}){const o=useTranslate(),{options:{unstable_hooks:t,hideInfoMetadata:r},parser:{definition:a}}=useAtomValue(globalStoreAtom),i=useAtomValue(layoutAtom),n=e.infoDefinition;if(!n)return null;const s=saveTextBeforeHeading(getValueFromMdParsedExtension(n,"description")||""),m=getValueFromMdParsedExtension(n,"summary")||void 0,l=null==a?void 0:a.externalDocs,d=n.version&&_jsxs("span",{children:["(",n.version,")"]})||null,p=i===LayoutVariant.STACKED;return _jsx(Row,{layout:i,children:_jsxs(SamplesMiddlePanel,{fullWidth:!0,className:"api-info",isStacked:p,children:[_jsxs(ApiHeader,{children:[n.title," ",d]}),_jsx(RenderHook,{Hook:AfterOpenApiTitle||(null==t?void 0:t.AfterApiTitle),props:{info:n}}),m&&_jsx(Markdown,{source:m,"data-role":"redoc-summary"}),s&&_jsx(Markdown,{source:s,"data-role":"redoc-description"}),l&&_jsx(ExternalDocumentation,{externalDocs:l}),!r&&_jsx(Metadata,{metadata:n["x-metadata"],translate:o})]})})}
1
+ import{jsxs as _jsxs,jsx as _jsx}from"react/jsx-runtime";import{useAtomValue}from"jotai";import{AfterOpenApiTitle,LayoutVariant}from"@redocly/theme";import{SamplesMiddlePanel,Row}from"../common";import{ExternalDocumentation}from"../ExternalDocumentation";import{Markdown}from"../Markdown";import{ApiHeader}from"./styled";import{globalStoreAtom}from"../../jotai/store";import{saveTextBeforeHeading}from"../../utils/saveTextBeforeHeading";import{getValueFromMdParsedExtension}from"../../utils/helpers";import{RenderHook}from"../RenderHook";import{Metadata}from"./Metadata";import{useTranslate}from"../../hooks";export function ApiInfo({item:e,layout:o}){const t=useTranslate(),{options:{unstable_hooks:r,hideInfoMetadata:a},parser:{definition:i}}=useAtomValue(globalStoreAtom),n=e.infoDefinition;if(!n)return null;const s=saveTextBeforeHeading(getValueFromMdParsedExtension(n,"description")||""),l=getValueFromMdParsedExtension(n,"summary")||void 0,m=(null==i?void 0:i.externalDocs)||(null==n?void 0:n.externalDocs),d=n.version&&_jsxs("span",{children:["(",n.version,")"]})||null,p=o===LayoutVariant.STACKED;return _jsx(Row,{layout:o,children:_jsxs(SamplesMiddlePanel,{fullWidth:!0,className:"api-info",isStacked:p,children:[_jsxs(ApiHeader,{children:[n.title," ",d]}),_jsx(RenderHook,{Hook:AfterOpenApiTitle||(null==r?void 0:r.AfterApiTitle),props:{info:n}}),l&&_jsx(Markdown,{source:l,"data-role":"redoc-summary"}),s&&_jsx(Markdown,{source:s,"data-role":"redoc-description"}),m&&_jsx(ExternalDocumentation,{externalDocs:m}),!a&&_jsx(Metadata,{metadata:n["x-metadata"],translate:t})]})})}
2
2
  //# sourceMappingURL=ApiInfo.js.map
@@ -1,9 +1,11 @@
1
+ import type { LayoutVariant } from '@redocly/config';
1
2
  import type { ReactNode } from 'react';
2
3
  import type { ContentItemModel } from '../../models';
3
4
  interface ContentItemProps {
4
5
  item: ContentItemModel;
5
6
  routingBasePath: string;
6
7
  children?: ReactNode;
8
+ layout?: LayoutVariant;
7
9
  }
8
10
  export declare const ContentItem: import("react").NamedExoticComponent<ContentItemProps>;
9
11
  export {};
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{joinWithSeparator}from"../../services";import{TagItem}from"../TagItem";import{OperationItem}from"../OperationItem";import{Section}from"../common";import{useIsExpanded}from"./useIsExpanded";import{SectionItem}from"../SectionItem";import useScrollOnRender from"../ContentItems/useScrollOnRender";import{isRootItem}from"../ContentItems/helpers";import{ApiInfo}from"../ApiInfo";const ContentComponentMap={group:null,tag:TagItem,section:SectionItem,schema:TagItem,operation:OperationItem,root:ApiInfo};function ContentItemComponent({item:e,routingBasePath:t,children:o}){var n;const r=ContentComponentMap[isRootItem(e)?"root":e.type],m="tag"===e.type&&e.items.length>0,i=useIsExpanded({item:e,routingBasePath:t});let s=useScrollOnRender(e,t);return _jsxs(_Fragment,{children:[r&&_jsx(Section,{id:e.id,ref:s,sectionId:joinWithSeparator(t,e.id),underlined:"operation"===e.type||"schema"===e.type,expanded:m&&!i,children:_jsx(r,{item:e,routingBasePath:t,isExpanded:i})}),(i||"tag"!==e.type)&&Boolean(null===(n=e.items)||void 0===n?void 0:n.length)&&_jsx(_Fragment,{children:o})]})}export const ContentItem=memo(ContentItemComponent);
1
+ import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import{useAtomValue}from"jotai";import{joinWithSeparator}from"../../services";import{TagItem}from"../TagItem";import{OperationItem}from"../OperationItem";import{Section}from"../common";import{useIsExpanded}from"./useIsExpanded";import{SectionItem}from"../SectionItem";import useScrollOnRender from"../ContentItems/useScrollOnRender";import{isRootItem}from"../ContentItems/helpers";import{ApiInfo}from"../ApiInfo";import{layoutAtom}from"../../jotai/app";const ContentComponentMap={group:null,tag:TagItem,section:SectionItem,schema:TagItem,operation:OperationItem,root:ApiInfo};function ContentItemComponent({item:t,routingBasePath:e,children:o,layout:n}){var m;const r=ContentComponentMap[isRootItem(t)?"root":t.type],i="tag"===t.type&&t.items.length>0,a=useIsExpanded({item:t,routingBasePath:e});let s=useScrollOnRender(t,e);const p=useAtomValue(layoutAtom);return _jsxs(_Fragment,{children:[r&&_jsx(Section,{id:t.id,ref:s,sectionId:joinWithSeparator(e,t.id),underlined:"operation"===t.type||"schema"===t.type,expanded:i&&!a,children:_jsx(r,{item:t,routingBasePath:e,isExpanded:a,layout:n||p})}),(a||"tag"!==t.type)&&Boolean(null===(m=t.items)||void 0===m?void 0:m.length)&&_jsx(_Fragment,{children:o})]})}export const ContentItem=memo(ContentItemComponent);
2
2
  //# sourceMappingURL=ContentItem.js.map
@@ -1,2 +1,2 @@
1
- import{useEffect,useRef}from"react";import{useLocation}from"react-router-dom";import{removeLeadingSlash}from"@redocly/theme";import{getElementById}from"../Content/useAutoScroll";function useScrollOnRender(e,o){const r=useRef(null),t=useLocation(),n=removeLeadingSlash(t.pathname.replace(o,""));return useEffect((()=>{var o;if(r.current&&removeLeadingSlash(e.href)===n&&("function"==typeof(null===(o=null==r?void 0:r.current)||void 0===o?void 0:o.scrollIntoView)&&r.current.scrollIntoView(),t.hash)){const e=getElementById(t.hash.replace("#","").toLowerCase());e&&e.scrollIntoView()}}),[]),r}export default useScrollOnRender;
1
+ import{useEffect,useRef}from"react";import{useLocation}from"react-router-dom";import{removeLeadingSlash}from"@redocly/theme";import{getElementById}from"../Content/useAutoScroll";function useScrollOnRender(e,o){const r=useRef(null),t=useLocation(),n=removeLeadingSlash(t.pathname.replace(o,""));return useEffect((()=>{var o;if(r.current&&e.href&&removeLeadingSlash(e.href)===n&&("function"==typeof(null===(o=null==r?void 0:r.current)||void 0===o?void 0:o.scrollIntoView)&&r.current.scrollIntoView(),t.hash)){const e=getElementById(t.hash.replace("#","").toLowerCase());e&&e.scrollIntoView()}}),[]),r}export default useScrollOnRender;
2
2
  //# sourceMappingURL=useScrollOnRender.js.map
@@ -6,6 +6,7 @@ export type DownloadIconType = 'yaml' | 'json' | 'file';
6
6
  export type UseDownloadInfoProps = {
7
7
  definitionUrl?: string;
8
8
  downloadUrls?: DownloadUrlsConfig;
9
+ defaultFileName?: string;
9
10
  };
10
11
  export type UseDownloadInfoReturnType = {
11
12
  title: string;
@@ -1,2 +1,2 @@
1
1
  import type { UseDownloadInfoProps, UseDownloadInfoReturnType } from './types';
2
- export declare const useDownloadInfo: ({ downloadUrls, }: UseDownloadInfoProps) => UseDownloadInfoReturnType | undefined;
2
+ export declare const useDownloadInfo: ({ downloadUrls, defaultFileName, }: UseDownloadInfoProps) => UseDownloadInfoReturnType | undefined;
@@ -1,2 +1,2 @@
1
- import{useMemo}from"react";export const useDownloadInfo=({downloadUrls:e})=>useMemo((()=>{if(e)return e.map((({title:e,url:o})=>({url:o,title:e||getFileNameFromUrl(o,"openapi.yaml"),iconType:getIconTypeFromUrl(o)})))}),[e]);function getFileNameFromUrl(e,o){const l=e.split("?")[0].split(/[\\\/]/).pop();return l&&(l.includes("yaml")||l.includes("json"))?l:o}function getIconTypeFromUrl(e,o){const l=o||e.split("?")[0].split(/[\\\/]/).pop();return l?l.includes("yaml")?"yaml":l.includes("json")?"json":"file":"file"}
1
+ import{useMemo}from"react";export const useDownloadInfo=({downloadUrls:e,defaultFileName:l})=>useMemo((()=>{if(e)return e.map((({title:e,url:o})=>({url:o,title:e||getFileNameFromUrl(o,l||"openapi.yaml"),iconType:getIconTypeFromUrl(o)})))}),[e,l]);function getFileNameFromUrl(e,l){const o=e.split("?")[0].split(/[\\\/]/).pop();return o&&(o.includes("yaml")||o.includes("json"))?o:l}function getIconTypeFromUrl(e,l){const o=l||e.split("?")[0].split(/[\\\/]/).pop();return o?o.includes("yaml")?"yaml":o.includes("json")?"json":"file":"file"}
2
2
  //# sourceMappingURL=useDownloadInfo.js.map
@@ -1,2 +1,5 @@
1
1
  import type { OperationItemProps } from './types';
2
2
  export declare const OperationItem: import("react").NamedExoticComponent<OperationItemProps>;
3
+ export declare const OperationSamplesPanel: import("styled-components").StyledComponent<"div", any, {
4
+ isStacked: boolean;
5
+ }, never>;
@@ -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 +1,2 @@
1
1
  export function isatty(): void;
2
+ export function createRequire(): void;
package/lib-esm/empty.js CHANGED
@@ -1,2 +1,2 @@
1
- module.exports={isatty:()=>{}};
1
+ module.exports={isatty:()=>{},createRequire:()=>{}};
2
2
  //# sourceMappingURL=empty.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,11 @@
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';
8
+ export { simplifyAstStructure } from './utils/simplifyAstStructure';
6
9
  export { getOperation } from './models/operation';
7
10
  export { getServerEnvName } from './utils/environments';
8
11
  export { getTagOrGroup } from './models/group';
@@ -13,8 +16,28 @@ export { RedocSchema, RedocExample } from './components/pluggable';
13
16
  export { RedoclyOpenAPIDocs, RedoclyOpenAPIDocsStandalone, AppProvider, StoreProvider, getMarkdownHeaderId, } from './components/RedoclyOpenAPIDocs';
14
17
  export { JsonPointer } from './utils/JsonPointer';
15
18
  export { isOperationName } from './utils/openapi';
19
+ export { pathIncludesLink } from './utils/path';
16
20
  export { OpenAPIParser } from './services';
17
- export { buildContentItems, normalizeOptions } from './services';
21
+ export { buildContentItems, normalizeOptions, makeDeepLink } from './services';
18
22
  export declare function useOpenapiDocsOptions(): import("./services").Options;
19
23
  export { EmbeddedReplay } from './components/Replay/EmbeddedReplay';
20
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{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
@@ -54,14 +54,17 @@ export interface RCodeSampleConfig extends CodeSampleBasicConfig {
54
54
  export interface PayloadCodeSampleConfig extends CodeSampleBasicConfig {
55
55
  lang: 'Payload';
56
56
  }
57
+ export interface CustomLanguageCodeSampleConfig extends Omit<CodeSampleBasicConfig, 'lang'> {
58
+ lang: string;
59
+ }
57
60
  export type CodeSampleConfig = CurlCodeSampleConfig | JavaScriptCodeSampleConfig | NodeJsCodeSampleConfig | PythonCodeSampleConfig | Java8CodeSampleConfig | JavaCodeSampleConfig | CSharpCodeSampleConfig | CSharpNewtonsoftCodeSampleConfig | PHPCodeSampleConfig | GoCodeSampleConfig | RubyCodeSampleConfig | RCodeSampleConfig;
58
61
  /**
59
62
  * Code Samples Generator rules
60
- * - Reference docs always displays all user custom x-codeSamples
63
+ * - Openapi docs displays language from redocly config.
61
64
  * - In addition code samples will be generated only for defined languages in array
62
65
  */
63
66
  export interface CodeSamplesConfig {
64
- languages: (CodeSampleConfig | PayloadCodeSampleConfig)[];
67
+ languages: (CodeSampleConfig | PayloadCodeSampleConfig | CustomLanguageCodeSampleConfig)[];
65
68
  skipOptionalParameters?: boolean;
66
69
  withOAuth2Call?: boolean;
67
70
  onSampleTabClick?: (label: string) => void;
@@ -1,2 +1,2 @@
1
- import{parse,Ast}from"@markdoc/markdoc";import{isString}from"@redocly/theme";import{getTagOrGroup}from"../../models";import{safeSlugify,unescapeHTMLChars}from"../../utils";export function addMarkdownItems(t,e,i){const n=isString(t)?parse(t):Ast.fromJSON(JSON.stringify(null==t?void 0:t.result)),o=[];let r;const s=(t,e,i=o,n,r)=>{let s;t=unescapeHTMLChars(t),n.attributes.id?s=n.attributes.id:(s=r?`${r}/${safeSlugify(t)}`:`section/${safeSlugify(t)}`,n.attributes.id=s);const l={id:s.toLowerCase(),name:t,level:e,items:[],ast:[n]};return i.push(l),l},l=(t,e)=>{var i,n;null===(n=null===(i=t[t.length-1])||void 0===i?void 0:i.ast)||void 0===n||n.push(e)},a=t=>{var e;for(const i of t.children){const t=getMarkdownContent(i)||"";"heading"===i.type&&1===i.attributes.level?r=s(t,i.attributes.level,void 0,i):i.attributes.level?s(t,i.attributes.level,null==r?void 0:r.items,i,null==r?void 0:r.id):(null===(e=null==r?void 0:r.items)||void 0===e?void 0:e.length)?l(null==r?void 0:r.items,i):(null==o?void 0:o.length)&&l(o,i)}};if(Array.isArray(n))for(const t of n)a(t);else a(n);return mapHeadingsDeep(e,o,i)}function mapHeadingsDeep(t,e,i=1){return e.map((e=>{const n=getTagOrGroup("section",e,t);return n.depth=i,e.items&&(n.items=mapHeadingsDeep(n,e.items,i+1)),n}))}function getMarkdownContent(t){var e,i;return"string"==typeof(null===(e=null==t?void 0:t.attributes)||void 0===e?void 0:e.content)?null===(i=t.attributes)||void 0===i?void 0:i.content:(null==t?void 0:t.children)?getMarkdownContent(t.children[0]):void 0}
1
+ import{parse,Ast}from"@markdoc/markdoc";import{isString}from"@redocly/theme";import{getTagOrGroup}from"../../models";import{safeSlugify,unescapeHTMLChars}from"../../utils";import{simplifyAstStructure}from"../../utils/simplifyAstStructure";export function addMarkdownItems(t,e,i){const r=isString(t)?simplifyAstStructure(parse(t)):Ast.fromJSON(JSON.stringify(null==t?void 0:t.result)),n=[];let o;const s=(t,e,i=n,r,o)=>{let s;t=unescapeHTMLChars(t),r.attributes.id?s=r.attributes.id:(s=o?`${o}/${safeSlugify(t)}`:`section/${safeSlugify(t)}`,r.attributes.id=s);const l={id:s.toLowerCase(),name:t,level:e,items:[],ast:[r]};return i.push(l),l},l=(t,e)=>{var i,r;null===(r=null===(i=t[t.length-1])||void 0===i?void 0:i.ast)||void 0===r||r.push(e)},u=t=>{var e;const i=getMarkdownContent(t)||"";"heading"===t.type&&1===t.attributes.level?o=s(i,t.attributes.level,void 0,t):t.attributes.level?s(i,t.attributes.level,null==o?void 0:o.items,t,null==o?void 0:o.id):(null===(e=null==o?void 0:o.items)||void 0===e?void 0:e.length)?l(null==o?void 0:o.items,t):(null==n?void 0:n.length)&&l(n,t)};if(Array.isArray(r))for(const t of r)u(t);else u(r);return mapHeadingsDeep(e,n,i)}function mapHeadingsDeep(t,e,i=1){return e.map((e=>{const r=getTagOrGroup("section",e,t);return r.depth=i,e.items&&(r.items=mapHeadingsDeep(r,e.items,i+1)),r}))}function getMarkdownContent(t){var e,i;return"string"==typeof(null===(e=null==t?void 0:t.attributes)||void 0===e?void 0:e.content)?null===(i=t.attributes)||void 0===i?void 0:i.content:(null==t?void 0:t.children)?getMarkdownContent(t.children[0]):void 0}
2
2
  //# sourceMappingURL=markdown.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;
@@ -1,2 +1,2 @@
1
- import{format,parse}from"url";import{IS_BROWSER,isObject,isString}from"@redocly/theme";import{isNamedDefinition}from"./openapi";import{JsonPointer}from"./JsonPointer";export function mapWithLast(t,e){const r=[];for(let n=0;n<t.length-1;n++)r.push(e(t[n],!1));return 0!==t.length&&r.push(e(t[t.length-1],!0)),r}export function mapValues(t,e){const r={};for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=e(t[n],n,t));return r}export function flattenByProp(t,e){const r=[],n=t=>{for(const o of t)r.push(o),o[e]&&n(o[e])};return n(t),r}export function stripTrailingSlash(t){return t.endsWith("/")?t.substring(0,t.length-1):t}export function isNumeric(t){return!isNaN(parseFloat(t))&&isFinite(t)}export function appendToMdHeading(t,e,r){const n=new RegExp(`(^|\\n)#\\s?${e}\\s*\\n`,"i"),o=new RegExp(`((\\n|^)#\\s*${e}\\s*(\\n|$)(?:.|\\n)*?)(\\n#|$)`,"i");if(n.test(t))return t.replace(o,`$1\n\n${r}\n$4`);{const n=""===t||t.endsWith("\n\n")?"":t.endsWith("\n")?"\n":"\n\n";return`${t}${n}# ${e}\n\n${r}`}}export const isArrayOfObjects=t=>Array.isArray(t)&&t.some((t=>isObject(t)));export const deleteEmptyArrayItem=t=>t.filter((t=>!!t));export const isMergeableObject=t=>isObject(t)&&!Array.isArray(t);export function isAbsoluteUrl(t){return/(?:^[a-z][a-z0-9+.-]*:|\/\/)/i.test(t)}export function resolveUrl(t,e){let r;if(e.startsWith("//")){const{protocol:n}=parse(t);r=`${n||"https:"}${e}`}else if(isAbsoluteUrl(e))r=e;else if(e.startsWith("/")){const n=parse(t);r=format(Object.assign(Object.assign({},n),{pathname:e}))}else r=stripTrailingSlash(t)+"/"+e;return stripTrailingSlash(r)}export function titleize(t){return t.charAt(0).toUpperCase()+t.slice(1)}export function removeQueryStringAndHash(t){try{const e=parseURL(t);return e.search="",e.hash="",e.toString()}catch(e){return t}}function parseURL(t){return"undefined"==typeof URL?new(require("url").URL)(t):new URL(t)}export function escapeHTMLAttrChars(t){return t.replace(/["\\]/g,"\\$&")}export function unescapeHTMLChars(t){return t.replace(/&#(\d+);/g,((t,e)=>String.fromCharCode(parseInt(e,10)))).replace(/&amp;/g,"&").replace(/&quot;/g,'"')}export function sanitizeItemId(t){return t&&t.replace(/#/g,"_").toLowerCase()}export function useSchemaTitle(t,e){return e||isNamedDefinition(t)&&JsonPointer.baseName(t)||""}export function get(t={},e,r){return"string"==typeof e&&(e=e.split(".")),e.reduce(((t,e)=>t&&t[e]?t[e]:r),t)}export function joinStringFactory(t){return(...e)=>e.filter(Boolean).join(t)}export const dottedString=joinStringFactory(".");export function getWindowReferenceOptions(t){var e;return IS_BROWSER?null===(e=null===window||void 0===window?void 0:window.REFERENCE_DOCS_OPTIONS)||void 0===e?void 0:e[t]:null}export function getJsUrl(){var t;if(!IS_BROWSER)return"";const e=+new Date+Math.random();try{return document.currentScript&&(document.currentScript.async||document.currentScript.defer)||document.write(`<script id="dummy${e}"><\/script>`),(null===(t=document.getElementById("dummy"+e))||void 0===t?void 0:t.previousSibling).src}catch(t){return""}}export const normalizeText=t=>isString(t)?t:null==t?void 0:t.raw;export const getValueFromMdParsedExtension=(t,e)=>{const r=(null==t?void 0:t[`x-parsed-md-${e}`])||(null==t?void 0:t[e]);if("x-enumDescriptions"!==e)return r;let n={};for(const t in r)t.startsWith("x-parsed-md")||(n[t]=(null==r?void 0:r[`x-parsed-md-${t}`])||(null==r?void 0:r[t]));return Object.keys(n).length?n:r};export function isLastInArray(t,e){return e===t.length-1}export function isLastProperty(t,e){const r=Object.keys(t);return r.indexOf(e)===r.length-1}
1
+ import{format,parse}from"url";import{IS_BROWSER,isObject,isString}from"@redocly/theme";import{isNamedDefinition}from"./openapi";import{JsonPointer}from"./JsonPointer";export function mapWithLast(t,e){const r=[];for(let n=0;n<t.length-1;n++)r.push(e(t[n],!1));return 0!==t.length&&r.push(e(t[t.length-1],!0)),r}export function mapValues(t,e){const r={};for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=e(t[n],n,t));return r}export function flattenByProp(t,e){const r=[],n=t=>{for(const o of t)r.push(o),o[e]&&n(o[e])};return n(t),r}export function stripTrailingSlash(t){return t.endsWith("/")?t.substring(0,t.length-1):t}export function isNumeric(t){return!isNaN(parseFloat(t))&&isFinite(t)}export function appendToMdHeading(t,e,r){const n=new RegExp(`(^|\\n)#\\s?${e}\\s*\\n`,"i"),o=new RegExp(`((\\n|^)#\\s*${e}\\s*(\\n|$)(?:.|\\n)*?)(\\n#|$)`,"i");if(n.test(t))return t.replace(o,`$1\n\n${r}\n$4`);{const n=""===t||t.endsWith("\n\n")?"":t.endsWith("\n")?"\n":"\n\n";return`${t}${n}# ${e}\n\n${r}`}}export const isArrayOfObjects=t=>Array.isArray(t)&&t.some((t=>isObject(t)));export const deleteEmptyArrayItem=t=>t.filter((t=>!!t));export const isMergeableObject=t=>isObject(t)&&!Array.isArray(t);export function isAbsoluteUrl(t){return/(?:^[a-z][a-z0-9+.-]*:|\/\/)/i.test(t)}export function resolveUrl(t,e){let r;if(e.startsWith("//")){const{protocol:n}=parse(t);r=`${n||"https:"}${e}`}else if(isAbsoluteUrl(e))r=e;else if(e.startsWith("/")){const n=parse(t);r=format(Object.assign(Object.assign({},n),{pathname:e}))}else r=stripTrailingSlash(t)+"/"+e;return stripTrailingSlash(r)}export function titleize(t){return t.charAt(0).toUpperCase()+t.slice(1)}export function removeQueryStringAndHash(t){try{const e=parseURL(t);return e.search="",e.hash="",e.toString()}catch(e){return t}}function parseURL(t){return"undefined"==typeof URL?new(require("url").URL)(t):new URL(t)}export function escapeHTMLAttrChars(t){return t.replace(/["\\]/g,"\\$&")}export function unescapeHTMLChars(t){return t.replace(/&#(\d+);/g,((t,e)=>String.fromCharCode(parseInt(e,10)))).replace(/&amp;/g,"&").replace(/&quot;/g,'"')}export function sanitizeItemId(t){return t&&t.replace(/#/g,"_").toLowerCase()}export function useSchemaTitle(t,e){return e||isNamedDefinition(t)&&JsonPointer.baseName(t)||""}export function get(t={},e,r){return"string"==typeof e&&(e=e.split(".")),e.reduce(((t,e)=>t&&t[e]?t[e]:r),t)}export function joinStringFactory(t){return(...e)=>e.filter(Boolean).join(t)}export const dottedString=joinStringFactory(".");export function getWindowReferenceOptions(t){var e;return IS_BROWSER?null===(e=null===window||void 0===window?void 0:window.REFERENCE_DOCS_OPTIONS)||void 0===e?void 0:e[t]:null}export function getJsUrl(){var t;if(!IS_BROWSER)return"";const e=+new Date+Math.random();try{return document.currentScript&&(document.currentScript.async||document.currentScript.defer)||document.write(`<script id="dummy${e}"><\/script>`),(null===(t=document.getElementById("dummy"+e))||void 0===t?void 0:t.previousSibling).src}catch(t){return""}}export const normalizeText=t=>isString(t)?t:null==t?void 0:t.raw;export const getValueFromMdParsedExtension=(t,e)=>{const r=(null==t?void 0:t[`x-parsed-md-${e}`])||(null==t?void 0:t[e]);if(!(null==t?void 0:t[`x-parsed-md-${e}`]))return null==t?void 0:t[e];if("x-enumDescriptions"!==e)return normalizeMarkdownValue(t,e);let n={};for(const t in r)t.startsWith("x-parsed-md")||(n[t]=(null==r?void 0:r[`x-parsed-md-${t}`])||(null==r?void 0:r[t]));return Object.keys(n).length?n:r};function normalizeMarkdownValue(t,e){var r;const n=(null==t?void 0:t[`x-parsed-md-${e}`])||(null==t?void 0:t[e]);return(null==n?void 0:n.raw)?n:{result:(null==n?void 0:n.result)||(null===(r=null==t?void 0:t[e])||void 0===r?void 0:r.result)||(null==t?void 0:t[e]),raw:null==t?void 0:t[e]}}export function isLastInArray(t,e){return e===t.length-1}export function isLastProperty(t,e){const r=Object.keys(t);return r.indexOf(e)===r.length-1}
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1,2 +1,2 @@
1
- var __awaiter=this&&this.__awaiter||function(e,n,o,t){return new(o||(o=Promise))((function(r,i){function c(e){try{u(t.next(e))}catch(e){i(e)}}function a(e){try{u(t.throw(e))}catch(e){i(e)}}function u(e){var n;e.done?r(e.value):(n=e.value,n instanceof o?n:new o((function(e){e(n)}))).then(c,a)}u((t=t.apply(e,n||[])).next())}))};import{bundle}from"@redocly/openapi-core/lib/bundle";import{Config}from"@redocly/openapi-core/lib/config/config";import{convertObj}from"swagger2openapi";import{IS_BROWSER}from"@redocly/theme";import{createParsedDocument}from"./createParsedDocument";export function loadAndBundleDefinition(e){return __awaiter(this,void 0,void 0,(function*(){const n=new Config({}),o={config:n,base:IS_BROWSER?window.location.href:process.cwd()};IS_BROWSER&&(n.resolve.http.customFetch=global.fetch),"object"==typeof e&&null!==e?o.doc=createParsedDocument(e):o.ref=e;const{bundle:{parsed:t}}=yield bundle(o);return void 0!==t.swagger?convertSwagger2OpenAPI(t):t}))}export function convertSwagger2OpenAPI(e){return e.paths||(e.paths={}),new Promise(((n,o)=>convertObj(e,{patch:!0,warnOnly:!0,text:"{}",anchors:!0},((e,t)=>{if(e)return o(e);n(null==t?void 0:t.openapi)}))))}
1
+ var __awaiter=this&&this.__awaiter||function(e,n,t,o){return new(t||(t=Promise))((function(r,c){function i(e){try{u(o.next(e))}catch(e){c(e)}}function a(e){try{u(o.throw(e))}catch(e){c(e)}}function u(e){var n;e.done?r(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,a)}u((o=o.apply(e,n||[])).next())}))};import{bundle,Config}from"@redocly/openapi-core";import{convertObj}from"swagger2openapi";import{IS_BROWSER}from"@redocly/theme";import{createParsedDocument}from"./createParsedDocument";export function loadAndBundleDefinition(e){return __awaiter(this,void 0,void 0,(function*(){const n=new Config({}),t={config:n,base:IS_BROWSER?window.location.href:process.cwd()};IS_BROWSER&&(n.resolve.http.customFetch=global.fetch),"object"==typeof e&&null!==e?t.doc=createParsedDocument(e):t.ref=e;const{bundle:{parsed:o}}=yield bundle(t);return void 0!==o.swagger?convertSwagger2OpenAPI(o):o}))}export function convertSwagger2OpenAPI(e){return e.paths||(e.paths={}),new Promise(((n,t)=>convertObj(e,{patch:!0,warnOnly:!0,text:"{}",anchors:!0},((e,o)=>{if(e)return t(e);n(null==o?void 0:o.openapi)}))))}
2
2
  //# sourceMappingURL=loadAndBundleSpec.js.map
@@ -1 +1,7 @@
1
- export declare function saveTextBeforeHeading(description: string | GenericObject): any;
1
+ import type { Node } from '@markdoc/markdoc';
2
+ interface DescriptionObject {
3
+ result: string | Node | Node[];
4
+ raw: string;
5
+ }
6
+ export declare function saveTextBeforeHeading(description: string | DescriptionObject): string | DescriptionObject;
7
+ export {};
@@ -1,2 +1,2 @@
1
- import{Ast}from"@markdoc/markdoc";import{isString}from"@redocly/theme";import{deepClone}from"../services/utils";export function saveTextBeforeHeading(e){if(!isString(e)&&(null==e?void 0:e.result)){const r=deepClone(e),i=Ast.fromJSON(JSON.stringify(null==r?void 0:r.result));if(Array.isArray(i))for(const e of i)modifyNodeByHeading(e);else modifyNodeByHeading(i);return r.result=JSON.stringify(i),r.raw=saveTextBeforeHeading(r.raw),r}const r=new RegExp("^#{1,6}?\\s+","m"),i=e.search(r);return i>-1?e.substring(0,i):e}function modifyNodeByHeading(e){if(!Array.isArray(e.children))return;const r=e.children.findIndex((e=>"heading"===e.type));return-1===r||(e.children=e.children.slice(0,r)),e}
1
+ import{Ast}from"@markdoc/markdoc";import{isString}from"@redocly/theme";export function saveTextBeforeHeading(r){if(!r)return"";if(!isString(r))return(null==r?void 0:r.result)?{result:modifyNodeByHeading(Ast.fromJSON(JSON.stringify(r.result)))||"",raw:saveTextBeforeHeading(r.raw)}:r;const e=new RegExp("^#{1,6}?\\s+","m"),i=r.search(e);return i>-1?r.substring(0,i):r}function modifyNodeByHeading(r){if(Array.isArray(r)){const e=r.findIndex((r=>"heading"===r.type));return-1===e?r:r.slice(0,e)}if(!r.children||!Array.isArray(r.children))return;const e=r.children.findIndex((r=>"heading"===r.type));return-1===e||(r.children=r.children.slice(0,e)),r}
2
2
  //# sourceMappingURL=saveTextBeforeHeading.js.map
@@ -0,0 +1,2 @@
1
+ import type { Node } from '@markdoc/markdoc';
2
+ export declare const simplifyAstStructure: (ast: Node) => Node | Node[];
@@ -0,0 +1,2 @@
1
+ export const simplifyAstStructure=l=>{var t,o;i(l);for(const o of l.walk())i(o),(null===(t=null==o?void 0:o.children)||void 0===t?void 0:t.length)&&simplifyAstStructure(o);function i(l){(null==l?void 0:l.location)&&delete l.location,void 0===l.tag&&delete l.tag}return"document"===l.type&&(null===(o=null==l?void 0:l.children)||void 0===o?void 0:o.length)?null==l?void 0:l.children:l};
2
+ //# sourceMappingURL=simplifyAstStructure.js.map