@redocly/realm 0.130.0-custom.18 → 0.130.0-custom.19

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.
@@ -1,4 +1,4 @@
1
- import*as t from"react";import i from"styled-components";import{Select as p}from"@redocly/theme/components/Select/Select";import{SelectInputWrapper as d}from"@redocly/theme/components/Select/SelectInput";const v={element:"Default",value:""};function x({instances:r=[],value:o="",onChange:l}){if(!r.length)return null;const n=(r.some(e=>e.key==="")?r:[{key:"",title:"Default"},...r]).map(e=>{const a=e.title||(e.key?e.key:v.element);return{value:e.key,element:t.createElement(h,{title:a},a)}}),c=n.some(e=>e.value===o)?o:"",s=e=>{l(typeof e=="string"?e:"")};return t.createElement(f,{"data-component-name":"InstancePicker/InstancePicker",role:"region","aria-label":"Instance selector"},t.createElement(m,{htmlFor:"instance-picker-select"},"Instance:"),t.createElement(k,{disabled:!n.length,options:n,value:c,onChange:s,dataAttributes:{id:"instance-picker-select","aria-label":"Select instance"}}))}const m=i.label`
1
+ import*as t from"react";import i from"styled-components";import{Select as p}from"@redocly/theme/components/Select/Select";import{SelectInputWrapper as d}from"@redocly/theme/components/Select/SelectInput";const v={element:"Default",value:""};function x({instances:r=[],value:o="",onChange:l}){if(r.length<=1)return null;const n=(r.some(e=>e.key==="")?r:[{key:"",title:"Default"},...r]).map(e=>{const a=e.title||(e.key?e.key:v.element);return{value:e.key,element:t.createElement(h,{title:a},a)}}),c=n.some(e=>e.value===o)?o:"",s=e=>{l(typeof e=="string"?e:"")};return t.createElement(f,{"data-component-name":"InstancePicker/InstancePicker",role:"region","aria-label":"Instance selector"},t.createElement(m,{htmlFor:"instance-picker-select"},"Instance:"),t.createElement(k,{disabled:!n.length,options:n,value:c,onChange:s,dataAttributes:{id:"instance-picker-select","aria-label":"Select instance"}}))}const m=i.label`
2
2
  font-size: var(--version-picker-label-font-size);
3
3
  font-weight: var(--version-picker-label-font-weight);
4
4
  white-space: nowrap;
