From 4db0c620de4af0412167d080c833de70c53ee800 Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Sun, 6 Mar 2022 13:09:10 +0800 Subject: [PATCH] refactor: enable a few TS flags (#6852) * refactor: enable a few TS flags * refactor * revert to working version * fix * better * change --- packages/docusaurus-logger/src/index.ts | 4 +- .../src/remark/toc/index.ts | 2 +- .../docusaurus-migrate/src/frontMatter.ts | 6 +-- packages/docusaurus-migrate/src/index.ts | 4 +- packages/docusaurus-migrate/src/transform.ts | 8 ++- .../src/blogUtils.ts | 8 +-- .../src/index.ts | 4 +- .../src/translations.ts | 13 +++-- .../src/docs.ts | 2 +- .../src/sidebars/index.ts | 2 +- .../src/sidebars/utils.ts | 8 +-- .../src/translations.ts | 8 ++- .../src/versions.ts | 4 +- .../src/index.ts | 2 +- .../docusaurus-theme-classic/src/index.ts | 2 +- .../src/theme/BackToTopButton/index.tsx | 2 +- .../src/theme/BlogPostItem/index.tsx | 2 +- .../src/theme/CodeBlock/index.tsx | 4 +- .../src/theme/ColorModeToggle/index.tsx | 6 +-- .../src/theme/DocItem/index.tsx | 2 +- .../src/theme/DocPage/index.tsx | 10 ++-- .../src/theme/DocSidebar/index.tsx | 6 +-- .../src/theme/Footer/index.tsx | 2 +- .../src/theme/Heading/index.tsx | 4 +- .../src/theme/LayoutHead/index.tsx | 2 +- .../src/theme/Navbar/index.tsx | 4 +- .../LocaleDropdownNavbarItem/index.tsx | 2 +- .../src/theme/TOCCollapsible/index.tsx | 2 +- .../src/theme/Tabs/index.tsx | 8 +-- .../src/theme/Tag/index.tsx | 4 +- .../src/translations.ts | 16 ++++-- .../docusaurus-theme-classic/tsconfig.json | 2 +- .../src/components/Details/index.tsx | 2 +- .../src/utils/codeBlockUtils.ts | 4 +- .../DocsPreferredVersionProvider.tsx | 2 +- .../useDocsPreferredVersion.ts | 6 +-- .../src/utils/tagsUtils.ts | 6 +-- .../src/utils/tocUtils.ts | 2 +- .../src/utils/useContextualSearchFilters.ts | 4 +- .../src/utils/usePluralForm.ts | 4 +- .../src/utils/useTOCHighlight.ts | 2 +- .../src/theme/SearchPage/index.tsx | 4 +- .../src/applyTrailingSlash.ts | 2 +- packages/docusaurus-utils/src/constants.ts | 4 +- .../docusaurus-utils/src/markdownLinks.ts | 7 +-- .../docusaurus-utils/src/markdownParser.ts | 11 ++-- packages/docusaurus-utils/src/tags.ts | 4 +- packages/docusaurus-utils/src/urlUtils.ts | 11 +++- packages/docusaurus/src/choosePort.ts | 2 +- .../src/client/PendingNavigation.tsx | 4 +- .../src/client/exports/ComponentCreator.tsx | 16 +++--- .../src/client/exports/ErrorBoundary.tsx | 4 +- .../src/client/exports/Translate.tsx | 2 +- packages/docusaurus/src/client/flat.ts | 3 +- packages/docusaurus/src/client/prefetch.ts | 6 +-- .../docusaurus/src/client/serverEntry.tsx | 2 +- .../src/client/theme-fallback/Root/index.tsx | 6 +-- packages/docusaurus/src/commands/build.ts | 4 +- .../src/commands/swizzle/context.ts | 2 +- packages/docusaurus/src/server/brokenLinks.ts | 2 +- packages/docusaurus/src/server/index.ts | 12 ++--- .../docusaurus/src/server/plugins/index.ts | 4 +- packages/docusaurus/src/server/routes.ts | 4 +- .../docusaurus/src/server/themes/index.ts | 6 +-- .../translations/translationsExtractor.ts | 2 +- .../src/webpack/plugins/ChunkAssetPlugin.ts | 11 ++-- .../src/webpack/plugins/LogPlugin.ts | 2 +- packages/docusaurus/tsconfig.json | 1 - packages/lqip-loader/src/index.ts | 4 +- packages/lqip-loader/src/lqip.ts | 5 +- tsconfig.json | 50 +++++++++++-------- 71 files changed, 210 insertions(+), 174 deletions(-) diff --git a/packages/docusaurus-logger/src/index.ts b/packages/docusaurus-logger/src/index.ts index 6937ddde6d..041d1d04b4 100644 --- a/packages/docusaurus-logger/src/index.ts +++ b/packages/docusaurus-logger/src/index.ts @@ -21,8 +21,8 @@ function interpolate( ): string { let res = ''; values.forEach((value, idx) => { - const flag = msgs[idx].match(/[a-z]+=$/); - res += msgs[idx].replace(/[a-z]+=$/, ''); + const flag = msgs[idx]!.match(/[a-z]+=$/); + res += msgs[idx]!.replace(/[a-z]+=$/, ''); const format = (() => { if (!flag) { return (a: string | number) => a; diff --git a/packages/docusaurus-mdx-loader/src/remark/toc/index.ts b/packages/docusaurus-mdx-loader/src/remark/toc/index.ts index 34657e633f..0e25a5a462 100644 --- a/packages/docusaurus-mdx-loader/src/remark/toc/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/toc/index.ts @@ -94,7 +94,7 @@ export default function plugin(options: PluginOptions = {}): Transformer { const targetIndex = getOrCreateExistingTargetIndex(children, name); if (headings && headings.length) { - children[targetIndex].value = `export const ${name} = ${stringifyObject( + children[targetIndex]!.value = `export const ${name} = ${stringifyObject( headings, )};`; } diff --git a/packages/docusaurus-migrate/src/frontMatter.ts b/packages/docusaurus-migrate/src/frontMatter.ts index 45e71c94a2..4905863cf5 100644 --- a/packages/docusaurus-migrate/src/frontMatter.ts +++ b/packages/docusaurus-migrate/src/frontMatter.ts @@ -37,8 +37,8 @@ export default function extractMetadata(content: string): Data { // New line characters => to handle all operating systems. const lines = (both.header ?? '').split(/\r?\n/); - for (let i = 0; i < lines.length - 1; i += 1) { - const keyValue = lines[i].split(':'); + lines.slice(0, -1).forEach((line) => { + const keyValue = line.split(':') as [string, ...string[]]; const key = keyValue[0].trim(); let value = keyValue.slice(1).join(':').trim(); try { @@ -47,7 +47,7 @@ export default function extractMetadata(content: string): Data { // Ignore the error as it means it's not a JSON value. } metadata[key] = value; - } + }); return {metadata, rawContent: both.content}; } diff --git a/packages/docusaurus-migrate/src/index.ts b/packages/docusaurus-migrate/src/index.ts index 4d1884038e..b7480640b3 100644 --- a/packages/docusaurus-migrate/src/index.ts +++ b/packages/docusaurus-migrate/src/index.ts @@ -535,7 +535,7 @@ async function migrateVersionedSidebar( // Order matters: if a sidebar file doesn't exist, we have to use the // previous version's for (let i = 0; i < versions.length; i += 1) { - const version = versions[i]; + const version = versions[i]!; let sidebarEntries: SidebarEntries; const sidebarPath = path.join( siteDir, @@ -545,7 +545,7 @@ async function migrateVersionedSidebar( try { sidebarEntries = JSON.parse(await fs.readFile(sidebarPath, 'utf-8')); } catch { - sidebars.push({version, entries: sidebars[i - 1].entries}); + sidebars.push({version, entries: sidebars[i - 1]!.entries}); return; } const newSidebar = Object.entries(sidebarEntries).reduce( diff --git a/packages/docusaurus-migrate/src/transform.ts b/packages/docusaurus-migrate/src/transform.ts index c83bb229fd..24820cf7e9 100644 --- a/packages/docusaurus-migrate/src/transform.ts +++ b/packages/docusaurus-migrate/src/transform.ts @@ -33,6 +33,9 @@ const property = (key: string, value: ArrowFunctionExpression) => const processCallExpression = (node: ASTPath) => { const args = (node?.value?.init as CallExpression)?.arguments[0]; + if (!args) { + return; + } if (args.type === 'Literal') { if ( typeof args.value === 'string' && @@ -71,6 +74,9 @@ const processMemberExpression = (node: ASTPath) => { return; } const args = object.arguments[0]; + if (!args) { + return; + } if (args.type === 'Literal') { if (args.value === '../../core/CompLibrary.js') { const newDeclarator = jscodeshift.variableDeclarator( @@ -117,7 +123,7 @@ export default function transformer(file: string): string { } }); if (r[r.length - 1]) { - jscodeshift(r[r.length - 1].parent).insertAfter( + jscodeshift(r[r.length - 1]!.parent).insertAfter( jscodeshift.importDeclaration( [jscodeshift.importDefaultSpecifier(jscodeshift.identifier('Layout'))], jscodeshift.literal('@theme/Layout'), diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index 6ae982b7b2..39d0b70b7b 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -139,10 +139,10 @@ export function parseBlogFileName( if (dateFilenameMatch) { const {folder, text, date: dateString} = dateFilenameMatch.groups!; // Always treat dates as UTC by adding the `Z` - const date = new Date(`${dateString}Z`); - const slugDate = dateString.replace(/-/g, '/'); - const slug = `/${slugDate}/${folder}${text}`; - return {date, text, slug}; + const date = new Date(`${dateString!}Z`); + const slugDate = dateString!.replace(/-/g, '/'); + const slug = `/${slugDate}/${folder!}${text!}`; + return {date, text: text!, slug}; } const text = blogSourceRelative.replace(/(?:\/index)?\.mdx?$/, ''); const slug = `/${text}`; diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index a49529224a..a1f92f23e9 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -307,7 +307,7 @@ export default async function pluginContentBlog( ({ content: { __import: true, - path: blogItemsToMetadata[postID].source, + path: blogItemsToMetadata[postID]!.source, query: { truncated: true, }, @@ -359,7 +359,7 @@ export default async function pluginContentBlog( modules: { sidebar: aliasedSource(sidebarProp), items: items.map((postID) => { - const blogPostMetadata = blogItemsToMetadata[postID]; + const blogPostMetadata = blogItemsToMetadata[postID]!; return { content: { __import: true, diff --git a/packages/docusaurus-plugin-content-blog/src/translations.ts b/packages/docusaurus-plugin-content-blog/src/translations.ts index 09598e59ab..6459fec598 100644 --- a/packages/docusaurus-plugin-content-blog/src/translations.ts +++ b/packages/docusaurus-plugin-content-blog/src/translations.ts @@ -19,8 +19,9 @@ function translateListPage( items, metadata: { ...metadata, - blogTitle: translations.title.message, - blogDescription: translations.description.message, + blogTitle: translations.title?.message ?? page.metadata.blogTitle, + blogDescription: + translations.description?.message ?? page.metadata.blogDescription, }, }; }); @@ -52,10 +53,14 @@ export function translateContent( content: BlogContent, translationFiles: TranslationFiles, ): BlogContent { - const [{content: optionsTranslations}] = translationFiles; + if (translationFiles.length === 0) { + return content; + } + const {content: optionsTranslations} = translationFiles[0]!; return { ...content, - blogSidebarTitle: optionsTranslations['sidebar.title'].message, + blogSidebarTitle: + optionsTranslations['sidebar.title']?.message ?? content.blogSidebarTitle, blogListPaginated: translateListPage( content.blogListPaginated, optionsTranslations, diff --git a/packages/docusaurus-plugin-content-docs/src/docs.ts b/packages/docusaurus-plugin-content-docs/src/docs.ts index 5e89dd53d8..b58c4c2353 100644 --- a/packages/docusaurus-plugin-content-docs/src/docs.ts +++ b/packages/docusaurus-plugin-content-docs/src/docs.ts @@ -363,7 +363,7 @@ export function getMainDocId({ doc.unversionedId === firstDocIdOfFirstSidebar, )!; } - return docs[0]; + return docs[0]!; } return getMainDoc().unversionedId; diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts index 801a86dafd..547a7bd567 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts @@ -49,7 +49,7 @@ async function readCategoriesMetadata(contentPath: string) { const categoryToFile = _.groupBy(categoryFiles, path.dirname); return combinePromises( _.mapValues(categoryToFile, async (files, folder) => { - const [filePath] = files; + const filePath = files[0]!; if (files.length > 1) { logger.warn`There are more than one category metadata files for path=${folder}: ${files.join( ', ', diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts index a0c69020eb..1da2c7aee0 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts @@ -201,12 +201,12 @@ export function createSidebarsUtils(sidebars: Sidebars): SidebarsUtils { if (!sidebarName) { return emptySidebarNavigation(); } - if (!sidebarNameToNavigationItems[sidebarName]) { + const navigationItems = sidebarNameToNavigationItems[sidebarName]; + if (!navigationItems) { throw new Error( `Doc with ID ${docId} wants to display sidebar ${sidebarName} but a sidebar with this name doesn't exist`, ); } - const navigationItems = sidebarNameToNavigationItems[sidebarName]; const currentItemIndex = navigationItems.findIndex((item) => { if (item.type === 'doc') { return item.id === docId; @@ -263,7 +263,7 @@ export function createSidebarsUtils(sidebars: Sidebars): SidebarsUtils { if (!sidebarName) { return emptySidebarNavigation(); } - const navigationItems = sidebarNameToNavigationItems[sidebarName]; + const navigationItems = sidebarNameToNavigationItems[sidebarName]!; const currentItemIndex = navigationItems.findIndex( isCurrentCategoryGeneratedIndexItem, ); @@ -341,7 +341,7 @@ Available document ids are: getCategoryGeneratedIndexList, getCategoryGeneratedIndexNavigation, checkSidebarsDocIds, - getFirstLink: (id) => getFirstLink(sidebars[id]), + getFirstLink: (id) => getFirstLink(sidebars[id]!), }; } diff --git a/packages/docusaurus-plugin-content-docs/src/translations.ts b/packages/docusaurus-plugin-content-docs/src/translations.ts index 47e82cf3a1..49681b01ea 100644 --- a/packages/docusaurus-plugin-content-docs/src/translations.ts +++ b/packages/docusaurus-plugin-content-docs/src/translations.ts @@ -274,10 +274,14 @@ function translateVersion( translationFiles: Record, ): LoadedVersion { const versionTranslations = - translationFiles[getVersionFileName(version.versionName)].content; + translationFiles[getVersionFileName(version.versionName)]?.content; + if (!versionTranslations) { + return version; + } return { ...version, - versionLabel: versionTranslations['version.label']?.message, + versionLabel: + versionTranslations['version.label']?.message ?? version.versionLabel, sidebars: translateSidebars(version, versionTranslations), // docs: translateDocs(version.docs, versionTranslations), }; diff --git a/packages/docusaurus-plugin-content-docs/src/versions.ts b/packages/docusaurus-plugin-content-docs/src/versions.ts index 52d1c476bf..26fd63773c 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions.ts @@ -464,11 +464,11 @@ Please set the docs "sidebarPath" field in your config file to: // "last version" is not a very good concept nor api surface function getDefaultLastVersionName(versionNames: string[]) { if (versionNames.length === 1) { - return versionNames[0]; + return versionNames[0]!; } return versionNames.filter( (versionName) => versionName !== CURRENT_VERSION_NAME, - )[0]; + )[0]!; } function checkVersionsOptions( diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts index 7f80ed3678..b16949dd72 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts @@ -71,7 +71,7 @@ const plugin: Plugin<[PluginOptions?]> = (options = {}) => { if (isParent(node)) { let index = 0; while (index < node.children.length) { - const child = node.children[index]; + const child = node.children[index]!; if (matchNode(child)) { const result = transformNode(child, sync); node.children.splice(index, 1, ...result); diff --git a/packages/docusaurus-theme-classic/src/index.ts b/packages/docusaurus-theme-classic/src/index.ts index 6bccc8f88e..c401e48ddb 100644 --- a/packages/docusaurus-theme-classic/src/index.ts +++ b/packages/docusaurus-theme-classic/src/index.ts @@ -107,7 +107,7 @@ export default function docusaurusThemeClassic( prism: {additionalLanguages = []} = {}, } = themeConfig; const {customCss} = options || {}; - const {direction} = localeConfigs[currentLocale]; + const {direction} = localeConfigs[currentLocale]!; return { name: 'docusaurus-theme-classic', diff --git a/packages/docusaurus-theme-classic/src/theme/BackToTopButton/index.tsx b/packages/docusaurus-theme-classic/src/theme/BackToTopButton/index.tsx index 4c4681c24b..1a3bb4a545 100644 --- a/packages/docusaurus-theme-classic/src/theme/BackToTopButton/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BackToTopButton/index.tsx @@ -133,7 +133,7 @@ export default function BackToTopButton(): JSX.Element { ThemeClassNames.common.backToTopButton, styles.backToTopButton, { - [styles.backToTopButtonShow]: show, + [styles.backToTopButtonShow!]: show, }, )} type="button" diff --git a/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx index 6004ecf6f6..974cf93ad0 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx @@ -114,7 +114,7 @@ export default function BlogPostItem(props: Props): JSX.Element { {(tagsExists || truncated) && (