132 lines
4.8 KiB
JavaScript
132 lines
4.8 KiB
JavaScript
import { normalizePath } from 'vite';
|
|
export { loadEnv } from 'vite';
|
|
import { n as normalizeGlob, g as glob, c as createMarkdownRenderer, p as pMap, f as fs, m as matter, s as selectorParser } from './chunk-BssBsV50.js';
|
|
export { S as ScaffoldThemeType, b as build, z as cacheAllGitTimestamps, y as createServer, h as defineAdditionalConfig, e as defineConfig, i as defineConfigWithTheme, a as defineLoader, d as defineRoutes, w as disposeMdItInstance, A as getGitTimestamp, u as init, j as isAdditionalConfigFile, l as mergeConfig, r as resolveConfig, q as resolvePages, o as resolveSiteData, t as resolveSiteDataByRoute, k as resolveUserConfig, v as scaffold, x as serve } from './chunk-BssBsV50.js';
|
|
import path from 'node:path';
|
|
import 'tty';
|
|
import 'util';
|
|
import 'node:crypto';
|
|
import 'node:module';
|
|
import 'node:url';
|
|
import 'node:process';
|
|
import 'node:fs/promises';
|
|
import 'node:fs';
|
|
import 'fs';
|
|
import 'node:events';
|
|
import 'node:stream';
|
|
import 'node:string_decoder';
|
|
import 'path';
|
|
import 'fs/promises';
|
|
import 'timers/promises';
|
|
import 'os';
|
|
import 'node:readline';
|
|
import 'node:child_process';
|
|
import 'string_decoder';
|
|
import 'node:zlib';
|
|
import 'node:stream/promises';
|
|
import '@vue/shared';
|
|
import 'node:tty';
|
|
import 'node:util';
|
|
import 'node:http';
|
|
import 'node:timers';
|
|
import 'node:querystring';
|
|
import 'constants';
|
|
import 'stream';
|
|
import 'assert';
|
|
import 'url';
|
|
import 'module';
|
|
import '@shikijs/transformers';
|
|
import 'shiki';
|
|
import 'child_process';
|
|
import 'minisearch';
|
|
|
|
function createContentLoader(watch, options = {}) {
|
|
const config = global.VITEPRESS_CONFIG;
|
|
if (!config) {
|
|
throw new Error(
|
|
"content loader invoked without an active vitepress process, or before vitepress config is resolved."
|
|
);
|
|
}
|
|
const cache = /* @__PURE__ */ new Map();
|
|
watch = normalizeGlob(watch, config.srcDir);
|
|
return {
|
|
watch,
|
|
options: { globOptions: options.globOptions },
|
|
async load(files) {
|
|
files ??= await glob(watch, {
|
|
absolute: true,
|
|
...options.globOptions
|
|
});
|
|
const md = await createMarkdownRenderer(
|
|
config.srcDir,
|
|
config.markdown,
|
|
config.site.base,
|
|
config.logger
|
|
);
|
|
const raw = await pMap(
|
|
files,
|
|
async (file) => {
|
|
if (!file.endsWith(".md")) return null;
|
|
const timestamp = fs.statSync(file).mtimeMs;
|
|
const cached = cache.get(file);
|
|
if (cached && timestamp === cached.timestamp) return cached.data;
|
|
const src = fs.readFileSync(file, "utf-8");
|
|
const renderExcerpt = options.excerpt;
|
|
const { data: frontmatter, excerpt } = matter(
|
|
src,
|
|
typeof renderExcerpt === "string" ? { excerpt_separator: renderExcerpt } : { excerpt: renderExcerpt }
|
|
// gray-matter types are wrong
|
|
);
|
|
const url = "/" + normalizePath(path.relative(config.srcDir, file)).replace(/(^|\/)index\.md$/, "$1").replace(/\.md$/, config.cleanUrls ? "" : ".html");
|
|
const html = options.render ? await md.renderAsync(src) : void 0;
|
|
const renderedExcerpt = renderExcerpt ? excerpt && await md.renderAsync(excerpt) : void 0;
|
|
const data = {
|
|
src: options.includeSrc ? src : void 0,
|
|
html,
|
|
frontmatter,
|
|
excerpt: renderedExcerpt,
|
|
url
|
|
};
|
|
cache.set(file, { data, timestamp });
|
|
return data;
|
|
},
|
|
{ concurrency: config.buildConcurrency }
|
|
);
|
|
const filtered = raw.filter((i) => i !== null);
|
|
return options.transform?.(filtered) ?? filtered;
|
|
}
|
|
};
|
|
}
|
|
|
|
function postcssIsolateStyles({
|
|
includeFiles = [/vp-doc\.css/, /base\.css/],
|
|
ignoreFiles,
|
|
prefix = ":not(:where(.vp-raw, .vp-raw *))"
|
|
} = {}) {
|
|
const prefixNodes = selectorParser().astSync(prefix).first.nodes;
|
|
return (
|
|
/* prettier-ignore */
|
|
{
|
|
postcssPlugin: "postcss-isolate-styles",
|
|
Once(root) {
|
|
const file = root.source?.input.file;
|
|
if (file && includeFiles?.length && !includeFiles.some((re) => re.test(file))) return;
|
|
if (file && ignoreFiles?.length && ignoreFiles.some((re) => re.test(file))) return;
|
|
root.walkRules((rule) => {
|
|
if (!rule.selector || rule.selector.includes(prefix)) return;
|
|
if (rule.parent?.type === "atrule" && /\bkeyframes$/i.test(rule.parent.name)) return;
|
|
rule.selector = selectorParser((selectors) => {
|
|
selectors.each((sel) => {
|
|
if (!sel.nodes.length) return;
|
|
const insertionIndex = sel.nodes.findLastIndex((n) => n.type !== "pseudo") + 1;
|
|
sel.nodes.splice(insertionIndex, 0, ...prefixNodes.map((n) => n.clone()));
|
|
});
|
|
}).processSync(rule.selector);
|
|
});
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export { createContentLoader, createMarkdownRenderer, postcssIsolateStyles };
|