@redocly/openapi-docs 0.0.0-cache-perf-20240702081649 → 0.0.0-cache-perf-20240715122448

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 (78) hide show
  1. package/dist/redocly-openapi-docs.min.js +1538 -1395
  2. package/lib/components/OperationItem/OperationItem.js +2 -5
  3. package/lib/components/Panel/index.d.ts +0 -2
  4. package/lib/components/Panel/index.js +1 -1
  5. package/lib/components/PropertyDetails/FieldDetail.js +1 -1
  6. package/lib/components/PropertyDetails/FieldDetails.js +1 -5
  7. package/lib/components/Replay/Replay.js +1 -1
  8. package/lib/components/Replay/utils.js +1 -1
  9. package/lib/components/Schema/OneOfSchema.js +1 -1
  10. package/lib/components/TagItem/OperationsNavigation.js +1 -1
  11. package/lib/components/common/Badges.d.ts +13 -0
  12. package/lib/components/common/Badges.js +19 -0
  13. package/lib/components/common/ExpandableExample/ExpandableExample.d.ts +5 -0
  14. package/lib/components/common/ExpandableExample/ExpandableExample.js +10 -0
  15. package/lib/components/common/ExpandableExample/index.d.ts +1 -0
  16. package/lib/components/common/ExpandableExample/index.js +2 -0
  17. package/lib/components/common/Select/styled.d.ts +3 -3
  18. package/lib/components/common/index.d.ts +2 -0
  19. package/lib/components/common/index.js +1 -1
  20. package/lib/components/common/schema.d.ts +0 -2
  21. package/lib/components/common/schema.js +1 -3
  22. package/lib/hooks/_tests_/useExpandableField.test.d.ts +1 -0
  23. package/lib/hooks/_tests_/useExpandableField.test.js +2 -0
  24. package/lib/hooks/index.d.ts +1 -0
  25. package/lib/hooks/index.js +1 -1
  26. package/lib/hooks/useExpandableField.d.ts +12 -0
  27. package/lib/hooks/useExpandableField.js +2 -0
  28. package/lib/jotai/operation.d.ts +1 -0
  29. package/lib/services/code-samples/generator.js +1 -1
  30. package/lib/utils/areArraysEqual.d.ts +1 -0
  31. package/lib/utils/areArraysEqual.js +2 -0
  32. package/lib/utils/calculateAvgCharacterWidth.d.ts +1 -0
  33. package/lib/utils/calculateAvgCharacterWidth.js +2 -0
  34. package/lib/utils/index.d.ts +2 -0
  35. package/lib/utils/index.js +1 -1
  36. package/lib-esm/components/OperationItem/OperationItem.js +2 -5
  37. package/lib-esm/components/Panel/index.d.ts +0 -2
  38. package/lib-esm/components/Panel/index.js +1 -1
  39. package/lib-esm/components/PropertyDetails/FieldDetail.js +1 -1
  40. package/lib-esm/components/PropertyDetails/FieldDetails.js +1 -5
  41. package/lib-esm/components/Replay/Replay.js +1 -1
  42. package/lib-esm/components/Replay/utils.js +1 -1
  43. package/lib-esm/components/Schema/OneOfSchema.js +1 -1
  44. package/lib-esm/components/TagItem/OperationsNavigation.js +1 -1
  45. package/lib-esm/components/common/Badges.d.ts +13 -0
  46. package/lib-esm/components/common/Badges.js +19 -0
  47. package/lib-esm/components/common/ExpandableExample/ExpandableExample.d.ts +5 -0
  48. package/lib-esm/components/common/ExpandableExample/ExpandableExample.js +10 -0
  49. package/lib-esm/components/common/ExpandableExample/index.d.ts +1 -0
  50. package/lib-esm/components/common/ExpandableExample/index.js +2 -0
  51. package/lib-esm/components/common/Select/styled.d.ts +3 -3
  52. package/lib-esm/components/common/index.d.ts +2 -0
  53. package/lib-esm/components/common/index.js +1 -1
  54. package/lib-esm/components/common/schema.d.ts +0 -2
  55. package/lib-esm/components/common/schema.js +1 -3
  56. package/lib-esm/hooks/_tests_/useExpandableField.test.d.ts +1 -0
  57. package/lib-esm/hooks/_tests_/useExpandableField.test.js +2 -0
  58. package/lib-esm/hooks/index.d.ts +1 -0
  59. package/lib-esm/hooks/index.js +1 -1
  60. package/lib-esm/hooks/useExpandableField.d.ts +12 -0
  61. package/lib-esm/hooks/useExpandableField.js +2 -0
  62. package/lib-esm/jotai/operation.d.ts +1 -0
  63. package/lib-esm/services/code-samples/generator.js +1 -1
  64. package/lib-esm/utils/areArraysEqual.d.ts +1 -0
  65. package/lib-esm/utils/areArraysEqual.js +2 -0
  66. package/lib-esm/utils/calculateAvgCharacterWidth.d.ts +1 -0
  67. package/lib-esm/utils/calculateAvgCharacterWidth.js +2 -0
  68. package/lib-esm/utils/index.d.ts +2 -0
  69. package/lib-esm/utils/index.js +1 -1
  70. package/package.json +8 -7
  71. package/lib/components/Panel/ContentPanel.d.ts +0 -2
  72. package/lib/components/Panel/ContentPanel.js +0 -25
  73. package/lib/components/Panel/Description.d.ts +0 -1
  74. package/lib/components/Panel/Description.js +0 -8
  75. package/lib-esm/components/Panel/ContentPanel.d.ts +0 -2
  76. package/lib-esm/components/Panel/ContentPanel.js +0 -25
  77. package/lib-esm/components/Panel/Description.d.ts +0 -1
  78. package/lib-esm/components/Panel/Description.js +0 -8
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Suspense,memo,useCallback,useState,useRef}from"react";import{Button,RocketIcon,CircleDashIcon,Portal,useFocusTrap}from"@redocly/theme";import styled from"styled-components";import{useAtom,useAtomValue,useSetAtom}from"jotai";import{ReplayOverlay}from"@redocly/replay";import{globalOptionsAtom,globalStoreAtom}from"../../jotai/store";import{replayStateAtom}from"../../jotai/replay";import{operationStore}from"../../jotai/operation";import{LOADING_STATE}from"../../constants";import{activeMimeNameAtom,unsupportedFeatureScreenAtom,environmentAtom}from"../../jotai/app";import{isMobile}from"../../utils";import{convertOperationToReplayValue}from"./utils";function ReplayComponent({operation:e,corsProxyUrl:o,fullOpenApi:t}){var r,a;const n=useRef(null),{routingBasePath:i,mockServer:s,oAuth2RedirectURI:m}=useAtomValue(globalOptionsAtom),{parser:l}=useAtomValue(globalStoreAtom),[p,c]=useState(!1),[u,A]=useAtom(replayStateAtom),[,d]=useAtom(unsupportedFeatureScreenAtom),v=useSetAtom(operationStore(e.pointer)),[f,x]=useAtom(activeMimeNameAtom),[[,y],O]=useAtom(environmentAtom);useFocusTrap(n);const S=useCallback((({requestValues:e,activeExampleName:o,activeMimeName:t,environment:r,environments:a})=>{v((t=>Object.assign(Object.assign({},t),{requestValues:e,activeExampleName:o}))),x(t||f),O({environment:r,environments:a})}),[v,x,f,O]),j=()=>{isMobile({tablet:!0})?d(!0):(u!==LOADING_STATE.LOADING&&c(!p),u===LOADING_STATE.NOT_LOADED&&A(LOADING_STATE.LOADING))};return _jsxs(Wrapper,{children:[_jsx("span",{children:"Experience it firsthand in the API Explorer!"}),_jsx(Button,{onClick:j,variant:"primary",iconPosition:"left",icon:u===LOADING_STATE.LOADING?_jsx(CircleDashIcon,{}):_jsx(RocketIcon,{}),children:u===LOADING_STATE.LOADING?"Loading...":"Try it"}),p&&_jsx(Suspense,{children:_jsx(Portal,{mountId:"api-content",children:_jsx("div",{ref:n,children:_jsx(ReplayOverlay,{value:convertOperationToReplayValue(e,t),onRequestChange:S,onClose:j,corsProxyUrl:o,operationUrl:i+e.href,onLoad:()=>A(LOADING_STATE.LOADED),mockServer:s,environment:y,apiId:null===(a=null===(r=null==l?void 0:l.definition.info)||void 0===r?void 0:r["x-metadata"])||void 0===a?void 0:a.apiId,oAuth2RedirectURI:m})})})})]})}export const Replay=memo(ReplayComponent);const Wrapper=styled.div`
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Suspense,memo,useCallback,useState,useRef}from"react";import{Button,RocketIcon,CircleDashIcon,Portal,useFocusTrap,useModalScrollLock}from"@redocly/theme";import styled from"styled-components";import{useAtom,useAtomValue,useSetAtom}from"jotai";import{ReplayOverlay}from"@redocly/replay";import{globalOptionsAtom,globalStoreAtom}from"../../jotai/store";import{replayStateAtom}from"../../jotai/replay";import{operationStore}from"../../jotai/operation";import{LOADING_STATE}from"../../constants";import{activeMimeNameAtom,unsupportedFeatureScreenAtom,environmentAtom}from"../../jotai/app";import{isMobile}from"../../utils";import{convertOperationToReplayValue}from"./utils";function ReplayComponent({operation:e,corsProxyUrl:o,fullOpenApi:t}){var r,a;const n=useRef(null),{routingBasePath:i,mockServer:s,oAuth2RedirectURI:l}=useAtomValue(globalOptionsAtom),{parser:m}=useAtomValue(globalStoreAtom),[p,c]=useState(!1),[u,A]=useAtom(replayStateAtom),[,d]=useAtom(unsupportedFeatureScreenAtom),v=useSetAtom(operationStore(e.pointer)),[S,f]=useAtom(activeMimeNameAtom),[[,y],x]=useAtom(environmentAtom);useFocusTrap(n),useModalScrollLock(p);const I=useCallback((({requestValues:e,activeExampleName:o,activeMimeName:t,environment:r,environments:a,activeSecuritySchemeIds:n})=>{v((t=>Object.assign(Object.assign({},t),{requestValues:e,activeExampleName:o,activeSecuritySchemeIds:n}))),f(t||S),x({environment:r,environments:a})}),[v,f,S,x]),O=()=>{isMobile({tablet:!0})?d(!0):(u!==LOADING_STATE.LOADING&&c(!p),u===LOADING_STATE.NOT_LOADED&&A(LOADING_STATE.LOADING))};return _jsxs(Wrapper,{children:[_jsx("span",{children:"Experience it firsthand in the API Explorer!"}),_jsx(Button,{onClick:O,variant:"primary",iconPosition:"left",icon:u===LOADING_STATE.LOADING?_jsx(CircleDashIcon,{}):_jsx(RocketIcon,{}),children:u===LOADING_STATE.LOADING?"Loading...":"Try it"}),p&&_jsx(Suspense,{children:_jsx(Portal,{mountId:"api-content",children:_jsx("div",{ref:n,children:_jsx(ReplayOverlay,{value:convertOperationToReplayValue(e,t),onRequestChange:I,onClose:O,corsProxyUrl:o,operationUrl:i+e.href,onLoad:()=>A(LOADING_STATE.LOADED),mockServer:s,environment:y,apiId:null===(a=null===(r=null==m?void 0:m.definition.info)||void 0===r?void 0:r["x-metadata"])||void 0===a?void 0:a.apiId,oAuth2RedirectURI:l})})})})]})}export const Replay=memo(ReplayComponent);const Wrapper=styled.div`
2
2
  display: flex;
