@redocly/realm 0.130.0-custom.13 → 0.130.0-custom.14
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,3 +1,3 @@
|
|
|
1
|
-
import{writeFileSync as tt}from"node:fs";import*as u from"path";import{withoutHash as et}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as E,SIDEBAR_PREFIX as ot,CONFIG_FILE_NAME as V}from"../../../constants/common.js";import{CATALOG_OUTPUT_FILE_NAME as at}from"../../constants/common.js";import{findDeepFirst as x}from"../../../utils/tree/find-deep-first.js";import{isDefined as X}from"../../../utils/guards/is-defined.js";import{partition as rt}from"../../../utils/array/partition.js";import{collectPropValueDeep as B}from"../../../utils/tree/collect-prop-value-deep.js";import{envConfig as it}from"../../config/env-config.js";import{isLocalLink as nt}from"../../../utils/path/is-local-link.js";import{normalizeRouteSlug as Y}from"../../../utils/path/normalize-route-slug.js";import{slash as st}from"../../../utils/path/slash.js";import{parsePathVersions as lt}from"../../../utils/path/parse-path-versions.js";import{reporter as R}from"../../tools/notifiers/reporter.js";import{logger as v}from"../../tools/notifiers/logger.js";import{sha1 as ct}from"../../utils/crypto/sha1.js";import{collectItemsLinkedToSidebars as ft,resolveItems as Z}from"../nav-utils.js";import{getExcludedFromLinkCheckerPatterns as dt,getSidebarReferences as ut,hasCircularDependency as gt}from"./utils.js";import{getLocaleFromRelativePath as mt}from"../../fs/utils/get-locale-from-relative-path.js";import{isSystemRouteSlug as pt}from"../../utils/system-routes.js";import{ENTITIES_MAP_GLOBAL_DATA_KEY as ht}from"../../constants/plugins/catalog-entities.js";import{telemetryTraceStep as St}from"../../../cli/telemetry/helpers/trace-step.js";const yt=180,bt=170,Ft=10;async function Kt({contentDir:c}){return{id:"sidebars",async afterRoutesCreated(e,f){v.info("Calculating sidebars..."),await St("build.plugin.sidebars",async()=>{const{cache:S,fs:n}=f,C=e.getConfig(),I=new Map,D=new Set,M=[E,...n.localeFolders],G=e.getGlobalData()[ht]||{},$={};let
|
|
1
|
+
import{writeFileSync as tt}from"node:fs";import*as u from"path";import{withoutHash as et}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as E,SIDEBAR_PREFIX as ot,CONFIG_FILE_NAME as V}from"../../../constants/common.js";import{CATALOG_OUTPUT_FILE_NAME as at}from"../../constants/common.js";import{findDeepFirst as x}from"../../../utils/tree/find-deep-first.js";import{isDefined as X}from"../../../utils/guards/is-defined.js";import{partition as rt}from"../../../utils/array/partition.js";import{collectPropValueDeep as B}from"../../../utils/tree/collect-prop-value-deep.js";import{envConfig as it}from"../../config/env-config.js";import{isLocalLink as nt}from"../../../utils/path/is-local-link.js";import{normalizeRouteSlug as Y}from"../../../utils/path/normalize-route-slug.js";import{slash as st}from"../../../utils/path/slash.js";import{parsePathVersions as lt}from"../../../utils/path/parse-path-versions.js";import{reporter as R}from"../../tools/notifiers/reporter.js";import{logger as v}from"../../tools/notifiers/logger.js";import{sha1 as ct}from"../../utils/crypto/sha1.js";import{collectItemsLinkedToSidebars as ft,resolveItems as Z}from"../nav-utils.js";import{getExcludedFromLinkCheckerPatterns as dt,getSidebarReferences as ut,hasCircularDependency as gt}from"./utils.js";import{getLocaleFromRelativePath as mt}from"../../fs/utils/get-locale-from-relative-path.js";import{isSystemRouteSlug as pt}from"../../utils/system-routes.js";import{ENTITIES_MAP_GLOBAL_DATA_KEY as ht}from"../../constants/plugins/catalog-entities.js";import{telemetryTraceStep as St}from"../../../cli/telemetry/helpers/trace-step.js";const yt=180,bt=170,Ft=10;async function Kt({contentDir:c}){return{id:"sidebars",async afterRoutesCreated(e,f){v.info("Calculating sidebars..."),await St("build.plugin.sidebars",async()=>{const{cache:S,fs:n}=f,C=e.getConfig(),I=new Map,D=new Set,M=[E,...n.localeFolders],G=e.getGlobalData()[ht]||{},$={};let _=n.scan(/sidebars.yaml$/).map(({relativePath:t})=>t).filter(t=>!It(C.ignore??[],t)&&t);const j=await ut(f,c,_),q=rt(_.filter(t=>!j.has(t)),t=>lt(t)?.versionFolderPath||t),T=dt(C),Q=await ft(C?.navbar,e,f,{navFile:V,excludedFromLinkCheckerPatterns:T});let P;const O=gt(j);O&&Array.isArray(O)&&await R.panicOnBuildContentError(`Sidebar references have circular dependency. Please check your sidebar files.
|
|
2
2
|
Circular dependency chain: ${O.reverse().join(" -> ")}
|
|
3
|
-
`);for(const t of q){const g=(await Promise.all(t.map(async i=>{const l=(await S.load(i,"yaml")).data;if(!Array.isArray(l)){await R.panicOnBuildContentErrorForRealFile('Invalid sidebar contents at %rp, items should be an array, got "%s"',i,n,i,typeof l);return}return{items:l,sidebarRelativePath:i,locale:mt(i)}}))).filter(X),r=(await
|
|
3
|
+
`);for(const t of q){const g=(await Promise.all(t.map(async i=>{const l=(await S.load(i,"yaml")).data;if(!Array.isArray(l)){await R.panicOnBuildContentErrorForRealFile('Invalid sidebar contents at %rp, items should be an array, got "%s"',i,n,i,typeof l);return}return{items:l,sidebarRelativePath:i,locale:mt(i)}}))).filter(X),r=(await k(g))?.firstLink;P||(P=r)}const z=Object.entries(C?.catalogClassic??{});for(const t of M){for(const[a,m]of z)await W(a,m,t);const g={},r=new Set,i=e.getAllRoutesForLocale(t);for(const a of i)if(U(a)&&a.fsPath&&!r.has(a.fsPath)){r.add(a.fsPath);let s=u.posix.dirname(a.fsPath);const d=u.parse(s).root;do g[s]=(g[s]||0)+1,s=u.dirname(s);while(s&&s!="."&&d!=s)}const l=v.startTiming("Creating automatic sidebars...");for(const a of i){if(I.has(a.slug))continue;const m=U(a),s=u.dirname(a.fsPath),d=g[s]===1,p=Dt(a.baseSlug||a.slug);m&&d?await k([{items:[{directory:s}],sidebarRelativePath:"sidebar.yaml_"+p,locale:t}]):a.getSidebar!==void 0&&await k([{items:[{page:a.fsPath}],sidebarRelativePath:"sidebar.yaml_"+p,locale:t}])}v.infoTime(l,"Creating automatic sidebars...");for(const[a,m]of z)await W(a,m,t,!0)}if(_.length===0)for(const t of M){v.verbose("Creating default sidebar");const g=t===E,r=`sidebars.yaml${g?"":"_"+t}`,i=g?"":`${n.localizationFolder}/${t}`,l=(await k([{items:[{directory:`./${i}`}],sidebarRelativePath:r,locale:t,ignoredRoutes:D}]))?.firstLink;P||(P=l)}if(!e.getRouteBySlug("/")&&!e.getConfig().redirects?.["/"]){const g=e.getAllRoutes().find(i=>!pt(i.slug)),r=P?P.link:g?.baseSlug??null;if(r){const i=et(r);e.addRedirect("/",{to:i,type:302}),v.info("Creating default redirect for index page => %s",i)}}const H=it.REDOCLY_METADATA_OUTPUT_FOLDER;H&&(v.info("Writing catalog data..."),tt(u.join(H,at),JSON.stringify($)));function U(t){return D.has(t.slug)||G[t.fsPath]}async function k(t){if(t.length===0)return;const r=(await Promise.all(t.map(async({items:d,locale:p,sidebarRelativePath:h,ignoredRoutes:L})=>{const o=await Z(d,u.dirname(u.join(c,h)),e,f,{locale:p,ignoredRoutes:L,navFile:h,excludedFromLinkCheckerPatterns:T});if(!o){await R.panicOnBuild("Failed to resolve sidebar configuration. Make sure %rp is valid",h);return}return o}))).flat().filter(X),i=B(r,"routeSlug"),l=t[0].sidebarRelativePath,a=J(l),m=new Set;for(const d of i){const p=e.getRouteBySlug(d)?.fsPath??"",h=G[p];h&&(Array.from(m).find(o=>o.key===h.key&&o.version===h.version)||m.add(h)),e.addRouteSharedData(d,"sidebar",a),I.set(Y(d),r)}const s=m.size===1?Array.from(m)[0]:void 0;return await e.createSharedData(a,{relatedNavbarItem:Q?.get(l),items:r,catalogEntity:s?{key:s.key,version:s.version}:void 0}),{firstLink:x(r,d=>!!d.link),resolved:r}}async function W(t,g,r,i=!1){const l=structuredClone(g);r&&r!==E&&l.items.forEach(o=>{o.directory=u.posix.join(n.localizationFolder||"",r,o.directory||"")});let a=await Z(l.items,c,e,f,{groupCustomSidebars:!0,locale:r,navFile:V,excludedFromLinkCheckerPatterns:T});if(!a){await R.panicOnBuild(`Failed to resolve catalog configuration. Make sure catalog ${t} has valid config`);return}const m=r===E?"":"/"+r.toLowerCase(),s=r===E?"":`-${r}`,d=Y(u.posix.join(m,l.slug));if(i)for(const o of a){const y=x(o.items||[],F=>!!F.routeSlug);if(!y?.routeSlug)continue;const b=I.get(y.routeSlug);if(!b)continue;const N=B(b,"routeSlug"),w="current-catalog-info-"+o.routeSlug+s,A={catalog:{label:l.title,titleTranslationKey:l.titleTranslationKey,link:d,icon:l?.icon},item:{label:o.metadata?.title,link:o.link,icon:o.icon}};await e.createSharedData(w,A);for(const F of N)e.addRouteSharedData(F,"current-catalog-info",w),D.add(F);const K=x(b,F=>!!F.link&&!F.external&&nt(F.link)&&(!o.version||F.version===o.version));K&&(o.sidebar=[{...K,items:void 0}])}const p={},h=new Set;for(const o of a){if(!(o.routeSlug||o.sidebar?.[0]?.routeSlug)||!o.fsPath||h.has(o.fsPath))continue;h.add(o.fsPath);const b=u.dirname(o.fsPath);p[b]=(p[b]||0)+1}if(i){const o=await e.createSharedData("catalog-"+t+s,a.flatMap(y=>{const b=u.dirname(y.fsPath??""),N=p[b]===1,w=A=>({...A,fsPath:N?b:A.fsPath??""});return y.type==="group"&&y.items?.every(A=>A.type==="group")?(y.items||[]).map(w):w(y)}));e.addRouteSharedData(d,"catalog",o),Ct(r,a,$,p)}const L=B(a,"routeSlug");for(const o of L)D.add(o)}})}}}function Ct(c,e,f,S){if(c===E)for(const n of e){const C=n.routeSlug||n.sidebar?.[0]?.routeSlug;if(!C||!n.fsPath)continue;const I=u.dirname(n.fsPath),D=S[I]===1;f[C]={link:n.link,rootFileFsPath:n.fsPath,fsPath:D?I:n.fsPath,metadata:n.metadata||{},title:n.metadata?.title||n.label||"Untitled",version:n.version||"latest"}}}function J(c){return ot+st(c)}async function Vt(c,e,f){const S=u.posix.join(u.dirname(c),e);return await f.exists(S)?J(S):(await R.panicOnBuildContentErrorForRealFile("File %rp: Failed to create relative path for sidebars.yaml using %s",c,f,c,e),null)}function It(c,e){const f=/\/?([a-zA-Z0-9-_]+\/)*sidebars?(-[a-zA-Z0-9-_]+)?\.yaml/;return c.filter(n=>f.test(n)).includes(e)}function Dt(c){const e=c.replaceAll("/","_");if(e.length>yt){const f=e.slice(0,bt),S=ct(c).slice(0,Ft).replaceAll("/","_");return f+S}else return e}export{It as isSidebarIgnored,Vt as resolveSidebarId,Kt as sidebarsPlugin};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/realm",
|
|
3
|
-
"version": "0.130.0-custom.
|
|
3
|
+
"version": "0.130.0-custom.14",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
"xpath": "0.0.34",
|
|
92
92
|
"yaml-ast-parser": "0.0.43",
|
|
93
93
|
"zod": "^3.25.76",
|
|
94
|
-
"@redocly/asyncapi-docs": "1.7.0-custom.1",
|
|
95
|
-
"@redocly/graphql-docs": "1.7.0-custom.1",
|
|
96
|
-
"@redocly/openapi-docs": "3.18.0-custom.1",
|
|
97
|
-
"@redocly/config": "0.43.0-custom.1",
|
|
98
94
|
"@redocly/portal-legacy-ui": "0.14.0-next.0",
|
|
95
|
+
"@redocly/asyncapi-docs": "1.7.0-custom.2",
|
|
96
|
+
"@redocly/config": "0.43.0-custom.1",
|
|
97
|
+
"@redocly/openapi-docs": "3.18.0-custom.1",
|
|
99
98
|
"@redocly/portal-plugin-mock-server": "0.16.0-next.4",
|
|
100
|
-
"@redocly/
|
|
101
|
-
"@redocly/realm-asyncapi-sdk": "0.9.0-next.1"
|
|
99
|
+
"@redocly/graphql-docs": "1.7.0-custom.1",
|
|
100
|
+
"@redocly/realm-asyncapi-sdk": "0.9.0-next.1",
|
|
101
|
+
"@redocly/theme": "0.62.0-custom.2"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react": "^19.2.4",
|