vitepress-sidebar
Version:
A VitePress auto sidebar plugin that automatically creates a simple configuration.
1 lines • 4.04 kB
JavaScript
import{readFileSync as e}from"fs";import t from"gray-matter";import{capitalizeFirst as r}from"qsu";export function generateNotTogetherMessage(e){return`These options cannot be used together: ${e.join(", ")}`}export function getValueFromFrontmatter(r,o,n){try{const n=e(r,"utf-8"),{data:a}=t(n);if(a?.[o])return a[o];const i=n.split("\n");let l=!1;for(let e=0,t=i.length;e<t;e+=1){const t=i[e].toString().replace("\r","");if(/^---$/.test(t)&&(l=!0),new RegExp(`^${o}: (.*)`).test(t)&&l)return JSON.parse(t.replace(`${o}: `,""))}}catch(e){return n}return n}export function getOrderFromFrontmatter(e,t){return parseFloat(getValueFromFrontmatter(e,"order",t.toString()))}export function getDateFromFrontmatter(e){return getValueFromFrontmatter(e,"date","0001-01-01")}export function getExcludeFromFrontmatter(e,t){return!!t&&getValueFromFrontmatter(e,t,!1)}export function formatTitle(e,t,o=!1){const n=[],a=[];let i=t;if(i=i.replace(/<[^>]*>/g,(e=>(n.push(e),""))),i=i.replace(/^(#+.*)$/gm,(e=>(a.push(e),""))),o&&!e.keepMarkdownSyntaxFromTitle&&(i=i.replace(/\*{1,2}([^*]+?)\*{1,2}/g,"$1"),i=i.replace(/_{1,2}([^_]+?)_{1,2}/g,"$1"),i=i.replace(/~{1,2}([^~]+?)~{1,2}/g,"$1"),i=i.replace(/`{1,3}([^`]+?)`{1,3}/g,"$1")),e.hyphenToSpace&&(i=i.replace(/-/g," ")),e.underscoreToSpace&&(i=i.replace(/_/g," ")),e.capitalizeEachWords){let e="";for(let t=0;t<i.length;t+=1)0!==t&&/[a-zA-Z0-9]/.test(e)||!/[a-z]/.test(i[t])||(i=i.slice(0,t)+i[t].toUpperCase()+i.slice(t+1)),e=i[t]}else e.capitalizeFirst&&(i=r(i));let l=-1,s=-1;return i=i.replace(new RegExp("","g"),(()=>(l+=1,a[l]))),i=i.replace(new RegExp("","g"),(()=>(s+=1,n[s]))),i}export function getTitleFromMd(t,r,o,n,a){if(n)return formatTitle(o,t);if(o.useTitleFromFrontmatter){let e=getValueFromFrontmatter(r,o.frontmatterTitleFieldName||"title",void 0);if(e||(e=getValueFromFrontmatter(r,"title",void 0)),e)return a?.(),formatTitle(o,e)}if(o.useTitleFromFileHeading)try{const t=e(r,"utf-8").split("\n");for(let e=0,r=t.length;e<r;e+=1){let r=t[e].toString().replace("\r","");if(/^# /.test(r)){if(r=r.replace(/^# /,""),/\[(.*)]\(.*\)/.test(r)){const e=/(.*)?\[(.*)]\((.*)\)(.*)?/.exec(r)||"";r=e.length>0?`${e[1]||""}${e[2]||""}${e[4]||""}`:""}return a?.(),formatTitle(o,r,!0)}}}catch{return"Unknown"}return formatTitle(o,t.replace(/\.md$/,""))}export function sortByFileTypes(e,t){for(let r=0;r<e.length;r+=1)e[r].items&&e[r].items.length&&(e[r].items=sortByFileTypes(e[r].items,t));const r=e.filter((e=>Object.hasOwn(e,"items"))),o=e.filter((e=>!Object.hasOwn(e,"items")));return"top"===t?[...r,...o]:[...o,...r]}export function sortByObjectKey(e){for(let t=0;t<e.arr.length;t+=1)e.arr[t].items&&e.arr[t].items.length&&(e.arr[t].items=sortByObjectKey({...e,arr:e.arr[t].items}));const t=new Intl.Collator([],{numeric:e.numerically,sensitivity:"base"});let r;if(e.dateSortFromFrontmatter)r=e.arr.sort(((t,r)=>new Date(t[e.key]).valueOf()-new Date(r[e.key]).valueOf())),e.desc&&(r=r.reverse());else if(e.dateSortFromTextWithPrefix){const t=/^[0-9]{4}-[0-9]{2}-[0-9]{2}/g;r=e.arr.sort(((r,o)=>{const n=r[e.key].split(t)?.[0],a=o[e.key].split(t)?.[0];return new Date(n).valueOf()-new Date(a).valueOf()})),e.desc&&(r=r.reverse())}else r=e.arr.sort(((r,o)=>{const n=t.compare(r[e.key],o[e.key]);return e.desc?-n:n}));return r}export function deepDeleteKey(e,t){"object"==typeof e&&null!==e&&(Object.hasOwn(e,t)&&delete e[t],Object.keys(e).forEach((r=>{"object"==typeof e[r]&&deepDeleteKey(e[r],t)})))}export function removePrefixFromTitleAndLink(e,t){const r=e.length;for(let o=0;o<r;o+=1){const r=e[o];for(let e=0;e<Object.keys(r).length;e+=1){const o=Object.keys(r)[e];if("text"===o){if(t.prefixSeparator instanceof RegExp||-1!==r[o].indexOf(t.prefixSeparator)){const e=r[o].split(t.prefixSeparator);e.shift(),r[o]=e.join(t.prefixSeparator)}}else"items"===o&&(r[o]=removePrefixFromTitleAndLink(r[o],t))}}return e}export function debugPrint(e,t){process.stdout.write(`\n${"=".repeat(50)}\n${JSON.stringify(e,null,2)}\n${"-".repeat(50)}\n${JSON.stringify(t,null,2)}\n${"=".repeat(50)}\n\n`)}