@redocly/asyncapi-docs
Version:
Async API docs for Redocly Realm
2 lines (1 loc) • 2.77 kB
JavaScript
import{safeSlugify as I}from"@redocly/openapi-docs/lib/utils/string.js";import{REDOCLY_TEAMS_RBAC as i}from"@redocly/config";import{addMarkdownItems as E}from"@redocly/openapi-docs/lib/services/menu/markdown.js";import{getValueFromMdParsedExtension as T}from"@redocly/openapi-docs/lib/utils/helpers.js";import{combineUrls as V}from"@redocly/theme/core/openapi";import{mapChannelToOperations as j}from"./map-channel-to-operations.js";import{navToApiItems as y}from"./nav-to-api-items.js";function G({asyncApiDoc:a,protocol:r}){var l;const u=j(a),o={},k=[],O=a.channels||{},w=a.operations||{},C=((l=a.components)===null||l===void 0?void 0:l.tags)||{};for(const[t,s]of Object.entries(u)){const e=O[t],v=e.tags||[],d=s.length>0,m=S(r,e.bindings),b=`${m.channel}s`;for(const c of v){const n=c.name,x=I(n).toLowerCase();o[n]||(o[n]=[]),o[n].push(Object.assign({label:e.title||e.address||t,type:d?"group":"link",link:x+"/"+b+"/"+t,badges:e?.["x-badges"]||[],httpVerb:m.channel,[i]:e?.[i],apiItemData:{type:"channel",id:t}},d?{items:s.map(h=>{const p=w[h];return{label:p.title||h,type:"link",link:x+"/"+b+"/"+t+"/operations/"+h,httpVerb:m[p.action]||"",action:p.action,badges:p?.["x-badges"]||[],[i]:p?.[i],apiItemData:{type:"operation",id:h}}})}:{}))}v.length||k.push(Object.assign({label:e.title||e.address||t,type:d?"group":"link",link:b+"/"+t,httpVerb:m.channel,badges:e?.["x-badges"]||[],[i]:e?.[i],apiItemData:{type:"channel",id:t}},d?{items:s.map(c=>{const n=w[c];return{label:n.title||c,type:"link",link:b+"/"+t+"/operations/"+c,httpVerb:m[n.action]||"",badges:n?.["x-badges"]||[],[i]:n?.[i],action:n.action,apiItemData:{type:"operation",id:c}}})}:{}))}for(const t in o){const s=M(C[t],I(t).toLowerCase());o[t].unshift(...s)}const g=M(a.info),f=[...Object.entries(o).map(([t,s])=>({label:t,type:"group",link:I(t).toLowerCase(),items:s})),...k];if(a["x-tagGroups"]&&a["x-tagGroups"].length>0){const t=[],s=new Map;return f.forEach(e=>{e.label&&s.set(e.label,e)}),a["x-tagGroups"].forEach(e=>{t.push({label:e.name,type:"separator",[i]:e[i]}),e.tags.forEach(v=>{const d=s.get(v);d&&t.push(d)})}),{navItems:[...g,...t],apiItems:y([...g,...t])}}return{navItems:[...g,...f],apiItems:y([...g,...f])}}function M(a,r=""){const l=E(T(a,"description")||"",r?{type:"tag",id:r}:void 0,1);function u(o){return{type:o.items.length?"group":"link",label:o.name,link:V(r,o.href),items:o.items.map(u),apiItemData:{type:"markdown",id:o.name},ast:o.ast}}return l.map(u)}const S=(a,r)=>{var l;switch(a){case"kafka":return{channel:"topic",send:"pub",receive:"sub"};case"amqp":return{channel:((l=r?.amqp)===null||l===void 0?void 0:l.is)==="routingKey"?"exch":"queue",send:"pub",receive:"cons"};default:return{channel:"channel",send:"send",receive:"receive"}}};export{G as buildMenuItems};