mirror of
https://github.com/andatoshiki/toshiki-notebook.git
synced 2026-06-06 09:16:45 +00:00
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import type { Plugin } from 'vite'
|
|
import { getReadingTime } from './../theme/utils'
|
|
// import { replacer } from '../../../scripts/utils'
|
|
|
|
export function MarkdownTransform(): Plugin {
|
|
return {
|
|
name: 'toshiki-notebook-md-transform',
|
|
enforce: 'pre',
|
|
async transform(code, id) {
|
|
if (!id.match(/\.md\b/)) return null
|
|
// convert links to relative
|
|
code = code.replace(/https?:\/\/note.toshiki\.dev\//g, '/')
|
|
const [_name, i] = id.split('/').slice(-2)
|
|
|
|
// convert img by applying regex
|
|
// const imgRegex = /!\[(.+?)\]\((.+?)\)/g;
|
|
// let imgMatches = imgRegex.exec(code);
|
|
// while (imgMatches) {
|
|
// const [text, link] = imgMatches.slice(1);
|
|
// code = code.replace(
|
|
// imgMatches[0],
|
|
// `<img src="${link}" alt="${text || "img"}" />`
|
|
// );
|
|
// imgMatches = imgRegex.exec(code);
|
|
// }
|
|
|
|
// convert links to components
|
|
// const linkRegex = /\[(.+?)\]\((.+?)\)/g;
|
|
// let matches = linkRegex.exec(code);
|
|
// while (matches) {
|
|
// const [text, link] = matches.slice(1);
|
|
// code = code.replace(
|
|
// matches[0],
|
|
// `<CustomLink title="${text}" href="${link}" />`
|
|
// );
|
|
// matches = linkRegex.exec(code);
|
|
// }
|
|
|
|
// cut index.md
|
|
if (_name === 'docs' && i === 'index.md') return code
|
|
|
|
// const { footer } = await getDocsMarkdown()
|
|
// code = replacer(code, footer, 'FOOTER', 'tail')
|
|
const { readTime, words } = getReadingTime(code)
|
|
code = code.replace(/(#\s.+?\n)/, `$1\n\n<PageInfo readTime="${readTime}" words="${words}"/>\n`)
|
|
|
|
return code
|
|
},
|
|
}
|
|
}
|
|
|
|
// export async function getDocsMarkdown() {
|
|
// const CopyRightSection = `
|
|
// <CopyRight/>`;
|
|
|
|
// const footer = `${CopyRightSection}\n`;
|
|
|
|
// return {
|
|
// footer,
|
|
// };
|
|
// }
|