@@ -1,9 +1,9 @@
1
- import e,{useEffect as j,useState as x}from"react";import u from"styled-components";import{Menu as M}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as H}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as K}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as q}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as $}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as z}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as F}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{combineUrls as J,withPathPrefix as E,removeTrailingSlash as O}from"@redocly/theme/core/utils";import{telemetry as B}from"../telemetry/index.js";import{usePreloadHistory as U}from"../usePreloadHistory";import{useTranslate as W}from"../hooks";import{usePageData as _,usePageSharedData as G,usePageVersions as N}from"../../providers/page-data/hooks";import{useSidebarItems as Q}from"./useSidebarItems";import{InstancePicker as X}from"./InstancePicker";import{renderAdmonition as Y,RequestAccessButton as Z}from"./RequestAccessButton";function Ie({layoutControls:d}){const{versions:f=[]}=N()||{},L=f.find(t=>t?.active),{translate:c}=W(),{currentItems:p,backLink:a,versionLabel:l,pushDrilldownState:w,popDrilldownState:A}=Q(L),[h,D]=x(),{collapsedSidebar:s}=d,g=_(),i=G("openAPIDocsStore"),b=i?.definition?.info?.["x-metadata"]?.apiId,k=U(),[S,m]=x(void 0);if(j(()=>{const t=setTimeout(()=>m(void 0),350);return()=>clearTimeout(t)},[S]),!p.length)return null;const I=g?.props?.itemId,v=g?.props?.baseSlug,C=t=>{const n=i?.instances?.find(o=>o.key===t);if(!n||!v)return;const P=i?.instances?.find(o=>o.key===i?.currentInstanceKey);let r=v;if(P?.routePrefix){const o="/"+P.routePrefix;r.endsWith(o)&&(r=r.slice(0,-o.length))}const T=n.routePrefix?r+"/"+n.routePrefix:r,V=(I?n.routeSuffixesByItemId?.[I]:void 0)||n.routeSuffixesByItemId?.[""]||"/",y=O(J(T,V)),R=location.hash?`${y}${location.hash}`:y;k.push(E(R))};return e.createElement(e.Fragment,null,e.createElement(K,{collapsed:s,menuItemsAnimation:S,versions:e.createElement(te,null,e.createElement(q,{versions:f,onChange:t=>{B.sendVersionPickerSelectionChangeMessage([{object:"version_picker",action:"change"}]);const n=location.hash?t?.link+location.hash:t?.link;n&&k.push(E(n))}}),e.createElement(X,{instances:i?.instances||[],value:i?.currentInstanceKey||"",onChange:C})),menu:e.createElement(M,{items:p,onDrilldownOpen:t=>{m("slideInRight"),w(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!s&&Y(h),e.createElement(H,{...d,requestAccessButton:b?e.createElement(Z,{apiId:b,status:h,setStatus:D}):null})),header:(a||l)&&e.createElement(ee,null,a&&e.createElement(ne,{icon:e.createElement(F,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:a.slug,onClick:()=>{m("slideInLeft"),A(),B.sendSidebarDrilldownBackButtonClickedMessage([{object:"button",action:"click"}])}},s?"":a.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},c("sidebar.menu.backToLabel",{value:c(a.labelTranslationKey,a.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},c("sidebar.menu.backLabel"))),l&&!s&&e.createElement(z,{version:l}))}))}const ee=u.div`
1
+ import e,{useEffect as V,useState as v}from"react";import l from"styled-components";import{Menu as R}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as j}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as M}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as H}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as q}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as K}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as $}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{combineUrls as z,withPathPrefix as y,removeTrailingSlash as F}from"@redocly/theme/core/utils";import{telemetry as E}from"../telemetry/index.js";import{usePreloadHistory as J}from"../usePreloadHistory";import{useTranslate as O}from"../hooks";import{usePageData as U,usePageSharedData as _,usePageVersions as G}from"../../providers/page-data/hooks";import{useSidebarItems as N}from"./useSidebarItems";import{InstancePicker as Q}from"./InstancePicker";import{renderAdmonition as W,RequestAccessButton as X}from"./RequestAccessButton";function ke({layoutControls:m}){const{versions:u=[]}=G()||{},P=u.find(t=>t?.active),{translate:r}=O(),{currentItems:d,backLink:a,versionLabel:s,pushDrilldownState:x,popDrilldownState:B}=N(P),[f,L]=v(),{collapsedSidebar:i}=m,p=U(),o=_("openAPIDocsStore"),h=o?.definition?.info?.["x-metadata"]?.apiId,b=J(),[g,c]=v(void 0);if(V(()=>{const t=setTimeout(()=>c(void 0),350);return()=>clearTimeout(t)},[g]),!d.length)return null;const k=p?.props?.itemId,w=p?.props?.baseSlug,A=t=>{const n=o?.instances?.find(T=>T.key===t);if(!n)return;const S=n.baseSlug||w;if(!S)return;const D=(k?n.routeSuffixesByItemId?.[k]:void 0)||n.routeSuffixesByItemId?.[""]||"/",I=F(z(S,D)),C=location.hash?`${I}${location.hash}`:I;b.push(y(C))};return e.createElement(e.Fragment,null,e.createElement(M,{collapsed:i,menuItemsAnimation:g,versions:e.createElement(Z,null,e.createElement(H,{versions:u,onChange:t=>{E.sendVersionPickerSelectionChangeMessage([{object:"version_picker",action:"change"}]);const n=location.hash?t?.link+location.hash:t?.link;n&&b.push(y(n))}}),e.createElement(Q,{instances:o?.instances||[],value:o?.currentInstanceKey||"",onChange:A})),menu:e.createElement(R,{items:d,onDrilldownOpen:t=>{c("slideInRight"),x(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!i&&W(f),e.createElement(j,{...m,requestAccessButton:h?e.createElement(X,{apiId:h,status:f,setStatus:L}):null})),header:(a||s)&&e.createElement(Y,null,a&&e.createElement(ee,{icon:e.createElement($,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:a.slug,onClick:()=>{c("slideInLeft"),B(),E.sendSidebarDrilldownBackButtonClickedMessage([{object:"button",action:"click"}])}},i?"":a.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},r("sidebar.menu.backToLabel",{value:r(a.labelTranslationKey,a.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},r("sidebar.menu.backLabel"))),s&&!i&&e.createElement(K,{version:s}))}))}const Y=l.div`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--menu-header-container-gap);
5
5
  width: 100%;
6
- `,te=u.div`
6
+ `,Z=l.div`
7
7
  [data-component-name='VersionPicker/VersionPicker'],
8
8
  [data-component-name='InstancePicker/InstancePicker'] {
9
9
  flex-direction: column;
@@ -11,9 +11,9 @@ import e,{useEffect as j,useState as x}from"react";import u from"styled-componen
11
11
  justify-content: flex-start;
12
12
  gap: 6px;
13
13
  }
14
- `,ne=u($)`
14
+ `,ee=l(q)`
15
15
  padding: var(--menu-item-padding-vertical) 0;
16
16
  height: calc(var(--line-height-base) + var(--menu-item-padding-vertical) * 2);
17
17
  justify-content: flex-start;
18
18
  width: 100%;
19
- `;export{Ie as Sidebar};
19
+ `;export{ke as Sidebar};
@@ -11,6 +11,7 @@ export type OpenApiInstance = {
11
11
  tags?: string[];
12
12
  routePrefix?: string;
13
13
  routeSuffixesByItemId?: Record<string, string>;
14
+ baseSlug?: string;
14
15
  };
15
16
  type OpenAPIDocsStore = {
16
17
  definition: OpenAPIDefinition;
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as O}from"@redocly/config";import{combineUrls as Y}from"@redocly/theme/core/utils";import{OPENAPI_DOCS_TEMPLATE_ID as Z,PUBLIC_RBAC_SCOPE_ITEM as ee}from"../../../constants/common.js";import{DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as Ie,PUBLIC_API_DEFINITIONS_FOLDER as Pe}from"../../constants/common.js";import{OPENAPI_CUSTOM_FIELDS_SERVER_PROPS_GETTER_ID as Se,OPENAPI_SHARED_DATA_PREFIX as ye}from"../../constants/plugins/openapi-docs.js";import{envConfig as te}from"../../config/env-config.js";import{logger as x}from"../../tools/notifiers/logger.js";import{searchResolver as De}from"./search/search-resolver.js";import{convertOpenAPIDocs2Sidebar as Ae,shouldAddRoute as Re}from"./utils.js";import{getTemplatePath as U}from"./get-template-path.js";import{storeDefinitionBundles as ke}from"./store-definition-bundles.js";import{definitionLoader as ve,definitionsLoader as Ee}from"./load-definition.js";import{getAiDocumentsStore as _e}from"./search/get-ai-search-documents.js";import{buildInstanceMetadata as xe,fetchRegistryApiIdByPath as Te,filterInstancesForApiVersion as be,getResolvedApiVersion as Ce,hasTemplateVariables as oe,loadLinkedInstancesByApiId as Oe,patchOpenApiDefinitionWithVariables as Fe,resolveApiIdForDefinition as we}from"./instances.js";import{fromCurrentDir as Be}from"../../utils/paths.js";import{telemetryTraceStep as Me}from"../../../cli/telemetry/helpers/trace-step.js";const j="openapi-spec-download";async function at(){let n=[],r={},a={},m=new Set;return{id:"openapi",requiredEntitlements:["openapi"],loaders:{"load-oas-docs":Ee,"load-oas":ve},processContent:async(e,c)=>{await Me("build.plugin.openapi_docs",async u=>{e.createRequestHandler(j,Be(import.meta.url,"./spec-download.api.js")),e.addApiRoute({slug:Pe+"/*",requestHandlerId:j,httpMethod:"all",[O]:ee,getStaticData:async()=>({props:{}})}),e.addApiRoute({slug:Ie+"/*",requestHandlerId:j,httpMethod:"all",[O]:ee,getStaticData:async()=>({props:{}})});const h=e.createTemplate(Z,U("../../../client/templates/openapi-docs/template.js")),g=e.registerServerPropsGetter(Z,U("./get-server-props.js")),p=e.registerServerPropsGetter(Se,U("./get-server-props-custom-fields.js")),d=await c.getConfig();u?.setAttribute("config",JSON.stringify(d.openapi||{}));const F=d.rules?.["custom-fields-schema"];r={},a={};const w=x.startTiming("Loading openapi definitions..."),A=await e.loadOpenApiDefinitions(c);x.infoTime(w,"Loading openapi definitions...");const B=await Te(),T=await Oe(c);n=A.map(({markdocChunks:P,relativePath:l,customOutputRelativeFile:I,isVirtual:f,realRelativePath:M})=>({chunks:P,relativePath:l,realRelativePath:M,isVirtual:I!=null||f})),ke(A,e.outdir);const b={};for(const P of A||[]){const{definition:l,config:I,relativePath:f,customOutputRelativeFile:M,contentItems:ne,flatItems:L,parser:$,options:q,rawOptions:ae,hash:ie}=P,R=M||f,{definition:se}=$||{},{info:S}=se||{},i=we(P,B),re={...S?.["x-metadata"]||{},...i?{apiId:i}:{}};i&&(l.info={...l.info,"x-metadata":{...l.info?.["x-metadata"]||{},apiId:i}});const N=!!I.openapi?.excludeFromSearch||!!I.theme?.openapi?.excludeFromSearch||!!d.openapi?.excludeFromSearch||!!d.theme?.openapi?.excludeFromSearch,z={title:S?.title,description:S?.description,summary:S?.summary,...I.metadata,...re},ce=Ce(P),k=i?be(T.get(i)||[],ce):[];if(oe(l)&&k.length===0){const t=S?.["x-metadata"]?.apiId?"x-metadata":"registry";x.warn(`Template detected for "${R}" but no linked instances found.`+(i?` Resolved apiId="${i}" (source: ${t}). Ensure entity relations reference this exact key.`:" No apiId resolved. Add info.x-metadata.apiId to your API definition."))}const K=Le(l,k),W=K.map(t=>({key:t.key,title:t.title,summary:t.summary,tags:t.tags,routePrefix:t.routePrefix,routeSuffixesByItemId:{}})),de=new Map(W.map(t=>[t.key,t])),v={untagged:[],tagged:new Map};for(const t of L){const{operationDefinition:o}=t;if(o){const{tags:E}=o;if(E)for(const D of E)v.tagged.has(D)||v.tagged.set(D,[]),v.tagged.get(D)?.push(t);else v.untagged.push(t)}}for(const t of K){const o=[],E={},D=de.get(t.key);if(!D)continue;const pe=t.routePrefix?`${R.replace(/\.[^.]+$/,"")}/${t.routePrefix}`:R;for(const s of L){const{id:_,href:y,operationDefinition:Q}=s;if(te.isDevelopMode){const C=Q?.pointer;C&&(E[`#${C}`]=Ne(s.href,t.routePrefix))}if(!Re({item:s}))continue;const H=s,he=H.type==="section"&&!!H.infoDefinition,X=$e(y,"");D.routeSuffixesByItemId[_]=X;const ge=Q?.[O];o.push({excludeFromSearch:N,slugSuffix:X,fsPath:pe,metadata:{subType:"openapi-operation"},httpVerb:s?.httpVerb||"",path:f,templateId:h,[O]:ge||I.rbac,getAiDocumentsStore:_e({parser:$,options:q,info:S,tagOperations:v,openapiContentItem:H,metadata:z,relativePath:f,getSearchFacets:e.getSearchFacets,includeInLLMsTxt:he,excludeFromSearch:N}),getStaticData:async C=>({props:{dynamicMarkdocComponents:["openapi"],baseSlug:C.baseSlug,seo:s["x-metadata"]?.seo||{title:s.name,description:s.description},itemId:_,disableAutoScroll:!0}})})}if(!o.length)continue;const J=t.key!==""&&!!t.sourceInstance,le=J&&i&&t.sourceInstance?xe(t.sourceInstance,i):{},fe=J?{}:{...k.length>0?{instanceCount:k.length}:{},...k.length===0&&oe(l)?{isTemplate:!0}:{}},V=t.definition?.info?.title;o[0]={...o[0],metadata:{type:"openapi",...z,...le,...fe},hasClientRoutes:!0,getSidebar:(s,_)=>{const y=[];return Ae({contentItems:ne,sidebarItems:y,routeSlug:s.slug,navItem:_}),V&&y.length>0&&y[0]&&!_?.label&&(y[0].label=V),y},getNavText:()=>V||S?.title,getSearchDocuments:De($,q,L,e.getSearchFacets,e.setSearchFacets,N)},i&&t.key===""&&(b[i]={slug:o[0]?.slug||""});const ue=o[0];o[0]=o[o.length-1],o[o.length-1]=ue;const me=te.isDevelopMode?f:void 0,G=`${ye}${R}::${t.id}`;a[f]=[...a[f]||[],G],r[G]={fsPath:R,definition:t.definition,options:ae,instances:W,currentInstanceKey:t.key,sourcePath:me,routesMapping:E,hash:ie};for(const s of o)e.addRoute({...s,sharedData:[{id:G,key:"openAPIDocsStore"}],serverPropsGetterIds:F?[g,p]:[g]})}}e.setGlobalData({apiProducts:b})})},afterRoutesCreated:async(e,c)=>{const u=x.startTiming("Parsing openapi markdoc chunks..."),h=new Set;for(const{chunks:p,relativePath:d,isVirtual:F,realRelativePath:w}of n){const A=(await c.cache.load(w,"load-oas")).compoundHash,B=a[d]||[];await c.cache.load(d,{loader:async function(){for(const{node:b,markdown:P,key:l,relativePath:I}of p){const{ast:f}=await e.parseMarkdoc({content:P,relativePath:I,isVirtual:F},c,{sharedDataIds:B});b[`x-parsed-md-${l}`]={result:f}}},name:"openapi-markdoc-inline-parser"},[A]);for(const{pointer:T}of p)h.add(T)}x.infoTime(u,"Parsing openapi markdoc chunks...");const g=m.difference(h);for(const p of g)c.cache.delete(p);m=h;for(const[p,d]of Object.entries(r))await e.createSharedData(p,{...d,baseSlug:e.getRouteByFsPath(d.fsPath)?.baseSlug},d.hash)}}}function Le(n,r){const a=[{id:"default",key:"",title:"Default",routePrefix:"",definition:n}],m=new Set;for(const e of r){const c=Ve(e.key)||"instance";let u=`instances/${c}`,h=2;for(;m.has(u);)u=`instances/${c}-${h}`,h++;m.add(u);const g=Fe(n,e.variables),p=e.title?{...g,info:{...g.info||{},title:e.title}}:g;a.push({id:`instance-${u.replace(/[\/:]/g,"-")}`,key:e.key,title:e.title,summary:e.summary,tags:e.tags,routePrefix:u,definition:p,sourceInstance:e})}return a}function $e(n,r){const a=n.split("#")[0]+"/";return r?Y("/",r,a):a}function Ne(n,r){if(!r)return n;const[a="",m]=n.split("#"),e=Y("/",r,a||"/");return m?`${e}#${m}`:e}function Ve(n){return n.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").replace(/-+$/,"")}export{at as openAPIDocsPlugin};
1
+ import{REDOCLY_TEAMS_RBAC as O}from"@redocly/config";import{combineUrls as Y}from"@redocly/theme/core/utils";import{OPENAPI_DOCS_TEMPLATE_ID as Z,PUBLIC_RBAC_SCOPE_ITEM as ee}from"../../../constants/common.js";import{DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as ge,PUBLIC_API_DEFINITIONS_FOLDER as Ie}from"../../constants/common.js";import{OPENAPI_CUSTOM_FIELDS_SERVER_PROPS_GETTER_ID as Pe,OPENAPI_SHARED_DATA_PREFIX as Se}from"../../constants/plugins/openapi-docs.js";import{envConfig as te}from"../../config/env-config.js";import{logger as w}from"../../tools/notifiers/logger.js";import{searchResolver as De}from"./search/search-resolver.js";import{convertOpenAPIDocs2Sidebar as ye,shouldAddRoute as Ae}from"./utils.js";import{getTemplatePath as U}from"./get-template-path.js";import{storeDefinitionBundles as Re}from"./store-definition-bundles.js";import{definitionLoader as ve,definitionsLoader as ke}from"./load-definition.js";import{getAiDocumentsStore as _e}from"./search/get-ai-search-documents.js";import{buildInstanceMetadata as be,fetchRegistryApiIdByPath as Ee,filterInstancesForApiVersion as Te,getResolvedApiVersion as Fe,hasTemplateVariables as xe,loadLinkedInstancesByApiId as Ce,patchOpenApiDefinitionWithVariables as Oe,resolveApiIdForDefinition as we}from"./instances.js";import{fromCurrentDir as Be}from"../../utils/paths.js";import{telemetryTraceStep as Me}from"../../../cli/telemetry/helpers/trace-step.js";const j="openapi-spec-download";async function at(){let a=[],r={},i={},f=new Set;return{id:"openapi",requiredEntitlements:["openapi"],loaders:{"load-oas-docs":ke,"load-oas":ve},processContent:async(e,c)=>{await Me("build.plugin.openapi_docs",async l=>{e.createRequestHandler(j,Be(import.meta.url,"./spec-download.api.js")),e.addApiRoute({slug:Ie+"/*",requestHandlerId:j,httpMethod:"all",[O]:ee,getStaticData:async()=>({props:{}})}),e.addApiRoute({slug:ge+"/*",requestHandlerId:j,httpMethod:"all",[O]:ee,getStaticData:async()=>({props:{}})});const u=e.createTemplate(Z,U("../../../client/templates/openapi-docs/template.js")),m=e.registerServerPropsGetter(Z,U("./get-server-props.js")),p=e.registerServerPropsGetter(Pe,U("./get-server-props-custom-fields.js")),n=await c.getConfig();l?.setAttribute("config",JSON.stringify(n.openapi||{}));const P=n.rules?.["custom-fields-schema"];r={},i={};const v=w.startTiming("Loading openapi definitions..."),h=await e.loadOpenApiDefinitions(c);w.infoTime(v,"Loading openapi definitions...");const B=await Ee(),E=await Ce(c);a=h.map(({markdocChunks:S,relativePath:y,customOutputRelativeFile:g,isVirtual:d,realRelativePath:M})=>({chunks:S,relativePath:y,realRelativePath:M,isVirtual:g!=null||d})),Re(h,e.outdir);const T={};for(const S of h||[]){const{definition:y,config:g,relativePath:d,customOutputRelativeFile:M,contentItems:oe,flatItems:L,parser:$,options:q,rawOptions:ne,hash:ae}=S,F=M||d,{definition:ie}=$||{},{info:A}=ie||{},I=we(S,B),se={...A?.["x-metadata"]||{},...I?{apiId:I}:{}},N=!!g.openapi?.excludeFromSearch||!!g.theme?.openapi?.excludeFromSearch||!!n.openapi?.excludeFromSearch||!!n.theme?.openapi?.excludeFromSearch,z={title:A?.title,description:A?.description,summary:A?.summary,...g.metadata,...se},re=Fe(S),x=I?Te(E.get(I)||[],re):[],K=Le(y,x),W=K.map(t=>({key:t.key,title:t.title,summary:t.summary,tags:t.tags,routePrefix:t.routePrefix,routeSuffixesByItemId:{}})),ce=new Map(W.map(t=>[t.key,t])),k={untagged:[],tagged:new Map};for(const t of L){const{operationDefinition:o}=t;if(o){const{tags:_}=o;if(_)for(const R of _)k.tagged.has(R)||k.tagged.set(R,[]),k.tagged.get(R)?.push(t);else k.untagged.push(t)}}for(const t of K){const o=[],_={},R=ce.get(t.key);if(!R)continue;const pe=t.routePrefix?`${F.replace(/\.[^.]+$/,"")}/${t.routePrefix}`:F;for(const s of L){const{id:b,href:D,operationDefinition:Q}=s;if(te.isDevelopMode){const C=Q?.pointer;C&&(_[`#${C}`]=Ne(s.href,t.routePrefix))}if(!Ae({item:s}))continue;const H=s,me=H.type==="section"&&!!H.infoDefinition,X=$e(D,"");R.routeSuffixesByItemId[b]=X;const he=Q?.[O];o.push({excludeFromSearch:N,slugSuffix:X,fsPath:pe,metadata:{subType:"openapi-operation"},httpVerb:s?.httpVerb||"",path:d,templateId:u,[O]:he||g.rbac,getAiDocumentsStore:_e({parser:$,options:q,info:A,tagOperations:k,openapiContentItem:H,metadata:z,relativePath:d,getSearchFacets:e.getSearchFacets,includeInLLMsTxt:me,excludeFromSearch:N}),getStaticData:async C=>({props:{dynamicMarkdocComponents:["openapi"],baseSlug:C.baseSlug,seo:s["x-metadata"]?.seo||{title:s.name,description:s.description},itemId:b,disableAutoScroll:!0}})})}if(!o.length)continue;const J=t.key!==""&&!!t.sourceInstance,de=J&&I&&t.sourceInstance?be(t.sourceInstance,I):{},le=J?{}:{...x.length>0?{instanceCount:x.length}:{},...x.length===0&&xe(y)?{isTemplate:!0}:{}},V=t.definition?.info?.title;o[0]={...o[0],metadata:{type:"openapi",...z,...de,...le},hasClientRoutes:!0,getSidebar:(s,b)=>{const D=[];return ye({contentItems:oe,sidebarItems:D,routeSlug:s.slug,navItem:b}),V&&D.length>0&&D[0]&&!b?.label&&(D[0].label=V),D},getNavText:()=>V||A?.title,getSearchDocuments:De($,q,L,e.getSearchFacets,e.setSearchFacets,N)},I&&t.key===""&&(T[I]={slug:o[0]?.slug||""});const fe=o[0];o[0]=o[o.length-1],o[o.length-1]=fe;const ue=te.isDevelopMode?d:void 0,G=`${Se}${F}::${t.id}`;i[d]=[...i[d]||[],G],r[G]={fsPath:F,definition:t.definition,options:ne,instances:W,currentInstanceKey:t.key,sourcePath:ue,routesMapping:_,hash:ae};for(const s of o)e.addRoute({...s,sharedData:[{id:G,key:"openAPIDocsStore"}],serverPropsGetterIds:P?[m,p]:[m]})}}e.setGlobalData({apiProducts:T})})},afterRoutesCreated:async(e,c)=>{const l=w.startTiming("Parsing openapi markdoc chunks..."),u=new Set;for(const{chunks:p,relativePath:n,isVirtual:P,realRelativePath:v}of a){const h=(await c.cache.load(v,"load-oas")).compoundHash,B=i[n]||[];await c.cache.load(n,{loader:async function(){for(const{node:T,markdown:S,key:y,relativePath:g}of p){const{ast:d}=await e.parseMarkdoc({content:S,relativePath:g,isVirtual:P},c,{sharedDataIds:B});T[`x-parsed-md-${y}`]={result:d}}},name:"openapi-markdoc-inline-parser"},[h]);for(const{pointer:E}of p)u.add(E)}w.infoTime(l,"Parsing openapi markdoc chunks...");const m=f.difference(u);for(const p of m)c.cache.delete(p);f=u;for(const[p,n]of Object.entries(r)){for(const P of n.instances||[]){const v=P.routePrefix?`${n.fsPath.replace(/\.[^.]+$/,"")}/${P.routePrefix}`:n.fsPath,h=e.getRouteByFsPath(v);h&&(P.baseSlug=h.baseSlug)}await e.createSharedData(p,{...n,baseSlug:e.getRouteByFsPath(n.fsPath)?.baseSlug},n.hash)}}}}function Le(a,r){const i=[{id:"default",key:"",title:"Default",routePrefix:"",definition:a}],f=new Set;for(const e of r){const c=Ve(e.key)||"instance";let l=`instances/${c}`,u=2;for(;f.has(l);)l=`instances/${c}-${u}`,u++;f.add(l);const m=Oe(a,e.variables),p=e.title?{...m,info:{...m.info||{},title:e.title}}:m;i.push({id:`instance-${l.replace(/[\/:]/g,"-")}`,key:e.key,title:e.title,summary:e.summary,tags:e.tags,routePrefix:l,definition:p,sourceInstance:e})}return i}function $e(a,r){const i=a.split("#")[0]+"/";return r?Y("/",r,i):i}function Ne(a,r){if(!r)return a;const[i="",f]=a.split("#"),e=Y("/",r,i||"/");return f?`${e}#${f}`:e}function Ve(a){return a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").replace(/-+$/,"")}export{at as openAPIDocsPlugin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/realm",
3
- "version": "0.130.0-custom.18",
3
+ "version": "0.130.0-custom.19",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -92,13 +92,13 @@
92
92
  "yaml-ast-parser": "0.0.43",
93
93
  "zod": "^3.25.76",
94
94
  "@redocly/asyncapi-docs": "1.7.0-custom.2",
95
- "@redocly/config": "0.43.0-custom.1",
96
- "@redocly/portal-legacy-ui": "0.14.0-next.0",
95
+ "@redocly/graphql-docs": "1.7.0-custom.2",
97
96
  "@redocly/openapi-docs": "3.18.0-custom.1",
98
- "@redocly/theme": "0.62.0-custom.2",
97
+ "@redocly/config": "0.43.0-custom.1",
98
+ "@redocly/portal-plugin-mock-server": "0.16.0-next.4",
99
99
  "@redocly/realm-asyncapi-sdk": "0.9.0-next.1",
100
- "@redocly/graphql-docs": "1.7.0-custom.2",
101
- "@redocly/portal-plugin-mock-server": "0.16.0-next.4"
100
+ "@redocly/portal-legacy-ui": "0.14.0-next.0",
101
+ "@redocly/theme": "0.62.0-custom.2"
102
102
  },
103
103
  "peerDependencies": {
104
104
  "react": "^19.2.4",