mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-10 19:54:57 +02:00
138 lines
5.4 KiB
JavaScript
138 lines
5.4 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.getBlogPostAuthors = exports.getAuthorsMap = exports.validateAuthorsMap = void 0;
|
|
const utils_1 = require("@docusaurus/utils");
|
|
const utils_validation_1 = require("@docusaurus/utils-validation");
|
|
const AuthorsMapSchema = utils_validation_1.Joi.object()
|
|
.pattern(utils_validation_1.Joi.string(), utils_validation_1.Joi.object({
|
|
name: utils_validation_1.Joi.string(),
|
|
url: utils_validation_1.URISchema,
|
|
imageURL: utils_validation_1.URISchema,
|
|
title: utils_validation_1.Joi.string(),
|
|
email: utils_validation_1.Joi.string(),
|
|
})
|
|
.rename('image_url', 'imageURL')
|
|
.or('name', 'imageURL')
|
|
.unknown()
|
|
.required()
|
|
.messages({
|
|
'object.base': '{#label} should be an author object containing properties like name, title, and imageURL.',
|
|
'any.required': '{#label} cannot be undefined. It should be an author object containing properties like name, title, and imageURL.',
|
|
}))
|
|
.messages({
|
|
'object.base': "The authors map file should contain an object where each entry contains an author key and the corresponding author's data.",
|
|
});
|
|
function validateAuthorsMap(content) {
|
|
const { error, value } = AuthorsMapSchema.validate(content);
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
return value;
|
|
}
|
|
exports.validateAuthorsMap = validateAuthorsMap;
|
|
async function getAuthorsMap(params) {
|
|
return (0, utils_1.getDataFileData)({
|
|
filePath: params.authorsMapPath,
|
|
contentPaths: params.contentPaths,
|
|
fileType: 'authors map',
|
|
}, validateAuthorsMap);
|
|
}
|
|
exports.getAuthorsMap = getAuthorsMap;
|
|
function normalizeImageUrl({ imageURL, baseUrl, }) {
|
|
return imageURL?.startsWith('/')
|
|
? (0, utils_1.normalizeUrl)([baseUrl, imageURL])
|
|
: imageURL;
|
|
}
|
|
// Legacy v1/early-v2 front matter fields
|
|
// We may want to deprecate those in favor of using only frontMatter.authors
|
|
function getFrontMatterAuthorLegacy({ baseUrl, frontMatter, }) {
|
|
const name = frontMatter.author;
|
|
const title = frontMatter.author_title ?? frontMatter.authorTitle;
|
|
const url = frontMatter.author_url ?? frontMatter.authorURL;
|
|
const imageURL = normalizeImageUrl({
|
|
imageURL: frontMatter.author_image_url ?? frontMatter.authorImageURL,
|
|
baseUrl,
|
|
});
|
|
if (name || title || url || imageURL) {
|
|
return {
|
|
name,
|
|
title,
|
|
url,
|
|
imageURL,
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|
|
function normalizeFrontMatterAuthors(frontMatterAuthors = []) {
|
|
function normalizeAuthor(authorInput) {
|
|
if (typeof authorInput === 'string') {
|
|
// Technically, we could allow users to provide an author's name here, but
|
|
// we only support keys, otherwise, a typo in a key would fallback to
|
|
// becoming a name and may end up unnoticed
|
|
return { key: authorInput };
|
|
}
|
|
return authorInput;
|
|
}
|
|
return Array.isArray(frontMatterAuthors)
|
|
? frontMatterAuthors.map(normalizeAuthor)
|
|
: [normalizeAuthor(frontMatterAuthors)];
|
|
}
|
|
function getFrontMatterAuthors(params) {
|
|
const { authorsMap } = params;
|
|
const frontMatterAuthors = normalizeFrontMatterAuthors(params.frontMatter.authors);
|
|
function getAuthorsMapAuthor(key) {
|
|
if (key) {
|
|
if (!authorsMap || Object.keys(authorsMap).length === 0) {
|
|
throw new Error(`Can't reference blog post authors by a key (such as '${key}') because no authors map file could be loaded.
|
|
Please double-check your blog plugin config (in particular 'authorsMapPath'), ensure the file exists at the configured path, is not empty, and is valid!`);
|
|
}
|
|
const author = authorsMap[key];
|
|
if (!author) {
|
|
throw Error(`Blog author with key "${key}" not found in the authors map file.
|
|
Valid author keys are:
|
|
${Object.keys(authorsMap)
|
|
.map((validKey) => `- ${validKey}`)
|
|
.join('\n')}`);
|
|
}
|
|
return author;
|
|
}
|
|
return undefined;
|
|
}
|
|
function toAuthor(frontMatterAuthor) {
|
|
return {
|
|
// Author def from authorsMap can be locally overridden by front matter
|
|
...getAuthorsMapAuthor(frontMatterAuthor.key),
|
|
...frontMatterAuthor,
|
|
};
|
|
}
|
|
return frontMatterAuthors.map(toAuthor);
|
|
}
|
|
function fixAuthorImageBaseURL(authors, { baseUrl }) {
|
|
return authors.map((author) => ({
|
|
...author,
|
|
imageURL: normalizeImageUrl({ imageURL: author.imageURL, baseUrl }),
|
|
}));
|
|
}
|
|
function getBlogPostAuthors(params) {
|
|
const authorLegacy = getFrontMatterAuthorLegacy(params);
|
|
const authors = getFrontMatterAuthors(params);
|
|
const updatedAuthors = fixAuthorImageBaseURL(authors, params);
|
|
if (authorLegacy) {
|
|
// Technically, we could allow mixing legacy/authors front matter, but do we
|
|
// really want to?
|
|
if (updatedAuthors.length > 0) {
|
|
throw new Error(`To declare blog post authors, use the 'authors' front matter in priority.
|
|
Don't mix 'authors' with other existing 'author_*' front matter. Choose one or the other, not both at the same time.`);
|
|
}
|
|
return [authorLegacy];
|
|
}
|
|
return updatedAuthors;
|
|
}
|
|
exports.getBlogPostAuthors = getBlogPostAuthors;
|