@redocly/api-docs 0.2.0-next.4 → 0.2.0-next.6

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 (136) hide show
  1. package/lib/RedocStandalone.d.ts +38 -0
  2. package/lib/RedocStandalone.js +1 -0
  3. package/lib/RedoclyApiDocs.js +1 -1
  4. package/lib/RedoclyApiDocsStandalone.d.ts +2 -0
  5. package/lib/adapters/asyncapi/items/overview/content.js +1 -1
  6. package/lib/adapters/graphql/utils/createApiItem.js +1 -1
  7. package/lib/adapters/helpers.d.ts +2 -0
  8. package/lib/adapters/helpers.js +1 -1
  9. package/lib/adapters/openapi/build-code-sample-source.d.ts +1 -1
  10. package/lib/adapters/openapi/build-code-sample-source.js +1 -1
  11. package/lib/adapters/openapi/configure/merge-utils.d.ts +1 -1
  12. package/lib/adapters/openapi/index.js +1 -1
  13. package/lib/adapters/openapi/items/operation/content.js +1 -1
  14. package/lib/adapters/openapi/items/operation/item.js +1 -1
  15. package/lib/adapters/openapi/items/overview/content.js +1 -1
  16. package/lib/adapters/openapi/store.js +1 -1
  17. package/lib/adapters/openapi/utils/merge-mock-server.d.ts +2 -2
  18. package/lib/adapters/utils/markdoc.d.ts +4 -1
  19. package/lib/adapters/utils/markdoc.js +1 -1
  20. package/lib/components/ErrorBoundary.d.ts +4 -2
  21. package/lib/components/ErrorBoundary.js +1 -1
  22. package/lib/components/Header/HeaderItem.js +1 -1
  23. package/lib/components/ItemContent/sections/MessagesSection.js +1 -1
  24. package/lib/components/Schema/styled.js +4 -4
  25. package/lib/components/Schema/views/ArrayRenderer.js +1 -1
  26. package/lib/components/Search/index.d.ts +15 -0
  27. package/lib/components/Search/index.js +1 -0
  28. package/lib/components/Security/styled.js +7 -7
  29. package/lib/components/StickySidebar/FloatingButton.d.ts +1 -0
  30. package/lib/components/StickySidebar/FloatingButton.js +32 -0
  31. package/lib/components/StickySidebar/RedoclyAttributionLogo.d.ts +5 -0
  32. package/lib/components/StickySidebar/RedoclyAttributionLogo.js +1 -0
  33. package/lib/components/StickySidebar/StickySidebar.js +33 -9
  34. package/lib/components/common/Breadcrumbs.js +2 -2
  35. package/lib/components/common/ResponseCodeTabs.js +1 -1
  36. package/lib/components/common/Tag.js +1 -1
  37. package/lib/components/common/ViewNested.js +2 -2
  38. package/lib/components/graphql/GraphQLFieldView.js +1 -1
  39. package/lib/components/graphql/RequiresScopesModal.js +3 -3
  40. package/lib/components/graphql/sections/GraphQLArgsSection.js +1 -1
  41. package/lib/components/panels/ExampleItem/CallbackPayloadItem.js +2 -2
  42. package/lib/components/panels/ExampleItem/CodeSampleItem.js +1 -1
  43. package/lib/components/panels/ExampleItem/PayloadExampleItem.js +2 -2
  44. package/lib/components/panels/ExampleItem/ResponseExampleItem.js +1 -1
  45. package/lib/components/panels/ExampleItem/SecuritySchemeSelector.d.ts +9 -0
  46. package/lib/components/panels/ExampleItem/SecuritySchemeSelector.js +1 -0
  47. package/lib/components/panels/ExampleItem/ServerDropdown.js +1 -1
  48. package/lib/components/panels/ExampleItem/generate-request-sample.d.ts +28 -0
  49. package/lib/components/panels/ExampleItem/generate-request-sample.js +1 -0
  50. package/lib/components/panels/ExampleItem/selectors.d.ts +5 -2
  51. package/lib/components/panels/ExampleItem/selectors.js +1 -1
  52. package/lib/components/panels/ExampleItem/styled.d.ts +2 -49
  53. package/lib/components/panels/ExampleItem/styled.js +11 -5
  54. package/lib/components/panels/ExampleItem/useActiveServer.d.ts +17 -0
  55. package/lib/components/panels/ExampleItem/useActiveServer.js +1 -0
  56. package/lib/components/panels/ExampleItem/useCodeSampleLanguages.d.ts +23 -0
  57. package/lib/components/panels/ExampleItem/useCodeSampleLanguages.js +1 -0
  58. package/lib/components/panels/ExampleItem/useReplayRequestState.d.ts +18 -0
  59. package/lib/components/panels/ExampleItem/useReplayRequestState.js +1 -0
  60. package/lib/components/panels/ExampleItem/useTryItFooter.d.ts +3 -0
  61. package/lib/components/panels/ExampleItem/useTryItFooter.js +7 -0
  62. package/lib/components/panels/GroupPanelItem.js +1 -1
  63. package/lib/components/panels/McpPanelItem.js +2 -2
  64. package/lib/components/panels/ServerItem/ServerItem.js +1 -1
  65. package/lib/components/panels/asyncapi/BrokerItem/BrokerModal.js +1 -1
  66. package/lib/components/panels/asyncapi/BrokerItem/BrokerPanelItem.js +1 -1
  67. package/lib/components/panels/shared-panel-styles.js +1 -1
  68. package/lib/components/pluggable/RedocExample.js +5 -2
  69. package/lib/hoc/withStoreProvider.js +1 -1
  70. package/lib/hooks/useInitialTelemetry.d.ts +2 -0
  71. package/lib/hooks/useInitialTelemetry.js +1 -0
  72. package/lib/hooks/useScrollSpyUrlSync.js +1 -1
  73. package/lib/index.d.ts +3 -0
  74. package/lib/index.js +1 -1
  75. package/lib/jotai/app.d.ts +6 -0
  76. package/lib/jotai/app.js +1 -1
  77. package/lib/jotai/examples.js +1 -1
  78. package/lib/jotai/itemStore.d.ts +1 -0
  79. package/lib/jotai/itemStore.js +1 -1
  80. package/lib/options/editionOverrides.d.ts +3 -0
  81. package/lib/options/editionOverrides.js +1 -0
  82. package/lib/options/helpers.d.ts +1 -1
  83. package/lib/options/normalizeOptions.d.ts +1 -1
  84. package/lib/options/normalizeOptions.js +1 -1
  85. package/lib/pages/ItemPage.js +4 -2
  86. package/lib/services/code-samples/apply-env-variables.d.ts +8 -0
  87. package/lib/services/code-samples/apply-env-variables.js +1 -0
  88. package/lib/services/code-samples/builder.d.ts +3 -5
  89. package/lib/services/code-samples/builder.js +1 -1
  90. package/lib/services/code-samples/discriminator.d.ts +16 -10
  91. package/lib/services/code-samples/discriminator.js +1 -1
  92. package/lib/services/code-samples/language-availability.d.ts +4 -0
  93. package/lib/services/code-samples/language-availability.js +1 -0
  94. package/lib/services/code-samples/{replay/normalize-servers.d.ts → normalize-servers.d.ts} +1 -1
  95. package/lib/services/code-samples/normalize-servers.js +1 -0
  96. package/lib/services/code-samples/replay/from-openapi-document.js +1 -1
  97. package/lib/services/code-samples/replay/replay-predefined-env.d.ts +1 -2
  98. package/lib/services/code-samples/replay/replay-predefined-env.js +1 -1
  99. package/lib/services/code-samples/resolvers.js +1 -1
  100. package/lib/services/code-samples/server-env.d.ts +3 -0
  101. package/lib/services/code-samples/server-env.js +1 -0
  102. package/lib/services/code-samples/source.d.ts +3 -3
  103. package/lib/services/operation-samples/index.js +1 -1
  104. package/lib/services/schema/dialects/jsonSchema.d.ts +5 -1
  105. package/lib/services/schema/dialects/jsonSchema.js +1 -1
  106. package/lib/services/schema/propertyTreeBuilder.js +1 -1
  107. package/lib/services/search/indexer.d.ts +9 -0
  108. package/lib/services/search/indexer.js +1 -0
  109. package/lib/services/search/types.d.ts +27 -0
  110. package/lib/services/search/types.js +0 -0
  111. package/lib/standalone.d.ts +19 -0
  112. package/lib/standalone.js +2 -0
  113. package/lib/standaloneThemeConfig.d.ts +3 -0
  114. package/lib/standaloneThemeConfig.js +1 -0
  115. package/lib/telemetry/RedocTelemetry.d.ts +3 -0
  116. package/lib/telemetry/RedocTelemetry.js +1 -1
  117. package/lib/telemetry/defaults.d.ts +2 -0
  118. package/lib/telemetry/defaults.js +1 -0
  119. package/lib/types/code-samples-config.d.ts +68 -0
  120. package/lib/types/code-samples-config.js +0 -0
  121. package/lib/types/common.d.ts +1 -1
  122. package/lib/types/content.d.ts +2 -1
  123. package/lib/types/edition-config.d.ts +4 -0
  124. package/lib/types/edition-config.js +0 -0
  125. package/lib/types/events.d.ts +2 -2
  126. package/lib/types/openapi.d.ts +2 -1
  127. package/lib/types/options.d.ts +27 -85
  128. package/lib/types/store.d.ts +1 -1
  129. package/lib/utils/deep-link.d.ts +1 -0
  130. package/lib/utils/deep-link.js +1 -1
  131. package/lib/utils/extract-extensions.js +1 -1
  132. package/lib/utils/scroll-anchoring.d.ts +2 -1
  133. package/lib/utils/x-logo.d.ts +13 -0
  134. package/lib/utils/x-logo.js +1 -0
  135. package/package.json +28 -7
  136. package/lib/services/code-samples/replay/normalize-servers.js +0 -1
@@ -1,5 +1,6 @@
1
1
  import type { CodeSampleHAR } from './sample-har.js';
2
2
  import type { CodeSampleSource, ParameterEntry } from './source.js';
3
+ import type { HoistedVariant } from './discriminator.js';
3
4
  export type HARBuildSelections = {
4
5
  serverUrl?: string;
5
6
  mediaType?: string;
@@ -29,10 +30,7 @@ export type HARBuildResolvers = {
29
30
  format?: string;
30
31
  }) => unknown;
31
32
  serializeParameter?: (param: ParameterEntry, value: unknown) => string;
32
- resolveVariantSchemaForSampling?: (schemaId: string) => {
33
- schema: Record<string, unknown>;
34
- variantSchemaId: string;
35
- } | undefined;
36
- applyDiscriminatorValue?: (sample: unknown, variantSchemaId: string) => void;
33
+ resolveVariantSchemaForSampling?: (schemaId: string) => HoistedVariant | undefined;
34
+ applyDiscriminatorValue?: (sample: unknown, variantSchemaId: string, mappingKey?: string) => void;
37
35
  };
38
36
  export declare function buildCodeSampleHAR(source: CodeSampleSource, selections: HARBuildSelections, options: HARBuildOptions, resolvers: HARBuildResolvers): CodeSampleHAR;
