mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-10 19:54:57 +02:00
79 lines
3.1 KiB
JavaScript
79 lines
3.1 KiB
JavaScript
/**
|
|
* 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.
|
|
*/
|
|
import { matchPath } from '@docusaurus/router';
|
|
// This code is not part of the api surface, not in ./theme on purpose
|
|
// get the data of the plugin that is currently "active"
|
|
// ie the docs of that plugin are currently browsed
|
|
// it is useful to support multiple docs plugin instances
|
|
export function getActivePlugin(allPluginData, pathname, options = {}) {
|
|
const activeEntry = Object.entries(allPluginData)
|
|
// Route sorting: '/android/foo' should match '/android' instead of '/'
|
|
.sort((a, b) => b[1].path.localeCompare(a[1].path))
|
|
.find(([, pluginData]) => !!matchPath(pathname, {
|
|
path: pluginData.path,
|
|
exact: false,
|
|
strict: false,
|
|
}));
|
|
const activePlugin = activeEntry
|
|
? { pluginId: activeEntry[0], pluginData: activeEntry[1] }
|
|
: undefined;
|
|
if (!activePlugin && options.failfast) {
|
|
throw new Error(`Can't find active docs plugin for "${pathname}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(allPluginData)
|
|
.map((plugin) => plugin.path)
|
|
.join(', ')}`);
|
|
}
|
|
return activePlugin;
|
|
}
|
|
export const getLatestVersion = (data) => data.versions.find((version) => version.isLast);
|
|
export function getActiveVersion(data, pathname) {
|
|
const lastVersion = getLatestVersion(data);
|
|
// Last version is a route like /docs/*,
|
|
// we need to match it last or it would match /docs/version-1.0/* as well
|
|
const orderedVersionsMetadata = [
|
|
...data.versions.filter((version) => version !== lastVersion),
|
|
lastVersion,
|
|
];
|
|
return orderedVersionsMetadata.find((version) => !!matchPath(pathname, {
|
|
path: version.path,
|
|
exact: false,
|
|
strict: false,
|
|
}));
|
|
}
|
|
export function getActiveDocContext(data, pathname) {
|
|
const activeVersion = getActiveVersion(data, pathname);
|
|
const activeDoc = activeVersion?.docs.find((doc) => !!matchPath(pathname, {
|
|
path: doc.path,
|
|
exact: true,
|
|
strict: false,
|
|
}));
|
|
function getAlternateVersionDocs(docId) {
|
|
const result = {};
|
|
data.versions.forEach((version) => {
|
|
version.docs.forEach((doc) => {
|
|
if (doc.id === docId) {
|
|
result[version.name] = doc;
|
|
}
|
|
});
|
|
});
|
|
return result;
|
|
}
|
|
const alternateVersionDocs = activeDoc
|
|
? getAlternateVersionDocs(activeDoc.id)
|
|
: {};
|
|
return {
|
|
activeVersion,
|
|
activeDoc,
|
|
alternateDocVersions: alternateVersionDocs,
|
|
};
|
|
}
|
|
export function getDocVersionSuggestions(data, pathname) {
|
|
const latestVersion = getLatestVersion(data);
|
|
const activeDocContext = getActiveDocContext(data, pathname);
|
|
const latestDocSuggestion = activeDocContext.alternateDocVersions[latestVersion.name];
|
|
return { latestDocSuggestion, latestVersionSuggestion: latestVersion };
|
|
}
|