3
3
  justify-content: space-between;
4
4
  align-items: center;
@@ -1,2 +1,2 @@
1
- import{isPrimitive}from"@redocly/theme";export function convertOperationToReplayValue(e,n,t,i){var a,r;const o=(null==i?void 0:i.activeMimeName)||"application/json";return{name:e.name,method:e.httpVerb,parameters:convertParameters(e.parameters,null==t?void 0:t.requestValues),body:convertRequestBody(e.requestBody,n,(null===(a=null==t?void 0:t.requestValues)||void 0===a?void 0:a.body)?{[o]:null===(r=null==t?void 0:t.requestValues)||void 0===r?void 0:r.body}:void 0),path:e.path,servers:e.servers,security:convertRequestSecurity(e.security)}}function convertParameters(e,n){const t=new Set,i=e.map((e=>{var i;return t.add(e.in+":"+e.name),{name:e.name,in:e.in,required:e.required,description:e.description,example:(null===(i=null==n?void 0:n[String(e.in)])||void 0===i?void 0:i[e.name])||e.example,schema:e.schema}}));for(const[e,a]of Object.entries(n||{}))for(const[n,r]of Object.entries(a||{}))t.has(e+":"+n)||i.push({name:n,in:e,required:!1,description:"",example:String(r),schema:void 0});return i}function getInputType({type:e,format:n,enum:t}){return"string"!==e||"binary"!==n&&"base64"!==n?"object"===e?"multiline":t.length>0?"select":"text":"file"}function getFieldExamples(e,n){var t,i,a,r,o;const l=(null===(t=e[0])||void 0===t?void 0:t.example)||(null===(i=e[0])||void 0===i?void 0:i.examples);if(l)return l;if(null===(a=e.schema)||void 0===a?void 0:a.example)return e.schema.example;const m=(null===(r=null==n?void 0:n.default)||void 0===r?void 0:r.value)||(null===(o=null==n?void 0:n.default)||void 0===o?void 0:o.rawValue);return(null==m?void 0:m[e.name])?isPrimitive(null==m?void 0:m[e.name])?String(null==m?void 0:m[e.name]):JSON.stringify(null==m?void 0:m[e.name]):""}function convertRequestBody(e,n,t){var i;if(!e||!(null===(i=e.content)||void 0===i?void 0:i.mediaTypes)){if(!t)return;return{mediaTypes:Object.fromEntries(Object.entries(t).map((([e,n])=>[e,{name:e,examples:{default:{value:n}},schema:{},parameters:[]}])))}}return{required:e.required,mediaTypes:e.content.mediaTypes.reduce(((e,i)=>{var a,r;const o=i.schema,l=(null==t?void 0:t[i.name])?{default:{value:null==t?void 0:t[i.name],rawValue:null==t?void 0:t[i.name],mime:i.name}}:i.examples||i.formExamples;return e[i.name]={name:i.name,examples:l,schema:getBodySchema(null===(a=i.schema)||void 0===a?void 0:a.rawSchema,n),parameters:null===(r=null==o?void 0:o.fields)||void 0===r?void 0:r.map((e=>({inputType:getInputType(e.schema),name:e.name,example:getFieldExamples(e,l)})))},e}),{})}}function getBodySchema(e,n){if(e&&n)return Object.assign(Object.assign({},e),{components:(null==n?void 0:n.components)||{}})}export function convertRequestSecurity(e){if(e)return e.flatMap((({schemes:e})=>e.map((e=>({id:e.id,type:e.type,in:e.in,openIdConnectUrl:e.openIdConnectUrl,scopes:e.scopes,scheme:e.scheme,name:e.name,flows:e.flows})))))}
1
+ import{isPrimitive}from"@redocly/theme";export function convertOperationToReplayValue(e,n,i,t){var a,r;const o=(null==t?void 0:t.activeMimeName)||"application/json";return{name:e.name,method:e.httpVerb,parameters:convertParameters(e.parameters,null==i?void 0:i.requestValues),body:convertRequestBody(e.requestBody,n,(null===(a=null==i?void 0:i.requestValues)||void 0===a?void 0:a.body)?{[o]:null===(r=null==i?void 0:i.requestValues)||void 0===r?void 0:r.body}:void 0),path:e.path,servers:e.servers,security:convertRequestSecurity(e.security)}}function convertParameters(e,n){const i=new Set,t=e.map((e=>{var t;return i.add(e.in+":"+e.name),{name:e.name,in:e.in,required:e.required,description:e.description,example:(null===(t=null==n?void 0:n[String(e.in)])||void 0===t?void 0:t[e.name])||e.example,schema:e.schema}}));for(const[e,a]of Object.entries(n||{}))for(const[n,r]of Object.entries(a||{}))i.has(e+":"+n)||t.push({name:n,in:e,required:!1,description:"",example:String(r),schema:void 0});return t}function getInputType({type:e,format:n,enum:i}){return"string"!==e||"binary"!==n&&"base64"!==n?"object"===e?"multiline":i.length>0?"select":"text":"file"}function getFieldExamples(e,n){var i,t,a,r,o;const l=(null===(i=e[0])||void 0===i?void 0:i.example)||(null===(t=e[0])||void 0===t?void 0:t.examples);if(l)return l;if(null===(a=e.schema)||void 0===a?void 0:a.example)return e.schema.example;const m=(null===(r=null==n?void 0:n.default)||void 0===r?void 0:r.value)||(null===(o=null==n?void 0:n.default)||void 0===o?void 0:o.rawValue);return(null==m?void 0:m[e.name])?isPrimitive(null==m?void 0:m[e.name])?String(null==m?void 0:m[e.name]):JSON.stringify(null==m?void 0:m[e.name]):""}function convertRequestBody(e,n,i){var t;if(!e||!(null===(t=e.content)||void 0===t?void 0:t.mediaTypes)){if(!i)return;return{mediaTypes:Object.fromEntries(Object.entries(i).map((([e,n])=>[e,{name:e,examples:{default:{value:n}},schema:{},parameters:[]}])))}}return{required:e.required,mediaTypes:e.content.mediaTypes.reduce(((e,t)=>{var a,r;const o=t.schema,l=(null==i?void 0:i[t.name])?{default:{value:null==i?void 0:i[t.name],rawValue:null==i?void 0:i[t.name],mime:t.name}}:t.examples||t.formExamples;return e[t.name]={name:t.name,examples:l,schema:getBodySchema(null===(a=t.schema)||void 0===a?void 0:a.rawSchema,n),parameters:null===(r=null==o?void 0:o.fields)||void 0===r?void 0:r.map((e=>({inputType:getInputType(e.schema),name:e.name,example:getFieldExamples(e,l)})))},e}),{})}}function getBodySchema(e,n){if(e&&n)return Object.assign(Object.assign({},e),{components:(null==n?void 0:n.components)||{}})}export function convertRequestSecurity(e){if(e)return e.map((({schemes:e})=>e.map((e=>({id:e.id,type:e.type,in:e.in,openIdConnectUrl:e.openIdConnectUrl,scopes:e.scopes,scheme:e.scheme,name:e.name,flows:e.flows})))))}
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,4 +1,4 @@
1
- var __rest=this&&this.__rest||function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(o[n[r]]=e[n[r]])}return o};import{jsxs as _jsxs,jsx as _jsx}from"react/jsx-runtime";import{memo}from"react";import{useAtom}from"jotai";import styled from"styled-components";import{BadgeStyle,SelectionTitle}from"../common";import{Markdown}from"../Markdown";import{ConstraintsView}from"../common/ConstraintsView";import{Schema}from"./Schema";import{operationStore}from"../../jotai/operation";import{SchemaSelection}from"../common/SchemaSelection";import{useOneOfLocationIdx}from"./useOneOfLocationIdx";function OneOfSchemaComponent(e){var{schema:{oneOf:t},schema:o,oneOfLevel:n=1}=e,r=__rest(e,["schema","schema","oneOfLevel"]);const[i]=useAtom(operationStore(o.operationPointer)),s=useOneOfLocationIdx(t,n),a=-1===s?0:s,c=t[void 0!==i.activeOneOf[o.pointer]?i.activeOneOf[o.pointer]:a];if(!c)return null;const m=t.map(((e,t)=>({label:e.title||e.typePrefix+e.displayType,value:t})));return _jsxs(Wrapper,{children:[_jsxs(SelectionTitle,{children:[o.oneOfType,":"]}),_jsx(SchemaSelection,{options:m,pointer:o.operationPointer,schema:o,defaultOneOfIdx:a}),c.deprecated&&_jsx(BadgeStyle,{deprecated:!0,children:"Deprecated"}),c.description&&_jsx(StyledDescription,{source:c.description}),_jsx(ConstraintsView,{constraints:c.constraints}),_jsx(Schema,Object.assign({},r,{schema:c,oneOfLevel:n+1}))]})}export const OneOfSchema=memo(OneOfSchemaComponent);const StyledDescription=styled(Markdown)`
1
+ var __rest=this&&this.__rest||function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(o[n[r]]=e[n[r]])}return o};import{jsxs as _jsxs,jsx as _jsx}from"react/jsx-runtime";import{memo}from"react";import{useAtom}from"jotai";import styled from"styled-components";import{StyledBadge,SelectionTitle}from"../common";import{Markdown}from"../Markdown";import{ConstraintsView}from"../common/ConstraintsView";import{Schema}from"./Schema";import{operationStore}from"../../jotai/operation";import{SchemaSelection}from"../common/SchemaSelection";import{useOneOfLocationIdx}from"./useOneOfLocationIdx";function OneOfSchemaComponent(e){var{schema:{oneOf:t},schema:o,oneOfLevel:n=1}=e,r=__rest(e,["schema","schema","oneOfLevel"]);const[i]=useAtom(operationStore(o.operationPointer)),s=useOneOfLocationIdx(t,n),a=-1===s?0:s,c=t[void 0!==i.activeOneOf[o.pointer]?i.activeOneOf[o.pointer]:a];if(!c)return null;const m=t.map(((e,t)=>({label:e.title||e.typePrefix+e.displayType,value:t})));return _jsxs(Wrapper,{children:[_jsxs(SelectionTitle,{children:[o.oneOfType,":"]}),_jsx(SchemaSelection,{options:m,pointer:o.operationPointer,schema:o,defaultOneOfIdx:a}),c.deprecated&&_jsx(StyledBadge,{deprecated:!0,children:"Deprecated"}),c.description&&_jsx(StyledDescription,{source:c.description}),_jsx(ConstraintsView,{constraints:c.constraints}),_jsx(Schema,Object.assign({},r,{schema:c,oneOfLevel:n+1}))]})}export const OneOfSchema=memo(OneOfSchemaComponent);const StyledDescription=styled(Markdown)`
2
2
  margin-top: var(--spacing-xs);
