UNPKG

vitepress-sidebar

Version:

A VitePress auto sidebar plugin that automatically creates a simple configuration.

1 lines 6.08 kB
import{join as e,resolve as r}from"path";import{globSync as t}from"glob";import{existsSync as o,readdirSync as n,statSync as a}from"fs";import{isTrueMinimumNumberOfTimes as l,objMergeNewKey as i}from"qsu";import{debugPrint as s,deepDeleteKey as d,generateNotTogetherMessage as u,getDateFromFrontmatter as m,getExcludeFromFrontmatter as c,getOrderFromFrontmatter as p,getTitleFromMd as y,removePrefixFromTitleAndLink as F,sortByFileTypes as f,sortByObjectKey as x}from"./helper.js";function h(e,l,i,s,u){const F=t("**",{cwd:l,maxDepth:1,ignore:u.excludePattern||[],dot:!0});let P=n(l);if(u.manualSortFileNameByPriority.length>0){const e=P.filter((e=>-1!==u.manualSortFileNameByPriority?.indexOf(e))),r=P.filter((e=>-1===u.manualSortFileNameByPriority?.indexOf(e)));e.sort(((e,r)=>u.manualSortFileNameByPriority.indexOf(e)-u.manualSortFileNameByPriority.indexOf(r))),P=[...e,...r]}let g=P.map((t=>{const n=r(l,t);let d=`${i}/${t}`.replace(/\/{2}/,"/");if(d=d.endsWith("/index.md")?d.replace("index.md",""):d.replace(/\.md$/,""),u.documentRootPath&&d.startsWith(u.documentRootPath)&&(1===e&&(d=d.replace(new RegExp(`^${u.documentRootPath}`,"g"),"")),u.scanStartPath||u.resolvePath?(d=d.replace(/^\//g,""),u.scanStartPath&&(d=d.replace(new RegExp(`^${u.scanStartPath}`,"g"),"")),d=d.replace(/^\/(?!$)/g,""),"/"===d&&(d="index.md")):d.startsWith("/")||(d=`/${d}`)),d||(d="index.md"),/\.vitepress/.test(n))return null;if(/node_modules/.test(n))return null;if(1===e&&"index.md"===t&&!u.includeRootIndexFile)return null;if(1!==e&&"index.md"===t&&!u.includeFolderIndexFile)return null;if(!u.includeDotFiles&&/^\./.test(t))return null;if(!F.includes(t))return null;if(a(n).isDirectory()){let a,l=h(e+1,n,d,t,u)||[],i=!1,s=y(t,n,u,!0,(()=>{i=!0})),c=n,F=!1;const f=`${n}/index.md`,x=l.find((e=>e.text===t));return(u.useFolderLinkFromSameNameSubFile||u.convertSameNameSubFileToGroupIndexPage)&&x&&(c=r(n,`${x.text}.md`),s=y(t,c,u,!1,(()=>{i=!0})),a=u.folderLinkNotIncludesFileName?`${d}/`:x.link,l=l.filter((e=>e.text!==t))),o(f)&&(u.includeFolderIndexFile&&(F=!0),u.useFolderLinkFromIndexFile&&(F=!0,c=f,a=`${d}/index.md`),u.useFolderTitleFromIndexFile&&!i&&(F=!0,c=f,s=y("index",c,u,!1))),a&&!1!==u.includeEmptyFolder||u.includeEmptyFolder||l.length>0||F?{text:s,...a?{link:a}:{},...l.length>0?{items:l}:{},...null===u.collapsed||void 0===u.collapsed||l.length<1?{}:{collapsed:e>=u.collapseDepth&&u.collapsed},...u.sortMenusByFrontmatterOrder?{order:p(c,u.frontmatterOrderDefaultValue)}:{},...u.sortMenusByFrontmatterDate?{date:m(n)}:{}}:null}if(n.endsWith(".md")){if(c(n,u.excludeFilesByFrontmatterFieldName))return null;let e;const r=t.replace(/\.md$/,"");return e=(u.useFolderLinkFromSameNameSubFile||u.convertSameNameSubFileToGroupIndexPage)&&s===r?r:y(t,n,u,!1),{text:e,link:d,...u.sortMenusByFrontmatterOrder?{order:p(n,u.frontmatterOrderDefaultValue)}:{},...u.sortMenusByFrontmatterDate?{date:m(n)}:{}}}return null})).filter((e=>null!==e));return u.sortMenusByName&&(g=x({arr:g,key:"text",desc:u.sortMenusOrderByDescending})),u.sortMenusByFileDatePrefix&&(g=x({arr:g,key:"text",desc:u.sortMenusOrderByDescending,dateSortFromTextWithPrefix:!0,datePrefixSeparator:u.prefixSeparator})),u.sortMenusByFrontmatterOrder&&(g=x({arr:g,key:"order",desc:u.sortMenusOrderByDescending,numerically:!0}),d(g,"order")),u.sortMenusByFrontmatterDate&&(g=x({arr:g,key:"date",desc:u.sortMenusOrderByDescending,dateSortFromFrontmatter:!0}),d(g,"date")),u.sortMenusOrderNumericallyFromTitle&&(g=x({arr:g,key:"text",desc:u.sortMenusOrderByDescending,numerically:!0})),u.sortMenusOrderNumericallyFromLink&&(g=x({arr:g,key:"link",desc:u.sortMenusOrderByDescending,numerically:!0})),u.sortFolderTo&&(g=f(g,u.sortFolderTo)),g}export function generateSidebar(r){const t={},o=Array.isArray(r);let n,a,i=!1;if(arguments.length>1)throw new Error("You must pass 1 argument, see the documentation for details.");n=void 0===r?[{}]:Array.isArray(r)?r:[r];for(let r=0;r<n.length;r+=1){const o=n[r];if(l([o.sortMenusByFrontmatterOrder,o.sortMenusByName,o.sortMenusByFileDatePrefix],2))throw new Error(u(["sortMenusByFrontmatterOrder","sortMenusByName","sortMenusByFileDatePrefix"]));if(l([o.sortMenusByFrontmatterOrder,o.sortMenusOrderNumericallyFromTitle,o.sortMenusOrderNumericallyFromLink],2))throw new Error(u(["sortMenusByFrontmatterOrder","sortMenusOrderNumericallyFromTitle","sortMenusOrderNumericallyFromLink"]));if(l([o.sortMenusByFrontmatterOrder,o.sortMenusByFrontmatterDate],2))throw new Error(u(["sortMenusByFrontmatterOrder","sortMenusByFrontmatterDate"]));if(o.removePrefixAfterOrdering&&!o.prefixSeparator)throw new Error("'prefixSeparator' should not use empty string");if(o.excludeFiles||o.excludeFolders)throw new Error("'excludeFiles' and 'excludeFolders' options have been removed; use the 'excludePattern' option instead.");o.debugPrint&&!i&&(i=!0),o.documentRootPath=o?.documentRootPath??"/",/^\//.test(o.documentRootPath)||(o.documentRootPath=`/${o.documentRootPath}`),o.collapseDepth&&(o.collapsed=!0),o.prefixSeparator||(o.prefixSeparator="."),o.collapseDepth=o?.collapseDepth??1,o.manualSortFileNameByPriority=o?.manualSortFileNameByPriority??[],o.frontmatterOrderDefaultValue=o?.frontmatterOrderDefaultValue??0;let a=o.documentRootPath;o.scanStartPath&&(a=`${o.documentRootPath}/${o.scanStartPath}`.replace(/\/{2,}/g,"/").replace("/$",""));let s=h(1,e(process.cwd(),a),a,null,o);o.removePrefixAfterOrdering&&(s=F(s,o)),t[o.resolvePath||"/"]={base:o.basePath||o.resolvePath||"/",items:s?.items||(o.rootGroupText||o.rootGroupLink||!0===o.rootGroupCollapsed||!1===o.rootGroupCollapsed?[{text:o.rootGroupText,...o.rootGroupLink?{link:o.rootGroupLink}:{},items:s,...null===o.rootGroupCollapsed?{}:{collapsed:o.rootGroupCollapsed}}]:s)}}return a=o||1!==Object.keys(t).length?t:Object.values(t)[0].items,i&&s(n,a),a}export function withSidebar(e,r){let t;t=void 0===r?[{}]:Array.isArray(r)?r:[r];let o=!1;t.forEach((e=>{e?.debugPrint&&!o&&(o=!0,e.debugPrint=!1)}));const n={themeConfig:{sidebar:generateSidebar(r)}};e?.themeConfig?.sidebar&&(e.themeConfig.sidebar={});const a=i(e,n);return o&&s(r,a),a}