@@ -1 +1 @@
1
- import $ from"url-template";import{SecurityVariablesEnvSuffix as g}from"@redocly/theme/core/openapi";import{mergeBodyValue as F}from"../../adapters/openapi/configure/merge-utils.js";import{formUrlEncodeValue as H,stringifyFormFieldValue as E}from"../../utils/form-urlencoded.js";import{isSequentialMediaType as K}from"../../utils/media-type.js";import{parseMultipartFormData as M}from"../../utils/multipart.js";import{objectToHarParams as J}from"../../utils/serialize-querystring.js";import{jsonToXml as L}from"../../utils/xml.js";import{MediaTypes as k}from"../../constants/openapi.js";import{convertSampleToString as Y}from"./convertSampleToString.js";import{findExampleIdByKey as Q,mediaTypeContainingKey as X}from"./example-key.js";import{resolveServerUrl as G}from"./replay/normalize-servers.js";import{serverMatchesUrl as W}from"./server-variables.js";function Ie(e,n,a,r){const o=e.servers.find(f=>W(f,n.serverUrl))||e.servers[0],u=o?.url?.replace(/\/$/,"")??"",c=u?G(u).replace(/\/$/,""):"",t={};if(o?.variables)for(const[f,A]of Object.entries(o.variables))t[f]=n.environment?.[f]||A.default||"";const l=e.path.replace(/^\//,""),i=`${c}/${l}`,d={skipReadOnly:!0,maxDepth:a.generatedPayloadSamplesMaxDepth??8,format:"json"},s=o?.url??n.serverUrl??"",p=n.requestValues??{},m=Z(e.security,n.activeSecuritySchemeIds),y=ee(m,n,a,s),S=b(e.parameters.header,"header",s,p,a,r,d).concat(y.headers),h=n.mediaType||X(e.requestBody,n.exampleName,r.resolveExample)||(e.requestBody?Object.keys(e.requestBody)[0]:void 0);let R=!1;for(const f of S)f.name.toLowerCase()==="content-type"&&h&&(f.value=h,R=!0);!R&&h&&S.unshift({name:"Content-Type",value:h});const v=b(e.parameters.cookie,"cookie",s,p,a,r,d).concat(y.cookies),O=e.parameters.querystring.length>0,C=b(O?e.parameters.querystring:e.parameters.query,O?"querystring":"query",s,p,a,r,d).concat(y.queries),U={};for(const f of e.parameters.path)U[f.name]=p.path?.[f.name]||f.serverValues?.[s]?.example||f.example||"";let x;if(h&&e.requestBody?.[h]){const f=e.requestBody[h],A=e.requestValues?.serverBody?.[s]??e.requestValues?.body;x=le(f,h,n,r,d,s,A)}const w={};for(const f of S)w[f.name]=f.value;const I={};v.length&&(I.cookie=v.map(f=>`${encodeURIComponent(f.name)}=${encodeURIComponent(f.value)}`).join("; ")),Object.assign(I,w);const j={};for(const f of C)V(j,f.name,f.value);const B=x?.text?ue(x.text):void 0;let _;if(x?.params?.length){_={};for(const f of x.params)V(_,f.name,f.value??"")}const P=C.map(f=>`${encodeURIComponent(f.name)}=${encodeURIComponent(f.value)}`).join("&"),q=P?`${i}?${P}`:i;return{method:e.method.toUpperCase(),url:i,pathname:q,httpVersion:"HTTP/1.1",cookies:v,headers:S,queryString:C,postData:x,headersSize:-1,bodySize:-1,fullUrl:q,headersObj:w,allHeaders:I,queryObj:j,jsonObj:B,paramsObj:_,basicAuth:y.basicAuth,pathParameters:U,serverVariables:t,responseCodes:e.responseCodes,allResponseCodes:e.responseCodes,oAuth2PreRequests:y.oAuth2PreRequests}}function V(e,n,a){const r=e[n];r===void 0?e[n]=a:Array.isArray(r)?r.push(a):e[n]=[r,a]}function Z(e,n){if(e.length){if(n?.length){const a=e.find(r=>{const o=r.schemes.map(u=>u.id);return o.length===n.length&&o.every(u=>n.includes(u))});if(a)return a}return e[0]}}function ee(e,n,a,r){const o={headers:[],cookies:[],queries:[]};if(!e)return o;for(const u of e.schemes)ne(u,o,n,a,r,e.scopes);return o}const te={"x-defaultUsername":g.Username,"x-defaultPassword":g.Password,"x-defaultClientId":g.ClientId,"x-defaultClientSecret":g.ClientSecret};function ne(e,n,a,r,o,u=[]){const c=a.requestValues?.security,t=l=>{const i=e.serverValues?.[o];if(i){const y=i[l];if(y!=null)return String(y)}const d=e[l];if(d!=null&&typeof d=="string")return d;const s=c?.[l];if(s!=null)return String(s);const p=l==="x-defaultAccessToken"?e.type==="apiKey"?g.APIKey:g.Token:te[l],m=p!==void 0?a.environment?.[e.id+p]:void 0;if(m)return m};if(e.type==="http"&&e.scheme==="basic")n.basicAuth={username:t("x-defaultUsername")||c?.username||"<username>",password:t("x-defaultPassword")||c?.password||"<password>"};else if(e.type==="http"){const l=t("x-defaultAccessToken"),i=e.scheme||"bearer",d=i.charAt(0).toUpperCase()+i.slice(1),s=e.bearerFormat?`<YOUR_${e.bearerFormat}_HERE>`:"<YOUR_TOKEN_HERE>";n.headers.push({name:"Authorization",value:l?`${d} ${l}`:`${d} ${s}`})}else if(e.type==="apiKey"&&e.name){const l=t("x-defaultAccessToken")||"YOUR_API_KEY_HERE",i={name:e.name,value:l};e.in==="header"?n.headers.push(i):e.in==="cookie"?n.cookies.push({name:e.name,value:l}):(e.in==="query"||e.in==="querystring"||e.in===void 0)&&n.queries.push({name:e.name,value:l})}else if(e.type==="oauth2"){const l=t("x-defaultAccessToken"),i=t("x-defaultTokenType")||"Bearer";if(n.headers.push({name:"Authorization",value:l?`${i} ${l}`:"Bearer <YOUR_TOKEN_HERE>"}),r.withOAuth2Call&&e.flows){const d=[];if(e.flows.deviceAuthorization){const s=e.flows.deviceAuthorization;d.push(ae(s.deviceAuthorizationUrl,s.tokenUrl,e,o,u))}else if(e.flows.clientCredentials){const s=e.flows.clientCredentials;d.push(z("clientCredentials",s.tokenUrl,e,o,u))}else if(e.flows.password){const s=e.flows.password;d.push(z("password",s.tokenUrl,e,o,u))}d.length>0&&(n.oAuth2PreRequests=(n.oAuth2PreRequests??[]).concat(d))}}else if(e.type==="openIdConnect"){const l=t("x-defaultAccessToken"),i=t("x-defaultTokenType")||"Bearer";n.headers.push({name:"Authorization",value:l?`${i} ${l}`:"Bearer <YOUR_TOKEN_HERE>"})}}function ae(e,n,a,r,o=[]){const u=a.serverValues?.[r]?.["x-defaultClientId"]||a["x-defaultClientId"]||"YOUR_CLIENT_ID",c=[{name:"client_id",value:u}];return o.length>0&&c.push({name:"scope",value:o.join(" ")}),{flowType:"deviceAuthorization",tokenUrl:n,clientId:u,scopes:o.length>0?o:void 0,method:"POST",url:e,httpVersion:"HTTP/1.1",cookies:[],headers:[{name:"Content-Type",value:"application/x-www-form-urlencoded"},{name:"Accept",value:"application/json"}],queryString:[],postData:{mimeType:"application/x-www-form-urlencoded",params:c,text:c.map(t=>`${encodeURIComponent(t.name)}=${encodeURIComponent(t.value??"")}`).join("&")},headersSize:-1,bodySize:-1}}function z(e,n,a,r,o=[]){const u=a.serverValues?.[r]?.["x-defaultClientId"]||a["x-defaultClientId"]||"YOUR_CLIENT_ID",c=a.serverValues?.[r]?.["x-defaultClientSecret"]||a["x-defaultClientSecret"],t=a.serverValues?.[r]?.["x-defaultUsername"]||a["x-defaultUsername"],l=a.serverValues?.[r]?.["x-defaultPassword"]||a["x-defaultPassword"],i=[];return e==="clientCredentials"?i.push({name:"grant_type",value:"client_credentials"}):e==="password"&&i.push({name:"grant_type",value:"password"}),i.push({name:"client_id",value:u}),i.push({name:"client_secret",value:c||"YOUR_CLIENT_SECRET"}),e==="password"&&(i.push({name:"username",value:t||"<username>"}),i.push({name:"password",value:l||"<password>"})),o.length>0&&i.push({name:"scope",value:o.join(" ")}),{flowType:e,tokenUrl:n,clientId:u,clientSecret:c,username:t,password:l,scopes:o.length>0?o:void 0,method:"POST",url:n,httpVersion:"HTTP/1.1",cookies:[],headers:[{name:"Content-Type",value:"application/x-www-form-urlencoded"},{name:"Accept",value:"application/json"}],queryString:[],postData:{mimeType:"application/x-www-form-urlencoded",params:i,text:i.map(d=>`${encodeURIComponent(d.name)}=${encodeURIComponent(d.value??"")}`).join("&")},headersSize:-1,bodySize:-1}}function N(e,n,a){return n==="querystring"&&e.serializationMime===k.URL_ENCODED&&typeof a=="object"&&a!==null?re(J(a)):null}function re(e){const n=new Map,a=[];for(const r of e){const o=n.get(r.name);o?o.push(r.value):(n.set(r.name,[r.value]),a.push(r.name))}return a.map(r=>({name:r,value:(n.get(r)??[]).join(",")}))}function b(e,n,a,r,o,u,c){return e.filter(t=>!o.skipOptionalParameters||t.required).flatMap(t=>{const i=r[n==="querystring"?"query":n]?.[t.name];if(i!=null)return[{name:t.name,value:String(i)}];const d=t.serverValues?.[a]?.example;if(d!=null)return[{name:t.name,value:T(t,d)}];if(t.example!=null){const s=N(t,n,t.example);return s||(t.serializationMime&&u.serializeParameter?[{name:t.name,value:u.serializeParameter(t,t.example)}]:[{name:t.name,value:T(t,t.example)}])}if(n==="querystring"&&t.serializationMime===k.URL_ENCODED&&t.schemaId){const s=u.resolveSchema(t.schemaId);if(s){const p=u.sampleFromSchema(s,c),m=N(t,n,p);if(m)return m}}return[{name:t.name,value:oe(t,u,c)}]})}function oe(e,n,a){if(e.schemaId){const r=n.resolveSchema(e.schemaId);if(r){const o=n.sampleFromSchema(r,a);if(o!=null)return e.serializationMime&&n.serializeParameter?n.serializeParameter(e,o):T(e,o)}}return`{${e.name}}`}function ie(e){switch(e){case"query":case"querystring":case"cookie":return"form";case"path":case"header":return"simple";default:return"form"}}function T(e,n){if(n==null)return"";if(typeof n!="object")return String(n);const a=e.style??ie(e.in),o=e.explode??a==="form"?"*":"",u="__redoc_param_name__";try{switch(a){case"form":{const l=$.parse(`{?${u}${o}}`).expand({[u]:n}).substring(1).replace(/__redoc_param_name__/g,e.name).split(`&${e.name}=`);return l[0]=l[0].replace(new RegExp(`^${se(e.name)}=`),""),l.map(D).join(",")}case"spaceDelimited":return Array.isArray(n)?n.map(String).join(" "):String(n);case"pipeDelimited":return Array.isArray(n)?n.map(String).join("|"):String(n);case"simple":case"label":case"matrix":{const c=a==="label"?".":a==="matrix"?";":"",t=$.parse(`{${c}${u}${o}}`);return D(t.expand({[u]:n}).replace(/__redoc_param_name__/g,e.name))}case"deepObject":return JSON.stringify(n);default:return JSON.stringify(n)}}catch{return Array.isArray(n)?n.map(String).join(","):JSON.stringify(n)}}function se(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function D(e){try{return decodeURIComponent(e)}catch{return e}}function le(e,n,a,r,o,u,c){let t;if(a.replayBody!==void 0&&(t=a.replayBody),t===void 0&&a.exampleName){const s=Q(e.exampleIds,a.exampleName,r.resolveExample),p=s?r.resolveExample(s):void 0;p&&(t=p.value)}if(t===void 0&&e.exampleIds?.length){const s=r.resolveExample(e.exampleIds[0]);s&&(t=s.value)}if(t===void 0&&e.schemaId){const s=r.resolveVariantSchemaForSampling?.(e.schemaId),p=s?.schema??r.resolveSchema(e.schemaId),m=s?.variantSchemaId??e.schemaId;if(p){const y=n.toLowerCase().includes("xml");t=r.sampleFromSchema(p,{...o,format:y?"xml":o.format}),t&&typeof t=="object"&&!Array.isArray(t)&&m!==e.schemaId&&r.applyDiscriminatorValue?.(t,m)}}if(c!==void 0&&a.replayBody===void 0&&(t===void 0?t=c:t=F(t,c)),t===void 0)return;const l=n.toLowerCase();let i,d=[];if(l.includes("x-www-form-urlencoded"))typeof t=="object"&&t!==null?(d=Object.entries(t).map(([s,p])=>({name:s,value:E(p)})),i=H(t)):i=String(t);else if(l.includes("multipart/form-data"))typeof t=="string"?(d=M(t)??[],i=t):(typeof t=="object"&&t!==null&&!Array.isArray(t)&&(d=Object.entries(t).map(([s,p])=>({name:s,value:E(p)}))),i=JSON.stringify(t,null,2));else if(K(l))if(typeof t=="string")i=t;else{const s=e.schemaId?r.resolveSchema(e.schemaId):void 0;i=String(Y(t,l,s,!0))}else l.includes("json")?i=typeof t=="string"?t:JSON.stringify(t,null,2):l.includes("xml")?i=typeof t=="string"?t:t&&typeof t=="object"?L(t):String(t):i=typeof t=="string"?t:JSON.stringify(t,null,2);return{mimeType:n,params:d,text:i}}function ue(e){try{const n=JSON.parse(e);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{}}export{Ie as buildCodeSampleHAR};
1
+ import $ from"url-template";import{SecurityVariablesEnvSuffix as g}from"@redocly/theme/core/openapi";import{mergeBodyValue as F}from"../../adapters/openapi/configure/merge-utils.js";import{formUrlEncodeValue as K,stringifyFormFieldValue as E}from"../../utils/form-urlencoded.js";import{isSequentialMediaType as H}from"../../utils/media-type.js";import{parseMultipartFormData as M}from"../../utils/multipart.js";import{objectToHarParams as J}from"../../utils/serialize-querystring.js";import{jsonToXml as L}from"../../utils/xml.js";import{MediaTypes as k}from"../../constants/openapi.js";import{convertSampleToString as Y}from"./convertSampleToString.js";import{findExampleIdByKey as Q,mediaTypeContainingKey as X}from"./example-key.js";import{resolveServerUrl as G}from"./normalize-servers.js";import{serverMatchesUrl as W}from"./server-variables.js";function Ie(e,n,a,r){const o=e.servers.find(f=>W(f,n.serverUrl))||e.servers[0],u=o?.url?.replace(/\/$/,"")??"",c=u?G(u).replace(/\/$/,""):"",t={};if(o?.variables)for(const[f,A]of Object.entries(o.variables))t[f]=n.environment?.[f]||A.default||"";const l=e.path.replace(/^\//,""),s=`${c}/${l}`,d={skipReadOnly:!0,maxDepth:a.generatedPayloadSamplesMaxDepth??8,format:"json"},i=o?.url??n.serverUrl??"",p=n.requestValues??{},m=Z(e.security,n.activeSecuritySchemeIds),y=ee(m,n,a,i),S=b(e.parameters.header,"header",i,p,a,r,d).concat(y.headers),h=n.mediaType||X(e.requestBody,n.exampleName,r.resolveExample)||(e.requestBody?Object.keys(e.requestBody)[0]:void 0);let R=!1;for(const f of S)f.name.toLowerCase()==="content-type"&&h&&(f.value=h,R=!0);!R&&h&&S.unshift({name:"Content-Type",value:h});const v=b(e.parameters.cookie,"cookie",i,p,a,r,d).concat(y.cookies),O=e.parameters.querystring.length>0,C=b(O?e.parameters.querystring:e.parameters.query,O?"querystring":"query",i,p,a,r,d).concat(y.queries),U={};for(const f of e.parameters.path)U[f.name]=p.path?.[f.name]||f.serverValues?.[i]?.example||f.example||"";let x;if(h&&e.requestBody?.[h]){const f=e.requestBody[h],A=e.requestValues?.serverBody?.[i]??e.requestValues?.body;x=le(f,h,n,r,d,i,A)}const w={};for(const f of S)w[f.name]=f.value;const I={};v.length&&(I.cookie=v.map(f=>`${encodeURIComponent(f.name)}=${encodeURIComponent(f.value)}`).join("; ")),Object.assign(I,w);const j={};for(const f of C)V(j,f.name,f.value);const B=x?.text?ue(x.text):void 0;let _;if(x?.params?.length){_={};for(const f of x.params)V(_,f.name,f.value??"")}const P=C.map(f=>`${encodeURIComponent(f.name)}=${encodeURIComponent(f.value)}`).join("&"),q=P?`${s}?${P}`:s;return{method:e.method.toUpperCase(),url:s,pathname:q,httpVersion:"HTTP/1.1",cookies:v,headers:S,queryString:C,postData:x,headersSize:-1,bodySize:-1,fullUrl:q,headersObj:w,allHeaders:I,queryObj:j,jsonObj:B,paramsObj:_,basicAuth:y.basicAuth,pathParameters:U,serverVariables:t,responseCodes:e.responseCodes,allResponseCodes:e.responseCodes,oAuth2PreRequests:y.oAuth2PreRequests}}function V(e,n,a){const r=e[n];r===void 0?e[n]=a:Array.isArray(r)?r.push(a):e[n]=[r,a]}function Z(e,n){if(e.length){if(n?.length){const a=e.find(r=>{const o=r.schemes.map(u=>u.id);return o.length===n.length&&o.every(u=>n.includes(u))});if(a)return a}return e[0]}}function ee(e,n,a,r){const o={headers:[],cookies:[],queries:[]};if(!e)return o;for(const u of e.schemes)ne(u,o,n,a,r,e.scopes);return o}const te={"x-defaultUsername":g.Username,"x-defaultPassword":g.Password,"x-defaultClientId":g.ClientId,"x-defaultClientSecret":g.ClientSecret};function ne(e,n,a,r,o,u=[]){const c=a.requestValues?.security,t=l=>{const s=e.serverValues?.[o];if(s){const y=s[l];if(y!=null)return String(y)}const d=e[l];if(d!=null&&typeof d=="string")return d;const i=c?.[l];if(i!=null)return String(i);const p=l==="x-defaultAccessToken"?e.type==="apiKey"?g.APIKey:g.Token:te[l],m=p!==void 0?a.environment?.[e.id+p]:void 0;if(m)return m};if(e.type==="http"&&e.scheme==="basic")n.basicAuth={username:t("x-defaultUsername")||c?.username||"<username>",password:t("x-defaultPassword")||c?.password||"<password>"};else if(e.type==="http"){const l=t("x-defaultAccessToken"),s=e.scheme||"bearer",d=s.charAt(0).toUpperCase()+s.slice(1),i=e.bearerFormat?`<YOUR_${e.bearerFormat}_HERE>`:"<YOUR_TOKEN_HERE>";n.headers.push({name:"Authorization",value:l?`${d} ${l}`:`${d} ${i}`})}else if(e.type==="apiKey"&&e.name){const l=t("x-defaultAccessToken")||"YOUR_API_KEY_HERE",s={name:e.name,value:l};e.in==="header"?n.headers.push(s):e.in==="cookie"?n.cookies.push({name:e.name,value:l}):(e.in==="query"||e.in==="querystring"||e.in===void 0)&&n.queries.push({name:e.name,value:l})}else if(e.type==="oauth2"){const l=t("x-defaultAccessToken"),s=t("x-defaultTokenType")||"Bearer";if(n.headers.push({name:"Authorization",value:l?`${s} ${l}`:"Bearer <YOUR_TOKEN_HERE>"}),r.withOAuth2Call&&e.flows){const d=[];if(e.flows.deviceAuthorization){const i=e.flows.deviceAuthorization;d.push(ae(i.deviceAuthorizationUrl,i.tokenUrl,e,o,u))}else if(e.flows.clientCredentials){const i=e.flows.clientCredentials;d.push(z("clientCredentials",i.tokenUrl,e,o,u))}else if(e.flows.password){const i=e.flows.password;d.push(z("password",i.tokenUrl,e,o,u))}d.length>0&&(n.oAuth2PreRequests=(n.oAuth2PreRequests??[]).concat(d))}}else if(e.type==="openIdConnect"){const l=t("x-defaultAccessToken"),s=t("x-defaultTokenType")||"Bearer";n.headers.push({name:"Authorization",value:l?`${s} ${l}`:"Bearer <YOUR_TOKEN_HERE>"})}}function ae(e,n,a,r,o=[]){const u=a.serverValues?.[r]?.["x-defaultClientId"]||a["x-defaultClientId"]||"YOUR_CLIENT_ID",c=[{name:"client_id",value:u}];return o.length>0&&c.push({name:"scope",value:o.join(" ")}),{flowType:"deviceAuthorization",tokenUrl:n,clientId:u,scopes:o.length>0?o:void 0,method:"POST",url:e,httpVersion:"HTTP/1.1",cookies:[],headers:[{name:"Content-Type",value:"application/x-www-form-urlencoded"},{name:"Accept",value:"application/json"}],queryString:[],postData:{mimeType:"application/x-www-form-urlencoded",params:c,text:c.map(t=>`${encodeURIComponent(t.name)}=${encodeURIComponent(t.value??"")}`).join("&")},headersSize:-1,bodySize:-1}}function z(e,n,a,r,o=[]){const u=a.serverValues?.[r]?.["x-defaultClientId"]||a["x-defaultClientId"]||"YOUR_CLIENT_ID",c=a.serverValues?.[r]?.["x-defaultClientSecret"]||a["x-defaultClientSecret"],t=a.serverValues?.[r]?.["x-defaultUsername"]||a["x-defaultUsername"],l=a.serverValues?.[r]?.["x-defaultPassword"]||a["x-defaultPassword"],s=[];return e==="clientCredentials"?s.push({name:"grant_type",value:"client_credentials"}):e==="password"&&s.push({name:"grant_type",value:"password"}),s.push({name:"client_id",value:u}),s.push({name:"client_secret",value:c||"YOUR_CLIENT_SECRET"}),e==="password"&&(s.push({name:"username",value:t||"<username>"}),s.push({name:"password",value:l||"<password>"})),o.length>0&&s.push({name:"scope",value:o.join(" ")}),{flowType:e,tokenUrl:n,clientId:u,clientSecret:c,username:t,password:l,scopes:o.length>0?o:void 0,method:"POST",url:n,httpVersion:"HTTP/1.1",cookies:[],headers:[{name:"Content-Type",value:"application/x-www-form-urlencoded"},{name:"Accept",value:"application/json"}],queryString:[],postData:{mimeType:"application/x-www-form-urlencoded",params:s,text:s.map(d=>`${encodeURIComponent(d.name)}=${encodeURIComponent(d.value??"")}`).join("&")},headersSize:-1,bodySize:-1}}function N(e,n,a){return n==="querystring"&&e.serializationMime===k.URL_ENCODED&&typeof a=="object"&&a!==null?re(J(a)):null}function re(e){const n=new Map,a=[];for(const r of e){const o=n.get(r.name);o?o.push(r.value):(n.set(r.name,[r.value]),a.push(r.name))}return a.map(r=>({name:r,value:(n.get(r)??[]).join(",")}))}function b(e,n,a,r,o,u,c){return e.filter(t=>!o.skipOptionalParameters||t.required).flatMap(t=>{const s=r[n==="querystring"?"query":n]?.[t.name];if(s!=null)return[{name:t.name,value:String(s)}];const d=t.serverValues?.[a]?.example;if(d!=null)return[{name:t.name,value:T(t,d)}];if(t.example!=null){const i=N(t,n,t.example);return i||(t.serializationMime&&u.serializeParameter?[{name:t.name,value:u.serializeParameter(t,t.example)}]:[{name:t.name,value:T(t,t.example)}])}if(n==="querystring"&&t.serializationMime===k.URL_ENCODED&&t.schemaId){const i=u.resolveSchema(t.schemaId);if(i){const p=u.sampleFromSchema(i,c),m=N(t,n,p);if(m)return m}}return[{name:t.name,value:oe(t,u,c)}]})}function oe(e,n,a){if(e.schemaId){const r=n.resolveSchema(e.schemaId);if(r){const o=n.sampleFromSchema(r,a);if(o!=null)return e.serializationMime&&n.serializeParameter?n.serializeParameter(e,o):T(e,o)}}return`{${e.name}}`}function ie(e){switch(e){case"query":case"querystring":case"cookie":return"form";case"path":case"header":return"simple";default:return"form"}}function T(e,n){if(n==null)return"";if(typeof n!="object")return String(n);const a=e.style??ie(e.in),o=e.explode??a==="form"?"*":"",u="__redoc_param_name__";try{switch(a){case"form":{const l=$.parse(`{?${u}${o}}`).expand({[u]:n}).substring(1).replace(/__redoc_param_name__/g,e.name).split(`&${e.name}=`);return l[0]=l[0].replace(new RegExp(`^${se(e.name)}=`),""),l.map(D).join(",")}case"spaceDelimited":return Array.isArray(n)?n.map(String).join(" "):String(n);case"pipeDelimited":return Array.isArray(n)?n.map(String).join("|"):String(n);case"simple":case"label":case"matrix":{const c=a==="label"?".":a==="matrix"?";":"",t=$.parse(`{${c}${u}${o}}`);return D(t.expand({[u]:n}).replace(/__redoc_param_name__/g,e.name))}case"deepObject":return JSON.stringify(n);default:return JSON.stringify(n)}}catch{return Array.isArray(n)?n.map(String).join(","):JSON.stringify(n)}}function se(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function D(e){try{return decodeURIComponent(e)}catch{return e}}function le(e,n,a,r,o,u,c){let t;if(a.replayBody!==void 0&&(t=a.replayBody),t===void 0&&a.exampleName){const i=Q(e.exampleIds,a.exampleName,r.resolveExample),p=i?r.resolveExample(i):void 0;p&&(t=p.value)}if(t===void 0&&e.exampleIds?.length){const i=r.resolveExample(e.exampleIds[0]);i&&(t=i.value)}if(t===void 0&&e.schemaId){const i=r.resolveVariantSchemaForSampling?.(e.schemaId),p=i?.schema??r.resolveSchema(e.schemaId),m=i?.variantSchemaId??e.schemaId;if(p){const y=n.toLowerCase().includes("xml");t=r.sampleFromSchema(p,{...o,format:y?"xml":o.format}),t&&typeof t=="object"&&!Array.isArray(t)&&m!==e.schemaId&&r.applyDiscriminatorValue?.(t,m,i?.mappingKey)}}if(c!==void 0&&a.replayBody===void 0&&(t===void 0?t=c:t=F(t,c)),t===void 0)return;const l=n.toLowerCase();let s,d=[];if(l.includes("x-www-form-urlencoded"))typeof t=="object"&&t!==null?(d=Object.entries(t).map(([i,p])=>({name:i,value:E(p)})),s=K(t)):s=String(t);else if(l.includes("multipart/form-data"))typeof t=="string"?(d=M(t)??[],s=t):(typeof t=="object"&&t!==null&&!Array.isArray(t)&&(d=Object.entries(t).map(([i,p])=>({name:i,value:E(p)}))),s=JSON.stringify(t,null,2));else if(H(l))if(typeof t=="string")s=t;else{const i=e.schemaId?r.resolveSchema(e.schemaId):void 0;s=String(Y(t,l,i,!0))}else l.includes("json")?s=typeof t=="string"?t:JSON.stringify(t,null,2):l.includes("xml")?s=typeof t=="string"?t:t&&typeof t=="object"?L(t):String(t):s=typeof t=="string"?t:JSON.stringify(t,null,2);return{mimeType:n,params:d,text:s}}function ue(e){try{const n=JSON.parse(e);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{}}export{Ie as buildCodeSampleHAR};
@@ -2,9 +2,11 @@ import type { SchemaEntry } from '../../types/store.js';
2
2
  export type EffectiveDiscriminator = {
3
3
  propertyName: string;
4
4
  mapping: Record<string, string>;
5
+ defaultMapping?: string;
6
+ variantsNode?: Record<string, unknown>;
5
7
  };
6
8
  export declare function findEffectiveDiscriminator(schemaData: Record<string, unknown> | undefined, schemaStore: Record<string, SchemaEntry>, visited?: Set<string>): EffectiveDiscriminator | undefined;
7
- export declare function applyDiscriminatorValue(sample: Record<string, unknown>, variantSchemaId: string, schemaStore: Record<string, SchemaEntry>): void;
9
+ export declare function applyDiscriminatorValue(sample: Record<string, unknown>, variantSchemaId: string, schemaStore: Record<string, SchemaEntry>, mappingKey?: string): void;
8
10
  export type SchemaVariantOption = {
9
11
  label: string;
10
12
  schemaId: string;
@@ -12,6 +14,11 @@ export type SchemaVariantOption = {
12
14
  isDefaultMapping?: boolean;
13
15
  isDeprecated?: boolean;
14
16
  };
17
+ export type HoistedVariant = {
18
+ schema: Record<string, unknown>;
19
+ variantSchemaId: string;
20
+ mappingKey?: string;
21
+ };
15
22
  export type SchemaVariantAxis = {
16
23
  kind: 'discriminator' | 'oneOf' | 'anyOf';
17
24
  stateKey: string;
@@ -25,15 +32,14 @@ export declare function findSchemaVariantAxis(schemaId: string, schemaStore: Rec
25
32
  }): SchemaVariantAxis | undefined;
26
33
  export declare function resolveActiveVariantIndex(axis: SchemaVariantAxis, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>): number;
27
34
  export declare function resolveActiveVariantSchemaId(schemaId: string, schemaStore: Record<string, SchemaEntry>, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>): string;
28
- export declare function hoistActiveVariantSchemaForSampling(schemaId: string, schemaStore: Record<string, SchemaEntry>, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>): {
29
- schema: Record<string, unknown>;
30
- variantSchemaId: string;
31
- } | undefined;
35
+ export declare function hoistActiveVariantSchemaForSampling(schemaId: string, schemaStore: Record<string, SchemaEntry>, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>): HoistedVariant | undefined;
32
36
  /**
33
- * Deep-collapse inline nested oneOf/anyOf to the active branch (default 0) so
34
- * generated samples follow the switcher and so null branches sample as `null`:
35
- * the sampler turns any surviving `oneOf: [{type: 'null'}]` wrapper into `{}`.
36
- * Returns a structural clone.
37
+ * Deep-collapse inline nested variant axes to the active option so generated
38
+ * samples follow the switcher: oneOf/anyOf collapse to the active branch
39
+ * (default 0) so null branches sample as `null`: the sampler turns any
40
+ * surviving `oneOf: [{type: 'null'}]` wrapper into `{}` — and inline
41
+ * discriminator hosts collapse to the active variant with its mapping key
42
+ * stamped. Returns a structural clone.
37
43
  */
38
- export declare function applyActiveVariantsToSchema(data: Record<string, unknown>, schemaStore: Record<string, SchemaEntry>, activeOneOf?: Record<string, number>, parentPath?: string[]): Record<string, unknown>;
44
+ export declare function applyActiveVariantsToSchema(data: Record<string, unknown>, schemaStore: Record<string, SchemaEntry>, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>, parentPath?: string[]): Record<string, unknown>;
39
45
  export declare function applyActiveVariantsToStore(schemaStore: Record<string, SchemaEntry>, activeDiscriminator?: Record<string, number>, activeOneOf?: Record<string, number>): Record<string, Record<string, unknown>>;
@@ -1 +1 @@
1
- import{buildVariantStateKey as L}from"../../jotai/itemStore.js";import{deriveVariantLabel as H}from"../schema/variant-label.js";function A(n){return n.discriminator}function O(n){return n.startsWith("#/")?n.slice(2):n}function m(n,e,i=new Set){if(!n)return;const r=A(n);if(r?.propertyName&&r.mapping)return{propertyName:r.propertyName,mapping:r.mapping};const t=n.allOf;if(Array.isArray(t))for(const o of t){if(!o||typeof o!="object")continue;const f=o;if(typeof f.$ref=="string"){const c=O(f.$ref);if(i.has(c))continue;i.add(c);const s=e[c];if(s){const a=m(s.data,e,i);if(a)return a}continue}const u=m(f,e,i);if(u)return u}}function nn(n,e,i){for(const r of Object.values(i)){const t=A(r.data);if(!(!t?.propertyName||!t.mapping)&&t.propertyName in n){if(t.defaultMapping&&O(t.defaultMapping)===e)return;for(const[o,f]of Object.entries(t.mapping))if(O(f)===e){n[t.propertyName]=o;return}}}}function $({oneOfList:n,oneOfOwner:e,extraSiblings:i,fallbackSchemaId:r,schemaStore:t,activeIdx:o=0}){const f=o>=0&&o<n.length?o:0,u=n[f],c=k(u,t);if(!c)return;const{oneOf:s,anyOf:a,...p}=e,d=[...i,p].filter(j),y=[...Array.isArray(c.allOf)?c.allOf:[],...d],{allOf:T,...x}=c,C=y.length?{...x,allOf:y}:{...x},v=F(u,t)??r;return{schema:C,variantSchemaId:v}}function j(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length>0}function k(n,e){if(!n||typeof n!="object")return;const i=n;if(typeof i.$ref!="string")return i;const r=O(i.$ref);return e[r]?.data}function F(n,e){if(!n||typeof n!="object")return;const i=n;if(typeof i.$ref!="string")return;const r=O(i.$ref);return e[r]?r:void 0}const W="One of:",P="Any of:",B="Default mapping";function N(n){return!!n?.deprecated}function z(n,e){if(!n||typeof n!="object")return{};const i=n;if(typeof i.$ref=="string"){const r=O(i.$ref),o={...e[r]?.data??{}};return o["x-original-ref"]=i.$ref,o}return i}function D(n,e,i,r){const t=Object.entries(e.mapping);if(t.length===0)return;const o=n.discriminator?.defaultMapping,f=[];for(const[u,c]of t){if(o&&c===o)continue;const s=O(c);f.push({label:u,schemaId:s,mappingKey:u,isDeprecated:N(i[s]?.data)})}if(o){const u=O(o);f.push({label:B,schemaId:u,isDefaultMapping:!0,isDeprecated:N(i[u]?.data)})}return{kind:"discriminator",stateKey:L(r,e.propertyName),options:f,localPart:e.propertyName,parentPath:r}}function g(n,e,i,r,t){if(!n.length)return;const o=t==="anyOf"?P:W,f=[],u=new Map;for(let c=0;c<n.length;c++){const s=n[c],a=z(s,i),{label:p}=H(a,e),d=(u.get(p)??0)+1;u.set(p,d);const l=d===1?p:`${p} (${d})`,y=F(s,i)??"";f.push({label:l,schemaId:y,isDeprecated:N(i[y]?.data??s)})}return{kind:t,stateKey:L(r,o),options:f,localPart:o,parentPath:r}}function _(n,e,i){const r=m(n,e);if(r){const t=D(n,r,e,i);if(t&&t.options.length>0)return t}if(Array.isArray(n.oneOf)&&n.oneOf.length>0){const t=g(n.oneOf,n,e,i,"oneOf");if(t&&t.options.length>0)return t}if(Array.isArray(n.anyOf)&&n.anyOf.length>0){const t=g(n.anyOf,n,e,i,"anyOf");if(t&&t.options.length>0)return t}}function I(n,e,i=new Map,r=new Set,t=[]){if(!n)return i;const o=(c,s=t)=>{if(!c||typeof c!="object")return;const a=c;if(typeof a.$ref=="string"){const d=O(a.$ref);if(r.has(d))return;r.add(d);const l=e[d]?.data;if(!l)return;const y=_(l,e,s);y&&y.options.length>1&&i.set(y.stateKey,y),I(l,e,i,r,s);return}const p=_(a,e,s);p&&p.options.length>1&&i.set(p.stateKey,p),I(a,e,i,r,s)},f=n.properties;if(f&&typeof f=="object")for(const[c,s]of Object.entries(f))o(s,[...t,c]);const u=t.length>0?[...t.slice(0,-1),`${t[t.length-1]}[]`]:t;o(n.items,u);for(const c of["oneOf","anyOf","allOf"]){const s=n[c];if(Array.isArray(s))for(const a of s)o(a,t)}return i}function G(n,e,{includeNested:i=!1}={}){const r=e[n];if(!r)return;const t=_(r.data,e,[]);if(t&&t.options.length>0)return t;if(!i)return;const o=I(r.data,e);if(o.size===1)return o.values().next().value}function b(n,e,i){const r=n.kind==="discriminator"?e:i;if(!r)return 0;const t=r[n.stateKey];if(t!==void 0&&t>=0&&t<n.options.length)return t;const o=Object.entries(r).filter(([f])=>f.endsWith(`/${n.stateKey}`)||f.includes("/")&&n.stateKey.endsWith(`/${f}`));if(o.length===1){const[,f]=o[0];if(f>=0&&f<n.options.length)return f}return 0}function M(n,e,i,r){const t=G(n,e);if(!t)return n;const o=b(t,i,r),f=t.options[o]??t.options[0];return f?.schemaId&&e[f.schemaId]?f.schemaId:n}function tn(n,e,i,r){const t=U(n,e,r);if(t)return t;const o=M(n,e,i,r);if(o!==n){const f=e[o];if(f)return{schema:f.data,variantSchemaId:o}}}function U(n,e,i){const r=e[n];if(!r||A(r.data))return;const t=r.data;if(Array.isArray(t.oneOf)&&t.oneOf.length>0){const o=g(t.oneOf,t,e,[],"oneOf"),f=o?b(o,void 0,i):0;return $({oneOfList:t.oneOf,oneOfOwner:t,extraSiblings:[],fallbackSchemaId:n,schemaStore:e,activeIdx:f})}if(Array.isArray(t.anyOf)&&t.anyOf.length>0){const o=g(t.anyOf,t,e,[],"anyOf"),f=o?b(o,void 0,i):0;return $({oneOfList:t.anyOf,oneOfOwner:t,extraSiblings:[],fallbackSchemaId:n,schemaStore:e,activeIdx:f})}if(Array.isArray(t.allOf)){let o,f,u="oneOf";const c=[];for(const p of t.allOf){const d=k(p,e)??p,l=Array.isArray(d.oneOf)?d.oneOf:Array.isArray(d.anyOf)?d.anyOf:void 0;!f&&l?.length&&!A(d)?(o=d,f=l,u=Array.isArray(d.oneOf)?"oneOf":"anyOf"):c.push(p)}if(!f||!o)return;const s=g(f,o,e,[],u),a=s?b(s,void 0,i):0;return $({oneOfList:f,oneOfOwner:o,extraSiblings:c,fallbackSchemaId:n,schemaStore:e,activeIdx:a})}}function X(n){return n.length===0?n:[...n.slice(0,-1),`${n[n.length-1]}[]`]}function Y(n,e,i,r=[]){const t=(o,f)=>{if(!o||typeof o!="object")return o;if(Array.isArray(o))return o.map(s=>t(s,f));const u=o;if(typeof u.$ref=="string")return u;if(!A(u))for(const s of["oneOf","anyOf"]){const a=u[s];if(!Array.isArray(a)||a.length===0)continue;const p=g(a,u,e,f,s),d=p?b(p,void 0,i):0,l=a[d]??a[0];if(!j(l))continue;const{oneOf:y,anyOf:T,...x}=u;return t({...x,...l},f)}const c={};for(const[s,a]of Object.entries(u))if(s==="properties"&&j(a)){const p={};for(const[d,l]of Object.entries(a))p[d]=t(l,[...f,d]);c[s]=p}else s==="items"?c[s]=t(a,X(f)):s==="allOf"||s==="oneOf"||s==="anyOf"?c[s]=t(a,f):c[s]=a;return c};return t(n,r)}function E(n,e){return n.type!==void 0||e.type===void 0?n:{...n,type:e.type}}function en(n,e,i){const r={};for(const[t,o]of Object.entries(n)){if(!o.data)continue;const f=A(o.data);if(f?.propertyName&&f.mapping){const c=M(t,n,e,i),s=n[c]?.data;if(s&&c!==t){const a=R(s,t,o.data);r[t]=E(q(a,f,c),o.data)}else r[t]=o.data;continue}let u=!1;for(const c of["oneOf","anyOf"]){const s=o.data[c];if(!Array.isArray(s))continue;const a=g(s,o.data,n,[],c);if(!a||a.options.length<=1)continue;const p=b(a,void 0,i),d=a.options[p]??a.options[0];if(!d?.schemaId||!n[d.schemaId])continue;const l=n[d.schemaId].data;r[t]=E(R(l,t,o.data),o.data),u=!0;break}u||(r[t]=o.data)}for(const[t,o]of Object.entries(r))r[t]=Y(o,n,i);return r}const K="#/";function q(n,e,i){const r=J(e,i);if(!r||!e.propertyName)return n;const t={properties:{[e.propertyName]:{enum:[r]}}};return Array.isArray(n.allOf)?{...n,allOf:[...n.allOf,t]}:{allOf:[n,t]}}function J(n,e){if(n.mapping&&!(n.defaultMapping&&O(n.defaultMapping)===e)){for(const[i,r]of Object.entries(n.mapping))if(O(r)===e)return i}}function Q(n){const e=new Set([`${K}${n}`]);return n.startsWith("components/schemas/")?e.add(`${K}${n.replace("components/schemas/","")}`):e.add(`${K}components/schemas/${n}`),Array.from(e)}function Z(n){const{discriminator:e,oneOf:i,anyOf:r,...t}=n;return t}function R(n,e,i){const r=Q(e);if(!V(n,r))return n;const t=Z(i);return w(n,r,t)}function V(n,e){if(!n||typeof n!="object")return!1;if(Array.isArray(n))return n.some(r=>V(r,e));const i=n;if(typeof i.$ref=="string"&&e.includes(i.$ref))return!0;for(const r of Object.values(i))if(V(r,e))return!0;return!1}function w(n,e,i){if(!n||typeof n!="object")return n;if(Array.isArray(n))return n.map(o=>w(o,e,i));const r=n;if(typeof r.$ref=="string"&&e.includes(r.$ref))return{...i};const t={};for(const[o,f]of Object.entries(r))t[o]=w(f,e,i);return t}export{Y as applyActiveVariantsToSchema,en as applyActiveVariantsToStore,nn as applyDiscriminatorValue,I as collectNestedVariantAxes,m as findEffectiveDiscriminator,G as findSchemaVariantAxis,tn as hoistActiveVariantSchemaForSampling,b as resolveActiveVariantIndex,M as resolveActiveVariantSchemaId};
1
+ import{buildVariantStateKey as j}from"../../jotai/itemStore.js";import{deriveVariantLabel as B}from"../schema/variant-label.js";function g(n){return n.discriminator}function O(n){return n.startsWith("#/")?n.slice(2):n}function _(n,r,o=new Set){if(!n)return;const i=g(n);if(i?.propertyName&&(i.mapping||n.oneOf||n.anyOf))return{propertyName:i.propertyName,mapping:i.mapping??{},...i.defaultMapping&&{defaultMapping:i.defaultMapping},...(Array.isArray(n.oneOf)||Array.isArray(n.anyOf))&&{variantsNode:n}};const t=n.allOf;if(Array.isArray(t))for(const e of t){if(!e||typeof e!="object")continue;const f=e;if(typeof f.$ref=="string"){const s=O(f.$ref);if(o.has(s))continue;o.add(s);const c=r[s];if(c){const p=_(c.data,r,o);if(p)return p}continue}const a=_(f,r,o);if(a)return a}}function tn(n,r,o,i){for(const t of Object.values(o)){const e=g(t.data);if(!(!e?.propertyName||!e.mapping)&&e.propertyName in n){if(i!==void 0){const f=e.mapping[i];if(f&&O(f)===r){n[e.propertyName]=i;return}continue}if(e.defaultMapping&&O(e.defaultMapping)===r)return;for(const[f,a]of Object.entries(e.mapping))if(O(a)===r){n[e.propertyName]=f;return}}}}function K({oneOfList:n,oneOfOwner:r,extraSiblings:o,fallbackSchemaId:i,schemaStore:t,activeIdx:e=0}){const f=e>=0&&e<n.length?e:0,a=n[f],s=M(a,t);if(!s)return;const{oneOf:c,anyOf:p,...d}=r,u=[...o,d].filter(V),y=[...Array.isArray(s.allOf)?s.allOf:[],...u],{allOf:m,...I}=s,E=y.length?{...I,allOf:y}:{...I},N=R(a,t)??i;return{schema:E,variantSchemaId:N}}function V(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length>0}function M(n,r){if(!n||typeof n!="object")return;const o=n;if(typeof o.$ref!="string")return o;const i=O(o.$ref);return r[i]?.data}function R(n,r){if(!n||typeof n!="object")return;const o=n;if(typeof o.$ref!="string")return;const i=O(o.$ref);return r[i]?i:void 0}const P="One of:",z="Any of:",G="Default mapping";function v(n){return!!n?.deprecated}function U(n,r){if(!n||typeof n!="object")return{};const o=n;if(typeof o.$ref=="string"){const i=r[O(o.$ref)];if(!i)return{};const t={...i.data};return t["x-original-ref"]=o.$ref,t}return o}function T(n,r){const o=O(n),i=r[o];return i?{schemaId:o,entry:i}:void 0}function X(n,r,o){const i=Object.entries(n.mapping);if(i.length===0)return;const t=n.defaultMapping,e=[];for(const[a,s]of i){const c=T(s,r);c&&e.push({label:a,schemaId:c.schemaId,mappingKey:a,isDeprecated:v(c.entry.data)})}const f=t?T(t,r):void 0;if(t&&f){const a=t.split("/").pop(),s=e.findIndex(c=>c.label===a);s!==-1&&e.splice(s,1),e.push({label:G,schemaId:f.schemaId,isDefaultMapping:!0,isDeprecated:v(f.entry.data)})}return{kind:"discriminator",stateKey:j(o,n.propertyName),options:e,localPart:n.propertyName,parentPath:o}}function A(n,r,o,i,t){if(!n.length)return;const e=t==="anyOf"?z:P,f=[],a=new Map;for(let s=0;s<n.length;s++){const c=n[s],p=U(c,o),{label:d}=B(p,r),u=(a.get(d)??0)+1;a.set(d,u);const l=u===1?d:`${d} (${u})`,y=R(c,o)??"";f.push({label:l,schemaId:y,isDeprecated:v(o[y]?.data??c)})}return{kind:t,stateKey:j(i,e),options:f,localPart:e,parentPath:i}}function x(n,r,o){const i=_(n,r);if(i){const t=X(i,r,o);if(t&&t.options.length>0)return t;const e=i.variantsNode??n;for(const f of["oneOf","anyOf"]){const a=e[f];if(!Array.isArray(a)||a.length===0)continue;const s=A(a,e,r,o,f);if(s&&s.options.length>0)return{...s,kind:"discriminator",localPart:i.propertyName,stateKey:j(o,i.propertyName)}}}if(Array.isArray(n.oneOf)&&n.oneOf.length>0){const t=A(n.oneOf,n,r,o,"oneOf");if(t&&t.options.length>0)return t}if(Array.isArray(n.anyOf)&&n.anyOf.length>0){const t=A(n.anyOf,n,r,o,"anyOf");if(t&&t.options.length>0)return t}}function k(n,r,o=new Map,i=new Set,t=[]){if(!n)return o;const e=(s,c=t)=>{if(!s||typeof s!="object")return;const p=s;if(typeof p.$ref=="string"){const u=O(p.$ref);if(i.has(u))return;i.add(u);const l=r[u]?.data;if(!l)return;const y=x(l,r,c);y&&y.options.length>1&&o.set(y.stateKey,y),k(l,r,o,i,c);return}const d=x(p,r,c);d&&d.options.length>1&&o.set(d.stateKey,d),k(p,r,o,i,c)},f=n.properties;if(f&&typeof f=="object")for(const[s,c]of Object.entries(f))e(c,[...t,s]);const a=t.length>0?[...t.slice(0,-1),`${t[t.length-1]}[]`]:t;e(n.items,a);for(const s of["oneOf","anyOf","allOf"]){const c=n[s];if(Array.isArray(c))for(const p of c)e(p,t)}return o}function Y(n,r,{includeNested:o=!1}={}){const i=r[n];if(!i)return;const t=x(i.data,r,[]);if(t&&t.options.length>0)return t;if(!o)return;const e=k(i.data,r);if(e.size===1)return e.values().next().value}function b(n,r,o){const i=n.kind==="discriminator"?r:o;if(!i)return 0;const t=i[n.stateKey];if(t!==void 0&&t>=0&&t<n.options.length)return t;const e=Object.entries(i).filter(([f])=>f.endsWith(`/${n.stateKey}`)||f.includes("/")&&n.stateKey.endsWith(`/${f}`));if(e.length===1){const[,f]=e[0];if(f>=0&&f<n.options.length)return f}return 0}function w(n,r,o,i){const t=Y(n,r);if(!t)return;const e=b(t,o,i),f=t.options[e]??t.options[0];if(!(!f?.schemaId||!r[f.schemaId]))return f}function en(n,r,o,i){return w(n,r,o,i)?.schemaId??n}function rn(n,r,o,i){const t=q(n,r,i);if(t)return t;const e=w(n,r,o,i);if(!e||e.schemaId===n)return;const f=r[e.schemaId];if(f)return{schema:f.data,variantSchemaId:e.schemaId,mappingKey:e.mappingKey}}function q(n,r,o){const i=r[n];if(!i||g(i.data))return;const t=i.data;if(Array.isArray(t.oneOf)&&t.oneOf.length>0){const e=A(t.oneOf,t,r,[],"oneOf"),f=e?b(e,void 0,o):0;return K({oneOfList:t.oneOf,oneOfOwner:t,extraSiblings:[],fallbackSchemaId:n,schemaStore:r,activeIdx:f})}if(Array.isArray(t.anyOf)&&t.anyOf.length>0){const e=A(t.anyOf,t,r,[],"anyOf"),f=e?b(e,void 0,o):0;return K({oneOfList:t.anyOf,oneOfOwner:t,extraSiblings:[],fallbackSchemaId:n,schemaStore:r,activeIdx:f})}if(Array.isArray(t.allOf)){let e,f,a="oneOf";const s=[];for(const d of t.allOf){const u=M(d,r)??d,l=Array.isArray(u.oneOf)?u.oneOf:Array.isArray(u.anyOf)?u.anyOf:void 0;!f&&l?.length&&!g(u)?(e=u,f=l,a=Array.isArray(u.oneOf)?"oneOf":"anyOf"):s.push(d)}if(!f||!e)return;const c=A(f,e,r,[],a),p=c?b(c,void 0,o):0;return K({oneOfList:f,oneOfOwner:e,extraSiblings:s,fallbackSchemaId:n,schemaStore:r,activeIdx:p})}}function J(n){return n.length===0?n:[...n.slice(0,-1),`${n[n.length-1]}[]`]}function Q(n,r,o,i,t){const e=g(n);if(!e?.propertyName)return;const f=x(n,r,o);if(!f)return;const a=b(f,i,t),s=f.options[a]??f.options[0];if(!s?.schemaId||!r[s.schemaId])return;const{oneOf:c,anyOf:p,discriminator:d,...u}=n,l={allOf:[{$ref:`${$}${s.schemaId}`}]};return{...u,...H(l,e.propertyName,s.mappingKey)}}function Z(n,r,o,i,t=[]){const e=(f,a,s=!1)=>{if(!f||typeof f!="object")return f;if(Array.isArray(f))return f.map(d=>e(d,a));const c=f;if(typeof c.$ref=="string")return c;if(!s){const d=Q(c,r,a,o,i);if(d)return e(d,a)}if(!g(c))for(const d of["oneOf","anyOf"]){const u=c[d];if(!Array.isArray(u)||u.length===0)continue;const l=A(u,c,r,a,d),y=l?b(l,void 0,i):0,m=u[y]??u[0];if(!V(m))continue;const{oneOf:I,anyOf:E,...N}=c;return e({...N,...m},a)}const p={};for(const[d,u]of Object.entries(c))if(d==="properties"&&V(u)){const l={};for(const[y,m]of Object.entries(u))l[y]=e(m,[...a,y]);p[d]=l}else d==="items"?p[d]=e(u,J(a)):d==="allOf"||d==="oneOf"||d==="anyOf"?p[d]=e(u,a):p[d]=u;return p};return e(n,t,!0)}function C(n,r){return n.type!==void 0||r.type===void 0?n:{...n,type:r.type}}function on(n,r,o){const i={};for(const[t,e]of Object.entries(n)){if(!e.data)continue;const f=g(e.data);if(f?.propertyName&&(f.mapping||Array.isArray(e.data.oneOf)||Array.isArray(e.data.anyOf))){const s=w(t,n,r,o),c=s&&s.schemaId!==t?n[s.schemaId]?.data:void 0;if(c){const p=W(c,t,e.data);i[t]=C(H(p,f.propertyName,s?.mappingKey),e.data)}else i[t]=e.data;continue}let a=!1;for(const s of["oneOf","anyOf"]){const c=e.data[s];if(!Array.isArray(c))continue;const p=A(c,e.data,n,[],s);if(!p||p.options.length<=1)continue;const d=b(p,void 0,o),u=p.options[d]??p.options[0];if(!u?.schemaId||!n[u.schemaId])continue;const l=n[u.schemaId].data;i[t]=C(W(l,t,e.data),e.data),a=!0;break}a||(i[t]=e.data)}for(const[t,e]of Object.entries(i))i[t]=Z(e,n,r,o);return i}const $="#/";function H(n,r,o){if(!o)return n;const i={properties:{[r]:{enum:[o]}}};return Array.isArray(n.allOf)?{...n,allOf:[...n.allOf,i]}:{allOf:[n,i]}}function D(n){const r=new Set([`${$}${n}`]);return n.startsWith("components/schemas/")?r.add(`${$}${n.replace("components/schemas/","")}`):r.add(`${$}components/schemas/${n}`),Array.from(r)}function h(n){const{discriminator:r,oneOf:o,anyOf:i,...t}=n;return t}function W(n,r,o){const i=D(r);if(!L(n,i))return n;const t=h(o);return F(n,i,t)}function L(n,r){if(!n||typeof n!="object")return!1;if(Array.isArray(n))return n.some(i=>L(i,r));const o=n;if(typeof o.$ref=="string"&&r.includes(o.$ref))return!0;for(const i of Object.values(o))if(L(i,r))return!0;return!1}function F(n,r,o){if(!n||typeof n!="object")return n;if(Array.isArray(n))return n.map(e=>F(e,r,o));const i=n;if(typeof i.$ref=="string"&&r.includes(i.$ref))return{...o};const t={};for(const[e,f]of Object.entries(i))t[e]=F(f,r,o);return t}export{Z as applyActiveVariantsToSchema,on as applyActiveVariantsToStore,tn as applyDiscriminatorValue,k as collectNestedVariantAxes,_ as findEffectiveDiscriminator,Y as findSchemaVariantAxis,rn as hoistActiveVariantSchemaForSampling,b as resolveActiveVariantIndex,en as resolveActiveVariantSchemaId};
@@ -0,0 +1,4 @@
1
+ /** Which configured languages are offered in the code-sample panel. The community edition keeps only payload and x-codeSamples languages. */
2
+ export declare function filterAvailableLanguages<L extends {
3
+ key: string;
4
+ }>(languages: L[], _definitionSampleKeys: Set<string>): L[];
@@ -0,0 +1 @@
1
+ function n(e,i){return e}export{n as filterAvailableLanguages};
@@ -1,3 +1,3 @@
1
- import type { OpenAPIServer } from '../../../types/openapi.js';
1
+ import type { OpenAPIServer } from '../../types/openapi.js';
2
2
  export declare function resolveServerUrl(url: string, specUrl?: string): string;
3
3
  export declare function normalizeServers(specUrl: string | undefined, servers: OpenAPIServer[]): OpenAPIServer[];
@@ -0,0 +1 @@
1
+ import{isAbsoluteUrl as l,removeQueryStringAndHash as o,resolveUrl as s}from"../../adapters/openapi/utils/helpers.js";import{getUrlDirname as i}from"../../adapters/openapi/utils/url.js";import{IS_BROWSER as u}from"../../utils/environments.js";function f(e){const t=o(e);if(!t||t.endsWith("/"))return t;const r=t.lastIndexOf("/");return r===-1?"":t.slice(0,r)}function a(e){return e===void 0?o((()=>{if(!u)return globalThis.SSR_HOSTNAME||"";const r=window.location.href;return r.endsWith(".html")&&i(r)||r})()):l(e)?i(e):f(e)}function m(e,t){const r=a(t);return r?s(r,e):e}function S(e,t){let r=t;return r.length===0&&(r=[{url:"/"}]),r.map(n=>({...n,url:m(n.url,e),description:n.description||""}))}export{S as normalizeServers,m as resolveServerUrl};
@@ -1 +1 @@
1
- import{createStoreContext as S,toRecord as b}from"../../../adapters/helpers.js";import{populateOpenApiStore as O}from"../../../adapters/openapi/store.js";import{buildCodeSampleSource as $}from"../../../adapters/openapi/build-code-sample-source.js";function q(e,t){if(!e.length&&!t?.length||!e.length)return t;if(!t?.length)return e;const r=new Set(t.map(a=>{const n=a;return`${n.in}:${n.name}`})),u=[...t];for(const a of e){const n=a,o=`${n.in}:${n.name}`;r.has(o)||u.push(a)}return u}let m=null;function v(e,t){if(m?.doc===e)return m.ctx;const r=S(b(e));return O(e,r,t),m={doc:e,ctx:r},r}function K(e,t,r,u,a){const n=r.paths;if(!n||typeof n!="object")return;const o=n[e];if(!o||typeof o!="object")return;const c=t.toLowerCase(),d=o;let p=c,s=d[c],f=!1;if(!s&&c==="query"&&d["x-query"]&&(s=d["x-query"],p="x-query"),!s&&c!=="query"&&o.additionalOperations){const l=o.additionalOperations,y=t in l?t:Object.keys(l).find(C=>C.toLowerCase()===c);y&&(s=l[y],p=y,f=!0)}if(!s||typeof s!="object")return;const i=s,x=o.parameters??[],h={pointer:f?`/paths/${e}/additionalOperations/${p}`:`/paths/${e}/${p}`,pathName:e,httpVerb:t.toUpperCase(),operationId:i.operationId,summary:typeof i.summary=="string"?i.summary:void 0,isWebhook:!1,isAdditionalOperation:f,tags:[],parameters:q(x,i.parameters),requestBody:i.requestBody,servers:i.servers??o.servers,security:i.security},g=v(r,u);return a?.(h,g,r),$(h,g,u,u.ignoreNamedSchemas)}export{K as buildCodeSampleSourceFromDocument};
1
+ import{createStoreContext as S,toRecord as b}from"../../../adapters/helpers.js";import{populateOpenApiStore as O}from"../../../adapters/openapi/store.js";import{buildCodeSampleSource as $}from"../../../adapters/openapi/build-code-sample-source.js";function q(e,t){if(!e.length&&!t?.length||!e.length)return t;if(!t?.length)return e;const r=new Set(t.map(a=>{const n=a;return`${n.in}:${n.name}`})),u=[...t];for(const a of e){const n=a,o=`${n.in}:${n.name}`;r.has(o)||u.push(a)}return u}let m=null;function v(e,t){if(m?.doc===e)return m.ctx;const r=S(b(e));return O(e,r,t),m={doc:e,ctx:r},r}function K(e,t,r,u,a){const n=r.paths;if(!n||typeof n!="object")return;const o=n[e];if(!o||typeof o!="object")return;const d=t.toLowerCase(),f=o;let c=d,i=f[d],p=!1;if(!i&&d==="query"&&f["x-query"]&&(i=f["x-query"],c="x-query"),!i&&d!=="query"&&o.additionalOperations){const l=o.additionalOperations,y=t in l?t:Object.keys(l).find(C=>C.toLowerCase()===d);y&&(i=l[y],c=y,p=!0)}if(!i||typeof i!="object")return;const s=i,x=o.parameters??[],h={pointer:p?`/paths/${e}/additionalOperations/${c}`:`/paths/${e}/${c}`,pathName:e,httpVerb:t.toUpperCase(),operationId:s.operationId,summary:typeof s.summary=="string"?s.summary:void 0,isWebhook:!1,isAdditionalOperation:p,tags:[],parameters:q(x,s.parameters),requestBody:s.requestBody,servers:s.servers??o.servers,security:s.security},g=v(r,u);return a?.(h,g,r),$(h,g,u.ignoreNamedSchemas,void 0,void 0,u)}export{K as buildCodeSampleSourceFromDocument};
@@ -1,4 +1,3 @@
1
- import type { OpenAPIDefinition, OpenAPIServer } from '../../../types/openapi.js';
1
+ import type { OpenAPIDefinition } from '../../../types/openapi.js';
2
2
  import type { MockServerOptions } from '../../../adapters/openapi/utils/merge-mock-server.js';
3
- export declare function buildServerEnvValues(servers: OpenAPIServer[]): Record<string, Record<string, string>>;
4
3
  export declare function buildReplayPredefinedEnvValues(definition: OpenAPIDefinition, mockServer: MockServerOptions): Record<string, Record<string, string>>;
@@ -1 +1 @@
1
- import{mergeInMockServer as i}from"../../../adapters/openapi/utils/merge-mock-server.js";import{normalizeServers as m}from"./normalize-servers.js";import{getServerEnvName as l}from"../../../utils/environments.js";function f(r){const t=m(void 0,r);return Object.fromEntries(t.map(e=>[String(l(e)),{server:e.url,...Object.fromEntries(Object.entries(e.variables??{}).map(([n,o])=>[n,o.default||""]))}]))}function p(r,t){const e=i((r.servers??[]).filter(n=>typeof n?.url=="string"),t);return f(e)}export{p as buildReplayPredefinedEnvValues,f as buildServerEnvValues};
1
+ import{mergeInMockServer as t}from"../../../adapters/openapi/utils/merge-mock-server.js";import{buildServerEnvValues as i}from"../server-env.js";function f(e,r){const n=t((e.servers??[]).filter(o=>typeof o?.url=="string"),r);return i(n)}export{f as buildReplayPredefinedEnvValues};
@@ -1 +1 @@
1
- import*as p from"openapi-sampler";import{serializeParameterValue as l}from"../../utils/serialize-parameter.js";import{applyActiveVariantsToSchema as c,applyActiveVariantsToStore as u,applyDiscriminatorValue as y,hoistActiveVariantSchemaForSampling as d}from"./discriminator.js";function f(t,m,i){const o=u(t,m,i),n={};for(const[a,r]of Object.entries(o)){const e=a.startsWith("components/schemas/")?a.replace("components/schemas/",""):a;n[e]=r}return{openapi:"3.0.0",info:{title:"",version:""},paths:{},components:{schemas:n}}}function k(t,m,i,o,n){const a=f(t,o,n);return{resolveSchema(r){return t[r]?.data},resolveExample(r){const e=m[r];if(e)return{value:e.value,summary:e.summary,key:e.key}},sampleFromSchema(r,e){try{return p.sample(r,{skipReadOnly:e.skipReadOnly,skipWriteOnly:e.skipWriteOnly,quiet:!0,skipNonRequired:i.onlyRequiredInSamples,maxSampleDepth:e.maxDepth??i.generatedSamplesMaxDepth,...e.format==="xml"&&{format:"xml"}},a)}catch{return}},serializeParameter(r,e){return typeof e!="object"||e===null?String(e??""):l({name:r.name,in:r.in},e)},resolveVariantSchemaForSampling(r){const e=d(r,t,o,n),s=e?.schema??t[r]?.data;if(s)return{schema:c(s,t,n),variantSchemaId:e?.variantSchemaId??r}},applyDiscriminatorValue(r,e){!r||typeof r!="object"||Array.isArray(r)||y(r,e,t)}}}export{f as buildOpenApiStubForSampler,k as createCodeSampleResolvers};
1
+ import*as s from"openapi-sampler";import{serializeParameterValue as l}from"../../utils/serialize-parameter.js";import{applyActiveVariantsToSchema as u,applyActiveVariantsToStore as c,applyDiscriminatorValue as y,hoistActiveVariantSchemaForSampling as d}from"./discriminator.js";function f(n,p,o){const a=c(n,p,o),t={};for(const[i,r]of Object.entries(a)){const e=i.startsWith("components/schemas/")?i.replace("components/schemas/",""):i;t[e]=r}return{openapi:"3.0.0",info:{title:"",version:""},paths:{},components:{schemas:t}}}function k(n,p,o,a,t){const i=f(n,a,t);return{resolveSchema(r){return n[r]?.data},resolveExample(r){const e=p[r];if(e)return{value:e.value,summary:e.summary,key:e.key}},sampleFromSchema(r,e){try{return s.sample(r,{skipReadOnly:e.skipReadOnly,skipWriteOnly:e.skipWriteOnly,quiet:!0,skipNonRequired:o.onlyRequiredInSamples,maxSampleDepth:e.maxDepth??o.generatedSamplesMaxDepth,...e.format==="xml"&&{format:"xml"}},i)}catch{return}},serializeParameter(r,e){return typeof e!="object"||e===null?String(e??""):l({name:r.name,in:r.in},e)},resolveVariantSchemaForSampling(r){const e=d(r,n,a,t),m=e?.schema??n[r]?.data;if(m)return{schema:u(m,n,a,t),variantSchemaId:e?.variantSchemaId??r,mappingKey:e?.mappingKey}},applyDiscriminatorValue(r,e,m){!r||typeof r!="object"||Array.isArray(r)||y(r,e,n,m)}}}export{f as buildOpenApiStubForSampler,k as createCodeSampleResolvers};
@@ -0,0 +1,3 @@
1
+ import type { OpenAPIServer } from '../../types/openapi.js';
2
+ /** Seeds one environment per global server so a saved environment name can resolve to a server in a fresh session. */
3
+ export declare function buildServerEnvValues(servers: OpenAPIServer[]): Record<string, Record<string, string>>;
@@ -0,0 +1 @@
1
+ import{normalizeServers as o}from"./normalize-servers.js";import{getServerEnvName as m}from"../../utils/environments.js";function f(r){const t=o(void 0,r);return Object.fromEntries(t.map(e=>[String(m(e)),{server:e.url,...Object.fromEntries(Object.entries(e.variables??{}).map(([n,i])=>[n,i.default||""]))}]))}export{f as buildServerEnvValues};
@@ -96,11 +96,11 @@ export type CodeSampleSource = {
96
96
  /** Raw pointer into the spec (for deep linking) */
97
97
  pointer?: string;
98
98
  /** Docs route slug of the operation page, relative to the routing base path
99
- * (e.g. `operations/getmuseumhours`) — used by Replay "View in description" */
99
+ * (e.g. `operations/getmuseumhours`) — lets hosts link back to the description */
100
100
  href?: string;
101
- /** OpenAPI `operationId` — should match the loaded spec so Replay `onRequestChange` can resolve steps */
101
+ /** OpenAPI `operationId` — should match the loaded spec so hosts can resolve the operation */
102
102
  openApiOperationId?: string;
103
- /** OpenAPI operation `summary` — used as the human-readable operation name in Replay (Try It) */
103
+ /** OpenAPI operation `summary` — the human-readable operation name */
104
104
  summary?: string;
105
105
  /** OpenAPI `security` array (AND-groups) for multi-scheme UI selection */
106
106
  securityGroups?: Array<Record<string, string[]>>;
@@ -1,2 +1,2 @@
1
1
  import*as B from"openapi-sampler";import{createStoreContext as I,resolveContent as C,resolveRef as h,toRecord as u}from"../../adapters/helpers.js";import{populateOpenApiStore as M}from"../../adapters/openapi/store.js";import{buildCodeSampleSource as N}from"../../adapters/openapi/build-code-sample-source.js";import{resolveOpenApiExampleValue as w}from"../../adapters/openapi/resolve-openapi-example-value.js";import{JsonPointer as b}from"../../adapters/openapi/utils/JsonPointer.js";import{createCodeSampleResolvers as A}from"../code-samples/resolvers.js";import{buildCodeSampleHAR as P}from"../code-samples/builder.js";import{tryGenerateCodeSample as T}from"../code-samples/generators/index.js";import{convertSampleToString as E}from"../code-samples/convertSampleToString.js";import{encodeExampleForMediaType as K,isSampleableMediaType as D,isSequentialMediaType as V,langFromMime as W}from"../../utils/media-type.js";import{getGeneratorKey as $,getLangKey as g}from"../../utils/languages.js";import{getServerEnvName as q}from"../../utils/environments.js";import{isOperationName as R}from"../../utils/http-methods.js";import{isStatusCode as F}from"../../utils/status-code.js";let v=null;function G(t,e){const n=e.ignoreNamedSchemas,o=n?[...n].sort().join(`
2
- `):"";if(v?.doc===t&&v.optionsKey===o)return v.ctx;const r=I(u(t));return M(t,r,e),v={doc:t,optionsKey:o,ctx:r},r}function L(t,e){const n=t.paths;if(!(!n||typeof n!="object")){for(const[o,r]of Object.entries(n))if(!(!r||typeof r!="object"))for(const[s,i]of Object.entries(r)){if(!R(s)||!i||typeof i!="object")continue;const a=i;if(a.operationId===e)return{pathName:o,method:s,operation:a,pointer:b.compile(["paths",o,s])}}}}function U(t,e){const n=b.parse(e),o=n.indexOf("paths"),r=o>=0?n[o+1]:void 0,s=o>=0?n[o+2]:void 0;if(!r||!s||!R(s))return;const a=t.paths?.[r]?.[s];if(!(!a||typeof a!="object"))return{pathName:r,method:s,operation:a,pointer:b.compile(["paths",r,s])}}function H(t,{operationId:e,pointer:n}){if(e)return L(t,e);if(n)return U(t,n)}function ue(t,e,n){const o=H(t,n);if(!o)return;const{pathName:r,method:s,operation:i,pointer:a}=o,p=t.paths?.[r]??{},l={pointer:a,pathName:r,httpVerb:s.toUpperCase(),operationId:i.operationId,summary:typeof i.summary=="string"?i.summary:void 0,isWebhook:!1,isAdditionalOperation:!1,tags:i.tags??[],parameters:J(t,p.parameters,i.parameters),requestBody:i.requestBody,responses:i.responses,servers:i.servers??p.servers??t.servers,security:i.security},m=G(t,e),d=N(l,m,e,e.ignoreNamedSchemas),O=i["x-codeSamples"];O?.length&&(d.definitionSamples=O.map(({lang:S,label:c,source:f})=>({lang:S,label:c,source:f})));const y=A(m.schemaStore,m.exampleStore,e);return{doc:t,options:e,operation:i,pathName:r,method:s,source:d,storeCtx:m,resolvers:y}}function J(t,e,n){if(!e?.length)return n;if(!n?.length)return e;const o=u(t),r=a=>{const p=h(o,a)??a;return`${p.in}:${p.name}`},s=new Set(n.map(r));return[...e.filter(a=>!s.has(r(a))),...n]}function z(t,{environment:e,environments:n}){let o=t;if(e){const r=o.filter(s=>String(q(s))===e||s.url===e);o=r.length?r:o}return n&&(o=o.map(r=>{const s=n[String(q(r))]?.server;return s?{...r,url:s}:r})),o}function le(t,e={}){const{source:n,options:o}=t,r=o.codeSamples?.languages??[],s=new Map(r.map((c,f)=>[c.key,f])),i=z(n.servers,e),a=e.environment&&e.environments?.[e.environment]||{},p=(n.definitionSamples??[]).filter(c=>s.has(g(c))&&typeof c.source=="string"),l=new Set(p.map(g)),m={serverUrl:i[0]?.url??a.server,mediaType:e.mimeType,exampleName:e.exampleKey,environment:a,requestValues:e.parameters,replayBody:e.requestBody},d={skipOptionalParameters:o.codeSamples?.skipOptionalParameters,withOAuth2Call:o.codeSamples?.withOAuth2Call,generatedPayloadSamplesMaxDepth:o.generatedSamplesMaxDepth},y=n.operationType==="webhook"?void 0:P({...n,servers:i},m,d,t.resolvers),S=[];if(y)for(const c of r){const f=$(c);if(f==="payload"||l.has(c.key))continue;const x=T(f,y,c.options),k=x.kind==="ok"?x.source:x.kind==="unsupported-language"?"Language is not supported.":"Failed to generate code sample.";k&&S.push({lang:c.lang,label:c.label,source:k})}return[...p,...S].filter(c=>!!c.source).sort((c,f)=>(s.get(g(c))??9999)-(s.get(g(f))??9999))}function Q(t,e,n){if(e.examples&&typeof e.examples=="object"){const o=Object.keys(e.examples);if(o.length){const r=o.length===1?o[0]:n&&o.includes(n)?n:o[0],s=h(u(t),e.examples[r])??e.examples[r],i=w(s);if(i!==void 0)return i}}if(e.example!==void 0)return e.example}function X(t,e,n,o){const r=e.schema??e.itemSchema;if(!r)return;const s=h(u(t),r)??r;try{return B.sample(s,{skipReadOnly:o==="request",skipWriteOnly:o==="response",quiet:!0,skipNonRequired:n.onlyRequiredInSamples,maxSampleDepth:n.generatedSamplesMaxDepth},u(t))}catch{return}}function j(t,e,n,o,r,s){const i=[];if(!e)return i;for(const[a,p]of Object.entries(e)){if(!p||typeof p!="object"||s&&a!==s)continue;let l=Q(t.doc,p,n);const m=l===void 0&&D(a);if(m&&(l=X(t.doc,p,t.options,r)),l===void 0)continue;const d=E(l,a,p.schema??p.itemSchema,m&&V(a));d!==void 0&&i.push({lang:W(a),title:`${o} ${a}`,source:K(d,a,p.encoding)})}return i}function fe(t,{exampleKey:e,mimeType:n,titlePrefix:o="Payload"}={}){const r=h(u(t.doc),t.operation.requestBody)??t.operation.requestBody,s=C(u(t.doc),r);return j(t,s,e,o,"request",n)}function de(t,{exampleKey:e}={}){const n=t.operation.responses;if(!n||typeof n!="object")return[];const o=[];for(const[r,s]of Object.entries(n)){if(!F(r))continue;const i=h(u(t.doc),s)??s,a=C(u(t.doc),i);o.push(...j(t,a,e,r,"response"))}return o}export{le as buildCodeSamples,fe as getRequestBodySamples,de as getResponseSamples,ue as resolveOperationSampleContext};
2
+ `):"";if(v?.doc===t&&v.optionsKey===o)return v.ctx;const r=I(u(t));return M(t,r,e),v={doc:t,optionsKey:o,ctx:r},r}function L(t,e){const n=t.paths;if(!(!n||typeof n!="object")){for(const[o,r]of Object.entries(n))if(!(!r||typeof r!="object"))for(const[s,i]of Object.entries(r)){if(!R(s)||!i||typeof i!="object")continue;const a=i;if(a.operationId===e)return{pathName:o,method:s,operation:a,pointer:b.compile(["paths",o,s])}}}}function U(t,e){const n=b.parse(e),o=n.indexOf("paths"),r=o>=0?n[o+1]:void 0,s=o>=0?n[o+2]:void 0;if(!r||!s||!R(s))return;const a=t.paths?.[r]?.[s];if(!(!a||typeof a!="object"))return{pathName:r,method:s,operation:a,pointer:b.compile(["paths",r,s])}}function H(t,{operationId:e,pointer:n}){if(e)return L(t,e);if(n)return U(t,n)}function ue(t,e,n){const o=H(t,n);if(!o)return;const{pathName:r,method:s,operation:i,pointer:a}=o,p=t.paths?.[r]??{},l={pointer:a,pathName:r,httpVerb:s.toUpperCase(),operationId:i.operationId,summary:typeof i.summary=="string"?i.summary:void 0,isWebhook:!1,isAdditionalOperation:!1,tags:i.tags??[],parameters:J(t,p.parameters,i.parameters),requestBody:i.requestBody,responses:i.responses,servers:i.servers??p.servers??t.servers,security:i.security},m=G(t,e),d=N(l,m,e.ignoreNamedSchemas,void 0,void 0,e),O=i["x-codeSamples"];O?.length&&(d.definitionSamples=O.map(({lang:S,label:c,source:f})=>({lang:S,label:c,source:f})));const y=A(m.schemaStore,m.exampleStore,e);return{doc:t,options:e,operation:i,pathName:r,method:s,source:d,storeCtx:m,resolvers:y}}function J(t,e,n){if(!e?.length)return n;if(!n?.length)return e;const o=u(t),r=a=>{const p=h(o,a)??a;return`${p.in}:${p.name}`},s=new Set(n.map(r));return[...e.filter(a=>!s.has(r(a))),...n]}function z(t,{environment:e,environments:n}){let o=t;if(e){const r=o.filter(s=>String(q(s))===e||s.url===e);o=r.length?r:o}return n&&(o=o.map(r=>{const s=n[String(q(r))]?.server;return s?{...r,url:s}:r})),o}function le(t,e={}){const{source:n,options:o}=t,r=o.codeSamples?.languages??[],s=new Map(r.map((c,f)=>[c.key,f])),i=z(n.servers,e),a=e.environment&&e.environments?.[e.environment]||{},p=(n.definitionSamples??[]).filter(c=>s.has(g(c))&&typeof c.source=="string"),l=new Set(p.map(g)),m={serverUrl:i[0]?.url??a.server,mediaType:e.mimeType,exampleName:e.exampleKey,environment:a,requestValues:e.parameters,replayBody:e.requestBody},d={skipOptionalParameters:o.codeSamples?.skipOptionalParameters,withOAuth2Call:o.codeSamples?.withOAuth2Call,generatedPayloadSamplesMaxDepth:o.generatedSamplesMaxDepth},y=n.operationType==="webhook"?void 0:P({...n,servers:i},m,d,t.resolvers),S=[];if(y)for(const c of r){const f=$(c);if(f==="payload"||l.has(c.key))continue;const x=T(f,y,c.options),k=x.kind==="ok"?x.source:x.kind==="unsupported-language"?"Language is not supported.":"Failed to generate code sample.";k&&S.push({lang:c.lang,label:c.label,source:k})}return[...p,...S].filter(c=>!!c.source).sort((c,f)=>(s.get(g(c))??9999)-(s.get(g(f))??9999))}function Q(t,e,n){if(e.examples&&typeof e.examples=="object"){const o=Object.keys(e.examples);if(o.length){const r=o.length===1?o[0]:n&&o.includes(n)?n:o[0],s=h(u(t),e.examples[r])??e.examples[r],i=w(s);if(i!==void 0)return i}}if(e.example!==void 0)return e.example}function X(t,e,n,o){const r=e.schema??e.itemSchema;if(!r)return;const s=h(u(t),r)??r;try{return B.sample(s,{skipReadOnly:o==="request",skipWriteOnly:o==="response",quiet:!0,skipNonRequired:n.onlyRequiredInSamples,maxSampleDepth:n.generatedSamplesMaxDepth},u(t))}catch{return}}function j(t,e,n,o,r,s){const i=[];if(!e)return i;for(const[a,p]of Object.entries(e)){if(!p||typeof p!="object"||s&&a!==s)continue;let l=Q(t.doc,p,n);const m=l===void 0&&D(a);if(m&&(l=X(t.doc,p,t.options,r)),l===void 0)continue;const d=E(l,a,p.schema??p.itemSchema,m&&V(a));d!==void 0&&i.push({lang:W(a),title:`${o} ${a}`,source:K(d,a,p.encoding)})}return i}function fe(t,{exampleKey:e,mimeType:n,titlePrefix:o="Payload"}={}){const r=h(u(t.doc),t.operation.requestBody)??t.operation.requestBody,s=C(u(t.doc),r);return j(t,s,e,o,"request",n)}function de(t,{exampleKey:e}={}){const n=t.operation.responses;if(!n||typeof n!="object")return[];const o=[];for(const[r,s]of Object.entries(n)){if(!F(r))continue;const i=h(u(t.doc),s)??s,a=C(u(t.doc),i);o.push(...j(t,a,e,r,"response"))}return o}export{le as buildCodeSamples,fe as getRequestBodySamples,de as getResponseSamples,ue as resolveOperationSampleContext};
@@ -1,3 +1,7 @@
1
- import type { SchemaProcessorDialect } from '../../../types/schema.js';
1
+ import type { SchemaProcessorDialect, Document } from '../../../types/schema.js';
2
+ export declare function getImplicitDiscriminatorChildren(document: Document): Record<string, Array<{
3
+ ref: string;
4
+ value: string;
5
+ }>>;
2
6
  export declare const JsonSchemaDialectId: "json-schema";
3
7
  export declare const jsonSchemaDialect: SchemaProcessorDialect;
@@ -1 +1 @@
1
- import{merge as $,openApiJsonSchemaMergeRules as A}from"@redocly/allof-merge";import{schemaKind as M}from"../../../types/common.js";import{isSchemaNode as p}from"../../../types/schema.js";import{encodeJsonPointerSegment as w}from"../../../utils/refPointer.js";import{buildPropertyTree as j}from"../propertyTreeBuilder.js";function k(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function S(e,i){if(!i.startsWith("#/"))return;const c=i.slice(2).split("/").map(k);let n=e;for(const t of c){if(!p(n))return;n=n[t]}return p(n)?n:void 0}function g(e,i,c,n){if(!e||typeof e!="object")return e;if(Array.isArray(e)){const r=c??new Set;return e.map(f=>g(f,i,r,n))}if(!p(e))return e;const t=c??new Set;if(e.$ref!==void 0){const r=e.$ref;if(typeof r!="string")return e;if(t.has(r)){const o=S(i,r);return p(o)?{...o,"x-circular-ref":!0,"x-original-ref":r}:{"x-circular-ref":!0}}const f=n?.get(r);if(f&&p(f)){const o={};for(const[m,d]of Object.entries(e))m!=="$ref"&&(o[m]=g(d,i,t,n));return{...f,...o,"x-original-ref":r}}const l=S(i,r);if(!l)return e;t.add(r);const s=g(l,i,t,n);t.delete(r);const a={};for(const[o,m]of Object.entries(e))o!=="$ref"&&(a[o]=g(m,i,t,n));return p(s)?(n?.set(r,s),{...s,...a,"x-original-ref":r}):s}return Object.fromEntries(Object.entries(e).map(([r,f])=>[r,g(f,i,t,n)]))}function b(e,i,c,n){const t="openapi"in i?i.openapi:void 0,r=typeof t=="string"&&t.startsWith("3.0")?"3.0.x":"3.1.x",f=g(e,i,n,c),l=p(f)?f:e,s=$(l,{mergeCombinarySibling:!0,applyAdditionalPropertiesToSiblings:!1,rules:A(r)});return p(s)?s:l}const x=new WeakMap;function P(e){const i=x.get(e);if(i)return i;const c=e.components?.schemas,n={};if(c&&typeof c=="object")for(const[t,r]of Object.entries(c)){if(!p(r)||!Array.isArray(r.allOf))continue;const f=typeof r["x-discriminator-value"]=="string"?r["x-discriminator-value"]:t,l=`#/components/schemas/${w(t)}`;for(const s of r.allOf)p(s)&&typeof s.$ref=="string"&&(n[s.$ref]??=[]).push({ref:l,value:f})}return x.set(e,n),n}const O=new WeakMap;function y(e,i){if(!p(e)){if(Array.isArray(e))for(const t of e)y(t,i);return}for(const[t,r]of Object.entries(e))t==="$ref"&&typeof r=="string"?i.add(r):y(r,i);const c=e.discriminator??e["x-discriminator"],n=p(c)?c.mapping:void 0;if(p(n))for(const t of Object.values(n))typeof t=="string"&&i.add(t)}function D(e){const i=new Set;let c=0;const n=new Map,t=new Map,r=new Set,f=[];for(const l of e.keys()){if(n.has(l))continue;const s=[{node:l,edge:0}];for(;s.length>0;){const a=s[s.length-1],{node:o}=a;a.edge===0&&(n.set(o,c),t.set(o,c),c++,f.push(o),r.add(o));const m=e.get(o)??[];if(a.edge<m.length){const u=m[a.edge];if(a.edge++,!e.has(u))continue;n.has(u)?r.has(u)&&t.set(o,Math.min(t.get(o)??0,n.get(u)??0)):s.push({node:u,edge:0});continue}if((t.get(o)??0)===(n.get(o)??0)){const u=[];let h="";do h=f.pop()??o,r.delete(h),u.push(h);while(h!==o);const R=(e.get(u[0])??[]).includes(u[0]);if(u.length>1||R)for(const v of u)i.add(v)}s.pop();const d=s[s.length-1];d&&t.set(d.node,Math.min(t.get(d.node)??0,t.get(o)??0))}}return i}function J(e){const i=O.get(e);if(i)return i;const c=e.components?.schemas,n=new Map;if(c&&typeof c=="object"){const r=s=>`#/components/schemas/${w(s)}`,f=s=>s.replace(/^#\/components\/schemas\//,"").replace(/~1/g,"/").replace(/~0/g,"~"),l=s=>{const a=c[f(s)];return p(a)&&!!(a.discriminator||a["x-discriminator"])};for(const[s,a]of Object.entries(c)){const o=new Set;y(a,o),n.set(r(s),[...o])}for(const[s,a]of Object.entries(c))if(!(!p(a)||!Array.isArray(a.allOf)))for(const o of a.allOf)p(o)&&typeof o.$ref=="string"&&l(o.$ref)&&n.get(o.$ref)?.push(r(s))}const t=D(n);return O.set(e,t),t}const W=M.JSON_SCHEMA,q={id:W,process(e,i,c){const n=new Map,t=c?.rootJsonPointer??"#",r=t.startsWith("#/")&&e.$ref!==t?new Set([t]):void 0,f=b(e,i,n,r),l={prepareVariant:s=>b(s,i,n),propertyRefCache:new Map,variantResolutionCache:new Map,implicitDiscriminatorChildren:P(i),exampleSerializer:c?.exampleSerializer,sortRequiredPropsFirst:c?.sortRequiredPropsFirst,activeRefs:t.startsWith("#/")?new Set([t]):new Set,depth:0,recursiveRefs:J(i)};return j(f,l,t)}};export{W as JsonSchemaDialectId,q as jsonSchemaDialect};
1
+ import{merge as M,openApiJsonSchemaMergeRules as j}from"@redocly/allof-merge";import{schemaKind as P}from"../../../types/common.js";import{isSchemaNode as l}from"../../../types/schema.js";import{encodeJsonPointerSegment as A}from"../../../utils/refPointer.js";import{buildPropertyTree as D}from"../propertyTreeBuilder.js";function J(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function O(e,r){if(!r.startsWith("#/"))return;const i=r.slice(2).split("/").map(J);let n=e;for(const t of i){if(!l(n))return;n=n[t]}return l(n)?n:void 0}function h(e,r,i,n,t,f=!1){if(!e||typeof e!="object")return e;if(Array.isArray(e)){const s=i??new Set;return e.map(o=>h(o,r,s,n,t,f))}if(!l(e))return e;const c=i??new Set;if(e.$ref!==void 0){const s=e.$ref;if(typeof s!="string")return e;if(c.has(s)){for(const k of c)t?.add(k);const g=O(r,s);if(!l(g))return{"x-circular-ref":!0};if(f&&g.allOf!==void 0)return{};const{allOf:u,oneOf:m,anyOf:x,...y}=g;return{...y,"x-circular-ref":!0,"x-original-ref":s}}const o=n?.get(s);if(o&&l(o)){const g={};for(const[u,m]of Object.entries(e))u!=="$ref"&&(g[u]=h(m,r,c,n,t));return w({...o,...g,"x-original-ref":s},r)}const p=O(r,s);if(!p)return e;c.add(s);const a=h(p,r,c,n,t,f);c.delete(s);const d={};for(const[g,u]of Object.entries(e))g!=="$ref"&&(d[g]=h(u,r,c,n,t));return l(a)?(t?.has(s)||n?.set(s,a),w({...a,...d,"x-original-ref":s},r)):a}return Object.fromEntries(Object.entries(e).map(([s,o])=>[s,h(o,r,c,n,t,s==="allOf"&&Array.isArray(o))]))}function b(e,r,i,n){const t="openapi"in r?r.openapi:void 0,f=typeof t=="string"&&t.startsWith("3.0")?"3.0.x":"3.1.x",s=h(e,r,n,i,new Set),o=l(s)?w(s,r):e,p=M(o,{mergeCombinarySibling:!0,applyAdditionalPropertiesToSiblings:!1,rules:j(f)});return l(p)?p:o}function C(e,r){const i=[],n=new Set,t=f=>{const c=O(e,f);if(!(!l(c)||!Array.isArray(c.allOf)))for(const s of c.allOf)l(s)&&typeof s.$ref=="string"&&i.push(s.$ref)};for(t(r);i.length>0;){const f=i.pop();if(f===r)return!0;n.has(f)||(n.add(f),t(f))}return!1}function $(e,r){if(!Array.isArray(e.allOf))return[];const i=[],n=t=>{i.includes(t)||i.push(t)};for(const t of e.allOf){if(!l(t))continue;if(Array.isArray(t.allOf)){const c=t["x-original-ref"];t.discriminator&&typeof c=="string"&&!C(r,c)&&n(c);for(const s of $(t,r))n(s);continue}const f=t["x-original-ref"];typeof f=="string"&&n(f)}return i}function w(e,r){const i=$(e,r);return i.length>0&&(e["x-parentRefs"]=i),e}const R=new WeakMap;function W(e){const r=R.get(e);if(r)return r;const i=e.components?.schemas,n={};if(i&&typeof i=="object")for(const[t,f]of Object.entries(i)){if(!l(f)||!Array.isArray(f.allOf))continue;const c=typeof f["x-discriminator-value"]=="string"?f["x-discriminator-value"]:t,s=`#/components/schemas/${A(t)}`;for(const o of f.allOf)l(o)&&typeof o.$ref=="string"&&(n[o.$ref]??=[]).push({ref:s,value:c})}return R.set(e,n),n}const v=new WeakMap;function S(e,r){if(!l(e)){if(Array.isArray(e))for(const t of e)S(t,r);return}for(const[t,f]of Object.entries(e))t==="$ref"&&typeof f=="string"?r.add(f):S(f,r);const i=e.discriminator??e["x-discriminator"],n=l(i)?i.mapping:void 0;if(l(n))for(const t of Object.values(n))typeof t=="string"&&r.add(t)}function I(e){const r=new Set;let i=0;const n=new Map,t=new Map,f=new Set,c=[];for(const s of e.keys()){if(n.has(s))continue;const o=[{node:s,edge:0}];for(;o.length>0;){const p=o[o.length-1],{node:a}=p;p.edge===0&&(n.set(a,i),t.set(a,i),i++,c.push(a),f.add(a));const d=e.get(a)??[];if(p.edge<d.length){const u=d[p.edge];if(p.edge++,!e.has(u))continue;n.has(u)?f.has(u)&&t.set(a,Math.min(t.get(a)??0,n.get(u)??0)):o.push({node:u,edge:0});continue}if((t.get(a)??0)===(n.get(a)??0)){const u=[];let m="";do m=c.pop()??a,f.delete(m),u.push(m);while(m!==a);const x=(e.get(u[0])??[]).includes(u[0]);if(u.length>1||x)for(const y of u)r.add(y)}o.pop();const g=o[o.length-1];g&&t.set(g.node,Math.min(t.get(g.node)??0,t.get(a)??0))}}return r}function N(e){const r=v.get(e);if(r)return r;const i=e.components?.schemas,n=new Map;if(i&&typeof i=="object"){const f=o=>`#/components/schemas/${A(o)}`,c=o=>o.replace(/^#\/components\/schemas\//,"").replace(/~1/g,"/").replace(/~0/g,"~"),s=o=>{const p=i[c(o)];return l(p)&&!!(p.discriminator||p["x-discriminator"])};for(const[o,p]of Object.entries(i)){const a=new Set;S(p,a),n.set(f(o),[...a])}for(const[o,p]of Object.entries(i))if(!(!l(p)||!Array.isArray(p.allOf)))for(const a of p.allOf)l(a)&&typeof a.$ref=="string"&&s(a.$ref)&&n.get(a.$ref)?.push(f(o))}const t=I(n);return v.set(e,t),t}const _=P.JSON_SCHEMA,F={id:_,process(e,r,i){const n=new Map,t=i?.rootJsonPointer??"#",f=t.startsWith("#/")&&e.$ref!==t?new Set([t]):void 0,c=b(e,r,n,f),s={prepareVariant:o=>b(o,r,n),propertyRefCache:new Map,variantResolutionCache:new Map,implicitDiscriminatorChildren:W(r),exampleSerializer:i?.exampleSerializer,sortRequiredPropsFirst:i?.sortRequiredPropsFirst,activeRefs:t.startsWith("#/")?new Set([t]):new Set,depth:0,recursiveRefs:N(r)};return D(c,s,t)}};export{_ as JsonSchemaDialectId,W as getImplicitDiscriminatorChildren,F as jsonSchemaDialect};
@@ -1 +1 @@
1
- import{encodeJsonPointerSegment as M}from"../../utils/refPointer.js";import{isSchemaNode as O,switcherLabel as A}from"../../types/schema.js";import{buildPropertyShell as K,detectJsonSchemaType as S,getAccessMode as j,getDiscriminatorObject as w,getDocumentedPrimitiveArrayItems as k,getEnum as H,humanizeConstraints as J,isPrimitiveLikeSchema as $,isStructuredArrayItems as X,primitiveArrayItemsHaveOwnInfo as Y,promotePrimitiveArrayMetadata as G,schemaHasType as x,toPropertyExample as T}from"./propertyBuilder.js";import{deriveVariantLabel as U}from"./variant-label.js";const W=10,Q=200;function Z(e,i,r,t){const n=w(i)?`${e}:d`:e;return t?`${n}#rec`:`${n}@${r}`}function I(e){if(e.isCircular)return!0;if(e.properties){for(const i of Object.values(e.properties))if(I(i))return!0}if(e.items){for(const i of e.items)if(I(i))return!0}if(e.switcher)for(const i of Object.values(e.switcher.options)){if(i.isCircular)return!0;if(i.properties){for(const r of Object.values(i.properties))if(I(r))return!0}}return!1}const V=/^#\/components\/(schemas|pathItems)\/([^/]+)$/;function h(e){const i=e.match(V);if(i)return i[2].replace(/~1/g,"/").replace(/~0/g,"~")}function y(e,i,r={},t){const n=K(e,{...r,exampleSerializer:i.exampleSerializer});if(!n.title){const l=h(t);l&&(n.title=l)}if(n.isCircular||n.isComplex)return n;const s=e["x-original-ref"];if(s&&i.activeRefs.has(s))return n.isCircular=!0,n;if(i.activeRefs.size>W||i.depth>Q)return n.isComplex=!0,n;const f=s!==void 0&&i.recursiveRefs.has(s),u=s===void 0?void 0:Z(s,e,t,f);if(u){const l=i.propertyRefCache.get(u);if(l)return{...l,...n}}s&&i.activeRefs.add(s);try{ie(n,e,{...i,depth:i.depth+1},t)}finally{s&&i.activeRefs.delete(s)}return u&&(f||!I(n))&&i.propertyRefCache.set(u,n),n.isExpandable=ee(n),n}function ee(e){if(e.isCircular)return!1;const i=t=>!t.isCircular&&(!!t.switcher||!!t.items?.length||!!(t.properties&&Object.keys(t.properties).length)),r=t=>t.isCircular?!1:!!(t.properties&&Object.values(t.properties).some(i)||t.items?.some(r)||t.switcher&&Object.values(t.switcher.options).some(r));return!!(e.properties&&Object.values(e.properties).some(i)||e.switcher&&Object.values(e.switcher.options).some(r)||e.items?.some(r))}function _(e,i){if(!Array.isArray(e)||e.length===0)return;let r;for(let t=0;t<e.length;t++){const n=e[t];if(!O(n))return;const s=i(n);if(s===void 0)return;if(t===0)r=s;else if(s!==r)return}return r}function E(e,i,r){if(e.example!==void 0||_(i,s=>s.example===void 0?void 0:JSON.stringify(s.example))===void 0)return;const n=Array.isArray(i)?i[0]:void 0;O(n)&&(e.example=T(n.example,r))}function R(e,i){if(e.accessMode!==void 0)return;const r=_(i,j);r&&(e.accessMode=r)}function ie(e,i,r,t){const n=i.type||S(i),s=$(i,n),f=w(i);if(!r.isChild&&f?.propertyName){e.switcher=B(i,f,r,t),E(e,i.oneOf??i.anyOf,r.exampleSerializer),R(e,i.oneOf??i.anyOf),i.properties&&(e.properties=g(i,r,t));return}if(i.oneOf!==void 0){if(e.switcher=N(i.oneOf,A.ONE_OF,r,t,"oneOf",i),E(e,i.oneOf,r.exampleSerializer),R(e,i.oneOf),i.properties){const u=g(i,r,t);e.properties=u;for(const l of Object.values(e.switcher.options))l.properties={...u,...l.properties||{}}}return}if(i.anyOf!==void 0){if(e.switcher=N(i.anyOf,A.ANY_OF,r,t,"anyOf",i),E(e,i.anyOf,r.exampleSerializer),R(e,i.anyOf),i.properties){const u=g(i,r,t);e.properties=u;for(const l of Object.values(e.switcher.options))l.properties={...u,...l.properties||{}}}return}if(i.if&&i.then||i.if&&i.else){e.switcher=fe(i,r,t);return}!s&&x(n,"object")&&(e.properties=g(i,r,t)),!s&&x(n,"array")&&(e.items=L(i,r,t),z(i)!==void 0&&delete e.example,e.example===void 0&&O(i.items)&&i.items.example!==void 0&&!k(i,n)&&(e.example=T([i.items.example],r.exampleSerializer))),G(e,i,n,r.exampleSerializer)}function te(e,i){const r=[],t=[],n=[];for(const[s,f]of Object.entries(e))f.isRequired?i.includes(s)?r.push([s,f]):t.push([s,f]):n.push([s,f]);return r.sort(([s],[f])=>i.indexOf(s)-i.indexOf(f)),Object.fromEntries([...r,...t,...n])}function g(e,i,r){const t={},n={...i,isChild:!1},s=e.required||[],f=O(e.default)?e.default:{},u=O(e.example)?e.example:void 0,l=e.properties||{};for(const[o,a]of Object.entries(l)){const p={...a};p.default===void 0&&f[o]!==void 0&&(p.default=f[o]),p.example===void 0&&u?.[o]!==void 0&&(p.example=u[o]);const c=`${r}/properties/${M(o)}`;t[o]=y(p,n,{isRequired:s.includes(o)},c)}for(const[o,a]of Object.entries(e.patternProperties||{})){const p=`${r}/patternProperties/${M(o)}`;t[o]=y(a,n,{isPatternProperty:!0},p)}const d=e.additionalProperties??e.unevaluatedProperties;if(O(d)){const o=(d["x-additionalPropertiesName"]||"property name")+"*",a=`${r}/additionalProperties`;t[o]=y(d,n,{isAdditionalProperty:!0},a)}else d===!0&&(t["property name*"]=y({},n,{isAdditionalProperty:!0},`${r}/additionalProperties`));return i.sortRequiredPropsFirst?F(te(t,s)):F(t)}function F(e){const i={};for(const[r,t]of Object.entries(e).sort(([,n],[,s])=>+!!n.isDeprecated-+!!s.isDeprecated))i[r]=t;return i}function z(e){const i=Array.isArray(e.prefixItems)?e.prefixItems:Array.isArray(e.items)?e.items:void 0;return!i?.length||!Array.isArray(e.example)||!e.example.length||e.example.length>i.length||e.example.some((t,n)=>t!==void 0&&O(i[n])&&i[n].example!==void 0)?void 0:e.example}function L(e,i,r){const t={...i},n=z(e),s=(f,u)=>n?.[u]!==void 0?{...f,example:n[u]}:f;if(Array.isArray(e.prefixItems)){const f=e.prefixItems.map((u,l)=>P(y(s(u,l),t,{},`${r}/prefixItems/${l}`)));return f.push(...q(e.items,t,`${r}/items`)),f}if(Array.isArray(e.items)){const f=e.items.map((u,l)=>P(y(s(u,l),t,{},`${r}/items/${l}`)));return f.push(...q(e.additionalItems,t,`${r}/additionalItems`)),f}return O(e.items)&&(X(e.items)||!$(e.items,e.items.type||S(e.items))||Y(e.items))?[y(e.items,t,{},`${r}/items`)]:[]}function q(e,i,r){return e!==!0&&!O(e)?[]:[re(y(e===!0?{}:e,i,{},r))]}function re(e){return{...e,isAdditionalItems:!0}}function P(e){return{...e,isTupleItem:!0}}function D(e,i){const r=i.variantResolutionCache.get(e);if(r)return r;const t=i.prepareVariant({$ref:e});return O(t)?(delete t.discriminator,delete t["x-discriminator"],delete t["x-original-ref"],i.variantResolutionCache.set(e,t),t):{}}const ne="Default mapping";function se(e,i){if(typeof e["x-original-ref"]=="string")return e["x-original-ref"];if(V.test(i))return i}function B(e,i,r,t){const n=i.mapping||{},s=i["x-explicitMappingOnly"]??Object.keys(n).length>0,f=e.oneOf||e.anyOf||[],u={...r,isChild:!0},l=e.oneOf!==void 0?"oneOf":"anyOf",d={};if(Object.keys(n).length>0)for(const[o,a]of Object.entries(n)){const c=f.find(C=>C["x-original-ref"]===a)??D(a,r),b=f.findIndex(C=>C["x-original-ref"]===a),m=b>=0?`${t}/${l}/${b}`:t;d[o]=v(c||{},u,!1,m,a)}else for(let o=0;o<f.length;o++){const a=f[o],p=a.title||a["x-original-ref"]?.split("/").pop()||"Variant",c=`${t}/${l}/${o}`;d[p]=v(a,u,!1,c,a["x-original-ref"])}if(f.length===0&&!s){const o=new Set(Object.values(n)),a=se(e,t),p=a?r.implicitDiscriminatorChildren?.[a]:void 0;if(p)for(const{ref:c,value:b}of p)o.has(c)||(d[b]=v(D(c,r),u,!1,t,c))}if(i.defaultMapping){const o=i.defaultMapping;for(const[m,C]of Object.entries(n))C===o&&delete d[m];const p=f.find(m=>m["x-original-ref"]===o)??D(o,r),c=f.findIndex(m=>m["x-original-ref"]===o),b=c>=0?`${t}/${l}/${c}`:t;d[ne]=v(p||{},u,!0,b,o)}return{type:"discriminator",label:A.DISCRIMINATOR,propertyName:i.propertyName,jsonPointer:t,options:d}}function N(e,i,r,t,n,s){const f={},u={...r,isChild:!1};for(let l=0;l<e.length;l++){const d=e[l],o={type:s.type,...d},{label:a,typeLabel:p}=U(d,s),c=`${t}/${n}/${l}`,b=f[a]?`${a} (${l+1})`:a,m=v(o,u,!1,c,d["x-original-ref"]);m.typeLabel=p,d.title&&(m.title=d.title),f[b]=m}return{type:"oneOf",label:i,jsonPointer:t,options:f}}function fe(e,i,r){const{if:t,then:n={},else:s={},description:f,...u}=e,l={...i,isChild:!1},d=(...o)=>i.prepareVariant({allOf:o.filter(a=>a!=null)});return{type:"oneOf",label:A.ONE_OF,jsonPointer:r,options:{[t?.["x-displayName"]||t?.title||"case 1"]:v(d(u,n,t),l,!1,r),[s?.["x-displayName"]||s?.title||"case 2"]:v(d(u,s),l,!1,r)}}}function v(e,i,r,t,n){const s={isDeprecated:!!e.deprecated,isDefaultMapping:r};e.description&&(s.description=e.description);const f=e["x-original-ref"]?.split("/").pop();f&&(s.schemaName=f);const u=j(e);u&&(s.accessMode=u);const l=J(e);l.length&&(s.constraints=l);const d=H(e);if(d&&(s.enum=d),n&&i.activeRefs.has(n))return s.isCircular=!0,s;const o=e.type||S(e);n&&i.activeRefs.add(n);try{const a=w(e);if(!i.isChild&&a?.propertyName?(s.switcher=B(e,a,i,t),e.properties&&(s.properties=g(e,i,t))):e.oneOf!==void 0?(s.switcher=N(e.oneOf,A.ONE_OF,i,t,"oneOf",e),e.properties&&(s.properties=g(e,i,t))):e.anyOf!==void 0?(s.switcher=N(e.anyOf,A.ANY_OF,i,t,"anyOf",e),e.properties&&(s.properties=g(e,i,t))):!$(e,o)&&(x(o,"object")||e.properties)&&(s.properties=g(e,i,t)),!$(e,o)&&x(o,"array")){const p=L(e,i,t);p.length&&(s.items=p)}}finally{n&&i.activeRefs.delete(n)}return s}function de(e,i,r){return delete e["x-original-ref"],y(e,i,{},r)}export{de as buildPropertyTree};
1
+ import{encodeJsonPointerSegment as F}from"../../utils/refPointer.js";import{isSchemaNode as b,switcherLabel as S}from"../../types/schema.js";import{buildPropertyShell as Y,detectJsonSchemaType as D,getAccessMode as z,getDiscriminatorObject as j,getDocumentedPrimitiveArrayItems as G,getEnum as U,humanizeConstraints as W,isPrimitiveLikeSchema as x,isStructuredArrayItems as Q,primitiveArrayItemsHaveOwnInfo as Z,promotePrimitiveArrayMetadata as ee,schemaHasType as I,toPropertyExample as L}from"./propertyBuilder.js";import{deriveVariantLabel as ie}from"./variant-label.js";const te=10,re=200;function ne(e,i,r,t){const n=j(i)?`${e}:d`:e;return t?`${n}#rec`:`${n}@${r}`}function N(e){if(e.isCircular)return!0;if(e.properties){for(const i of Object.values(e.properties))if(N(i))return!0}if(e.items){for(const i of e.items)if(N(i))return!0}if(e.switcher)for(const i of Object.values(e.switcher.options)){if(i.isCircular)return!0;if(i.properties){for(const r of Object.values(i.properties))if(N(r))return!0}}return!1}const h=/^#\/components\/(schemas|pathItems)\/([^/]+)$/;function se(e){const i=e.match(h);if(i)return i[2].replace(/~1/g,"/").replace(/~0/g,"~")}function g(e,i,r={},t){const n=Y(e,{...r,exampleSerializer:i.exampleSerializer});if(!n.title){const o=se(t);o&&(n.title=o)}if(n.isCircular||n.isComplex)return n;const s=e["x-original-ref"];if(s&&i.activeRefs.has(s))return n.isCircular=!0,n;if(i.activeRefs.size>te||i.depth>re)return n.isComplex=!0,n;const f=s!==void 0&&i.recursiveRefs.has(s),l=s===void 0?void 0:ne(s,e,t,f);if(l){const o=i.propertyRefCache.get(l);if(o)return{...o,...n}}s&&i.activeRefs.add(s);try{oe(n,e,{...i,depth:i.depth+1},t)}finally{s&&i.activeRefs.delete(s)}return l&&(f||!N(n))&&i.propertyRefCache.set(l,n),n.isExpandable=fe(n),n}function fe(e){if(e.isCircular)return!1;const i=t=>!t.isCircular&&(!!t.switcher||!!t.items?.length||!!(t.properties&&Object.keys(t.properties).length)),r=t=>t.isCircular?!1:!!(t.properties&&Object.values(t.properties).some(i)||t.items?.some(r)||t.switcher&&Object.values(t.switcher.options).some(r));return!!(e.properties&&Object.values(e.properties).some(i)||e.switcher&&Object.values(e.switcher.options).some(r)||e.items?.some(r))}function k(e,i){if(!Array.isArray(e)||e.length===0)return;let r;for(let t=0;t<e.length;t++){const n=e[t];if(!b(n))return;const s=i(n);if(s===void 0)return;if(t===0)r=s;else if(s!==r)return}return r}function M(e,i,r){if(e.example!==void 0||k(i,s=>s.example===void 0?void 0:JSON.stringify(s.example))===void 0)return;const n=Array.isArray(i)?i[0]:void 0;b(n)&&(e.example=L(n.example,r))}function T(e,i){if(e.accessMode!==void 0)return;const r=k(i,z);r&&(e.accessMode=r)}function oe(e,i,r,t){const n=i.type||D(i),s=x(i,n),f=X(i,r,t);if(f){e.switcher=f,M(e,i.oneOf??i.anyOf,r.exampleSerializer),T(e,i.oneOf??i.anyOf),i.properties&&(e.properties=A(i,r,t));return}if(i.oneOf!==void 0){if(e.switcher=E(i.oneOf,S.ONE_OF,r,t,"oneOf",i),M(e,i.oneOf,r.exampleSerializer),T(e,i.oneOf),i.properties){const l=A(i,r,t);e.properties=l;for(const o of Object.values(e.switcher.options))o.properties={...l,...o.properties||{}}}return}if(i.anyOf!==void 0){if(e.switcher=E(i.anyOf,S.ANY_OF,r,t,"anyOf",i),M(e,i.anyOf,r.exampleSerializer),T(e,i.anyOf),i.properties){const l=A(i,r,t);e.properties=l;for(const o of Object.values(e.switcher.options))o.properties={...l,...o.properties||{}}}return}if(i.if&&i.then||i.if&&i.else){e.switcher=Oe(i,r,t);return}!s&&I(n,"object")&&(e.properties=A(i,r,t)),!s&&I(n,"array")&&(e.items=B(i,r,t),P(i)!==void 0&&delete e.example,e.example===void 0&&b(i.items)&&i.items.example!==void 0&&!G(i,n)&&(e.example=L([i.items.example],r.exampleSerializer))),ee(e,i,n,r.exampleSerializer)}function le(e,i){const r=[],t=[],n=[];for(const[s,f]of Object.entries(e))f.isRequired?i.includes(s)?r.push([s,f]):t.push([s,f]):n.push([s,f]);return r.sort(([s],[f])=>i.indexOf(s)-i.indexOf(f)),Object.fromEntries([...r,...t,...n])}function A(e,i,r){const t={},n={...i,isChild:!1},s=e.required||[],f=b(e.default)?e.default:{},l=b(e.example)?e.example:void 0,o=e.properties||{};for(const[u,d]of Object.entries(o)){const p={...d};p.default===void 0&&f[u]!==void 0&&(p.default=f[u]),p.example===void 0&&l?.[u]!==void 0&&(p.example=l[u]);const w=`${r}/properties/${F(u)}`;t[u]=g(p,n,{isRequired:s.includes(u)},w)}for(const[u,d]of Object.entries(e.patternProperties||{})){const p=`${r}/patternProperties/${F(u)}`;t[u]=g(d,n,{isPatternProperty:!0},p)}const a=e.additionalProperties??e.unevaluatedProperties;if(b(a)){const u=(a["x-additionalPropertiesName"]||"property name")+"*",d=`${r}/additionalProperties`;t[u]=g(a,n,{isAdditionalProperty:!0},d)}else a===!0&&(t["property name*"]=g({},n,{isAdditionalProperty:!0},`${r}/additionalProperties`));return i.sortRequiredPropsFirst?q(le(t,s)):q(t)}function q(e){const i={};for(const[r,t]of Object.entries(e).sort(([,n],[,s])=>+!!n.isDeprecated-+!!s.isDeprecated))i[r]=t;return i}function P(e){const i=Array.isArray(e.prefixItems)?e.prefixItems:Array.isArray(e.items)?e.items:void 0;return!i?.length||!Array.isArray(e.example)||!e.example.length||e.example.length>i.length||e.example.some((t,n)=>t!==void 0&&b(i[n])&&i[n].example!==void 0)?void 0:e.example}function B(e,i,r){const t={...i},n=P(e),s=(f,l)=>n?.[l]!==void 0?{...f,example:n[l]}:f;if(Array.isArray(e.prefixItems)){const f=e.prefixItems.map((l,o)=>H(g(s(l,o),t,{},`${r}/prefixItems/${o}`)));return f.push(...K(e.items,t,`${r}/items`)),f}if(Array.isArray(e.items)){const f=e.items.map((l,o)=>H(g(s(l,o),t,{},`${r}/items/${o}`)));return f.push(...K(e.additionalItems,t,`${r}/additionalItems`)),f}return b(e.items)&&(Q(e.items)||!x(e.items,e.items.type||D(e.items))||Z(e.items))?[g(e.items,t,{},`${r}/items`)]:[]}function K(e,i,r){return e!==!0&&!b(e)?[]:[ue(g(e===!0?{}:e,i,{},r))]}function ue(e){return{...e,isAdditionalItems:!0}}function H(e){return{...e,isTupleItem:!0}}function J(e,i){const r=i.prepareVariant({$ref:e});if(b(r))return typeof r.$ref=="string"?void 0:r}function de(e,i,r){if(!i)return!1;const t=J(e,r);return t!==void 0&&j(t)?.propertyName===i}function R(e,i){const r=i.variantResolutionCache.get(e);if(r)return r;const t=J(e,i);if(t){delete t.discriminator,delete t["x-discriminator"],delete t["x-original-ref"];for(const n of["oneOf","anyOf"]){const s=t[n];Array.isArray(s)&&s.some(f=>b(f)&&f["x-original-ref"]===e)&&delete t[n]}return i.variantResolutionCache.set(e,t),t}}const ae="Default mapping";function pe(e,i){if(typeof e["x-original-ref"]=="string")return e["x-original-ref"];if(h.test(i))return i}function X(e,i,r){const t=j(e);if(i.isChild||!t?.propertyName)return;const n=ce(e,t,i,r);return Object.keys(n.options).length>0?n:void 0}function ce(e,i,r,t){const n=i.mapping||{},s=i["x-explicitMappingOnly"]??Object.keys(n).length>0,f=e.oneOf||e.anyOf||[],l=pe(e,t),o={...r,isChild:!0},a=O=>O&&O===l?{...o,activeRefs:new Set([...r.activeRefs].filter(c=>c!==l))}:o,u=e.oneOf!==void 0?"oneOf":"anyOf",d={};if(Object.keys(n).length>0)for(const[O,c]of Object.entries(n)){const m=R(c,r);if(!m)continue;const y=f.findIndex(v=>v["x-original-ref"]===c),C=y>=0?`${t}/${u}/${y}`:t;d[O]=$(m,a(c),!1,C,c)}else for(let O=0;O<f.length;O++){const c=f[O],m=c["x-original-ref"],y=typeof m=="string"?R(m,r):c;if(!y)continue;const C=c.title||m?.split("/").pop()||"Variant",v=`${t}/${u}/${O}`;d[C]=$(y,a(m),!1,v,m)}if(f.length===0&&!s){const O=new Set(Object.values(n)),m=[...(e["x-parentRefs"]??[]).filter(y=>de(y,i.propertyName,r)),...l?[l]:[]];for(const y of m){const C=r.implicitDiscriminatorChildren?.[y];if(C)for(const{ref:v,value:_}of C){if(O.has(v)||Object.hasOwn(d,_))continue;const V=R(v,r);V&&(d[_]=$(V,a(v),!1,t,v))}}}const p=i.defaultMapping,w=p?R(p,r):void 0;if(p&&w){const O=p.split("/").pop();O&&delete d[O];const c=f.findIndex(y=>y["x-original-ref"]===p),m=c>=0?`${t}/${u}/${c}`:t;d[ae]=$(w,a(p),!0,m,p)}return{type:"discriminator",label:S.DISCRIMINATOR,propertyName:i.propertyName,jsonPointer:t,options:d}}function E(e,i,r,t,n,s){const f={},l={...r,isChild:!1};for(let o=0;o<e.length;o++){const a=e[o],u={type:s.type,...a},{label:d,typeLabel:p}=ie(a,s),w=`${t}/${n}/${o}`,O=f[d]?`${d} (${o+1})`:d,c=$(u,l,!1,w,a["x-original-ref"]);c.typeLabel=p,a.title&&(c.title=a.title),f[O]=c}return{type:"oneOf",label:i,jsonPointer:t,options:f}}function Oe(e,i,r){const{if:t,then:n={},else:s={},description:f,...l}=e,o={...i,isChild:!1},a=(...u)=>i.prepareVariant({allOf:u.filter(d=>d!=null)});return{type:"oneOf",label:S.ONE_OF,jsonPointer:r,options:{[t?.["x-displayName"]||t?.title||"case 1"]:$(a(l,n,t),o,!1,r),[s?.["x-displayName"]||s?.title||"case 2"]:$(a(l,s),o,!1,r)}}}function $(e,i,r,t,n){const s={isDeprecated:!!e.deprecated,isDefaultMapping:r};e.description&&(s.description=e.description);const f=(e["x-original-ref"]??n)?.split("/").pop();f&&(s.schemaName=f);const l=z(e);l&&(s.accessMode=l);const o=W(e);o.length&&(s.constraints=o);const a=U(e);if(a&&(s.enum=a),n&&i.activeRefs.has(n))return s.isCircular=!0,s;const u=e.type||D(e);n&&i.activeRefs.add(n);try{const d=X(e,i,t);if(d?(s.switcher=d,e.properties&&(s.properties=A(e,i,t))):e.oneOf!==void 0?(s.switcher=E(e.oneOf,S.ONE_OF,i,t,"oneOf",e),e.properties&&(s.properties=A(e,i,t))):e.anyOf!==void 0?(s.switcher=E(e.anyOf,S.ANY_OF,i,t,"anyOf",e),e.properties&&(s.properties=A(e,i,t))):!x(e,u)&&(I(u,"object")||e.properties)&&(s.properties=A(e,i,t)),!x(e,u)&&I(u,"array")){const p=B(e,i,t);p.length&&(s.items=p)}}finally{n&&i.activeRefs.delete(n)}return s}function ve(e,i,r){return delete e["x-original-ref"],g(e,i,{},r)}export{ve as buildPropertyTree};
@@ -0,0 +1,9 @@
1
+ import type { ApiItem, SchemaEntry } from '../../types/store.js';
2
+ import type { SearchDocument } from './types.js';
3
+ /** Builds flat `SearchDocument`s from `ApiItem`s (OpenAPI, AsyncAPI, GraphQL). */
4
+ export declare class ApiDocsSearchIndexer {
5
+ #private;
6
+ constructor(basePath: string, schemaStore?: Record<string, SchemaEntry>, document?: Record<string, unknown>);
7
+ addItem(item: ApiItem): void;
8
+ getResult(): SearchDocument[];
9
+ }
@@ -0,0 +1 @@
1
+ import{REDOCLY_TEAMS_RBAC as f}from"@redocly/config";import{nodeTypes as P,contentType as S,schemaKind as E}from"../../types/common.js";import{extractFullText as y}from"../../adapters/utils/markdoc.js";import{appendArraySuffix as D,appendVariantSuffix as g,buildGraphqlSuffix as O,buildOpenApiSectionSuffix as j,makeDeepLink as I}from"../../utils/deep-link.js";const V=10,R="message payload",w="message headers",x=200;function _(k){return k.length>x?`${k.slice(0,x)}\u2026`:k}class G{#a=[];#r;#i;#s;#o;constructor(e,n,t){this.#r=e,this.#i=n,this.#s=t}addItem(e){if(!(!e.link||!e.content))try{switch(e.content.contentType){case S.OVERVIEW:this.#d(e,this.#r);break;case S.GROUP:case S.ITEM:this.#d(e,e.link);break}}catch(n){console.error(`Cannot add item to api-docs search indexer [${e.label}, ${e.link}]:`,n.message)}}#d(e,n){if(!e.content)return;const t=n.startsWith(this.#r+"/")?n.slice(this.#r.length+1):n.split("/").slice(-2).join("/"),r=e.content.children,i=this.#l(r),o=this.#y(r,t),s=e,a={id:n,url:n,title:e.label??"",text:i,path:[],deprecated:e.content.meta?.deprecated,..."httpVerb"in e&&e.httpVerb?{httpMethod:e.httpVerb}:{},..."httpPath"in e&&e.httpPath?{httpPath:e.httpPath}:{},..."badges"in e&&Array.isArray(e.badges)&&e.badges.length?{badges:e.badges}:{},..."isAdditionalOperation"in e&&e.isAdditionalOperation?{isAdditionalOperation:!0}:{},[f]:s[f],...o.length&&{parameters:o}};this.#a.push(a)}#l(e){const n=[],t=r=>{for(const i of r)if(i.nodeType===P.MARKDOC){const o=i;if(this.#h(o.content))continue;const s=y(o.content);s&&n.push(s)}else(i.nodeType===P.CONTAINER||i.nodeType===P.OVERVIEW_SECTION_WRAPPER)&&t(i.children)};return t(e),n.join(" ").trim()}#h(e){let n=!1,t=!1;const r=o=>{o.type==="code"&&o.attributes?.content?n=!0:o.type==="text"&&o.attributes?.content&&(t=!0);for(const s of o.children??[])r(s)},i=Array.isArray(e)?e:[e];for(const o of i)r(o);return n&&!t}#y(e,n){const t={},r=new Set,i=o=>{for(const s of o)if(s.nodeType===P.ITEM){const a=s;if(a[f])continue;this.#m(a,t,n),this.#S(a,t,r,n)}else if(s.nodeType===P.CONTAINER){const a=s;if(a[f])continue;i(a.children)}else s.nodeType===P.OVERVIEW_SECTION_WRAPPER&&i(s.children)};return i(e),Object.values(t)}#m(e,n,t){if(e.parameters?.length)for(const r of e.parameters){if(r[f])continue;const i=this.#g(e.variant),o=this.#k(e.variant),s=r.description?y(r.description):"",a=this.#$(r.schemaId),d={name:r.name,description:s,place:i,mediaType:void 0,type:a,required:r.required??!1,deepLink:this.#c(t,"request",o,void 0,void 0,[r.name]),example:void 0,enum:void 0};n[this.#t(d)]=d}}#t(e){return[...Array.isArray(e.path)?e.path:[],e.name.toString()].join(".")+e.description+e.place}#c(e,n,t,r,i,o){if(!e)return"";const s=o.join("/"),a=[`t=${n}`];return t&&a.push(`in=${t}`),i&&a.push(`c=${i}`),r&&a.push(`ct=${r}`),s&&a.push(`path=${s}`),`/${e}#${e}/${a.join("&")}`.toLowerCase()}#P(e,n,t,r){if(!e)return"";let i="messages";n&&(i+=`&m=${n}`),i+=`&t=${t}`;const o=r.join("/");return o&&(i+=`&path=${o}`),`/${e}#${e}/${i}`.toLowerCase()}#k(e){switch(e){case"query":return"query";case"path":return"path";case"headers":return"header";case"cookies":return"cookie";default:return}}#g(e){switch(e){case"query":return"query parameters";case"path":return"path parameters";case"headers":return"header parameters";case"cookies":return"cookie parameters";case"parameters":return"channel parameters";default:return e?`${e} parameters`:"parameters"}}#$(e){const n=this.#i?.[e];if(!n||n.kind!==E.JSON_SCHEMA)return"unknown";const t=n.data,r=this.#p(t);return this.#f(r)}#f(e){return Array.isArray(e.type)?e.type.join(" | "):e.type?e.type:e.properties||e.additionalProperties?"object":e.items?"array":e.enum?"string":"any"}#S(e,n,t,r){const i=this.#A(e);if(e.graphqlSchema&&Array.isArray(e.graphqlSchema)){this.#I(e.graphqlSchema,i,n,e,r);return}const o=!!this.#i&&!!this.#s;o&&this.#O(e,i,n,t,r);for(const s of e.responses??[])s[f]||(this.#T(s,n,r),o&&this.#b(s,n,r));if(o)for(const s of e.messages??[])s[f]||this.#q(s,n,r)}#O(e,n,t,r,i){const o=n.startsWith("response");if(e.mediaTypeSchemas){const s=Object.entries(e.mediaTypeSchemas),a=s.find(([,d])=>!d[f]);if(a){const[d,c]=a;c.schemaId&&this.#n(c.schemaId,n,d,s.length>1,o,t,[],r,i)}}else e.schemaId&&this.#n(e.schemaId,n,void 0,!1,o,t,[],r,i)}#T(e,n,t){const r=e.description?y(e.description):"",o=[e.summary?y(e.summary):"",r].filter(Boolean).join(" ").trim();if(!o)return;const s={name:e.code,description:o,place:`response ${e.code}`,mediaType:void 0,type:"unknown",required:!1,deepLink:t?I(t,j("response",void 0,e.code)):void 0,example:void 0,enum:void 0};n[this.#t(s)]=s}#b(e,n,t){const r=`response ${e.code} fields`,i=new Set;if(e.mediaTypeContent){const o=Object.entries(e.mediaTypeContent),s=o.find(([,a])=>!a[f]);if(s){const[a,d]=s;d.schemaId&&this.#n(d.schemaId,r,a,o.length>1,!0,n,[],i,t)}}else e.schemaId&&this.#n(e.schemaId,r,e.mediaType,!1,!0,n,[],i,t)}#q(e,n,t){const r=e.description?y(e.description):"",i=e.summary??"",o={name:e.name,description:(r+i).trim(),place:"message",mediaType:void 0,type:"unknown",required:!1,example:void 0,enum:void 0};n[this.#t(o)]=o,this.#o=e.name;const s=new Set;e.schemaId&&this.#n(e.schemaId,R,e.contentType,!1,!1,n,[],s,t),e.headerSchemaId&&this.#n(e.headerSchemaId,w,void 0,!1,!1,n,[],s,t),this.#o=void 0}#A(e){switch(e.variant){case"body":return"request fields";case"responses":return"response fields";case"graphql-fields":return"fields";case"graphql-args":return"arguments";case"return-type":return"return type fields";default:return e.variant??"fields"}}#E(e){return e.variant!=="graphql-args"?e.graphqlTypeName:e.graphqlFieldName?e.graphqlFieldName:e.graphqlTypeName?`@${e.graphqlTypeName}`:void 0}#I(e,n,t,r,i){const o=r.variant==="graphql-args",s=this.#E(r),a=d=>i&&s?I(i,d):void 0;for(const d of e){const c=d.description?y(d.description):"",u=`${s}.${d.name}`,l={name:d.name,description:c,place:n,mediaType:void 0,path:[],type:d.type??"unknown",required:!1,deepLink:a(o?O({t:"argument",path:u,arg:d.name}):O({t:"field",path:u})),example:void 0,enum:void 0};if(t[this.#t(l)]=l,d.args?.length)for(const p of d.args){const m=p.description?y(p.description):"",h={name:p.name,description:m,place:"arguments",mediaType:void 0,path:[d.name],type:p.type??"unknown",required:!1,deepLink:a(O({t:"argument",path:`${u}.${p.name}`,arg:p.name})),example:void 0,enum:void 0};t[this.#t(h)]=h}}}#n(e,n,t,r,i,o,s,a,d=""){const c=this.#i?.[e];if(!c||c.kind!==E.JSON_SCHEMA||c[f])return;const u=c.data,l=r?t:void 0;this.#u(u,n,t,l,i,o,{path:s,linkPath:[...s],depth:0},a,d)}#R(e){const n=e.match(/^response (\d+)/);return n?n[1]:void 0}#p(e){if(e.allOf){const n={};for(const t of e.allOf){const r=t.$ref?this.#e(t.$ref):t;if(r){const i=n.properties,o=n.required;Object.assign(n,r),(i||r.properties)&&(n.properties={...i||{},...r.properties||{}}),(o||r.required)&&(n.required=[...o||[],...r.required||[]])}}return delete n.allOf,e.description&&(n.description=e.description),n}if(e.$ref){const n=this.#e(e.$ref);if(n){const t={...n};return e.description&&(t.description=e.description),t}}return e}#e(e){if(!e.startsWith("#/"))return;const n=e.slice(2).split("/");let t=this.#s;for(const r of n){if(t==null||typeof t!="object")return;t=t[r]}return t!=null&&typeof t=="object"?t:void 0}#u(e,n,t,r,i,o,s,a,d=""){if(s.depth>V||e[f])return;const c=(p,m)=>this.#u(p,n,t,r,i,o,m,a,d);if(e.$ref){this.#w(e.$ref,c,s,a);return}if(e.allOf){c(this.#x(e,a),s);return}const u=e.discriminator??e["x-discriminator"];if(u?.propertyName&&!s.inDiscriminatorVariant){this.#W(e,u,c,s);return}const l=e.oneOf??e.anyOf;if(l){this.#C(e,l,c,s,a);return}if(e.if&&(e.then||e.else)){this.#L(e,c,s);return}e.properties&&this.#D(e,c,{place:n,mediaType:t,deepLinkContentType:r,isResponse:i,paramsMap:o,frame:s,visited:a,slug:d}),this.#v(e,c,s,a)}#w(e,n,t,r){if(r.has(e))return;r.add(e);const i=this.#e(e);i&&n(i,t)}#x(e,n){const t={};for(const r of e.allOf??[]){let i=r;if(r.$ref){if(n.has(r.$ref))continue;n.add(r.$ref),i=this.#e(r.$ref)}if(i){const o=t.properties,s=t.required;Object.assign(t,i),(o||i.properties)&&(t.properties={...o||{},...i.properties||{}}),(s||i.required)&&(t.required=[...s||[],...i.required||[]])}}return delete t.allOf,t}#C(e,n,t,r,i){e.properties&&t({...e,oneOf:void 0,anyOf:void 0},{...r,linkPath:g(r.linkPath,"&oneof=0")}),n.forEach((o,s)=>{if(o.$ref){if(i.has(o.$ref))return;i.add(o.$ref)}const a=o.$ref?this.#e(o.$ref):o;a&&t(a,{...r,linkPath:g(r.linkPath,`&oneof=${s}`),depth:r.depth+1})})}#L(e,n,t){const{if:r,then:i,else:o,...s}=e;[{allOf:[s,i??{},r??{}]},{allOf:[s,o??{}]}].forEach((d,c)=>{n(d,{...t,linkPath:g(t.linkPath,`&oneof=${c}`),depth:t.depth+1})})}#D(e,n,t){const{isResponse:r,paramsMap:i,frame:o,visited:s}=t,a=e.required||[],d=this.#R(t.place),c=r?"response":"request",u=t.place===R?"payload":t.place===w?"headers":void 0,l={requiredList:a,responseCode:d,type:c,asyncSubsection:u,...t};for(const[p,m]of Object.entries(e.properties??{})){if(m[f])continue;const h=this.#j(m,s);if(!h)continue;const C=this.#V(h,s),$=this.#p(h);if(!this.#_(h,$,r))continue;const T=p===o.discriminatorPropertyName,L=[...o.path,p],b=this.#F(p,T,o),q=this.#M(p,h,$,b,l),A=this.#t(q);i[A]==null&&(i[A]=q,!C&&!T&&n($,{path:L,linkPath:b,depth:o.depth+1}))}}#j(e,n){if(!e.$ref)return e;if(!n.has(e.$ref))return n.add(e.$ref),this.#e(e.$ref)}#V(e,n){if(!e.allOf)return!1;let t=!1;for(const r of e.allOf)r.$ref?n.has(r.$ref)||(n.add(r.$ref),t=!0):t=!0;return!t}#_(e,n,t){return!(e[f]||n[f]||n.readOnly&&!t||n.writeOnly&&t||e.additionalProperties!==void 0&&!e.properties)}#F(e,n,t){return[...n&&t.discriminatorLinkPath?t.discriminatorLinkPath:t.linkPath,e]}#M(e,n,t,r,i){const o=n.description??t.description,s=o?y(o):"",a=n.example??t.example,d=a!==void 0?_(typeof a=="string"?a:JSON.stringify(a)):void 0,c=Array.isArray(t.enum)&&t.enum.length?t.enum:void 0;return{name:e,description:s,place:i.place,mediaType:i.mediaType,path:i.frame.path,type:this.#f(t),required:i.requiredList.includes(e),deepLink:i.asyncSubsection?this.#P(i.slug,this.#o,i.asyncSubsection,r):this.#c(i.slug,i.type,void 0,i.deepLinkContentType,i.responseCode,r),example:d,enum:c}}#v(e,n,t,r){if(!e.items||typeof e.items!="object"||Array.isArray(e.items))return;if(e.items.$ref){if(r.has(e.items.$ref))return;r.add(e.items.$ref)}const i=e.items.$ref?this.#e(e.items.$ref):e.items;i&&n(i,{...t,linkPath:D(t.linkPath),depth:t.depth+1})}#W(e,n,t,r){const i=this.#G(e,n),o=s=>({...r,linkPath:g(r.linkPath,`&d=${s}`),inDiscriminatorVariant:!0,discriminatorPropertyName:n.propertyName,discriminatorLinkPath:r.linkPath});e.properties&&t({...e,discriminator:void 0,"x-discriminator":void 0,oneOf:void 0,anyOf:void 0},i.length?o(0):r),i.forEach((s,a)=>{t(s,{...o(a),depth:r.depth+1})})}#G(e,n){const t=e.oneOf??e.anyOf??[],r=Object.values(n.mapping??{});if(r.length===0)return t;const i=s=>t.find(a=>a.$ref===s||a["x-original-ref"]===s)??this.#e(s)??{},o=r.filter(s=>s!==n.defaultMapping).map(i);return n.defaultMapping&&o.push(i(n.defaultMapping)),o}getResult(){return this.#a}}export{G as ApiDocsSearchIndexer};
@@ -0,0 +1,27 @@
1
+ import type { OperationParameter, ParameterHighlight } from '@redocly/theme/core/openapi';
2
+ import type { ItemBadge } from '@redocly/config';
3
+ import type { REDOCLY_TEAMS_RBAC } from '@redocly/config';
4
+ export type SearchDocument = {
5
+ [REDOCLY_TEAMS_RBAC]?: Record<string, string>;
6
+ id: string;
7
+ url: string;
8
+ title: string | string[];
9
+ text: string | string[];
10
+ path?: string[];
11
+ httpMethod?: string;
12
+ httpPath?: string | string[];
13
+ isAdditionalOperation?: boolean;
14
+ deprecated?: boolean;
15
+ security?: string[];
16
+ parameters?: OperationParameter[];
17
+ badges?: ItemBadge[];
18
+ };
19
+ export type SearchItemData = {
20
+ document: SearchDocument;
21
+ highlight: Record<string, string> & {
22
+ parameters?: ParameterHighlight[];
23
+ path?: string[];
24
+ };
25
+ };
26
+ export type { OperationParameter, ParameterHighlight } from '@redocly/theme/core/openapi';
27
+ export type { ItemBadge } from '@redocly/config';
File without changes
@@ -0,0 +1,19 @@
1
+ import type { RedocStandaloneProps } from './RedocStandalone.js';
2
+ import type { TypeOfUsage } from './telemetry/RedocTelemetry.js';
3
+ import { RedocStandalone } from './RedocStandalone.js';
4
+ export { RedocStandalone };
5
+ export type { RedocStandaloneProps };
6
+ type InitOptions = NonNullable<RedocStandaloneProps['options']> & {
7
+ router?: 'hash' | 'history';
8
+ disableTelemetry?: boolean;
9
+ specType?: RedocStandaloneProps['specType'];
10
+ /** The Docker image sets `type-of-usage="docker"` on the `<redoc>` element. */
11
+ typeOfUsage?: TypeOfUsage;
12
+ basePath?: string;
13
+ };
14
+ export declare function init(definitionOrDefinitionUrl: string | Record<string, unknown>, options?: InitOptions, element?: Element | null): void;
15
+ /**
16
+ * Attaches to server-rendered markup instead of replacing it. The definition must be
17
+ * the same pre-bundled document the server pass rendered from.
18
+ */
19
+ export declare function hydrate(definitionOrDefinitionUrl: string | Record<string, unknown>, options?: InitOptions, element?: Element | null): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import{createElement as m}from"react";import{createRoot as g,hydrateRoot as E}from"react-dom/client";import{HashRouter as R}from"react-router";import{RedocStandalone as y,prepareApiDocs as S}from"./RedocStandalone.js";import{RedoclyApiDocsStandalone as A}from"./RedoclyApiDocsStandalone.js";import{logoFromDefinition as T}from"./utils/x-logo.js";const C=["html","cli","react","docker"];function M(e,t){return C.includes(e)?e:t}function f(e){return typeof document<"u"?document.querySelector(e):null}function w(e){const t={};for(const o of Array.from(e.attributes))t[o.name]=o.value;return t}function q(e){const t=w(e),o={};for(const r in t){const s=r.replace(/-(.)/g,(n,c)=>c.toUpperCase());o[s]=t[r]}return o}function h(e,t,o,r){const{router:s,disableTelemetry:n,specType:c,typeOfUsage:i,basePath:p,...u}={...t,...q(o)};let l,a;return typeof e=="string"?c==="graphql"&&!I(e)?a=e:l=e:typeof e=="object"&&(a=e),{router:s,props:{definition:a,definitionUrl:l,specType:c,options:u,basePath:p,telemetryConfig:{typeOfUsage:M(i,r),...n!==void 0?{disabled:n===!0||String(n)==="true"}:{}}}}}function d(e,t){return t==="history"?e:m(R,null,e)}function b(e){if(e===null)throw new Error('"element" argument is not provided and <redoc> tag is not found on the page');return e}function v(e,t={},o=f("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"html");g(r).render(d(m(y,n),s))}const H=/server rendered HTML didn't match the client|error while hydrating|Minified React error #(418|423)/;async function L(e,t={},o=f("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"cli"),c=n.basePath??"/",i=await S({...n,basePath:c}),p=m(A,{items:i.items,store:i.store,basePath:c,options:i.options,logo:T(i.document),telemetryConfig:n.telemetryConfig,definition:i.document});if(r.childElementCount===0){g(r).render(d(p,s));return}E(r,d(p,s),{onRecoverableError:(u,l)=>{const a=u instanceof Error?u.message:String(u);H.test(a)||console.error(a,l)}})}function I(e){return!e.includes(`
2
+ `)&&/^[^\s]+$/.test(e)}function P(){const e=f("redoc");if(!e)return;const t=e.getAttribute("spec-url");t&&v(t,{},e)}P();export{y as RedocStandalone,L as hydrate,v as init};
@@ -0,0 +1,3 @@
1
+ import type { ThemeDataTransferObject } from '@redocly/theme/core/openapi';
2
+ /** Theme config injected into the standalone render's `ThemeDataContext`; `undefined` keeps the theme defaults. */
3
+ export declare const STANDALONE_THEME_CONFIG: ThemeDataTransferObject['config'] | undefined;
@@ -0,0 +1 @@
1
+ const e=void 0;export{e as STANDALONE_THEME_CONFIG};
@@ -1,15 +1,18 @@
1
1
  import { Telemetry } from '@redocly/redoc-opentelemetry';
2
2
  import type { EventType, EventPayload } from '@redocly/redoc-opentelemetry';
3
3
  export type SpecType = 'openapi' | 'asyncapi' | 'graphql';
4
+ export type TypeOfUsage = 'html' | 'cli' | 'react' | 'docker';
4
5
  export interface RedocTelemetryConfig {
5
6
  specType: SpecType;
6
7
  collectorUrl?: string;
7
8
  serviceName?: string;
8
9
  disabled?: boolean;
9
10
  serviceVersion?: string;
11
+ typeOfUsage?: TypeOfUsage;
10
12
  }
11
13
  export declare class RedocTelemetry extends Telemetry {
12
14
  private specType;
15
+ readonly typeOfUsage: TypeOfUsage | undefined;
13
16
  constructor(config: RedocTelemetryConfig);
14
17
  send<T extends EventType>(event: T, data?: EventPayload<T>): void;
15
18
  }