UNPKG

vitepress-plugin-sidebar-permalink

Version:
2 lines (1 loc) 3.4 kB
import h from"fs";import g from"path";import x from"gray-matter";import{createLogger as M}from"vite";import k from"picocolors";const P="1.5.17",S=M("info",{prefix:`[vitepress-plugin-sidebar-permalink v${P}]`}),T=(e,n="green",t={timestamp:!0})=>{S.info(k[n](e),t)},A=(e,n="yellow",t={timestamp:!0})=>{S.warn(k[n](e),t)},L=(e,n="yellow",t={timestamp:!0})=>{S.info(k[n](e),t)},N=(e,n="red",t={timestamp:!0})=>{S.error(k[n](e),t)},v={info:T,warn:A,warnOnce:L,error:N},O=e=>{const n=e.trimStart().split(/\r?\n/);for(const t of n)if(t.startsWith("# "))return t.substring(2).trim()},R=e=>isNaN(e)||e<0,B=(e,n)=>e.some(t=>t===n||t instanceof RegExp&&t.test(n));function w(e){return!!(!e||/^https?:\/\//i.test(e)||/^(mailto:|tel:)/i.test(e)||!e.startsWith("/pages")&&!e.startsWith("/"))}function j(e,n=e,t=[]){const u=h.readdirSync(e);let l=[];for(const p of u){const c=g.join(e,p),m=g.relative(n,c);if(h.statSync(c).isDirectory()){if(t.includes(p))continue;l=l.concat(j(c,n,t))}else p.endsWith(".md")&&l.push(m.replace(/\\/g,"/"))}return l}function C(e,n){const t=j(e,e,n),u=[];for(const l of t){const p=g.join(e,l),c=h.readFileSync(p,"utf-8"),{data:m}=x(c),a=m;a.private===!0&&a.permalink&&u.push(a.permalink)}return u}function W(e,n,t,u={collapsed:!0},l){const p=h.readdirSync(e,{withFileTypes:!0});let c=[];const m=[],a=[];for(const i of p)i.isDirectory()?m.push(i):i.isFile()&&i.name.endsWith(".md")&&a.push(i);m.sort((i,f)=>{const o=parseInt(i.name.match(/^\d+/)?.[0]||"999999",10),s=parseInt(f.name.match(/^\d+/)?.[0]||"999999",10);return o-s});for(const i of m){let f=i.name.replace(/^[\d]+\.?\s*/,"");const o=W(g.join(e,i.name),n,t,u);if(o.length){const s={text:f,items:o};u.collapsed&&(s.collapsed=!0),c.push(s)}}a.sort((i,f)=>{const o=parseInt(i.name.match(/^\d+/)?.[0]||"999999",10),s=parseInt(f.name.match(/^\d+/)?.[0]||"999999",10);return o-s});for(const i of a){const f=g.join(e,i.name),o=h.readFileSync(f,"utf-8"),{data:s}=x(o);let d=s.title||i.name.replace(/\.md$/,"");d=d.replace(/^\d+\.?\s*/,"");const F=g.relative(n,f).replace(/\\/g,"/").replace(/\.md$/,"");let r=s.permalink;if(typeof r=="string"&&r.trim())r=r.trim(),r.startsWith("/")||(r="/"+r),r=r.replace(/\/$/,""),r=r.replace(/\.md$/,"");else{const $=F+".md";r=t[$]||"/"+F,r=r.replace(/\.md$/,""),r.startsWith("/")||(r="/"+r)}c.push({text:d,link:r,activeMatch:r})}return c}function q(e,n,t,u={collapsed:!0}){const l={};for(const p of e){if(w(p.link))continue;const c=p.link.replace(/^[\/]/,"").replace(/[\/]$/,"").replace(/\.md$/,""),m=Object.entries(t).filter(([,a])=>a.replace(/^[\/]/,"").replace(/\.md$/,"")===c).map(([a])=>a);if(m.length){const a=m.reduce((s,d)=>s.length>d.length?s:d),i=n.split(/[\\/]/)[1],f=g.dirname(a).replace(new RegExp("^[/\\\\]?"+i+"[\\\\/]"),"").split(/[\\/]/)[0],o=g.join(n,f);if(h.existsSync(o)&&h.statSync(o).isDirectory()){let s=function(d){const F=h.readdirSync(d,{withFileTypes:!0});for(const r of F){const $=g.join(d,r.name);if(r.isDirectory())s($);else if(r.isFile()&&r.name.endsWith(".md")){const I=h.readFileSync($,"utf-8"),{data:b}=x(I);if(b.article===!1)continue;let y=b.permalink||"";if(typeof y=="string"&&y.trim()){y=y.trim(),y=y.replace(/^\/+|\/+$/g,"");const D=`${y}.md`,E=W(o,n,t,u);l[D]=E}}}};s(o)}}}return v.info("Injected Sidebar Data Successfully. \u6CE8\u5165\u4FA7\u8FB9\u680F\u6570\u636E\u6210\u529F!"),l}export{O as a,B as b,C as c,w as d,W as e,q as f,j as g,R as i,v as j,S as l};