mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-09 19:44:56 +02:00
154 lines
5.3 KiB
JavaScript
154 lines
5.3 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.toTagsListTagsProp = exports.toTagDocListProp = exports.toVersionMetadataProp = exports.toSidebarsProp = exports.toSidebarDocItemLinkProp = void 0;
|
|
const tslib_1 = require("tslib");
|
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
const docs_1 = require("./docs");
|
|
function toSidebarDocItemLinkProp({ item, doc, }) {
|
|
const { id, title, permalink, frontMatter: { sidebar_label: sidebarLabel, sidebar_custom_props: customProps, }, unlisted, } = doc;
|
|
return {
|
|
type: 'link',
|
|
label: sidebarLabel ?? item.label ?? title,
|
|
href: permalink,
|
|
className: item.className,
|
|
customProps: item.customProps ?? customProps,
|
|
docId: id,
|
|
unlisted,
|
|
};
|
|
}
|
|
exports.toSidebarDocItemLinkProp = toSidebarDocItemLinkProp;
|
|
function toSidebarsProp(loadedVersion) {
|
|
const docsById = (0, docs_1.createDocsByIdIndex)(loadedVersion.docs);
|
|
function getDocById(docId) {
|
|
const docMetadata = docsById[docId];
|
|
if (!docMetadata) {
|
|
throw new Error(`Invalid sidebars file. The document with id "${docId}" was used in the sidebar, but no document with this id could be found.
|
|
Available document ids are:
|
|
- ${Object.keys(docsById).sort().join('\n- ')}`);
|
|
}
|
|
return docMetadata;
|
|
}
|
|
const convertDocLink = (item) => {
|
|
const doc = getDocById(item.id);
|
|
return toSidebarDocItemLinkProp({ item, doc });
|
|
};
|
|
function getCategoryLinkHref(link) {
|
|
switch (link?.type) {
|
|
case 'doc':
|
|
return getDocById(link.id).permalink;
|
|
case 'generated-index':
|
|
return link.permalink;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function getCategoryLinkUnlisted(link) {
|
|
if (link?.type === 'doc') {
|
|
return getDocById(link.id).unlisted;
|
|
}
|
|
return false;
|
|
}
|
|
function getCategoryLinkCustomProps(link) {
|
|
switch (link?.type) {
|
|
case 'doc':
|
|
return getDocById(link.id).frontMatter.sidebar_custom_props;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function convertCategory(item) {
|
|
const { link, ...rest } = item;
|
|
const href = getCategoryLinkHref(link);
|
|
const linkUnlisted = getCategoryLinkUnlisted(link);
|
|
const customProps = item.customProps ?? getCategoryLinkCustomProps(link);
|
|
return {
|
|
...rest,
|
|
items: item.items.map(normalizeItem),
|
|
...(href && { href }),
|
|
...(linkUnlisted && { linkUnlisted }),
|
|
...(customProps && { customProps }),
|
|
};
|
|
}
|
|
function normalizeItem(item) {
|
|
switch (item.type) {
|
|
case 'category':
|
|
return convertCategory(item);
|
|
case 'ref':
|
|
case 'doc':
|
|
return convertDocLink(item);
|
|
case 'link':
|
|
default:
|
|
return item;
|
|
}
|
|
}
|
|
// Transform the sidebar so that all sidebar item will be in the
|
|
// form of 'link' or 'category' only.
|
|
// This is what will be passed as props to the UI component.
|
|
return lodash_1.default.mapValues(loadedVersion.sidebars, (items) => items.map(normalizeItem));
|
|
}
|
|
exports.toSidebarsProp = toSidebarsProp;
|
|
function toVersionDocsProp(loadedVersion) {
|
|
return Object.fromEntries(loadedVersion.docs.map((doc) => [
|
|
doc.id,
|
|
{
|
|
id: doc.id,
|
|
title: doc.title,
|
|
description: doc.description,
|
|
sidebar: doc.sidebar,
|
|
},
|
|
]));
|
|
}
|
|
function toVersionMetadataProp(pluginId, loadedVersion) {
|
|
return {
|
|
pluginId,
|
|
version: loadedVersion.versionName,
|
|
label: loadedVersion.label,
|
|
banner: loadedVersion.banner,
|
|
badge: loadedVersion.badge,
|
|
noIndex: loadedVersion.noIndex,
|
|
className: loadedVersion.className,
|
|
isLast: loadedVersion.isLast,
|
|
docsSidebars: toSidebarsProp(loadedVersion),
|
|
docs: toVersionDocsProp(loadedVersion),
|
|
};
|
|
}
|
|
exports.toVersionMetadataProp = toVersionMetadataProp;
|
|
function toTagDocListProp({ allTagsPath, tag, docs, }) {
|
|
function toDocListProp() {
|
|
const list = lodash_1.default.compact(tag.docIds.map((id) => docs.find((doc) => doc.id === id)));
|
|
// Sort docs by title
|
|
list.sort((doc1, doc2) => doc1.title.localeCompare(doc2.title));
|
|
return list.map((doc) => ({
|
|
id: doc.id,
|
|
title: doc.title,
|
|
description: doc.description,
|
|
permalink: doc.permalink,
|
|
}));
|
|
}
|
|
return {
|
|
label: tag.label,
|
|
permalink: tag.permalink,
|
|
allTagsPath,
|
|
count: tag.docIds.length,
|
|
items: toDocListProp(),
|
|
unlisted: tag.unlisted,
|
|
};
|
|
}
|
|
exports.toTagDocListProp = toTagDocListProp;
|
|
function toTagsListTagsProp(versionTags) {
|
|
return Object.values(versionTags)
|
|
.filter((tagValue) => !tagValue.unlisted)
|
|
.map((tagValue) => ({
|
|
label: tagValue.label,
|
|
permalink: tagValue.permalink,
|
|
count: tagValue.docIds.length,
|
|
}));
|
|
}
|
|
exports.toTagsListTagsProp = toTagsListTagsProp;
|