Files
2025-07-19 19:59:04 +08:00

120 lines
5.1 KiB
JavaScript

"use strict";
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createPagesContentPaths = createPagesContentPaths;
exports.getContentPathList = getContentPathList;
exports.loadPagesContent = loadPagesContent;
const tslib_1 = require("tslib");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const path_1 = tslib_1.__importDefault(require("path"));
const utils_1 = require("@docusaurus/utils");
const frontMatter_1 = require("./frontMatter");
function createPagesContentPaths({ context, options, }) {
const { siteDir, localizationDir } = context;
return {
contentPath: path_1.default.resolve(siteDir, options.path),
contentPathLocalized: (0, utils_1.getPluginI18nPath)({
localizationDir,
pluginName: 'docusaurus-plugin-content-pages',
pluginId: options.id,
}),
};
}
function getContentPathList(contentPaths) {
return [contentPaths.contentPathLocalized, contentPaths.contentPath];
}
const isMarkdownSource = (source) => source.endsWith('.md') || source.endsWith('.mdx');
async function loadPagesContent(params) {
const { options } = params;
const pagesFiles = await (0, utils_1.Globby)(params.options.include, {
cwd: params.contentPaths.contentPath,
ignore: options.exclude,
});
async function doProcessPageSourceFile(relativeSource) {
try {
return await processPageSourceFile(relativeSource, params);
}
catch (err) {
throw new Error(`Processing of page source file path=${relativeSource} failed.`, { cause: err });
}
}
return (await Promise.all(pagesFiles.map(doProcessPageSourceFile))).filter((res) => {
return res !== undefined;
});
}
async function processPageSourceFile(relativeSource, params) {
const { context, options, contentPaths } = params;
const { siteConfig, baseUrl, siteDir, i18n } = context;
const { editUrl } = options;
// Lookup in localized folder in priority
const contentPath = await (0, utils_1.getFolderContainingFile)(getContentPathList(contentPaths), relativeSource);
const source = path_1.default.join(contentPath, relativeSource);
const aliasedSourcePath = (0, utils_1.aliasedSitePath)(source, siteDir);
const permalink = (0, utils_1.normalizeUrl)([
baseUrl,
options.routeBasePath,
(0, utils_1.encodePath)((0, utils_1.fileToPath)(relativeSource)),
]);
if (!isMarkdownSource(relativeSource)) {
return {
type: 'jsx',
permalink,
source: aliasedSourcePath,
};
}
const content = await fs_extra_1.default.readFile(source, 'utf-8');
const { frontMatter: unsafeFrontMatter, contentTitle, excerpt, } = await (0, utils_1.parseMarkdownFile)({
filePath: source,
fileContent: content,
parseFrontMatter: siteConfig.markdown.parseFrontMatter,
});
const frontMatter = (0, frontMatter_1.validatePageFrontMatter)(unsafeFrontMatter);
const pagesDirPath = await (0, utils_1.getFolderContainingFile)(getContentPathList(contentPaths), relativeSource);
const pagesSourceAbsolute = path_1.default.join(pagesDirPath, relativeSource);
function getPagesEditUrl() {
const pagesPathRelative = path_1.default.relative(pagesDirPath, path_1.default.resolve(pagesSourceAbsolute));
if (typeof editUrl === 'function') {
return editUrl({
pagesDirPath: (0, utils_1.posixPath)(path_1.default.relative(siteDir, pagesDirPath)),
pagesPath: (0, utils_1.posixPath)(pagesPathRelative),
permalink,
locale: i18n.currentLocale,
});
}
else if (typeof editUrl === 'string') {
const isLocalized = pagesDirPath === contentPaths.contentPathLocalized;
const fileContentPath = isLocalized && options.editLocalizedFiles
? contentPaths.contentPathLocalized
: contentPaths.contentPath;
const contentPathEditUrl = (0, utils_1.normalizeUrl)([
editUrl,
(0, utils_1.posixPath)(path_1.default.relative(siteDir, fileContentPath)),
]);
return (0, utils_1.getEditUrl)(pagesPathRelative, contentPathEditUrl);
}
return undefined;
}
const lastUpdatedData = await (0, utils_1.readLastUpdateData)(source, options, frontMatter.last_update);
if ((0, utils_1.isDraft)({ frontMatter })) {
return undefined;
}
const unlisted = (0, utils_1.isUnlisted)({ frontMatter });
return {
type: 'mdx',
permalink,
source: aliasedSourcePath,
title: frontMatter.title ?? contentTitle,
description: frontMatter.description ?? excerpt,
frontMatter,
lastUpdatedBy: lastUpdatedData.lastUpdatedBy,
lastUpdatedAt: lastUpdatedData.lastUpdatedAt,
editUrl: getPagesEditUrl(),
unlisted,
};
}