diff --git a/.eslintrc.js b/.eslintrc.js index 04e9657ae9..e30864158b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -269,6 +269,10 @@ module.exports = { ERROR, {'ts-expect-error': 'allow-with-description'}, ], + '@typescript-eslint/consistent-indexed-object-style': [ + WARNING, + 'index-signature', + ], '@typescript-eslint/consistent-type-imports': [ WARNING, {disallowTypeAnnotations: false}, diff --git a/admin/new.docusaurus.io/functionUtils/playgroundUtils.ts b/admin/new.docusaurus.io/functionUtils/playgroundUtils.ts index b8a7f84ca9..85bd7ef4bd 100644 --- a/admin/new.docusaurus.io/functionUtils/playgroundUtils.ts +++ b/admin/new.docusaurus.io/functionUtils/playgroundUtils.ts @@ -26,9 +26,11 @@ const PlaygroundDocumentationUrl = 'https://docusaurus.io/docs/playground'; export type PlaygroundName = keyof typeof PlaygroundConfigs; function isValidPlaygroundName( - playgroundName: string, + playgroundName: string | undefined, ): playgroundName is PlaygroundName { - return Object.keys(PlaygroundConfigs).includes(playgroundName); + return ( + !!playgroundName && Object.keys(PlaygroundConfigs).includes(playgroundName) + ); } export function createPlaygroundDocumentationResponse(): HandlerResponse { @@ -54,10 +56,10 @@ export function createPlaygroundResponse( } // Inspired by https://stackoverflow.com/a/3409200/82609 -function parseCookieString(cookieString: string): Record { - const result: Record = {}; +function parseCookieString(cookieString: string): {[key: string]: string} { + const result: {[key: string]: string} = {}; cookieString.split(';').forEach((cookie) => { - const [name, value] = cookie.split('='); + const [name, value] = cookie.split('=') as [string, string]; result[name.trim()] = decodeURI(value); }); return result; @@ -66,7 +68,7 @@ function parseCookieString(cookieString: string): Record { export function readPlaygroundName( event: HandlerEvent, ): PlaygroundName | undefined { - const parsedCookie: Record = event.headers.cookie + const parsedCookie: {[key: string]: string} = event.headers.cookie ? parseCookieString(event.headers.cookie) : {}; const playgroundName: string | undefined = parsedCookie[CookieName]; diff --git a/jest/snapshotPathNormalizer.ts b/jest/snapshotPathNormalizer.ts index ad642a561a..d8b2d7a14e 100644 --- a/jest/snapshotPathNormalizer.ts +++ b/jest/snapshotPathNormalizer.ts @@ -31,7 +31,7 @@ export function print( }); return serialize(error); } else if (val && typeof val === 'object') { - const normalizedValue = _.cloneDeep(val) as Record; + const normalizedValue = _.cloneDeep(val) as {[key: string]: unknown}; Object.keys(normalizedValue).forEach((key) => { normalizedValue[key] = normalizePaths(normalizedValue[key]); @@ -46,7 +46,7 @@ export function test(val: unknown): boolean { (typeof val === 'object' && val && Object.keys(val).some((key) => - shouldUpdate((val as Record)[key]), + shouldUpdate((val as {[key: string]: unknown})[key]), )) || // val.message is non-enumerable in an error (val instanceof Error && shouldUpdate(val.message)) || diff --git a/packages/create-docusaurus/src/index.ts b/packages/create-docusaurus/src/index.ts index 1562e756b5..f6b276585c 100755 --- a/packages/create-docusaurus/src/index.ts +++ b/packages/create-docusaurus/src/index.ts @@ -102,7 +102,7 @@ function isValidGitRepoUrl(gitRepoUrl: string) { return ['https://', 'git@'].some((item) => gitRepoUrl.startsWith(item)); } -async function updatePkg(pkgPath: string, obj: Record) { +async function updatePkg(pkgPath: string, obj: {[key: string]: unknown}) { const content = await fs.readFile(pkgPath, 'utf-8'); const pkg = JSON.parse(content); const newPkg = Object.assign(pkg, obj); diff --git a/packages/docusaurus-mdx-loader/src/index.ts b/packages/docusaurus-mdx-loader/src/index.ts index 38c97ccc74..ae3336d169 100644 --- a/packages/docusaurus-mdx-loader/src/index.ts +++ b/packages/docusaurus-mdx-loader/src/index.ts @@ -43,9 +43,9 @@ type Options = RemarkAndRehypePluginOptions & { removeContentTitle?: boolean; metadataPath?: string | ((filePath: string) => string); createAssets?: (metadata: { - frontMatter: Record; - metadata: Record; - }) => Record; + frontMatter: {[key: string]: unknown}; + metadata: {[key: string]: unknown}; + }) => {[key: string]: unknown}; filepath: string; }; @@ -72,7 +72,7 @@ async function readMetadataPath(metadataPath: string) { * * `{image: "./myImage.png"}` => `{image: require("./myImage.png")}` */ -function createAssetsExportCode(assets: Record) { +function createAssetsExportCode(assets: {[key: string]: unknown}) { if (Object.keys(assets).length === 0) { return 'undefined'; } diff --git a/packages/docusaurus-mdx-loader/src/mdx-loader.d.ts b/packages/docusaurus-mdx-loader/src/mdx-loader.d.ts index 99d781b436..e1fff7113e 100644 --- a/packages/docusaurus-mdx-loader/src/mdx-loader.d.ts +++ b/packages/docusaurus-mdx-loader/src/mdx-loader.d.ts @@ -9,7 +9,7 @@ import type {Plugin} from 'unified'; export type RemarkOrRehypePlugin = // eslint-disable-next-line @typescript-eslint/no-explicit-any - [Plugin, Record] | Plugin; + [Plugin, any] | Plugin; export type RemarkAndRehypePluginOptions = { remarkPlugins: RemarkOrRehypePlugin[]; rehypePlugins: RemarkOrRehypePlugin[]; diff --git a/packages/docusaurus-migrate/src/index.ts b/packages/docusaurus-migrate/src/index.ts index bbb0571433..764718fc54 100644 --- a/packages/docusaurus-migrate/src/index.ts +++ b/packages/docusaurus-migrate/src/index.ts @@ -67,7 +67,7 @@ ${ type MigrationContext = { siteDir: string; newDir: string; - deps: Record; + deps: {[key: string]: string}; shouldMigrateMdFiles: boolean; shouldMigratePages: boolean; v1Config: VersionOneConfig; @@ -83,7 +83,7 @@ export async function migrateDocusaurusProject( async function createMigrationContext(): Promise { const v1Config = importFresh(`${siteDir}/siteConfig`) as VersionOneConfig; logger.info('Starting migration from v1 to v2...'); - const deps: Record = { + const deps = { '@docusaurus/core': DOCUSAURUS_VERSION, '@docusaurus/preset-classic': DOCUSAURUS_VERSION, clsx: '^1.1.1', @@ -206,7 +206,7 @@ export function createConfigFile({ 'v1Config' | 'siteDir' | 'newDir' >): VersionTwoConfig { const siteConfig = v1Config; - const customConfigFields: Record = {}; + const customConfigFields: {[key: string]: unknown} = {}; // add fields that are unknown to v2 to customConfigFields Object.keys(siteConfig).forEach((key) => { const knownFields = [ @@ -564,7 +564,7 @@ async function migrateVersionedSidebar( }; }); return acc; - }, {} as Record>>); + }, {} as {[key: string]: Array}); return topLevel; }, {}, @@ -702,9 +702,9 @@ async function migrateLatestDocs(context: MigrationContext) { async function migratePackageFile(context: MigrationContext): Promise { const {deps, siteDir, newDir} = context; const packageFile = importFresh(`${siteDir}/package.json`) as { - scripts?: Record; - dependencies?: Record; - devDependencies?: Record; + scripts?: {[key: string]: string}; + dependencies?: {[key: string]: string}; + devDependencies?: {[key: string]: string}; [otherKey: string]: unknown; }; packageFile.scripts = { diff --git a/packages/docusaurus-migrate/src/types.ts b/packages/docusaurus-migrate/src/types.ts index 1da3391895..8a3583fcfa 100644 --- a/packages/docusaurus-migrate/src/types.ts +++ b/packages/docusaurus-migrate/src/types.ts @@ -33,8 +33,8 @@ export type SidebarEntry = export type SidebarEntries = { [key: string]: - | Record - | Array | string>; + | {[key: string]: unknown} + | Array<{[key: string]: unknown} | string>; }; export interface VersionTwoConfig { @@ -58,7 +58,7 @@ export interface VersionTwoConfig { logo?: { src?: string; }; - items: Array | null>; + items: Array<{[key: string]: unknown} | null>; }; image?: string; footer: { @@ -74,7 +74,7 @@ export interface VersionTwoConfig { src?: string; }; }; - algolia?: Record; + algolia?: {[key: string]: unknown}; }; customFields: { [key: string]: unknown; @@ -111,16 +111,16 @@ export type VersionOneConfig = { copyright?: string; editUrl?: string; customDocsPath?: string; - users?: Array>; + users?: Array<{[key: string]: unknown}>; disableHeaderTitle?: string; disableTitleTagline?: string; - separateCss?: Array>; + separateCss?: Array<{[key: string]: unknown}>; footerIcon?: string; translationRecruitingLink?: string; - algolia?: Record; + algolia?: {[key: string]: unknown}; gaTrackingId?: string; gaGtag?: boolean; - highlight?: Record; + highlight?: {[key: string]: unknown}; markdownPlugins?: Array<() => void>; scripts?: Array<{src: string; [key: string]: unknown} | string>; stylesheets?: Array<{href: string; [key: string]: unknown} | string>; @@ -133,5 +133,5 @@ export type VersionOneConfig = { ogImage?: string; cleanUrl?: boolean; scrollToTop?: boolean; - scrollToTopOptions?: Record; + scrollToTopOptions?: {[key: string]: unknown}; }; diff --git a/packages/docusaurus-module-type-aliases/src/index.d.ts b/packages/docusaurus-module-type-aliases/src/index.d.ts index d8d8b53f42..5cc70d825d 100644 --- a/packages/docusaurus-module-type-aliases/src/index.d.ts +++ b/packages/docusaurus-module-type-aliases/src/index.d.ts @@ -44,13 +44,14 @@ declare module '@generated/routes' { declare module '@generated/routesChunkNames' { import type {RouteChunksTree} from '@docusaurus/types'; - const routesChunkNames: Record; + const routesChunkNames: {[route: string]: RouteChunksTree}; export = routesChunkNames; } declare module '@generated/globalData' { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const globalData: Record; + import type {GlobalData} from '@docusaurus/types'; + + const globalData: GlobalData; export = globalData; } @@ -59,20 +60,19 @@ declare module '@generated/i18n' { defaultLocale: string; locales: [string, ...string[]]; currentLocale: string; - localeConfigs: Record< - string, - { + localeConfigs: { + [localeName: string]: { label: string; direction: string; htmlLang: string; - } - >; + }; + }; }; export = i18n; } declare module '@generated/codeTranslations' { - const codeTranslations: Record; + const codeTranslations: {[msgId: string]: string}; export = codeTranslations; } @@ -172,10 +172,9 @@ declare module '@docusaurus/Interpolate' { ? Key | ExtractInterpolatePlaceholders : never; - export type InterpolateValues< - Str extends string, - Value extends ReactNode, - > = Record, Value>; + export type InterpolateValues = { + [key in ExtractInterpolatePlaceholders]: Value; + }; // If all the values are plain strings, interpolate returns a simple string export function interpolate( @@ -320,17 +319,18 @@ declare module '@docusaurus/renderRoutes' { } declare module '@docusaurus/useGlobalData' { - export function useAllPluginInstancesData( - pluginName: string, - ): Record; + import type {GlobalData} from '@docusaurus/types'; - export function usePluginData( + export function useAllPluginInstancesData( + pluginName: string, + ): GlobalData[string]; + + export function usePluginData( pluginName: string, pluginId?: string, - ): T; + ): GlobalData[string][string]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - export default function useGlobalData(): Record; + export default function useGlobalData(): GlobalData; } declare module '*.svg' { diff --git a/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts b/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts index 557ea9c381..b7bdd7f61c 100644 --- a/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts +++ b/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts @@ -13,7 +13,7 @@ const getCompiledRedirectPageTemplate = _.memoize(() => eta.compile(redirectPageTemplate.trim()), ); -function renderRedirectPageTemplate(data: Record) { +function renderRedirectPageTemplate(data: {toUrl: string}) { const compiled = getCompiledRedirectPageTemplate(); return compiled(data, eta.defaultConfig); } diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts index 5a8dc0ebd8..99e3c694bf 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts @@ -15,11 +15,11 @@ function testField(params: { fieldName: keyof BlogPostFrontMatter; validFrontMatters: BlogPostFrontMatter[]; convertibleFrontMatter?: [ - ConvertibleFrontMatter: Record, + ConvertibleFrontMatter: {[key: string]: unknown}, ConvertedFrontMatter: BlogPostFrontMatter, ][]; invalidFrontMatters?: [ - InvalidFrontMatter: Record, + InvalidFrontMatter: {[key: string]: unknown}, ErrorMessage: string, ][]; }) { diff --git a/packages/docusaurus-plugin-content-blog/src/authors.ts b/packages/docusaurus-plugin-content-blog/src/authors.ts index 1de62ec0c8..e8e2be3231 100644 --- a/packages/docusaurus-plugin-content-blog/src/authors.ts +++ b/packages/docusaurus-plugin-content-blog/src/authors.ts @@ -15,7 +15,7 @@ import type { BlogPostFrontMatterAuthors, } from '@docusaurus/plugin-content-blog'; -export type AuthorsMap = Record; +export type AuthorsMap = {[authorKey: string]: Author}; const AuthorsMapSchema = Joi.object() .pattern( diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index 59b38a5e5e..b1823bb6d6 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -43,9 +43,9 @@ export function truncate(fileString: string, truncateMarker: RegExp): string { return fileString.split(truncateMarker, 1).shift()!; } -export function getSourceToPermalink( - blogPosts: BlogPost[], -): Record { +export function getSourceToPermalink(blogPosts: BlogPost[]): { + [aliasedPath: string]: string; +} { return Object.fromEntries( blogPosts.map(({metadata: {source, permalink}}) => [source, permalink]), ); diff --git a/packages/docusaurus-plugin-content-blog/src/deps.d.ts b/packages/docusaurus-plugin-content-blog/src/deps.d.ts index c9976d8a58..6b8b33906b 100644 --- a/packages/docusaurus-plugin-content-blog/src/deps.d.ts +++ b/packages/docusaurus-plugin-content-blog/src/deps.d.ts @@ -6,7 +6,7 @@ */ declare module 'remark-admonitions' { - type Options = Record; + type Options = {[key: string]: unknown}; const plugin: (options?: Options) => void; export = plugin; diff --git a/packages/docusaurus-plugin-content-blog/src/frontMatter.ts b/packages/docusaurus-plugin-content-blog/src/frontMatter.ts index 49a872b650..417bf1df00 100644 --- a/packages/docusaurus-plugin-content-blog/src/frontMatter.ts +++ b/packages/docusaurus-plugin-content-blog/src/frontMatter.ts @@ -74,8 +74,8 @@ const BlogFrontMatterSchema = Joi.object({ '{#label} blog frontMatter field is deprecated. Please use {#alternative} instead.', }); -export function validateBlogPostFrontMatter( - frontMatter: Record, -): BlogPostFrontMatter { +export function validateBlogPostFrontMatter(frontMatter: { + [key: string]: unknown; +}): BlogPostFrontMatter { return validateFrontMatter(frontMatter, BlogFrontMatterSchema); } diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index d8338c97ce..93cf975f8b 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -205,7 +205,7 @@ export default async function pluginContentBlog( blogTagsListPath, } = blogContents; - const blogItemsToMetadata: Record = {}; + const blogItemsToMetadata: {[postId: string]: BlogPostMetadata} = {}; const sidebarBlogPosts = options.blogSidebarCount === 'ALL' @@ -316,7 +316,7 @@ export default async function pluginContentBlog( return; } - const tagsModule: Record = Object.fromEntries( + const tagsModule: {[tagName: string]: TagModule} = Object.fromEntries( Object.entries(blogTags).map(([, tag]) => { const tagModule: TagModule = { allTagsPath: blogTagsListPath, diff --git a/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts b/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts index b369cd9786..10e4fd6547 100644 --- a/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts +++ b/packages/docusaurus-plugin-content-blog/src/plugin-content-blog.d.ts @@ -232,7 +232,7 @@ declare module '@docusaurus/plugin-content-blog' { /** * Front matter, as-is. */ - readonly frontMatter: BlogPostFrontMatter & Record; + readonly frontMatter: BlogPostFrontMatter & {[key: string]: unknown}; /** * Tags, normalized. */ @@ -301,7 +301,7 @@ declare module '@docusaurus/plugin-content-blog' { /** Markdown content. */ content: string; /** Front matter. */ - frontMatter?: BlogPostFrontMatter & Record; + frontMatter?: BlogPostFrontMatter & {[key: string]: unknown}; /** Options accepted by ngryman/reading-time. */ options?: ReadingTimeOptions; }) => number; @@ -402,7 +402,7 @@ declare module '@docusaurus/plugin-content-blog' { * unlocalized file. Ignored when `editUrl` is a function. */ editLocalizedFiles?: boolean; - admonitions: Record; + admonitions: {[key: string]: unknown}; /** Path to the authors map file, relative to the blog content directory. */ authorsMapPath: string; /** A callback to customize the reading time number displayed. */ @@ -545,7 +545,7 @@ declare module '@theme/BlogTagsListPage' { /** Blog sidebar. */ readonly sidebar: BlogSidebar; /** A map from tag names to the full tag module. */ - readonly tags: Readonly>; + readonly tags: Readonly<{[tagName: string]: TagModule}>; } export default function BlogTagsListPage(props: Props): JSX.Element; diff --git a/packages/docusaurus-plugin-content-blog/src/types.ts b/packages/docusaurus-plugin-content-blog/src/types.ts index a83cc76abf..a96390f71d 100644 --- a/packages/docusaurus-plugin-content-blog/src/types.ts +++ b/packages/docusaurus-plugin-content-blog/src/types.ts @@ -50,6 +50,6 @@ export type BlogMarkdownLoaderOptions = { siteDir: string; contentPaths: BlogContentPaths; truncateMarker: RegExp; - sourceToPermalink: Record; + sourceToPermalink: {[aliasedPath: string]: string}; onBrokenMarkdownLink: (brokenMarkdownLink: BlogBrokenMarkdownLink) => void; }; diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap index b65e9956e3..3c40354723 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap @@ -1535,10 +1535,6 @@ exports[`site with custom sidebar items generator sidebarItemsGenerator is calle "type": "autogenerated", }, "numberPrefixParser": [Function], - "options": { - "sidebarCollapsed": true, - "sidebarCollapsible": true, - }, "version": { "contentPath": "docs", "versionName": "current", diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts index eed15f0576..730e3d787e 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts @@ -43,7 +43,7 @@ const createFakeDocFile = ({ markdown = 'some markdown content', }: { source: string; - frontMatter?: Record; + frontMatter?: {[key: string]: string}; markdown?: string; }): DocFile => { const content = `--- diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts index 1fa4809c48..734e7e0bbf 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts @@ -13,11 +13,11 @@ function testField(params: { prefix: string; validFrontMatters: DocFrontMatter[]; convertibleFrontMatter?: [ - ConvertibleFrontMatter: Record, + ConvertibleFrontMatter: {[key: string]: unknown}, ConvertedFrontMatter: DocFrontMatter, ][]; invalidFrontMatters?: [ - InvalidFrontMatter: Record, + InvalidFrontMatter: {[key: string]: unknown}, ErrorMessage: string, ][]; }) { diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts index 0d6df18fe9..382b0f6365 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts @@ -52,7 +52,7 @@ Available ids are:\n- ${version.docs.map((d) => d.unversionedId).join('\n- ')}`, const createFakeActions = (contentDir: string) => { const routeConfigs: RouteConfig[] = []; - const dataContainer: Record = {}; + const dataContainer: {[key: string]: unknown} = {}; const globalDataContainer: {pluginName?: {pluginId: unknown}} = {}; const actions = { diff --git a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts index 522ae14556..b3785f6fe9 100644 --- a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts +++ b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts @@ -17,7 +17,7 @@ function getCategoryGeneratedIndexMetadata({ }: { category: SidebarItemCategoryWithGeneratedIndex; sidebarsUtils: SidebarsUtils; - docsById: Record; + docsById: {[docId: string]: DocMetadataBase}; }): CategoryGeneratedIndexMetadata { const {sidebarName, previous, next} = sidebarsUtils.getCategoryGeneratedIndexNavigation(category.link.permalink); diff --git a/packages/docusaurus-plugin-content-docs/src/client/__tests__/docsClientUtils.test.ts b/packages/docusaurus-plugin-content-docs/src/client/__tests__/docsClientUtils.test.ts index 5576af6332..9663b01462 100644 --- a/packages/docusaurus-plugin-content-docs/src/client/__tests__/docsClientUtils.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/client/__tests__/docsClientUtils.test.ts @@ -21,7 +21,7 @@ import _ from 'lodash'; describe('docsClientUtils', () => { it('getActivePlugin', () => { - const data: Record = { + const data: {[key: string]: GlobalPluginData} = { pluginIosId: { path: '/ios', versions: [], diff --git a/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts b/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts index ad40156a7e..1a07cd1807 100644 --- a/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts +++ b/packages/docusaurus-plugin-content-docs/src/client/docsClientUtils.ts @@ -23,11 +23,11 @@ import type { // ie the docs of that plugin are currently browsed // it is useful to support multiple docs plugin instances export function getActivePlugin( - allPluginDatas: Record, + allPluginData: {[pluginId: string]: GlobalPluginData}, pathname: string, options: GetActivePluginOptions = {}, ): ActivePlugin | undefined { - const activeEntry = Object.entries(allPluginDatas) + 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( @@ -46,7 +46,7 @@ export function getActivePlugin( 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( - allPluginDatas, + allPluginData, ) .map((plugin) => plugin.path) .join(', ')}`, diff --git a/packages/docusaurus-plugin-content-docs/src/client/index.ts b/packages/docusaurus-plugin-content-docs/src/client/index.ts index 5529d38739..803456fbbe 100644 --- a/packages/docusaurus-plugin-content-docs/src/client/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/client/index.ts @@ -31,7 +31,7 @@ const StableEmptyObject = {}; // Not using useAllPluginInstancesData() because in blog-only mode, docs hooks // are still used by the theme. We need a fail-safe fallback when the docs // plugin is not in use -export const useAllDocsData = (): Record => +export const useAllDocsData = (): {[pluginId: string]: GlobalPluginData} => useGlobalData()['docusaurus-plugin-content-docs'] ?? StableEmptyObject; export const useDocsData = (pluginId: string | undefined): GlobalPluginData => diff --git a/packages/docusaurus-plugin-content-docs/src/deps.d.ts b/packages/docusaurus-plugin-content-docs/src/deps.d.ts index c9976d8a58..6b8b33906b 100644 --- a/packages/docusaurus-plugin-content-docs/src/deps.d.ts +++ b/packages/docusaurus-plugin-content-docs/src/deps.d.ts @@ -6,7 +6,7 @@ */ declare module 'remark-admonitions' { - type Options = Record; + type Options = {[key: string]: unknown}; const plugin: (options?: Options) => void; export = plugin; diff --git a/packages/docusaurus-plugin-content-docs/src/docs.ts b/packages/docusaurus-plugin-content-docs/src/docs.ts index c94ff470b0..631daef5f7 100644 --- a/packages/docusaurus-plugin-content-docs/src/docs.ts +++ b/packages/docusaurus-plugin-content-docs/src/docs.ts @@ -424,7 +424,7 @@ export function getDocIds(doc: DocMetadataBase): [string, string] { // to "id") export function createDocsByIdIndex< Doc extends {id: string; unversionedId: string}, ->(docs: Doc[]): Record { +>(docs: Doc[]): {[docId: string]: Doc} { return Object.fromEntries( docs.flatMap((doc) => [ [doc.unversionedId, doc], diff --git a/packages/docusaurus-plugin-content-docs/src/frontMatter.ts b/packages/docusaurus-plugin-content-docs/src/frontMatter.ts index da4b86ca37..fe53b0573d 100644 --- a/packages/docusaurus-plugin-content-docs/src/frontMatter.ts +++ b/packages/docusaurus-plugin-content-docs/src/frontMatter.ts @@ -41,8 +41,8 @@ const DocFrontMatterSchema = Joi.object({ ...FrontMatterTOCHeadingLevels, }).unknown(); -export function validateDocFrontMatter( - frontMatter: Record, -): DocFrontMatter { +export function validateDocFrontMatter(frontMatter: { + [key: string]: unknown; +}): DocFrontMatter { return validateFrontMatter(frontMatter, DocFrontMatterSchema); } diff --git a/packages/docusaurus-plugin-content-docs/src/globalData.ts b/packages/docusaurus-plugin-content-docs/src/globalData.ts index bc974d527c..302fb77328 100644 --- a/packages/docusaurus-plugin-content-docs/src/globalData.ts +++ b/packages/docusaurus-plugin-content-docs/src/globalData.ts @@ -40,7 +40,7 @@ function toGlobalDataGeneratedIndex( function toGlobalSidebars( sidebars: Sidebars, version: LoadedVersion, -): Record { +): {[sidebarId: string]: GlobalSidebar} { const {getFirstLink} = createSidebarsUtils(sidebars); return _.mapValues(sidebars, (sidebar, sidebarId) => { const firstLink = getFirstLink(sidebarId); diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index 4e6d19f4bc..4b659f48fa 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -56,7 +56,6 @@ import type { PropTagsListPage, PluginOptions, } from '@docusaurus/plugin-content-docs'; -import type {GlobalPluginData} from '@docusaurus/plugin-content-docs/client'; import {createSidebarsUtils} from './sidebars/utils'; import {getCategoryGeneratedIndexMetadataList} from './categoryGeneratedIndex'; @@ -293,7 +292,7 @@ export default async function pluginContentDocs( // TODO tags should be a sub route of the version route await Promise.all(loadedVersions.map(createVersionTagsRoutes)); - setGlobalData({ + setGlobalData({ path: normalizeUrl([baseUrl, options.routeBasePath]), versions: loadedVersions.map(toGlobalDataVersion), breadcrumbs, diff --git a/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts b/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts index 5d7aa1e04d..3d3898e0cf 100644 --- a/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts +++ b/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts @@ -68,7 +68,7 @@ declare module '@docusaurus/plugin-content-docs' { }; export type VersionsOptions = { lastVersion?: string; - versions: Record; + versions: {[versionName: string]: VersionOptions}; onlyIncludeVersions?: string[]; }; export type SidebarOptions = { @@ -89,7 +89,7 @@ declare module '@docusaurus/plugin-content-docs' { docTagDocListComponent: string; docTagsListComponent: string; docCategoryGeneratedIndexComponent: string; - admonitions: Record; + admonitions: {[key: string]: unknown}; disableVersioning: boolean; includeCurrentVersion: boolean; sidebarItemsGenerator: import('./sidebars/types').SidebarItemsGeneratorOption; @@ -282,7 +282,7 @@ declare module '@docusaurus/plugin-content-docs/client' { export type ActiveDocContext = { activeVersion?: GlobalVersion; activeDoc?: GlobalDoc; - alternateDocVersions: Record; + alternateDocVersions: {[versionName: string]: GlobalDoc}; }; export type GlobalDoc = { id: string; @@ -297,7 +297,7 @@ declare module '@docusaurus/plugin-content-docs/client' { path: string; mainDocId: string; // home doc (if docs homepage configured), or first doc docs: GlobalDoc[]; - sidebars?: Record; + sidebars?: {[sidebarId: string]: GlobalSidebar}; }; export type GlobalSidebarLink = { @@ -322,7 +322,7 @@ declare module '@docusaurus/plugin-content-docs/client' { }; export type GetActivePluginOptions = {failfast?: boolean}; // use fail-fast option if you know for sure one plugin instance is active - export const useAllDocsData: () => Record; + export const useAllDocsData: () => {[pluginId: string]: GlobalPluginData}; export const useDocsData: (pluginId?: string) => GlobalPluginData; export const useActivePlugin: ( options?: GetActivePluginOptions, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/processor.test.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/processor.test.ts index 15390eb4b8..1dad824917 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/processor.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/processor.test.ts @@ -57,7 +57,7 @@ describe('processSidebars', () => { async function testProcessSidebars( unprocessedSidebars: NormalizedSidebars, - categoriesMetadata: Record = {}, + categoriesMetadata: {[filePath: string]: CategoryMetadataFile} = {}, paramsOverrides: Partial = {}, ) { return processSidebars(unprocessedSidebars, categoriesMetadata, { @@ -142,7 +142,6 @@ describe('processSidebars', () => { }, numberPrefixParser: DefaultNumberPrefixParser, isCategoryIndex, - options: params.sidebarOptions, }); expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({ defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator, @@ -154,7 +153,6 @@ describe('processSidebars', () => { }, numberPrefixParser: DefaultNumberPrefixParser, isCategoryIndex, - options: params.sidebarOptions, }); expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({ defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator, @@ -166,7 +164,6 @@ describe('processSidebars', () => { }, numberPrefixParser: DefaultNumberPrefixParser, isCategoryIndex, - options: params.sidebarOptions, }); expect(processedSidebar).toEqual({ diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/utils.test.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/utils.test.ts index 1b75e8e65e..540f379a7f 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/utils.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/utils.test.ts @@ -680,7 +680,7 @@ describe('toNavigationLink', () => { return {...data, frontMatter: {}} as DocMetadataBase; } - const docsById: Record = { + const docsById: {[docId: string]: DocMetadataBase} = { doc1: testDoc({ title: 'Doc 1', permalink: '/doc1', diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts index 6f99428f6e..7e5fa5b6a5 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts @@ -48,16 +48,10 @@ function toSidebarItemsGeneratorVersion( // post-processing checks async function processSidebar( unprocessedSidebar: NormalizedSidebar, - categoriesMetadata: Record, + categoriesMetadata: {[filePath: string]: CategoryMetadataFile}, params: SidebarProcessorParams, ): Promise { - const { - sidebarItemsGenerator, - numberPrefixParser, - docs, - version, - sidebarOptions, - } = params; + const {sidebarItemsGenerator, numberPrefixParser, docs, version} = params; // Just a minor lazy transformation optimization const getSidebarItemsGeneratorDocsAndVersion = _.memoize(() => ({ @@ -74,7 +68,6 @@ async function processSidebar( defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator, isCategoryIndex, ...getSidebarItemsGeneratorDocsAndVersion(), - options: sidebarOptions, categoriesMetadata, }); // Process again... weird but sidebar item generated might generate some @@ -113,7 +106,7 @@ async function processSidebar( export async function processSidebars( unprocessedSidebars: NormalizedSidebars, - categoriesMetadata: Record, + categoriesMetadata: {[filePath: string]: CategoryMetadataFile}, params: SidebarProcessorParams, ): Promise { const processedSidebars = await combinePromises( diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts index f9f6895ec9..8ad3c310b7 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts @@ -15,11 +15,11 @@ import type { import type {Slugger} from '@docusaurus/utils'; // Makes all properties visible when hovering over the type -type Expand> = {[P in keyof T]: T[P]}; +type Expand = {[P in keyof T]: T[P]}; export type SidebarItemBase = { className?: string; - customProps?: Record; + customProps?: {[key: string]: unknown}; }; export type SidebarItemDoc = SidebarItemBase & { @@ -216,7 +216,7 @@ export type CategoryMetadataFile = { collapsible?: boolean; className?: string; link?: SidebarItemCategoryLinkConfig | null; - customProps?: Record; + customProps?: {[key: string]: unknown}; // TODO should we allow "items" here? how would this work? would an // "autogenerated" type be allowed? @@ -247,8 +247,7 @@ export type SidebarItemsGeneratorArgs = { docs: SidebarItemsGeneratorDoc[]; numberPrefixParser: NumberPrefixParser; isCategoryIndex: CategoryIndexMatcher; - categoriesMetadata: Record; - options: SidebarOptions; + categoriesMetadata: {[filePath: string]: CategoryMetadataFile}; }; export type SidebarItemsGenerator = ( generatorArgs: SidebarItemsGeneratorArgs, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts index 6f8875f985..5caa93d948 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts @@ -107,15 +107,15 @@ export function collectSidebarNavigation( }); } -export function collectSidebarsDocIds( - sidebars: Sidebars, -): Record { +export function collectSidebarsDocIds(sidebars: Sidebars): { + [sidebarId: string]: string[]; +} { return _.mapValues(sidebars, collectSidebarDocIds); } -export function collectSidebarsNavigations( - sidebars: Sidebars, -): Record { +export function collectSidebarsNavigations(sidebars: Sidebars): { + [sidebarId: string]: SidebarNavigationItem[]; +} { return _.mapValues(sidebars, collectSidebarNavigation); } @@ -360,7 +360,7 @@ export function toDocNavigationLink(doc: DocMetadataBase): DocNavLink { export function toNavigationLink( navigationItem: SidebarNavigationItem | undefined, - docsById: Record, + docsById: {[docId: string]: DocMetadataBase}, ): DocNavLink | undefined { function getDocById(docId: string) { const doc = docsById[docId]; diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts index 9ee2115e13..22ddcfbf77 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts @@ -149,9 +149,9 @@ function validateSidebarItem( } } -export function validateSidebars( - sidebars: Record, -): asserts sidebars is NormalizedSidebars { +export function validateSidebars(sidebars: { + [sidebarId: string]: unknown; +}): asserts sidebars is NormalizedSidebars { Object.values(sidebars as NormalizedSidebars).forEach((sidebar) => { sidebar.forEach(validateSidebarItem); }); diff --git a/packages/docusaurus-plugin-content-docs/src/translations.ts b/packages/docusaurus-plugin-content-docs/src/translations.ts index ea902a7276..40d9e24f0a 100644 --- a/packages/docusaurus-plugin-content-docs/src/translations.ts +++ b/packages/docusaurus-plugin-content-docs/src/translations.ts @@ -269,7 +269,7 @@ function getVersionTranslationFiles(version: LoadedVersion): TranslationFiles { } function translateVersion( version: LoadedVersion, - translationFiles: Record, + translationFiles: {[fileName: string]: TranslationFile}, ): LoadedVersion { const versionTranslations = translationFiles[getVersionFileName(version.versionName)]!.content; @@ -289,7 +289,7 @@ function getVersionsTranslationFiles( } function translateVersions( versions: LoadedVersion[], - translationFiles: Record, + translationFiles: {[fileName: string]: TranslationFile}, ): LoadedVersion[] { return versions.map((version) => translateVersion(version, translationFiles)); } @@ -303,7 +303,7 @@ export function translateLoadedContent( loadedContent: LoadedContent, translationFiles: TranslationFile[], ): LoadedContent { - const translationFilesMap: Record = _.keyBy( + const translationFilesMap: {[fileName: string]: TranslationFile} = _.keyBy( translationFiles, (f) => f.path, ); diff --git a/packages/docusaurus-plugin-content-docs/src/types.ts b/packages/docusaurus-plugin-content-docs/src/types.ts index 67ba6366b5..7da32a8a36 100644 --- a/packages/docusaurus-plugin-content-docs/src/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/types.ts @@ -59,7 +59,7 @@ export type DocFrontMatter = { sidebar_label?: string; sidebar_position?: number; sidebar_class_name?: string; - sidebar_custom_props?: Record; + sidebar_custom_props?: {[key: string]: unknown}; displayed_sidebar?: string | null; pagination_label?: string; custom_edit_url?: string | null; @@ -83,7 +83,7 @@ export type DocMetadataBase = LastUpdateData & { sidebarPosition?: number; editUrl?: string | null; tags: Tag[]; - frontMatter: DocFrontMatter & Record; + frontMatter: DocFrontMatter & {[key: string]: unknown}; }; export type DocNavLink = { diff --git a/packages/docusaurus-plugin-content-pages/src/deps.d.ts b/packages/docusaurus-plugin-content-pages/src/deps.d.ts index c9976d8a58..6b8b33906b 100644 --- a/packages/docusaurus-plugin-content-pages/src/deps.d.ts +++ b/packages/docusaurus-plugin-content-pages/src/deps.d.ts @@ -6,7 +6,7 @@ */ declare module 'remark-admonitions' { - type Options = Record; + type Options = {[key: string]: unknown}; const plugin: (options?: Options) => void; export = plugin; diff --git a/packages/docusaurus-plugin-content-pages/src/frontMatter.ts b/packages/docusaurus-plugin-content-pages/src/frontMatter.ts index 3f51629255..8c9247da71 100644 --- a/packages/docusaurus-plugin-content-pages/src/frontMatter.ts +++ b/packages/docusaurus-plugin-content-pages/src/frontMatter.ts @@ -20,8 +20,8 @@ const PageFrontMatterSchema = Joi.object({ ...FrontMatterTOCHeadingLevels, }); -export function validatePageFrontMatter( - frontMatter: Record, -): FrontMatter { +export function validatePageFrontMatter(frontMatter: { + [key: string]: unknown; +}): FrontMatter { return validateFrontMatter(frontMatter, PageFrontMatterSchema); } diff --git a/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts b/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts index 7993b6abdc..fabded2ba6 100644 --- a/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts +++ b/packages/docusaurus-plugin-content-pages/src/plugin-content-pages.d.ts @@ -15,7 +15,7 @@ declare module '@docusaurus/plugin-content-pages' { include: string[]; exclude: string[]; mdxPageComponent: string; - admonitions: Record; + admonitions: {[key: string]: unknown}; }; export type Options = Partial; @@ -39,7 +39,7 @@ declare module '@docusaurus/plugin-content-pages' { type: 'mdx'; permalink: string; source: string; - frontMatter: FrontMatter & Record; + frontMatter: FrontMatter & {[key: string]: unknown}; title?: string; description?: string; }; diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugContent/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugContent/index.tsx index 362252d719..ceac7dea5d 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugContent/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugContent/index.tsx @@ -31,7 +31,7 @@ function PluginContent({ pluginContent, }: { pluginName: string; - pluginContent: Record; + pluginContent: {[pluginId: string]: unknown}; }) { return (
diff --git a/packages/docusaurus-plugin-google-gtag/src/gtag.ts b/packages/docusaurus-plugin-google-gtag/src/gtag.ts index 9cf397488f..77024f7bb5 100644 --- a/packages/docusaurus-plugin-google-gtag/src/gtag.ts +++ b/packages/docusaurus-plugin-google-gtag/src/gtag.ts @@ -14,7 +14,7 @@ export default (function gtagModule() { return null; } - const {trackingID} = globalData['docusaurus-plugin-google-gtag'] + const {trackingID} = globalData['docusaurus-plugin-google-gtag']! .default as PluginOptions; return { diff --git a/packages/docusaurus-plugin-ideal-image/src/deps.d.ts b/packages/docusaurus-plugin-ideal-image/src/deps.d.ts index 187065004d..769d0561cc 100644 --- a/packages/docusaurus-plugin-ideal-image/src/deps.d.ts +++ b/packages/docusaurus-plugin-ideal-image/src/deps.d.ts @@ -68,7 +68,7 @@ declare module '@endiliey/react-ideal-image' { * from material design, Implemented as React components with the SVG * element. You can customize icons */ - icons?: Partial>; + icons?: Partial<{[icon in IconKey]: ComponentType}>; /** * This prop takes one of the 2 options, xhr and image. * Read more about it: @@ -102,7 +102,7 @@ declare module '@endiliey/react-ideal-image' { * inline styles, but it is also possible to use CSS modules and override * all styles. */ - theme?: Partial>; + theme?: Partial<{[key in ThemeKey]: string | CSSProperties}>; /** * Tells how much to wait in milliseconds until consider the download to be * slow. diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/sync.md b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/sync.md new file mode 100644 index 0000000000..4da6d88d34 --- /dev/null +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/sync.md @@ -0,0 +1,11 @@ +```bash npm2yarn +npm install --global docusaurus +``` + +```bash npm2yarn +npm install --save docusaurus-plugin-name +``` + +```bash npm2yarn +npm run build +``` diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap index 9b3a2be47c..d00ba962a4 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap @@ -48,6 +48,21 @@ import TabItem from '@theme/TabItem'; " `; +exports[`npm2yarn plugin does not work when language is not set 1`] = ` +"\`\`\`npm2yarn +npm install --save docusaurus-plugin-name +\`\`\` + +\`\`\`bash +npm install --save docusaurus-plugin-name +\`\`\` + +\`\`\`shell +npm install --save docusaurus-plugin-name +\`\`\` +" +`; + exports[`npm2yarn plugin works on installation file 1`] = ` "import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -98,17 +113,29 @@ yarn add docusaurus-plugin-name " `; -exports[`npm2yarn plugin works when language is not set 1`] = ` -"\`\`\`npm2yarn -npm install --save docusaurus-plugin-name -\`\`\` +exports[`npm2yarn plugin works with sync option 1`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Installing a plugin + +A plugin is usually a npm package, so you install them like other npm packages using npm. + + + \`\`\`bash npm install --save docusaurus-plugin-name \`\`\` -\`\`\`shell -npm install --save docusaurus-plugin-name + + + +\`\`\`bash +yarn add docusaurus-plugin-name \`\`\` + + + " `; diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts index c8425b874f..4887b0ac9d 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts @@ -16,10 +16,7 @@ import mdx from 'remark-mdx'; const processFixture = async (name: string, options?: {sync?: boolean}) => { const filePath = path.join(__dirname, '__fixtures__', `${name}.md`); const file = await vfile.read(filePath); - const result = await remark() - .use(mdx) - .use(npm2yarn, {...options, filePath}) - .process(file); + const result = await remark().use(mdx).use(npm2yarn, options).process(file); return result.toString(); }; @@ -37,7 +34,13 @@ describe('npm2yarn plugin', () => { expect(result).toMatchSnapshot(); }); - it('works when language is not set', async () => { + it('works with sync option', async () => { + const result = await processFixture('plugin', {sync: true}); + + expect(result).toMatchSnapshot(); + }); + + it('does not work when language is not set', async () => { const result = await processFixture('syntax-not-properly-set'); expect(result).toMatchSnapshot(); diff --git a/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts b/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts index 1b0abbe7bb..d2cb4d7184 100644 --- a/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts +++ b/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts @@ -12,14 +12,14 @@ import {normalizeThemeConfig} from '@docusaurus/utils-validation'; import theme from 'prism-react-renderer/themes/github'; import darkTheme from 'prism-react-renderer/themes/dracula'; -function testValidateThemeConfig(partialThemeConfig: Record) { +function testValidateThemeConfig(partialThemeConfig: {[key: string]: unknown}) { return normalizeThemeConfig(ThemeConfigSchema, { ...DEFAULT_CONFIG, ...partialThemeConfig, }); } -function testOk(partialThemeConfig: Record) { +function testOk(partialThemeConfig: {[key: string]: unknown}) { expect( testValidateThemeConfig({...DEFAULT_CONFIG, ...partialThemeConfig}), ).toEqual({ diff --git a/packages/docusaurus-theme-classic/src/theme-classic.d.ts b/packages/docusaurus-theme-classic/src/theme-classic.d.ts index b010f00385..440eb8bbfc 100644 --- a/packages/docusaurus-theme-classic/src/theme-classic.d.ts +++ b/packages/docusaurus-theme-classic/src/theme-classic.d.ts @@ -507,7 +507,7 @@ declare module '@theme/MDXComponents' { readonly h4: (props: ComponentProps<'h4'>) => JSX.Element; readonly h5: (props: ComponentProps<'h5'>) => JSX.Element; readonly h6: (props: ComponentProps<'h6'>) => JSX.Element; - } & Record>; + } & {[tagName: string]: ComponentType}; const MDXComponents: MDXComponentsObject; export default MDXComponents; @@ -768,7 +768,7 @@ declare module '@theme/TabItem' { readonly label?: string; readonly hidden?: boolean; readonly className?: string; - readonly attributes?: Record; + readonly attributes?: {[key: string]: unknown}; } export default function TabItem(props: Props): JSX.Element; @@ -786,7 +786,7 @@ declare module '@theme/Tabs' { readonly values?: readonly { value: string; label?: string; - attributes?: Record; + attributes?: {[key: string]: unknown}; }[]; readonly groupId?: string; readonly className?: string; diff --git a/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx index 679feaf858..daadce8000 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx @@ -70,10 +70,9 @@ function UnmaintainedVersionLabel({ ); } -const BannerLabelComponents: Record< - VersionBanner, - ComponentType -> = { +const BannerLabelComponents: { + [banner in VersionBanner]: ComponentType; +} = { unreleased: UnreleasedVersionLabel, unmaintained: UnmaintainedVersionLabel, }; diff --git a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Pre.tsx b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Pre.tsx index 36227964eb..bfaf413fd0 100644 --- a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Pre.tsx +++ b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Pre.tsx @@ -7,8 +7,9 @@ import React, {isValidElement} from 'react'; import CodeBlock from '@theme/CodeBlock'; +import type {Props} from '@theme/MDXComponents/Pre'; -export default function MDXPre(props: any) { +export default function MDXPre(props: Props): JSX.Element { return ( , +const NavbarItemComponents: { // Not really worth typing, as we pass all props down immediately // eslint-disable-next-line @typescript-eslint/no-explicit-any - () => (props: any) => JSX.Element -> = { + [type in Exclude]: () => (props: any) => JSX.Element; +} = { default: () => DefaultNavbarItem, localeDropdown: () => LocaleDropdownNavbarItem, search: () => SearchNavbarItem, diff --git a/packages/docusaurus-theme-classic/src/translations.ts b/packages/docusaurus-theme-classic/src/translations.ts index 2ec3f97709..8d8bd673b4 100644 --- a/packages/docusaurus-theme-classic/src/translations.ts +++ b/packages/docusaurus-theme-classic/src/translations.ts @@ -184,7 +184,7 @@ export function translateThemeConfig({ themeConfig: ThemeConfig; translationFiles: TranslationFile[]; }): ThemeConfig { - const translationFilesMap: Record = _.keyBy( + const translationFilesMap: {[fileName: string]: TranslationFile} = _.keyBy( translationFiles, (f) => f.path, ); diff --git a/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx b/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx index cd4bb935b6..a2da2c71b6 100644 --- a/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx +++ b/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx @@ -84,7 +84,7 @@ function readStorageState({ }: { pluginIds: string[]; versionPersistence: DocsVersionPersistence; - allDocsData: Record; + allDocsData: {[pluginId: string]: GlobalPluginData}; }): DocsPreferredVersionState { /** * The storage value we read might be stale, and belong to a version that does @@ -227,10 +227,9 @@ export function useDocsPreferredVersion( return {preferredVersion, savePreferredVersionName}; } -export function useDocsPreferredVersionByPluginId(): Record< - string, - GlobalVersion | null -> { +export function useDocsPreferredVersionByPluginId(): { + [pluginId: string]: GlobalVersion | null; +} { const allDocsData = useAllDocsData(); const [state] = useDocsPreferredVersionContext(); diff --git a/packages/docusaurus-theme-common/src/contexts/tabGroupChoice.tsx b/packages/docusaurus-theme-common/src/contexts/tabGroupChoice.tsx index 72b561d053..47919921e8 100644 --- a/packages/docusaurus-theme-common/src/contexts/tabGroupChoice.tsx +++ b/packages/docusaurus-theme-common/src/contexts/tabGroupChoice.tsx @@ -37,7 +37,7 @@ function useContextValue(): ContextValue { useEffect(() => { try { - const localStorageChoices: Record = {}; + const localStorageChoices: {[groupId: string]: string} = {}; listStorageKeys().forEach((storageKey) => { if (storageKey.startsWith(TAB_CHOICE_PREFIX)) { const groupId = storageKey.substring(TAB_CHOICE_PREFIX.length); diff --git a/packages/docusaurus-theme-common/src/utils/tagsUtils.ts b/packages/docusaurus-theme-common/src/utils/tagsUtils.ts index 4405a8631d..99dfdc9d37 100644 --- a/packages/docusaurus-theme-common/src/utils/tagsUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/tagsUtils.ts @@ -33,11 +33,11 @@ function getTagLetter(tag: string): string { export function listTagsByLetters( tags: readonly TagsListItem[], ): TagLetterEntry[] { - const groups: Record = {}; + const groups: {[initial: string]: TagsListItem[]} = {}; Object.values(tags).forEach((tag) => { - const letter = getTagLetter(tag.name); - groups[letter] ??= []; - groups[letter]!.push(tag); + const initial = getTagLetter(tag.name); + groups[initial] ??= []; + groups[initial]!.push(tag); }); return ( diff --git a/packages/docusaurus-theme-common/src/utils/useThemeConfig.ts b/packages/docusaurus-theme-common/src/utils/useThemeConfig.ts index 8d30137088..684b573b96 100644 --- a/packages/docusaurus-theme-common/src/utils/useThemeConfig.ts +++ b/packages/docusaurus-theme-common/src/utils/useThemeConfig.ts @@ -17,7 +17,7 @@ export type NavbarItem = { items?: NavbarItem[]; label?: string; position?: 'left' | 'right'; -} & Record; +} & {[key: string]: unknown}; export type NavbarLogo = { src: string; @@ -65,7 +65,7 @@ export type FooterLinkItem = { href?: string; html?: string; prependBaseUrlToHref?: string; -} & Record; +} & {[key: string]: unknown}; export type FooterLogo = { alt?: string; @@ -119,7 +119,7 @@ export type ThemeConfig = { hideableSidebar: boolean; autoCollapseSidebarCategories: boolean; image?: string; - metadata: Array>; + metadata: Array<{[key: string]: string}>; sidebarCollapsible: boolean; tableOfContents: TableOfContents; }; diff --git a/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts b/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts index 7f753e496e..6d0cb4cfca 100644 --- a/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts +++ b/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts @@ -8,8 +8,8 @@ import type {Joi} from '@docusaurus/utils-validation'; import {validateThemeConfig, DEFAULT_CONFIG} from '../validateThemeConfig'; -function testValidateThemeConfig(themeConfig: Record) { - function validate(schema: Joi.Schema, cfg: Record) { +function testValidateThemeConfig(themeConfig: {[key: string]: unknown}) { + function validate(schema: Joi.Schema, cfg: {[key: string]: unknown}) { const {value, error} = schema.validate(cfg, { convert: false, }); diff --git a/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts b/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts index 3689679f1f..1aea75deab 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts +++ b/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts @@ -15,7 +15,7 @@ declare module '@docusaurus/theme-search-algolia' { appId: string; apiKey: string; indexName: string; - searchParameters: Record; + searchParameters: {[key: string]: unknown}; searchPagePath: string | false | null; }; }; diff --git a/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx b/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx index 8ce17fa12a..5a79ce3105 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx +++ b/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx @@ -54,15 +54,16 @@ function useDocsSearchVersionsHelpers() { // State of the version select menus / algolia facet filters // docsPluginId -> versionName map - const [searchVersions, setSearchVersions] = useState>( - () => - Object.entries(allDocsData).reduce( - (acc, [pluginId, pluginData]) => ({ - ...acc, - [pluginId]: pluginData.versions[0]!.name, - }), - {}, - ), + const [searchVersions, setSearchVersions] = useState<{ + [pluginId: string]: string; + }>(() => + Object.entries(allDocsData).reduce( + (acc, [pluginId, pluginData]) => ({ + ...acc, + [pluginId]: pluginData.versions[0]!.name, + }), + {}, + ), ); // Set the value of a single select menu diff --git a/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts b/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts index e88aa90f14..0dc8db2597 100644 --- a/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts +++ b/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts @@ -26,7 +26,7 @@ describe('theme translations', () => { (await fs.readJSON( path.join(baseMessagesDirPath, baseMessagesFile), 'utf-8', - )) as Record, + )) as {[key: string]: string}, ), ), ).then((translations) => diff --git a/packages/docusaurus-theme-translations/src/index.ts b/packages/docusaurus-theme-translations/src/index.ts index ef39ca61e9..f586fe0d9f 100644 --- a/packages/docusaurus-theme-translations/src/index.ts +++ b/packages/docusaurus-theme-translations/src/index.ts @@ -39,7 +39,7 @@ export async function readDefaultCodeTranslationMessages({ dirPath?: string; locale: string; name: string; -}): Promise> { +}): Promise<{[msgId: string]: string}> { const localesToTry = codeTranslationLocalesToTry(locale); // Return the content of the first file that match diff --git a/packages/docusaurus-types/src/index.d.ts b/packages/docusaurus-types/src/index.d.ts index 21bcdf60c9..41866831df 100644 --- a/packages/docusaurus-types/src/index.d.ts +++ b/packages/docusaurus-types/src/index.d.ts @@ -91,7 +91,7 @@ export type Config = Overwrite< * package.json. * - `type: 'synthetic'`, docusaurus generated internal plugin. */ -export type DocusaurusPluginVersionInformation = +export type PluginVersionInformation = | { readonly type: 'package'; readonly name?: string; @@ -104,7 +104,7 @@ export type DocusaurusPluginVersionInformation = export interface DocusaurusSiteMetadata { readonly docusaurusVersion: string; readonly siteVersion?: string; - readonly pluginVersions: Record; + readonly pluginVersions: {[pluginName: string]: PluginVersionInformation}; } // Inspired by Chrome JSON, because it's a widely supported i18n format @@ -114,7 +114,7 @@ export interface DocusaurusSiteMetadata { // https://docs.transifex.com/formats/chrome-json // https://help.phrase.com/help/chrome-json-messages export type TranslationMessage = {message: string; description?: string}; -export type TranslationFileContent = Record; +export type TranslationFileContent = {[key: string]: TranslationMessage}; export type TranslationFile = {path: string; content: TranslationFileContent}; export type TranslationFiles = TranslationFile[]; @@ -127,22 +127,24 @@ export type I18nLocaleConfig = { export type I18nConfig = { defaultLocale: string; locales: [string, ...string[]]; - localeConfigs: Record>; + localeConfigs: {[locale: string]: Partial}; }; export type I18n = { defaultLocale: string; locales: [string, ...string[]]; currentLocale: string; - localeConfigs: Record; + localeConfigs: {[locale: string]: I18nLocaleConfig}; }; +export type GlobalData = {[pluginName: string]: {[pluginId: string]: unknown}}; + export interface DocusaurusContext { siteConfig: DocusaurusConfig; siteMetadata: DocusaurusSiteMetadata; - globalData: Record; + globalData: GlobalData; i18n: I18n; - codeTranslations: Record; + codeTranslations: {[msgId: string]: string}; // Don't put mutable values here, to avoid triggering re-renders // We could reconsider that choice if context selectors are implemented @@ -162,7 +164,7 @@ export type ImportedPresetModule = PresetModule & { default?: PresetModule; }; -export type PresetConfig = string | [string, Record]; +export type PresetConfig = string | [string, {[key: string]: unknown}]; export type HostPortCLIOptions = { host?: string; @@ -207,7 +209,7 @@ export interface LoadContext { baseUrl: string; // TODO to remove: useless, there's already siteConfig.baseUrl! i18n: I18n; ssrTemplate: string; - codeTranslations: Record; + codeTranslations: {[msgId: string]: string}; } export interface InjectedHtmlTags { @@ -228,7 +230,7 @@ export interface Props extends LoadContext, InjectedHtmlTags { export interface PluginContentLoadedActions { addRoute: (config: RouteConfig) => void; createData: (name: string, data: string) => Promise; - setGlobalData: (data: T) => void; + setGlobalData: (data: unknown) => void; } export type AllContent = { @@ -238,7 +240,7 @@ export type AllContent = { }; // TODO improve type (not exposed by postcss-loader) -export type PostCssOptions = Record & {plugins: unknown[]}; +export type PostCssOptions = {[key: string]: unknown} & {plugins: unknown[]}; export interface Plugin { name: string; @@ -290,7 +292,7 @@ export interface Plugin { export type InitializedPlugin = Plugin & { readonly options: Required; - readonly version: DocusaurusPluginVersionInformation; + readonly version: PluginVersionInformation; /** * The absolute path to the folder containing the entry point file. */ @@ -305,12 +307,12 @@ export type SwizzleAction = 'eject' | 'wrap'; export type SwizzleActionStatus = 'safe' | 'unsafe' | 'forbidden'; export type SwizzleComponentConfig = { - actions: Record; + actions: {[action in SwizzleAction]: SwizzleActionStatus}; description?: string; }; export type SwizzleConfig = { - components: Record; + components: {[componentName: string]: SwizzleComponentConfig}; // Other settings could be added here, // For example: the ability to declare the config as exhaustive // so that we can emit errors @@ -332,13 +334,12 @@ export type ImportedPluginModule = PluginModule & { }; export type ConfigureWebpackFn = Plugin['configureWebpack']; -export type ConfigureWebpackFnMergeStrategy = Record< - string, - CustomizeRuleString ->; +export type ConfigureWebpackFnMergeStrategy = { + [key: string]: CustomizeRuleString; +}; export type ConfigurePostCssFn = Plugin['configurePostCss']; -export type PluginOptions = {id?: string} & Record; +export type PluginOptions = {id?: string} & {[key: string]: unknown}; export type PluginConfig = | string @@ -416,7 +417,7 @@ export interface ConfigureWebpackUtils { ) => RuleSetRule[]; getJSLoader: (options: { isServer: boolean; - babelOptions?: Record; + babelOptions?: {[key: string]: unknown}; }) => RuleSetRule; } @@ -425,7 +426,7 @@ interface HtmlTagObject { * Attributes of the html tag * E.g. `{'disabled': true, 'value': 'demo', 'rel': 'preconnect'}` */ - attributes?: Partial>; + attributes?: Partial<{[key: string]: string | boolean}>; /** * The tag name e.g. `div`, `script`, `link`, `meta` */ diff --git a/packages/docusaurus-utils-validation/src/validationUtils.ts b/packages/docusaurus-utils-validation/src/validationUtils.ts index fed60afc8e..33145624da 100644 --- a/packages/docusaurus-utils-validation/src/validationUtils.ts +++ b/packages/docusaurus-utils-validation/src/validationUtils.ts @@ -77,7 +77,7 @@ export function normalizeThemeConfig( * Validate front matter with better error message */ export function validateFrontMatter( - frontMatter: Record, + frontMatter: {[key: string]: unknown}, schema: Joi.ObjectSchema, ): T { const {value, error, warning} = schema.validate(frontMatter, { diff --git a/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts b/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts index a84e8f7a72..2fe8cb7d34 100644 --- a/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts @@ -12,7 +12,7 @@ import fs from 'fs-extra'; describe('genChunkName', () => { it('works', () => { - const firstAssert: Record = { + const firstAssert: {[key: string]: string} = { '/docs/adding-blog': 'docs-adding-blog-062', '/docs/versioning': 'docs-versioning-8a8', '/': 'index', @@ -34,7 +34,7 @@ describe('genChunkName', () => { }); it('emits different chunk names for different paths even with same preferred name', () => { - const secondAssert: Record = { + const secondAssert: {[key: string]: string} = { '/blog/1': 'blog-85-f-089', '/blog/2': 'blog-353-489', }; @@ -44,7 +44,7 @@ describe('genChunkName', () => { }); it('only generates short unique IDs', () => { - const thirdAssert: Record = { + const thirdAssert: {[key: string]: string} = { a: '0cc175b9', b: '92eb5ffe', c: '4a8a08f0', diff --git a/packages/docusaurus-utils/src/__tests__/hashUtils.test.ts b/packages/docusaurus-utils/src/__tests__/hashUtils.test.ts index ab73d50737..6cc32c0e46 100644 --- a/packages/docusaurus-utils/src/__tests__/hashUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/hashUtils.test.ts @@ -9,7 +9,7 @@ import {simpleHash, docuHash} from '../hashUtils'; describe('hashUtils', () => { it('simpleHash', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { '': 'd41', '/foo-bar': '096', '/foo/bar': '1df', @@ -30,7 +30,7 @@ describe('hashUtils', () => { describe('docuHash', () => { it('docuHash works', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { '': '-d41', '/': 'index', '/foo-bar': 'foo-bar-096', diff --git a/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts b/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts index b196e2a45b..49a2844b47 100644 --- a/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts @@ -45,15 +45,15 @@ describe('mapAsyncSequential', () => { } it('maps sequentially', async () => { - const itemToTimeout: Record = { + const itemToTimeout: {[key: string]: number} = { '1': 200, '2': 600, '3': 400, }; const items = Object.keys(itemToTimeout); - const itemMapStartsAt: Record = {}; - const itemMapEndsAt: Record = {}; + const itemMapStartsAt: {[key: string]: number} = {}; + const itemMapEndsAt: {[key: string]: number} = {}; const timeBefore = Date.now(); await expect( diff --git a/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts b/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts index 2eebb267ea..eaf2b61cd9 100644 --- a/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts @@ -131,7 +131,7 @@ describe('toMessageRelativeFilePath', () => { describe('escapePath', () => { it('works', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { 'c:/aaaa\\bbbb': 'c:/aaaa\\\\bbbb', 'c:\\aaaa\\bbbb\\★': 'c:\\\\aaaa\\\\bbbb\\\\★', '\\\\?\\c:\\aaaa\\bbbb': '\\\\\\\\?\\\\c:\\\\aaaa\\\\bbbb', @@ -148,7 +148,7 @@ describe('escapePath', () => { describe('posixPath', () => { it('works', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { 'c:/aaaa\\bbbb': 'c:/aaaa/bbbb', 'c:\\aaaa\\bbbb\\★': 'c:\\aaaa\\bbbb\\★', '\\\\?\\c:\\aaaa\\bbbb': '\\\\?\\c:\\aaaa\\bbbb', @@ -165,7 +165,7 @@ describe('posixPath', () => { describe('aliasedSitePath', () => { it('works', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { 'user/website/docs/asd.md': '@site/docs/asd.md', 'user/website/versioned_docs/foo/bar.md': '@site/versioned_docs/foo/bar.md', diff --git a/packages/docusaurus-utils/src/__tests__/urlUtils.test.ts b/packages/docusaurus-utils/src/__tests__/urlUtils.test.ts index ce067a1489..30625e4005 100644 --- a/packages/docusaurus-utils/src/__tests__/urlUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/urlUtils.test.ts @@ -170,7 +170,7 @@ describe('getEditUrl', () => { describe('fileToPath', () => { it('works', () => { - const asserts: Record = { + const asserts: {[key: string]: string} = { 'index.md': '/', 'hello/index.md': '/hello/', 'foo.md': '/foo', diff --git a/packages/docusaurus-utils/src/markdownLinks.ts b/packages/docusaurus-utils/src/markdownLinks.ts index c05012d902..fe8353646c 100644 --- a/packages/docusaurus-utils/src/markdownLinks.ts +++ b/packages/docusaurus-utils/src/markdownLinks.ts @@ -69,7 +69,7 @@ export function replaceMarkdownLinks({ /** * A map from source paths to their URLs. Source paths are `@site` aliased. */ - sourceToPermalink: Record; + sourceToPermalink: {[aliasedPath: string]: string}; }): { /** * The content with all Markdown file references replaced with their URLs. diff --git a/packages/docusaurus-utils/src/markdownUtils.ts b/packages/docusaurus-utils/src/markdownUtils.ts index 3e0d2c615d..de92ce0f33 100644 --- a/packages/docusaurus-utils/src/markdownUtils.ts +++ b/packages/docusaurus-utils/src/markdownUtils.ts @@ -143,7 +143,7 @@ export function createExcerpt(fileString: string): string | undefined { */ export function parseFrontMatter(markdownFileContent: string): { /** Front matter as parsed by gray-matter. */ - frontMatter: Record; + frontMatter: {[key: string]: unknown}; /** The remaining content, trimmed. */ content: string; } { @@ -244,7 +244,7 @@ export function parseMarkdownString( options?: ParseMarkdownContentTitleOptions, ): { /** @see {@link parseFrontMatter} */ - frontMatter: Record; + frontMatter: {[key: string]: unknown}; /** @see {@link parseMarkdownContentTitle} */ contentTitle: string | undefined; /** @see {@link createExcerpt} */ diff --git a/packages/docusaurus/src/choosePort.ts b/packages/docusaurus/src/choosePort.ts index 618df3e69e..8fec0ff0b9 100644 --- a/packages/docusaurus/src/choosePort.ts +++ b/packages/docusaurus/src/choosePort.ts @@ -18,12 +18,12 @@ import prompts from 'prompts'; const isInteractive = process.stdout.isTTY; -const execOptions: Record = { - encoding: 'utf8', +const execOptions = { + encoding: 'utf8' as const, stdio: [ - 'pipe', // stdin (default) - 'pipe', // stdout (default) - 'ignore', // stderr + 'pipe' as const, // stdin (default) + 'pipe' as const, // stdout (default) + 'ignore' as const, // stderr ], }; @@ -37,19 +37,18 @@ function clearConsole(): void { // Gets process id of what is on port function getProcessIdOnPort(port: number): string { return execSync(`lsof -i:${port} -P -t -sTCP:LISTEN`, execOptions) - .toString() .split('\n')[0]! .trim(); } // Gets process command function getProcessCommand(processId: string): string { - const command: Buffer = execSync( + const command = execSync( `ps -o command -p ${processId} | sed -n 2p`, execOptions, ); - return command.toString().replace(/\n$/, ''); + return command.replace(/\n$/, ''); } // Gets directory of a process from its process id @@ -57,9 +56,7 @@ function getDirectoryOfProcessById(processId: string): string { return execSync( `lsof -p ${processId} | awk '$4=="cwd" {for (i=9; i<=NF; i++) printf "%s ", $i}'`, execOptions, - ) - .toString() - .trim(); + ).trim(); } // Gets process on port diff --git a/packages/docusaurus/src/client/docusaurus.ts b/packages/docusaurus/src/client/docusaurus.ts index 0c024c0fc4..20923a84d4 100644 --- a/packages/docusaurus/src/client/docusaurus.ts +++ b/packages/docusaurus/src/client/docusaurus.ts @@ -12,8 +12,8 @@ import prefetchHelper from './prefetch'; import preloadHelper from './preload'; import flat from './flat'; -const fetched: Record = {}; -const loaded: Record = {}; +const fetched: {[key: string]: boolean} = {}; +const loaded: {[key: string]: boolean} = {}; declare global { // eslint-disable-next-line camelcase, no-underscore-dangle diff --git a/packages/docusaurus/src/client/exports/ComponentCreator.tsx b/packages/docusaurus/src/client/exports/ComponentCreator.tsx index b33b8cff35..9d59a19492 100644 --- a/packages/docusaurus/src/client/exports/ComponentCreator.tsx +++ b/packages/docusaurus/src/client/exports/ComponentCreator.tsx @@ -13,8 +13,6 @@ import registry from '@generated/registry'; import flat from '../flat'; import {RouteContextProvider} from '../routeContext'; -type OptsLoader = Record; - export default function ComponentCreator( path: string, hash: string, @@ -40,7 +38,8 @@ export default function ComponentCreator( const chunkNames = routesChunkNames[chunkNamesKey]!; const optsModules: string[] = []; const optsWebpack: string[] = []; - const optsLoader: OptsLoader = {}; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const optsLoader: {[key: string]: () => Promise} = {}; /* Prepare opts data that react-loadable needs https://github.com/jamiebuilds/react-loadable#declaring-which-modules-are-being-loaded diff --git a/packages/docusaurus/src/client/exports/useGlobalData.ts b/packages/docusaurus/src/client/exports/useGlobalData.ts index 155ee22e6f..598f87dfe9 100644 --- a/packages/docusaurus/src/client/exports/useGlobalData.ts +++ b/packages/docusaurus/src/client/exports/useGlobalData.ts @@ -7,8 +7,9 @@ import useDocusaurusContext from './useDocusaurusContext'; import {DEFAULT_PLUGIN_ID} from './constants'; +import type {GlobalData} from '@docusaurus/types'; -export default function useGlobalData(): Record { +export default function useGlobalData(): GlobalData { const {globalData} = useDocusaurusContext(); if (!globalData) { throw new Error('Docusaurus global data not found.'); @@ -16,9 +17,9 @@ export default function useGlobalData(): Record { return globalData; } -export function useAllPluginInstancesData( +export function useAllPluginInstancesData( pluginName: string, -): Record { +): GlobalData[string] { const globalData = useGlobalData(); const pluginGlobalData = globalData[pluginName]; if (!pluginGlobalData) { @@ -26,13 +27,13 @@ export function useAllPluginInstancesData( `Docusaurus plugin global data not found for "${pluginName}" plugin.`, ); } - return pluginGlobalData as Record; + return pluginGlobalData; } -export function usePluginData( +export function usePluginData( pluginName: string, pluginId: string = DEFAULT_PLUGIN_ID, -): T { +): GlobalData[string][string] { const pluginGlobalData = useAllPluginInstancesData(pluginName); const pluginInstanceGlobalData = pluginGlobalData[pluginId]; if (!pluginInstanceGlobalData) { @@ -40,5 +41,5 @@ export function usePluginData( `Docusaurus plugin global data not found for "${pluginName}" plugin with id "${pluginId}".`, ); } - return pluginInstanceGlobalData as T; + return pluginInstanceGlobalData; } diff --git a/packages/docusaurus/src/client/flat.ts b/packages/docusaurus/src/client/flat.ts index d1c7fe5fea..76b2f57a37 100644 --- a/packages/docusaurus/src/client/flat.ts +++ b/packages/docusaurus/src/client/flat.ts @@ -10,9 +10,11 @@ import type {RouteChunksTree} from '@docusaurus/types'; const isTree = (x: string | RouteChunksTree): x is RouteChunksTree => typeof x === 'object' && !!x && Object.keys(x).length > 0; -export default function flat(target: RouteChunksTree): Record { +export default function flat(target: RouteChunksTree): { + [keyPath: string]: string; +} { const delimiter = '.'; - const output: Record = {}; + const output: {[keyPath: string]: string} = {}; function step(object: RouteChunksTree, prefix?: string | number) { Object.entries(object).forEach(([key, value]) => { diff --git a/packages/docusaurus/src/client/normalizeLocation.ts b/packages/docusaurus/src/client/normalizeLocation.ts index 6d443c316e..94a74da700 100644 --- a/packages/docusaurus/src/client/normalizeLocation.ts +++ b/packages/docusaurus/src/client/normalizeLocation.ts @@ -8,7 +8,7 @@ import type {Location} from 'history'; // Memoize previously normalized pathnames. -const pathnames: Record = {}; +const pathnames: {[rawPathname: string]: string} = {}; export default function normalizeLocation(location: T): T { if (pathnames[location.pathname]) { diff --git a/packages/docusaurus/src/client/prefetch.ts b/packages/docusaurus/src/client/prefetch.ts index 338f1b14fb..8223c7d89d 100644 --- a/packages/docusaurus/src/client/prefetch.ts +++ b/packages/docusaurus/src/client/prefetch.ts @@ -65,7 +65,7 @@ const supportedPrefetchStrategy = support('prefetch') ? linkPrefetchStrategy : xhrPrefetchStrategy; -const preFetched: Record = {}; +const preFetched: {[url: string]: boolean} = {}; export default function prefetch(url: string): Promise { return new Promise((resolve) => { diff --git a/packages/docusaurus/src/commands/build.ts b/packages/docusaurus/src/commands/build.ts index bc1e7f557a..e727616533 100644 --- a/packages/docusaurus/src/commands/build.ts +++ b/packages/docusaurus/src/commands/build.ts @@ -146,7 +146,7 @@ async function buildLocale({ }, ); - const allCollectedLinks: Record = {}; + const allCollectedLinks: {[location: string]: string[]} = {}; let serverConfig: Configuration = await createServerConfig({ props, diff --git a/packages/docusaurus/src/commands/swizzle/common.ts b/packages/docusaurus/src/commands/swizzle/common.ts index 84449a009d..1dfdb04cf3 100644 --- a/packages/docusaurus/src/commands/swizzle/common.ts +++ b/packages/docusaurus/src/commands/swizzle/common.ts @@ -29,10 +29,9 @@ export function actionStatusLabel(status: SwizzleActionStatus): string { return _.capitalize(status); } -const SwizzleActionStatusColors: Record< - SwizzleActionStatus, - (str: string) => string -> = { +const SwizzleActionStatusColors: { + [status in SwizzleActionStatus]: (str: string) => string; +} = { safe: logger.green, unsafe: logger.yellow, forbidden: logger.red, diff --git a/packages/docusaurus/src/deps.d.ts b/packages/docusaurus/src/deps.d.ts index fc3a7287ff..f977549c7c 100644 --- a/packages/docusaurus/src/deps.d.ts +++ b/packages/docusaurus/src/deps.d.ts @@ -17,8 +17,8 @@ declare module 'react-loadable-ssr-addon-v5-slorber' { export type Manifest = { entrypoints: string[]; - origins: Record; - assets: Array>; + origins: {[key: string]: number[]}; + assets: Array<{[key: string]: Asset[]}>; }; export function getBundles( @@ -36,7 +36,7 @@ declare module 'react-loadable-ssr-addon-v5-slorber' { declare module '@slorber/static-site-generator-webpack-plugin' { export type Locals = { - routesLocation: Record; + routesLocation: {[filePath: string]: string}; generatedFilesDir: string; headTags: string; preBodyTags: string; @@ -53,7 +53,7 @@ declare module '@slorber/static-site-generator-webpack-plugin' { locals: Locals; paths: string[]; preferFoldersOutput?: boolean; - globals: Record; + globals: {[key: string]: unknown}; }); } diff --git a/packages/docusaurus/src/server/brokenLinks.ts b/packages/docusaurus/src/server/brokenLinks.ts index e156599ce6..c213ca19ef 100644 --- a/packages/docusaurus/src/server/brokenLinks.ts +++ b/packages/docusaurus/src/server/brokenLinks.ts @@ -75,9 +75,9 @@ function getAllBrokenLinks({ allCollectedLinks, routes, }: { - allCollectedLinks: Record; + allCollectedLinks: {[location: string]: string[]}; routes: RouteConfig[]; -}): Record { +}): {[location: string]: BrokenLink[]} { const filteredRoutes = filterIntermediateRoutes(routes); const allBrokenLinks = _.mapValues(allCollectedLinks, (pageLinks, pagePath) => @@ -88,9 +88,9 @@ function getAllBrokenLinks({ return _.pickBy(allBrokenLinks, (brokenLinks) => brokenLinks.length > 0); } -function getBrokenLinksErrorMessage( - allBrokenLinks: Record, -): string | undefined { +function getBrokenLinksErrorMessage(allBrokenLinks: { + [location: string]: BrokenLink[]; +}): string | undefined { if (Object.keys(allBrokenLinks).length === 0) { return undefined; } @@ -177,8 +177,8 @@ async function filterExistingFileLinks({ }: { baseUrl: string; outDir: string; - allCollectedLinks: Record; -}): Promise> { + allCollectedLinks: {[location: string]: string[]}; +}): Promise<{[location: string]: string[]}> { async function linkFileExists(link: string) { // /baseUrl/javadoc/ -> /outDir/javadoc const baseFilePath = onlyPathname( @@ -222,7 +222,7 @@ export async function handleBrokenLinks({ baseUrl, outDir, }: { - allCollectedLinks: Record; + allCollectedLinks: {[location: string]: string[]}; onBrokenLinks: ReportingSeverity; routes: RouteConfig[]; baseUrl: string; diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index a45418ced6..ae4c371c1f 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -404,7 +404,7 @@ ${Object.entries(registry) JSON.stringify(i18n, null, 2), ); - const codeTranslationsWithFallbacks: Record = { + const codeTranslationsWithFallbacks: {[msgId: string]: string} = { ...(await getPluginsDefaultCodeTranslationMessages(plugins)), ...codeTranslations, }; diff --git a/packages/docusaurus/src/server/plugins/index.ts b/packages/docusaurus/src/server/plugins/index.ts index 56142e8c66..fc2cf0cff7 100644 --- a/packages/docusaurus/src/server/plugins/index.ts +++ b/packages/docusaurus/src/server/plugins/index.ts @@ -14,6 +14,7 @@ import type { PluginContentLoadedActions, RouteConfig, AllContent, + GlobalData, TranslationFiles, ThemeConfig, LoadedPlugin, @@ -75,7 +76,7 @@ export async function loadPlugins({ }): Promise<{ plugins: LoadedPlugin[]; pluginsRouteConfigs: RouteConfig[]; - globalData: unknown; + globalData: GlobalData; themeConfigTranslated: ThemeConfig; }> { // 1. Plugin Lifecycle - Initialization/Constructor. @@ -135,7 +136,7 @@ export async function loadPlugins({ // 3. Plugin Lifecycle - contentLoaded. const pluginsRouteConfigs: RouteConfig[] = []; - const globalData: Record> = {}; + const globalData: GlobalData = {}; await Promise.all( contentLoadedTranslatedPlugins.map( diff --git a/packages/docusaurus/src/server/plugins/init.ts b/packages/docusaurus/src/server/plugins/init.ts index 918476e983..410eb96f7c 100644 --- a/packages/docusaurus/src/server/plugins/init.ts +++ b/packages/docusaurus/src/server/plugins/init.ts @@ -9,7 +9,7 @@ import {createRequire} from 'module'; import path from 'path'; import importFresh from 'import-fresh'; import type { - DocusaurusPluginVersionInformation, + PluginVersionInformation, ImportedPluginModule, LoadContext, PluginModule, @@ -151,7 +151,7 @@ export default async function initPlugins({ async function doGetPluginVersion( normalizedPluginConfig: NormalizedPluginConfig, - ): Promise { + ): Promise { // get plugin version if (normalizedPluginConfig.pluginModule?.path) { const pluginPath = pluginRequire.resolve( @@ -198,8 +198,9 @@ export default async function initPlugins({ async function initializePlugin( normalizedPluginConfig: NormalizedPluginConfig, ): Promise { - const pluginVersion: DocusaurusPluginVersionInformation = - await doGetPluginVersion(normalizedPluginConfig); + const pluginVersion: PluginVersionInformation = await doGetPluginVersion( + normalizedPluginConfig, + ); const pluginOptions = doValidatePluginOptions(normalizedPluginConfig); // Side-effect: merge the normalized theme config in the original one diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index ba5508bfd9..b6221ec4b2 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -103,8 +103,8 @@ function isModule(value: unknown): value is Module { if ( typeof value === 'object' && // eslint-disable-next-line no-underscore-dangle - (value as Record)?.__import && - (value as Record)?.path + (value as {[key: string]: unknown})?.__import && + (value as {[key: string]: unknown})?.path ) { return true; } diff --git a/packages/docusaurus/src/server/translations/translations.ts b/packages/docusaurus/src/server/translations/translations.ts index 1b3458b297..0cd6b0b373 100644 --- a/packages/docusaurus/src/server/translations/translations.ts +++ b/packages/docusaurus/src/server/translations/translations.ts @@ -265,7 +265,7 @@ export async function localizePluginTranslationFile({ export async function getPluginsDefaultCodeTranslationMessages( plugins: InitializedPlugin[], -): Promise> { +): Promise<{[msgId: string]: string}> { const pluginsMessages = await Promise.all( plugins.map((plugin) => plugin.getDefaultCodeTranslationMessages?.() ?? {}), ); @@ -280,9 +280,9 @@ export function applyDefaultCodeTranslations({ extractedCodeTranslations, defaultCodeMessages, }: { - extractedCodeTranslations: Record; - defaultCodeMessages: Record; -}): Record { + extractedCodeTranslations: {[msgId: string]: TranslationMessage}; + defaultCodeMessages: {[msgId: string]: string}; +}): {[msgId: string]: TranslationMessage} { const unusedDefaultCodeMessages = _.difference( Object.keys(defaultCodeMessages), Object.keys(extractedCodeTranslations), diff --git a/packages/docusaurus/src/server/translations/translationsExtractor.ts b/packages/docusaurus/src/server/translations/translationsExtractor.ts index 0c74a548e4..3be8f1f13b 100644 --- a/packages/docusaurus/src/server/translations/translationsExtractor.ts +++ b/packages/docusaurus/src/server/translations/translationsExtractor.ts @@ -130,7 +130,7 @@ function logSourceCodeFileTranslationsWarnings( type SourceCodeFileTranslations = { sourceCodeFilePath: string; - translations: Record; + translations: {[msgId: string]: TranslationMessage}; warnings: string[]; }; @@ -189,7 +189,7 @@ function extractSourceCodeAstTranslations( Full code: ${generate(node).code}`; } - const translations: Record = {}; + const translations: {[msgId: string]: TranslationMessage} = {}; const warnings: string[] = []; let translateComponentName: string | undefined; let translateFunctionName: string | undefined; diff --git a/packages/docusaurus/src/server/versions/index.ts b/packages/docusaurus/src/server/versions/index.ts index e2f717419b..54a3777fd1 100644 --- a/packages/docusaurus/src/server/versions/index.ts +++ b/packages/docusaurus/src/server/versions/index.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import type {DocusaurusPluginVersionInformation} from '@docusaurus/types'; +import type {PluginVersionInformation} from '@docusaurus/types'; import fs from 'fs-extra'; import path from 'path'; @@ -29,7 +29,7 @@ async function getPackageJsonName( export async function getPluginVersion( pluginPath: string, siteDir: string, -): Promise { +): Promise { let potentialPluginPackageJsonDirectory = path.dirname(pluginPath); while (potentialPluginPackageJsonDirectory !== '/') { const packageJsonPath = path.join( diff --git a/packages/docusaurus/src/webpack/base.ts b/packages/docusaurus/src/webpack/base.ts index 7f4f963139..8754e70c9d 100644 --- a/packages/docusaurus/src/webpack/base.ts +++ b/packages/docusaurus/src/webpack/base.ts @@ -44,11 +44,13 @@ export function excludeJS(modulePath: string): boolean { ); } -export async function getDocusaurusAliases(): Promise> { +export async function getDocusaurusAliases(): Promise<{ + [aliasName: string]: string; +}> { const dirPath = path.resolve(__dirname, '../client/exports'); const extensions = ['.js', '.ts', '.tsx']; - const aliases: Record = {}; + const aliases: {[key: string]: string} = {}; (await fs.readdir(dirPath)) .filter((fileName) => extensions.includes(path.extname(fileName))) diff --git a/packages/docusaurus/src/webpack/server.ts b/packages/docusaurus/src/webpack/server.ts index cc3578d058..3adc362a41 100644 --- a/packages/docusaurus/src/webpack/server.ts +++ b/packages/docusaurus/src/webpack/server.ts @@ -37,7 +37,7 @@ export default async function createServerConfig({ } = props; const config = await createBaseConfig(props, true); - const routesLocation: Record = {}; + const routesLocation: {[filePath: string]: string} = {}; // Array of paths to be rendered. Relative to output directory const ssgPaths = routesPaths.map((str) => { const ssgPath = diff --git a/packages/lqip-loader/src/lqip.ts b/packages/lqip-loader/src/lqip.ts index 537e036843..f6ab095a18 100644 --- a/packages/lqip-loader/src/lqip.ts +++ b/packages/lqip-loader/src/lqip.ts @@ -14,7 +14,7 @@ const {version} = require('../package.json'); const ERROR_EXT = `Error: Input file is missing or uses unsupported image format, lqip v${version}`; -const SUPPORTED_MIMES: Record = { +const SUPPORTED_MIMES: {[ext: string]: string} = { jpeg: 'image/jpeg', jpg: 'image/jpeg', png: 'image/png', diff --git a/website/docs/docusaurus-core.md b/website/docs/docusaurus-core.md index 6fec152f62..00a2848715 100644 --- a/website/docs/docusaurus-core.md +++ b/website/docs/docusaurus-core.md @@ -335,7 +335,7 @@ You can even omit the children prop and specify a translation string in your `co React hook to access Docusaurus Context. The context contains the `siteConfig` object from [docusaurus.config.js](api/docusaurus.config.js.md) and some additional site metadata. ```ts -type DocusaurusPluginVersionInformation = +type PluginVersionInformation = | {readonly type: 'package'; readonly version?: string} | {readonly type: 'project'} | {readonly type: 'local'} @@ -344,7 +344,7 @@ type DocusaurusPluginVersionInformation = interface DocusaurusSiteMetadata { readonly docusaurusVersion: string; readonly siteVersion?: string; - readonly pluginVersions: Record; + readonly pluginVersions: Record; } interface I18nLocaleConfig { diff --git a/website/src/data/users.tsx b/website/src/data/users.tsx index cd9fe43af7..624ca2c8d4 100644 --- a/website/src/data/users.tsx +++ b/website/src/data/users.tsx @@ -74,7 +74,7 @@ export type User = { // Available tags to assign to your site // Please choose all tags that you think might apply. // We'll remove inappropriate tags, but it's less likely that we add tags. -export const Tags: Record = { +export const Tags: {[type in TagType]: Tag} = { // DO NOT USE THIS TAG: we choose sites to add to favorites favorite: { label: 'Favorite', diff --git a/website/src/utils/colorUtils.ts b/website/src/utils/colorUtils.ts index 78c4895c4b..faecb4341b 100644 --- a/website/src/utils/colorUtils.ts +++ b/website/src/utils/colorUtils.ts @@ -19,15 +19,14 @@ export type ColorState = { shades: Shades; }; -export type Shades = Record< - string, - { +export type Shades = { + [cssVar: string]: { adjustment: number; adjustmentInput: string; displayOrder: number; codeOrder: number; - } ->; + }; +}; export const COLOR_SHADES: Shades = { '--ifm-color-primary': { adjustment: 0, diff --git a/website/versioned_docs/version-2.0.0-beta.16/docusaurus-core.md b/website/versioned_docs/version-2.0.0-beta.16/docusaurus-core.md index 6fec152f62..00a2848715 100644 --- a/website/versioned_docs/version-2.0.0-beta.16/docusaurus-core.md +++ b/website/versioned_docs/version-2.0.0-beta.16/docusaurus-core.md @@ -335,7 +335,7 @@ You can even omit the children prop and specify a translation string in your `co React hook to access Docusaurus Context. The context contains the `siteConfig` object from [docusaurus.config.js](api/docusaurus.config.js.md) and some additional site metadata. ```ts -type DocusaurusPluginVersionInformation = +type PluginVersionInformation = | {readonly type: 'package'; readonly version?: string} | {readonly type: 'project'} | {readonly type: 'local'} @@ -344,7 +344,7 @@ type DocusaurusPluginVersionInformation = interface DocusaurusSiteMetadata { readonly docusaurusVersion: string; readonly siteVersion?: string; - readonly pluginVersions: Record; + readonly pluginVersions: Record; } interface I18nLocaleConfig { diff --git a/website/versioned_docs/version-2.0.0-beta.17/docusaurus-core.md b/website/versioned_docs/version-2.0.0-beta.17/docusaurus-core.md index 6fec152f62..00a2848715 100644 --- a/website/versioned_docs/version-2.0.0-beta.17/docusaurus-core.md +++ b/website/versioned_docs/version-2.0.0-beta.17/docusaurus-core.md @@ -335,7 +335,7 @@ You can even omit the children prop and specify a translation string in your `co React hook to access Docusaurus Context. The context contains the `siteConfig` object from [docusaurus.config.js](api/docusaurus.config.js.md) and some additional site metadata. ```ts -type DocusaurusPluginVersionInformation = +type PluginVersionInformation = | {readonly type: 'package'; readonly version?: string} | {readonly type: 'project'} | {readonly type: 'local'} @@ -344,7 +344,7 @@ type DocusaurusPluginVersionInformation = interface DocusaurusSiteMetadata { readonly docusaurusVersion: string; readonly siteVersion?: string; - readonly pluginVersions: Record; + readonly pluginVersions: Record; } interface I18nLocaleConfig {