3
3
  font-size: var(--font-size-base);
4
4
  line-height: var(--line-height-base);
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{useMemo,memo,useState}from"react";import{useNavigate}from"react-router-dom";import{Button,LayoutVariant}from"@redocly/theme";import styled from"styled-components";import{useAtomValue}from"jotai/index";import{HttpVerb,SamplesPanel}from"../common";import{encodeBackSlashes}from"../../utils";import{joinWithSeparator}from"../../services";import{layoutAtom}from"../../jotai/app";const MAX_OPERATIONS=8;export function OperationsNavigationComponent({items:e,routingBasePath:t}){const[o,a]=useState(!1),r=useNavigate(),n=useAtomValue(layoutAtom)===LayoutVariant.STACKED,{operations:i,webhooks:s,count:l}=useMemo((()=>{const t=e.filter((e=>"operation"===e.type)),a=o?t:t.slice(0,MAX_OPERATIONS),{operations:r,webhooks:n}=a.reduce(((e,t)=>t.isWebhook?Object.assign(Object.assign({},e),{webhooks:[...e.webhooks,t]}):Object.assign(Object.assign({},e),{operations:[...e.operations,t]})),{operations:[],webhooks:[]});return{operations:r,webhooks:n,count:!o&&t.length>MAX_OPERATIONS?t.length-MAX_OPERATIONS:0}}),[o,e]);if(!i.length&&!s.length)return null;const p=e=>{r(e)};return _jsxs(Wrapper,{isStacked:n,"data-testid":"operation-navigation-list",children:[i.length>0&&_jsxs(_Fragment,{children:[_jsx(Heading,{children:"Operations"}),i.map((({id:e,href:o,httpVerb:a,path:r})=>_jsx(Item,{variant:"outlined",size:"large",onClick:()=>p(joinWithSeparator(t,encodeBackSlashes(o))),children:_jsxs("span",{children:[_jsx(HttpVerb,{color:a,children:a}),_jsx(Path,{children:r})]})},e)))]}),s.length>0&&_jsxs(_Fragment,{children:[_jsx(Heading,{children:"Webhooks"}),s.map((({id:e,href:o,httpVerb:a,path:r})=>_jsx(Item,{variant:"outlined",size:"large",onClick:()=>p(joinWithSeparator(t,encodeBackSlashes(o))),children:_jsxs("span",{children:[_jsx(HttpVerb,{color:a,children:a}),_jsx(Path,{children:r})]})},e)))]}),!o&&Boolean(l)&&_jsxs(StyledButton,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>a(!0),children:["Show ",l," more..."]})]})}export const OperationsNavigation=memo(OperationsNavigationComponent);const Wrapper=styled(SamplesPanel)`
1
+ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{useMemo,memo,useState}from"react";import{useNavigate}from"react-router-dom";import{Button,LayoutVariant}from"@redocly/theme";import styled from"styled-components";import{useAtomValue}from"jotai/index";import{HttpVerb,NavigationBadge,SamplesPanel}from"../common";import{encodeBackSlashes}from"../../utils";import{joinWithSeparator}from"../../services";import{layoutAtom}from"../../jotai/app";const MAX_OPERATIONS=8;export function OperationsNavigationComponent({items:e,routingBasePath:t}){const[o,a]=useState(!1),r=useNavigate(),i=useAtomValue(layoutAtom)===LayoutVariant.STACKED,{operations:n,webhooks:s,count:l}=useMemo((()=>{const t=e.filter((e=>"operation"===e.type)),a=o?t:t.slice(0,MAX_OPERATIONS),{operations:r,webhooks:i}=a.reduce(((e,t)=>t.isWebhook?Object.assign(Object.assign({},e),{webhooks:[...e.webhooks,t]}):Object.assign(Object.assign({},e),{operations:[...e.operations,t]})),{operations:[],webhooks:[]});return{operations:r,webhooks:i,count:!o&&t.length>MAX_OPERATIONS?t.length-MAX_OPERATIONS:0}}),[o,e]);if(!n.length&&!s.length)return null;const p=e=>{r(e)};return _jsxs(Wrapper,{isStacked:i,"data-testid":"operation-navigation-list",children:[n.length>0&&_jsxs(_Fragment,{children:[_jsx(Heading,{children:"Operations"}),n.map((({id:e,href:o,httpVerb:a,path:r,deprecated:i,badges:n})=>_jsx(Item,{variant:"outlined",size:"large",onClick:()=>p(joinWithSeparator(t,encodeBackSlashes(o))),children:_jsxs("span",{children:[_jsx(HttpVerb,{color:i?"http-deprecated":a,children:a}),_jsx(Path,{children:r}),i&&_jsx(NavigationBadge,{deprecated:!0,children:"Deprecated"}),n&&n.map((({name:e,color:t})=>_jsx(NavigationBadge,{color:t,children:e},e)))]})},e)))]}),s.length>0&&_jsxs(_Fragment,{children:[_jsx(Heading,{children:"Webhooks"}),s.map((({id:e,href:o,httpVerb:a,path:r})=>_jsx(Item,{variant:"outlined",size:"large",onClick:()=>p(joinWithSeparator(t,encodeBackSlashes(o))),children:_jsxs("span",{children:[_jsx(HttpVerb,{color:a,children:a}),_jsx(Path,{children:r})]})},e)))]}),!o&&Boolean(l)&&_jsxs(StyledButton,{variant:"link",size:"large","data-testid":"show-more-operations",fullWidth:!0,onClick:()=>a(!0),children:["Show ",l," more..."]})]})}export const OperationsNavigation=memo(OperationsNavigationComponent);const Wrapper=styled(SamplesPanel)`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--spacing-xxs);
@@ -0,0 +1,13 @@
1
+ import { Badge } from '@redocly/theme';
2
+ import type { PropsWithChildren } from 'react';
3
+ import type { OpenAPIXBadges } from '../../types';
4
+ interface CustomBadgesProps {
5
+ badges?: OpenAPIXBadges[];
6
+ }
7
+ export declare const CustomBadges: import("react").NamedExoticComponent<PropsWithChildren<CustomBadgesProps>>;
8
+ export declare const StyledBadge: import("styled-components").StyledComponent<typeof Badge, any, {}, never>;
9
+ export declare const NavigationBadge: import("styled-components").StyledComponent<typeof Badge, any, {
10
+ deprecated?: boolean | undefined;
11
+ color?: string | undefined;
12
+ }, never>;
13
+ export {};
@@ -0,0 +1,19 @@
1
+ import{Fragment as _Fragment,jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{memo}from"react";import styled,{css}from"styled-components";import{Badge}from"@redocly/theme";function CustomBadgesComponent({badges:e,children:o}){if(!e)return _jsx(_Fragment,{children:o});const r=e.filter((({position:e})=>"before"===e)),t=e.filter((({position:e})=>"after"===e));return _jsxs(_Fragment,{children:[r.map((({name:e,color:o})=>_jsx(StyledBadge,{color:o,children:e},e))),o,t.map((({name:e,color:o})=>_jsx(StyledBadge,{color:o,children:e},e)))]})}export const CustomBadges=memo(CustomBadgesComponent);export const StyledBadge=styled(Badge)`
2
+ margin-left: 0;
3
+ background-color: ${({color:e})=>e||"var(--color-info-base)"};
4
+ ${({deprecated:e})=>e&&css`
5
+ color: var(--badge-deprecated-text-color);
6
+ background-color: var(--badge-deprecated-bg-color);
7
+ border-radius: var(--badge-deprecated-border-radius);
8
+ `};
9
+ `;export const NavigationBadge=styled(StyledBadge)`
10
+ margin-left: 0;
11
+ font-size: var(--font-size-sm);
12
+ line-height: var(--line-height-sm);
13
+ padding: 0 var(--spacing-xxs);
14
+ max-width: 80px;
15
+ text-overflow: ellipsis;
16
+ white-space: nowrap;
17
+ overflow: hidden;
18
+ `;
19
+ //# sourceMappingURL=Badges.js.map
@@ -0,0 +1,5 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface ExpandableExampleProps {
3
+ value: string;
4
+ }
5
+ export declare function ExpandableExample({ value }: ExpandableExampleProps): ReactElement | null;
@@ -0,0 +1,10 @@
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import styled from"styled-components";import{Button}from"@redocly/theme";import{Markdown}from"../../Markdown";import{ExampleValue}from"../Fields";import{useExpandableField}from"../../../hooks";export function ExpandableExample({value:e}){const{displayText:n,containerRef:a,toggleExpand:o,expanded:l}=useExpandableField({value:e});return _jsxs(Container,{ref:a,children:[_jsx(Markdown,{source:n}),(e!==n||l)&&_jsx(ButtonWrap,{children:_jsx(Button,{variant:"link",size:"small",onClick:o,children:l?"Hide example":"Show example"})})]})}const Container=styled(ExampleValue)`
2
+ display: inline;
3
+
4
+ & * {
5
+ display: inline;
6
+ }
7
+ `,ButtonWrap=styled.span`
8
+ margin-left: var(--spacing-xs);
9
+ `;
10
+ //# sourceMappingURL=ExpandableExample.js.map
@@ -0,0 +1 @@
1
+ export { ExpandableExample } from './ExpandableExample';
@@ -0,0 +1,2 @@
1
+ export{ExpandableExample}from"./ExpandableExample";
2
+ //# sourceMappingURL=index.js.map
@@ -2,15 +2,15 @@
2
2
  import type { SelectProps } from './types';
3
3
  export declare const Select: import("styled-components").StyledComponent<import("react").NamedExoticComponent<SelectProps>, any, SelectProps & {
4
4
  fullWidth?: boolean | undefined;
5
- variant?: "dark" | "light" | undefined;
5
+ variant?: "light" | "dark" | undefined;
6
6
  }, never>;
7
7
  export declare const SimpleSelect: import("styled-components").StyledComponent<import("react").NamedExoticComponent<SelectProps>, any, SelectProps & {
8
8
  fullWidth?: boolean | undefined;
9
- variant?: "dark" | "light" | undefined;
9
+ variant?: "light" | "dark" | undefined;
10
10
  }, never>;
11
11
  export declare const CollapsingSelect: import("styled-components").StyledComponent<import("react").NamedExoticComponent<SelectProps>, any, SelectProps & {
12
12
  fullWidth?: boolean | undefined;
13
- variant?: "dark" | "light" | undefined;
13
+ variant?: "light" | "dark" | undefined;
14
14
  } & {
15
15
  active?: boolean | undefined;
16
16
  }, never>;
@@ -4,6 +4,8 @@ export { ShareLinkToField } from './LinkToField';
4
4
  export { deprecatedCss } from './mixins';
5
5
  export { Container, HttpVerb, MimeLabel } from './styled';
6
6
  export { CodeBlockPanel } from './CodeBlockPanel';
7
+ export { CustomBadges, StyledBadge, NavigationBadge } from './Badges';
8
+ export { ExpandableExample } from './ExpandableExample';
7
9
  export * from './Fields';
8
10
  export * from './panels';
9
11
  export { FieldsGroupHeader } from './headers';
@@ -1,2 +1,2 @@
1
- export{Select}from"./Select";export{ShareLinkToField}from"./LinkToField";export{deprecatedCss}from"./mixins";export{Container,HttpVerb,MimeLabel}from"./styled";export{CodeBlockPanel}from"./CodeBlockPanel";export*from"./Fields";export*from"./panels";export{FieldsGroupHeader}from"./headers";export{ShareLink,Link}from"./linkify";export*from"./schema";export{Skeleton}from"./Skeleton";
1
+ export{Select}from"./Select";export{ShareLinkToField}from"./LinkToField";export{deprecatedCss}from"./mixins";export{Container,HttpVerb,MimeLabel}from"./styled";export{CodeBlockPanel}from"./CodeBlockPanel";export{CustomBadges,StyledBadge,NavigationBadge}from"./Badges";export{ExpandableExample}from"./ExpandableExample";export*from"./Fields";export*from"./panels";export{FieldsGroupHeader}from"./headers";export{ShareLink,Link}from"./linkify";export*from"./schema";export{Skeleton}from"./Skeleton";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,7 @@
1
- import { Badge } from '@redocly/theme';
2
1
  export declare const OneOfButton: import("styled-components").StyledComponent<"button", any, {
3
2
  selected: boolean;
4
3
  deprecated: boolean;
5
4
  }, never>;
6
5
  export declare const OneOfList: import("styled-components").StyledComponent<"div", any, {}, never>;
7
6
  export declare const Wrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
8
- export declare const BadgeStyle: import("styled-components").StyledComponent<typeof Badge, any, {}, never>;
9
7
  export declare const SelectionTitle: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -1,4 +1,4 @@
1
- import styled,{css}from"styled-components";import{Badge}from"@redocly/theme";import{deprecatedCss}from"./mixins";export const OneOfButton=styled.button`
1
+ import styled,{css}from"styled-components";import{deprecatedCss}from"./mixins";export const OneOfButton=styled.button`
2
2
  border: 1px solid var(--schema-buttons-border-color);
3
3
  height: 24px;
4
4
  border-radius: var(--border-radius);
@@ -48,8 +48,6 @@ import styled,{css}from"styled-components";import{Badge}from"@redocly/theme";imp
48
48
  }
