UNPKG

vitepress-plugin-sidebar-permalink

Version:
2 lines (1 loc) 4.34 kB
"use strict";const h=require("fs"),g=require("path"),k=require("gray-matter"),vite=require("vite"),e=require("picocolors");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const h__default=_interopDefaultCompat(h),g__default=_interopDefaultCompat(g),k__default=_interopDefaultCompat(k),e__default=_interopDefaultCompat(e),version="1.5.17",logger=vite.createLogger("info",{prefix:`[vitepress-plugin-sidebar-permalink v${version}]`}),info=(t,n="green",r={timestamp:!0})=>{logger.info(e__default[n](t),r)},warn=(t,n="yellow",r={timestamp:!0})=>{logger.warn(e__default[n](t),r)},warnOnce=(t,n="yellow",r={timestamp:!0})=>{logger.info(e__default[n](t),r)},error=(t,n="red",r={timestamp:!0})=>{logger.error(e__default[n](t),r)},j={info,warn,warnOnce,error},getTitleFromMd=t=>{const n=t.trimStart().split(/\r?\n/);for(const r of n)if(r.startsWith("# "))return r.substring(2).trim()},isIllegalIndex=t=>isNaN(t)||t<0,isSome=(t,n)=>t.some(r=>r===n||r instanceof RegExp&&r.test(n));function isExternalLink(t){return!!(!t||/^https?:\/\//i.test(t)||/^(mailto:|tel:)/i.test(t)||!t.startsWith("/pages")&&!t.startsWith("/"))}function getAllMdFiles(t,n=t,r=[]){const d=h__default.readdirSync(t);let p=[];for(const u of d){const l=g__default.join(t,u),f=g__default.relative(n,l);if(h__default.statSync(l).isDirectory()){if(r.includes(u))continue;p=p.concat(getAllMdFiles(l,n,r))}else u.endsWith(".md")&&p.push(f.replace(/\\/g,"/"))}return p}function collectPrivatePermalinks(t,n){const r=getAllMdFiles(t,t,n),d=[];for(const p of r){const u=g__default.join(t,p),l=h__default.readFileSync(u,"utf-8"),{data:f}=k__default(l),a=f;a.private===!0&&a.permalink&&d.push(a.permalink)}return d}function itemsWithStyle(t,n,r,d={collapsed:!0},p){const u=h__default.readdirSync(t,{withFileTypes:!0});let l=[];const f=[],a=[];for(const s of u)s.isDirectory()?f.push(s):s.isFile()&&s.name.endsWith(".md")&&a.push(s);f.sort((s,m)=>{const c=parseInt(s.name.match(/^\d+/)?.[0]||"999999",10),o=parseInt(m.name.match(/^\d+/)?.[0]||"999999",10);return c-o});for(const s of f){let m=s.name.replace(/^[\d]+\.?\s*/,"");const c=itemsWithStyle(g__default.join(t,s.name),n,r,d);if(c.length){const o={text:m,items:c};d.collapsed&&(o.collapsed=!0),l.push(o)}}a.sort((s,m)=>{const c=parseInt(s.name.match(/^\d+/)?.[0]||"999999",10),o=parseInt(m.name.match(/^\d+/)?.[0]||"999999",10);return c-o});for(const s of a){const m=g__default.join(t,s.name),c=h__default.readFileSync(m,"utf-8"),{data:o}=k__default(c);let y=o.title||s.name.replace(/\.md$/,"");y=y.replace(/^\d+\.?\s*/,"");const S=g__default.relative(n,m).replace(/\\/g,"/").replace(/\.md$/,"");let i=o.permalink;if(typeof i=="string"&&i.trim())i=i.trim(),i.startsWith("/")||(i="/"+i),i=i.replace(/\/$/,""),i=i.replace(/\.md$/,"");else{const F=S+".md";i=r[F]||"/"+S,i=i.replace(/\.md$/,""),i.startsWith("/")||(i="/"+i)}l.push({text:y,link:i,activeMatch:i})}return l}function genSidebar(t,n,r,d={collapsed:!0}){const p={};for(const u of t){if(isExternalLink(u.link))continue;const l=u.link.replace(/^[\/]/,"").replace(/[\/]$/,"").replace(/\.md$/,""),f=Object.entries(r).filter(([,a])=>a.replace(/^[\/]/,"").replace(/\.md$/,"")===l).map(([a])=>a);if(f.length){const a=f.reduce((o,y)=>o.length>y.length?o:y),s=n.split(/[\\/]/)[1],m=g__default.dirname(a).replace(new RegExp("^[/\\\\]?"+s+"[\\\\/]"),"").split(/[\\/]/)[0],c=g__default.join(n,m);if(h__default.existsSync(c)&&h__default.statSync(c).isDirectory()){let o=function(y){const S=h__default.readdirSync(y,{withFileTypes:!0});for(const i of S){const F=g__default.join(y,i.name);if(i.isDirectory())o(F);else if(i.isFile()&&i.name.endsWith(".md")){const v=h__default.readFileSync(F,"utf-8"),{data:$}=k__default(v);if($.article===!1)continue;let x=$.permalink||"";if(typeof x=="string"&&x.trim()){x=x.trim(),x=x.replace(/^\/+|\/+$/g,"");const I=`${x}.md`,W=itemsWithStyle(c,n,r,d);p[I]=W}}}};o(c)}}}return j.info("Injected Sidebar Data Successfully. \u6CE8\u5165\u4FA7\u8FB9\u680F\u6570\u636E\u6210\u529F!"),p}exports.collectPrivatePermalinks=collectPrivatePermalinks,exports.genSidebar=genSidebar,exports.getAllMdFiles=getAllMdFiles,exports.getTitleFromMd=getTitleFromMd,exports.isExternalLink=isExternalLink,exports.isIllegalIndex=isIllegalIndex,exports.isSome=isSome,exports.itemsWithStyle=itemsWithStyle,exports.j=j,exports.logger=logger;