From c7c833fe77e48563775fa9dda9386d851670b0d5 Mon Sep 17 00:00:00 2001 From: Josh-Cena Date: Thu, 17 Jun 2021 17:47:03 +0800 Subject: [PATCH] More fixes Signed-off-by: Josh-Cena --- .../src/blogUtils.ts | 2 +- .../src/client/docsClientUtils.ts | 2 +- .../src/docs.ts | 3 +++ .../src/index.ts | 4 +++- .../src/sidebarItemsGenerator.ts | 2 +- .../src/sidebars.ts | 20 +++++++++++++++++-- .../src/versions.ts | 8 +++----- .../src/theme/ThemedImage/index.tsx | 6 +++--- .../src/theme/ThemedImage/index.tsx | 6 +++--- .../src/translations.ts | 6 +++--- .../update-code-translations.js | 5 +++-- .../src/utils/useAlternatePageUtils.ts | 10 +++++++++- .../src/applyTrailingSlash.tsx | 9 ++++----- .../src/commands/buildRemoteBranchUrl.ts | 2 +- packages/docusaurus/src/server/index.ts | 4 ++-- .../server/plugins/applyRouteTrailingSlash.ts | 2 +- 16 files changed, 59 insertions(+), 32 deletions(-) diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index b675a9684a..9a0ab75d5f 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -32,7 +32,7 @@ import {LoadContext} from '@docusaurus/types'; import {validateBlogPostFrontMatter} from './blogFrontMatter'; export function truncate(fileString: string, truncateMarker: RegExp): string { - return fileString.split(truncateMarker, 1).shift()!; + return fileString.split(truncateMarker, 1).shift() as string; } export function getSourceToPermalink( diff --git a/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts b/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts index 8e2e7d6645..ec8f92d401 100644 --- a/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts +++ b/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts @@ -75,7 +75,7 @@ export type ActiveDocContext = { }; export const getLatestVersion = (data: GlobalPluginData): Version => { - return data.versions.find((version) => version.isLast)!; + return data.versions.find((version) => version.isLast) as GlobalVersion; }; // Note: return undefined on doc-unrelated pages, diff --git a/packages/docusaurus-plugin-content-docs/src/docs.ts b/packages/docusaurus-plugin-content-docs/src/docs.ts index 114ffd82cb..29e9bf5345 100644 --- a/packages/docusaurus-plugin-content-docs/src/docs.ts +++ b/packages/docusaurus-plugin-content-docs/src/docs.ts @@ -130,6 +130,7 @@ function doProcessDocMetadata({ // Strip number prefixes by default (01-MyFolder/01-MyDoc.md => MyFolder/MyDoc) by default, // but allow to disable this behavior with frontmatterr + // eslint-disable-next-line camelcase parse_number_prefixes = true, } = frontMatter; @@ -144,6 +145,7 @@ function doProcessDocMetadata({ // ex: myDoc -> . const sourceDirName = path.dirname(source); + // eslint-disable-next-line camelcase const {filename: unprefixedFileName, numberPrefix} = parse_number_prefixes ? options.numberPrefixParser(sourceFileNameWithoutExtension) : {filename: sourceFileNameWithoutExtension, numberPrefix: undefined}; @@ -172,6 +174,7 @@ function doProcessDocMetadata({ return undefined; } // Eventually remove the number prefixes from intermediate directories + // eslint-disable-next-line camelcase return parse_number_prefixes ? stripPathNumberPrefixes(sourceDirName, options.numberPrefixParser) : sourceDirName; diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index e836ca3026..2e9e75cd3c 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -253,7 +253,9 @@ export default function pluginContentDocs( if (versionHomeDoc) { return versionHomeDoc; } else if (firstDocIdOfFirstSidebar) { - return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar)!; + return docs.find( + (doc) => doc.id === firstDocIdOfFirstSidebar, + ) as DocMetadata; } else { return docs[0]; } diff --git a/packages/docusaurus-plugin-content-docs/src/sidebarItemsGenerator.ts b/packages/docusaurus-plugin-content-docs/src/sidebarItemsGenerator.ts index da80765cde..2a2b13faf0 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebarItemsGenerator.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebarItemsGenerator.ts @@ -97,7 +97,7 @@ function parseBreadcrumb( ): {parents: string[]; tail: string} { return { parents: take(breadcrumb, breadcrumb.length - 1), - tail: last(breadcrumb)!, + tail: last(breadcrumb) as string, }; } diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars.ts b/packages/docusaurus-plugin-content-docs/src/sidebars.ts index 4c00c41ef3..dae4be2ffc 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars.ts @@ -127,7 +127,10 @@ function assertIsCategory( ); } // "collapsed" is an optional property - if (item.hasOwnProperty('collapsed') && typeof item.collapsed !== 'boolean') { + if ( + Object.prototype.hasOwnProperty.call(item, 'collapsed') && + typeof item.collapsed !== 'boolean' + ) { throw new Error( `Error loading ${JSON.stringify(item)}: "collapsed" must be a boolean.`, ); @@ -438,7 +441,20 @@ export function collectSidebarsDocIds( }); } -export function createSidebarsUtils(sidebars: Sidebars) { +export function createSidebarsUtils( + sidebars: Sidebars, +): { + getFirstDocIdOfFirstSidebar: () => string | undefined; + getSidebarNameByDocId: (docId: string) => string | undefined; + getDocNavigation: ( + docId: string, + ) => { + sidebarName: string | undefined; + previousId: string | undefined; + nextId: string | undefined; + }; + checkSidebarsDocIds: (validDocIds: string[], sidebarFilePath: string) => void; +} { const sidebarNameToDocIds = collectSidebarsDocIds(sidebars); function getFirstDocIdOfFirstSidebar(): string | undefined { diff --git a/packages/docusaurus-plugin-content-docs/src/versions.ts b/packages/docusaurus-plugin-content-docs/src/versions.ts index bc6052e180..f00b3ade18 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions.ts @@ -288,11 +288,9 @@ function createVersionMetadata({ // retro-compatible values const defaultVersionLabel = versionName === CURRENT_VERSION_NAME ? 'Next' : versionName; - const defaultVersionPathPart = isLast - ? '' - : versionName === CURRENT_VERSION_NAME - ? 'next' - : versionName; + const versionNameNotLast = + versionName === CURRENT_VERSION_NAME ? 'next' : versionName; + const defaultVersionPathPart = isLast ? '' : versionNameNotLast; const versionOptions: VersionOptions = options.versions[versionName] ?? {}; diff --git a/packages/docusaurus-theme-bootstrap/src/theme/ThemedImage/index.tsx b/packages/docusaurus-theme-bootstrap/src/theme/ThemedImage/index.tsx index d9e5961a18..82cabd332a 100644 --- a/packages/docusaurus-theme-bootstrap/src/theme/ThemedImage/index.tsx +++ b/packages/docusaurus-theme-bootstrap/src/theme/ThemedImage/index.tsx @@ -21,10 +21,10 @@ const ThemedImage = (props: Props): JSX.Element => { type SourceName = keyof Props['sources']; + const clientTheme: SourceName[] = isDarkTheme ? ['dark'] : ['light']; + const renderedSourceNames: SourceName[] = isClient - ? isDarkTheme - ? ['dark'] - : ['light'] + ? clientTheme : // We need to render both images on the server to avoid flash // See https://github.com/facebook/docusaurus/pull/3730 ['light', 'dark']; diff --git a/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx b/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx index f5d59791bc..01f8aea58c 100644 --- a/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx @@ -21,10 +21,10 @@ const ThemedImage = (props: Props): JSX.Element => { type SourceName = keyof Props['sources']; + const clientTheme: SourceName[] = isDarkTheme ? ['dark'] : ['light']; + const renderedSourceNames: SourceName[] = isClient - ? isDarkTheme - ? ['dark'] - : ['light'] + ? clientTheme : // We need to render both images on the server to avoid flash // See https://github.com/facebook/docusaurus/pull/3730 ['light', 'dark']; diff --git a/packages/docusaurus-theme-classic/src/translations.ts b/packages/docusaurus-theme-classic/src/translations.ts index 191c3a4297..c15b4f5e4f 100644 --- a/packages/docusaurus-theme-classic/src/translations.ts +++ b/packages/docusaurus-theme-classic/src/translations.ts @@ -35,7 +35,7 @@ function getNavbarTranslationFile(navbar: Navbar): TranslationFileContent { ) .keyBy((navbarItem) => `item.label.${navbarItem.label}`) .mapValues((navbarItem) => ({ - message: navbarItem.label!, + message: navbarItem.label as string, description: `Navbar item with label ${navbarItem.label}`, })) .value(); @@ -78,7 +78,7 @@ function getFooterTranslationFile(footer: Footer): TranslationFileContent { ) .keyBy((link) => `link.title.${link.title}`) .mapValues((link) => ({ - message: link.title!, + message: link.title as string, description: `The title of the footer links column with title=${link.title} in the footer`, })) .value(); @@ -90,7 +90,7 @@ function getFooterTranslationFile(footer: Footer): TranslationFileContent { ) .keyBy((linkItem) => `link.item.label.${linkItem.label}`) .mapValues((linkItem) => ({ - message: linkItem.label!, + message: linkItem.label as string, description: `The label of footer link with label=${ linkItem.label } linking to ${linkItem.to ?? linkItem.href}`, diff --git a/packages/docusaurus-theme-classic/update-code-translations.js b/packages/docusaurus-theme-classic/update-code-translations.js index d4ef57fe3e..357ee34fe7 100644 --- a/packages/docusaurus-theme-classic/update-code-translations.js +++ b/packages/docusaurus-theme-classic/update-code-translations.js @@ -10,6 +10,8 @@ const path = require('path'); const fs = require('fs-extra'); const globby = require('globby'); const {mapValues, pickBy, difference, orderBy} = require('lodash'); +// Unsafe import, should we create a package for the translationsExtractor ? +const translationsExtractor = require('@docusaurus/core/lib/server/translations/translationsExtractor'); const CodeDirPaths = [ path.join(__dirname, 'lib-next'), @@ -49,11 +51,10 @@ function logKeys(keys) { } async function extractThemeCodeMessages() { - // Unsafe import, should we create a package for the translationsExtractor ? const { globSourceCodeFilePaths, extractAllSourceCodeFileTranslations, - } = require('@docusaurus/core/lib/server/translations/translationsExtractor'); + } = translationsExtractor; const filePaths = ( await globSourceCodeFilePaths(CodeDirPaths) diff --git a/packages/docusaurus-theme-common/src/utils/useAlternatePageUtils.ts b/packages/docusaurus-theme-common/src/utils/useAlternatePageUtils.ts index 22f1e62781..bff300a634 100644 --- a/packages/docusaurus-theme-common/src/utils/useAlternatePageUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/useAlternatePageUtils.ts @@ -11,7 +11,15 @@ import {useLocation} from '@docusaurus/router'; // Permits to obtain the url of the current page in another locale // Useful to generate hreflang meta headers etc... // See https://developers.google.com/search/docs/advanced/crawling/localized-versions -export function useAlternatePageUtils() { +export function useAlternatePageUtils(): { + createUrl: ({ + locale, + fullyQualified, + }: { + locale: string; + fullyQualified: boolean; + }) => string; +} { const { siteConfig: {baseUrl, url}, i18n: {defaultLocale, currentLocale}, diff --git a/packages/docusaurus-utils-common/src/applyTrailingSlash.tsx b/packages/docusaurus-utils-common/src/applyTrailingSlash.tsx index 6ae6650642..c62d48f396 100644 --- a/packages/docusaurus-utils-common/src/applyTrailingSlash.tsx +++ b/packages/docusaurus-utils-common/src/applyTrailingSlash.tsx @@ -21,6 +21,9 @@ export default function applyTrailingSlash( function removeTrailingSlash(str: string): string { return str.endsWith('/') ? str.slice(0, -1) : str; } + function handleTrailingSlash(str: string, trailing: boolean): string { + return trailing ? addTrailingSlash(str) : removeTrailingSlash(str); + } // undefined = legacy retrocompatible behavior if (typeof trailingSlash === 'undefined') { @@ -32,10 +35,6 @@ export default function applyTrailingSlash( // Never transform '/' to '' const newPathname = - pathname === '/' - ? '/' - : trailingSlash - ? addTrailingSlash(pathname) - : removeTrailingSlash(pathname); + pathname === '/' ? '/' : handleTrailingSlash(pathname, trailingSlash); return path.replace(pathname, newPathname); } diff --git a/packages/docusaurus/src/commands/buildRemoteBranchUrl.ts b/packages/docusaurus/src/commands/buildRemoteBranchUrl.ts index 44cbc949e5..cfb1b8c03d 100644 --- a/packages/docusaurus/src/commands/buildRemoteBranchUrl.ts +++ b/packages/docusaurus/src/commands/buildRemoteBranchUrl.ts @@ -12,7 +12,7 @@ export function buildUrl( organizationName: string, projectName: string, useSSH: boolean | undefined, -) { +): string { return useSSH ? buildSshUrl(githubHost, organizationName, projectName, githubPort) : buildHttpsUrl( diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index 7a0dce4ddb..85374da4e5 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -52,7 +52,7 @@ export async function loadSiteConfig({ }: { siteDir: string; customConfigFilePath?: string; -}) { +}): Promise<{siteConfig: DocusaurusConfig; siteConfigPath: string}> { const siteConfigPathUnresolved = customConfigFilePath ?? DEFAULT_CONFIG_FILE_NAME; @@ -309,7 +309,7 @@ ${Object.keys(registry) const siteMetadata: DocusaurusSiteMetadata = { docusaurusVersion: getPackageJsonVersion( join(__dirname, '../../package.json'), - )!, + ) as string, siteVersion: getPackageJsonVersion(join(siteDir, 'package.json')), pluginVersions: {}, }; diff --git a/packages/docusaurus/src/server/plugins/applyRouteTrailingSlash.ts b/packages/docusaurus/src/server/plugins/applyRouteTrailingSlash.ts index b625a8e9e2..38d2bb0efe 100644 --- a/packages/docusaurus/src/server/plugins/applyRouteTrailingSlash.ts +++ b/packages/docusaurus/src/server/plugins/applyRouteTrailingSlash.ts @@ -11,7 +11,7 @@ import {applyTrailingSlash} from '@docusaurus/utils-common'; export default function applyRouteTrailingSlash( route: RouteConfig, trailingSlash: boolean | undefined, -) { +): RouteConfig { return { ...route, path: applyTrailingSlash(route.path, trailingSlash),