49
49
  `;export const Wrapper=styled.div`
50
50
  margin-bottom: 1em;
51
- `;export const BadgeStyle=styled(Badge)`
52
- margin-left: 0;
53
51
  `;export const SelectionTitle=styled.div`
54
52
  font-size: var(--font-size-sm);
55
53
  line-height: var(--line-height-sm);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import{renderHook,act}from"@testing-library/react-hooks";import{useExpandableField}from"../useExpandableField";jest.mock("../../utils",(()=>({calculateAvgCharacterWidth:jest.fn((()=>10))}))),describe("useExpandableField",(()=>{const e="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";it("should truncate text correctly when not expanded",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},act((()=>{t.current.toggleExpand()})),act((()=>{t.current.toggleExpand()})),expect(t.current.displayText.length).toBeLessThanOrEqual(23)})),it("should show full text when expanded",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},act((()=>{t.current.toggleExpand()})),expect(t.current.displayText).toEqual(e)})),it("should toggle expanded state correctly",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));expect(t.current.expanded).toBe(!1),act((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!0),act((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!1)}))}));
2
+ //# sourceMappingURL=useExpandableField.test.js.map
@@ -5,3 +5,4 @@ export { useRouter } from './useRouter';
5
5
  export { useContentItems } from './useContentItems';
6
6
  export { useActiveWithFallback } from './useActiveWithFallback';
7
7
  export { useUppercase2LowercaseRedirect } from './useUppercase2LowercaseRedirect';
8
+ export { useExpandableField } from './useExpandableField';
@@ -1,2 +1,2 @@
1
- export{useDimensions}from"./useDimensions";export{usePrevious}from"./usePrevious";export{useActivateExample}from"./useActivateExample";export{useRouter}from"./useRouter";export{useContentItems}from"./useContentItems";export{useActiveWithFallback}from"./useActiveWithFallback";export{useUppercase2LowercaseRedirect}from"./useUppercase2LowercaseRedirect";
1
+ export{useDimensions}from"./useDimensions";export{usePrevious}from"./usePrevious";export{useActivateExample}from"./useActivateExample";export{useRouter}from"./useRouter";export{useContentItems}from"./useContentItems";export{useActiveWithFallback}from"./useActiveWithFallback";export{useUppercase2LowercaseRedirect}from"./useUppercase2LowercaseRedirect";export{useExpandableField}from"./useExpandableField";
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export interface UseExpandableFieldProps {
3
+ value: string;
4
+ lines?: number;
5
+ }
6
+ export interface UseExpandableFieldResult {
7
+ expanded: boolean;
8
+ displayText: string;
9
+ containerRef: React.RefObject<HTMLDivElement>;
10
+ toggleExpand: () => void;
11
+ }
12
+ export declare function useExpandableField({ value, lines, }: UseExpandableFieldProps): UseExpandableFieldResult;
@@ -0,0 +1,2 @@
1
+ import{useState,useRef,useLayoutEffect}from"react";import{calculateAvgCharacterWidth}from"../utils";export function useExpandableField({value:e,lines:t=2}){const[a,n]=useState(!1),l=useRef(null),[r,u]=useState(e);useLayoutEffect((()=>{var n;if(null===(n=l.current)||void 0===n?void 0:n.parentElement){const n=l.current.parentElement,r=n.getBoundingClientRect().width,o=calculateAvgCharacterWidth(n),i=Math.floor(r/o);if(a)u(e);else{const a=c(e,i*t);u(a)}}}),[l,a,t,e]);const c=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...`;return{expanded:a,displayText:r,containerRef:l,toggleExpand:()=>{n((e=>!e))}}}
2
+ //# sourceMappingURL=useExpandableField.js.map
@@ -3,6 +3,7 @@ export type OperationStore = {
3
3
  activeOneOf: {
4
4
  [pointer: string]: number;
5
5
  };
6
+ activeSecuritySchemeIds?: string[];
6
7
  requestValues: {
7
8
  [field: string]: any;
8
9
  };
@@ -1,2 +1,2 @@
1
- import*as Sampler from"openapi-sampler";import merge from"deepmerge";import{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 mapOperationToHAR(e,{exampleName:t="",skipOptionalParameters:a=!1,withOAuth2Call:r=!1,spec:s,generatedPayloadSamplesMaxDepth:i=8,pathParams:n={},properties:o={}},{environment:l,requestValues:u}){var p,c,d;const m=l.server,h=e.servers.find((e=>e.url===m))||e.servers[0],{securityHeaders:y,securityCookies:f,securityQueries:g,securityOAuth2ExtraCalls:v,basicAuth:O}=getSecurityData(null===(p=e.security)||void 0===p?void 0:p[0],r,l),T=(null===(c=null==e?void 0:e.requestBody)||void 0===c?void 0:c.content)&&getActiveMediaType(e.requestBody.content),S={skipNonRequired:a,skipReadOnly:!0,maxSampleDepth:i},C=u;let b=!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=C.header)||void 0===t?void 0:t[e.name])||getParameterValue("header",e.name)||serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,S,s))}})).map((e=>((null==T?void 0:T.name)&&"content-type"===e.name.toLowerCase()&&(b=!0,e.value=T.name),e))).concat(y);!b&&(null==T?void 0:T.name)&&E.unshift({name:"Content-Type",value:null==T?void 0:T.name});const _=e.parameters.filter((e=>"cookie"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,S,s))))).reduce(((e,t)=>{var a;for(const[r,s]of Object.entries(t))e.push({name:r,value:String((null===(a=C.cookie)||void 0===a?void 0:a[r])||s)});return e}),[]).concat(f),A=e.parameters.filter((e=>"query"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,S,s))))).reduce(((e,t)=>{var a,r,s;for(const[i,n]of Object.entries(t))e.push({name:i,value:isArrayOfObjects(null===(a=C.query)||void 0===a?void 0:a[i])&&JSON.stringify(deleteEmptyArrayItem(null===(r=C.query)||void 0===r?void 0:r[i]))||String((null===(s=C.query)||void 0===s?void 0:s[i])||n)});return e}),[]).concat(g),k=`${null==h?void 0:h.url.replace(/\/$/,"")}/${e.path.replace(/^\//,"")}`,P=e.parameters.filter((e=>"path"===e.in)).reduce(((e,t)=>{var a;const{in:r,name:s}=t;return e[s]=(null===(a=C.path)||void 0===a?void 0:a[s])||n[s]||getParameterValue(r,s),e}),{}),j=null===(d=null==T?void 0:T.examples)||void 0===d?void 0:d[t],w=(null==T?void 0:T.examples)||{},[R]=Object.values(w),D=(null==C?void 0:C.body)||(null==j?void 0:j.value)||(null==R?void 0:R.value)||(null==T?void 0:T.schema)&&Sampler.sample(null==T?void 0:T.schema.rawSchema,S,s),M=null==T?void 0:T.name.toLowerCase();let q="",H=[];switch(normalizeMimeType(M)){case MediaTypes.JSON:case MediaTypes.XML:q=JSON.stringify(getDataRequest(D,o));break;case MediaTypes.URL_ENCODED:case MediaTypes.MULTIPART:q=queryString.stringify(getDataRequest(D,o)),H=objectToHarParams(getDataRequest(D,o));break;default:q=String(D||"")}const N=q?{mimeType:(null==T?void 0:T.name)||MediaTypes.OCTET_STREAM,text:q,params:H}:void 0,x=e.responses.map((e=>e.code));return{method:e.httpVerb,url:k,httpVersion:"HTTP/1.1",cookies:_,headers:E,queryString:A,postData:N,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:v,basicAuth:O,pathParameters:P,serverVariables:l,allResponseCodes:x}}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}){try{const{skipOptionalParameters:o,withOAuth2Call:l,spec:u,generatedPayloadSamplesMaxDepth:p,store:c}=i,d=mapOperationToHAR(t,{exampleName:a,pathParams:r,properties:s,skipOptionalParameters:o,withOAuth2Call:l,spec:u,generatedPayloadSamplesMaxDepth:p},{environment:n,requestValues:c.requestValues}),m=new HTTPSnippet(d);return langToSnippetConfig[e]?m.convert(langToSnippetConfig[e].code,langToSnippetConfig[e].defaultTarget,Object.assign(Object.assign({},langToSnippetConfig[e].defaultOptions),i)):"Language is not supported."}catch(e){return console.error(e),"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 u of(null==e?void 0:e.schemes)||[]){const e=getSecurityDetails(u.id,a);switch(u.type){case"openIdConnect":null===(r=l.securityHeaders)||void 0===r||r.push({name:"Authorization",value:e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const a=e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";u.flows.clientCredentials&&t?l.securityOAuth2ExtraCalls.push(getOAuth2ClientCredsCallHar(u.flows.clientCredentials,u.scopes,e)):u.flows.password&&t&&l.securityOAuth2ExtraCalls.push(getOAuth2PasswordCallHar(u.flows.password,u.scopes,e)),null===(s=l.securityHeaders)||void 0===s||s.push({name:"Authorization",value:a});break}case"apiKey":{const t=e.raw||"YOUR_API_KEY_HERE";"header"===u.in&&(null===(i=l.securityHeaders)||void 0===i||i.push({name:u.name,value:t})),"cookie"===u.in&&l.securityCookies.push({name:u.name,value:t}),"query"===u.in&&l.securityQueries.push({name:u.name,value:t});break}case"http":if("basic"===u.scheme)l.basicAuth={username:e.username||`<${StringUtility.toSnakeCase("Username")}>`,password:e.password||`<${StringUtility.toSnakeCase("Password")}>`};else{const t=(null===(n=e.token)||void 0===n?void 0:n.access_token)||`<YOUR_${u.bearerFormat||"TOKEN"}_HERE>`;null===(o=l.securityHeaders)||void 0===o||o.push({name:"Authorization",value:`${capitalizeFirst(u.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:[]}}function getDataRequest(e,t){if(e){if("object"==typeof e)return 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 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{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={}},{environment:l,requestValues:u,activeSecuritySchemeIds:p}){var c,d,m;const h=l.server,y=e.servers.find((e=>e.url===h))||e.servers[0],f=getSelectedSecurityScheme(e.security,p),{securityHeaders:g,securityCookies:v,securityQueries:O,securityOAuth2ExtraCalls:S,basicAuth:T}=getSecurityData(f||(null===(c=e.security)||void 0===c?void 0:c[0]),r,l),C=(null===(d=null==e?void 0:e.requestBody)||void 0===d?void 0:d.content)&&getActiveMediaType(e.requestBody.content),b={skipNonRequired:a,skipReadOnly:!0,maxSampleDepth:i},E=u;let _=!1;const A=e.parameters.filter((e=>"header"===e.in)).filter((e=>!(a&&!e.required))).map((e=>{var t;return{name:e.name,value:(null===(t=E.header)||void 0===t?void 0:t[e.name])||getParameterValue("header",e.name)||serializeParameterValue(e,Sampler.sample(e.schema.rawSchema,b,s))}})).map((e=>((null==C?void 0:C.name)&&"content-type"===e.name.toLowerCase()&&(_=!0,e.value=C.name),e))).concat(g);!_&&(null==C?void 0:C.name)&&A.unshift({name:"Content-Type",value:null==C?void 0:C.name});const k=e.parameters.filter((e=>"cookie"===e.in)).filter((e=>!(a&&!e.required))).map((e=>queryString.parse(serializeParameterValue(e,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=E.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,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=E.query)||void 0===a?void 0:a[i])&&JSON.stringify(deleteEmptyArrayItem(null===(r=E.query)||void 0===r?void 0:r[i]))||String((null===(s=E.query)||void 0===s?void 0:s[i])||n)});return e}),[]).concat(O),j=`${null==y?void 0:y.url.replace(/\/$/,"")}/${e.path.replace(/^\//,"")}`,w=e.parameters.filter((e=>"path"===e.in)).reduce(((e,t)=>{var a;const{in:r,name:s}=t;return e[s]=(null===(a=E.path)||void 0===a?void 0:a[s])||n[s]||getParameterValue(r,s),e}),{}),R=null===(m=null==C?void 0:C.examples)||void 0===m?void 0:m[t],D=(null==C?void 0:C.examples)||{},[q]=Object.values(D),M=(null==E?void 0:E.body)||(null==R?void 0:R.value)||(null==q?void 0:q.value)||(null==C?void 0:C.schema)&&Sampler.sample(null==C?void 0:C.schema.rawSchema,b,s),H=null==C?void 0:C.name.toLowerCase();let N="",x=[];switch(normalizeMimeType(H)){case MediaTypes.JSON:case MediaTypes.XML:N=JSON.stringify(getDataRequest(M,o));break;case MediaTypes.URL_ENCODED:case MediaTypes.MULTIPART:N=queryString.stringify(getDataRequest(M,o)),x=objectToHarParams(getDataRequest(M,o));break;default:N=String(M||"")}const U=N?{mimeType:(null==C?void 0:C.name)||MediaTypes.OCTET_STREAM,text:N,params:x}:void 0,z=e.responses.map((e=>e.code));return{method:e.httpVerb,url:j,httpVersion:"HTTP/1.1",cookies:k,headers:A,queryString:P,postData:U,headersSize:-1,bodySize:-1,securityOAuth2ExtraCalls:S,basicAuth:T,pathParameters:w,serverVariables:l,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}){try{const{skipOptionalParameters:o,withOAuth2Call:l,spec:u,generatedPayloadSamplesMaxDepth:p,store:c}=i,d=mapOperationToHAR(t,{exampleName:a,pathParams:r,properties:s,skipOptionalParameters:o,withOAuth2Call:l,spec:u,generatedPayloadSamplesMaxDepth:p},{environment:n,requestValues:c.requestValues,activeSecuritySchemeIds:c.activeSecuritySchemeIds}),m=new HTTPSnippet(d);return langToSnippetConfig[e]?m.convert(langToSnippetConfig[e].code,langToSnippetConfig[e].defaultTarget,Object.assign(Object.assign({},langToSnippetConfig[e].defaultOptions),i)):"Language is not supported."}catch(e){return console.error(e),"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 u of(null==e?void 0:e.schemes)||[]){const e=getSecurityDetails(u.id,a);switch(u.type){case"openIdConnect":null===(r=l.securityHeaders)||void 0===r||r.push({name:"Authorization",value:e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>"});break;case"oauth2":{const a=e.token?`${e.token.token_type||"Bearer"} ${e.token.access_token}`:"Bearer <YOUR_TOKEN_HERE>";u.flows.clientCredentials&&t?l.securityOAuth2ExtraCalls.push(getOAuth2ClientCredsCallHar(u.flows.clientCredentials,u.scopes,e)):u.flows.password&&t&&l.securityOAuth2ExtraCalls.push(getOAuth2PasswordCallHar(u.flows.password,u.scopes,e)),null===(s=l.securityHeaders)||void 0===s||s.push({name:"Authorization",value:a});break}case"apiKey":{const t=e.raw||"YOUR_API_KEY_HERE";"header"===u.in&&(null===(i=l.securityHeaders)||void 0===i||i.push({name:u.name,value:t})),"cookie"===u.in&&l.securityCookies.push({name:u.name,value:t}),"query"===u.in&&l.securityQueries.push({name:u.name,value:t});break}case"http":if("basic"===u.scheme)l.basicAuth={username:e.username||`<${StringUtility.toSnakeCase("Username")}>`,password:e.password||`<${StringUtility.toSnakeCase("Password")}>`};else{const t=(null===(n=e.token)||void 0===n?void 0:n.access_token)||`<YOUR_${u.bearerFormat||"TOKEN"}_HERE>`;null===(o=l.securityHeaders)||void 0===o||o.push({name:"Authorization",value:`${capitalizeFirst(u.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:[]}}function getDataRequest(e,t){if(e){if("object"==typeof e)return 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 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)}
2
2
  //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ export declare function areArraysEqual(arr1: unknown[], arr2: unknown[]): boolean;
@@ -0,0 +1,2 @@
1
+ export function areArraysEqual(e,r){return e.length===r.length&&e.every(((e,n)=>e===r[n]))}
2
+ //# sourceMappingURL=areArraysEqual.js.map
@@ -0,0 +1 @@
1
+ export declare function calculateAvgCharacterWidth(parentElement: HTMLElement): number;
@@ -0,0 +1,2 @@
1
+ export function calculateAvgCharacterWidth(t){const e=document.createElement("span");e.style.visibility="hidden",e.style.whiteSpace="nowrap",e.textContent="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t.appendChild(e);const n=e.getBoundingClientRect().width/e.textContent.length;return t.removeChild(e),n}
2
+ //# sourceMappingURL=calculateAvgCharacterWidth.js.map
@@ -20,3 +20,5 @@ export * from './path';
20
20
  export * from './queryString';
21
21
  export * from './isMobile';
22
22
  export * from './replaceVariables';
23
+ export * from './areArraysEqual';
24
+ export * from './calculateAvgCharacterWidth';
@@ -1,2 +1,2 @@
1
- export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./dom";export*from"./debug";export*from"./sort";export*from"./argValuesHelpers";export*from"./theme-helpers";export*from"./debounce";export*from"./security-details";export*from"./session-storage";export*from"./local-storage";export*from"./parameters";export*from"./string";export*from"./test-utils";export*from"./compose";export*from"./saveTextBeforeHeading";export*from"./path";export*from"./queryString";export*from"./isMobile";export*from"./replaceVariables";
1
+ export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./dom";export*from"./debug";export*from"./sort";export*from"./argValuesHelpers";export*from"./theme-helpers";export*from"./debounce";export*from"./security-details";export*from"./session-storage";export*from"./local-storage";export*from"./parameters";export*from"./string";export*from"./test-utils";export*from"./compose";export*from"./saveTextBeforeHeading";export*from"./path";export*from"./queryString";export*from"./isMobile";export*from"./replaceVariables";export*from"./areArraysEqual";export*from"./calculateAvgCharacterWidth";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "0.0.0-cache-perf-20240702081649",
3
+ "version": "0.0.0-cache-perf-20240715122448",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -16,7 +16,7 @@
16
16
  "openapi-docs": "bin.js"
17
17
  },
18
18
  "peerDependencies": {
19
- "@redocly/theme": "0.0.0-cache-perf-20240702081649",
19
+ "@redocly/theme": "0.0.0-cache-perf-20240715122448",
20
20
  "core-js": "^3.1.4",
21
21
  "react": "^18.0.0",
22
22
  "react-dom": "^18.0.0",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@markdoc/markdoc": "0.4.0",
27
- "@redocly/openapi-core": "1.12.2",
27
+ "@redocly/openapi-core": "1.17.1",
28
28
  "deepmerge": "^4.2.2",
29
29
  "dompurify": "^2.0.12",
30
30
  "fast-deep-equal": "^3.1.3",
@@ -44,12 +44,13 @@
44
44
  "url": "~0.11.0",
45
45
  "url-template": "^2.0.8",
46
46
  "util": "~0.12.5",
47
- "@redocly/config": "0.0.0-cache-perf-20240702081649",
48
- "@redocly/replay": "0.0.0-cache-perf-20240702081649"
47
+ "@redocly/replay": "0.0.0-cache-perf-20240715122448",
48
+ "@redocly/config": "0.0.0-cache-perf-20240715122448"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@testing-library/jest-dom": "6.1.5",
52
52
  "@testing-library/react": "14.1.2",
53
+ "@testing-library/react-hooks": "^8.0.1",
53
54
  "@testing-library/user-event": "14.5.1",
54
55
  "@types/dompurify": "2.4.0",
55
56
  "@types/jest": "29.5.11",
@@ -78,7 +79,7 @@
78
79
  "react": "18.2.0",
79
80
  "react-dom": "18.2.0",
80
81
  "react-is": "18.2.0",
81
- "rimraf": "5.0.5",
82
+ "rimraf": "5.0.7",
82
83
  "string-replace-loader": "3.1.0",
83
84
  "style-loader": "1.3.0",
84
85
  "styled-components": "5.3.11",
@@ -91,7 +92,7 @@
91
92
  "webpack": "5.91.0",
92
93
  "webpack-cli": "5.1.4",
93
94
  "webpack-dev-server": "4.15.2",
94
- "@redocly/theme": "0.0.0-cache-perf-20240702081649"
95
+ "@redocly/theme": "0.0.0-cache-perf-20240715122448"
95
96
  },
96
97
  "scripts": {
97
98
  "start": "webpack serve --mode=development --hot",
@@ -1,2 +0,0 @@
1
- import { Panel } from '@redocly/theme';
2
- export declare const ContentPanel: import("styled-components").StyledComponent<typeof Panel, any, {}, never>;
@@ -1,25 +0,0 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContentPanel=void 0;const styled_components_1=__importDefault(require("styled-components")),theme_1=require("@redocly/theme"),headers_1=require("../common/headers");exports.ContentPanel=(0,styled_components_1.default)(theme_1.Panel)`
2
- &:not(:last-child) {
3
- margin-bottom: 20px;
4
- }
5
-
6
- > ${theme_1.PanelHeader} {
7
- ${theme_1.PanelHeaderTitle} {
8
- margin-right: 8px;
9
- }
10
- }
11
-
12
- &.panel-security-schemas ${theme_1.PanelHeaderTitle} {
13
- min-width: fit-content;
14
- }
15
-
16
- ${headers_1.FieldsGroupHeader} {
17
- // TODO fix me - this style overrides style inside MediaTypesSwitch by FormControl(why?)
18
- font-family: var(--font-family-base);
19
-
20
- > ${theme_1.PanelBody} > div:last-child > & {
21
- margin-top: 0;
22
- }
23
- }
24
- `;
25
- //# sourceMappingURL=ContentPanel.js.map
@@ -1 +0,0 @@
1
- export declare const Description: import("styled-components").StyledComponent<"span", any, {}, never>;
@@ -1,8 +0,0 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Description=void 0;const styled_components_1=__importDefault(require("styled-components"));exports.Description=styled_components_1.default.span`
2
- font-size: 0.9em;
3
- white-space: nowrap;
4
- overflow: hidden;
5
- text-overflow: ellipsis;
6
- font-weight: normal;
7
- `;
8
- //# sourceMappingURL=Description.js.map
@@ -1,2 +0,0 @@
1
- import { Panel } from '@redocly/theme';
2
- export declare const ContentPanel: import("styled-components").StyledComponent<typeof Panel, any, {}, never>;
@@ -1,25 +0,0 @@
1
- import styled from"styled-components";import{Panel,PanelHeader,PanelHeaderTitle,PanelBody}from"@redocly/theme";import{FieldsGroupHeader}from"../common/headers";export const ContentPanel=styled(Panel)`
2
- &:not(:last-child) {
3
- margin-bottom: 20px;
4
- }
5
-
6
- > ${PanelHeader} {
7
- ${PanelHeaderTitle} {
8
- margin-right: 8px;
9
- }
10
- }
11
-
12
- &.panel-security-schemas ${PanelHeaderTitle} {
13
- min-width: fit-content;
14
- }
15
-
16
- ${FieldsGroupHeader} {
17
- // TODO fix me - this style overrides style inside MediaTypesSwitch by FormControl(why?)
18
- font-family: var(--font-family-base);
19
-
20
- > ${PanelBody} > div:last-child > & {
21
- margin-top: 0;
22
- }
23
- }
24
- `;
25
- //# sourceMappingURL=ContentPanel.js.map
@@ -1 +0,0 @@
1
- export declare const Description: import("styled-components").StyledComponent<"span", any, {}, never>;
@@ -1,8 +0,0 @@
1
- import styled from"styled-components";export const Description=styled.span`
2
- font-size: 0.9em;
3
- white-space: nowrap;
4
- overflow: hidden;
5
- text-overflow: ellipsis;
6
- font-weight: normal;
7
- `;
8
- //# sourceMappingURL=Description.js.map