From 9aa3f3b9d9b74c4afd89c5bf0d7610ac99b2a4cf Mon Sep 17 00:00:00 2001 From: Massoud Maboudi Date: Fri, 20 May 2022 12:06:09 +0800 Subject: [PATCH] Merge branch 'main' into massoudmaboudi/iammassoud-add-showcase --- .eslintignore | 2 - .eslintrc.js | 30 +- .gitattributes | 12 +- .github/workflows/build-blog-only.yml | 2 +- .github/workflows/build-perf.yml | 4 +- .github/workflows/canary-release.yml | 2 +- .github/workflows/codeql-analysis.yml | 4 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/lighthouse-report.yml | 4 +- .github/workflows/lint.yml | 2 +- .github/workflows/showcase-test.yml | 2 +- .github/workflows/tests-e2e.yml | 8 +- .github/workflows/tests-swizzle.yml | 2 +- .github/workflows/tests-windows.yml | 2 +- .github/workflows/tests.yml | 2 +- .gitignore | 1 - .prettierignore | 1 - .stylelintignore | 1 - __tests__/validate-package-json.test.ts | 6 +- __tests__/validate-tsconfig.test.ts | 66 + .../functions/codesandbox.ts | 3 +- admin/new.docusaurus.io/functions/index.ts | 3 +- .../new.docusaurus.io/functions/stackblitz.ts | 3 +- admin/scripts/copyUntypedFiles.js | 36 + ...se-score.mjs => formatLighthouseReport.js} | 0 ...nerateExamples.mjs => generateExamples.js} | 0 admin/scripts/package.json | 7 + .../{image-resize.mjs => resizeImage.js} | 4 +- jest.config.mjs | 14 +- jest/snapshotPathNormalizer.ts | 8 +- package.json | 18 +- packages/create-docusaurus/.npmignore | 3 +- packages/create-docusaurus/bin/index.js | 4 +- packages/create-docusaurus/package.json | 4 +- packages/create-docusaurus/src/index.ts | 6 +- .../templates/classic-typescript/package.json | 2 +- .../classic-typescript/src/pages/index.tsx | 5 +- .../templates/classic/package.json | 2 +- .../templates/classic/src/pages/index.js | 5 +- .../create-docusaurus/tsconfig.build.json | 6 +- packages/create-docusaurus/tsconfig.json | 8 +- packages/docusaurus-cssnano-preset/.npmignore | 2 + packages/docusaurus-cssnano-preset/index.js | 25 - .../docusaurus-cssnano-preset/package.json | 11 +- .../docusaurus-cssnano-preset/src/deps.d.ts | 11 + .../docusaurus-cssnano-preset/src/index.ts | 27 + ...{index.test.js.snap => index.test.ts.snap} | 0 .../{index.test.js => index.test.ts} | 10 +- .../{index.js => index.ts} | 25 +- .../docusaurus-cssnano-preset/tsconfig.json | 13 + packages/docusaurus-logger/.npmignore | 3 +- packages/docusaurus-logger/tsconfig.json | 6 +- packages/docusaurus-mdx-loader/.npmignore | 3 +- packages/docusaurus-mdx-loader/package.json | 4 +- packages/docusaurus-mdx-loader/src/loader.ts | 6 +- .../src/remark/toc/index.ts | 2 +- .../src/remark/transformImage/index.ts | 10 +- .../src/remark/transformLinks/index.ts | 6 +- packages/docusaurus-mdx-loader/tsconfig.json | 5 +- packages/docusaurus-migrate/.npmignore | 3 +- packages/docusaurus-migrate/bin/index.mjs | 4 +- packages/docusaurus-migrate/package.json | 6 +- .../src/__tests__/index.test.ts | 2 +- packages/docusaurus-migrate/src/index.ts | 11 +- .../docusaurus-migrate/tsconfig.build.json | 6 +- packages/docusaurus-migrate/tsconfig.json | 7 +- .../src/index.d.ts | 2 +- .../.npmignore | 3 +- .../src/__tests__/collectRedirects.test.ts | 6 +- .../src/__tests__/options.test.ts | 2 +- .../src/collectRedirects.ts | 15 +- .../src/createRedirectPageContent.ts | 2 +- .../src/index.ts | 9 +- .../src/options.ts | 2 +- .../src/redirectValidation.ts | 2 +- .../src/writeRedirectFiles.ts | 7 +- .../tsconfig.json | 9 +- .../docusaurus-plugin-content-blog/.npmignore | 3 +- .../src/__tests__/authors.test.ts | 2 +- .../src/__tests__/blogUtils.test.ts | 11 +- .../src/__tests__/feed.test.ts | 4 +- .../src/__tests__/frontMatter.test.ts | 2 +- .../src/__tests__/index.test.ts | 8 +- .../src/__tests__/options.test.ts | 2 +- .../src/__tests__/translations.test.ts | 9 +- .../src/authors.ts | 2 +- .../src/blogUtils.ts | 8 +- .../src/feed.ts | 8 +- .../src/index.ts | 12 +- .../src/plugin-content-blog.d.ts | 2 +- .../tsconfig.json | 6 +- .../docusaurus-plugin-content-docs/.npmignore | 3 +- .../package.json | 4 +- .../src/__tests__/cli.test.ts | Bin 11292 -> 11292 bytes .../src/__tests__/docs.test.ts | 8 +- .../src/__tests__/frontMatter.test.ts | 2 +- .../src/__tests__/index.test.ts | 35 +- .../src/__tests__/lastUpdate.test.ts | 2 +- .../src/__tests__/options.test.ts | 4 +- .../src/__tests__/translations.test.ts | 9 +- .../src/categoryGeneratedIndex.ts | 4 +- .../docusaurus-plugin-content-docs/src/cli.ts | 10 +- .../client/__tests__/docsClientUtils.test.ts | 2 +- .../src/docs.ts | 6 +- .../src/globalData.ts | 2 +- .../src/index.ts | 34 +- .../src/markdown/__tests__/linkify.test.ts | 2 +- .../src/markdown/linkify.ts | 2 +- .../src/options.ts | 7 +- .../src/plugin-content-docs.d.ts | 2 + .../src/props.ts | 4 +- .../src/routes.ts | 6 +- .../src/sidebars/__tests__/generator.test.ts | 2 +- .../src/sidebars/__tests__/index.test.ts | 2 +- .../src/sidebars/__tests__/processor.test.ts | 8 +- .../src/sidebars/generator.ts | 10 +- .../src/sidebars/index.ts | 14 +- .../src/sidebars/normalization.ts | 6 +- .../src/sidebars/postProcessor.ts | 4 +- .../src/sidebars/processor.ts | 10 +- .../src/sidebars/utils.ts | 5 +- .../src/tags.ts | 2 +- .../src/translations.ts | 17 +- .../src/types.ts | 2 - .../src/versions/__tests__/index.test.ts | 2 +- .../src/versions/files.ts | 2 +- .../src/versions/index.ts | 2 +- .../tsconfig.client.json | 15 + .../tsconfig.json | 7 +- .../.npmignore | 3 +- .../src/__tests__/index.test.ts | 2 +- .../src/__tests__/options.test.ts | 2 +- .../src/index.ts | 2 +- .../src/options.ts | 2 +- .../tsconfig.json | 6 +- packages/docusaurus-plugin-debug/.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - packages/docusaurus-plugin-debug/package.json | 6 +- packages/docusaurus-plugin-debug/src/index.ts | 4 +- .../src/theme/DebugConfig/index.tsx | 4 +- .../src/theme/DebugGlobalData/index.tsx | 3 +- .../src/theme/DebugRegistry/index.tsx | 3 +- .../src/theme/DebugRoutes/index.tsx | 3 +- .../src/theme/DebugSiteMetadata/index.tsx | 3 +- .../tsconfig.client.json | 15 + .../docusaurus-plugin-debug/tsconfig.json | 7 +- .../.npmignore | 3 +- .../package.json | 4 +- .../tsconfig.client.json | 15 + .../tsconfig.json | 7 +- .../docusaurus-plugin-google-gtag/.npmignore | 3 +- .../package.json | 4 +- .../tsconfig.client.json | 15 + .../tsconfig.json | 7 +- .../docusaurus-plugin-ideal-image/.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - .../package.json | 9 +- .../src/index.ts | 4 +- .../tsconfig.browser.json | 8 - .../tsconfig.client.json | 15 + .../tsconfig.json | 10 +- .../tsconfig.server.json | 4 - packages/docusaurus-plugin-pwa/.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - packages/docusaurus-plugin-pwa/package.json | 12 +- packages/docusaurus-plugin-pwa/src/index.ts | 14 +- .../src/{registerSw.js => registerSw.ts} | 29 +- ...erReloadPopup.js => renderReloadPopup.tsx} | 10 +- .../src/theme/PwaReloadPopup/index.tsx | 1 - .../tsconfig.browser.json | 8 - .../tsconfig.client.json | 20 + packages/docusaurus-plugin-pwa/tsconfig.json | 15 +- .../tsconfig.server.json | 4 - packages/docusaurus-plugin-sitemap/.npmignore | 3 +- .../src/__tests__/createSitemap.test.ts | 2 +- .../src/__tests__/options.test.ts | 2 +- .../src/createSitemap.ts | 2 +- .../docusaurus-plugin-sitemap/tsconfig.json | 6 +- packages/docusaurus-preset-classic/.npmignore | 3 +- .../docusaurus-preset-classic/tsconfig.json | 6 +- .../.npmignore | 3 +- .../src/__tests__/index.test.ts | 6 +- .../src/index.ts | 4 +- .../tsconfig.json | 6 +- packages/docusaurus-theme-classic/.npmignore | 9 +- .../docusaurus-theme-classic/babel.config.js | 30 - .../docusaurus-theme-classic/package.json | 18 +- .../src/__tests__/translations.test.ts | 2 +- .../src/__tests__/validateThemeConfig.test.ts | 2 +- .../docusaurus-theme-classic/src/index.ts | 10 +- .../src/theme/BlogArchivePage/index.tsx | 4 +- .../src/theme/BlogListPage/index.tsx | 10 +- .../src/theme/BlogPostAuthors/index.tsx | 2 +- .../src/theme/BlogPostItem/index.tsx | 4 +- .../src/theme/BlogPostPage/index.tsx | 10 +- .../src/theme/BlogSidebar/Desktop/index.tsx | 2 +- .../src/theme/BlogSidebar/index.tsx | 2 +- .../src/theme/BlogTagsListPage/index.tsx | 9 +- .../src/theme/BlogTagsPostsPage/index.tsx | 11 +- .../src/theme/CodeBlock/Content/Element.tsx | 2 +- .../src/theme/CodeBlock/Content/String.tsx | 2 +- .../src/theme/CodeBlock/Line/index.tsx | 1 + .../src/theme/CodeBlock/index.tsx | 2 +- .../src/theme/ColorModeToggle/index.tsx | 4 +- .../src/theme/Details/index.tsx | 1 + .../src/theme/DocBreadcrumbs/index.tsx | 5 +- .../src/theme/DocCard/index.tsx | 13 +- .../src/theme/DocCardList/index.tsx | 5 +- .../DocCategoryGeneratedIndexPage/index.tsx | 4 +- .../src/theme/DocItem/index.tsx | 17 +- .../src/theme/DocItemFooter/index.tsx | 5 +- .../src/theme/DocPage/Layout/Main/index.tsx | 5 +- .../Layout/Sidebar/ExpandButton/index.tsx | 2 +- .../theme/DocPage/Layout/Sidebar/index.tsx | 11 +- .../{index.module.css => styles.module.css} | 0 .../src/theme/DocPage/Layout/index.tsx | 7 +- .../{index.module.css => styles.module.css} | 0 .../src/theme/DocPage/index.tsx | 8 +- .../Desktop/CollapseButton/index.tsx | 2 +- .../src/theme/DocSidebar/index.tsx | 2 +- .../{Category.tsx => Category/index.tsx} | 29 +- .../{Html.tsx => Html/index.tsx} | 2 +- .../styles.module.css} | 0 .../{Link.tsx => Link/index.tsx} | 3 +- .../styles.module.css} | 0 .../src/theme/DocSidebarItems/index.tsx | 2 +- .../src/theme/DocTagDocListPage/index.tsx | 7 +- .../src/theme/DocTagsListPage/index.tsx | 7 +- .../src/theme/DocVersionBadge/index.tsx | 2 +- .../src/theme/DocVersionBanner/index.tsx | 2 +- .../src/theme/EditThisPage/index.tsx | 5 +- .../theme/Footer/Links/MultiColumn/index.tsx | 2 +- .../src/theme/Footer/Links/Simple/index.tsx | 2 +- .../src/theme/Footer/Links/index.tsx | 2 +- .../src/theme/Footer/Logo/index.tsx | 4 +- .../src/theme/Heading/index.tsx | 2 +- .../src/theme/IconEdit/index.tsx | 1 - .../src/theme/LastUpdated/index.tsx | 2 +- .../src/theme/Layout/index.tsx | 12 +- .../src/theme/Logo/index.tsx | 5 +- .../MDXComponents/{Img.tsx => Img/index.tsx} | 5 +- .../{Img.module.css => Img/styles.module.css} | 0 .../src/theme/MDXComponents/Ul.tsx | 4 +- .../src/theme/MDXPage/index.tsx | 8 +- .../theme/Navbar/ColorModeToggle/index.tsx | 2 +- .../src/theme/Navbar/Content/index.tsx | 9 +- .../src/theme/Navbar/Layout/index.tsx | 4 +- .../Navbar/MobileSidebar/Header/index.tsx | 2 +- .../Navbar/MobileSidebar/Layout/index.tsx | 2 +- .../MobileSidebar/PrimaryMenu/index.tsx | 2 +- .../Navbar/MobileSidebar/Toggle/index.tsx | 2 +- .../src/theme/Navbar/MobileSidebar/index.tsx | 4 +- .../theme/NavbarItem/DefaultNavbarItem.tsx | 5 +- .../src/theme/NavbarItem/DocNavbarItem.tsx | 6 +- .../theme/NavbarItem/DocSidebarNavbarItem.tsx | 7 +- .../DocsVersionDropdownNavbarItem.tsx | 6 +- .../NavbarItem/DocsVersionNavbarItem.tsx | 4 +- .../theme/NavbarItem/DropdownNavbarItem.tsx | 5 +- .../LocaleDropdownNavbarItem/index.tsx | 6 +- .../src/theme/NavbarItem/NavbarNavLink.tsx | 4 +- .../src/theme/NavbarItem/SearchNavbarItem.tsx | 2 +- .../src/theme/NavbarItem/index.tsx | 3 +- .../src/theme/NotFound.tsx | 2 +- .../src/theme/SiteMetadata/index.tsx | 2 +- .../src/theme/TOC/index.tsx | 3 +- .../index.tsx} | 3 +- .../styles.module.css} | 0 .../src/theme/TOCCollapsible/index.tsx | 5 +- .../{index.module.css => styles.module.css} | 0 .../src/theme/TOCInline/index.tsx | 3 +- .../src/theme/TOCItems/index.tsx | 4 +- .../src/theme/TabItem/index.tsx | 2 +- .../src/theme/Tabs/__tests__/index.test.tsx | 4 +- .../src/theme/Tabs/index.tsx | 3 +- .../src/theme/TagsListByLetter/index.tsx | 2 +- .../src/theme/ThemedImage/index.tsx | 1 - .../src/translations.ts | 5 +- .../tsconfig.client.json | 20 + .../docusaurus-theme-classic/tsconfig.json | 19 +- packages/docusaurus-theme-common/.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - packages/docusaurus-theme-common/package.json | 8 +- .../src/components/Collapsible/index.tsx | 2 +- .../src/components/Details/index.tsx | 2 +- .../src/contexts/colorMode.tsx | 3 +- .../src/contexts/docsPreferredVersion.tsx | 16 +- .../src/contexts/docsSidebar.tsx | 2 +- .../src/contexts/docsVersion.tsx | 2 +- .../src/hooks/usePrismTheme.ts | 2 +- .../src/hooks/useSearchPage.ts | 2 +- .../src/utils/__tests__/docsUtils.test.tsx | 4 +- .../src/utils/__tests__/generalUtils.test.tsx | 2 +- .../src/utils/__tests__/reactUtils.test.ts | 2 +- .../src/utils/__tests__/routesUtils.test.ts | 2 +- .../src/utils/__tests__/tocUtils.test.ts | 2 +- .../__tests__/useAlternatePageUtils.test.tsx | 2 +- .../utils/__tests__/useLocalPathname.test.tsx | 2 +- .../utils/__tests__/usePluralForm.test.tsx | 2 +- .../src/utils/codeBlockUtils.ts | 2 +- .../src/utils/docsUtils.tsx | 16 +- .../src/utils/metadataUtils.tsx | 2 +- .../src/utils/scrollUtils.tsx | 2 +- .../src/utils/searchUtils.ts | 2 +- .../src/utils/useLocationChange.ts | 2 +- .../docusaurus-theme-common/tsconfig.json | 5 +- .../.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - .../package.json | 9 +- .../src/theme/Playground/index.tsx | 7 +- .../tsconfig.client.json | 13 +- .../tsconfig.json | 7 +- .../tsconfig.server.json | 5 - .../.npmignore | 3 +- .../copyUntypedFiles.mjs | 20 - .../package.json | 9 +- .../src/__tests__/validateThemeConfig.test.ts | 2 +- .../src/index.ts | 4 +- .../src/theme/SearchBar/index.tsx | 2 +- .../src/theme/SearchPage/index.tsx | 5 +- .../tsconfig.client.json | 13 +- .../tsconfig.json | 10 +- .../tsconfig.server.json | 4 - .../docusaurus-theme-translations/.npmignore | 3 +- .../locales/__tests__/locales.test.ts | 2 +- .../package.json | 4 +- .../src/utils.ts | 5 +- .../tsconfig.build.json | 7 +- .../tsconfig.json | 3 +- .../docusaurus-theme-translations/update.mjs | 2 +- packages/docusaurus-types/package.json | 3 - packages/docusaurus-utils-common/.npmignore | 3 +- .../docusaurus-utils-common/tsconfig.json | 6 +- .../docusaurus-utils-validation/.npmignore | 3 +- .../src/validationSchemas.ts | 2 +- .../src/validationUtils.ts | 2 +- .../docusaurus-utils-validation/tsconfig.json | 6 +- packages/docusaurus-utils/.npmignore | 3 +- packages/docusaurus-utils/package.json | 2 +- .../src/__tests__/emitUtils.test.ts | 2 +- .../src/__tests__/gitUtils.test.ts | 2 +- .../src/__tests__/jsUtils.test.ts | 2 +- .../src/__tests__/markdownUtils.test.ts | 2 +- .../src/__tests__/pathUtils.test.ts | 2 +- .../docusaurus-utils/src/dataFileUtils.ts | 4 +- packages/docusaurus-utils/src/globUtils.ts | 2 +- packages/docusaurus-utils/src/i18nUtils.ts | 4 +- packages/docusaurus-utils/src/jsUtils.ts | 2 +- packages/docusaurus-utils/src/urlUtils.ts | 2 +- packages/docusaurus-utils/src/webpackUtils.ts | 2 +- packages/docusaurus-utils/tsconfig.json | 6 +- packages/docusaurus/.npmignore | 3 +- packages/docusaurus/bin/beforeCli.mjs | 6 +- packages/docusaurus/bin/docusaurus.mjs | 2 +- packages/docusaurus/copyUntypedFiles.mjs | 20 - packages/docusaurus/package.json | 26 +- packages/docusaurus/src/client/App.tsx | 8 +- .../src/client/docusaurusContext.tsx | 3 +- .../src/client/exports/ComponentCreator.tsx | 2 +- .../src/client/exports/ErrorBoundary.tsx | 3 +- .../docusaurus/src/client/exports/Link.tsx | 4 +- .../src/client/exports/Translate.tsx | 3 +- .../client/exports/__tests__/Head.test.tsx | 2 +- .../src/client/exports/useRouteContext.tsx | 2 +- .../docusaurus/src/client/serverEntry.tsx | 13 +- .../src/client/theme-fallback/Error/index.tsx | 4 +- .../client/theme-fallback/NotFound/index.tsx | 2 +- packages/docusaurus/src/commands/build.ts | 10 +- packages/docusaurus/src/commands/deploy.ts | 6 +- packages/docusaurus/src/commands/external.ts | 2 +- packages/docusaurus/src/commands/serve.ts | 8 +- packages/docusaurus/src/commands/start.ts | 6 +- .../__snapshots__/actions.test.ts.snap | 6 +- .../__snapshots__/index.test.ts.snap | 8 +- .../swizzle/__tests__/actions.test.ts | 6 +- .../swizzle/__tests__/components.test.ts | 2 +- .../commands/swizzle/__tests__/config.test.ts | 2 +- .../commands/swizzle/__tests__/index.test.ts | 4 +- .../src/commands/swizzle/actions.ts | 6 +- .../docusaurus/src/commands/swizzle/common.ts | 2 +- .../src/commands/swizzle/components.ts | 12 +- .../docusaurus/src/commands/swizzle/config.ts | 6 +- .../docusaurus/src/commands/swizzle/index.ts | 6 +- .../src/commands/swizzle/prompts.ts | 2 +- .../docusaurus/src/commands/swizzle/tables.ts | 6 +- .../docusaurus/src/commands/swizzle/themes.ts | 4 +- .../src/commands/writeTranslations.ts | 3 +- .../src/server/__tests__/siteMetadata.test.ts | 2 +- .../src/server/__tests__/utils.test.ts | 2 +- packages/docusaurus/src/server/brokenLinks.ts | 10 +- packages/docusaurus/src/server/config.ts | 2 +- .../docusaurus/src/server/configValidation.ts | 2 +- packages/docusaurus/src/server/getHostPort.ts | 2 +- packages/docusaurus/src/server/htmlTags.ts | 2 +- packages/docusaurus/src/server/i18n.ts | 2 +- packages/docusaurus/src/server/index.ts | 4 +- .../plugins/__tests__/pluginIds.test.ts | 2 +- .../docusaurus/src/server/plugins/index.ts | 12 +- .../docusaurus/src/server/plugins/init.ts | 16 +- .../docusaurus/src/server/plugins/presets.ts | 2 +- .../src/server/plugins/routeConfig.ts | 2 +- packages/docusaurus/src/server/routes.ts | 4 +- .../docusaurus/src/server/siteMetadata.ts | 8 +- .../__tests__/translations.test.ts | 6 +- .../__tests__/translationsExtractor.test.ts | 4 +- .../src/server/translations/translations.ts | 2 +- .../translations/translationsExtractor.ts | 8 +- packages/docusaurus/src/server/utils.ts | 2 +- .../src/webpack/__tests__/base.test.ts | 5 +- .../src/webpack/__tests__/utils.test.ts | 2 +- .../docusaurus/src/webpack/aliases/index.ts | 2 +- packages/docusaurus/src/webpack/base.ts | 8 +- packages/docusaurus/src/webpack/client.ts | 7 +- .../src/webpack/plugins/CleanWebpackPlugin.ts | 2 +- .../src/webpack/plugins/LogPlugin.ts | 2 +- packages/docusaurus/src/webpack/server.ts | 14 +- packages/docusaurus/src/webpack/utils.ts | 12 +- packages/docusaurus/tsconfig.client.json | 14 +- packages/docusaurus/tsconfig.json | 12 +- packages/docusaurus/tsconfig.server.json | 8 +- packages/eslint-plugin/.npmignore | 3 +- packages/eslint-plugin/package.json | 4 +- packages/eslint-plugin/tsconfig.json | 6 +- packages/lqip-loader/.npmignore | 3 +- packages/lqip-loader/src/lqip.ts | 2 +- packages/lqip-loader/tsconfig.json | 6 +- packages/stylelint-copyright/index.js | 57 - packages/stylelint-copyright/package.json | 9 +- .../__tests__/index.test.ts} | 37 +- packages/stylelint-copyright/src/index.ts | 58 + packages/stylelint-copyright/tsconfig.json | 13 + tsconfig.json | 12 +- .../_pages tests/error-boundary-tests.tsx | 2 +- .../_dogfooding/_pages tests/link-tests.tsx | 2 +- .../_dogfooding/testSwizzleThemeClassic.mjs | 2 +- website/community/4-canary/Versions.tsx | 2 +- website/docs/deployment.mdx | 4 + website/docusaurus.config.js | 10 +- website/package.json | 11 +- .../src/components/ColorGenerator/index.tsx | 5 +- website/src/components/Playground/index.tsx | 2 +- website/src/components/UpgradeGuide/index.tsx | 4 +- website/src/data/__tests__/user.test.ts | 5 +- website/src/data/showcase/30-days-swa.png | Bin 0 -> 74852 bytes website/src/data/showcase/codesweetly.png | Bin 0 -> 17716 bytes website/src/data/showcase/fast.png | Bin 0 -> 38221 bytes website/src/data/showcase/httpin.png | Bin 0 -> 23053 bytes website/src/data/users.tsx | 32 + website/src/pages/index.tsx | 7 +- .../_components/ShowcaseCard/index.tsx | 7 +- .../ShowcaseFilterToggle/index.tsx | 2 +- .../_components/ShowcaseTagSelect/index.tsx | 2 +- website/src/pages/showcase/index.tsx | 26 +- website/src/pages/versions.tsx | 5 +- .../theme/ChangelogAuthors/index.tsx | 4 +- .../theme/ChangelogAuthors/styles.module.css | 4 +- .../changelog/theme/ChangelogItem/index.tsx | 2 +- .../changelog/theme/ChangelogList/index.tsx | 12 +- .../changelog/theme/ChangelogPage/index.tsx | 12 +- .../featureRequests/FeatureRequestsPage.tsx | 2 +- website/src/theme/CodeBlock/index.tsx | 2 +- website/src/theme/ColorModeToggle.tsx | 2 +- .../theme/DocSidebar/Desktop/Content/index.js | 2 +- website/src/theme/Layout/index.tsx | 2 +- yarn.lock | 1591 ++++++++--------- 464 files changed, 2288 insertions(+), 2198 deletions(-) create mode 100644 __tests__/validate-tsconfig.test.ts create mode 100644 admin/scripts/copyUntypedFiles.js rename admin/scripts/{format-lighthouse-score.mjs => formatLighthouseReport.js} (100%) rename admin/scripts/{generateExamples.mjs => generateExamples.js} (100%) create mode 100644 admin/scripts/package.json rename admin/scripts/{image-resize.mjs => resizeImage.js} (100%) delete mode 100644 packages/docusaurus-cssnano-preset/index.js create mode 100644 packages/docusaurus-cssnano-preset/src/deps.d.ts create mode 100644 packages/docusaurus-cssnano-preset/src/index.ts rename packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/__snapshots__/{index.test.js.snap => index.test.ts.snap} (100%) rename packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/{index.test.js => index.test.ts} (78%) rename packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/{index.js => index.ts} (69%) create mode 100644 packages/docusaurus-cssnano-preset/tsconfig.json create mode 100644 packages/docusaurus-plugin-content-docs/tsconfig.client.json delete mode 100644 packages/docusaurus-plugin-debug/copyUntypedFiles.mjs create mode 100644 packages/docusaurus-plugin-debug/tsconfig.client.json create mode 100644 packages/docusaurus-plugin-google-analytics/tsconfig.client.json create mode 100644 packages/docusaurus-plugin-google-gtag/tsconfig.client.json delete mode 100644 packages/docusaurus-plugin-ideal-image/copyUntypedFiles.mjs delete mode 100644 packages/docusaurus-plugin-ideal-image/tsconfig.browser.json create mode 100644 packages/docusaurus-plugin-ideal-image/tsconfig.client.json delete mode 100644 packages/docusaurus-plugin-ideal-image/tsconfig.server.json delete mode 100644 packages/docusaurus-plugin-pwa/copyUntypedFiles.mjs rename packages/docusaurus-plugin-pwa/src/{registerSw.js => registerSw.ts} (93%) rename packages/docusaurus-plugin-pwa/src/{renderReloadPopup.js => renderReloadPopup.tsx} (75%) delete mode 100644 packages/docusaurus-plugin-pwa/tsconfig.browser.json create mode 100644 packages/docusaurus-plugin-pwa/tsconfig.client.json delete mode 100644 packages/docusaurus-plugin-pwa/tsconfig.server.json delete mode 100644 packages/docusaurus-theme-classic/babel.config.js rename packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/{index.module.css => styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/DocPage/Layout/{index.module.css => styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/DocSidebarItem/{Category.tsx => Category/index.tsx} (94%) rename packages/docusaurus-theme-classic/src/theme/DocSidebarItem/{Html.tsx => Html/index.tsx} (95%) rename packages/docusaurus-theme-classic/src/theme/DocSidebarItem/{Html.module.css => Html/styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/DocSidebarItem/{Link.tsx => Link/index.tsx} (97%) rename packages/docusaurus-theme-classic/src/theme/DocSidebarItem/{Link.module.css => Link/styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/MDXComponents/{Img.tsx => Img/index.tsx} (93%) rename packages/docusaurus-theme-classic/src/theme/MDXComponents/{Img.module.css => Img/styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/TOCCollapsible/{CollapseButton.tsx => CollapseButton/index.tsx} (94%) rename packages/docusaurus-theme-classic/src/theme/TOCCollapsible/{CollapseButton.module.css => CollapseButton/styles.module.css} (100%) rename packages/docusaurus-theme-classic/src/theme/TOCCollapsible/{index.module.css => styles.module.css} (100%) create mode 100644 packages/docusaurus-theme-classic/tsconfig.client.json delete mode 100644 packages/docusaurus-theme-common/copyUntypedFiles.mjs delete mode 100644 packages/docusaurus-theme-live-codeblock/copyUntypedFiles.mjs delete mode 100644 packages/docusaurus-theme-live-codeblock/tsconfig.server.json delete mode 100644 packages/docusaurus-theme-search-algolia/copyUntypedFiles.mjs delete mode 100644 packages/docusaurus-theme-search-algolia/tsconfig.server.json delete mode 100644 packages/docusaurus/copyUntypedFiles.mjs delete mode 100644 packages/stylelint-copyright/index.js rename packages/stylelint-copyright/{__tests__/index.test.js => src/__tests__/index.test.ts} (81%) create mode 100644 packages/stylelint-copyright/src/index.ts create mode 100644 packages/stylelint-copyright/tsconfig.json create mode 100644 website/src/data/showcase/30-days-swa.png create mode 100644 website/src/data/showcase/codesweetly.png create mode 100644 website/src/data/showcase/fast.png create mode 100644 website/src/data/showcase/httpin.png diff --git a/.eslintignore b/.eslintignore index e58be97cbaf51..b0c14dbeea5fe 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,10 +11,8 @@ examples/ packages/lqip-loader/lib/ packages/docusaurus/lib/ packages/docusaurus-*/lib/* -packages/docusaurus-*/lib-next/ packages/eslint-plugin/lib/ packages/stylelint-copyright/lib/ -copyUntypedFiles.mjs packages/create-docusaurus/lib/* packages/create-docusaurus/templates/facebook diff --git a/.eslintrc.js b/.eslintrc.js index d8b7a4584e11e..4dc985f0d9f9e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -220,7 +220,35 @@ module.exports = { ], }, ], - 'import/order': OFF, + 'import/order': [ + WARNING, + { + groups: [ + 'builtin', + 'external', + 'internal', + ['parent', 'sibling', 'index'], + 'type', + ], + pathGroups: [ + {pattern: '@jest/globals', group: 'builtin', position: 'before'}, + {pattern: 'react', group: 'builtin', position: 'before'}, + {pattern: 'fs-extra', group: 'builtin'}, + {pattern: 'lodash', group: 'external', position: 'before'}, + {pattern: 'clsx', group: 'external', position: 'before'}, + // 'Bit weird to not use the `import/internal-regex` option, but this + // way, we can make `import type { Props } from "@theme/*"` appear + // before `import styles from "styles.module.css"`, which is what we + // always did. This should be removable once we stop using ambient + // module declarations for theme aliases. + {pattern: '@theme/**', group: 'internal'}, + {pattern: '@site/**', group: 'internal'}, + {pattern: '@theme-init/**', group: 'internal'}, + {pattern: '@theme-original/**', group: 'internal'}, + ], + pathGroupsExcludedImportTypes: [], + }, + ], 'import/prefer-default-export': OFF, 'jest/consistent-test-it': WARNING, diff --git a/.gitattributes b/.gitattributes index 4bbe761c210d1..6ab8de85c3e5b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -31,8 +31,10 @@ # Make GitHub not index certain files in the languages overview # See https://github.com/github/linguist/blob/master/docs/overrides.md # generated files' diff will be minimized -**/__fixtures__/** linguist-generated -.husky/** linguist-vendored -jest/** linguist-vendored -admin/** linguist-documentation -website/** linguist-documentation +**/__fixtures__/** linguist-generated +examples/** linguist-generated +.husky/** linguist-vendored +jest/** linguist-vendored +admin/** linguist-documentation +website/** linguist-documentation +packages/create-docusaurus/templates/** linguist-vendored diff --git a/.github/workflows/build-blog-only.yml b/.github/workflows/build-blog-only.yml index 8b16422415e0e..032f8ae3455f7 100644 --- a/.github/workflows/build-blog-only.yml +++ b/.github/workflows/build-blog-only.yml @@ -23,7 +23,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/build-perf.yml b/.github/workflows/build-perf.yml index c7c99b0e782fd..2fa8b482a7fc3 100644 --- a/.github/workflows/build-perf.yml +++ b/.github/workflows/build-perf.yml @@ -35,7 +35,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn @@ -55,7 +55,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + - uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: cache: yarn - name: Installation diff --git a/.github/workflows/canary-release.yml b/.github/workflows/canary-release.yml index f11d805b64613..23353fa1d9e15 100644 --- a/.github/workflows/canary-release.yml +++ b/.github/workflows/canary-release.yml @@ -20,7 +20,7 @@ jobs: with: fetch-depth: 0 # Needed to get the commit number with "git rev-list --count HEAD" - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 4fb9c9ab407d7..91f6c42c4f643 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -34,9 +34,9 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Initialize CodeQL - uses: github/codeql-action/init@75b4f1c4669133dc294b06c2794e969efa2e5316 # v2 + uses: github/codeql-action/init@2f58583a1b24a7d3c7034f6bf9fa506d23b1183b # v2 with: languages: ${{ matrix.language }} - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@75b4f1c4669133dc294b06c2794e969efa2e5316 # v2 + uses: github/codeql-action/analyze@2f58583a1b24a7d3c7034f6bf9fa506d23b1183b # v2 diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index a8b388ccc1bda..32fc4d96a9972 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,4 +15,4 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b #v3 - name: Dependency Review - uses: actions/dependency-review-action@3f943b86c9a289f4e632c632695e2e0898d9d67d # v1 + uses: actions/dependency-review-action@39e692fa323107ef86d8fdac0067ce647f239bd7 # v1 diff --git a/.github/workflows/lighthouse-report.yml b/.github/workflows/lighthouse-report.yml index 3f57a9956b141..bbd6692d1e4a3 100644 --- a/.github/workflows/lighthouse-report.yml +++ b/.github/workflows/lighthouse-report.yml @@ -36,13 +36,13 @@ jobs: PR_NUMBER: ${{ github.event.pull_request.number}} - name: Format lighthouse score id: format_lighthouse_score - uses: actions/github-script@9ac08808f993958e9de277fe43a64532a609130e # v6 + uses: actions/github-script@7a5c598405937d486b0331594b5da2b14db670da # v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const results = ${{ steps.lighthouse_audit.outputs.manifest }} const links = ${{ steps.lighthouse_audit.outputs.links }} - const createLighthouseReport = (await import(`${process.env.GITHUB_WORKSPACE}/admin/scripts/format-lighthouse-score.mjs`)).default; + const createLighthouseReport = (await import(`${process.env.GITHUB_WORKSPACE}/admin/scripts/formatLighthouseReport.js`)).default; const comment = createLighthouseReport({ results, links }); core.setOutput("comment", comment); diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a49bf9c280377..6162382297f64 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/showcase-test.yml b/.github/workflows/showcase-test.yml index 8bba764dd61ed..0403ea3fa1a2f 100644 --- a/.github/workflows/showcase-test.yml +++ b/.github/workflows/showcase-test.yml @@ -23,7 +23,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/tests-e2e.yml b/.github/workflows/tests-e2e.yml index cfaff3b7749b7..f10f08f65786b 100644 --- a/.github/workflows/tests-e2e.yml +++ b/.github/workflows/tests-e2e.yml @@ -34,7 +34,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: ${{ matrix.node }} cache: yarn @@ -73,7 +73,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js 16 - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn @@ -119,7 +119,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js 16 - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn @@ -149,7 +149,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js 16 - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/tests-swizzle.yml b/.github/workflows/tests-swizzle.yml index 4887565a4eb47..00a7f388a2ace 100644 --- a/.github/workflows/tests-swizzle.yml +++ b/.github/workflows/tests-swizzle.yml @@ -27,7 +27,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Set up Node - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: '16' cache: yarn diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index ade80a4f646f4..186833e7d080a 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -29,7 +29,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: ${{ matrix.node }} - name: Installation diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 89bb9fa13f003..a078a2bf3639e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -27,7 +27,7 @@ jobs: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@56337c425554a6be30cdef71bf441f15be286854 # v3 + uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048 # v3 with: node-version: ${{ matrix.node }} cache: yarn diff --git a/.gitignore b/.gitignore index 0e0bd14648b02..1e612853226b9 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,6 @@ packages/docusaurus/lib/ packages/docusaurus-*/lib/* packages/eslint-plugin/lib/ packages/stylelint-copyright/lib/ -packages/docusaurus-*/lib-next/ website/netlifyDeployPreview/* website/changelog diff --git a/.prettierignore b/.prettierignore index c7aec4e026432..5bfdf4925c04f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,7 +7,6 @@ coverage packages/lqip-loader/lib/ packages/docusaurus/lib/ packages/docusaurus-*/lib/* -packages/docusaurus-*/lib-next/ packages/create-docusaurus/lib/* packages/create-docusaurus/templates/*/docusaurus.config.js packages/eslint-plugin/lib/ diff --git a/.stylelintignore b/.stylelintignore index 951af3a16ea9e..15db7860ba7a9 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -10,7 +10,6 @@ examples/ packages/lqip-loader/lib/ packages/docusaurus/lib/ packages/docusaurus-*/lib/* -packages/docusaurus-*/lib-next/ packages/create-docusaurus/lib/* packages/create-docusaurus/templates/ website/static/katex/katex.min.css diff --git a/__tests__/validate-package-json.test.ts b/__tests__/validate-package-json.test.ts index 8598d7b892479..31bd4e8b5e8d8 100644 --- a/__tests__/validate-package-json.test.ts +++ b/__tests__/validate-package-json.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {Globby} from '@docusaurus/utils'; import fs from 'fs-extra'; +import {Globby} from '@docusaurus/utils'; type PackageJsonFile = { file: string; @@ -62,7 +62,9 @@ describe('packages', () => { const packageJsonFiles = await getPackagesJsonFiles(); packageJsonFiles - .filter((packageJsonFile) => packageJsonFile.content.name.startsWith('@')) + .filter((packageJsonFile) => + packageJsonFile.content.name?.startsWith('@'), + ) .forEach((packageJsonFile) => { if (packageJsonFile) { // Unfortunately jest custom message do not exist in loops, diff --git a/__tests__/validate-tsconfig.test.ts b/__tests__/validate-tsconfig.test.ts new file mode 100644 index 0000000000000..7a80816b7a98c --- /dev/null +++ b/__tests__/validate-tsconfig.test.ts @@ -0,0 +1,66 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import fs from 'fs-extra'; +import {Globby} from '@docusaurus/utils'; +import {Joi} from '@docusaurus/utils-validation'; + +type TsconfigFile = { + file: string; + content: { + extends?: string; + compilerOptions: { + [key: string]: unknown; + }; + }; +}; + +async function getTsconfigFiles(): Promise { + const files = await Globby('packages/*/tsconfig.*'); + return Promise.all( + files.map((file) => fs.readJSON(file).then((content) => ({file, content}))), + ); +} + +const tsconfigSchema = Joi.object({ + extends: '../../tsconfig.json', + compilerOptions: Joi.alternatives().conditional( + Joi.object({noEmit: true}).unknown(), + { + then: Joi.object({ + noEmit: Joi.valid(true).required(), + incremental: Joi.forbidden(), + tsBuildInfoFile: Joi.forbidden(), + outDir: Joi.forbidden(), + module: Joi.valid('commonjs', 'es2020', 'esnext').required(), + }).unknown(), + otherwise: Joi.object({ + noEmit: Joi.valid(false).required(), + incremental: Joi.valid(true).required(), + rootDir: Joi.valid('src').required(), + outDir: Joi.valid('lib').required(), + module: Joi.valid('commonjs', 'es2020', 'esnext').required(), + }).unknown(), + }, + ), +}).unknown(); + +describe('tsconfig files', () => { + it('contain all required fields', async () => { + const tsconfigFiles = await getTsconfigFiles(); + tsconfigFiles.forEach((file) => { + try { + Joi.attempt(file.content, tsconfigSchema); + } catch (e) { + ( + e as Error + ).message += `\n${file.file} does not match the required schema.`; + throw e; + } + }); + }); +}); diff --git a/admin/new.docusaurus.io/functions/codesandbox.ts b/admin/new.docusaurus.io/functions/codesandbox.ts index 365ac26911f42..650c45727e6b5 100644 --- a/admin/new.docusaurus.io/functions/codesandbox.ts +++ b/admin/new.docusaurus.io/functions/codesandbox.ts @@ -5,9 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {Handler} from '@netlify/functions'; - import {createPlaygroundResponse} from '../functionUtils/playgroundUtils'; +import type {Handler} from '@netlify/functions'; export const handler: Handler = async function handler() { return createPlaygroundResponse('codesandbox'); diff --git a/admin/new.docusaurus.io/functions/index.ts b/admin/new.docusaurus.io/functions/index.ts index a137fecb41c3a..14a9df8c0632b 100644 --- a/admin/new.docusaurus.io/functions/index.ts +++ b/admin/new.docusaurus.io/functions/index.ts @@ -5,13 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import type {Handler} from '@netlify/functions'; - import { readPlaygroundName, createPlaygroundResponse, createPlaygroundDocumentationResponse, } from '../functionUtils/playgroundUtils'; +import type {Handler} from '@netlify/functions'; export const handler: Handler = async (event) => { const playgroundName = readPlaygroundName(event); diff --git a/admin/new.docusaurus.io/functions/stackblitz.ts b/admin/new.docusaurus.io/functions/stackblitz.ts index e7762f20dce05..bc6a84d31f5a1 100644 --- a/admin/new.docusaurus.io/functions/stackblitz.ts +++ b/admin/new.docusaurus.io/functions/stackblitz.ts @@ -5,9 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {Handler} from '@netlify/functions'; - import {createPlaygroundResponse} from '../functionUtils/playgroundUtils'; +import type {Handler} from '@netlify/functions'; export const handler: Handler = async function handler() { return createPlaygroundResponse('stackblitz'); diff --git a/admin/scripts/copyUntypedFiles.js b/admin/scripts/copyUntypedFiles.js new file mode 100644 index 0000000000000..59178146452a2 --- /dev/null +++ b/admin/scripts/copyUntypedFiles.js @@ -0,0 +1,36 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import fs from 'fs-extra'; +import path from 'path'; +import chokidar from 'chokidar'; + +const srcDir = path.join(process.cwd(), 'src'); +const libDir = path.join(process.cwd(), 'lib'); + +const ignoredPattern = /(?:__tests__|\.tsx?$)/; + +async function copy() { + await fs.copy(srcDir, libDir, { + filter(testedPath) { + return !ignoredPattern.test(testedPath); + }, + }); +} + +if (process.argv.includes('--watch')) { + const watcher = chokidar.watch(srcDir, { + ignored: ignoredPattern, + ignoreInitial: true, + persistent: true, + }); + ['add', 'change', 'unlink', 'addDir', 'unlinkDir'].forEach((event) => + watcher.on(event, copy), + ); +} else { + await copy(); +} diff --git a/admin/scripts/format-lighthouse-score.mjs b/admin/scripts/formatLighthouseReport.js similarity index 100% rename from admin/scripts/format-lighthouse-score.mjs rename to admin/scripts/formatLighthouseReport.js diff --git a/admin/scripts/generateExamples.mjs b/admin/scripts/generateExamples.js similarity index 100% rename from admin/scripts/generateExamples.mjs rename to admin/scripts/generateExamples.js diff --git a/admin/scripts/package.json b/admin/scripts/package.json new file mode 100644 index 0000000000000..03df6476e25f1 --- /dev/null +++ b/admin/scripts/package.json @@ -0,0 +1,7 @@ +{ + "name": "docu-scripts", + "description": "These are the scripts used in various places of Docusaurus maintenance", + "private": true, + "license": "MIT", + "type": "module" +} diff --git a/admin/scripts/image-resize.mjs b/admin/scripts/resizeImage.js similarity index 100% rename from admin/scripts/image-resize.mjs rename to admin/scripts/resizeImage.js index cea298ef8038e..ce3d11f976800 100644 --- a/admin/scripts/image-resize.mjs +++ b/admin/scripts/resizeImage.js @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import sharp from 'sharp'; import fs from 'fs-extra'; import path from 'path'; -import imageSize from 'image-size'; import {fileURLToPath} from 'url'; import logger from '@docusaurus/logger'; +import sharp from 'sharp'; +import imageSize from 'image-size'; const allImages = ( await fs.readdir(new URL('../../website/src/data/showcase', import.meta.url)) diff --git a/jest.config.mjs b/jest.config.mjs index 39c7f9c7c6596..5e7200416b7b0 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -23,7 +23,6 @@ const ignorePatterns = [ '/packages/docusaurus-plugin-content-docs/lib', '/packages/docusaurus-plugin-content-pages/lib', '/packages/docusaurus-theme-classic/lib', - '/packages/docusaurus-theme-classic/lib-next', '/packages/docusaurus-theme-common/lib', '/packages/docusaurus-migrate/lib', '/jest', @@ -43,7 +42,18 @@ export default { '/packages/docusaurus-utils/src/index.ts', ], transform: { - '^.+\\.[jt]sx?$': '@swc/jest', + '^.+\\.[jt]sx?$': [ + '@swc/jest', + { + jsc: { + parser: { + syntax: 'typescript', + tsx: true, + }, + target: 'es2020', + }, + }, + ], }, errorOnDeprecated: true, reporters: ['default', 'github-actions'], diff --git a/jest/snapshotPathNormalizer.ts b/jest/snapshotPathNormalizer.ts index 957aef8c40bc6..a0e9a3f4d38d8 100644 --- a/jest/snapshotPathNormalizer.ts +++ b/jest/snapshotPathNormalizer.ts @@ -8,13 +8,13 @@ // Forked from https://github.com/tribou/jest-serializer-path/blob/master/lib/index.js // Added some project-specific handlers -import _ from 'lodash'; -import {escapePath} from '@docusaurus/utils'; -import stripAnsi from 'strip-ansi'; -import {version} from '@docusaurus/core/package.json'; import os from 'os'; import path from 'path'; import fs from 'fs'; +import _ from 'lodash'; +import {escapePath} from '@docusaurus/utils'; +import {version} from '@docusaurus/core/package.json'; +import stripAnsi from 'strip-ansi'; export function print( val: unknown, diff --git a/package.json b/package.json index 16f2f3be15ba7..ec51b53832d67 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "start:website:baseUrl": "yarn workspace website start:baseUrl", "start:website:blogOnly": "yarn workspace website start:blogOnly", "start:website:deployPreview": "cross-env NETLIFY=true CONTEXT='deploy-preview' yarn workspace website start", - "examples:generate": "node admin/scripts/generateExamples.mjs", + "examples:generate": "node admin/scripts/generateExamples.js", "build": "yarn build:packages && yarn build:website", "build:packages": "lerna run build --no-private", "build:website": "yarn workspace website build", @@ -54,7 +54,7 @@ "test": "jest", "test:build:website": "./admin/scripts/test-release.sh", "watch": "yarn lerna run --parallel watch", - "clear": "(yarn workspace website clear || echo 'Failure while running docusaurus clear') && yarn lerna exec --ignore docusaurus yarn rimraf lib lib-next", + "clear": "(yarn workspace website clear || echo 'Failure while running docusaurus clear') && yarn lerna exec --ignore docusaurus yarn rimraf lib", "test:baseUrl": "yarn build:website:baseUrl && yarn serve:website:baseUrl", "lock:update": "npx yarn-deduplicate" }, @@ -63,22 +63,21 @@ }, "devDependencies": { "@crowdin/cli": "^3.7.8", - "@swc/core": "^1.2.181", + "@swc/core": "^1.2.185", "@swc/jest": "^0.2.21", "@testing-library/react-hooks": "^8.0.0", "@types/fs-extra": "^9.0.13", - "@types/jest": "^27.5.0", + "@types/jest": "^27.5.1", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.31", + "@types/node": "^17.0.34", "@types/prompts": "^2.0.14", "@types/react": "^18.0.9", "@types/react-dev-utils": "^9.0.10", "@types/react-test-renderer": "^18.0.0", "@types/semver": "^7.3.9", "@types/shelljs": "^0.8.11", - "@typescript-eslint/eslint-plugin": "^5.23.0", - "@typescript-eslint/parser": "^5.23.0", - "concurrently": "^7.1.0", + "@typescript-eslint/eslint-plugin": "^5.24.0", + "@typescript-eslint/parser": "^5.24.0", "cross-env": "^7.0.3", "cspell": "^5.20.0", "eslint": "^8.15.0", @@ -86,7 +85,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.1.5", + "eslint-plugin-jest": "^26.2.2", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.29.4", "eslint-plugin-react-hooks": "^4.5.0", @@ -99,6 +98,7 @@ "lerna": "^4.0.0", "lerna-changelog": "^2.2.0", "lint-staged": "^12.4.1", + "npm-run-all": "^4.1.5", "prettier": "^2.6.2", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/packages/create-docusaurus/.npmignore b/packages/create-docusaurus/.npmignore index 1edc83766ff5a..1f851e4a70c0b 100644 --- a/packages/create-docusaurus/.npmignore +++ b/packages/create-docusaurus/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* __tests__ node_modules diff --git a/packages/create-docusaurus/bin/index.js b/packages/create-docusaurus/bin/index.js index 7673e0025a0f8..b4b6d47c5ec9a 100755 --- a/packages/create-docusaurus/bin/index.js +++ b/packages/create-docusaurus/bin/index.js @@ -8,11 +8,11 @@ // @ts-check +import path from 'path'; +import {createRequire} from 'module'; import logger from '@docusaurus/logger'; import semver from 'semver'; -import path from 'path'; import {program} from 'commander'; -import {createRequire} from 'module'; const packageJson = createRequire(import.meta.url)('../package.json'); const requiredVersion = packageJson.engines.node; diff --git a/packages/create-docusaurus/package.json b/packages/create-docusaurus/package.json index 8c715fc339e3e..d7a60dba1c133 100755 --- a/packages/create-docusaurus/package.json +++ b/packages/create-docusaurus/package.json @@ -13,8 +13,8 @@ }, "scripts": { "create-docusaurus": "create-docusaurus", - "build": "tsc -p tsconfig.build.json", - "watch": "tsc -p tsconfig.build.json --watch" + "build": "tsc --build", + "watch": "tsc --build --watch" }, "bin": "bin/index.js", "publishConfig": { diff --git a/packages/create-docusaurus/src/index.ts b/packages/create-docusaurus/src/index.ts index b35e653b0a813..cc9c9408ec301 100755 --- a/packages/create-docusaurus/src/index.ts +++ b/packages/create-docusaurus/src/index.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import fs from 'fs-extra'; import {fileURLToPath} from 'url'; -import prompts, {type Choice} from 'prompts'; import path from 'path'; -import shell from 'shelljs'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import shell from 'shelljs'; +import prompts, {type Choice} from 'prompts'; import supportsColor from 'supports-color'; type CLIOptions = { diff --git a/packages/create-docusaurus/templates/classic-typescript/package.json b/packages/create-docusaurus/templates/classic-typescript/package.json index 3f98e42c9f79d..22520824356d0 100644 --- a/packages/create-docusaurus/templates/classic-typescript/package.json +++ b/packages/create-docusaurus/templates/classic-typescript/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "2.0.0-beta.20", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", - "prism-react-renderer": "^1.3.1", + "prism-react-renderer": "^1.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/packages/create-docusaurus/templates/classic-typescript/src/pages/index.tsx b/packages/create-docusaurus/templates/classic-typescript/src/pages/index.tsx index 3408a41e7f231..305139fba0092 100644 --- a/packages/create-docusaurus/templates/classic-typescript/src/pages/index.tsx +++ b/packages/create-docusaurus/templates/classic-typescript/src/pages/index.tsx @@ -1,11 +1,12 @@ import React from 'react'; import clsx from 'clsx'; -import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import styles from './index.module.css'; +import Layout from '@theme/Layout'; import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import styles from './index.module.css'; + function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); return ( diff --git a/packages/create-docusaurus/templates/classic/package.json b/packages/create-docusaurus/templates/classic/package.json index bc39e6d4c02b9..c7be6e72caaab 100644 --- a/packages/create-docusaurus/templates/classic/package.json +++ b/packages/create-docusaurus/templates/classic/package.json @@ -18,7 +18,7 @@ "@docusaurus/preset-classic": "2.0.0-beta.20", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", - "prism-react-renderer": "^1.3.1", + "prism-react-renderer": "^1.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/packages/create-docusaurus/templates/classic/src/pages/index.js b/packages/create-docusaurus/templates/classic/src/pages/index.js index a4fc2d3f03e6f..affcd9099c28f 100644 --- a/packages/create-docusaurus/templates/classic/src/pages/index.js +++ b/packages/create-docusaurus/templates/classic/src/pages/index.js @@ -1,11 +1,12 @@ import React from 'react'; import clsx from 'clsx'; -import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import styles from './index.module.css'; +import Layout from '@theme/Layout'; import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import styles from './index.module.css'; + function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); return ( diff --git a/packages/create-docusaurus/tsconfig.build.json b/packages/create-docusaurus/tsconfig.build.json index 41b40e7cf697c..6f46335ae9d0a 100644 --- a/packages/create-docusaurus/tsconfig.build.json +++ b/packages/create-docusaurus/tsconfig.build.json @@ -1,12 +1,14 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, "module": "es2020", "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, - "include": ["src/"], - "exclude": ["templates/"] + "include": ["src"], + "exclude": ["templates/", "**/__tests__/**"] } diff --git a/packages/create-docusaurus/tsconfig.json b/packages/create-docusaurus/tsconfig.json index edb2c88e1daf7..ef9bff21668e9 100644 --- a/packages/create-docusaurus/tsconfig.json +++ b/packages/create-docusaurus/tsconfig.json @@ -1,10 +1,12 @@ -// For editor typechecking; includes bin { - "extends": "./tsconfig.build.json", + "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.build.json"}], "compilerOptions": { "noEmit": true, "allowJs": true, + "module": "esnext", "rootDir": "." }, - "include": ["src", "bin"] + "include": ["bin"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-cssnano-preset/.npmignore b/packages/docusaurus-cssnano-preset/.npmignore index c912533dd7d2d..03c9ae1e1b54f 100644 --- a/packages/docusaurus-cssnano-preset/.npmignore +++ b/packages/docusaurus-cssnano-preset/.npmignore @@ -1 +1,3 @@ +.tsbuildinfo* +tsconfig* __tests__ diff --git a/packages/docusaurus-cssnano-preset/index.js b/packages/docusaurus-cssnano-preset/index.js deleted file mode 100644 index cac7eda8999df..0000000000000 --- a/packages/docusaurus-cssnano-preset/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const advancedBasePreset = require('cssnano-preset-advanced'); -const postCssSortMediaQueries = require('postcss-sort-media-queries'); -const postCssRemoveOverriddenCustomProperties = require('./src/remove-overridden-custom-properties'); - -module.exports = function docusaurusCssnanoPreset(opts) { - const advancedPreset = advancedBasePreset({ - autoprefixer: {add: false}, - discardComments: {removeAll: true}, - ...opts, - }); - - advancedPreset.plugins.unshift( - [postCssSortMediaQueries], - [postCssRemoveOverriddenCustomProperties], - ); - - return advancedPreset; -}; diff --git a/packages/docusaurus-cssnano-preset/package.json b/packages/docusaurus-cssnano-preset/package.json index 48b9c5697748a..0fa9229f07a99 100644 --- a/packages/docusaurus-cssnano-preset/package.json +++ b/packages/docusaurus-cssnano-preset/package.json @@ -2,20 +2,25 @@ "name": "@docusaurus/cssnano-preset", "version": "2.0.0-beta.20", "description": "Advanced cssnano preset for maximum optimization.", - "main": "index.js", + "main": "lib/index.js", "license": "MIT", "publishConfig": { "access": "public" }, + "scripts": { + "build": "tsc", + "watch": "tsc --watch" + }, "repository": { "type": "git", "url": "https://github.com/facebook/docusaurus.git", "directory": "packages/docusaurus-cssnano-preset" }, "dependencies": { - "cssnano-preset-advanced": "^5.3.3", + "cssnano-preset-advanced": "^5.3.4", "postcss": "^8.4.13", - "postcss-sort-media-queries": "^4.2.1" + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" }, "devDependencies": { "to-vfile": "^6.1.0" diff --git a/packages/docusaurus-cssnano-preset/src/deps.d.ts b/packages/docusaurus-cssnano-preset/src/deps.d.ts new file mode 100644 index 0000000000000..f508fb9197d5f --- /dev/null +++ b/packages/docusaurus-cssnano-preset/src/deps.d.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +declare module 'postcss-sort-media-queries' { + const plugin: import('postcss').PluginCreator; + export default plugin; +} diff --git a/packages/docusaurus-cssnano-preset/src/index.ts b/packages/docusaurus-cssnano-preset/src/index.ts new file mode 100644 index 0000000000000..6bae42c6f8c74 --- /dev/null +++ b/packages/docusaurus-cssnano-preset/src/index.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import advancedBasePreset from 'cssnano-preset-advanced'; +import postCssSortMediaQueries from 'postcss-sort-media-queries'; +import postCssRemoveOverriddenCustomProperties from './remove-overridden-custom-properties'; + +const preset: typeof advancedBasePreset = function preset(opts) { + const advancedPreset = advancedBasePreset({ + autoprefixer: {add: false}, + discardComments: {removeAll: true}, + ...opts, + }); + + advancedPreset.plugins.unshift( + [postCssSortMediaQueries, undefined], + [postCssRemoveOverriddenCustomProperties, undefined], + ); + + return advancedPreset; +}; + +export = preset; diff --git a/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/__snapshots__/index.test.js.snap b/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/__snapshots__/index.test.ts.snap similarity index 100% rename from packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/__snapshots__/index.test.js.snap rename to packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/__snapshots__/index.test.ts.snap diff --git a/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.js b/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.ts similarity index 78% rename from packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.js rename to packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.ts index b544461797969..8e50db5a74bdf 100644 --- a/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.js +++ b/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/__tests__/index.test.ts @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -const path = require('path'); -const vfile = require('to-vfile'); -const postcss = require('postcss'); -const postCssRemoveOverriddenCustomProperties = require('../index'); +import path from 'path'; +import vfile from 'to-vfile'; +import postcss from 'postcss'; +import postCssRemoveOverriddenCustomProperties from '../index'; -const processFixture = (name) => { +const processFixture = (name: string) => { const input = vfile.readSync( path.join(__dirname, '__fixtures__', `${name}.css`), 'utf8', diff --git a/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.js b/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.ts similarity index 69% rename from packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.js rename to packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.ts index 51eb53b353270..a7dbba88f3ce8 100644 --- a/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.js +++ b/packages/docusaurus-cssnano-preset/src/remove-overridden-custom-properties/index.ts @@ -5,6 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import type {Plugin, Rule, Node} from 'postcss'; + +const isRule = (node: Node | undefined): node is Rule => node?.type === 'rule'; + /** * This PostCSS plugin will remove duplicate/same custom properties (which are * actually overridden ones) **only** from `:root` selector. @@ -17,32 +21,31 @@ * applied). * - If the same custom properties have at least one `!important` rule, then * only those properties that do not have this rule will be removed. - * @returns {import('postcss').Plugin} */ -module.exports = function creator() { +function creator(): Plugin { return { postcssPlugin: 'postcss-remove-overridden-custom-properties', Declaration(decl) { - if (decl.parent.selector !== ':root') { + if (!isRule(decl.parent) || decl.parent.selector !== ':root') { return; } const sameProperties = decl.parent.nodes.filter( - (n) => n.prop === decl.prop, + (n) => 'prop' in n && n.prop === decl.prop, ); - const hasImportantProperties = sameProperties.some((p) => - Object.prototype.hasOwnProperty.call(p, 'important'), + const hasImportantProperties = sameProperties.some( + (p) => 'important' in p, ); const overriddenProperties = hasImportantProperties - ? sameProperties.filter( - (p) => !Object.prototype.hasOwnProperty.call(p, 'important'), - ) + ? sameProperties.filter((p) => !('important' in p)) : sameProperties.slice(0, -1); overriddenProperties.map((p) => p.remove()); }, }; -}; +} + +creator.postcss = true as const; -module.exports.postcss = true; +export default creator; diff --git a/packages/docusaurus-cssnano-preset/tsconfig.json b/packages/docusaurus-cssnano-preset/tsconfig.json new file mode 100644 index 0000000000000..80e43e9813efd --- /dev/null +++ b/packages/docusaurus-cssnano-preset/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-logger/.npmignore b/packages/docusaurus-logger/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-logger/.npmignore +++ b/packages/docusaurus-logger/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-logger/tsconfig.json b/packages/docusaurus-logger/tsconfig.json index aee99fc0f38ef..7807612b51a56 100644 --- a/packages/docusaurus-logger/tsconfig.json +++ b/packages/docusaurus-logger/tsconfig.json @@ -1,11 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-mdx-loader/.npmignore b/packages/docusaurus-mdx-loader/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-mdx-loader/.npmignore +++ b/packages/docusaurus-mdx-loader/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-mdx-loader/package.json b/packages/docusaurus-mdx-loader/package.json index c05708cd9f4bd..4d1d2ca70b266 100644 --- a/packages/docusaurus-mdx-loader/package.json +++ b/packages/docusaurus-mdx-loader/package.json @@ -18,8 +18,8 @@ }, "license": "MIT", "dependencies": { - "@babel/parser": "^7.17.10", - "@babel/traverse": "^7.17.10", + "@babel/parser": "^7.17.12", + "@babel/traverse": "^7.17.12", "@docusaurus/logger": "2.0.0-beta.20", "@docusaurus/utils": "2.0.0-beta.20", "@mdx-js/mdx": "^1.6.22", diff --git a/packages/docusaurus-mdx-loader/src/loader.ts b/packages/docusaurus-mdx-loader/src/loader.ts index 68c3f55f904b2..06daefccf3238 100644 --- a/packages/docusaurus-mdx-loader/src/loader.ts +++ b/packages/docusaurus-mdx-loader/src/loader.ts @@ -6,21 +6,23 @@ */ import fs from 'fs-extra'; -import {createCompiler} from '@mdx-js/mdx'; import logger from '@docusaurus/logger'; -import emoji from 'remark-emoji'; import { parseFrontMatter, parseMarkdownContentTitle, escapePath, getFileLoaderUtils, } from '@docusaurus/utils'; +import {createCompiler} from '@mdx-js/mdx'; +import emoji from 'remark-emoji'; import stringifyObject from 'stringify-object'; + import headings from './remark/headings'; import toc from './remark/toc'; import unwrapMdxCodeBlocks from './remark/unwrapMdxCodeBlocks'; import transformImage from './remark/transformImage'; import transformLinks from './remark/transformLinks'; + import type {LoaderContext} from 'webpack'; import type {Processor, Plugin} from 'unified'; diff --git a/packages/docusaurus-mdx-loader/src/remark/toc/index.ts b/packages/docusaurus-mdx-loader/src/remark/toc/index.ts index b0a888c0790d5..1850a2b9c7a47 100644 --- a/packages/docusaurus-mdx-loader/src/remark/toc/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/toc/index.ts @@ -6,13 +6,13 @@ */ import {parse, type ParserOptions} from '@babel/parser'; -import type {Identifier} from '@babel/types'; import traverse from '@babel/traverse'; import stringifyObject from 'stringify-object'; import toString from 'mdast-util-to-string'; import visit from 'unist-util-visit'; import {toValue} from '../utils'; +import type {Identifier} from '@babel/types'; import type {TOCItem} from '../..'; import type {Node, Parent} from 'unist'; import type {Heading, Literal} from 'mdast'; diff --git a/packages/docusaurus-mdx-loader/src/remark/transformImage/index.ts b/packages/docusaurus-mdx-loader/src/remark/transformImage/index.ts index 691c42703922d..d9608d13ed073 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformImage/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/transformImage/index.ts @@ -5,6 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; +import url from 'url'; +import fs from 'fs-extra'; +import {promisify} from 'util'; +import logger from '@docusaurus/logger'; import { toMessageRelativeFilePath, posixPath, @@ -13,15 +18,10 @@ import { findAsyncSequential, } from '@docusaurus/utils'; import visit from 'unist-util-visit'; -import path from 'path'; -import url from 'url'; -import fs from 'fs-extra'; import escapeHtml from 'escape-html'; import sizeOf from 'image-size'; -import {promisify} from 'util'; import type {Transformer} from 'unified'; import type {Image, Literal} from 'mdast'; -import logger from '@docusaurus/logger'; const { loaders: {inlineMarkdownImageFileLoader}, diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts index 24a04805a89b5..22d52587e1fbe 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts @@ -5,6 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; +import url from 'url'; +import fs from 'fs-extra'; import { toMessageRelativeFilePath, posixPath, @@ -13,9 +16,6 @@ import { findAsyncSequential, } from '@docusaurus/utils'; import visit from 'unist-util-visit'; -import path from 'path'; -import url from 'url'; -import fs from 'fs-extra'; import escapeHtml from 'escape-html'; import {stringifyContent} from '../utils'; import type {Transformer} from 'unified'; diff --git a/packages/docusaurus-mdx-loader/tsconfig.json b/packages/docusaurus-mdx-loader/tsconfig.json index 4cc153c7f1589..7807612b51a56 100644 --- a/packages/docusaurus-mdx-loader/tsconfig.json +++ b/packages/docusaurus-mdx-loader/tsconfig.json @@ -1,12 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" }, - "include": ["src"] + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-migrate/.npmignore b/packages/docusaurus-migrate/.npmignore index ba8304029eb76..e4132af421720 100644 --- a/packages/docusaurus-migrate/.npmignore +++ b/packages/docusaurus-migrate/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-migrate/bin/index.mjs b/packages/docusaurus-migrate/bin/index.mjs index baf72762aeb7d..769c5e9e3c081 100755 --- a/packages/docusaurus-migrate/bin/index.mjs +++ b/packages/docusaurus-migrate/bin/index.mjs @@ -8,11 +8,11 @@ // @ts-check +import path from 'path'; +import {createRequire} from 'module'; import logger from '@docusaurus/logger'; import semver from 'semver'; import cli from 'commander'; -import path from 'path'; -import {createRequire} from 'module'; const moduleRequire = createRequire(import.meta.url); const requiredVersion = moduleRequire('../package.json').engines.node; diff --git a/packages/docusaurus-migrate/package.json b/packages/docusaurus-migrate/package.json index 475dd592c6adb..9e980899705f6 100644 --- a/packages/docusaurus-migrate/package.json +++ b/packages/docusaurus-migrate/package.json @@ -7,8 +7,8 @@ "node": ">=14" }, "scripts": { - "build": "tsc -p tsconfig.build.json", - "watch": "tsc -p tsconfig.build.json --watch" + "build": "tsc --build", + "watch": "tsc --build --watch" }, "repository": { "type": "git", @@ -22,7 +22,7 @@ "docusaurus-migrate": "bin/index.mjs" }, "dependencies": { - "@babel/preset-env": "^7.17.10", + "@babel/preset-env": "^7.17.12", "@docusaurus/logger": "2.0.0-beta.20", "@docusaurus/utils": "2.0.0-beta.20", "@mapbox/hast-util-to-jsx": "^2.0.0", diff --git a/packages/docusaurus-migrate/src/__tests__/index.test.ts b/packages/docusaurus-migrate/src/__tests__/index.test.ts index f4516276d2d9d..8eea0cd15849a 100644 --- a/packages/docusaurus-migrate/src/__tests__/index.test.ts +++ b/packages/docusaurus-migrate/src/__tests__/index.test.ts @@ -6,10 +6,10 @@ */ import {jest} from '@jest/globals'; -import {migrateDocusaurusProject} from '../index'; import path from 'path'; import fs from 'fs-extra'; import {posixPath} from '@docusaurus/utils'; +import {migrateDocusaurusProject} from '../index'; async function testMigration(siteDir: string, newDir: string) { const writeMock = jest.spyOn(fs, 'outputFile').mockImplementation(() => {}); diff --git a/packages/docusaurus-migrate/src/index.ts b/packages/docusaurus-migrate/src/index.ts index e1e0bcf4d6653..81f31e6b874c7 100644 --- a/packages/docusaurus-migrate/src/index.ts +++ b/packages/docusaurus-migrate/src/index.ts @@ -5,22 +5,23 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; import fs from 'fs-extra'; -import importFresh from 'import-fresh'; import logger from '@docusaurus/logger'; import {Globby} from '@docusaurus/utils'; +import importFresh from 'import-fresh'; import Color from 'color'; +import extractMetadata, {shouldQuotifyFrontMatter} from './frontMatter'; +import migratePage from './transform'; +import sanitizeMD from './sanitizeMD'; + import type { SidebarEntry, SidebarEntries, VersionOneConfig, VersionTwoConfig, } from './types'; -import extractMetadata, {shouldQuotifyFrontMatter} from './frontMatter'; -import migratePage from './transform'; -import sanitizeMD from './sanitizeMD'; -import path from 'path'; const DOCUSAURUS_VERSION = (importFresh('../package.json') as {version: string}) .version; diff --git a/packages/docusaurus-migrate/tsconfig.build.json b/packages/docusaurus-migrate/tsconfig.build.json index 358fdb6f6e604..e43e58accad2e 100644 --- a/packages/docusaurus-migrate/tsconfig.build.json +++ b/packages/docusaurus-migrate/tsconfig.build.json @@ -1,10 +1,14 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" }, - "include": ["src"] + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-migrate/tsconfig.json b/packages/docusaurus-migrate/tsconfig.json index 419de04867a2f..4c04aae29fd95 100644 --- a/packages/docusaurus-migrate/tsconfig.json +++ b/packages/docusaurus-migrate/tsconfig.json @@ -1,11 +1,12 @@ -// For editor typechecking; includes bin { - "extends": "./tsconfig.build.json", + "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.build.json"}], "compilerOptions": { "noEmit": true, "module": "esnext", "allowJs": true, "rootDir": "." }, - "include": ["src", "bin"] + "include": ["bin"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-module-type-aliases/src/index.d.ts b/packages/docusaurus-module-type-aliases/src/index.d.ts index f1e4a003e0973..a000e03f2c355 100644 --- a/packages/docusaurus-module-type-aliases/src/index.d.ts +++ b/packages/docusaurus-module-type-aliases/src/index.d.ts @@ -136,8 +136,8 @@ declare module '@docusaurus/ErrorBoundary' { } declare module '@docusaurus/Head' { - import type {HelmetProps} from 'react-helmet-async'; import type {ReactNode} from 'react'; + import type {HelmetProps} from 'react-helmet-async'; export type Props = HelmetProps & {children: ReactNode}; diff --git a/packages/docusaurus-plugin-client-redirects/.npmignore b/packages/docusaurus-plugin-client-redirects/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-client-redirects/.npmignore +++ b/packages/docusaurus-plugin-client-redirects/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-client-redirects/src/__tests__/collectRedirects.test.ts b/packages/docusaurus-plugin-client-redirects/src/__tests__/collectRedirects.test.ts index 266b36911ee37..fc82c12a37fa3 100644 --- a/packages/docusaurus-plugin-client-redirects/src/__tests__/collectRedirects.test.ts +++ b/packages/docusaurus-plugin-client-redirects/src/__tests__/collectRedirects.test.ts @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import type {PluginContext} from '../types'; -import collectRedirects from '../collectRedirects'; -import {validateOptions} from '../options'; import {removeTrailingSlash} from '@docusaurus/utils'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import collectRedirects from '../collectRedirects'; +import {validateOptions} from '../options'; import type {Options} from '../options'; +import type {PluginContext} from '../types'; function createTestPluginContext( options?: Options, diff --git a/packages/docusaurus-plugin-client-redirects/src/__tests__/options.test.ts b/packages/docusaurus-plugin-client-redirects/src/__tests__/options.test.ts index 3243076acba15..1d526c351b4d7 100644 --- a/packages/docusaurus-plugin-client-redirects/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-client-redirects/src/__tests__/options.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {validateOptions, DEFAULT_OPTIONS} from '../options'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import {validateOptions, DEFAULT_OPTIONS} from '../options'; import type {Options} from '../options'; function testValidate(options: Options) { diff --git a/packages/docusaurus-plugin-client-redirects/src/collectRedirects.ts b/packages/docusaurus-plugin-client-redirects/src/collectRedirects.ts index 8a62cae4f4ab2..fa4718eca32fc 100644 --- a/packages/docusaurus-plugin-client-redirects/src/collectRedirects.ts +++ b/packages/docusaurus-plugin-client-redirects/src/collectRedirects.ts @@ -6,19 +6,18 @@ */ import _ from 'lodash'; -import type {PluginOptions, RedirectOption} from './options'; -import type {PluginContext, RedirectMetadata} from './types'; +import logger from '@docusaurus/logger'; +import { + applyTrailingSlash, + type ApplyTrailingSlashParams, +} from '@docusaurus/utils-common'; import { createFromExtensionsRedirects, createToExtensionsRedirects, } from './extensionRedirects'; import {validateRedirect} from './redirectValidation'; -import { - applyTrailingSlash, - type ApplyTrailingSlashParams, -} from '@docusaurus/utils-common'; - -import logger from '@docusaurus/logger'; +import type {PluginOptions, RedirectOption} from './options'; +import type {PluginContext, RedirectMetadata} from './types'; export default function collectRedirects( pluginContext: PluginContext, diff --git a/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts b/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts index b7bdd7f61c6d9..b5d0a21141ff6 100644 --- a/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts +++ b/packages/docusaurus-plugin-client-redirects/src/createRedirectPageContent.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import * as eta from 'eta'; import redirectPageTemplate from './templates/redirectPage.template.html'; -import _ from 'lodash'; const getCompiledRedirectPageTemplate = _.memoize(() => eta.compile(redirectPageTemplate.trim()), diff --git a/packages/docusaurus-plugin-client-redirects/src/index.ts b/packages/docusaurus-plugin-client-redirects/src/index.ts index 9bfac10d94987..78d117c7ca281 100644 --- a/packages/docusaurus-plugin-client-redirects/src/index.ts +++ b/packages/docusaurus-plugin-client-redirects/src/index.ts @@ -5,16 +5,15 @@ * LICENSE file in the root directory of this source tree. */ -import type {LoadContext, Plugin} from '@docusaurus/types'; -import type {PluginContext, RedirectMetadata} from './types'; -import type {PluginOptions, Options} from './options'; - +import {removePrefix, addLeadingSlash} from '@docusaurus/utils'; import collectRedirects from './collectRedirects'; import writeRedirectFiles, { toRedirectFilesMetadata, type RedirectFileMetadata, } from './writeRedirectFiles'; -import {removePrefix, addLeadingSlash} from '@docusaurus/utils'; +import type {LoadContext, Plugin} from '@docusaurus/types'; +import type {PluginContext, RedirectMetadata} from './types'; +import type {PluginOptions, Options} from './options'; export default function pluginClientRedirectsPages( context: LoadContext, diff --git a/packages/docusaurus-plugin-client-redirects/src/options.ts b/packages/docusaurus-plugin-client-redirects/src/options.ts index 34891a1c9b706..72f3da3010bd6 100644 --- a/packages/docusaurus-plugin-client-redirects/src/options.ts +++ b/packages/docusaurus-plugin-client-redirects/src/options.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {OptionValidationContext} from '@docusaurus/types'; import {Joi, PathnameSchema} from '@docusaurus/utils-validation'; +import type {OptionValidationContext} from '@docusaurus/types'; export type RedirectOption = { to: string; diff --git a/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts b/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts index 5f0ce5b52b46c..334453274b1ee 100644 --- a/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts +++ b/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {RedirectMetadata} from './types'; import {Joi, PathnameSchema} from '@docusaurus/utils-validation'; +import type {RedirectMetadata} from './types'; const RedirectSchema = Joi.object({ from: PathnameSchema.required(), diff --git a/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts b/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts index 3924f602143c0..77a9316c829a0 100644 --- a/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts +++ b/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts @@ -8,11 +8,12 @@ import fs from 'fs-extra'; import path from 'path'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import {normalizeUrl} from '@docusaurus/utils'; -import type {PluginContext, RedirectMetadata} from './types'; import createRedirectPageContent from './createRedirectPageContent'; -import {normalizeUrl} from '@docusaurus/utils'; -import logger from '@docusaurus/logger'; + +import type {PluginContext, RedirectMetadata} from './types'; export type WriteFilesPluginContext = Pick; diff --git a/packages/docusaurus-plugin-client-redirects/tsconfig.json b/packages/docusaurus-plugin-client-redirects/tsconfig.json index 7b696ed3843d1..80e43e9813efd 100644 --- a/packages/docusaurus-plugin-client-redirects/tsconfig.json +++ b/packages/docusaurus-plugin-client-redirects/tsconfig.json @@ -1,10 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", - "outDir": "lib", - "typeRoots": ["./types", "./node_modules/@types"] - } + "outDir": "lib" + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-content-blog/.npmignore b/packages/docusaurus-plugin-content-blog/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-content-blog/.npmignore +++ b/packages/docusaurus-plugin-content-blog/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/authors.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/authors.test.ts index 67dd4571eae7b..19515459a6563 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/authors.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/authors.test.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; import { type AuthorsMap, getAuthorsMap, getBlogPostAuthors, validateAuthorsMap, } from '../authors'; -import path from 'path'; describe('getBlogPostAuthors', () => { it('can read no authors', () => { diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/blogUtils.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/blogUtils.test.ts index 5460a4440f9f1..1d9cafef920f0 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/blogUtils.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/blogUtils.test.ts @@ -6,6 +6,8 @@ */ import {jest} from '@jest/globals'; +import fs from 'fs-extra'; +import path from 'path'; import { truncate, parseBlogFileName, @@ -14,13 +16,8 @@ import { paginateBlogPosts, type LinkifyParams, } from '../blogUtils'; -import fs from 'fs-extra'; -import path from 'path'; -import type { - BlogBrokenMarkdownLink, - BlogContentPaths, - BlogPost, -} from '../types'; +import type {BlogBrokenMarkdownLink, BlogContentPaths} from '../types'; +import type {BlogPost} from '@docusaurus/plugin-content-blog'; describe('truncate', () => { it('truncates texts', () => { diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/feed.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/feed.test.ts index f7d31a7dbbb06..48c3395f728b1 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/feed.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/feed.test.ts @@ -8,11 +8,11 @@ import {jest} from '@jest/globals'; import path from 'path'; import fs from 'fs-extra'; +import {DEFAULT_OPTIONS} from '../options'; +import {generateBlogPosts} from '../blogUtils'; import {createBlogFeedFiles} from '../feed'; import type {LoadContext, I18n} from '@docusaurus/types'; import type {BlogContentPaths} from '../types'; -import {DEFAULT_OPTIONS} from '../options'; -import {generateBlogPosts} from '../blogUtils'; import type {PluginOptions} from '@docusaurus/plugin-content-blog'; const DefaultI18N: I18n = { 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 cb1020c680ef7..36cc680df0e04 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/frontMatter.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {validateBlogPostFrontMatter} from '../frontMatter'; import escapeStringRegexp from 'escape-string-regexp'; +import {validateBlogPostFrontMatter} from '../frontMatter'; import type {BlogPostFrontMatter} from '@docusaurus/plugin-content-blog'; // TODO this abstraction reduce verbosity but it makes it harder to debug diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts index 7d47e0027ab69..11b33cd2a183f 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -7,13 +7,13 @@ import {jest} from '@jest/globals'; import path from 'path'; -import pluginContentBlog from '../index'; -import type {DocusaurusConfig, LoadContext, I18n} from '@docusaurus/types'; -import {validateOptions} from '../options'; -import type {BlogPost} from '../types'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; import {posixPath, getFileCommitDate} from '@docusaurus/utils'; +import pluginContentBlog from '../index'; +import {validateOptions} from '../options'; +import type {DocusaurusConfig, LoadContext, I18n} from '@docusaurus/types'; import type { + BlogPost, PluginOptions, EditUrlFunction, } from '@docusaurus/plugin-content-blog'; diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/options.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/options.test.ts index 8c8cbf92172cf..dd2e562bdabc6 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/options.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {validateOptions, DEFAULT_OPTIONS} from '../options'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import {validateOptions, DEFAULT_OPTIONS} from '../options'; import type {Options} from '@docusaurus/plugin-content-blog'; function testValidate(options: Options) { diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts index 840a3af4d359e..62442bbf81518 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/translations.test.ts @@ -5,11 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -import type {BlogPost, BlogContent} from '../types'; +import {updateTranslationFileMessages} from '@docusaurus/utils'; import {getTranslationFiles, translateContent} from '../translations'; import {DEFAULT_OPTIONS} from '../options'; -import {updateTranslationFileMessages} from '@docusaurus/utils'; -import type {PluginOptions} from '@docusaurus/plugin-content-blog'; +import type { + PluginOptions, + BlogPost, + BlogContent, +} from '@docusaurus/plugin-content-blog'; const sampleBlogOptions: PluginOptions = { ...DEFAULT_OPTIONS, diff --git a/packages/docusaurus-plugin-content-blog/src/authors.ts b/packages/docusaurus-plugin-content-blog/src/authors.ts index e8e2be3231273..cf3bbe5c85229 100644 --- a/packages/docusaurus-plugin-content-blog/src/authors.ts +++ b/packages/docusaurus-plugin-content-blog/src/authors.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {BlogContentPaths} from './types'; import {getDataFileData} from '@docusaurus/utils'; import {Joi, URISchema} from '@docusaurus/utils-validation'; +import type {BlogContentPaths} from './types'; import type { Author, BlogPostFrontMatter, diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts index 5daf3983e09a6..370ddeb50aa33 100644 --- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts +++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts @@ -7,9 +7,9 @@ import fs from 'fs-extra'; import path from 'path'; -import readingTime from 'reading-time'; import _ from 'lodash'; -import type {BlogContentPaths, BlogMarkdownLoaderOptions} from './types'; +import logger from '@docusaurus/logger'; +import readingTime from 'reading-time'; import { parseMarkdownString, normalizeUrl, @@ -24,10 +24,9 @@ import { getFileCommitDate, getContentPathList, } from '@docusaurus/utils'; -import type {LoadContext} from '@docusaurus/types'; import {validateBlogPostFrontMatter} from './frontMatter'; import {type AuthorsMap, getAuthorsMap, getBlogPostAuthors} from './authors'; -import logger from '@docusaurus/logger'; +import type {LoadContext} from '@docusaurus/types'; import type { PluginOptions, ReadingTimeFunction, @@ -35,6 +34,7 @@ import type { BlogTags, BlogPaginated, } from '@docusaurus/plugin-content-blog'; +import type {BlogContentPaths, BlogMarkdownLoaderOptions} from './types'; export function truncate(fileString: string, truncateMarker: RegExp): string { return fileString.split(truncateMarker, 1).shift()!; diff --git a/packages/docusaurus-plugin-content-blog/src/feed.ts b/packages/docusaurus-plugin-content-blog/src/feed.ts index 390d453f480cd..222fcb84b2b5f 100644 --- a/packages/docusaurus-plugin-content-blog/src/feed.ts +++ b/packages/docusaurus-plugin-content-blog/src/feed.ts @@ -5,20 +5,20 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; +import fs from 'fs-extra'; +import logger from '@docusaurus/logger'; import {Feed, type Author as FeedAuthor, type Item as FeedItem} from 'feed'; import {normalizeUrl, readOutputHTMLFile} from '@docusaurus/utils'; +import {blogPostContainerID} from '@docusaurus/utils-common'; import {load as cheerioLoad} from 'cheerio'; import type {DocusaurusConfig} from '@docusaurus/types'; -import path from 'path'; -import fs from 'fs-extra'; import type { FeedType, PluginOptions, Author, BlogPost, } from '@docusaurus/plugin-content-blog'; -import {blogPostContainerID} from '@docusaurus/utils-common'; -import logger from '@docusaurus/logger'; async function generateBlogFeed({ blogPosts, diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index 3b19b9bbab2ef..a3dddc2404f5b 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -6,8 +6,6 @@ */ import path from 'path'; -import admonitions from 'remark-admonitions'; -import footnoteIDFixer from './remark/footnoteIDFixer'; import { normalizeUrl, docuHash, @@ -23,17 +21,19 @@ import { type TagsListItem, type TagModule, } from '@docusaurus/utils'; -import {translateContent, getTranslationFiles} from './translations'; - -import type {BlogContentPaths, BlogMarkdownLoaderOptions} from './types'; -import type {LoadContext, Plugin, HtmlTags} from '@docusaurus/types'; +import admonitions from 'remark-admonitions'; import { generateBlogPosts, getSourceToPermalink, getBlogTags, paginateBlogPosts, } from './blogUtils'; +import footnoteIDFixer from './remark/footnoteIDFixer'; +import {translateContent, getTranslationFiles} from './translations'; import {createBlogFeedFiles} from './feed'; + +import type {BlogContentPaths, BlogMarkdownLoaderOptions} from './types'; +import type {LoadContext, Plugin, HtmlTags} from '@docusaurus/types'; import type { PluginOptions, BlogPostFrontMatter, 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 d74bba9fc2747..e8a8697fa8cd9 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 @@ -538,11 +538,11 @@ declare module '@theme/BlogTagsListPage' { } declare module '@theme/BlogTagsPostsPage' { + import type {Content} from '@theme/BlogPostPage'; import type { BlogSidebar, BlogPaginatedMetadata, } from '@docusaurus/plugin-content-blog'; - import type {Content} from '@theme/BlogPostPage'; import type {TagModule} from '@docusaurus/utils'; export interface Props { diff --git a/packages/docusaurus-plugin-content-blog/tsconfig.json b/packages/docusaurus-plugin-content-blog/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/docusaurus-plugin-content-blog/tsconfig.json +++ b/packages/docusaurus-plugin-content-blog/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-content-docs/.npmignore b/packages/docusaurus-plugin-content-docs/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-content-docs/.npmignore +++ b/packages/docusaurus-plugin-content-docs/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-content-docs/package.json b/packages/docusaurus-plugin-content-docs/package.json index 697fcf7224eac..bf59cd0200961 100644 --- a/packages/docusaurus-plugin-content-docs/package.json +++ b/packages/docusaurus-plugin-content-docs/package.json @@ -12,8 +12,8 @@ }, "types": "src/plugin-content-docs.d.ts", "scripts": { - "build": "tsc", - "watch": "tsc --watch" + "build": "tsc --build", + "watch": "tsc --build --watch" }, "publishConfig": { "access": "public" diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts index bd0db4e0ad5a940921aaa503181ffdbda5d034d7..ec29bdcf8b87eb6502b0061ce14a67d4378f5cfa 100644 GIT binary patch delta 33 rcmV++0N($cSe#gp>63H;8!jbtk`Pw4L}!X>tQ&{$yE3z0EpIA2b2(jSSfU 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 bceca516cbfc7..3e0f090109251 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/docs.test.ts @@ -8,6 +8,8 @@ import {jest} from '@jest/globals'; import path from 'path'; import {loadContext} from '@docusaurus/core/src/server/index'; +import {createSlugger, posixPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; +import {createSidebarsUtils} from '../sidebars/utils'; import { processDocMetadata, readVersionDocs, @@ -17,8 +19,9 @@ import { type DocEnv, } from '../docs'; import {loadSidebars} from '../sidebars'; -import type {Sidebars} from '../sidebars/types'; import {readVersionsMetadata} from '../versions'; +import {DEFAULT_OPTIONS} from '../options'; +import type {Sidebars} from '../sidebars/types'; import type {DocFile} from '../types'; import type { MetadataOptions, @@ -29,10 +32,7 @@ import type { PropNavigationLink, } from '@docusaurus/plugin-content-docs'; import type {LoadContext} from '@docusaurus/types'; -import {DEFAULT_OPTIONS} from '../options'; import type {Optional} from 'utility-types'; -import {createSlugger, posixPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; -import {createSidebarsUtils} from '../sidebars/utils'; jest.setTimeout(15000); 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 3a0855fe582ac..6612927c2d0cc 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/frontMatter.test.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import escapeStringRegexp from 'escape-string-regexp'; import {validateDocFrontMatter} from '../frontMatter'; import type {DocFrontMatter} from '@docusaurus/plugin-content-docs'; -import escapeStringRegexp from 'escape-string-regexp'; function testField(params: { prefix: 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 0a0627c735a20..0d54d4bc13080 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts @@ -7,32 +7,27 @@ import {jest} from '@jest/globals'; import path from 'path'; +import fs from 'fs-extra'; +import _ from 'lodash'; import {isMatch} from 'picomatch'; import commander from 'commander'; -import _ from 'lodash'; - -import fs from 'fs-extra'; -import pluginContentDocs from '../index'; +import webpack from 'webpack'; import {loadContext} from '@docusaurus/core/src/server/index'; import {applyConfigureWebpack} from '@docusaurus/core/src/webpack/utils'; -import type {RouteConfig} from '@docusaurus/types'; -import {posixPath} from '@docusaurus/utils'; import {sortConfig} from '@docusaurus/core/src/server/plugins/routeConfig'; - -import * as cliDocs from '../cli'; -import {validateOptions} from '../options'; +import {posixPath} from '@docusaurus/utils'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; -import type {LoadedVersion} from '../types'; -import type { - SidebarItem, - SidebarItemsGeneratorOption, - SidebarItemsGeneratorOptionArgs, -} from '../sidebars/types'; -import {toSidebarsProp} from '../props'; -import webpack from 'webpack'; +import pluginContentDocs from '../index'; +import {toSidebarsProp} from '../props'; import {DefaultSidebarItemsGenerator} from '../sidebars/generator'; import {DisabledSidebars} from '../sidebars'; +import * as cliDocs from '../cli'; +import {validateOptions} from '../options'; + +import type {RouteConfig} from '@docusaurus/types'; +import type {LoadedVersion} from '@docusaurus/plugin-content-docs'; +import type {SidebarItem, SidebarItemsGeneratorOption} from '../sidebars/types'; function findDocById(version: LoadedVersion, unversionedId: string) { return version.docs.find((item) => item.unversionedId === unversionedId); @@ -768,14 +763,14 @@ describe('site with custom sidebar items generator', () => { const customSidebarItemsGeneratorMock = jest.fn(async () => []); const {siteDir} = await loadSite(customSidebarItemsGeneratorMock); - const generatorArg: SidebarItemsGeneratorOptionArgs = + const generatorArg: Parameters[0] = customSidebarItemsGeneratorMock.mock.calls[0][0]; // Make test pass even if docs are in different order and paths are // absolutes function makeDeterministic( - arg: SidebarItemsGeneratorOptionArgs, - ): SidebarItemsGeneratorOptionArgs { + arg: Parameters[0], + ): Parameters[0] { return { ...arg, docs: _.orderBy(arg.docs, 'id'), diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/lastUpdate.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/lastUpdate.test.ts index 7f3e41bd195c8..47aff760539e3 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/lastUpdate.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/lastUpdate.test.ts @@ -5,11 +5,11 @@ * LICENSE file in the root directory of this source tree. */ -import {createTempRepo} from '@testing-utils/git'; import {jest} from '@jest/globals'; import fs from 'fs-extra'; import path from 'path'; import shell from 'shelljs'; +import {createTempRepo} from '@testing-utils/git'; import {getFileLastUpdate} from '../lastUpdate'; diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts index 5d5e330c50c85..bcbaccfe11442 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts @@ -5,14 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -import {validateOptions, DEFAULT_OPTIONS} from '../options'; +import {GlobExcludeDefault} from '@docusaurus/utils'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import {validateOptions, DEFAULT_OPTIONS} from '../options'; import {DefaultSidebarItemsGenerator} from '../sidebars/generator'; import { DefaultNumberPrefixParser, DisabledNumberPrefixParser, } from '../numberPrefix'; -import {GlobExcludeDefault} from '@docusaurus/utils'; import type {Options} from '@docusaurus/plugin-content-docs'; // The type of remark/rehype plugins can be function/object diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/translations.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/translations.test.ts index 85af2ef203e01..5d098e355fb7e 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/translations.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/translations.test.ts @@ -5,14 +5,17 @@ * LICENSE file in the root directory of this source tree. */ -import type {LoadedContent, LoadedVersion} from '../types'; +import {updateTranslationFileMessages} from '@docusaurus/utils'; import {CURRENT_VERSION_NAME} from '../constants'; import { getLoadedContentTranslationFiles, translateLoadedContent, } from '../translations'; -import type {DocMetadata} from '@docusaurus/plugin-content-docs'; -import {updateTranslationFileMessages} from '@docusaurus/utils'; +import type { + DocMetadata, + LoadedContent, + LoadedVersion, +} from '@docusaurus/plugin-content-docs'; function createSampleDoc(doc: Pick): DocMetadata { return { diff --git a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts index 4c87e711a5156..6ae97213f1556 100644 --- a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts +++ b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ +import {type SidebarsUtils, toNavigationLink} from './sidebars/utils'; +import {createDocsByIdIndex} from './docs'; import type { CategoryGeneratedIndexMetadata, DocMetadataBase, } from '@docusaurus/plugin-content-docs'; import type {SidebarItemCategoryWithGeneratedIndex} from './sidebars/types'; -import {type SidebarsUtils, toNavigationLink} from './sidebars/utils'; -import {createDocsByIdIndex} from './docs'; function getCategoryGeneratedIndexMetadata({ category, diff --git a/packages/docusaurus-plugin-content-docs/src/cli.ts b/packages/docusaurus-plugin-content-docs/src/cli.ts index 4a84ea953089c..11fc39b2c4007 100644 --- a/packages/docusaurus-plugin-content-docs/src/cli.ts +++ b/packages/docusaurus-plugin-content-docs/src/cli.ts @@ -5,6 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import fs from 'fs-extra'; +import path from 'path'; +import logger from '@docusaurus/logger'; +import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; import { getVersionsFilePath, getVersionDocsDirPath, @@ -12,13 +16,9 @@ import { getDocsDirPathLocalized, } from './versions/files'; import {validateVersionName} from './versions/validation'; -import fs from 'fs-extra'; -import path from 'path'; -import type {PluginOptions} from '@docusaurus/plugin-content-docs'; import {loadSidebarsFileUnsafe} from './sidebars'; import {CURRENT_VERSION_NAME} from './constants'; -import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; -import logger from '@docusaurus/logger'; +import type {PluginOptions} from '@docusaurus/plugin-content-docs'; import type {LoadContext} from '@docusaurus/types'; async function createVersionedSidebarFile({ 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 e663dbd433490..093aaad1db939 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 @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import { getActivePlugin, getLatestVersion, @@ -17,7 +18,6 @@ import type { GlobalVersion, ActivePlugin, } from '@docusaurus/plugin-content-docs/client'; -import _ from 'lodash'; describe('docsClientUtils', () => { it('getActivePlugin', () => { diff --git a/packages/docusaurus-plugin-content-docs/src/docs.ts b/packages/docusaurus-plugin-content-docs/src/docs.ts index 7f631f21c7814..2ea127f99fbbd 100644 --- a/packages/docusaurus-plugin-content-docs/src/docs.ts +++ b/packages/docusaurus-plugin-content-docs/src/docs.ts @@ -19,15 +19,12 @@ import { Globby, normalizeFrontMatterTags, } from '@docusaurus/utils'; -import type {LoadContext} from '@docusaurus/types'; import {getFileLastUpdate} from './lastUpdate'; -import type {DocFile} from './types'; import getSlug from './slug'; import {CURRENT_VERSION_NAME} from './constants'; import {stripPathNumberPrefixes} from './numberPrefix'; import {validateDocFrontMatter} from './frontMatter'; -import type {SidebarsUtils} from './sidebars/utils'; import {toDocNavigationLink, toNavigationLink} from './sidebars/utils'; import type { MetadataOptions, @@ -41,6 +38,9 @@ import type { DocFrontMatter, LoadedVersion, } from '@docusaurus/plugin-content-docs'; +import type {LoadContext} from '@docusaurus/types'; +import type {SidebarsUtils} from './sidebars/utils'; +import type {DocFile} from './types'; type LastUpdateOptions = Pick< PluginOptions, diff --git a/packages/docusaurus-plugin-content-docs/src/globalData.ts b/packages/docusaurus-plugin-content-docs/src/globalData.ts index c688ab2c00985..594e14c0f2009 100644 --- a/packages/docusaurus-plugin-content-docs/src/globalData.ts +++ b/packages/docusaurus-plugin-content-docs/src/globalData.ts @@ -6,7 +6,6 @@ */ import _ from 'lodash'; -import type {Sidebars} from './sidebars/types'; import {getMainDocId} from './docs'; import type {FullVersion} from './types'; import type { @@ -18,6 +17,7 @@ import type { GlobalSidebar, GlobalDoc, } from '@docusaurus/plugin-content-docs/client'; +import type {Sidebars} from './sidebars/types'; function toGlobalDataDoc(doc: DocMetadata): GlobalDoc { return { diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index b4c72107f3129..422dfcbe3ea9f 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -6,7 +6,8 @@ */ import path from 'path'; - +import _ from 'lodash'; +import logger from '@docusaurus/logger'; import { normalizeUrl, docuHash, @@ -19,20 +20,15 @@ import { createSlugger, DEFAULT_PLUGIN_ID, } from '@docusaurus/utils'; -import type {LoadContext, Plugin} from '@docusaurus/types'; import {loadSidebars, resolveSidebarPathOption} from './sidebars'; import {CategoryMetadataFilenamePattern} from './sidebars/generator'; -import type {DocEnv} from './docs'; -import {readVersionDocs, processDocMetadata, addDocNavigation} from './docs'; +import { + readVersionDocs, + processDocMetadata, + addDocNavigation, + type DocEnv, +} from './docs'; import {readVersionsMetadata} from './versions'; -import type { - SourceToPermalink, - DocFile, - DocsMarkdownOption, - VersionTag, - FullVersion, -} from './types'; -import type {RuleSetRule} from 'webpack'; import {cliDocsVersionCommand} from './cli'; import {VERSIONS_JSON_FILE} from './constants'; import {toGlobalDataVersion} from './globalData'; @@ -42,9 +38,10 @@ import { translateLoadedContent, getLoadedContentTranslationFiles, } from './translations'; -import logger from '@docusaurus/logger'; import {getVersionTags} from './tags'; import {createVersionRoutes} from './routes'; +import {createSidebarsUtils} from './sidebars/utils'; + import type { PropTagsListPage, PluginOptions, @@ -54,8 +51,15 @@ import type { LoadedContent, LoadedVersion, } from '@docusaurus/plugin-content-docs'; -import {createSidebarsUtils} from './sidebars/utils'; -import _ from 'lodash'; +import type {LoadContext, Plugin} from '@docusaurus/types'; +import type { + SourceToPermalink, + DocFile, + DocsMarkdownOption, + VersionTag, + FullVersion, +} from './types'; +import type {RuleSetRule} from 'webpack'; export default async function pluginContentDocs( context: LoadContext, diff --git a/packages/docusaurus-plugin-content-docs/src/markdown/__tests__/linkify.test.ts b/packages/docusaurus-plugin-content-docs/src/markdown/__tests__/linkify.test.ts index 0ca3678361573..864d5a39c2741 100644 --- a/packages/docusaurus-plugin-content-docs/src/markdown/__tests__/linkify.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/markdown/__tests__/linkify.test.ts @@ -9,13 +9,13 @@ import {jest} from '@jest/globals'; import fs from 'fs-extra'; import path from 'path'; import {linkify} from '../linkify'; +import {VERSIONED_DOCS_DIR, CURRENT_VERSION_NAME} from '../../constants'; import type { DocsMarkdownOption, SourceToPermalink, DocBrokenMarkdownLink, } from '../../types'; import type {VersionMetadata} from '@docusaurus/plugin-content-docs'; -import {VERSIONED_DOCS_DIR, CURRENT_VERSION_NAME} from '../../constants'; function createFakeVersion({ versionName, diff --git a/packages/docusaurus-plugin-content-docs/src/markdown/linkify.ts b/packages/docusaurus-plugin-content-docs/src/markdown/linkify.ts index 704bcbd4974fc..ae651cb316a06 100644 --- a/packages/docusaurus-plugin-content-docs/src/markdown/linkify.ts +++ b/packages/docusaurus-plugin-content-docs/src/markdown/linkify.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {DocsMarkdownOption} from '../types'; import {replaceMarkdownLinks, getContentPathList} from '@docusaurus/utils'; +import type {DocsMarkdownOption} from '../types'; function getVersion(filePath: string, options: DocsMarkdownOption) { const versionFound = options.versionsMetadata.find((version) => diff --git a/packages/docusaurus-plugin-content-docs/src/options.ts b/packages/docusaurus-plugin-content-docs/src/options.ts index 258236acaaea1..047f59ff3940a 100644 --- a/packages/docusaurus-plugin-content-docs/src/options.ts +++ b/packages/docusaurus-plugin-content-docs/src/options.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import type {PluginOptions, Options} from '@docusaurus/plugin-content-docs'; +import logger from '@docusaurus/logger'; import { Joi, RemarkPluginsSchema, @@ -14,15 +14,14 @@ import { URISchema, } from '@docusaurus/utils-validation'; import {GlobExcludeDefault} from '@docusaurus/utils'; - -import type {OptionValidationContext} from '@docusaurus/types'; -import logger from '@docusaurus/logger'; import admonitions from 'remark-admonitions'; import {DefaultSidebarItemsGenerator} from './sidebars/generator'; import { DefaultNumberPrefixParser, DisabledNumberPrefixParser, } from './numberPrefix'; +import type {OptionValidationContext} from '@docusaurus/types'; +import type {PluginOptions, Options} from '@docusaurus/plugin-content-docs'; export const DEFAULT_OPTIONS: Omit = { path: 'docs', // Path to data on filesystem, relative to site dir. 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 412a08cdb08f6..1d7784c63fc72 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 @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +/// + declare module '@docusaurus/plugin-content-docs' { import type {MDXOptions} from '@docusaurus/mdx-loader'; import type { diff --git a/packages/docusaurus-plugin-content-docs/src/props.ts b/packages/docusaurus-plugin-content-docs/src/props.ts index bf4393c631ffc..8505d5de2cd21 100644 --- a/packages/docusaurus-plugin-content-docs/src/props.ts +++ b/packages/docusaurus-plugin-content-docs/src/props.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import {createDocsByIdIndex} from './docs'; import type {VersionTag} from './types'; import type { SidebarItemDoc, @@ -24,8 +26,6 @@ import type { DocMetadata, LoadedVersion, } from '@docusaurus/plugin-content-docs'; -import _ from 'lodash'; -import {createDocsByIdIndex} from './docs'; export function toSidebarsProp(loadedVersion: LoadedVersion): PropSidebars { const docsById = createDocsByIdIndex(loadedVersion.docs); diff --git a/packages/docusaurus-plugin-content-docs/src/routes.ts b/packages/docusaurus-plugin-content-docs/src/routes.ts index 57f5722ba1db5..9a9205bee1c55 100644 --- a/packages/docusaurus-plugin-content-docs/src/routes.ts +++ b/packages/docusaurus-plugin-content-docs/src/routes.ts @@ -5,15 +5,15 @@ * LICENSE file in the root directory of this source tree. */ -import type {PluginContentLoadedActions, RouteConfig} from '@docusaurus/types'; +import logger from '@docusaurus/logger'; import {docuHash, createSlugger} from '@docusaurus/utils'; +import {toVersionMetadataProp} from './props'; +import type {PluginContentLoadedActions, RouteConfig} from '@docusaurus/types'; import type {FullVersion} from './types'; import type { CategoryGeneratedIndexMetadata, DocMetadata, } from '@docusaurus/plugin-content-docs'; -import {toVersionMetadataProp} from './props'; -import logger from '@docusaurus/logger'; export async function createCategoryGeneratedIndexRoutes({ version, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/generator.test.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/generator.test.ts index 66281f746b68b..671c12cfe256d 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/generator.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/generator.test.ts @@ -7,9 +7,9 @@ import {jest} from '@jest/globals'; import {DefaultSidebarItemsGenerator} from '../generator'; -import type {SidebarItemsGenerator} from '../types'; import {DefaultNumberPrefixParser} from '../../numberPrefix'; import {isCategoryIndex} from '../../docs'; +import type {SidebarItemsGenerator} from '../types'; describe('DefaultSidebarItemsGenerator', () => { function testDefaultSidebarItemsGenerator( diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/index.test.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/index.test.ts index aedcfe0db3321..5a1eed4f1d1b4 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/__tests__/index.test.ts @@ -9,8 +9,8 @@ import {jest} from '@jest/globals'; import path from 'path'; import {createSlugger} from '@docusaurus/utils'; import {loadSidebars, DisabledSidebars} from '../index'; -import type {SidebarProcessorParams} from '../types'; import {DefaultSidebarItemsGenerator} from '../generator'; +import type {SidebarProcessorParams} from '../types'; import type {DocMetadata} from '@docusaurus/plugin-content-docs'; describe('loadSidebars', () => { 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 079040879ac68..d0a530bbd7f22 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 @@ -6,7 +6,11 @@ */ import {jest} from '@jest/globals'; +import {createSlugger} from '@docusaurus/utils'; import {processSidebars} from '../processor'; +import {DefaultSidebarItemsGenerator} from '../generator'; +import {DefaultNumberPrefixParser} from '../../numberPrefix'; +import {isCategoryIndex} from '../../docs'; import type { SidebarItem, SidebarItemsGenerator, @@ -16,11 +20,7 @@ import type { CategoryMetadataFile, ProcessedSidebars, } from '../types'; -import {DefaultSidebarItemsGenerator} from '../generator'; -import {createSlugger} from '@docusaurus/utils'; import type {VersionMetadata} from '@docusaurus/plugin-content-docs'; -import {DefaultNumberPrefixParser} from '../../numberPrefix'; -import {isCategoryIndex} from '../../docs'; describe('processSidebars', () => { function createStaticSidebarItemGenerator( diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts index 67320e7888d57..56e0025a81afc 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts @@ -5,6 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; +import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import {addTrailingSlash} from '@docusaurus/utils'; +import {createDocsByIdIndex, toCategoryIndexMatcherParam} from '../docs'; import type { SidebarItemDoc, SidebarItemsGenerator, @@ -13,11 +18,6 @@ import type { NormalizedSidebarItem, SidebarItemCategoryLinkConfig, } from './types'; -import _ from 'lodash'; -import {addTrailingSlash} from '@docusaurus/utils'; -import logger from '@docusaurus/logger'; -import path from 'path'; -import {createDocsByIdIndex, toCategoryIndexMatcherParam} from '../docs'; const BreadcrumbSeparator = '/'; diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts index f99b03374a041..36bd576f7f8a8 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/index.ts @@ -6,19 +6,19 @@ */ import fs from 'fs-extra'; +import path from 'path'; +import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import {Globby} from '@docusaurus/utils'; +import Yaml from 'js-yaml'; +import combinePromises from 'combine-promises'; import importFresh from 'import-fresh'; -import type {SidebarsConfig, Sidebars, SidebarProcessorParams} from './types'; import {validateSidebars, validateCategoryMetadataFile} from './validation'; import {normalizeSidebars} from './normalization'; import {processSidebars} from './processor'; import {postProcessSidebars} from './postProcessor'; -import path from 'path'; -import {Globby} from '@docusaurus/utils'; -import logger from '@docusaurus/logger'; import type {PluginOptions} from '@docusaurus/plugin-content-docs'; -import Yaml from 'js-yaml'; -import _ from 'lodash'; -import combinePromises from 'combine-promises'; +import type {SidebarsConfig, Sidebars, SidebarProcessorParams} from './types'; export const DefaultSidebars: SidebarsConfig = { defaultSidebar: [ diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/normalization.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/normalization.ts index d36be98fcd6a8..4d51e254443e8 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/normalization.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/normalization.ts @@ -5,6 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import {isCategoriesShorthand} from './utils'; import type { NormalizedSidebarItem, NormalizedSidebar, @@ -16,9 +19,6 @@ import type { SidebarsConfig, NormalizedSidebarItemCategory, } from './types'; -import {isCategoriesShorthand} from './utils'; -import _ from 'lodash'; -import logger from '@docusaurus/logger'; function normalizeCategoriesShorthand( sidebar: SidebarCategoriesShorthand, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/postProcessor.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/postProcessor.ts index 717db08605837..307ed9de86758 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/postProcessor.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/postProcessor.ts @@ -5,7 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import {normalizeUrl} from '@docusaurus/utils'; +import {getDocIds} from '../docs'; import type { SidebarItem, Sidebars, @@ -15,8 +17,6 @@ import type { ProcessedSidebars, SidebarItemCategoryLink, } from './types'; -import {getDocIds} from '../docs'; -import _ from 'lodash'; type SidebarPostProcessorParams = SidebarProcessorParams & { draftIds: Set; diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts index 7e83dd08a9217..7949ad2216fda 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/processor.ts @@ -5,6 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import combinePromises from 'combine-promises'; +import {DefaultSidebarItemsGenerator} from './generator'; +import {validateSidebars} from './validation'; +import {isCategoryIndex} from '../docs'; import type { DocMetadataBase, VersionMetadata, @@ -22,11 +27,6 @@ import type { SidebarProcessorParams, CategoryMetadataFile, } from './types'; -import {DefaultSidebarItemsGenerator} from './generator'; -import {validateSidebars} from './validation'; -import _ from 'lodash'; -import combinePromises from 'combine-promises'; -import {isCategoryIndex} from '../docs'; function toSidebarItemsGeneratorDoc( doc: DocMetadataBase, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts index ee27177c1e4a9..a213b2e7dedc4 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/utils.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import {toMessageRelativeFilePath} from '@docusaurus/utils'; import type { Sidebars, Sidebar, @@ -18,9 +20,6 @@ import type { SidebarItemCategoryWithGeneratedIndex, SidebarNavigationItem, } from './types'; - -import _ from 'lodash'; -import {toMessageRelativeFilePath} from '@docusaurus/utils'; import type { DocMetadataBase, PropNavigationLink, diff --git a/packages/docusaurus-plugin-content-docs/src/tags.ts b/packages/docusaurus-plugin-content-docs/src/tags.ts index 1de963d81f56d..dfa0e3284587e 100644 --- a/packages/docusaurus-plugin-content-docs/src/tags.ts +++ b/packages/docusaurus-plugin-content-docs/src/tags.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import {groupTaggedItems} from '@docusaurus/utils'; import type {VersionTags} from './types'; import type {DocMetadata} from '@docusaurus/plugin-content-docs'; -import _ from 'lodash'; export function getVersionTags(docs: DocMetadata[]): VersionTags { const groups = groupTaggedItems(docs, (doc) => doc.tags); diff --git a/packages/docusaurus-plugin-content-docs/src/translations.ts b/packages/docusaurus-plugin-content-docs/src/translations.ts index f5f2f7e719164..abc56ac65b936 100644 --- a/packages/docusaurus-plugin-content-docs/src/translations.ts +++ b/packages/docusaurus-plugin-content-docs/src/translations.ts @@ -5,6 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import {mergeTranslations} from '@docusaurus/utils'; +import {CURRENT_VERSION_NAME} from './constants'; +import { + collectSidebarCategories, + transformSidebarItems, + collectSidebarLinks, +} from './sidebars/utils'; import type { LoadedVersion, LoadedContent, @@ -15,20 +23,11 @@ import type { SidebarItemCategoryLink, Sidebars, } from './sidebars/types'; - -import _ from 'lodash'; -import { - collectSidebarCategories, - transformSidebarItems, - collectSidebarLinks, -} from './sidebars/utils'; import type { TranslationFileContent, TranslationFile, TranslationMessage, } from '@docusaurus/types'; -import {mergeTranslations} from '@docusaurus/utils'; -import {CURRENT_VERSION_NAME} from './constants'; function getVersionFileName(versionName: string): string { if (versionName === CURRENT_VERSION_NAME) { diff --git a/packages/docusaurus-plugin-content-docs/src/types.ts b/packages/docusaurus-plugin-content-docs/src/types.ts index df3579b856d86..cb4506b20d1a8 100644 --- a/packages/docusaurus-plugin-content-docs/src/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/types.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -/// - import type {BrokenMarkdownLink, Tag} from '@docusaurus/utils'; import type { VersionMetadata, diff --git a/packages/docusaurus-plugin-content-docs/src/versions/__tests__/index.test.ts b/packages/docusaurus-plugin-content-docs/src/versions/__tests__/index.test.ts index c019d8a3ae9a4..4a3448460a24a 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions/__tests__/index.test.ts @@ -7,9 +7,9 @@ import {jest} from '@jest/globals'; import path from 'path'; +import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; import {readVersionsMetadata} from '../index'; import {DEFAULT_OPTIONS} from '../../options'; -import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; import type {I18n} from '@docusaurus/types'; import type { PluginOptions, diff --git a/packages/docusaurus-plugin-content-docs/src/versions/files.ts b/packages/docusaurus-plugin-content-docs/src/versions/files.ts index 69660f34a9cc6..6b7464ee30496 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions/files.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions/files.ts @@ -7,6 +7,7 @@ import path from 'path'; import fs from 'fs-extra'; +import {getPluginI18nPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; import { VERSIONS_JSON_FILE, VERSIONED_DOCS_DIR, @@ -14,7 +15,6 @@ import { CURRENT_VERSION_NAME, } from '../constants'; import {validateVersionNames} from './validation'; -import {getPluginI18nPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; import type { PluginOptions, VersionMetadata, diff --git a/packages/docusaurus-plugin-content-docs/src/versions/index.ts b/packages/docusaurus-plugin-content-docs/src/versions/index.ts index cd85ddf2137d8..369e0fd6efc20 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions/index.ts @@ -6,8 +6,8 @@ */ import path from 'path'; -import {CURRENT_VERSION_NAME} from '../constants'; import {normalizeUrl, posixPath} from '@docusaurus/utils'; +import {CURRENT_VERSION_NAME} from '../constants'; import {validateVersionsOptions} from './validation'; import { getDocsDirPathLocalized, diff --git a/packages/docusaurus-plugin-content-docs/tsconfig.client.json b/packages/docusaurus-plugin-content-docs/tsconfig.client.json new file mode 100644 index 0000000000000..2741f3ca38909 --- /dev/null +++ b/packages/docusaurus-plugin-content-docs/tsconfig.client.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "module": "esnext", + "target": "esnext", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/client", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-content-docs/tsconfig.json b/packages/docusaurus-plugin-content-docs/tsconfig.json index f5902ba1089bc..48e200409e4e6 100644 --- a/packages/docusaurus-plugin-content-docs/tsconfig.json +++ b/packages/docusaurus-plugin-content-docs/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/client", "**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-content-pages/.npmignore b/packages/docusaurus-plugin-content-pages/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-content-pages/.npmignore +++ b/packages/docusaurus-plugin-content-pages/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts index 89221c819bc8a..f3b94d2df5f48 100644 --- a/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts @@ -7,10 +7,10 @@ import path from 'path'; import {loadContext} from '@docusaurus/core/lib/server'; +import {normalizePluginOptions} from '@docusaurus/utils-validation'; import pluginContentPages from '../index'; import {validateOptions} from '../options'; -import {normalizePluginOptions} from '@docusaurus/utils-validation'; describe('docusaurus-plugin-content-pages', () => { it('loads simple pages', async () => { diff --git a/packages/docusaurus-plugin-content-pages/src/__tests__/options.test.ts b/packages/docusaurus-plugin-content-pages/src/__tests__/options.test.ts index 9365b614cd9fa..d92d691e7dc09 100644 --- a/packages/docusaurus-plugin-content-pages/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-content-pages/src/__tests__/options.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {validateOptions, DEFAULT_OPTIONS} from '../options'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import {validateOptions, DEFAULT_OPTIONS} from '../options'; import type {Options} from '@docusaurus/plugin-content-pages'; function testValidate(options: Options) { diff --git a/packages/docusaurus-plugin-content-pages/src/index.ts b/packages/docusaurus-plugin-content-pages/src/index.ts index 5bd819610ba1f..66bcb0d157121 100644 --- a/packages/docusaurus-plugin-content-pages/src/index.ts +++ b/packages/docusaurus-plugin-content-pages/src/index.ts @@ -21,10 +21,10 @@ import { DEFAULT_PLUGIN_ID, parseMarkdownString, } from '@docusaurus/utils'; -import type {LoadContext, Plugin} from '@docusaurus/types'; import admonitions from 'remark-admonitions'; import {validatePageFrontMatter} from './frontMatter'; +import type {LoadContext, Plugin} from '@docusaurus/types'; import type {PagesContentPaths} from './types'; import type { PluginOptions, diff --git a/packages/docusaurus-plugin-content-pages/src/options.ts b/packages/docusaurus-plugin-content-pages/src/options.ts index 9713fea810dd7..475ed8311060b 100644 --- a/packages/docusaurus-plugin-content-pages/src/options.ts +++ b/packages/docusaurus-plugin-content-pages/src/options.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import type {PluginOptions, Options} from '@docusaurus/plugin-content-pages'; import { Joi, RemarkPluginsSchema, @@ -14,6 +13,7 @@ import { } from '@docusaurus/utils-validation'; import {GlobExcludeDefault} from '@docusaurus/utils'; import type {OptionValidationContext} from '@docusaurus/types'; +import type {PluginOptions, Options} from '@docusaurus/plugin-content-pages'; export const DEFAULT_OPTIONS: PluginOptions = { path: 'src/pages', // Path to data on filesystem, relative to site dir. diff --git a/packages/docusaurus-plugin-content-pages/tsconfig.json b/packages/docusaurus-plugin-content-pages/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/docusaurus-plugin-content-pages/tsconfig.json +++ b/packages/docusaurus-plugin-content-pages/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-debug/.npmignore b/packages/docusaurus-plugin-debug/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-debug/.npmignore +++ b/packages/docusaurus-plugin-debug/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-debug/copyUntypedFiles.mjs b/packages/docusaurus-plugin-debug/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-plugin-debug/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-plugin-debug/package.json b/packages/docusaurus-plugin-debug/package.json index 9d3f2fd58a351..3382fcab737a1 100644 --- a/packages/docusaurus-plugin-debug/package.json +++ b/packages/docusaurus-plugin-debug/package.json @@ -5,8 +5,10 @@ "main": "lib/index.js", "types": "src/plugin-debug.d.ts", "scripts": { - "build": "tsc && node copyUntypedFiles.mjs", - "watch": "node copyUntypedFiles.mjs && tsc --watch" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "publishConfig": { "access": "public" diff --git a/packages/docusaurus-plugin-debug/src/index.ts b/packages/docusaurus-plugin-debug/src/index.ts index 62e650824f936..7ca3680678cb2 100644 --- a/packages/docusaurus-plugin-debug/src/index.ts +++ b/packages/docusaurus-plugin-debug/src/index.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {LoadContext, Plugin} from '@docusaurus/types'; -import {docuHash, normalizeUrl, posixPath} from '@docusaurus/utils'; import path from 'path'; +import {docuHash, normalizeUrl, posixPath} from '@docusaurus/utils'; +import type {LoadContext, Plugin} from '@docusaurus/types'; export default function pluginDebug({ siteConfig: {baseUrl}, diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugConfig/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugConfig/index.tsx index 373fd530efff0..6b110b8ab1989 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugConfig/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugConfig/index.tsx @@ -6,12 +6,10 @@ */ import React from 'react'; - +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import DebugLayout from '@theme/DebugLayout'; import DebugJsonView from '@theme/DebugJsonView'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; - export default function DebugMetadata(): JSX.Element { const {siteConfig} = useDocusaurusContext(); return ( diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugGlobalData/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugGlobalData/index.tsx index 2a1b28b73fa8f..f66df5b7dd8d3 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugGlobalData/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugGlobalData/index.tsx @@ -6,10 +6,9 @@ */ import React from 'react'; - +import useGlobalData from '@docusaurus/useGlobalData'; import DebugLayout from '@theme/DebugLayout'; import DebugJsonView from '@theme/DebugJsonView'; -import useGlobalData from '@docusaurus/useGlobalData'; export default function DebugMetadata(): JSX.Element { const globalData = useGlobalData(); diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugRegistry/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugRegistry/index.tsx index b937bf9040c4c..59cd4c7c21451 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugRegistry/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugRegistry/index.tsx @@ -6,9 +6,8 @@ */ import React from 'react'; - -import DebugLayout from '@theme/DebugLayout'; import registry from '@generated/registry'; +import DebugLayout from '@theme/DebugLayout'; import styles from './styles.module.css'; export default function DebugRegistry(): JSX.Element { diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugRoutes/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugRoutes/index.tsx index d9d3c5b5fa080..43b922ba91acd 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugRoutes/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugRoutes/index.tsx @@ -6,10 +6,9 @@ */ import React from 'react'; - +import routes from '@generated/routes'; import DebugLayout from '@theme/DebugLayout'; import DebugJsonView from '@theme/DebugJsonView'; -import routes from '@generated/routes'; import styles from './styles.module.css'; export default function DebugRoutes(): JSX.Element { diff --git a/packages/docusaurus-plugin-debug/src/theme/DebugSiteMetadata/index.tsx b/packages/docusaurus-plugin-debug/src/theme/DebugSiteMetadata/index.tsx index a30cc3bbc6423..64d3954842c5b 100644 --- a/packages/docusaurus-plugin-debug/src/theme/DebugSiteMetadata/index.tsx +++ b/packages/docusaurus-plugin-debug/src/theme/DebugSiteMetadata/index.tsx @@ -6,9 +6,8 @@ */ import React from 'react'; - -import DebugLayout from '@theme/DebugLayout'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import DebugLayout from '@theme/DebugLayout'; import styles from './styles.module.css'; export default function DebugMetadata(): JSX.Element { diff --git a/packages/docusaurus-plugin-debug/tsconfig.client.json b/packages/docusaurus-plugin-debug/tsconfig.client.json new file mode 100644 index 0000000000000..2fd5ae7c4d297 --- /dev/null +++ b/packages/docusaurus-plugin-debug/tsconfig.client.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "module": "esnext", + "target": "esnext", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/theme", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-debug/tsconfig.json b/packages/docusaurus-plugin-debug/tsconfig.json index f5902ba1089bc..7c1bb85ac462b 100644 --- a/packages/docusaurus-plugin-debug/tsconfig.json +++ b/packages/docusaurus-plugin-debug/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/theme", "**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-google-analytics/.npmignore b/packages/docusaurus-plugin-google-analytics/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-google-analytics/.npmignore +++ b/packages/docusaurus-plugin-google-analytics/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-google-analytics/package.json b/packages/docusaurus-plugin-google-analytics/package.json index 77f5c813de983..f62db432005c1 100644 --- a/packages/docusaurus-plugin-google-analytics/package.json +++ b/packages/docusaurus-plugin-google-analytics/package.json @@ -8,8 +8,8 @@ "access": "public" }, "scripts": { - "build": "tsc", - "watch": "tsc --watch" + "build": "tsc --build", + "watch": "tsc --build --watch" }, "repository": { "type": "git", diff --git a/packages/docusaurus-plugin-google-analytics/tsconfig.client.json b/packages/docusaurus-plugin-google-analytics/tsconfig.client.json new file mode 100644 index 0000000000000..766ffcc81d67a --- /dev/null +++ b/packages/docusaurus-plugin-google-analytics/tsconfig.client.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "module": "esnext", + "target": "esnext", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/analytics.ts", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-google-analytics/tsconfig.json b/packages/docusaurus-plugin-google-analytics/tsconfig.json index f5902ba1089bc..77a4365aedfe7 100644 --- a/packages/docusaurus-plugin-google-analytics/tsconfig.json +++ b/packages/docusaurus-plugin-google-analytics/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/analytics.ts", "**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-google-gtag/.npmignore b/packages/docusaurus-plugin-google-gtag/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-google-gtag/.npmignore +++ b/packages/docusaurus-plugin-google-gtag/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-google-gtag/package.json b/packages/docusaurus-plugin-google-gtag/package.json index 854f6d2e87f81..c353d7a1a28cc 100644 --- a/packages/docusaurus-plugin-google-gtag/package.json +++ b/packages/docusaurus-plugin-google-gtag/package.json @@ -5,8 +5,8 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "scripts": { - "build": "tsc", - "watch": "tsc --watch" + "build": "tsc --build", + "watch": "tsc --build --watch" }, "publishConfig": { "access": "public" diff --git a/packages/docusaurus-plugin-google-gtag/tsconfig.client.json b/packages/docusaurus-plugin-google-gtag/tsconfig.client.json new file mode 100644 index 0000000000000..985b9a4580990 --- /dev/null +++ b/packages/docusaurus-plugin-google-gtag/tsconfig.client.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "module": "esnext", + "target": "esnext", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/gtag.ts", "src/options.ts", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-google-gtag/tsconfig.json b/packages/docusaurus-plugin-google-gtag/tsconfig.json index f5902ba1089bc..1b3271a718e6e 100644 --- a/packages/docusaurus-plugin-google-gtag/tsconfig.json +++ b/packages/docusaurus-plugin-google-gtag/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/gtag.ts", "**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-ideal-image/.npmignore b/packages/docusaurus-plugin-ideal-image/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-ideal-image/.npmignore +++ b/packages/docusaurus-plugin-ideal-image/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-ideal-image/copyUntypedFiles.mjs b/packages/docusaurus-plugin-ideal-image/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-plugin-ideal-image/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-plugin-ideal-image/package.json b/packages/docusaurus-plugin-ideal-image/package.json index 6f6c73d117c06..5bda29fd02038 100644 --- a/packages/docusaurus-plugin-ideal-image/package.json +++ b/packages/docusaurus-plugin-ideal-image/package.json @@ -5,11 +5,10 @@ "main": "lib/index.js", "types": "src/plugin-ideal-image.d.ts", "scripts": { - "build": "yarn build:server && yarn build:browser && yarn build:copy && yarn build:format", - "build:server": "tsc --project tsconfig.server.json", - "build:browser": "tsc --project tsconfig.browser.json", - "build:copy": "node copyUntypedFiles.mjs", - "build:format": "prettier --config ../../.prettierrc --write \"lib/**/*.js\"" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "publishConfig": { "access": "public" diff --git a/packages/docusaurus-plugin-ideal-image/src/index.ts b/packages/docusaurus-plugin-ideal-image/src/index.ts index 727eb1adc51c6..d650e33b10067 100644 --- a/packages/docusaurus-plugin-ideal-image/src/index.ts +++ b/packages/docusaurus-plugin-ideal-image/src/index.ts @@ -5,14 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +import {Joi} from '@docusaurus/utils-validation'; +import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; import type { LoadContext, Plugin, OptionValidationContext, } from '@docusaurus/types'; import type {PluginOptions} from '@docusaurus/plugin-ideal-image'; -import {Joi} from '@docusaurus/utils-validation'; -import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; export default function pluginIdealImage( context: LoadContext, diff --git a/packages/docusaurus-plugin-ideal-image/tsconfig.browser.json b/packages/docusaurus-plugin-ideal-image/tsconfig.browser.json deleted file mode 100644 index 3af8257cdf8d3..0000000000000 --- a/packages/docusaurus-plugin-ideal-image/tsconfig.browser.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "esnext", - "jsx": "react-native" - }, - "include": ["src/theme/", "src/*.d.ts"] -} diff --git a/packages/docusaurus-plugin-ideal-image/tsconfig.client.json b/packages/docusaurus-plugin-ideal-image/tsconfig.client.json new file mode 100644 index 0000000000000..2fd5ae7c4d297 --- /dev/null +++ b/packages/docusaurus-plugin-ideal-image/tsconfig.client.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "module": "esnext", + "target": "esnext", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src/theme", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-ideal-image/tsconfig.json b/packages/docusaurus-plugin-ideal-image/tsconfig.json index 51aec434b2578..7c1bb85ac462b 100644 --- a/packages/docusaurus-plugin-ideal-image/tsconfig.json +++ b/packages/docusaurus-plugin-ideal-image/tsconfig.json @@ -1,8 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { - "lib": ["DOM", "ES2019"], + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/theme", "**/__tests__/**"] } diff --git a/packages/docusaurus-plugin-ideal-image/tsconfig.server.json b/packages/docusaurus-plugin-ideal-image/tsconfig.server.json deleted file mode 100644 index 1a463cd83a529..0000000000000 --- a/packages/docusaurus-plugin-ideal-image/tsconfig.server.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/*.ts"] -} diff --git a/packages/docusaurus-plugin-pwa/.npmignore b/packages/docusaurus-plugin-pwa/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-pwa/.npmignore +++ b/packages/docusaurus-plugin-pwa/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-pwa/copyUntypedFiles.mjs b/packages/docusaurus-plugin-pwa/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-plugin-pwa/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-plugin-pwa/package.json b/packages/docusaurus-plugin-pwa/package.json index 3f0a4f8201c5d..4bc0e86f34d56 100644 --- a/packages/docusaurus-plugin-pwa/package.json +++ b/packages/docusaurus-plugin-pwa/package.json @@ -5,10 +5,10 @@ "main": "lib/index.js", "types": "src/plugin-pwa.d.ts", "scripts": { - "build": "yarn build:server && yarn build:browser && yarn build:copy", - "build:server": "tsc --project tsconfig.server.json", - "build:browser": "tsc --project tsconfig.browser.json", - "build:copy": "node copyUntypedFiles.mjs" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "publishConfig": { "access": "public" @@ -20,8 +20,8 @@ }, "license": "MIT", "dependencies": { - "@babel/core": "^7.17.10", - "@babel/preset-env": "^7.17.10", + "@babel/core": "^7.17.12", + "@babel/preset-env": "^7.17.12", "@docusaurus/core": "2.0.0-beta.20", "@docusaurus/theme-common": "2.0.0-beta.20", "@docusaurus/theme-translations": "2.0.0-beta.20", diff --git a/packages/docusaurus-plugin-pwa/src/index.ts b/packages/docusaurus-plugin-pwa/src/index.ts index 7150eae5f609b..7ec58b25f439a 100644 --- a/packages/docusaurus-plugin-pwa/src/index.ts +++ b/packages/docusaurus-plugin-pwa/src/index.ts @@ -5,18 +5,16 @@ * LICENSE file in the root directory of this source tree. */ -import type {HtmlTags, LoadContext, Plugin} from '@docusaurus/types'; -import type {PluginOptions} from '@docusaurus/plugin-pwa'; -import {normalizeUrl} from '@docusaurus/utils'; -import {compile} from '@docusaurus/core/lib/webpack/utils'; -import LogPlugin from '@docusaurus/core/lib/webpack/plugins/LogPlugin'; -import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; - import path from 'path'; import webpack, {type Configuration} from 'webpack'; import Terser from 'terser-webpack-plugin'; - import {injectManifest} from 'workbox-build'; +import {normalizeUrl} from '@docusaurus/utils'; +import {compile} from '@docusaurus/core/lib/webpack/utils'; +import LogPlugin from '@docusaurus/core/lib/webpack/plugins/LogPlugin'; +import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; +import type {HtmlTags, LoadContext, Plugin} from '@docusaurus/types'; +import type {PluginOptions} from '@docusaurus/plugin-pwa'; const isProd = process.env.NODE_ENV === 'production'; diff --git a/packages/docusaurus-plugin-pwa/src/registerSw.js b/packages/docusaurus-plugin-pwa/src/registerSw.ts similarity index 93% rename from packages/docusaurus-plugin-pwa/src/registerSw.js rename to packages/docusaurus-plugin-pwa/src/registerSw.ts index 9226d9a6f0541..a215a656aa580 100644 --- a/packages/docusaurus-plugin-pwa/src/registerSw.js +++ b/packages/docusaurus-plugin-pwa/src/registerSw.ts @@ -7,6 +7,14 @@ import {createStorageSlot} from '@docusaurus/theme-common'; +declare global { + namespace NodeJS { + interface ProcessEnv { + PWA_OFFLINE_MODE_ACTIVATION_STRATEGIES: (keyof typeof OfflineModeActivationStrategiesImplementations)[]; + } + } +} + // First: read the env variables (provided by Webpack) /* eslint-disable prefer-destructuring */ const PWA_SERVICE_WORKER_URL = process.env.PWA_SERVICE_WORKER_URL; @@ -34,7 +42,7 @@ async function clearRegistrations() { } await Promise.all( registrations.map(async (registration) => { - const result = await registration?.registration?.unregister(); + const result = await registration?.unregister(); if (debug) { console.log( `[Docusaurus-PWA][registerSw]: unregister() service worker registration`, @@ -65,6 +73,14 @@ https://stackoverflow.com/questions/51735869/check-if-user-has-already-installed async function isAppInstalledEventFired() { return AppInstalledEventFiredStorage.get() === 'true'; } + +declare global { + interface Navigator { + getInstalledRelatedApps: () => Promise<{platform: string}[]>; + connection: {saveData: boolean}; + } +} + async function isAppInstalledRelatedApps() { if ('getInstalledRelatedApps' in window.navigator) { const relatedApps = await navigator.getInstalledRelatedApps(); @@ -90,7 +106,9 @@ const OfflineModeActivationStrategiesImplementations = { new URLSearchParams(window.location.search).get('offlineMode') === 'true', }; -async function isStrategyActive(strategyName) { +async function isStrategyActive( + strategyName: keyof typeof OfflineModeActivationStrategiesImplementations, +) { return OfflineModeActivationStrategiesImplementations[strategyName](); } @@ -127,7 +145,7 @@ async function isOfflineModeEnabled() { return enabled; } -function createServiceWorkerUrl(params) { +function createServiceWorkerUrl(params: object) { const paramsQueryString = JSON.stringify(params); const url = `${PWA_SERVICE_WORKER_URL}?params=${encodeURIComponent( paramsQueryString, @@ -173,7 +191,7 @@ async function registerSW() { } }; - if (debug) { + if (debug && registration) { if (registration.active) { console.log( '[Docusaurus-PWA][registerSw]: registration.active', @@ -205,6 +223,7 @@ async function registerSW() { // Update current service worker if the next one finishes installing and // moves to waiting state in another tab. + // @ts-expect-error: not present in the API typings anymore wb.addEventListener('externalwaiting', (event) => { if (debug) { console.log('[Docusaurus-PWA][registerSw]: event externalwaiting', event); @@ -214,7 +233,7 @@ async function registerSW() { // Update service worker if the next one is already in the waiting state. // This happens when the user doesn't click on `reload` in the popup. - if (registration.waiting) { + if (registration?.waiting) { await handleServiceWorkerWaiting(); } } diff --git a/packages/docusaurus-plugin-pwa/src/renderReloadPopup.js b/packages/docusaurus-plugin-pwa/src/renderReloadPopup.tsx similarity index 75% rename from packages/docusaurus-plugin-pwa/src/renderReloadPopup.js rename to packages/docusaurus-plugin-pwa/src/renderReloadPopup.tsx index b26202ac3c5b0..d4cac3601736e 100644 --- a/packages/docusaurus-plugin-pwa/src/renderReloadPopup.js +++ b/packages/docusaurus-plugin-pwa/src/renderReloadPopup.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import {render} from 'react-dom'; +import ReactDOM from 'react-dom'; const POPUP_CONTAINER_ID = 'pwa-popup-container'; @@ -19,8 +19,10 @@ const createContainer = () => { return container; }; -export default async function renderReloadPopup(props) { +export default async function renderReloadPopup(props: { + onReload: () => void; +}): Promise { const container = getContainer() || createContainer(); - const {default: ReloadPopup} = await import(process.env.PWA_RELOAD_POPUP); - render(, container); + const {default: ReloadPopup} = await import(process.env.PWA_RELOAD_POPUP!); + ReactDOM.render(, container); } diff --git a/packages/docusaurus-plugin-pwa/src/theme/PwaReloadPopup/index.tsx b/packages/docusaurus-plugin-pwa/src/theme/PwaReloadPopup/index.tsx index 20e8490fb82bc..66d63d70e0969 100644 --- a/packages/docusaurus-plugin-pwa/src/theme/PwaReloadPopup/index.tsx +++ b/packages/docusaurus-plugin-pwa/src/theme/PwaReloadPopup/index.tsx @@ -8,7 +8,6 @@ import React, {useState} from 'react'; import clsx from 'clsx'; import Translate, {translate} from '@docusaurus/Translate'; - import type {Props} from '@theme/PwaReloadPopup'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-plugin-pwa/tsconfig.browser.json b/packages/docusaurus-plugin-pwa/tsconfig.browser.json deleted file mode 100644 index 3af8257cdf8d3..0000000000000 --- a/packages/docusaurus-plugin-pwa/tsconfig.browser.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "esnext", - "jsx": "react-native" - }, - "include": ["src/theme/", "src/*.d.ts"] -} diff --git a/packages/docusaurus-plugin-pwa/tsconfig.client.json b/packages/docusaurus-plugin-pwa/tsconfig.client.json new file mode 100644 index 0000000000000..9404df7cd8869 --- /dev/null +++ b/packages/docusaurus-plugin-pwa/tsconfig.client.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "rootDir": "src", + "outDir": "lib", + "module": "esnext", + "target": "esnext" + }, + "include": [ + "src/theme/", + "src/*.d.ts", + "src/registerSw.ts", + "src/renderReloadPopup.tsx" + ], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-plugin-pwa/tsconfig.json b/packages/docusaurus-plugin-pwa/tsconfig.json index 51aec434b2578..5eb9d05af96b9 100644 --- a/packages/docusaurus-plugin-pwa/tsconfig.json +++ b/packages/docusaurus-plugin-pwa/tsconfig.json @@ -1,8 +1,19 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { - "lib": ["DOM", "ES2019"], + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": [ + "src/theme/", + "src/registerSw.ts", + "src/renderReloadPopup.tsx", + "**/__tests__/**" + ] } diff --git a/packages/docusaurus-plugin-pwa/tsconfig.server.json b/packages/docusaurus-plugin-pwa/tsconfig.server.json deleted file mode 100644 index 1a463cd83a529..0000000000000 --- a/packages/docusaurus-plugin-pwa/tsconfig.server.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/*.ts"] -} diff --git a/packages/docusaurus-plugin-sitemap/.npmignore b/packages/docusaurus-plugin-sitemap/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-plugin-sitemap/.npmignore +++ b/packages/docusaurus-plugin-sitemap/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-plugin-sitemap/src/__tests__/createSitemap.test.ts b/packages/docusaurus-plugin-sitemap/src/__tests__/createSitemap.test.ts index c9008bd310043..26fd096caf413 100644 --- a/packages/docusaurus-plugin-sitemap/src/__tests__/createSitemap.test.ts +++ b/packages/docusaurus-plugin-sitemap/src/__tests__/createSitemap.test.ts @@ -6,9 +6,9 @@ */ import React from 'react'; +import {EnumChangefreq} from 'sitemap'; import createSitemap from '../createSitemap'; import type {DocusaurusConfig} from '@docusaurus/types'; -import {EnumChangefreq} from 'sitemap'; describe('createSitemap', () => { it('simple site', async () => { diff --git a/packages/docusaurus-plugin-sitemap/src/__tests__/options.test.ts b/packages/docusaurus-plugin-sitemap/src/__tests__/options.test.ts index c581cbece0ec1..8d57746125b91 100644 --- a/packages/docusaurus-plugin-sitemap/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-sitemap/src/__tests__/options.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {validateOptions, DEFAULT_OPTIONS, type Options} from '../options'; import {normalizePluginOptions} from '@docusaurus/utils-validation'; +import {validateOptions, DEFAULT_OPTIONS, type Options} from '../options'; function testValidate(options: Options) { return validateOptions({validate: normalizePluginOptions, options}); diff --git a/packages/docusaurus-plugin-sitemap/src/createSitemap.ts b/packages/docusaurus-plugin-sitemap/src/createSitemap.ts index 5e1b619d356f1..366714fd3f9b5 100644 --- a/packages/docusaurus-plugin-sitemap/src/createSitemap.ts +++ b/packages/docusaurus-plugin-sitemap/src/createSitemap.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ +import type {ReactElement} from 'react'; import {SitemapStream, streamToPromise} from 'sitemap'; import {applyTrailingSlash} from '@docusaurus/utils-common'; import {createMatcher} from '@docusaurus/utils'; import type {DocusaurusConfig} from '@docusaurus/types'; import type {HelmetServerState} from 'react-helmet-async'; import type {PluginOptions} from './options'; -import type {ReactElement} from 'react'; export default async function createSitemap( siteConfig: DocusaurusConfig, diff --git a/packages/docusaurus-plugin-sitemap/tsconfig.json b/packages/docusaurus-plugin-sitemap/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/docusaurus-plugin-sitemap/tsconfig.json +++ b/packages/docusaurus-plugin-sitemap/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-preset-classic/.npmignore b/packages/docusaurus-preset-classic/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-preset-classic/.npmignore +++ b/packages/docusaurus-preset-classic/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-preset-classic/tsconfig.json b/packages/docusaurus-preset-classic/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/docusaurus-preset-classic/tsconfig.json +++ b/packages/docusaurus-preset-classic/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-remark-plugin-npm2yarn/.npmignore b/packages/docusaurus-remark-plugin-npm2yarn/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/.npmignore +++ b/packages/docusaurus-remark-plugin-npm2yarn/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ 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 6c6dc300e1768..2ed9613324638 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts @@ -5,11 +5,11 @@ * LICENSE file in the root directory of this source tree. */ -import remark from 'remark'; -import npm2yarn from '../index'; -import vfile from 'to-vfile'; import path from 'path'; +import vfile from 'to-vfile'; import mdx from 'remark-mdx'; +import remark from 'remark'; +import npm2yarn from '../index'; const processFixture = async (name: string, options?: {sync?: boolean}) => { const filePath = path.join(__dirname, '__fixtures__', `${name}.md`); diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts index 0764763e9540f..28b4c7e891502 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts @@ -5,11 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import visit from 'unist-util-visit'; +import npmToYarn from 'npm-to-yarn'; import type {Code, Content, Literal} from 'mdast'; import type {Plugin} from 'unified'; import type {Node, Parent} from 'unist'; -import visit from 'unist-util-visit'; -import npmToYarn from 'npm-to-yarn'; type PluginOptions = { sync?: boolean; diff --git a/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json b/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json index aee99fc0f38ef..7807612b51a56 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json +++ b/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json @@ -1,11 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-theme-classic/.npmignore b/packages/docusaurus-theme-classic/.npmignore index 3e3575db0c5a7..03c9ae1e1b54f 100644 --- a/packages/docusaurus-theme-classic/.npmignore +++ b/packages/docusaurus-theme-classic/.npmignore @@ -1,10 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ - -lib/theme -lib-next/** -!lib-next/theme/** - -babel.config.js diff --git a/packages/docusaurus-theme-classic/babel.config.js b/packages/docusaurus-theme-classic/babel.config.js deleted file mode 100644 index 0bbcfe267e45b..0000000000000 --- a/packages/docusaurus-theme-classic/babel.config.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -module.exports = { - env: { - // USED FOR NODE/RUNTIME - // maybe we should differentiate both cases because - // we mostly need to transpile some features so that node does not crash... - lib: { - presets: [ - ['@babel/preset-env', {targets: {node: 14}, modules: 'commonjs'}], - ['@babel/preset-typescript', {isTSX: true, allExtensions: true}], - ], - }, - - // USED FOR JS SWIZZLE - // /lib-next folder is used as source to swizzle JS source code - // This JS code is created from TS source code - // This source code should look clean/human readable to be usable - 'lib-next': { - presets: [ - ['@babel/preset-typescript', {isTSX: true, allExtensions: true}], - ], - }, - }, -}; diff --git a/packages/docusaurus-theme-classic/package.json b/packages/docusaurus-theme-classic/package.json index e2b20b2381747..359930cbbc672 100644 --- a/packages/docusaurus-theme-classic/package.json +++ b/packages/docusaurus-theme-classic/package.json @@ -14,11 +14,10 @@ }, "license": "MIT", "scripts": { - "build": "tsc --noEmit && yarn babel:lib && yarn babel:lib-next && yarn format:lib-next", - "watch": "concurrently --names \"lib,lib-next,tsc\" --kill-others \"yarn babel:lib --watch\" \"yarn babel:lib-next --watch\" \"yarn tsc --watch\"", - "babel:lib": "cross-env BABEL_ENV=lib babel src -d lib --extensions \".tsx,.ts\" --ignore \"**/*.d.ts\" --copy-files", - "babel:lib-next": "cross-env BABEL_ENV=lib-next babel src -d lib-next --extensions \".tsx,.ts\" --ignore \"**/*.d.ts\" --copy-files", - "format:lib-next": "prettier --config ../../.prettierrc --write \"lib-next/**/*.{js,ts,jsx,tsc}\"" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "dependencies": { "@docusaurus/core": "2.0.0-beta.20", @@ -37,22 +36,19 @@ "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.13", - "prism-react-renderer": "^1.3.1", + "prism-react-renderer": "^1.3.3", "prismjs": "^1.28.0", "react-router-dom": "^5.2.0", - "rtlcss": "^3.5.0" + "rtlcss": "^3.5.0", + "tslib": "^2.4.0" }, "devDependencies": { - "@babel/cli": "^7.17.10", - "@babel/core": "^7.17.10", - "@babel/preset-typescript": "^7.16.7", "@docusaurus/module-type-aliases": "2.0.0-beta.20", "@docusaurus/types": "2.0.0-beta.20", "@types/mdx-js__react": "^1.5.5", "@types/nprogress": "^0.2.0", "@types/prismjs": "^1.26.0", "@types/rtlcss": "^3.1.4", - "cross-env": "^7.0.3", "fs-extra": "^10.1.0", "react-test-renderer": "^17.0.2", "utility-types": "^3.10.0" diff --git a/packages/docusaurus-theme-classic/src/__tests__/translations.test.ts b/packages/docusaurus-theme-classic/src/__tests__/translations.test.ts index 1c530f978e863..48a2c70f3ff7b 100644 --- a/packages/docusaurus-theme-classic/src/__tests__/translations.test.ts +++ b/packages/docusaurus-theme-classic/src/__tests__/translations.test.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import {updateTranslationFileMessages} from '@docusaurus/utils'; import {getTranslationFiles, translateThemeConfig} from '../translations'; import type {ThemeConfig} from '@docusaurus/theme-common'; -import {updateTranslationFileMessages} from '@docusaurus/utils'; const ThemeConfigSample: ThemeConfig = { colorMode: {}, diff --git a/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts b/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts index a4ca7e3460188..8d85a4d376aae 100644 --- a/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts +++ b/packages/docusaurus-theme-classic/src/__tests__/validateThemeConfig.test.ts @@ -6,11 +6,11 @@ */ import _ from 'lodash'; -import {ThemeConfigSchema, DEFAULT_CONFIG} from '../validateThemeConfig'; import {normalizeThemeConfig} from '@docusaurus/utils-validation'; import theme from 'prism-react-renderer/themes/github'; import darkTheme from 'prism-react-renderer/themes/dracula'; +import {ThemeConfigSchema, DEFAULT_CONFIG} from '../validateThemeConfig'; function testValidateThemeConfig(partialThemeConfig: {[key: string]: unknown}) { return normalizeThemeConfig(ThemeConfigSchema, { diff --git a/packages/docusaurus-theme-classic/src/index.ts b/packages/docusaurus-theme-classic/src/index.ts index 9fd370a2e5f8f..a0cb4629cb58f 100644 --- a/packages/docusaurus-theme-classic/src/index.ts +++ b/packages/docusaurus-theme-classic/src/index.ts @@ -6,13 +6,13 @@ */ import path from 'path'; -import type {LoadContext, Plugin} from '@docusaurus/types'; -import type {ThemeConfig} from '@docusaurus/theme-common'; -import {getTranslationFiles, translateThemeConfig} from './translations'; import {createRequire} from 'module'; -import type {Plugin as PostCssPlugin} from 'postcss'; import rtlcss from 'rtlcss'; import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; +import {getTranslationFiles, translateThemeConfig} from './translations'; +import type {LoadContext, Plugin} from '@docusaurus/types'; +import type {ThemeConfig} from '@docusaurus/theme-common'; +import type {Plugin as PostCssPlugin} from 'postcss'; import type {Options} from '@docusaurus/theme-classic'; import type webpack from 'webpack'; @@ -112,7 +112,7 @@ export default function themeClassic( name: 'docusaurus-theme-classic', getThemePath() { - return '../lib-next/theme'; + return '../lib/theme'; }, getTypeScriptThemePath() { diff --git a/packages/docusaurus-theme-classic/src/theme/BlogArchivePage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogArchivePage/index.tsx index a05afdf43fe87..763d0661e25fc 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogArchivePage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogArchivePage/index.tsx @@ -6,11 +6,11 @@ */ import React from 'react'; -import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; -import type {ArchiveBlogPost, Props} from '@theme/BlogArchivePage'; import {translate} from '@docusaurus/Translate'; import {PageMetadata} from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; +import type {ArchiveBlogPost, Props} from '@theme/BlogArchivePage'; type YearProp = { year: string; diff --git a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx index 910328b214ceb..72270058d99d7 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx @@ -6,19 +6,19 @@ */ import React from 'react'; +import clsx from 'clsx'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import BlogLayout from '@theme/BlogLayout'; -import BlogPostItem from '@theme/BlogPostItem'; -import BlogListPaginator from '@theme/BlogListPaginator'; -import type {Props} from '@theme/BlogListPage'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, } from '@docusaurus/theme-common'; +import BlogLayout from '@theme/BlogLayout'; +import BlogPostItem from '@theme/BlogPostItem'; +import BlogListPaginator from '@theme/BlogListPaginator'; import SearchMetadata from '@theme/SearchMetadata'; -import clsx from 'clsx'; +import type {Props} from '@theme/BlogListPage'; function BlogListPageMetadata(props: Props): JSX.Element { const {metadata} = props; diff --git a/packages/docusaurus-theme-classic/src/theme/BlogPostAuthors/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogPostAuthors/index.tsx index 4e36a71425535..99386d4ae9001 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogPostAuthors/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogPostAuthors/index.tsx @@ -7,8 +7,8 @@ import React from 'react'; import clsx from 'clsx'; -import type {Props} from '@theme/BlogPostAuthors'; import BlogPostAuthor from '@theme/BlogPostAuthor'; +import type {Props} from '@theme/BlogPostAuthors'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx index e531b8e9854b0..b0fcad3236b48 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogPostItem/index.tsx @@ -14,11 +14,11 @@ import {usePluralForm} from '@docusaurus/theme-common'; import {blogPostContainerID} from '@docusaurus/utils-common'; import MDXContent from '@theme/MDXContent'; import EditThisPage from '@theme/EditThisPage'; +import TagsListInline from '@theme/TagsListInline'; +import BlogPostAuthors from '@theme/BlogPostAuthors'; import type {Props} from '@theme/BlogPostItem'; import styles from './styles.module.css'; -import TagsListInline from '@theme/TagsListInline'; -import BlogPostAuthors from '@theme/BlogPostAuthors'; // Very simple pluralization: probably good enough for now function useReadingTimePlural() { diff --git a/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx index c7b9ec88e5d39..3d47fc4dd3796 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx @@ -6,17 +6,17 @@ */ import React from 'react'; -import BlogLayout from '@theme/BlogLayout'; -import BlogPostItem from '@theme/BlogPostItem'; -import BlogPostPaginator from '@theme/BlogPostPaginator'; -import type {Props} from '@theme/BlogPostPage'; +import clsx from 'clsx'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, } from '@docusaurus/theme-common'; +import BlogLayout from '@theme/BlogLayout'; +import BlogPostItem from '@theme/BlogPostItem'; +import BlogPostPaginator from '@theme/BlogPostPaginator'; import TOC from '@theme/TOC'; -import clsx from 'clsx'; +import type {Props} from '@theme/BlogPostPage'; function BlogPostPageMetadata(props: Props): JSX.Element { const {content: BlogPostContents} = props; diff --git a/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/index.tsx index ff74637e9ea5b..f010d2144836b 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/index.tsx @@ -9,9 +9,9 @@ import React from 'react'; import clsx from 'clsx'; import Link from '@docusaurus/Link'; import {translate} from '@docusaurus/Translate'; +import type {Props} from '@theme/BlogSidebar/Desktop'; import styles from './styles.module.css'; -import type {Props} from '@theme/BlogSidebar/Desktop'; export default function BlogSidebarDesktop({sidebar}: Props): JSX.Element { return ( diff --git a/packages/docusaurus-theme-classic/src/theme/BlogSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogSidebar/index.tsx index 742f4bd427811..f8458777efdd0 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogSidebar/index.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; +import {useWindowSize} from '@docusaurus/theme-common'; import BlogSidebarDesktop from '@theme/BlogSidebar/Desktop'; import BlogSidebarMobile from '@theme/BlogSidebar/Mobile'; -import {useWindowSize} from '@docusaurus/theme-common'; import type {Props} from '@theme/BlogSidebar'; export default function BlogSidebar({sidebar}: Props): JSX.Element | null { diff --git a/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx index 2f53b6ee41fa9..017329d478b16 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx @@ -6,18 +6,17 @@ */ import React from 'react'; - -import BlogLayout from '@theme/BlogLayout'; -import TagsListByLetter from '@theme/TagsListByLetter'; -import type {Props} from '@theme/BlogTagsListPage'; +import clsx from 'clsx'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, translateTagsPageTitle, } from '@docusaurus/theme-common'; +import BlogLayout from '@theme/BlogLayout'; +import TagsListByLetter from '@theme/TagsListByLetter'; +import type {Props} from '@theme/BlogTagsListPage'; import SearchMetadata from '../SearchMetadata'; -import clsx from 'clsx'; export default function BlogTagsListPage({tags, sidebar}: Props): JSX.Element { const title = translateTagsPageTitle(); diff --git a/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx index fddda0795d755..312bc945e1071 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx @@ -6,11 +6,7 @@ */ import React from 'react'; - -import Link from '@docusaurus/Link'; -import BlogLayout from '@theme/BlogLayout'; -import BlogPostItem from '@theme/BlogPostItem'; -import type {Props} from '@theme/BlogTagsPostsPage'; +import clsx from 'clsx'; import Translate, {translate} from '@docusaurus/Translate'; import { PageMetadata, @@ -18,9 +14,12 @@ import { ThemeClassNames, usePluralForm, } from '@docusaurus/theme-common'; +import Link from '@docusaurus/Link'; +import BlogLayout from '@theme/BlogLayout'; +import BlogPostItem from '@theme/BlogPostItem'; import BlogListPaginator from '@theme/BlogListPaginator'; import SearchMetadata from '@theme/SearchMetadata'; -import clsx from 'clsx'; +import type {Props} from '@theme/BlogTagsPostsPage'; // Very simple pluralization: probably good enough for now function useBlogPostsPlural() { diff --git a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/Element.tsx b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/Element.tsx index 3f130e80e6d66..a31cd85731acc 100644 --- a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/Element.tsx +++ b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/Element.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import Container from '@theme/CodeBlock/Container'; import clsx from 'clsx'; +import Container from '@theme/CodeBlock/Container'; import type {Props} from '@theme/CodeBlock/Content/Element'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/String.tsx b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/String.tsx index f73819a37f20d..5a9384f7b6380 100644 --- a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/String.tsx +++ b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Content/String.tsx @@ -6,6 +6,7 @@ */ import React from 'react'; +import clsx from 'clsx'; import { useThemeConfig, parseCodeBlockTitle, @@ -15,7 +16,6 @@ import { usePrismTheme, useCodeWordWrap, } from '@docusaurus/theme-common'; -import clsx from 'clsx'; import Highlight, {defaultProps, type Language} from 'prism-react-renderer'; import Line from '@theme/CodeBlock/Line'; import CopyButton from '@theme/CodeBlock/CopyButton'; diff --git a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Line/index.tsx b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Line/index.tsx index e15d70abfa4eb..3b6a8a306b0a3 100644 --- a/packages/docusaurus-theme-classic/src/theme/CodeBlock/Line/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/CodeBlock/Line/index.tsx @@ -8,6 +8,7 @@ import React from 'react'; import clsx from 'clsx'; import type {Props} from '@theme/CodeBlock/Line'; + import styles from './styles.module.css'; export default function CodeBlockLine({ diff --git a/packages/docusaurus-theme-classic/src/theme/CodeBlock/index.tsx b/packages/docusaurus-theme-classic/src/theme/CodeBlock/index.tsx index 9565932fafcb6..e672185a515f5 100644 --- a/packages/docusaurus-theme-classic/src/theme/CodeBlock/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/CodeBlock/index.tsx @@ -7,9 +7,9 @@ import React, {isValidElement, type ReactNode} from 'react'; import useIsBrowser from '@docusaurus/useIsBrowser'; -import type {Props} from '@theme/CodeBlock'; import ElementContent from '@theme/CodeBlock/Content/Element'; import StringContent from '@theme/CodeBlock/Content/String'; +import type {Props} from '@theme/CodeBlock'; /** * Best attempt to make the children a plain string so it is copyable. If there diff --git a/packages/docusaurus-theme-classic/src/theme/ColorModeToggle/index.tsx b/packages/docusaurus-theme-classic/src/theme/ColorModeToggle/index.tsx index e119f2ae33ed7..2b0407a547bec 100644 --- a/packages/docusaurus-theme-classic/src/theme/ColorModeToggle/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/ColorModeToggle/index.tsx @@ -6,13 +6,13 @@ */ import React from 'react'; -import type {Props} from '@theme/ColorModeToggle'; +import clsx from 'clsx'; import useIsBrowser from '@docusaurus/useIsBrowser'; import {translate} from '@docusaurus/Translate'; import IconLightMode from '@theme/IconLightMode'; import IconDarkMode from '@theme/IconDarkMode'; +import type {Props} from '@theme/ColorModeToggle'; -import clsx from 'clsx'; import styles from './styles.module.css'; function ColorModeToggle({className, value, onChange}: Props): JSX.Element { diff --git a/packages/docusaurus-theme-classic/src/theme/Details/index.tsx b/packages/docusaurus-theme-classic/src/theme/Details/index.tsx index 188729351494b..b6e7b06f6bd75 100644 --- a/packages/docusaurus-theme-classic/src/theme/Details/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Details/index.tsx @@ -9,6 +9,7 @@ import React from 'react'; import clsx from 'clsx'; import {Details as DetailsGeneric} from '@docusaurus/theme-common/Details'; import type {Props} from '@theme/Details'; + import styles from './styles.module.css'; // Should we have a custom details/summary comp in Infima instead of reusing diff --git a/packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/index.tsx index 0ed00dc1f43a8..44200b2f329ac 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/index.tsx @@ -6,18 +6,19 @@ */ import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; import { ThemeClassNames, useSidebarBreadcrumbs, useHomePageRoute, } from '@docusaurus/theme-common'; -import styles from './styles.module.css'; -import clsx from 'clsx'; import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; import {translate} from '@docusaurus/Translate'; import IconHome from '@theme/IconHome'; +import styles from './styles.module.css'; + // TODO move to design system folder function BreadcrumbsItemLink({ children, diff --git a/packages/docusaurus-theme-classic/src/theme/DocCard/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocCard/index.tsx index 15c8ac155d510..fc63f1949f473 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocCard/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocCard/index.tsx @@ -6,17 +6,18 @@ */ import React, {type ReactNode} from 'react'; +import clsx from 'clsx'; import Link from '@docusaurus/Link'; +import {findFirstCategoryLink, useDocById} from '@docusaurus/theme-common'; +import isInternalUrl from '@docusaurus/isInternalUrl'; +import {translate} from '@docusaurus/Translate'; +import type {Props} from '@theme/DocCard'; + +import styles from './styles.module.css'; import type { PropSidebarItemCategory, PropSidebarItemLink, } from '@docusaurus/plugin-content-docs'; -import type {Props} from '@theme/DocCard'; -import {findFirstCategoryLink, useDocById} from '@docusaurus/theme-common'; -import clsx from 'clsx'; -import styles from './styles.module.css'; -import isInternalUrl from '@docusaurus/isInternalUrl'; -import {translate} from '@docusaurus/Translate'; function CardContainer({ href, diff --git a/packages/docusaurus-theme-classic/src/theme/DocCardList/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocCardList/index.tsx index d2e61b8037c4c..3c105378ae812 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocCardList/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocCardList/index.tsx @@ -7,11 +7,10 @@ import React from 'react'; import clsx from 'clsx'; - -import DocCard from '@theme/DocCard'; -import type {PropSidebarItem} from '@docusaurus/plugin-content-docs'; import {findFirstCategoryLink} from '@docusaurus/theme-common'; +import DocCard from '@theme/DocCard'; import type {Props} from '@theme/DocCardList'; +import type {PropSidebarItem} from '@docusaurus/plugin-content-docs'; // Filter categories that don't have a link. function filterItems(items: PropSidebarItem[]): PropSidebarItem[] { diff --git a/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx index a1b183f1705bd..0058b71596a51 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx @@ -10,14 +10,14 @@ import { PageMetadata, useCurrentSidebarCategory, } from '@docusaurus/theme-common'; -import type {Props} from '@theme/DocCategoryGeneratedIndexPage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; import DocCardList from '@theme/DocCardList'; import DocPaginator from '@theme/DocPaginator'; import DocVersionBanner from '@theme/DocVersionBanner'; import DocVersionBadge from '@theme/DocVersionBadge'; import DocBreadcrumbs from '@theme/DocBreadcrumbs'; import Heading from '@theme/Heading'; -import useBaseUrl from '@docusaurus/useBaseUrl'; +import type {Props} from '@theme/DocCategoryGeneratedIndexPage'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/DocItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocItem/index.tsx index 77265efccbd22..fa75f1c162e5b 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocItem/index.tsx @@ -7,23 +7,24 @@ import React from 'react'; import clsx from 'clsx'; +import { + PageMetadata, + HtmlClassNameProvider, + ThemeClassNames, + useWindowSize, +} from '@docusaurus/theme-common'; import DocPaginator from '@theme/DocPaginator'; import DocVersionBanner from '@theme/DocVersionBanner'; import DocVersionBadge from '@theme/DocVersionBadge'; -import type {Props} from '@theme/DocItem'; import DocItemFooter from '@theme/DocItemFooter'; import TOC from '@theme/TOC'; import TOCCollapsible from '@theme/TOCCollapsible'; import Heading from '@theme/Heading'; -import styles from './styles.module.css'; -import { - PageMetadata, - HtmlClassNameProvider, - ThemeClassNames, - useWindowSize, -} from '@docusaurus/theme-common'; import DocBreadcrumbs from '@theme/DocBreadcrumbs'; import MDXContent from '@theme/MDXContent'; +import type {Props} from '@theme/DocItem'; + +import styles from './styles.module.css'; function DocItemMetadata(props: Props): JSX.Element { const {content: DocContent} = props; diff --git a/packages/docusaurus-theme-classic/src/theme/DocItemFooter/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocItemFooter/index.tsx index 056391687cb0c..c6f998cb61c9c 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocItemFooter/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocItemFooter/index.tsx @@ -7,16 +7,15 @@ import React from 'react'; import clsx from 'clsx'; - +import {ThemeClassNames} from '@docusaurus/theme-common'; import LastUpdated from '@theme/LastUpdated'; -import type {Props} from '@theme/DocItem'; import EditThisPage from '@theme/EditThisPage'; import TagsListInline, { type Props as TagsListInlineProps, } from '@theme/TagsListInline'; +import type {Props} from '@theme/DocItem'; import styles from './styles.module.css'; -import {ThemeClassNames} from '@docusaurus/theme-common'; function TagsRow(props: TagsListInlineProps) { return ( diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Main/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Main/index.tsx index 3cc4f0479e008..61ccdafdb6cc3 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Main/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Main/index.tsx @@ -6,12 +6,11 @@ */ import React from 'react'; - +import clsx from 'clsx'; import {useDocsSidebar} from '@docusaurus/theme-common'; +import type {Props} from '@theme/DocPage/Layout/Main'; -import clsx from 'clsx'; import styles from './styles.module.css'; -import type {Props} from '@theme/DocPage/Layout/Main'; export default function DocPageLayoutMain({ hiddenSidebarContainer, diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx index 7d68031577fa9..0cf8896393216 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import IconArrow from '@theme/IconArrow'; import {translate} from '@docusaurus/Translate'; +import IconArrow from '@theme/IconArrow'; import type {Props} from '@theme/DocPage/Layout/Sidebar/ExpandButton'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.tsx index 438d9f814e79b..150fd888a3efa 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.tsx @@ -6,15 +6,14 @@ */ import React, {type ReactNode, useState, useCallback} from 'react'; -import DocSidebar from '@theme/DocSidebar'; +import clsx from 'clsx'; +import {ThemeClassNames, useDocsSidebar} from '@docusaurus/theme-common'; import {useLocation} from '@docusaurus/router'; -import type {Props} from '@theme/DocPage/Layout/Sidebar'; +import DocSidebar from '@theme/DocSidebar'; import ExpandButton from '@theme/DocPage/Layout/Sidebar/ExpandButton'; +import type {Props} from '@theme/DocPage/Layout/Sidebar'; -import clsx from 'clsx'; -import styles from './index.module.css'; - -import {ThemeClassNames, useDocsSidebar} from '@docusaurus/theme-common'; +import styles from './styles.module.css'; // Reset sidebar state when sidebar changes // Use React key to unmount/remount the children diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.module.css b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/index.module.css rename to packages/docusaurus-theme-classic/src/theme/DocPage/Layout/Sidebar/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.tsx index 8f95807481fde..d5a48c1a68b1b 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.tsx @@ -6,15 +6,14 @@ */ import React, {useState} from 'react'; +import {useDocsSidebar} from '@docusaurus/theme-common'; import Layout from '@theme/Layout'; import BackToTopButton from '@theme/BackToTopButton'; -import type {Props} from '@theme/DocPage/Layout'; import DocPageLayoutSidebar from '@theme/DocPage/Layout/Sidebar'; import DocPageLayoutMain from '@theme/DocPage/Layout/Main'; +import type {Props} from '@theme/DocPage/Layout'; -import styles from './index.module.css'; - -import {useDocsSidebar} from '@docusaurus/theme-common'; +import styles from './styles.module.css'; export default function DocPageLayout({children}: Props): JSX.Element { const sidebar = useDocsSidebar(); diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.module.css b/packages/docusaurus-theme-classic/src/theme/DocPage/Layout/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/DocPage/Layout/index.module.css rename to packages/docusaurus-theme-classic/src/theme/DocPage/Layout/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx index b1404be79846e..3e45dbbda3990 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx @@ -6,12 +6,7 @@ */ import React from 'react'; -import NotFound from '@theme/NotFound'; -import type {Props} from '@theme/DocPage'; -import DocPageLayout from '@theme/DocPage/Layout'; - import clsx from 'clsx'; - import { HtmlClassNameProvider, ThemeClassNames, @@ -20,7 +15,10 @@ import { DocsVersionProvider, useDocRouteMetadata, } from '@docusaurus/theme-common'; +import DocPageLayout from '@theme/DocPage/Layout'; +import NotFound from '@theme/NotFound'; import SearchMetadata from '@theme/SearchMetadata'; +import type {Props} from '@theme/DocPage'; export default function DocPage(props: Props): JSX.Element { const {versionMetadata} = props; diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx index c902ac90d6ca5..f5d96d16481fa 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx @@ -7,8 +7,8 @@ import React from 'react'; import clsx from 'clsx'; -import IconArrow from '@theme/IconArrow'; import {translate} from '@docusaurus/Translate'; +import IconArrow from '@theme/IconArrow'; import type {Props} from '@theme/DocSidebar/Desktop/CollapseButton'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx index 5bbd9e2eb7109..f057073d60dde 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx @@ -7,9 +7,9 @@ import React from 'react'; import {useWindowSize} from '@docusaurus/theme-common'; -import type {Props} from '@theme/DocSidebar'; import DocSidebarDesktop from '@theme/DocSidebar/Desktop'; import DocSidebarMobile from '@theme/DocSidebar/Mobile'; +import type {Props} from '@theme/DocSidebar'; export default function DocSidebar(props: Props): JSX.Element { const windowSize = useWindowSize(); diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category/index.tsx similarity index 94% rename from packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category.tsx rename to packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category/index.tsx index 7a9a52e0e884b..18047a9225ab8 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Category/index.tsx @@ -20,30 +20,28 @@ import { } from '@docusaurus/theme-common'; import Link from '@docusaurus/Link'; import {translate} from '@docusaurus/Translate'; - +import useIsBrowser from '@docusaurus/useIsBrowser'; import DocSidebarItems from '@theme/DocSidebarItems'; import type {Props} from '@theme/DocSidebarItem/Category'; -import useIsBrowser from '@docusaurus/useIsBrowser'; - // If we navigate to a category and it becomes active, it should automatically // expand itself function useAutoExpandActiveCategory({ isActive, collapsed, - setCollapsed, + updateCollapsed, }: { isActive: boolean; collapsed: boolean; - setCollapsed: (b: boolean) => void; + updateCollapsed: (b: boolean) => void; }) { const wasActive = usePrevious(isActive); useEffect(() => { const justBecameActive = isActive && !wasActive; if (justBecameActive && collapsed) { - setCollapsed(false); + updateCollapsed(false); } - }, [isActive, wasActive, collapsed, setCollapsed]); + }, [isActive, wasActive, collapsed, updateCollapsed]); } /** @@ -105,6 +103,11 @@ export default function DocSidebarItemCategory({ ...props }: Props): JSX.Element { const {items, label, collapsible, className, href} = item; + const { + docs: { + sidebar: {autoCollapseCategories}, + }, + } = useThemeConfig(); const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item); const isActive = isActiveSidebarItem(item, activePath); @@ -121,17 +124,13 @@ export default function DocSidebarItemCategory({ }, }); - useAutoExpandActiveCategory({isActive, collapsed, setCollapsed}); const {expandedItem, setExpandedItem} = useDocSidebarItemsExpandedState(); - function updateCollapsed(toCollapsed: boolean = !collapsed) { + // Use this instead of `setCollapsed`, because it is also reactive + const updateCollapsed = (toCollapsed: boolean = !collapsed) => { setExpandedItem(toCollapsed ? null : index); setCollapsed(toCollapsed); - } - const { - docs: { - sidebar: {autoCollapseCategories}, - }, - } = useThemeConfig(); + }; + useAutoExpandActiveCategory({isActive, collapsed, updateCollapsed}); useEffect(() => { if ( collapsible && diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html/index.tsx similarity index 95% rename from packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html.tsx rename to packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html/index.tsx index 0e97ec27788af..7f6bab8f6cc64 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html/index.tsx @@ -10,7 +10,7 @@ import clsx from 'clsx'; import {ThemeClassNames} from '@docusaurus/theme-common'; import type {Props} from '@theme/DocSidebarItem/Html'; -import styles from './Html.module.css'; +import styles from './styles.module.css'; export default function DocSidebarItemHtml({ item, diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html.module.css b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html.module.css rename to packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Html/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link/index.tsx similarity index 97% rename from packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link.tsx rename to packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link/index.tsx index 28c481eed42f4..fc87268e01f00 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link/index.tsx @@ -11,10 +11,9 @@ import {isActiveSidebarItem, ThemeClassNames} from '@docusaurus/theme-common'; import Link from '@docusaurus/Link'; import isInternalUrl from '@docusaurus/isInternalUrl'; import IconExternalLink from '@theme/IconExternalLink'; - import type {Props} from '@theme/DocSidebarItem/Link'; -import styles from './Link.module.css'; +import styles from './styles.module.css'; export default function DocSidebarItemLink({ item, diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link.module.css b/packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link.module.css rename to packages/docusaurus-theme-classic/src/theme/DocSidebarItem/Link/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebarItems/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebarItems/index.tsx index fbced08e14164..041c553f284fb 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebarItems/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebarItems/index.tsx @@ -6,8 +6,8 @@ */ import React, {memo} from 'react'; -import DocSidebarItem from '@theme/DocSidebarItem'; import {DocSidebarItemsExpandedStateProvider} from '@docusaurus/theme-common'; +import DocSidebarItem from '@theme/DocSidebarItem'; import type {Props} from '@theme/DocSidebarItems'; diff --git a/packages/docusaurus-theme-classic/src/theme/DocTagDocListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocTagDocListPage/index.tsx index 22cf3ff7ac9be..a928644a9bd6e 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocTagDocListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocTagDocListPage/index.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; - -import Layout from '@theme/Layout'; +import clsx from 'clsx'; import Link from '@docusaurus/Link'; import { PageMetadata, @@ -16,9 +15,9 @@ import { usePluralForm, } from '@docusaurus/theme-common'; import Translate, {translate} from '@docusaurus/Translate'; -import type {Props} from '@theme/DocTagDocListPage'; +import Layout from '@theme/Layout'; import SearchMetadata from '@theme/SearchMetadata'; -import clsx from 'clsx'; +import type {Props} from '@theme/DocTagDocListPage'; // Very simple pluralization: probably good enough for now function useNDocsTaggedPlural() { diff --git a/packages/docusaurus-theme-classic/src/theme/DocTagsListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocTagsListPage/index.tsx index 5ab4f5a44db99..e848128fedf0e 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocTagsListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocTagsListPage/index.tsx @@ -6,18 +6,17 @@ */ import React from 'react'; - -import Layout from '@theme/Layout'; +import clsx from 'clsx'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, translateTagsPageTitle, } from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; import TagsListByLetter from '@theme/TagsListByLetter'; -import type {Props} from '@theme/DocTagsListPage'; import SearchMetadata from '@theme/SearchMetadata'; -import clsx from 'clsx'; +import type {Props} from '@theme/DocTagsListPage'; export default function DocTagsListPage({tags}: Props): JSX.Element { const title = translateTagsPageTitle(); diff --git a/packages/docusaurus-theme-classic/src/theme/DocVersionBadge/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocVersionBadge/index.tsx index 862a33e5e543d..dc4a2c90bbb15 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocVersionBadge/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocVersionBadge/index.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; +import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; import {ThemeClassNames, useDocsVersion} from '@docusaurus/theme-common'; -import clsx from 'clsx'; import type {Props} from '@theme/DocVersionBadge'; export default function DocVersionBadge({ diff --git a/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx index dd87a4d3673bb..979a4f2b90a78 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocVersionBanner/index.tsx @@ -6,6 +6,7 @@ */ import React, {type ComponentType} from 'react'; +import clsx from 'clsx'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Link from '@docusaurus/Link'; import Translate from '@docusaurus/Translate'; @@ -21,7 +22,6 @@ import { } from '@docusaurus/theme-common'; import type {Props} from '@theme/DocVersionBanner'; -import clsx from 'clsx'; import type { VersionBanner, PropVersionMetadata, diff --git a/packages/docusaurus-theme-classic/src/theme/EditThisPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/EditThisPage/index.tsx index 5fda42f876b6d..f4b55187756f3 100644 --- a/packages/docusaurus-theme-classic/src/theme/EditThisPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/EditThisPage/index.tsx @@ -7,10 +7,9 @@ import React from 'react'; import Translate from '@docusaurus/Translate'; - -import type {Props} from '@theme/EditThisPage'; -import IconEdit from '@theme/IconEdit'; import {ThemeClassNames} from '@docusaurus/theme-common'; +import IconEdit from '@theme/IconEdit'; +import type {Props} from '@theme/EditThisPage'; export default function EditThisPage({editUrl}: Props): JSX.Element { return ( diff --git a/packages/docusaurus-theme-classic/src/theme/Footer/Links/MultiColumn/index.tsx b/packages/docusaurus-theme-classic/src/theme/Footer/Links/MultiColumn/index.tsx index a2bad28d8682e..01b362e520c0e 100644 --- a/packages/docusaurus-theme-classic/src/theme/Footer/Links/MultiColumn/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Footer/Links/MultiColumn/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {Props} from '@theme/Footer/Links/MultiColumn'; import LinkItem from '@theme/Footer/LinkItem'; +import type {Props} from '@theme/Footer/Links/MultiColumn'; type ColumnType = Props['columns'][number]; type ColumnItemType = ColumnType['items'][number]; diff --git a/packages/docusaurus-theme-classic/src/theme/Footer/Links/Simple/index.tsx b/packages/docusaurus-theme-classic/src/theme/Footer/Links/Simple/index.tsx index 72fcc0a74a535..e14b77f1f31df 100644 --- a/packages/docusaurus-theme-classic/src/theme/Footer/Links/Simple/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Footer/Links/Simple/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {Props} from '@theme/Footer/Links/Simple'; import LinkItem from '@theme/Footer/LinkItem'; +import type {Props} from '@theme/Footer/Links/Simple'; function Separator() { return ·; diff --git a/packages/docusaurus-theme-classic/src/theme/Footer/Links/index.tsx b/packages/docusaurus-theme-classic/src/theme/Footer/Links/index.tsx index 44e553e5390e8..a4b0f3354c237 100644 --- a/packages/docusaurus-theme-classic/src/theme/Footer/Links/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Footer/Links/index.tsx @@ -8,9 +8,9 @@ import React from 'react'; import {isMultiColumnFooterLinks} from '@docusaurus/theme-common'; -import type {Props} from '@theme/Footer/Links'; import FooterLinksMultiColumn from '@theme/Footer/Links/MultiColumn'; import FooterLinksSimple from '@theme/Footer/Links/Simple'; +import type {Props} from '@theme/Footer/Links'; export default function FooterLinks({links}: Props): JSX.Element { return isMultiColumnFooterLinks(links) ? ( diff --git a/packages/docusaurus-theme-classic/src/theme/Footer/Logo/index.tsx b/packages/docusaurus-theme-classic/src/theme/Footer/Logo/index.tsx index f566555a17910..121e08f758a3d 100644 --- a/packages/docusaurus-theme-classic/src/theme/Footer/Logo/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Footer/Logo/index.tsx @@ -6,13 +6,13 @@ */ import React from 'react'; - import Link from '@docusaurus/Link'; import {useBaseUrlUtils} from '@docusaurus/useBaseUrl'; -import styles from './styles.module.css'; import ThemedImage from '@theme/ThemedImage'; import type {Props} from '@theme/Footer/Logo'; +import styles from './styles.module.css'; + function LogoImage({logo}: Props) { const {withBaseUrl} = useBaseUrlUtils(); const sources = { diff --git a/packages/docusaurus-theme-classic/src/theme/Heading/index.tsx b/packages/docusaurus-theme-classic/src/theme/Heading/index.tsx index 7f8f80876475c..9969fdbb6e553 100644 --- a/packages/docusaurus-theme-classic/src/theme/Heading/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Heading/index.tsx @@ -7,9 +7,9 @@ import React from 'react'; import clsx from 'clsx'; -import type {Props} from '@theme/Heading'; import {translate} from '@docusaurus/Translate'; import {useThemeConfig} from '@docusaurus/theme-common'; +import type {Props} from '@theme/Heading'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/IconEdit/index.tsx b/packages/docusaurus-theme-classic/src/theme/IconEdit/index.tsx index 76f8a8168b1ff..004c12216598a 100644 --- a/packages/docusaurus-theme-classic/src/theme/IconEdit/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/IconEdit/index.tsx @@ -7,7 +7,6 @@ import React from 'react'; import clsx from 'clsx'; - import type {Props} from '@theme/IconEdit'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/LastUpdated/index.tsx b/packages/docusaurus-theme-classic/src/theme/LastUpdated/index.tsx index 57937216285f5..5ba4c3e2f249b 100644 --- a/packages/docusaurus-theme-classic/src/theme/LastUpdated/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/LastUpdated/index.tsx @@ -7,8 +7,8 @@ import React from 'react'; import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/LastUpdated'; import {ThemeClassNames} from '@docusaurus/theme-common'; +import type {Props} from '@theme/LastUpdated'; function LastUpdatedAtDate({ lastUpdatedAt, diff --git a/packages/docusaurus-theme-classic/src/theme/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/Layout/index.tsx index 47ed451b55d9e..c5503edcaaa29 100644 --- a/packages/docusaurus-theme-classic/src/theme/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Layout/index.tsx @@ -8,19 +8,19 @@ import React from 'react'; import clsx from 'clsx'; import ErrorBoundary from '@docusaurus/ErrorBoundary'; -import SkipToContent from '@theme/SkipToContent'; -import AnnouncementBar from '@theme/AnnouncementBar'; -import Navbar from '@theme/Navbar'; -import Footer from '@theme/Footer'; -import LayoutProviders from '@theme/LayoutProviders'; -import type {Props} from '@theme/Layout'; import { PageMetadata, ThemeClassNames, useKeyboardNavigation, } from '@docusaurus/theme-common'; +import SkipToContent from '@theme/SkipToContent'; +import AnnouncementBar from '@theme/AnnouncementBar'; +import Navbar from '@theme/Navbar'; +import Footer from '@theme/Footer'; +import LayoutProviders from '@theme/LayoutProviders'; import ErrorPageContent from '@theme/ErrorPageContent'; import './styles.css'; +import type {Props} from '@theme/Layout'; export default function Layout(props: Props): JSX.Element { const { diff --git a/packages/docusaurus-theme-classic/src/theme/Logo/index.tsx b/packages/docusaurus-theme-classic/src/theme/Logo/index.tsx index eaa89cc1e0cc4..13f4126198edf 100644 --- a/packages/docusaurus-theme-classic/src/theme/Logo/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Logo/index.tsx @@ -6,13 +6,12 @@ */ import React from 'react'; -import type {Props} from '@theme/Logo'; - import Link from '@docusaurus/Link'; -import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import {useThemeConfig} from '@docusaurus/theme-common'; +import ThemedImage from '@theme/ThemedImage'; +import type {Props} from '@theme/Logo'; export default function Logo(props: Props): JSX.Element { const { diff --git a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img.tsx b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img/index.tsx similarity index 93% rename from packages/docusaurus-theme-classic/src/theme/MDXComponents/Img.tsx rename to packages/docusaurus-theme-classic/src/theme/MDXComponents/Img/index.tsx index a97bedc3e0286..c3b76dee9fc5b 100644 --- a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img.tsx +++ b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img/index.tsx @@ -6,9 +6,10 @@ */ import React from 'react'; -import type {Props} from '@theme/MDXComponents/Img'; -import styles from './Img.module.css'; import clsx from 'clsx'; +import type {Props} from '@theme/MDXComponents/Img'; + +import styles from './styles.module.css'; function transformImgClassName(className?: string): string { return clsx(className, styles.img); diff --git a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img.module.css b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Img/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/MDXComponents/Img.module.css rename to packages/docusaurus-theme-classic/src/theme/MDXComponents/Img/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Ul.tsx b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Ul.tsx index 8a0da274ec2cb..080ecaac2a1ab 100644 --- a/packages/docusaurus-theme-classic/src/theme/MDXComponents/Ul.tsx +++ b/packages/docusaurus-theme-classic/src/theme/MDXComponents/Ul.tsx @@ -12,8 +12,8 @@ import type {Props} from '@theme/MDXComponents/Ul'; function transformUlClassName(className?: string): string { return clsx( className, - // This class is set globally by GitHub/MDX - // We keep the global class, but add Infima class to get list without styling + // This class is set globally by GitHub/MDX. We keep the global class, and + // add another Infima class to get list without styling // See https://github.com/syntax-tree/mdast-util-to-hast/issues/28 className?.includes('contains-task-list') && 'clean-list', ); diff --git a/packages/docusaurus-theme-classic/src/theme/MDXPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/MDXPage/index.tsx index 44ba2a5c0ffaf..64bb180a56345 100644 --- a/packages/docusaurus-theme-classic/src/theme/MDXPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/MDXPage/index.tsx @@ -7,15 +7,15 @@ import React from 'react'; import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import MDXContent from '@theme/MDXContent'; -import type {Props} from '@theme/MDXPage'; -import TOC from '@theme/TOC'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, } from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; +import MDXContent from '@theme/MDXContent'; +import TOC from '@theme/TOC'; +import type {Props} from '@theme/MDXPage'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/ColorModeToggle/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/ColorModeToggle/index.tsx index 5c33ac4a3bed5..d1fc9c3ffba1f 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/ColorModeToggle/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/ColorModeToggle/index.tsx @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import React from 'react'; import {useColorMode, useThemeConfig} from '@docusaurus/theme-common'; import ColorModeToggle from '@theme/ColorModeToggle'; import type {Props} from '@theme/Navbar/ColorModeToggle'; -import React from 'react'; export default function NavbarColorModeToggle({ className, diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/Content/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/Content/index.tsx index 9ab92085eca5e..89503a675dcbe 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/Content/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/Content/index.tsx @@ -6,18 +6,19 @@ */ import React, {type ReactNode} from 'react'; -import type {Props as NavbarItemConfig} from '@theme/NavbarItem'; -import NavbarItem from '@theme/NavbarItem'; -import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle'; -import SearchBar from '@theme/SearchBar'; import { splitNavbarItems, useNavbarMobileSidebar, useThemeConfig, } from '@docusaurus/theme-common'; +import NavbarItem from '@theme/NavbarItem'; +import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle'; +import SearchBar from '@theme/SearchBar'; import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle'; import NavbarLogo from '@theme/Navbar/Logo'; import NavbarSearch from '@theme/Navbar/Search'; +import type {Props as NavbarItemConfig} from '@theme/NavbarItem'; + import styles from './styles.module.css'; function useNavbarItems() { diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx index 00e5736bd8fdd..b674fe7269856 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx @@ -7,13 +7,13 @@ import React, {type ComponentProps} from 'react'; import clsx from 'clsx'; -import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar'; -import type {Props} from '@theme/Navbar/Layout'; import { useThemeConfig, useHideableNavbar, useNavbarMobileSidebar, } from '@docusaurus/theme-common'; +import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar'; +import type {Props} from '@theme/Navbar/Layout'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Header/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Header/index.tsx index c58b42eb014a2..139377115323f 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Header/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Header/index.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; +import {useNavbarMobileSidebar} from '@docusaurus/theme-common'; import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle'; import IconClose from '@theme/IconClose'; import NavbarLogo from '@theme/Navbar/Logo'; -import {useNavbarMobileSidebar} from '@docusaurus/theme-common'; function CloseButton() { const mobileSidebar = useNavbarMobileSidebar(); diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx index 4fe7a4f9984c3..6d63029dbd31a 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx @@ -7,8 +7,8 @@ import React from 'react'; import clsx from 'clsx'; -import type {Props} from '@theme/Navbar/MobileSidebar/Layout'; import {useNavbarSecondaryMenu} from '@docusaurus/theme-common'; +import type {Props} from '@theme/Navbar/MobileSidebar/Layout'; export default function NavbarMobileSidebarLayout({ header, diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx index dbde63edb558f..d8fa6524a6f09 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx @@ -7,8 +7,8 @@ import React from 'react'; import {useNavbarMobileSidebar, useThemeConfig} from '@docusaurus/theme-common'; +import NavbarItem from '@theme/NavbarItem'; import type {Props as NavbarItemConfig} from '@theme/NavbarItem'; -import NavbarItem from '../../../NavbarItem'; function useNavbarItems() { // TODO temporary casting until ThemeConfig type is improved diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Toggle/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Toggle/index.tsx index e4ac62a505848..6ac64154d36ca 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Toggle/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import IconMenu from '@theme/IconMenu'; import {useNavbarMobileSidebar} from '@docusaurus/theme-common'; +import IconMenu from '@theme/IconMenu'; export default function MobileSidebarToggle(): JSX.Element { const mobileSidebar = useNavbarMobileSidebar(); diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/index.tsx index 4a29c49015251..4ee13c284efc3 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/index.tsx @@ -6,12 +6,12 @@ */ import React from 'react'; -import NavbarMobileSidebarLayout from '@theme/Navbar/MobileSidebar/Layout'; -import NavbarMobileSidebarHeader from '@theme/Navbar/MobileSidebar/Header'; import { useLockBodyScroll, useNavbarMobileSidebar, } from '@docusaurus/theme-common'; +import NavbarMobileSidebarLayout from '@theme/Navbar/MobileSidebar/Layout'; +import NavbarMobileSidebarHeader from '@theme/Navbar/MobileSidebar/Header'; import NavbarMobileSidebarPrimaryMenu from '@theme/Navbar/MobileSidebar/PrimaryMenu'; import NavbarMobileSidebarSecondaryMenu from '@theme/Navbar/MobileSidebar/SecondaryMenu'; diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx index 2c5044682012a..7036b2b6c12e5 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx @@ -7,16 +7,13 @@ import React from 'react'; import clsx from 'clsx'; - import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink'; - +import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; import type { DesktopOrMobileNavBarItemProps, Props, } from '@theme/NavbarItem/DefaultNavbarItem'; -import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; - function DefaultNavbarItemDesktop({ className, isDropdownItem = false, diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocNavbarItem.tsx index 1ed30afe4050e..797ef1ec2d505 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocNavbarItem.tsx @@ -6,12 +6,12 @@ */ import React from 'react'; -import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; -import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; import clsx from 'clsx'; +import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; +import {useLayoutDoc} from '@docusaurus/theme-common'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; import type {Props} from '@theme/NavbarItem/DocNavbarItem'; -import {useLayoutDoc} from '@docusaurus/theme-common'; export default function DocNavbarItem({ docId, diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocSidebarNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocSidebarNavbarItem.tsx index 965664855603f..874605bcf1a19 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocSidebarNavbarItem.tsx @@ -6,12 +6,11 @@ */ import React from 'react'; -import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; -import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; import clsx from 'clsx'; -import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; +import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; import {useLayoutDocsSidebar} from '@docusaurus/theme-common'; - +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; import type {Props} from '@theme/NavbarItem/DocSidebarNavbarItem'; export default function DocSidebarNavbarItem({ diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx index 9624dc3ddedb6..b351eeeef1a85 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx @@ -6,8 +6,6 @@ */ import React from 'react'; -import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; -import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; import { useVersions, useActiveDocContext, @@ -17,8 +15,10 @@ import { useDocsVersionCandidates, } from '@docusaurus/theme-common'; import {translate} from '@docusaurus/Translate'; -import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; import type {Props} from '@theme/NavbarItem/DocsVersionDropdownNavbarItem'; +import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client'; const getVersionMainDoc = (version: GlobalVersion) => version.docs.find((doc) => doc.id === version.mainDocId)!; diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionNavbarItem.tsx index db68737643196..aade004e44d4f 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DocsVersionNavbarItem.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; -import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; import {useDocsVersionCandidates} from '@docusaurus/theme-common'; -import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; import type {Props} from '@theme/NavbarItem/DocsVersionNavbarItem'; +import type {GlobalVersion} from '@docusaurus/plugin-content-docs/client'; const getVersionMainDoc = (version: GlobalVersion) => version.docs.find((doc) => doc.id === version.mainDocId)!; diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DropdownNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DropdownNavbarItem.tsx index 37dd486924520..ca5e03d92f120 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DropdownNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DropdownNavbarItem.tsx @@ -14,15 +14,14 @@ import { isRegexpStringMatch, useLocalPathname, } from '@docusaurus/theme-common'; +import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink'; +import NavbarItem from '@theme/NavbarItem'; import type { DesktopOrMobileNavBarItemProps, Props, } from '@theme/NavbarItem/DropdownNavbarItem'; import type {LinkLikeNavbarItemProps} from '@theme/NavbarItem'; -import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink'; -import NavbarItem from '@theme/NavbarItem'; - const dropdownLinkActiveClass = 'dropdown__link--active'; function isItemActive( diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx index 620a161b9dee2..2bb652c734ac2 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx @@ -6,13 +6,13 @@ */ import React from 'react'; -import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; -import IconLanguage from '@theme/IconLanguage'; -import type {Props} from '@theme/NavbarItem/LocaleDropdownNavbarItem'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import {useAlternatePageUtils} from '@docusaurus/theme-common'; import {translate} from '@docusaurus/Translate'; +import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; +import IconLanguage from '@theme/IconLanguage'; import type {LinkLikeNavbarItemProps} from '@theme/NavbarItem'; +import type {Props} from '@theme/NavbarItem/LocaleDropdownNavbarItem'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/NavbarNavLink.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/NavbarNavLink.tsx index e19758815f6dd..94157e97eec5e 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/NavbarNavLink.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/NavbarNavLink.tsx @@ -8,10 +8,10 @@ import React from 'react'; import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import type {Props} from '@theme/NavbarItem/NavbarNavLink'; -import IconExternalLink from '@theme/IconExternalLink'; import isInternalUrl from '@docusaurus/isInternalUrl'; import {isRegexpStringMatch} from '@docusaurus/theme-common'; +import IconExternalLink from '@theme/IconExternalLink'; +import type {Props} from '@theme/NavbarItem/NavbarNavLink'; const dropdownLinkActiveClass = 'dropdown__link--active'; diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/SearchNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/SearchNavbarItem.tsx index dfefa83dc154c..9e95436025b2d 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/SearchNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/SearchNavbarItem.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import type {Props} from '@theme/NavbarItem/SearchNavbarItem'; import SearchBar from '@theme/SearchBar'; import NavbarSearch from '@theme/Navbar/Search'; +import type {Props} from '@theme/NavbarItem/SearchNavbarItem'; export default function SearchNavbarItem({mobile}: Props): JSX.Element | null { if (mobile) { diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/index.tsx index 7ae0d4990730d..ca3253143a16e 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/index.tsx @@ -6,11 +6,10 @@ */ import React from 'react'; +import ComponentTypes from '@theme/NavbarItem/ComponentTypes'; import {type Props as DropdownNavbarItemProps} from '@theme/NavbarItem/DropdownNavbarItem'; import type {Types, Props} from '@theme/NavbarItem'; -import ComponentTypes from '@theme/NavbarItem/ComponentTypes'; - const getNavbarItemComponent = (type: NonNullable) => { const component = ComponentTypes[type]; if (!component) { diff --git a/packages/docusaurus-theme-classic/src/theme/NotFound.tsx b/packages/docusaurus-theme-classic/src/theme/NotFound.tsx index 2213158d52a6d..e6b9542f3d50d 100644 --- a/packages/docusaurus-theme-classic/src/theme/NotFound.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NotFound.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import Layout from '@theme/Layout'; import Translate, {translate} from '@docusaurus/Translate'; import {PageMetadata} from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; export default function NotFound(): JSX.Element { return ( diff --git a/packages/docusaurus-theme-classic/src/theme/SiteMetadata/index.tsx b/packages/docusaurus-theme-classic/src/theme/SiteMetadata/index.tsx index ce53ddf1d9e5a..5fa827569181b 100644 --- a/packages/docusaurus-theme-classic/src/theme/SiteMetadata/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/SiteMetadata/index.tsx @@ -9,7 +9,6 @@ import React from 'react'; import Head from '@docusaurus/Head'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import SearchMetadata from '@theme/SearchMetadata'; import { PageMetadata, DEFAULT_SEARCH_TAG, @@ -18,6 +17,7 @@ import { keyboardFocusedClassName, } from '@docusaurus/theme-common'; import {useLocation} from '@docusaurus/router'; +import SearchMetadata from '@theme/SearchMetadata'; // TODO move to SiteMetadataDefaults or theme-common ? // Useful for i18n/SEO diff --git a/packages/docusaurus-theme-classic/src/theme/TOC/index.tsx b/packages/docusaurus-theme-classic/src/theme/TOC/index.tsx index 79ca736645e15..08b2ddb4c10c8 100644 --- a/packages/docusaurus-theme-classic/src/theme/TOC/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TOC/index.tsx @@ -7,8 +7,9 @@ import React from 'react'; import clsx from 'clsx'; -import type {Props} from '@theme/TOC'; import TOCItems from '@theme/TOCItems'; +import type {Props} from '@theme/TOC'; + import styles from './styles.module.css'; // Using a custom className diff --git a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton.tsx b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton/index.tsx similarity index 94% rename from packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton.tsx rename to packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton/index.tsx index 48eeb3afdb195..54d9bf4155185 100644 --- a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton/index.tsx @@ -8,9 +8,10 @@ import React from 'react'; import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; -import styles from './CollapseButton.module.css'; import type {Props} from '@theme/TOCCollapsible/CollapseButton'; +import styles from './styles.module.css'; + export default function TOCCollapsibleCollapseButton({ collapsed, ...props diff --git a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton.module.css b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton.module.css rename to packages/docusaurus-theme-classic/src/theme/TOCCollapsible/CollapseButton/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.tsx b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.tsx index de818634329c9..19680832c205e 100644 --- a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.tsx @@ -8,10 +8,11 @@ import React from 'react'; import clsx from 'clsx'; import {useCollapsible, Collapsible} from '@docusaurus/theme-common'; -import styles from './index.module.css'; import TOCItems from '@theme/TOCItems'; -import type {Props} from '@theme/TOCCollapsible'; import CollapseButton from '@theme/TOCCollapsible/CollapseButton'; +import type {Props} from '@theme/TOCCollapsible'; + +import styles from './styles.module.css'; export default function TOCCollapsible({ toc, diff --git a/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.module.css b/packages/docusaurus-theme-classic/src/theme/TOCCollapsible/styles.module.css similarity index 100% rename from packages/docusaurus-theme-classic/src/theme/TOCCollapsible/index.module.css rename to packages/docusaurus-theme-classic/src/theme/TOCCollapsible/styles.module.css diff --git a/packages/docusaurus-theme-classic/src/theme/TOCInline/index.tsx b/packages/docusaurus-theme-classic/src/theme/TOCInline/index.tsx index b0bae1aafbc02..9864572f53593 100644 --- a/packages/docusaurus-theme-classic/src/theme/TOCInline/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TOCInline/index.tsx @@ -6,9 +6,10 @@ */ import React from 'react'; +import TOCItems from '@theme/TOCItems'; import type {Props} from '@theme/TOCInline'; + import styles from './styles.module.css'; -import TOCItems from '@theme/TOCItems'; export default function TOCInline({ toc, diff --git a/packages/docusaurus-theme-classic/src/theme/TOCItems/index.tsx b/packages/docusaurus-theme-classic/src/theme/TOCItems/index.tsx index 544df3db72b61..3743706a44626 100644 --- a/packages/docusaurus-theme-classic/src/theme/TOCItems/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TOCItems/index.tsx @@ -6,14 +6,14 @@ */ import React, {useMemo} from 'react'; -import type {Props} from '@theme/TOCItems'; -import TOCItemTree from '@theme/TOCItems/Tree'; import { type TOCHighlightConfig, useThemeConfig, useTOCHighlight, useFilteredAndTreeifiedTOC, } from '@docusaurus/theme-common'; +import TOCItemTree from '@theme/TOCItems/Tree'; +import type {Props} from '@theme/TOCItems'; export default function TOCItems({ toc, diff --git a/packages/docusaurus-theme-classic/src/theme/TabItem/index.tsx b/packages/docusaurus-theme-classic/src/theme/TabItem/index.tsx index 7b847dacc89e1..b0a6c3cdc0c2c 100644 --- a/packages/docusaurus-theme-classic/src/theme/TabItem/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TabItem/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {Props} from '@theme/TabItem'; import clsx from 'clsx'; +import type {Props} from '@theme/TabItem'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx b/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx index b609058e80c6d..f5d4f2d7f58f0 100644 --- a/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx @@ -7,12 +7,12 @@ import React from 'react'; import renderer from 'react-test-renderer'; -import Tabs from '../index'; -import TabItem from '../../TabItem'; import { TabGroupChoiceProvider, ScrollControllerProvider, } from '@docusaurus/theme-common'; +import Tabs from '../index'; +import TabItem from '../../TabItem'; describe('Tabs', () => { it('rejects bad Tabs child', () => { diff --git a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx index 2e64f414607c5..5ee9649ac2262 100644 --- a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx @@ -11,6 +11,7 @@ import React, { isValidElement, type ReactElement, } from 'react'; +import clsx from 'clsx'; import useIsBrowser from '@docusaurus/useIsBrowser'; import { useScrollPositionBlocker, @@ -20,8 +21,6 @@ import { import type {Props} from '@theme/Tabs'; import type {Props as TabItemProps} from '@theme/TabItem'; -import clsx from 'clsx'; - import styles from './styles.module.css'; // A very rough duck type, but good enough to guard against mistakes while diff --git a/packages/docusaurus-theme-classic/src/theme/TagsListByLetter/index.tsx b/packages/docusaurus-theme-classic/src/theme/TagsListByLetter/index.tsx index c301c12e1ac47..326efa0c77679 100644 --- a/packages/docusaurus-theme-classic/src/theme/TagsListByLetter/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/TagsListByLetter/index.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; +import {listTagsByLetters, type TagLetterEntry} from '@docusaurus/theme-common'; import Tag from '@theme/Tag'; import type {Props} from '@theme/TagsListByLetter'; -import {listTagsByLetters, type TagLetterEntry} from '@docusaurus/theme-common'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx b/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx index 0255e04805bbf..b0b938350278b 100644 --- a/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/ThemedImage/index.tsx @@ -7,7 +7,6 @@ import React from 'react'; import clsx from 'clsx'; - import useIsBrowser from '@docusaurus/useIsBrowser'; import {useColorMode} from '@docusaurus/theme-common'; import type {Props} from '@theme/ThemedImage'; diff --git a/packages/docusaurus-theme-classic/src/translations.ts b/packages/docusaurus-theme-classic/src/translations.ts index 8d8bd673b48df..cc087a87d85a7 100644 --- a/packages/docusaurus-theme-classic/src/translations.ts +++ b/packages/docusaurus-theme-classic/src/translations.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; +import {mergeTranslations} from '@docusaurus/utils'; import type {TranslationFile, TranslationFileContent} from '@docusaurus/types'; import type { ThemeConfig, @@ -15,9 +17,6 @@ import type { SimpleFooter, } from '@docusaurus/theme-common'; -import _ from 'lodash'; -import {mergeTranslations} from '@docusaurus/utils'; - function getNavbarTranslationFile(navbar: Navbar): TranslationFileContent { // TODO handle properly all the navbar item types here! function flattenNavbarItems(items: NavbarItem[]): NavbarItem[] { diff --git a/packages/docusaurus-theme-classic/tsconfig.client.json b/packages/docusaurus-theme-classic/tsconfig.client.json new file mode 100644 index 0000000000000..067fb209a75df --- /dev/null +++ b/packages/docusaurus-theme-classic/tsconfig.client.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "rootDir": "src", + "outDir": "lib", + "module": "esnext", + "target": "esnext" + }, + "include": [ + "src/nprogress.ts", + "src/prism-include-languages.ts", + "src/theme", + "src/*.d.ts" + ], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-theme-classic/tsconfig.json b/packages/docusaurus-theme-classic/tsconfig.json index 145e89f84a44d..9e41ec3ef68c0 100644 --- a/packages/docusaurus-theme-classic/tsconfig.json +++ b/packages/docusaurus-theme-classic/tsconfig.json @@ -1,10 +1,19 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { - "lib": ["DOM", "ES2019"], - "module": "esnext", - "noEmit": true, - "jsx": "react-native" + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", + "rootDir": "src", + "outDir": "lib" }, - "include": ["src/"] + "include": ["src"], + "exclude": [ + "src/nprogress.ts", + "src/prism-include-languages.ts", + "src/theme", + "**/__tests__/**" + ] } diff --git a/packages/docusaurus-theme-common/.npmignore b/packages/docusaurus-theme-common/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-theme-common/.npmignore +++ b/packages/docusaurus-theme-common/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-theme-common/copyUntypedFiles.mjs b/packages/docusaurus-theme-common/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-theme-common/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-theme-common/package.json b/packages/docusaurus-theme-common/package.json index 7a72444294720..ff097aa08e952 100644 --- a/packages/docusaurus-theme-common/package.json +++ b/packages/docusaurus-theme-common/package.json @@ -13,8 +13,10 @@ "./Details": "./lib/components/Details/index.js" }, "scripts": { - "build": "node copyUntypedFiles.mjs && tsc", - "watch": "node copyUntypedFiles.mjs && tsc --watch" + "build": "tsc && node ../../admin/scripts/copyUntypedFiles.js", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "publishConfig": { "access": "public" @@ -32,7 +34,7 @@ "@docusaurus/plugin-content-pages": "2.0.0-beta.20", "clsx": "^1.1.1", "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.1", + "prism-react-renderer": "^1.3.3", "tslib": "^2.4.0", "utility-types": "^3.10.0" }, diff --git a/packages/docusaurus-theme-common/src/components/Collapsible/index.tsx b/packages/docusaurus-theme-common/src/components/Collapsible/index.tsx index 48ff620fbab70..8b88da3c8cebc 100644 --- a/packages/docusaurus-theme-common/src/components/Collapsible/index.tsx +++ b/packages/docusaurus-theme-common/src/components/Collapsible/index.tsx @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; import React, { useState, useEffect, @@ -17,6 +16,7 @@ import React, { type SetStateAction, type ReactNode, } from 'react'; +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; const DefaultAnimationEasing = 'ease-in-out'; diff --git a/packages/docusaurus-theme-common/src/components/Details/index.tsx b/packages/docusaurus-theme-common/src/components/Details/index.tsx index 0936ccf9db258..41c34097aa869 100644 --- a/packages/docusaurus-theme-common/src/components/Details/index.tsx +++ b/packages/docusaurus-theme-common/src/components/Details/index.tsx @@ -11,8 +11,8 @@ import React, { type ComponentProps, type ReactElement, } from 'react'; -import useIsBrowser from '@docusaurus/useIsBrowser'; import clsx from 'clsx'; +import useIsBrowser from '@docusaurus/useIsBrowser'; import {useCollapsible, Collapsible} from '../Collapsible'; import styles from './styles.module.css'; diff --git a/packages/docusaurus-theme-common/src/contexts/colorMode.tsx b/packages/docusaurus-theme-common/src/contexts/colorMode.tsx index a2347f1c0141f..8d0513278eb7d 100644 --- a/packages/docusaurus-theme-common/src/contexts/colorMode.tsx +++ b/packages/docusaurus-theme-common/src/contexts/colorMode.tsx @@ -14,9 +14,8 @@ import React, { useRef, type ReactNode, } from 'react'; -import {ReactContextError} from '../utils/reactUtils'; - import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import {ReactContextError} from '../utils/reactUtils'; import {createStorageSlot} from '../utils/storageUtils'; import {useThemeConfig} from '../utils/useThemeConfig'; diff --git a/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx b/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx index 0922c2c33c898..96e941143ff51 100644 --- a/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx +++ b/packages/docusaurus-theme-common/src/contexts/docsPreferredVersion.tsx @@ -13,22 +13,20 @@ import React, { useCallback, type ReactNode, } from 'react'; -import { - useThemeConfig, - type DocsVersionPersistence, -} from '../utils/useThemeConfig'; -import {isDocsPluginEnabled} from '../utils/docsUtils'; -import {ReactContextError} from '../utils/reactUtils'; -import {createStorageSlot} from '../utils/storageUtils'; - import { useAllDocsData, useDocsData, type GlobalPluginData, type GlobalVersion, } from '@docusaurus/plugin-content-docs/client'; - import {DEFAULT_PLUGIN_ID} from '@docusaurus/constants'; +import { + useThemeConfig, + type DocsVersionPersistence, +} from '../utils/useThemeConfig'; +import {isDocsPluginEnabled} from '../utils/docsUtils'; +import {ReactContextError} from '../utils/reactUtils'; +import {createStorageSlot} from '../utils/storageUtils'; const storageKey = (pluginId: string) => `docs-preferred-version-${pluginId}`; diff --git a/packages/docusaurus-theme-common/src/contexts/docsSidebar.tsx b/packages/docusaurus-theme-common/src/contexts/docsSidebar.tsx index 6b0aab47622e9..43f109bf76987 100644 --- a/packages/docusaurus-theme-common/src/contexts/docsSidebar.tsx +++ b/packages/docusaurus-theme-common/src/contexts/docsSidebar.tsx @@ -6,8 +6,8 @@ */ import React, {useMemo, useContext, type ReactNode} from 'react'; -import type {PropSidebar} from '@docusaurus/plugin-content-docs'; import {ReactContextError} from '../utils/reactUtils'; +import type {PropSidebar} from '@docusaurus/plugin-content-docs'; // Using a Symbol because null is a valid context value (a doc with no sidebar) // Inspired by https://github.com/jamiebuilds/unstated-next/blob/master/src/unstated-next.tsx diff --git a/packages/docusaurus-theme-common/src/contexts/docsVersion.tsx b/packages/docusaurus-theme-common/src/contexts/docsVersion.tsx index efa8ffc147d67..4a3ad576f9171 100644 --- a/packages/docusaurus-theme-common/src/contexts/docsVersion.tsx +++ b/packages/docusaurus-theme-common/src/contexts/docsVersion.tsx @@ -6,8 +6,8 @@ */ import React, {type ReactNode, useContext} from 'react'; -import type {PropVersionMetadata} from '@docusaurus/plugin-content-docs'; import {ReactContextError} from '../utils/reactUtils'; +import type {PropVersionMetadata} from '@docusaurus/plugin-content-docs'; const Context = React.createContext(null); diff --git a/packages/docusaurus-theme-common/src/hooks/usePrismTheme.ts b/packages/docusaurus-theme-common/src/hooks/usePrismTheme.ts index b791d3119414c..df435eeedafd9 100644 --- a/packages/docusaurus-theme-common/src/hooks/usePrismTheme.ts +++ b/packages/docusaurus-theme-common/src/hooks/usePrismTheme.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {PrismTheme} from 'prism-react-renderer'; import {useColorMode} from '../contexts/colorMode'; import {useThemeConfig} from '../utils/useThemeConfig'; +import type {PrismTheme} from 'prism-react-renderer'; /** * Returns a color-mode-dependent Prism theme: whatever the user specified in diff --git a/packages/docusaurus-theme-common/src/hooks/useSearchPage.ts b/packages/docusaurus-theme-common/src/hooks/useSearchPage.ts index 36c1cdaacf0b0..10661b17f0d82 100644 --- a/packages/docusaurus-theme-common/src/hooks/useSearchPage.ts +++ b/packages/docusaurus-theme-common/src/hooks/useSearchPage.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import {useCallback, useEffect, useState} from 'react'; import {useHistory} from '@docusaurus/router'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import {useCallback, useEffect, useState} from 'react'; const SEARCH_PARAM_QUERY = 'q'; diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/docsUtils.test.tsx b/packages/docusaurus-theme-common/src/utils/__tests__/docsUtils.test.tsx index 532fb20a0acfe..b8ac8fb9eeddb 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/docsUtils.test.tsx +++ b/packages/docusaurus-theme-common/src/utils/__tests__/docsUtils.test.tsx @@ -7,6 +7,8 @@ import React from 'react'; import {renderHook} from '@testing-library/react-hooks'; +import {StaticRouter} from 'react-router-dom'; +import {Context} from '@docusaurus/core/src/client/docusaurusContext'; import { findFirstCategoryLink, isActiveSidebarItem, @@ -17,8 +19,6 @@ import { } from '../docsUtils'; import {DocsSidebarProvider} from '../../contexts/docsSidebar'; import {DocsVersionProvider} from '../../contexts/docsVersion'; -import {StaticRouter} from 'react-router-dom'; -import {Context} from '@docusaurus/core/src/client/docusaurusContext'; import type { PropSidebar, PropSidebarItem, diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/generalUtils.test.tsx b/packages/docusaurus-theme-common/src/utils/__tests__/generalUtils.test.tsx index 71c49527abada..6a2680fde148d 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/generalUtils.test.tsx +++ b/packages/docusaurus-theme-common/src/utils/__tests__/generalUtils.test.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import {useTitleFormatter} from '../generalUtils'; import {renderHook} from '@testing-library/react-hooks'; import {Context} from '@docusaurus/core/src/client/docusaurusContext'; +import {useTitleFormatter} from '../generalUtils'; import type {DocusaurusContext} from '@docusaurus/types'; describe('useTitleFormatter', () => { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/reactUtils.test.ts b/packages/docusaurus-theme-common/src/utils/__tests__/reactUtils.test.ts index 0b3e11fa1d437..3aaec1e34704e 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/reactUtils.test.ts +++ b/packages/docusaurus-theme-common/src/utils/__tests__/reactUtils.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {usePrevious} from '../reactUtils'; import {renderHook} from '@testing-library/react-hooks'; +import {usePrevious} from '../reactUtils'; describe('usePrevious', () => { it('returns the previous value of a variable', () => { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/routesUtils.test.ts b/packages/docusaurus-theme-common/src/utils/__tests__/routesUtils.test.ts index a226c13f1156a..3302107db2718 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/routesUtils.test.ts +++ b/packages/docusaurus-theme-common/src/utils/__tests__/routesUtils.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {RouteConfig} from 'react-router-config'; import {findHomePageRoute, isSamePath} from '../routesUtils'; +import type {RouteConfig} from 'react-router-config'; describe('isSamePath', () => { it('returns true for compared path without trailing slash', () => { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/tocUtils.test.ts b/packages/docusaurus-theme-common/src/utils/__tests__/tocUtils.test.ts index 0ae93d7024b65..6424f8d341a97 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/tocUtils.test.ts +++ b/packages/docusaurus-theme-common/src/utils/__tests__/tocUtils.test.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {TOCItem} from '@docusaurus/types'; import {renderHook} from '@testing-library/react-hooks'; import {useFilteredAndTreeifiedTOC, useTreeifiedTOC} from '../tocUtils'; +import type {TOCItem} from '@docusaurus/mdx-loader'; const mockTOC: TOCItem[] = [ { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/useAlternatePageUtils.test.tsx b/packages/docusaurus-theme-common/src/utils/__tests__/useAlternatePageUtils.test.tsx index 79ebd6cbca7f5..e10b938baa4ba 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/useAlternatePageUtils.test.tsx +++ b/packages/docusaurus-theme-common/src/utils/__tests__/useAlternatePageUtils.test.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; -import {useAlternatePageUtils} from '../useAlternatePageUtils'; import {renderHook} from '@testing-library/react-hooks'; import {StaticRouter} from 'react-router-dom'; import {Context} from '@docusaurus/core/src/client/docusaurusContext'; +import {useAlternatePageUtils} from '../useAlternatePageUtils'; import type {DocusaurusContext} from '@docusaurus/types'; describe('useAlternatePageUtils', () => { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/useLocalPathname.test.tsx b/packages/docusaurus-theme-common/src/utils/__tests__/useLocalPathname.test.tsx index 163e2f69bdb7d..f2f6e189393a6 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/useLocalPathname.test.tsx +++ b/packages/docusaurus-theme-common/src/utils/__tests__/useLocalPathname.test.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; -import {useLocalPathname} from '../useLocalPathname'; import {renderHook} from '@testing-library/react-hooks'; import {StaticRouter} from 'react-router-dom'; import {Context} from '@docusaurus/core/src/client/docusaurusContext'; +import {useLocalPathname} from '../useLocalPathname'; import type {DocusaurusContext} from '@docusaurus/types'; describe('useLocalPathname', () => { diff --git a/packages/docusaurus-theme-common/src/utils/__tests__/usePluralForm.test.tsx b/packages/docusaurus-theme-common/src/utils/__tests__/usePluralForm.test.tsx index 10c471d2eb1e6..f7618dbb258c2 100644 --- a/packages/docusaurus-theme-common/src/utils/__tests__/usePluralForm.test.tsx +++ b/packages/docusaurus-theme-common/src/utils/__tests__/usePluralForm.test.tsx @@ -7,9 +7,9 @@ import {jest} from '@jest/globals'; import React from 'react'; -import {usePluralForm} from '../usePluralForm'; import {renderHook} from '@testing-library/react-hooks'; import {Context} from '@docusaurus/core/src/client/docusaurusContext'; +import {usePluralForm} from '../usePluralForm'; import type {DocusaurusContext} from '@docusaurus/types'; describe('usePluralForm', () => { diff --git a/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts b/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts index fa091fe7a1b10..97c9056eb2970 100644 --- a/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/codeBlockUtils.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import type {CSSProperties} from 'react'; import rangeParser from 'parse-numeric-range'; import type {PrismTheme} from 'prism-react-renderer'; -import type {CSSProperties} from 'react'; const codeBlockTitleRegex = /title=(?["'])(?.*?)\1/; const metastringLinesRangeRegex = /\{(?<range>[\d,-]+)\}/; diff --git a/packages/docusaurus-theme-common/src/utils/docsUtils.tsx b/packages/docusaurus-theme-common/src/utils/docsUtils.tsx index 706504118b35b..fd9cfb7ab1415 100644 --- a/packages/docusaurus-theme-common/src/utils/docsUtils.tsx +++ b/packages/docusaurus-theme-common/src/utils/docsUtils.tsx @@ -6,6 +6,8 @@ */ import {useMemo} from 'react'; +import {matchPath, useLocation} from '@docusaurus/router'; +import renderRoutes from '@docusaurus/renderRoutes'; import { useAllDocsData, useActivePlugin, @@ -15,6 +17,12 @@ import { type GlobalSidebar, type GlobalDoc, } from '@docusaurus/plugin-content-docs/client'; +import type {Props as DocPageProps} from '@theme/DocPage'; +import {useDocsPreferredVersion} from '../contexts/docsPreferredVersion'; +import {useDocsVersion} from '../contexts/docsVersion'; +import {useDocsSidebar} from '../contexts/docsSidebar'; +import {uniq} from './jsUtils'; +import {isSamePath} from './routesUtils'; import type { PropSidebar, PropSidebarItem, @@ -22,14 +30,6 @@ import type { PropVersionDoc, PropSidebarBreadcrumbsItem, } from '@docusaurus/plugin-content-docs'; -import type {Props as DocPageProps} from '@theme/DocPage'; -import {useDocsPreferredVersion} from '../contexts/docsPreferredVersion'; -import {useDocsVersion} from '../contexts/docsVersion'; -import {useDocsSidebar} from '../contexts/docsSidebar'; -import {uniq} from './jsUtils'; -import {isSamePath} from './routesUtils'; -import {matchPath, useLocation} from '@docusaurus/router'; -import renderRoutes from '@docusaurus/renderRoutes'; // TODO not ideal, see also "useDocs" export const isDocsPluginEnabled: boolean = !!useAllDocsData; diff --git a/packages/docusaurus-theme-common/src/utils/metadataUtils.tsx b/packages/docusaurus-theme-common/src/utils/metadataUtils.tsx index 9610faa2e40b2..af91c55a3a3cc 100644 --- a/packages/docusaurus-theme-common/src/utils/metadataUtils.tsx +++ b/packages/docusaurus-theme-common/src/utils/metadataUtils.tsx @@ -6,8 +6,8 @@ */ import React, {type ReactNode} from 'react'; -import Head from '@docusaurus/Head'; import clsx from 'clsx'; +import Head from '@docusaurus/Head'; import useRouteContext from '@docusaurus/useRouteContext'; import {useBaseUrlUtils} from '@docusaurus/useBaseUrl'; import {useTitleFormatter} from './generalUtils'; diff --git a/packages/docusaurus-theme-common/src/utils/scrollUtils.tsx b/packages/docusaurus-theme-common/src/utils/scrollUtils.tsx index 79799c37fc248..32095c3feac37 100644 --- a/packages/docusaurus-theme-common/src/utils/scrollUtils.tsx +++ b/packages/docusaurus-theme-common/src/utils/scrollUtils.tsx @@ -14,9 +14,9 @@ import React, { useRef, type ReactNode, } from 'react'; -import {useDynamicCallback, ReactContextError} from './reactUtils'; import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; import useIsBrowser from '@docusaurus/useIsBrowser'; +import {useDynamicCallback, ReactContextError} from './reactUtils'; type ScrollController = { /** A boolean ref tracking whether scroll events are enabled. */ diff --git a/packages/docusaurus-theme-common/src/utils/searchUtils.ts b/packages/docusaurus-theme-common/src/utils/searchUtils.ts index 463c69a90fa67..7f6fe91e48f03 100644 --- a/packages/docusaurus-theme-common/src/utils/searchUtils.ts +++ b/packages/docusaurus-theme-common/src/utils/searchUtils.ts @@ -9,8 +9,8 @@ import { useAllDocsData, useActivePluginAndVersion, } from '@docusaurus/plugin-content-docs/client'; -import {useDocsPreferredVersionByPluginId} from '../contexts/docsPreferredVersion'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import {useDocsPreferredVersionByPluginId} from '../contexts/docsPreferredVersion'; export const DEFAULT_SEARCH_TAG = 'default'; diff --git a/packages/docusaurus-theme-common/src/utils/useLocationChange.ts b/packages/docusaurus-theme-common/src/utils/useLocationChange.ts index dd8ec1d0249ce..515493996e268 100644 --- a/packages/docusaurus-theme-common/src/utils/useLocationChange.ts +++ b/packages/docusaurus-theme-common/src/utils/useLocationChange.ts @@ -7,8 +7,8 @@ import {useEffect} from 'react'; import {useLocation} from '@docusaurus/router'; -import type {Location} from 'history'; import {useDynamicCallback, usePrevious} from './reactUtils'; +import type {Location} from 'history'; /** * Fires an effect when the location changes (which includes hash, query, etc.). diff --git a/packages/docusaurus-theme-common/tsconfig.json b/packages/docusaurus-theme-common/tsconfig.json index 20c3d66f64116..ceffc5496b4b7 100644 --- a/packages/docusaurus-theme-common/tsconfig.json +++ b/packages/docusaurus-theme-common/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "module": "esnext", + "target": "esnext", "sourceMap": true, "declarationMap": true, "rootDir": "src", "outDir": "lib" }, - "include": ["src"] + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-theme-live-codeblock/.npmignore b/packages/docusaurus-theme-live-codeblock/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-theme-live-codeblock/.npmignore +++ b/packages/docusaurus-theme-live-codeblock/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-theme-live-codeblock/copyUntypedFiles.mjs b/packages/docusaurus-theme-live-codeblock/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-theme-live-codeblock/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-theme-live-codeblock/package.json b/packages/docusaurus-theme-live-codeblock/package.json index 2e79749422412..f107b6b8b302a 100644 --- a/packages/docusaurus-theme-live-codeblock/package.json +++ b/packages/docusaurus-theme-live-codeblock/package.json @@ -11,11 +11,10 @@ "access": "public" }, "scripts": { - "build": "yarn build:server && yarn build:client && yarn build:copy && yarn build:format", - "build:server": "tsc --project tsconfig.server.json", - "build:client": "tsc --project tsconfig.client.json", - "build:copy": "node copyUntypedFiles.mjs", - "build:format": "prettier --config ../../.prettierrc --write \"lib/**/*.js\"" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "repository": { "type": "git", diff --git a/packages/docusaurus-theme-live-codeblock/src/theme/Playground/index.tsx b/packages/docusaurus-theme-live-codeblock/src/theme/Playground/index.tsx index 7ca4c62f326d9..64a6cc354517d 100644 --- a/packages/docusaurus-theme-live-codeblock/src/theme/Playground/index.tsx +++ b/packages/docusaurus-theme-live-codeblock/src/theme/Playground/index.tsx @@ -6,15 +6,16 @@ */ import React from 'react'; -import {LiveProvider, LiveEditor, LiveError, LivePreview} from 'react-live'; import clsx from 'clsx'; +import useIsBrowser from '@docusaurus/useIsBrowser'; +import {LiveProvider, LiveEditor, LiveError, LivePreview} from 'react-live'; import Translate from '@docusaurus/Translate'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import BrowserOnly from '@docusaurus/BrowserOnly'; import {usePrismTheme} from '@docusaurus/theme-common'; -import styles from './styles.module.css'; -import useIsBrowser from '@docusaurus/useIsBrowser'; import type {Props} from '@theme/Playground'; + +import styles from './styles.module.css'; import type {ThemeConfig} from '@docusaurus/theme-live-codeblock'; function Header({children}: {children: React.ReactNode}) { diff --git a/packages/docusaurus-theme-live-codeblock/tsconfig.client.json b/packages/docusaurus-theme-live-codeblock/tsconfig.client.json index 462a6376e3be0..222005186ea5e 100644 --- a/packages/docusaurus-theme-live-codeblock/tsconfig.client.json +++ b/packages/docusaurus-theme-live-codeblock/tsconfig.client.json @@ -1,8 +1,15 @@ { - "extends": "./tsconfig.json", + "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "rootDir": "src", + "outDir": "lib", "module": "esnext", - "jsx": "react-native" + "target": "esnext" }, - "include": ["src/theme/", "src/*.d.ts", "src/custom-buble.ts"] + "include": ["src/theme", "src/*.d.ts", "src/custom-buble.ts"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-theme-live-codeblock/tsconfig.json b/packages/docusaurus-theme-live-codeblock/tsconfig.json index f5902ba1089bc..c0b15f81fcc8f 100644 --- a/packages/docusaurus-theme-live-codeblock/tsconfig.json +++ b/packages/docusaurus-theme-live-codeblock/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/custom-buble.ts", "src/theme", "**/__tests__/**"] } diff --git a/packages/docusaurus-theme-live-codeblock/tsconfig.server.json b/packages/docusaurus-theme-live-codeblock/tsconfig.server.json deleted file mode 100644 index 2159e2ef8e200..0000000000000 --- a/packages/docusaurus-theme-live-codeblock/tsconfig.server.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/*.ts"], - "exclude": ["src/custom-buble.ts"] -} diff --git a/packages/docusaurus-theme-search-algolia/.npmignore b/packages/docusaurus-theme-search-algolia/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-theme-search-algolia/.npmignore +++ b/packages/docusaurus-theme-search-algolia/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-theme-search-algolia/copyUntypedFiles.mjs b/packages/docusaurus-theme-search-algolia/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus-theme-search-algolia/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus-theme-search-algolia/package.json b/packages/docusaurus-theme-search-algolia/package.json index f1e3f6db96fb3..aaf040ba3c33b 100644 --- a/packages/docusaurus-theme-search-algolia/package.json +++ b/packages/docusaurus-theme-search-algolia/package.json @@ -21,11 +21,10 @@ }, "license": "MIT", "scripts": { - "build": "yarn build:server && yarn build:client && yarn build:copy && yarn build:format", - "build:server": "tsc --project tsconfig.server.json", - "build:client": "tsc --project tsconfig.client.json", - "build:copy": "node copyUntypedFiles.mjs", - "build:format": "prettier --config ../../.prettierrc --write \"lib/**/*.js\"" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "dependencies": { "@docsearch/react": "^3.0.0", 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 71c13896b4d38..23be336647ecf 100644 --- a/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts +++ b/packages/docusaurus-theme-search-algolia/src/__tests__/validateThemeConfig.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {Joi} from '@docusaurus/utils-validation'; import {validateThemeConfig, DEFAULT_CONFIG} from '../validateThemeConfig'; +import type {Joi} from '@docusaurus/utils-validation'; function testValidateThemeConfig(themeConfig: {[key: string]: unknown}) { function validate(schema: Joi.Schema, cfg: {[key: string]: unknown}) { diff --git a/packages/docusaurus-theme-search-algolia/src/index.ts b/packages/docusaurus-theme-search-algolia/src/index.ts index 46f80161652cd..dbd2a58db30c2 100644 --- a/packages/docusaurus-theme-search-algolia/src/index.ts +++ b/packages/docusaurus-theme-search-algolia/src/index.ts @@ -7,12 +7,12 @@ import path from 'path'; import fs from 'fs-extra'; +import _ from 'lodash'; +import logger from '@docusaurus/logger'; import {defaultConfig, compile} from 'eta'; import {normalizeUrl} from '@docusaurus/utils'; import {readDefaultCodeTranslationMessages} from '@docusaurus/theme-translations'; -import logger from '@docusaurus/logger'; import openSearchTemplate from './templates/opensearch'; -import _ from 'lodash'; import type {LoadContext, Plugin} from '@docusaurus/types'; import type {ThemeConfig} from '@docusaurus/theme-search-algolia'; diff --git a/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx b/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx index 6217dbf50b41a..217555ad316de 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx +++ b/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.tsx @@ -14,7 +14,6 @@ import Link from '@docusaurus/Link'; import Head from '@docusaurus/Head'; import {isRegexpStringMatch, useSearchPage} from '@docusaurus/theme-common'; import {DocSearchButton, useDocSearchKeyboardEvents} from '@docsearch/react'; -import type {SearchClient} from 'algoliasearch/lite'; import {useAlgoliaContextualFacetFilters} from '@docusaurus/theme-search-algolia/client'; import Translate, {translate} from '@docusaurus/Translate'; @@ -26,6 +25,7 @@ import type { InternalDocSearchHit, StoredDocSearchHit, } from '@docsearch/react/dist/esm/types'; +import type {SearchClient} from 'algoliasearch/lite'; import type {AutocompleteState} from '@algolia/autocomplete-core'; type DocSearchProps = Omit< 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 5a79ce31050fb..7be755278b12a 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx +++ b/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.tsx @@ -8,10 +8,10 @@ /* eslint-disable jsx-a11y/no-autofocus */ import React, {useEffect, useState, useReducer, useRef} from 'react'; +import clsx from 'clsx'; import algoliaSearch from 'algoliasearch/lite'; import algoliaSearchHelper from 'algoliasearch-helper'; -import clsx from 'clsx'; import Head from '@docusaurus/Head'; import Link from '@docusaurus/Link'; @@ -26,8 +26,9 @@ import { } from '@docusaurus/theme-common'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import {useAllDocsData} from '@docusaurus/plugin-content-docs/client'; -import Layout from '@theme/Layout'; import Translate, {translate} from '@docusaurus/Translate'; +import Layout from '@theme/Layout'; + import styles from './styles.module.css'; import type {ThemeConfig} from '@docusaurus/theme-search-algolia'; diff --git a/packages/docusaurus-theme-search-algolia/tsconfig.client.json b/packages/docusaurus-theme-search-algolia/tsconfig.client.json index 0ea16454ec40a..a8c1d3f7de501 100644 --- a/packages/docusaurus-theme-search-algolia/tsconfig.client.json +++ b/packages/docusaurus-theme-search-algolia/tsconfig.client.json @@ -1,8 +1,15 @@ { - "extends": "./tsconfig.json", + "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "rootDir": "src", + "outDir": "lib", "module": "esnext", - "jsx": "react-native" + "target": "esnext" }, - "include": ["src/theme/", "src/client/", "src/*.d.ts"] + "include": ["src/theme", "src/client", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-theme-search-algolia/tsconfig.json b/packages/docusaurus-theme-search-algolia/tsconfig.json index 51aec434b2578..3c8737f51c0d0 100644 --- a/packages/docusaurus-theme-search-algolia/tsconfig.json +++ b/packages/docusaurus-theme-search-algolia/tsconfig.json @@ -1,8 +1,14 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { - "lib": ["DOM", "ES2019"], + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["src/client", "src/theme", "**/__tests__/**"] } diff --git a/packages/docusaurus-theme-search-algolia/tsconfig.server.json b/packages/docusaurus-theme-search-algolia/tsconfig.server.json deleted file mode 100644 index 3faf6c3e997bf..0000000000000 --- a/packages/docusaurus-theme-search-algolia/tsconfig.server.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/*.ts", "src/templates/*.ts"] -} diff --git a/packages/docusaurus-theme-translations/.npmignore b/packages/docusaurus-theme-translations/.npmignore index 1b59b1ca638ca..7059569fc57d1 100644 --- a/packages/docusaurus-theme-translations/.npmignore +++ b/packages/docusaurus-theme-translations/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts b/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts index 7bf0bf22a4308..3b7a611cbcd63 100644 --- a/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts +++ b/packages/docusaurus-theme-translations/locales/__tests__/locales.test.ts @@ -6,10 +6,10 @@ */ import {jest} from '@jest/globals'; -import {extractThemeCodeMessages} from '../../src/utils'; import path from 'path'; import fs from 'fs-extra'; import _ from 'lodash'; +import {extractThemeCodeMessages} from '../../src/utils'; // Seems the 5s default timeout fails sometimes jest.setTimeout(15000); diff --git a/packages/docusaurus-theme-translations/package.json b/packages/docusaurus-theme-translations/package.json index 5c27fb37c93c4..a296a446f3eb7 100644 --- a/packages/docusaurus-theme-translations/package.json +++ b/packages/docusaurus-theme-translations/package.json @@ -14,8 +14,8 @@ }, "license": "MIT", "scripts": { - "build": "tsc -p tsconfig.build.json", - "watch": "tsc -p tsconfig.build.json --watch", + "build": "tsc --build", + "watch": "tsc --build --watch", "update": "node ./update.mjs" }, "dependencies": { diff --git a/packages/docusaurus-theme-translations/src/utils.ts b/packages/docusaurus-theme-translations/src/utils.ts index beb1370817e19..da931ef454f84 100644 --- a/packages/docusaurus-theme-translations/src/utils.ts +++ b/packages/docusaurus-theme-translations/src/utils.ts @@ -25,10 +25,7 @@ async function getPackageCodePath(packageName: string) { const packageJsonPath = path.join(packagePath, 'package.json'); const {main} = await fs.readJSON(packageJsonPath); const packageSrcPath = path.join(packagePath, path.dirname(main)); - const packageLibNextPath = packageSrcPath.replace('lib', 'lib-next'); - return (await fs.pathExists(packageLibNextPath)) - ? packageLibNextPath - : packageSrcPath; + return packageSrcPath; } export async function getThemes(): Promise<{name: string; src: string[]}[]> { diff --git a/packages/docusaurus-theme-translations/tsconfig.build.json b/packages/docusaurus-theme-translations/tsconfig.build.json index aee99fc0f38ef..5370e86c56a56 100644 --- a/packages/docusaurus-theme-translations/tsconfig.build.json +++ b/packages/docusaurus-theme-translations/tsconfig.build.json @@ -1,11 +1,16 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-theme-translations/tsconfig.json b/packages/docusaurus-theme-translations/tsconfig.json index 59be626a2754c..667e74599697b 100644 --- a/packages/docusaurus-theme-translations/tsconfig.json +++ b/packages/docusaurus-theme-translations/tsconfig.json @@ -1,10 +1,11 @@ { "extends": "../../tsconfig.json", + "references": [{"path": "./tsconfig.build.json"}], "compilerOptions": { "module": "esnext", "noEmit": true, "checkJs": true, "allowJs": true }, - "include": ["update.mjs", "src"] + "include": ["update.mjs"] } diff --git a/packages/docusaurus-theme-translations/update.mjs b/packages/docusaurus-theme-translations/update.mjs index 85736bf696e4f..73fa9c6c5fe1f 100644 --- a/packages/docusaurus-theme-translations/update.mjs +++ b/packages/docusaurus-theme-translations/update.mjs @@ -7,11 +7,11 @@ // @ts-check -import logger from '@docusaurus/logger'; import path from 'path'; import {fileURLToPath} from 'url'; import fs from 'fs-extra'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; import {getThemes, extractThemeCodeMessages} from './lib/utils.js'; const LocalesDirPath = fileURLToPath(new URL('locales', import.meta.url)); diff --git a/packages/docusaurus-types/package.json b/packages/docusaurus-types/package.json index b50c2100a5af3..051f1625c8ffc 100644 --- a/packages/docusaurus-types/package.json +++ b/packages/docusaurus-types/package.json @@ -12,9 +12,6 @@ "directory": "packages/docusaurus-types" }, "license": "MIT", - "scripts": { - "test": "tsc -p ." - }, "dependencies": { "commander": "^5.1.0", "history": "^4.9.0", diff --git a/packages/docusaurus-utils-common/.npmignore b/packages/docusaurus-utils-common/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-utils-common/.npmignore +++ b/packages/docusaurus-utils-common/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-utils-common/tsconfig.json b/packages/docusaurus-utils-common/tsconfig.json index c28192960036b..f787010fcd78c 100644 --- a/packages/docusaurus-utils-common/tsconfig.json +++ b/packages/docusaurus-utils-common/tsconfig.json @@ -1,12 +1,16 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib", "noEmitHelpers": false - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-utils-validation/.npmignore b/packages/docusaurus-utils-validation/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-utils-validation/.npmignore +++ b/packages/docusaurus-utils-validation/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-utils-validation/src/validationSchemas.ts b/packages/docusaurus-utils-validation/src/validationSchemas.ts index f8e9a1c36e0c3..eea887bea2a57 100644 --- a/packages/docusaurus-utils-validation/src/validationSchemas.ts +++ b/packages/docusaurus-utils-validation/src/validationSchemas.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import Joi from './Joi'; import {isValidPathname, DEFAULT_PLUGIN_ID, type Tag} from '@docusaurus/utils'; +import Joi from './Joi'; import {JoiFrontMatter} from './JoiFrontMatter'; export const PluginIdSchema = Joi.string() diff --git a/packages/docusaurus-utils-validation/src/validationUtils.ts b/packages/docusaurus-utils-validation/src/validationUtils.ts index 33145624da4dd..5d87c1a5e8e46 100644 --- a/packages/docusaurus-utils-validation/src/validationUtils.ts +++ b/packages/docusaurus-utils-validation/src/validationUtils.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -import type Joi from './Joi'; import logger from '@docusaurus/logger'; import Yaml from 'js-yaml'; import {PluginIdSchema} from './validationSchemas'; +import type Joi from './Joi'; /** Print warnings returned from Joi validation. */ export function printWarning(warning?: Joi.ValidationError): void { diff --git a/packages/docusaurus-utils-validation/tsconfig.json b/packages/docusaurus-utils-validation/tsconfig.json index aee99fc0f38ef..7807612b51a56 100644 --- a/packages/docusaurus-utils-validation/tsconfig.json +++ b/packages/docusaurus-utils-validation/tsconfig.json @@ -1,11 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus-utils/.npmignore b/packages/docusaurus-utils/.npmignore index f2b994d4e359b..03c9ae1e1b54f 100644 --- a/packages/docusaurus-utils/.npmignore +++ b/packages/docusaurus-utils/.npmignore @@ -1,4 +1,3 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus-utils/package.json b/packages/docusaurus-utils/package.json index cdddacda8d111..36dd648ff13d7 100644 --- a/packages/docusaurus-utils/package.json +++ b/packages/docusaurus-utils/package.json @@ -42,7 +42,7 @@ "@types/dedent": "^0.7.0", "@types/github-slugger": "^1.3.0", "@types/micromatch": "^4.0.2", - "@types/react-dom": "^18.0.3", + "@types/react-dom": "^18.0.4", "dedent": "^0.7.0" } } diff --git a/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts b/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts index 236d9c224dc8e..0e97013b9eceb 100644 --- a/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/emitUtils.test.ts @@ -6,9 +6,9 @@ */ import {jest} from '@jest/globals'; -import {readOutputHTMLFile, generate} from '../emitUtils'; import path from 'path'; import fs from 'fs-extra'; +import {readOutputHTMLFile, generate} from '../emitUtils'; describe('readOutputHTMLFile', () => { it('reads both files with trailing slash undefined', async () => { diff --git a/packages/docusaurus-utils/src/__tests__/gitUtils.test.ts b/packages/docusaurus-utils/src/__tests__/gitUtils.test.ts index 1d4519536cc46..d701b8bca347b 100644 --- a/packages/docusaurus-utils/src/__tests__/gitUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/gitUtils.test.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -import {FileNotTrackedError, getFileCommitDate} from '../gitUtils'; import fs from 'fs-extra'; import path from 'path'; import {createTempRepo} from '@testing-utils/git'; +import {FileNotTrackedError, getFileCommitDate} from '../gitUtils'; /* eslint-disable no-restricted-properties */ function initializeTempRepo() { diff --git a/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts b/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts index 6db16ef20f318..ca7218ab02ad2 100644 --- a/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/jsUtils.test.ts @@ -6,6 +6,7 @@ */ import {jest} from '@jest/globals'; +import _ from 'lodash'; import { removeSuffix, removePrefix, @@ -13,7 +14,6 @@ import { findAsyncSequential, reportMessage, } from '../jsUtils'; -import _ from 'lodash'; describe('removeSuffix', () => { it("is no-op when suffix doesn't exist", () => { diff --git a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts index 09488bc4a6c0e..2f4baa74ccd61 100644 --- a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import dedent from 'dedent'; import { createExcerpt, parseMarkdownContentTitle, @@ -12,7 +13,6 @@ import { parseMarkdownHeadingId, writeMarkdownHeadingId, } from '../markdownUtils'; -import dedent from 'dedent'; describe('createExcerpt', () => { it('creates excerpt for text-only content', () => { diff --git a/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts b/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts index eaf2b61cd9067..eb6cc8d13f077 100644 --- a/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/pathUtils.test.ts @@ -6,6 +6,7 @@ */ import {jest} from '@jest/globals'; +import path from 'path'; import { isNameTooLong, shortName, @@ -15,7 +16,6 @@ import { toMessageRelativeFilePath, addTrailingPathSeparator, } from '../pathUtils'; -import path from 'path'; describe('isNameTooLong', () => { it('works', () => { diff --git a/packages/docusaurus-utils/src/dataFileUtils.ts b/packages/docusaurus-utils/src/dataFileUtils.ts index 34ed9befeb836..937d22b9cf2b4 100644 --- a/packages/docusaurus-utils/src/dataFileUtils.ts +++ b/packages/docusaurus-utils/src/dataFileUtils.ts @@ -6,11 +6,11 @@ */ import fs from 'fs-extra'; -import Yaml from 'js-yaml'; import path from 'path'; +import logger from '@docusaurus/logger'; +import Yaml from 'js-yaml'; import {findAsyncSequential} from './index'; import type {ContentPaths} from './markdownLinks'; -import logger from '@docusaurus/logger'; type DataFileParams = { /** Path to the potential data file, relative to `contentPaths` */ diff --git a/packages/docusaurus-utils/src/globUtils.ts b/packages/docusaurus-utils/src/globUtils.ts index 67af9051eeae9..d95fa35b54be4 100644 --- a/packages/docusaurus-utils/src/globUtils.ts +++ b/packages/docusaurus-utils/src/globUtils.ts @@ -7,8 +7,8 @@ // Globby/Micromatch are the 2 libs we use in Docusaurus consistently -import Micromatch from 'micromatch'; // Note: Micromatch is used by Globby import path from 'path'; +import Micromatch from 'micromatch'; // Note: Micromatch is used by Globby /** A re-export of the globby instance. */ export {default as Globby} from 'globby'; diff --git a/packages/docusaurus-utils/src/i18nUtils.ts b/packages/docusaurus-utils/src/i18nUtils.ts index e7e29815beb2f..a6d08cf83749e 100644 --- a/packages/docusaurus-utils/src/i18nUtils.ts +++ b/packages/docusaurus-utils/src/i18nUtils.ts @@ -7,13 +7,13 @@ import path from 'path'; import _ from 'lodash'; +import {DEFAULT_PLUGIN_ID, I18N_DIR_NAME} from './constants'; +import {normalizeUrl} from './urlUtils'; import type { TranslationFileContent, TranslationFile, I18n, } from '@docusaurus/types'; -import {DEFAULT_PLUGIN_ID, I18N_DIR_NAME} from './constants'; -import {normalizeUrl} from './urlUtils'; /** * Takes a list of translation file contents, and shallow-merges them into one. diff --git a/packages/docusaurus-utils/src/jsUtils.ts b/packages/docusaurus-utils/src/jsUtils.ts index 1e2858fe620ca..2d1f228f1eb7c 100644 --- a/packages/docusaurus-utils/src/jsUtils.ts +++ b/packages/docusaurus-utils/src/jsUtils.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {ReportingSeverity} from '@docusaurus/types'; import logger from '@docusaurus/logger'; +import type {ReportingSeverity} from '@docusaurus/types'; /** Removes a given string suffix from `str`. */ export function removeSuffix(str: string, suffix: string): string { diff --git a/packages/docusaurus-utils/src/urlUtils.ts b/packages/docusaurus-utils/src/urlUtils.ts index c6ad13d2d88e6..708d50dbfe571 100644 --- a/packages/docusaurus-utils/src/urlUtils.ts +++ b/packages/docusaurus-utils/src/urlUtils.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {removeSuffix} from './jsUtils'; import resolvePathnameUnsafe from 'resolve-pathname'; +import {removeSuffix} from './jsUtils'; /** * Much like `path.join`, but much better. Takes an array of URL segments, and diff --git a/packages/docusaurus-utils/src/webpackUtils.ts b/packages/docusaurus-utils/src/webpackUtils.ts index 4116867c9dffa..fa579e06b470b 100644 --- a/packages/docusaurus-utils/src/webpackUtils.ts +++ b/packages/docusaurus-utils/src/webpackUtils.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -import type {RuleSetRule} from 'webpack'; import path from 'path'; import {escapePath} from './pathUtils'; import { WEBPACK_URL_LOADER_LIMIT, OUTPUT_STATIC_ASSETS_DIR_NAME, } from './constants'; +import type {RuleSetRule} from 'webpack'; type AssetFolder = 'images' | 'files' | 'fonts' | 'medias'; diff --git a/packages/docusaurus-utils/tsconfig.json b/packages/docusaurus-utils/tsconfig.json index aee99fc0f38ef..7807612b51a56 100644 --- a/packages/docusaurus-utils/tsconfig.json +++ b/packages/docusaurus-utils/tsconfig.json @@ -1,11 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus/.npmignore b/packages/docusaurus/.npmignore index ba8304029eb76..e4132af421720 100644 --- a/packages/docusaurus/.npmignore +++ b/packages/docusaurus/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/docusaurus/bin/beforeCli.mjs b/packages/docusaurus/bin/beforeCli.mjs index 0c374dba1722d..fa4cecdbc77c5 100644 --- a/packages/docusaurus/bin/beforeCli.mjs +++ b/packages/docusaurus/bin/beforeCli.mjs @@ -7,13 +7,13 @@ // @ts-check -import logger from '@docusaurus/logger'; import fs from 'fs-extra'; -import semver from 'semver'; import path from 'path'; +import {createRequire} from 'module'; +import logger from '@docusaurus/logger'; +import semver from 'semver'; import updateNotifier from 'update-notifier'; import boxen from 'boxen'; -import {createRequire} from 'module'; import {DOCUSAURUS_VERSION} from '@docusaurus/utils'; const packageJson = createRequire(import.meta.url)('../package.json'); diff --git a/packages/docusaurus/bin/docusaurus.mjs b/packages/docusaurus/bin/docusaurus.mjs index 759aad41cc98b..ec6a5cfffb882 100755 --- a/packages/docusaurus/bin/docusaurus.mjs +++ b/packages/docusaurus/bin/docusaurus.mjs @@ -8,8 +8,8 @@ // @ts-check -import logger from '@docusaurus/logger'; import fs from 'fs-extra'; +import logger from '@docusaurus/logger'; import cli from 'commander'; import {DOCUSAURUS_VERSION} from '@docusaurus/utils'; import { diff --git a/packages/docusaurus/copyUntypedFiles.mjs b/packages/docusaurus/copyUntypedFiles.mjs deleted file mode 100644 index 8b230152f1af6..0000000000000 --- a/packages/docusaurus/copyUntypedFiles.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import fs from 'fs-extra'; -import {fileURLToPath} from 'url'; - -/** - * Copy all untyped and static assets files to lib. - */ -const srcDir = fileURLToPath(new URL('src', import.meta.url)); -const libDir = fileURLToPath(new URL('lib', import.meta.url)); -await fs.copy(srcDir, libDir, { - filter(filepath) { - return !/__tests__/.test(filepath) && !/\.tsx?$/.test(filepath); - }, -}); diff --git a/packages/docusaurus/package.json b/packages/docusaurus/package.json index 4019070675f01..85720169700d0 100644 --- a/packages/docusaurus/package.json +++ b/packages/docusaurus/package.json @@ -24,23 +24,25 @@ "docusaurus": "bin/docusaurus.mjs" }, "scripts": { - "build": "tsc -p tsconfig.server.json && tsc -p tsconfig.client.json && node copyUntypedFiles.mjs", - "watch": "node copyUntypedFiles.mjs && concurrently -n \"server,client\" --kill-others \"tsc -p tsconfig.server.json --watch\" \"tsc -p tsconfig.client.json --watch\"" + "build": "tsc --build && node ../../admin/scripts/copyUntypedFiles.js", + "watch": "run-p -c copy:watch build:watch", + "build:watch": "tsc --build --watch", + "copy:watch": "node ../../admin/scripts/copyUntypedFiles.js --watch" }, "bugs": { "url": "https://github.com/facebook/docusaurus/issues" }, "dependencies": { - "@babel/core": "^7.17.10", - "@babel/generator": "^7.17.10", + "@babel/core": "^7.17.12", + "@babel/generator": "^7.17.12", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.10", - "@babel/preset-env": "^7.17.10", - "@babel/preset-react": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.12", + "@babel/preset-env": "^7.17.12", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", "@babel/runtime": "^7.17.9", "@babel/runtime-corejs3": "^7.17.9", - "@babel/traverse": "^7.17.10", + "@babel/traverse": "^7.17.12", "@docusaurus/cssnano-preset": "2.0.0-beta.20", "@docusaurus/logger": "2.0.0-beta.20", "@docusaurus/mdx-loader": "2.0.0-beta.20", @@ -63,8 +65,8 @@ "core-js": "^3.22.5", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^3.4.1", - "cssnano": "^5.1.7", - "del": "^6.0.0", + "cssnano": "^5.1.8", + "del": "^6.1.0", "detect-port": "^1.3.0", "escape-html": "^1.0.3", "eta": "^1.12.3", @@ -107,7 +109,7 @@ "@docusaurus/module-type-aliases": "2.0.0-beta.20", "@docusaurus/types": "2.0.0-beta.20", "@types/detect-port": "^1.3.2", - "@types/react-dom": "^18.0.3", + "@types/react-dom": "^18.0.4", "@types/react-router-config": "^5.0.6", "@types/rtl-detect": "^1.0.0", "@types/serve-handler": "^6.1.1", diff --git a/packages/docusaurus/src/client/App.tsx b/packages/docusaurus/src/client/App.tsx index c709c2e8515f4..da3a1ef22f0ad 100644 --- a/packages/docusaurus/src/client/App.tsx +++ b/packages/docusaurus/src/client/App.tsx @@ -10,18 +10,20 @@ import '@generated/client-modules'; import routes from '@generated/routes'; import {useLocation} from '@docusaurus/router'; -import normalizeLocation from './normalizeLocation'; import renderRoutes from '@docusaurus/renderRoutes'; +import Root from '@theme/Root'; +import SiteMetadata from '@theme/SiteMetadata'; +import normalizeLocation from './normalizeLocation'; import {BrowserContextProvider} from './browserContext'; import {DocusaurusContextProvider} from './docusaurusContext'; import PendingNavigation from './PendingNavigation'; import BaseUrlIssueBanner from './BaseUrlIssueBanner'; import SiteMetadataDefaults from './SiteMetadataDefaults'; -import Root from '@theme/Root'; -import SiteMetadata from '@theme/SiteMetadata'; // TODO, quick fix for CSS insertion order +// eslint-disable-next-line import/order import ErrorBoundary from '@docusaurus/ErrorBoundary'; +// eslint-disable-next-line import/order import Error from '@theme/Error'; export default function App(): JSX.Element { diff --git a/packages/docusaurus/src/client/docusaurusContext.tsx b/packages/docusaurus/src/client/docusaurusContext.tsx index 5023b1eced705..5bed42737f373 100644 --- a/packages/docusaurus/src/client/docusaurusContext.tsx +++ b/packages/docusaurus/src/client/docusaurusContext.tsx @@ -6,13 +6,12 @@ */ import React, {type ReactNode} from 'react'; -import type {DocusaurusContext} from '@docusaurus/types'; - import siteConfig from '@generated/docusaurus.config'; import globalData from '@generated/globalData'; import i18n from '@generated/i18n'; import codeTranslations from '@generated/codeTranslations'; import siteMetadata from '@generated/site-metadata'; +import type {DocusaurusContext} from '@docusaurus/types'; // Static value on purpose: don't make it dynamic! // Using context is still useful for testability reasons. diff --git a/packages/docusaurus/src/client/exports/ComponentCreator.tsx b/packages/docusaurus/src/client/exports/ComponentCreator.tsx index 0caf13bebc398..77439b36425a9 100644 --- a/packages/docusaurus/src/client/exports/ComponentCreator.tsx +++ b/packages/docusaurus/src/client/exports/ComponentCreator.tsx @@ -7,9 +7,9 @@ import React from 'react'; import Loadable from 'react-loadable'; -import Loading from '@theme/Loading'; import routesChunkNames from '@generated/routesChunkNames'; import registry from '@generated/registry'; +import Loading from '@theme/Loading'; import flat from '../flat'; import {RouteContextProvider} from '../routeContext'; diff --git a/packages/docusaurus/src/client/exports/ErrorBoundary.tsx b/packages/docusaurus/src/client/exports/ErrorBoundary.tsx index 11880aa67f708..b8dd78fe1a78d 100644 --- a/packages/docusaurus/src/client/exports/ErrorBoundary.tsx +++ b/packages/docusaurus/src/client/exports/ErrorBoundary.tsx @@ -6,10 +6,9 @@ */ import React, {type ReactNode} from 'react'; - import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; -import type {Props} from '@docusaurus/ErrorBoundary'; import DefaultFallback from '@theme/Error'; +import type {Props} from '@docusaurus/ErrorBoundary'; type State = { error: Error | null; diff --git a/packages/docusaurus/src/client/exports/Link.tsx b/packages/docusaurus/src/client/exports/Link.tsx index 3628e74954391..78a3f91a6b7b1 100644 --- a/packages/docusaurus/src/client/exports/Link.tsx +++ b/packages/docusaurus/src/client/exports/Link.tsx @@ -11,15 +11,13 @@ import React, { useRef, type ComponentType, } from 'react'; - import {NavLink, Link as RRLink} from 'react-router-dom'; +import {applyTrailingSlash} from '@docusaurus/utils-common'; import useDocusaurusContext from './useDocusaurusContext'; import isInternalUrl from './isInternalUrl'; import ExecutionEnvironment from './ExecutionEnvironment'; import {useLinksCollector} from '../LinksCollector'; import {useBaseUrlUtils} from './useBaseUrl'; -import {applyTrailingSlash} from '@docusaurus/utils-common'; - import type {Props} from '@docusaurus/Link'; // TODO all this wouldn't be necessary if we used ReactRouter basename feature diff --git a/packages/docusaurus/src/client/exports/Translate.tsx b/packages/docusaurus/src/client/exports/Translate.tsx index 5cfbef7edb5c3..b886065638716 100644 --- a/packages/docusaurus/src/client/exports/Translate.tsx +++ b/packages/docusaurus/src/client/exports/Translate.tsx @@ -7,10 +7,9 @@ import React from 'react'; import {interpolate, type InterpolateValues} from '@docusaurus/Interpolate'; -import type {TranslateParam, TranslateProps} from '@docusaurus/Translate'; - // Can't read it from context, due to exposing imperative API import codeTranslations from '@generated/codeTranslations'; +import type {TranslateParam, TranslateProps} from '@docusaurus/Translate'; function getLocalizedMessage({ id, diff --git a/packages/docusaurus/src/client/exports/__tests__/Head.test.tsx b/packages/docusaurus/src/client/exports/__tests__/Head.test.tsx index 847fa52391f76..067fc9ea25ee8 100644 --- a/packages/docusaurus/src/client/exports/__tests__/Head.test.tsx +++ b/packages/docusaurus/src/client/exports/__tests__/Head.test.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import Head from '../Head'; import {type FilledContext, HelmetProvider} from 'react-helmet-async'; import renderer from 'react-test-renderer'; +import Head from '../Head'; describe('Head', () => { it('does exactly what Helmet does', () => { diff --git a/packages/docusaurus/src/client/exports/useRouteContext.tsx b/packages/docusaurus/src/client/exports/useRouteContext.tsx index 9ba1a1f570397..ea80925c3208d 100644 --- a/packages/docusaurus/src/client/exports/useRouteContext.tsx +++ b/packages/docusaurus/src/client/exports/useRouteContext.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {PluginRouteContext} from '@docusaurus/types'; import {Context} from '../routeContext'; +import type {PluginRouteContext} from '@docusaurus/types'; export default function useRouteContext(): PluginRouteContext { const context = React.useContext(Context); diff --git a/packages/docusaurus/src/client/serverEntry.tsx b/packages/docusaurus/src/client/serverEntry.tsx index 408bfee0e3dc0..27902e72e8729 100644 --- a/packages/docusaurus/src/client/serverEntry.tsx +++ b/packages/docusaurus/src/client/serverEntry.tsx @@ -5,26 +5,25 @@ * LICENSE file in the root directory of this source tree. */ -import * as eta from 'eta'; import React from 'react'; +import path from 'path'; +import fs from 'fs-extra'; +// eslint-disable-next-line no-restricted-imports +import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import * as eta from 'eta'; import {StaticRouter} from 'react-router-dom'; import ReactDOMServer from 'react-dom/server'; import {HelmetProvider, type FilledContext} from 'react-helmet-async'; import {getBundles, type Manifest} from 'react-loadable-ssr-addon-v5-slorber'; import Loadable from 'react-loadable'; - import {minify} from 'html-minifier-terser'; -import path from 'path'; -import fs from 'fs-extra'; import preload from './preload'; import App from './App'; import { createStatefulLinksCollector, LinksCollectorProvider, } from './LinksCollector'; -import logger from '@docusaurus/logger'; -// eslint-disable-next-line no-restricted-imports -import _ from 'lodash'; import type {Locals} from '@slorber/static-site-generator-webpack-plugin'; const getCompiledSSRTemplate = _.memoize((template: string) => diff --git a/packages/docusaurus/src/client/theme-fallback/Error/index.tsx b/packages/docusaurus/src/client/theme-fallback/Error/index.tsx index 3376d906eaee5..513348cce4d70 100644 --- a/packages/docusaurus/src/client/theme-fallback/Error/index.tsx +++ b/packages/docusaurus/src/client/theme-fallback/Error/index.tsx @@ -9,10 +9,10 @@ /* eslint-disable @docusaurus/no-untranslated-text */ import React from 'react'; -import Layout from '@theme/Layout'; +import Head from '@docusaurus/Head'; import ErrorBoundary from '@docusaurus/ErrorBoundary'; +import Layout from '@theme/Layout'; import type {Props} from '@theme/Error'; -import Head from '@docusaurus/Head'; function ErrorDisplay({error, tryAgain}: Props): JSX.Element { return ( diff --git a/packages/docusaurus/src/client/theme-fallback/NotFound/index.tsx b/packages/docusaurus/src/client/theme-fallback/NotFound/index.tsx index 78f83dcc2c05c..b7d5ea8b39ea4 100644 --- a/packages/docusaurus/src/client/theme-fallback/NotFound/index.tsx +++ b/packages/docusaurus/src/client/theme-fallback/NotFound/index.tsx @@ -9,8 +9,8 @@ /* eslint-disable @docusaurus/no-untranslated-text */ import React from 'react'; -import Layout from '@theme/Layout'; import Head from '@docusaurus/Head'; +import Layout from '@theme/Layout'; export default function NotFound(): JSX.Element { return ( diff --git a/packages/docusaurus/src/commands/build.ts b/packages/docusaurus/src/commands/build.ts index 555cb76bd66b1..d13d7039fec50 100644 --- a/packages/docusaurus/src/commands/build.ts +++ b/packages/docusaurus/src/commands/build.ts @@ -5,18 +5,17 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; -import CopyWebpackPlugin from 'copy-webpack-plugin'; import fs from 'fs-extra'; import path from 'path'; +import logger from '@docusaurus/logger'; +import {mapAsyncSequential} from '@docusaurus/utils'; +import CopyWebpackPlugin from 'copy-webpack-plugin'; import ReactLoadableSSRAddon from 'react-loadable-ssr-addon-v5-slorber'; -import type {Configuration} from 'webpack'; import {BundleAnalyzerPlugin} from 'webpack-bundle-analyzer'; import merge from 'webpack-merge'; import {load, loadContext, type LoadContextOptions} from '../server'; import {handleBrokenLinks} from '../server/brokenLinks'; -import type {Props} from '@docusaurus/types'; import createClientConfig from '../webpack/client'; import createServerConfig from '../webpack/server'; import { @@ -26,8 +25,9 @@ import { } from '../webpack/utils'; import CleanWebpackPlugin from '../webpack/plugins/CleanWebpackPlugin'; import {loadI18n} from '../server/i18n'; -import {mapAsyncSequential} from '@docusaurus/utils'; import type {HelmetServerState} from 'react-helmet-async'; +import type {Configuration} from 'webpack'; +import type {Props} from '@docusaurus/types'; export type BuildCLIOptions = Pick< LoadContextOptions, diff --git a/packages/docusaurus/src/commands/deploy.ts b/packages/docusaurus/src/commands/deploy.ts index 485c3940049df..e35783ddb745e 100644 --- a/packages/docusaurus/src/commands/deploy.ts +++ b/packages/docusaurus/src/commands/deploy.ts @@ -6,13 +6,13 @@ */ import fs from 'fs-extra'; -import shell from 'shelljs'; +import path from 'path'; +import os from 'os'; import logger from '@docusaurus/logger'; +import shell from 'shelljs'; import {hasSSHProtocol, buildSshUrl, buildHttpsUrl} from '@docusaurus/utils'; import {loadContext, type LoadContextOptions} from '../server'; import {build} from './build'; -import path from 'path'; -import os from 'os'; export type DeployCLIOptions = Pick< LoadContextOptions, diff --git a/packages/docusaurus/src/commands/external.ts b/packages/docusaurus/src/commands/external.ts index eb8c1b94f26bf..2a9f67ee288bb 100644 --- a/packages/docusaurus/src/commands/external.ts +++ b/packages/docusaurus/src/commands/external.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {CommanderStatic} from 'commander'; import {loadContext} from '../server'; import {initPlugins} from '../server/plugins/init'; +import type {CommanderStatic} from 'commander'; export async function externalCommand( cli: CommanderStatic, diff --git a/packages/docusaurus/src/commands/serve.ts b/packages/docusaurus/src/commands/serve.ts index 044bd04ee6849..da94dc86678df 100644 --- a/packages/docusaurus/src/commands/serve.ts +++ b/packages/docusaurus/src/commands/serve.ts @@ -6,14 +6,14 @@ */ import http from 'http'; -import serveHandler from 'serve-handler'; -import logger from '@docusaurus/logger'; import path from 'path'; -import type {LoadContextOptions} from '../server'; +import logger from '@docusaurus/logger'; +import {DEFAULT_BUILD_DIR_NAME} from '@docusaurus/utils'; +import serveHandler from 'serve-handler'; import {loadSiteConfig} from '../server/config'; import {build} from './build'; import {getHostPort, type HostPortOptions} from '../server/getHostPort'; -import {DEFAULT_BUILD_DIR_NAME} from '@docusaurus/utils'; +import type {LoadContextOptions} from '../server'; export type ServeCLIOptions = HostPortOptions & Pick<LoadContextOptions, 'config'> & { diff --git a/packages/docusaurus/src/commands/start.ts b/packages/docusaurus/src/commands/start.ts index 8dee7788911b6..551bca65cc0e2 100644 --- a/packages/docusaurus/src/commands/start.ts +++ b/packages/docusaurus/src/commands/start.ts @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import {normalizeUrl, posixPath} from '@docusaurus/utils'; +import path from 'path'; +import _ from 'lodash'; import logger from '@docusaurus/logger'; +import {normalizeUrl, posixPath} from '@docusaurus/utils'; import chokidar from 'chokidar'; import HtmlWebpackPlugin from 'html-webpack-plugin'; -import path from 'path'; -import _ from 'lodash'; import openBrowser from 'react-dev-utils/openBrowser'; import {prepareUrls} from 'react-dev-utils/WebpackDevServerUtils'; import evalSourceMapMiddleware from 'react-dev-utils/evalSourceMapMiddleware'; diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/actions.test.ts.snap b/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/actions.test.ts.snap index 3483ffb8a487b..2608fd7671726 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/actions.test.ts.snap +++ b/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/actions.test.ts.snap @@ -44,8 +44,8 @@ export default function FirstLevelComponentWrapper(props) { exports[`wrap TypeScript wrap ComponentInFolder 2`] = ` "import React, {ComponentProps} from 'react'; -import type ComponentInFolderType from '@theme/ComponentInFolder'; import ComponentInFolder from '@theme-original/ComponentInFolder'; +import type ComponentInFolderType from '@theme/ComponentInFolder'; type Props = ComponentProps<typeof ComponentInFolderType>; @@ -61,8 +61,8 @@ export default function ComponentInFolderWrapper(props: Props): JSX.Element { exports[`wrap TypeScript wrap ComponentInFolder/ComponentInSubFolder 2`] = ` "import React, {ComponentProps} from 'react'; -import type ComponentInSubFolderType from '@theme/ComponentInFolder/ComponentInSubFolder'; import ComponentInSubFolder from '@theme-original/ComponentInFolder/ComponentInSubFolder'; +import type ComponentInSubFolderType from '@theme/ComponentInFolder/ComponentInSubFolder'; type Props = ComponentProps<typeof ComponentInSubFolderType>; @@ -78,8 +78,8 @@ export default function ComponentInSubFolderWrapper(props: Props): JSX.Element { exports[`wrap TypeScript wrap FirstLevelComponent 2`] = ` "import React, {ComponentProps} from 'react'; -import type FirstLevelComponentType from '@theme/FirstLevelComponent'; import FirstLevelComponent from '@theme-original/FirstLevelComponent'; +import type FirstLevelComponentType from '@theme/FirstLevelComponent'; type Props = ComponentProps<typeof FirstLevelComponentType>; diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/index.test.ts.snap index 84e98d772af69..a686e30fae350 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus/src/commands/swizzle/__tests__/__snapshots__/index.test.ts.snap @@ -274,8 +274,8 @@ exports[`swizzle wrap ComponentInFolder JS: theme dir tree 1`] = ` exports[`swizzle wrap ComponentInFolder TS: ComponentInFolder/index.tsx 1`] = ` "import React, {ComponentProps} from 'react'; -import type ComponentInFolderType from '@theme/ComponentInFolder'; import ComponentInFolder from '@theme-original/ComponentInFolder'; +import type ComponentInFolderType from '@theme/ComponentInFolder'; type Props = ComponentProps<typeof ComponentInFolderType>; @@ -318,8 +318,8 @@ exports[`swizzle wrap ComponentInFolder/ComponentInSubFolder JS: theme dir tree exports[`swizzle wrap ComponentInFolder/ComponentInSubFolder TS: ComponentInFolder/ComponentInSubFolder/index.tsx 1`] = ` "import React, {ComponentProps} from 'react'; -import type ComponentInSubFolderType from '@theme/ComponentInFolder/ComponentInSubFolder'; import ComponentInSubFolder from '@theme-original/ComponentInFolder/ComponentInSubFolder'; +import type ComponentInSubFolderType from '@theme/ComponentInFolder/ComponentInSubFolder'; type Props = ComponentProps<typeof ComponentInSubFolderType>; @@ -362,8 +362,8 @@ exports[`swizzle wrap ComponentInFolder/Sibling JS: theme dir tree 1`] = ` exports[`swizzle wrap ComponentInFolder/Sibling TS: ComponentInFolder/Sibling.tsx 1`] = ` "import React, {ComponentProps} from 'react'; -import type SiblingType from '@theme/ComponentInFolder/Sibling'; import Sibling from '@theme-original/ComponentInFolder/Sibling'; +import type SiblingType from '@theme/ComponentInFolder/Sibling'; type Props = ComponentProps<typeof SiblingType>; @@ -404,8 +404,8 @@ exports[`swizzle wrap FirstLevelComponent JS: theme dir tree 1`] = ` exports[`swizzle wrap FirstLevelComponent TS: FirstLevelComponent.tsx 1`] = ` "import React, {ComponentProps} from 'react'; -import type FirstLevelComponentType from '@theme/FirstLevelComponent'; import FirstLevelComponent from '@theme-original/FirstLevelComponent'; +import type FirstLevelComponentType from '@theme/FirstLevelComponent'; type Props = ComponentProps<typeof FirstLevelComponentType>; diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/actions.test.ts b/packages/docusaurus/src/commands/swizzle/__tests__/actions.test.ts index d735210761605..d732805530850 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/actions.test.ts +++ b/packages/docusaurus/src/commands/swizzle/__tests__/actions.test.ts @@ -7,11 +7,11 @@ import path from 'path'; import fs from 'fs-extra'; -import {ThemePath, Components, createTempSiteDir} from './testUtils'; -import type {SwizzleAction} from '@docusaurus/types'; import tree from 'tree-node-cli'; -import {eject, wrap} from '../actions'; import {posixPath} from '@docusaurus/utils'; +import {eject, wrap} from '../actions'; +import {ThemePath, Components, createTempSiteDir} from './testUtils'; +import type {SwizzleAction} from '@docusaurus/types'; // Use relative paths and sort files for tests function stableCreatedFiles( diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/components.test.ts b/packages/docusaurus/src/commands/swizzle/__tests__/components.test.ts index eb0b284457086..c16a7a0d619ad 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/components.test.ts +++ b/packages/docusaurus/src/commands/swizzle/__tests__/components.test.ts @@ -7,8 +7,8 @@ import path from 'path'; import {getThemeComponents, readComponentNames} from '../components'; -import type {SwizzleConfig} from '@docusaurus/types'; import {Components} from './testUtils'; +import type {SwizzleConfig} from '@docusaurus/types'; const FixtureThemePath = path.join(__dirname, '__fixtures__/theme'); diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/config.test.ts b/packages/docusaurus/src/commands/swizzle/__tests__/config.test.ts index 7dd867a082703..cb924a626ffcc 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/config.test.ts +++ b/packages/docusaurus/src/commands/swizzle/__tests__/config.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {SwizzleConfig} from '@docusaurus/types'; import {normalizeSwizzleConfig} from '../config'; +import type {SwizzleConfig} from '@docusaurus/types'; describe('normalizeSwizzleConfig', () => { it(`validate no components config`, async () => { diff --git a/packages/docusaurus/src/commands/swizzle/__tests__/index.test.ts b/packages/docusaurus/src/commands/swizzle/__tests__/index.test.ts index 0f55edac837dd..c2317cb41c227 100644 --- a/packages/docusaurus/src/commands/swizzle/__tests__/index.test.ts +++ b/packages/docusaurus/src/commands/swizzle/__tests__/index.test.ts @@ -8,10 +8,10 @@ import {jest} from '@jest/globals'; import path from 'path'; import fs from 'fs-extra'; -import {ThemePath, createTempSiteDir, Components} from './testUtils'; import tree from 'tree-node-cli'; -import {swizzle} from '../index'; import {escapePath, Globby, posixPath} from '@docusaurus/utils'; +import {ThemePath, createTempSiteDir, Components} from './testUtils'; +import {swizzle} from '../index'; const FixtureThemeName = 'fixture-theme-name'; diff --git a/packages/docusaurus/src/commands/swizzle/actions.ts b/packages/docusaurus/src/commands/swizzle/actions.ts index d6be9f9027310..e295f8c2bd2dc 100644 --- a/packages/docusaurus/src/commands/swizzle/actions.ts +++ b/packages/docusaurus/src/commands/swizzle/actions.ts @@ -5,14 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import fs from 'fs-extra'; import path from 'path'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; import {Globby, posixPath, THEME_PATH} from '@docusaurus/utils'; +import {askSwizzleAction} from './prompts'; import type {SwizzleAction, SwizzleComponentConfig} from '@docusaurus/types'; import type {SwizzleCLIOptions} from './common'; -import {askSwizzleAction} from './prompts'; export const SwizzleActions: SwizzleAction[] = ['wrap', 'eject']; @@ -122,8 +122,8 @@ export async function wrap({ const content = typescript ? `import React, {ComponentProps} from 'react'; -import type ${componentName}Type from '@theme/${themeComponentName}'; import ${componentName} from '@theme-${importType}/${themeComponentName}'; +import type ${componentName}Type from '@theme/${themeComponentName}'; type Props = ComponentProps<typeof ${componentName}Type>; diff --git a/packages/docusaurus/src/commands/swizzle/common.ts b/packages/docusaurus/src/commands/swizzle/common.ts index 4fdf01e4f2a0a..fad472d6b1409 100644 --- a/packages/docusaurus/src/commands/swizzle/common.ts +++ b/packages/docusaurus/src/commands/swizzle/common.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import leven from 'leven'; import _ from 'lodash'; import logger from '@docusaurus/logger'; +import leven from 'leven'; import type {NormalizedPluginConfig} from '../../server/plugins/configs'; import type { InitializedPlugin, diff --git a/packages/docusaurus/src/commands/swizzle/components.ts b/packages/docusaurus/src/commands/swizzle/components.ts index f9dc0d7beb81c..9475ce33dbc97 100644 --- a/packages/docusaurus/src/commands/swizzle/components.ts +++ b/packages/docusaurus/src/commands/swizzle/components.ts @@ -5,21 +5,21 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import fs from 'fs-extra'; import path from 'path'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import {posixPath} from '@docusaurus/utils'; +import {askComponentName} from './prompts'; +import {findClosestValue, findStringIgnoringCase} from './common'; +import {helpTables, themeComponentsTable} from './tables'; +import {SwizzleActions} from './actions'; import type { SwizzleAction, SwizzleActionStatus, SwizzleComponentConfig, SwizzleConfig, } from '@docusaurus/types'; -import {posixPath} from '@docusaurus/utils'; -import {askComponentName} from './prompts'; -import {findClosestValue, findStringIgnoringCase} from './common'; -import {helpTables, themeComponentsTable} from './tables'; -import {SwizzleActions} from './actions'; export type ThemeComponents = { themeName: string; diff --git a/packages/docusaurus/src/commands/swizzle/config.ts b/packages/docusaurus/src/commands/swizzle/config.ts index f62b0ad7959ec..83f0bbe751011 100644 --- a/packages/docusaurus/src/commands/swizzle/config.ts +++ b/packages/docusaurus/src/commands/swizzle/config.ts @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ +import logger from '@docusaurus/logger'; import {Joi} from '@docusaurus/utils-validation'; -import type {SwizzleComponentConfig, SwizzleConfig} from '@docusaurus/types'; -import type {SwizzlePlugin} from './common'; import {SwizzleActions, SwizzleActionsStatuses} from './common'; import {getPluginByThemeName} from './themes'; -import logger from '@docusaurus/logger'; +import type {SwizzleComponentConfig, SwizzleConfig} from '@docusaurus/types'; +import type {SwizzlePlugin} from './common'; function getModuleSwizzleConfig( swizzlePlugin: SwizzlePlugin, diff --git a/packages/docusaurus/src/commands/swizzle/index.ts b/packages/docusaurus/src/commands/swizzle/index.ts index 0d13d7387aab9..9262e7d154f16 100644 --- a/packages/docusaurus/src/commands/swizzle/index.ts +++ b/packages/docusaurus/src/commands/swizzle/index.ts @@ -9,14 +9,14 @@ import logger from '@docusaurus/logger'; import {getThemeName, getThemePath, getThemeNames} from './themes'; import {getThemeComponents, getComponentName} from './components'; import {helpTables, themeComponentsTable} from './tables'; -import type {SwizzleAction, SwizzleComponentConfig} from '@docusaurus/types'; -import type {SwizzleCLIOptions, SwizzlePlugin} from './common'; import {normalizeOptions} from './common'; -import type {ActionResult} from './actions'; import {eject, getAction, wrap} from './actions'; import {getThemeSwizzleConfig} from './config'; import {askSwizzleDangerousComponent} from './prompts'; import {initSwizzleContext} from './context'; +import type {SwizzleAction, SwizzleComponentConfig} from '@docusaurus/types'; +import type {SwizzleCLIOptions, SwizzlePlugin} from './common'; +import type {ActionResult} from './actions'; async function listAllThemeComponents({ themeNames, diff --git a/packages/docusaurus/src/commands/swizzle/prompts.ts b/packages/docusaurus/src/commands/swizzle/prompts.ts index fb6ab4f13db98..6aa1d1e0e9f6a 100644 --- a/packages/docusaurus/src/commands/swizzle/prompts.ts +++ b/packages/docusaurus/src/commands/swizzle/prompts.ts @@ -7,9 +7,9 @@ import logger from '@docusaurus/logger'; import prompts from 'prompts'; +import {actionStatusSuffix, PartiallySafeHint} from './common'; import type {ThemeComponents} from './components'; import type {SwizzleAction, SwizzleComponentConfig} from '@docusaurus/types'; -import {actionStatusSuffix, PartiallySafeHint} from './common'; const ExitTitle = logger.yellow('[Exit]'); diff --git a/packages/docusaurus/src/commands/swizzle/tables.ts b/packages/docusaurus/src/commands/swizzle/tables.ts index 28b9b5188b420..73ccf077d865c 100644 --- a/packages/docusaurus/src/commands/swizzle/tables.ts +++ b/packages/docusaurus/src/commands/swizzle/tables.ts @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import logger from '@docusaurus/logger'; import Table from 'cli-table3'; -import _ from 'lodash'; -import type {ThemeComponents} from './components'; import {SwizzleActions} from './actions'; -import type {SwizzleActionStatus} from '@docusaurus/types'; import {actionStatusColor, actionStatusLabel} from './common'; +import type {SwizzleActionStatus} from '@docusaurus/types'; +import type {ThemeComponents} from './components'; function tableStatusLabel(status: SwizzleActionStatus): string { return actionStatusColor(status, actionStatusLabel(status)); diff --git a/packages/docusaurus/src/commands/swizzle/themes.ts b/packages/docusaurus/src/commands/swizzle/themes.ts index 49381089dd18f..c31b0f28dd8bc 100644 --- a/packages/docusaurus/src/commands/swizzle/themes.ts +++ b/packages/docusaurus/src/commands/swizzle/themes.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import path from 'path'; -import leven from 'leven'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; +import leven from 'leven'; import {askThemeName} from './prompts'; import {findStringIgnoringCase, type SwizzlePlugin} from './common'; diff --git a/packages/docusaurus/src/commands/writeTranslations.ts b/packages/docusaurus/src/commands/writeTranslations.ts index 606c8447d6982..14ae1e64adc6b 100644 --- a/packages/docusaurus/src/commands/writeTranslations.ts +++ b/packages/docusaurus/src/commands/writeTranslations.ts @@ -5,11 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {InitializedPlugin} from '@docusaurus/types'; import path from 'path'; import {loadContext, type LoadContextOptions} from '../server'; import {initPlugins} from '../server/plugins/init'; - import { writePluginTranslations, writeCodeTranslations, @@ -22,6 +20,7 @@ import { globSourceCodeFilePaths, } from '../server/translations/translationsExtractor'; import {getCustomBabelConfigFilePath, getBabelOptions} from '../webpack/utils'; +import type {InitializedPlugin} from '@docusaurus/types'; export type WriteTranslationsCLIOptions = Pick< LoadContextOptions, diff --git a/packages/docusaurus/src/server/__tests__/siteMetadata.test.ts b/packages/docusaurus/src/server/__tests__/siteMetadata.test.ts index d33e301382be0..30a40bb7521df 100644 --- a/packages/docusaurus/src/server/__tests__/siteMetadata.test.ts +++ b/packages/docusaurus/src/server/__tests__/siteMetadata.test.ts @@ -6,8 +6,8 @@ */ import {jest} from '@jest/globals'; -import {getPluginVersion, loadSiteMetadata} from '../siteMetadata'; import path from 'path'; +import {getPluginVersion, loadSiteMetadata} from '../siteMetadata'; describe('getPluginVersion', () => { it('detects external packages plugins versions', async () => { diff --git a/packages/docusaurus/src/server/__tests__/utils.test.ts b/packages/docusaurus/src/server/__tests__/utils.test.ts index b8ef5b59faaa3..646657350522a 100644 --- a/packages/docusaurus/src/server/__tests__/utils.test.ts +++ b/packages/docusaurus/src/server/__tests__/utils.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {RouteConfig} from '@docusaurus/types'; import {getAllFinalRoutes} from '../utils'; +import type {RouteConfig} from '@docusaurus/types'; describe('getAllFinalRoutes', () => { it('gets final routes correctly', () => { diff --git a/packages/docusaurus/src/server/brokenLinks.ts b/packages/docusaurus/src/server/brokenLinks.ts index 4ce32b2deaf54..22f466772de56 100644 --- a/packages/docusaurus/src/server/brokenLinks.ts +++ b/packages/docusaurus/src/server/brokenLinks.ts @@ -5,10 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import {matchRoutes} from 'react-router-config'; import fs from 'fs-extra'; +import path from 'path'; import _ from 'lodash'; -import type {RouteConfig, ReportingSeverity} from '@docusaurus/types'; +import logger from '@docusaurus/logger'; +import combinePromises from 'combine-promises'; +import {matchRoutes} from 'react-router-config'; import { removePrefix, removeSuffix, @@ -16,9 +18,7 @@ import { resolvePathname, } from '@docusaurus/utils'; import {getAllFinalRoutes} from './utils'; -import path from 'path'; -import combinePromises from 'combine-promises'; -import logger from '@docusaurus/logger'; +import type {RouteConfig, ReportingSeverity} from '@docusaurus/types'; type BrokenLink = { link: string; diff --git a/packages/docusaurus/src/server/config.ts b/packages/docusaurus/src/server/config.ts index 84b4975f12495..13ab71215c257 100644 --- a/packages/docusaurus/src/server/config.ts +++ b/packages/docusaurus/src/server/config.ts @@ -9,8 +9,8 @@ import path from 'path'; import fs from 'fs-extra'; import importFresh from 'import-fresh'; import {DEFAULT_CONFIG_FILE_NAME} from '@docusaurus/utils'; -import type {LoadContext} from '@docusaurus/types'; import {validateConfig} from './configValidation'; +import type {LoadContext} from '@docusaurus/types'; export async function loadSiteConfig({ siteDir, diff --git a/packages/docusaurus/src/server/configValidation.ts b/packages/docusaurus/src/server/configValidation.ts index f8a0985903a86..d1c009ae66dd7 100644 --- a/packages/docusaurus/src/server/configValidation.ts +++ b/packages/docusaurus/src/server/configValidation.ts @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import type {DocusaurusConfig, I18nConfig} from '@docusaurus/types'; import { DEFAULT_CONFIG_FILE_NAME, DEFAULT_STATIC_DIR_NAME, } from '@docusaurus/utils'; import {Joi, URISchema, printWarning} from '@docusaurus/utils-validation'; +import type {DocusaurusConfig, I18nConfig} from '@docusaurus/types'; const DEFAULT_I18N_LOCALE = 'en'; diff --git a/packages/docusaurus/src/server/getHostPort.ts b/packages/docusaurus/src/server/getHostPort.ts index c9792a45ec653..40960bdfff9ac 100644 --- a/packages/docusaurus/src/server/getHostPort.ts +++ b/packages/docusaurus/src/server/getHostPort.ts @@ -6,8 +6,8 @@ */ import {execSync, type ExecSyncOptionsWithStringEncoding} from 'child_process'; -import detect from 'detect-port'; import logger from '@docusaurus/logger'; +import detect from 'detect-port'; import {DEFAULT_PORT} from '@docusaurus/utils'; import prompts from 'prompts'; diff --git a/packages/docusaurus/src/server/htmlTags.ts b/packages/docusaurus/src/server/htmlTags.ts index c1e67b23c191b..81cce416352ac 100644 --- a/packages/docusaurus/src/server/htmlTags.ts +++ b/packages/docusaurus/src/server/htmlTags.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import _ from 'lodash'; import htmlTags from 'html-tags'; import voidHtmlTags from 'html-tags/void'; import escapeHTML from 'escape-html'; -import _ from 'lodash'; import type { Props, HtmlTagObject, diff --git a/packages/docusaurus/src/server/i18n.ts b/packages/docusaurus/src/server/i18n.ts index 57f639c14098c..cd9bbe4990ea5 100644 --- a/packages/docusaurus/src/server/i18n.ts +++ b/packages/docusaurus/src/server/i18n.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import {getLangDir} from 'rtl-detect'; import logger from '@docusaurus/logger'; +import {getLangDir} from 'rtl-detect'; import type {I18n, DocusaurusConfig, I18nLocaleConfig} from '@docusaurus/types'; import type {LoadContextOptions} from './index'; diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index 55b2466d11c94..4417f0f7f5155 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import path from 'path'; +import _ from 'lodash'; import { generate, escapePath, @@ -13,8 +15,6 @@ import { DEFAULT_CONFIG_FILE_NAME, GENERATED_FILES_DIR_NAME, } from '@docusaurus/utils'; -import _ from 'lodash'; -import path from 'path'; import {loadSiteConfig} from './config'; import {loadClientModules} from './clientModules'; import {loadPlugins} from './plugins'; diff --git a/packages/docusaurus/src/server/plugins/__tests__/pluginIds.test.ts b/packages/docusaurus/src/server/plugins/__tests__/pluginIds.test.ts index 0c04a3fc03bdc..a6315f59a813d 100644 --- a/packages/docusaurus/src/server/plugins/__tests__/pluginIds.test.ts +++ b/packages/docusaurus/src/server/plugins/__tests__/pluginIds.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {InitializedPlugin} from '@docusaurus/types'; import {ensureUniquePluginInstanceIds} from '../pluginIds'; +import type {InitializedPlugin} from '@docusaurus/types'; function createTestPlugin(name: string, id?: string): InitializedPlugin { // @ts-expect-error: good enough for tests diff --git a/packages/docusaurus/src/server/plugins/index.ts b/packages/docusaurus/src/server/plugins/index.ts index 93553d18202d7..812ea7b2e80ed 100644 --- a/packages/docusaurus/src/server/plugins/index.ts +++ b/packages/docusaurus/src/server/plugins/index.ts @@ -5,8 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -import {docuHash, generate} from '@docusaurus/utils'; import path from 'path'; +import _ from 'lodash'; +import {docuHash, generate} from '@docusaurus/utils'; +import {initPlugins} from './init'; +import {createBootstrapPlugin, createMDXFallbackPlugin} from './synthetic'; +import {localizePluginTranslationFile} from '../translations/translations'; +import {applyRouteTrailingSlash, sortConfig} from './routeConfig'; import type { LoadContext, PluginContentLoadedActions, @@ -17,11 +22,6 @@ import type { InitializedPlugin, PluginRouteContext, } from '@docusaurus/types'; -import {initPlugins} from './init'; -import {createBootstrapPlugin, createMDXFallbackPlugin} from './synthetic'; -import _ from 'lodash'; -import {localizePluginTranslationFile} from '../translations/translations'; -import {applyRouteTrailingSlash, sortConfig} from './routeConfig'; /** * Initializes the plugins, runs `loadContent`, `translateContent`, diff --git a/packages/docusaurus/src/server/plugins/init.ts b/packages/docusaurus/src/server/plugins/init.ts index 4bc0aa92da425..771a407cccb5e 100644 --- a/packages/docusaurus/src/server/plugins/init.ts +++ b/packages/docusaurus/src/server/plugins/init.ts @@ -7,6 +7,14 @@ import {createRequire} from 'module'; import path from 'path'; +import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; +import { + normalizePluginOptions, + normalizeThemeConfig, +} from '@docusaurus/utils-validation'; +import {getPluginVersion} from '../siteMetadata'; +import {ensureUniquePluginInstanceIds} from './pluginIds'; +import {loadPluginConfigs, type NormalizedPluginConfig} from './configs'; import type { PluginVersionInformation, LoadContext, @@ -14,14 +22,6 @@ import type { PluginOptions, InitializedPlugin, } from '@docusaurus/types'; -import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils'; -import {getPluginVersion} from '../siteMetadata'; -import {ensureUniquePluginInstanceIds} from './pluginIds'; -import { - normalizePluginOptions, - normalizeThemeConfig, -} from '@docusaurus/utils-validation'; -import {loadPluginConfigs, type NormalizedPluginConfig} from './configs'; function getOptionValidationFunction( normalizedPluginConfig: NormalizedPluginConfig, diff --git a/packages/docusaurus/src/server/plugins/presets.ts b/packages/docusaurus/src/server/plugins/presets.ts index b45b06915b212..04b73357f38f0 100644 --- a/packages/docusaurus/src/server/plugins/presets.ts +++ b/packages/docusaurus/src/server/plugins/presets.ts @@ -7,13 +7,13 @@ import {createRequire} from 'module'; import importFresh from 'import-fresh'; +import {resolveModuleName} from './moduleShorthand'; import type { LoadContext, PluginConfig, PresetModule, DocusaurusConfig, } from '@docusaurus/types'; -import {resolveModuleName} from './moduleShorthand'; type ImportedPresetModule = PresetModule & {default?: PresetModule}; diff --git a/packages/docusaurus/src/server/plugins/routeConfig.ts b/packages/docusaurus/src/server/plugins/routeConfig.ts index e5664dd1693fa..e9b7c589408f1 100644 --- a/packages/docusaurus/src/server/plugins/routeConfig.ts +++ b/packages/docusaurus/src/server/plugins/routeConfig.ts @@ -5,11 +5,11 @@ * LICENSE file in the root directory of this source tree. */ -import type {RouteConfig} from '@docusaurus/types'; import { applyTrailingSlash, type ApplyTrailingSlashParams, } from '@docusaurus/utils-common'; +import type {RouteConfig} from '@docusaurus/types'; /** Recursively applies trailing slash config to all nested routes. */ export function applyRouteTrailingSlash( diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 87cfedf87a825..ab97b1a7b9d78 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import query from 'querystring'; +import _ from 'lodash'; import { docuHash, normalizeUrl, @@ -12,8 +14,6 @@ import { escapePath, reportMessage, } from '@docusaurus/utils'; -import _ from 'lodash'; -import query from 'querystring'; import {getAllFinalRoutes} from './utils'; import type { Module, diff --git a/packages/docusaurus/src/server/siteMetadata.ts b/packages/docusaurus/src/server/siteMetadata.ts index bde32ad967c3a..b442eed152927 100644 --- a/packages/docusaurus/src/server/siteMetadata.ts +++ b/packages/docusaurus/src/server/siteMetadata.ts @@ -5,15 +5,15 @@ * LICENSE file in the root directory of this source tree. */ +import fs from 'fs-extra'; +import path from 'path'; +import logger from '@docusaurus/logger'; +import {DOCUSAURUS_VERSION} from '@docusaurus/utils'; import type { LoadedPlugin, PluginVersionInformation, SiteMetadata, } from '@docusaurus/types'; -import {DOCUSAURUS_VERSION} from '@docusaurus/utils'; -import fs from 'fs-extra'; -import path from 'path'; -import logger from '@docusaurus/logger'; async function getPackageJsonVersion( packageJsonPath: string, diff --git a/packages/docusaurus/src/server/translations/__tests__/translations.test.ts b/packages/docusaurus/src/server/translations/__tests__/translations.test.ts index 89240e3ea05eb..f34318cd47074 100644 --- a/packages/docusaurus/src/server/translations/__tests__/translations.test.ts +++ b/packages/docusaurus/src/server/translations/__tests__/translations.test.ts @@ -6,6 +6,9 @@ */ import {jest} from '@jest/globals'; +import fs from 'fs-extra'; +import path from 'path'; +import tmp from 'tmp-promise'; import { writePluginTranslations, writeCodeTranslations, @@ -15,14 +18,11 @@ import { getPluginsDefaultCodeTranslationMessages, applyDefaultCodeTranslations, } from '../translations'; -import fs from 'fs-extra'; -import tmp from 'tmp-promise'; import type { InitializedPlugin, TranslationFile, TranslationFileContent, } from '@docusaurus/types'; -import path from 'path'; async function createTmpSiteDir() { const {path: siteDirPath} = await tmp.dir({ diff --git a/packages/docusaurus/src/server/translations/__tests__/translationsExtractor.test.ts b/packages/docusaurus/src/server/translations/__tests__/translationsExtractor.test.ts index 5b80021d70432..e06bc5f57d1fd 100644 --- a/packages/docusaurus/src/server/translations/__tests__/translationsExtractor.test.ts +++ b/packages/docusaurus/src/server/translations/__tests__/translationsExtractor.test.ts @@ -6,16 +6,16 @@ */ import {jest} from '@jest/globals'; +import path from 'path'; import fs from 'fs-extra'; import tmp from 'tmp-promise'; +import {SRC_DIR_NAME} from '@docusaurus/utils'; import { extractSourceCodeFileTranslations, extractSiteSourceCodeTranslations, } from '../translationsExtractor'; import {getBabelOptions} from '../../../webpack/utils'; -import path from 'path'; import type {InitializedPlugin} from '@docusaurus/types'; -import {SRC_DIR_NAME} from '@docusaurus/utils'; const TestBabelOptions = getBabelOptions({ isServer: true, diff --git a/packages/docusaurus/src/server/translations/translations.ts b/packages/docusaurus/src/server/translations/translations.ts index 3e768b8a9041f..fcbe5f5e11846 100644 --- a/packages/docusaurus/src/server/translations/translations.ts +++ b/packages/docusaurus/src/server/translations/translations.ts @@ -8,6 +8,7 @@ import path from 'path'; import fs from 'fs-extra'; import _ from 'lodash'; +import logger from '@docusaurus/logger'; import { getPluginI18nPath, toMessageRelativeFilePath, @@ -15,7 +16,6 @@ import { CODE_TRANSLATIONS_FILE_NAME, } from '@docusaurus/utils'; import {Joi} from '@docusaurus/utils-validation'; -import logger from '@docusaurus/logger'; import type { TranslationFileContent, TranslationFile, diff --git a/packages/docusaurus/src/server/translations/translationsExtractor.ts b/packages/docusaurus/src/server/translations/translationsExtractor.ts index 73a1a0cbfe7c0..569c3314b1128 100644 --- a/packages/docusaurus/src/server/translations/translationsExtractor.ts +++ b/packages/docusaurus/src/server/translations/translationsExtractor.ts @@ -5,23 +5,23 @@ * LICENSE file in the root directory of this source tree. */ +import nodePath from 'path'; import fs from 'fs-extra'; +import logger from '@docusaurus/logger'; import traverse, {type Node} from '@babel/traverse'; import generate from '@babel/generator'; -import logger from '@docusaurus/logger'; import { parse, type types as t, type NodePath, type TransformOptions, } from '@babel/core'; +import {SRC_DIR_NAME} from '@docusaurus/utils'; +import {safeGlobby} from '../utils'; import type { InitializedPlugin, TranslationFileContent, } from '@docusaurus/types'; -import nodePath from 'path'; -import {SRC_DIR_NAME} from '@docusaurus/utils'; -import {safeGlobby} from '../utils'; // We only support extracting source code translations from these kind of files const TranslatableSourceCodeExtension = new Set([ diff --git a/packages/docusaurus/src/server/utils.ts b/packages/docusaurus/src/server/utils.ts index e4e22df7d9daf..e0e67454c7ea5 100644 --- a/packages/docusaurus/src/server/utils.ts +++ b/packages/docusaurus/src/server/utils.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import type {RouteConfig} from '@docusaurus/types'; import path from 'path'; import {posixPath, Globby} from '@docusaurus/utils'; +import type {RouteConfig} from '@docusaurus/types'; // Recursively get the final routes (routes with no subroutes) export function getAllFinalRoutes(routeConfig: RouteConfig[]): RouteConfig[] { diff --git a/packages/docusaurus/src/webpack/__tests__/base.test.ts b/packages/docusaurus/src/webpack/__tests__/base.test.ts index 93b1de8c19d83..3e39adfda4355 100644 --- a/packages/docusaurus/src/webpack/__tests__/base.test.ts +++ b/packages/docusaurus/src/webpack/__tests__/base.test.ts @@ -7,11 +7,10 @@ import {jest} from '@jest/globals'; import path from 'path'; - -import {excludeJS, clientDir, createBaseConfig} from '../base'; +import _ from 'lodash'; import * as utils from '@docusaurus/utils/lib/webpackUtils'; import {posixPath} from '@docusaurus/utils'; -import _ from 'lodash'; +import {excludeJS, clientDir, createBaseConfig} from '../base'; import type {Props} from '@docusaurus/types'; describe('babel transpilation exclude logic', () => { diff --git a/packages/docusaurus/src/webpack/__tests__/utils.test.ts b/packages/docusaurus/src/webpack/__tests__/utils.test.ts index 664679e3f6895..411ed9180469e 100644 --- a/packages/docusaurus/src/webpack/__tests__/utils.test.ts +++ b/packages/docusaurus/src/webpack/__tests__/utils.test.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import webpack, {type Configuration, type RuleSetRule} from 'webpack'; import path from 'path'; +import webpack, {type Configuration, type RuleSetRule} from 'webpack'; import { getCustomizableJSLoader, diff --git a/packages/docusaurus/src/webpack/aliases/index.ts b/packages/docusaurus/src/webpack/aliases/index.ts index b48184b8ab8b3..dbade3a77e368 100644 --- a/packages/docusaurus/src/webpack/aliases/index.ts +++ b/packages/docusaurus/src/webpack/aliases/index.ts @@ -7,6 +7,7 @@ import fs from 'fs-extra'; import path from 'path'; +import _ from 'lodash'; import { THEME_PATH, fileToPath, @@ -14,7 +15,6 @@ import { normalizeUrl, Globby, } from '@docusaurus/utils'; -import _ from 'lodash'; import type {LoadedPlugin} from '@docusaurus/types'; /** diff --git a/packages/docusaurus/src/webpack/base.ts b/packages/docusaurus/src/webpack/base.ts index 45a81c1031a45..4e00fecefaf1f 100644 --- a/packages/docusaurus/src/webpack/base.ts +++ b/packages/docusaurus/src/webpack/base.ts @@ -6,10 +6,9 @@ */ import fs from 'fs-extra'; -import MiniCssExtractPlugin from 'mini-css-extract-plugin'; import path from 'path'; -import type {Configuration} from 'webpack'; -import type {Props} from '@docusaurus/types'; +import MiniCssExtractPlugin from 'mini-css-extract-plugin'; +import {md5Hash, getFileLoaderUtils} from '@docusaurus/utils'; import { getCustomizableJSLoader, getStyleLoaders, @@ -17,7 +16,8 @@ import { getMinimizer, } from './utils'; import {loadThemeAliases, loadDocusaurusAliases} from './aliases'; -import {md5Hash, getFileLoaderUtils} from '@docusaurus/utils'; +import type {Configuration} from 'webpack'; +import type {Props} from '@docusaurus/types'; const CSS_REGEX = /\.css$/i; const CSS_MODULE_REGEX = /\.module\.css$/i; diff --git a/packages/docusaurus/src/webpack/client.ts b/packages/docusaurus/src/webpack/client.ts index f7ca7de770b25..cd2d59720a324 100644 --- a/packages/docusaurus/src/webpack/client.ts +++ b/packages/docusaurus/src/webpack/client.ts @@ -5,15 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import path from 'path'; -import type {Configuration} from 'webpack'; +import logger from '@docusaurus/logger'; import merge from 'webpack-merge'; - -import type {Props} from '@docusaurus/types'; import {createBaseConfig} from './base'; import ChunkAssetPlugin from './plugins/ChunkAssetPlugin'; import LogPlugin from './plugins/LogPlugin'; +import type {Props} from '@docusaurus/types'; +import type {Configuration} from 'webpack'; export default async function createClientConfig( props: Props, diff --git a/packages/docusaurus/src/webpack/plugins/CleanWebpackPlugin.ts b/packages/docusaurus/src/webpack/plugins/CleanWebpackPlugin.ts index 46b4ca424fde2..5a8f4770102a2 100644 --- a/packages/docusaurus/src/webpack/plugins/CleanWebpackPlugin.ts +++ b/packages/docusaurus/src/webpack/plugins/CleanWebpackPlugin.ts @@ -29,9 +29,9 @@ // Modified to optimize performance for Docusaurus specific use case // More context: https://github.com/facebook/docusaurus/pull/1839 -import type {Compiler, Stats} from 'webpack'; import path from 'path'; import {sync as delSync} from 'del'; +import type {Compiler, Stats} from 'webpack'; export type Options = { /** diff --git a/packages/docusaurus/src/webpack/plugins/LogPlugin.ts b/packages/docusaurus/src/webpack/plugins/LogPlugin.ts index e8e79b0080576..a1703d2bcac6d 100644 --- a/packages/docusaurus/src/webpack/plugins/LogPlugin.ts +++ b/packages/docusaurus/src/webpack/plugins/LogPlugin.ts @@ -6,8 +6,8 @@ */ import WebpackBar from 'webpackbar'; -import type {Compiler} from 'webpack'; import formatWebpackMessages from 'react-dev-utils/formatWebpackMessages'; +import type {Compiler} from 'webpack'; function showError(arr: string[]) { console.log(`\n\n${arr.join('\n')}`); diff --git a/packages/docusaurus/src/webpack/server.ts b/packages/docusaurus/src/webpack/server.ts index c0aab9ed99d9f..7f93c86a4bb97 100644 --- a/packages/docusaurus/src/webpack/server.ts +++ b/packages/docusaurus/src/webpack/server.ts @@ -6,24 +6,22 @@ */ import path from 'path'; -import type {Configuration} from 'webpack'; import merge from 'webpack-merge'; - -import type {Props} from '@docusaurus/types'; -import {createBaseConfig} from './base'; -import WaitPlugin from './plugins/WaitPlugin'; -import LogPlugin from './plugins/LogPlugin'; import { NODE_MAJOR_VERSION, NODE_MINOR_VERSION, DOCUSAURUS_VERSION, } from '@docusaurus/utils'; -import ssrDefaultTemplate from './templates/ssr.html.template'; - // Forked for Docusaurus: https://github.com/slorber/static-site-generator-webpack-plugin import StaticSiteGeneratorPlugin, { type Locals, } from '@slorber/static-site-generator-webpack-plugin'; +import {createBaseConfig} from './base'; +import WaitPlugin from './plugins/WaitPlugin'; +import LogPlugin from './plugins/LogPlugin'; +import ssrDefaultTemplate from './templates/ssr.html.template'; +import type {Props} from '@docusaurus/types'; +import type {Configuration} from 'webpack'; export default async function createServerConfig({ props, diff --git a/packages/docusaurus/src/webpack/utils.ts b/packages/docusaurus/src/webpack/utils.ts index 8f32ddc277030..79362887679ee 100644 --- a/packages/docusaurus/src/webpack/utils.ts +++ b/packages/docusaurus/src/webpack/utils.ts @@ -5,6 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import fs from 'fs-extra'; +import path from 'path'; +import crypto from 'crypto'; +import logger from '@docusaurus/logger'; +import {BABEL_CONFIG_FILE_NAME} from '@docusaurus/utils'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; import { mergeWithCustomize, @@ -16,20 +21,15 @@ import webpack, { type RuleSetRule, type WebpackPluginInstance, } from 'webpack'; -import fs from 'fs-extra'; import TerserPlugin from 'terser-webpack-plugin'; -import type {CustomOptions, CssNanoOptions} from 'css-minimizer-webpack-plugin'; import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; -import path from 'path'; -import crypto from 'crypto'; -import logger from '@docusaurus/logger'; +import type {CustomOptions, CssNanoOptions} from 'css-minimizer-webpack-plugin'; import type {TransformOptions} from '@babel/core'; import type { Plugin, PostCssOptions, ConfigureWebpackUtils, } from '@docusaurus/types'; -import {BABEL_CONFIG_FILE_NAME} from '@docusaurus/utils'; // Utility method to get style loaders export function getStyleLoaders( diff --git a/packages/docusaurus/tsconfig.client.json b/packages/docusaurus/tsconfig.client.json index 66613cf7c22d2..2741f3ca38909 100644 --- a/packages/docusaurus/tsconfig.client.json +++ b/packages/docusaurus/tsconfig.client.json @@ -1,13 +1,15 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, "incremental": true, - "lib": ["DOM", "ES2019"], + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "module": "esnext", - "tsBuildInfoFile": "./lib/client/.tsbuildinfo", - "rootDir": "src/client", - "outDir": "lib/client", - "jsx": "react-native" + "target": "esnext", + "rootDir": "src", + "outDir": "lib" }, - "include": ["src/client", "src/deps.d.ts"] + "include": ["src/client", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus/tsconfig.json b/packages/docusaurus/tsconfig.json index e467cc1955924..cf74f4e2b7a6f 100644 --- a/packages/docusaurus/tsconfig.json +++ b/packages/docusaurus/tsconfig.json @@ -1,10 +1,16 @@ -// For editor typechecking; includes bin { - "extends": "./tsconfig.server.json", + "extends": "../../tsconfig.json", + "references": [ + {"path": "./tsconfig.server.json"}, + {"path": "./tsconfig.client.json"} + ], "compilerOptions": { "noEmit": true, + "allowJs": true, + "checkJs": true, "rootDir": ".", "module": "esnext" }, - "include": ["src", "bin"] + "include": ["bin"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/docusaurus/tsconfig.server.json b/packages/docusaurus/tsconfig.server.json index cabe532baa267..f800ce6a5fe55 100644 --- a/packages/docusaurus/tsconfig.server.json +++ b/packages/docusaurus/tsconfig.server.json @@ -1,12 +1,14 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, + "composite": true, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", - "outDir": "lib", - "allowJs": true + "outDir": "lib" }, "include": ["src"], - "exclude": ["**/__tests__/**/*", "src/client"] + "exclude": ["src/client", "**/__tests__/**"] } diff --git a/packages/eslint-plugin/.npmignore b/packages/eslint-plugin/.npmignore index 5f1c98c31f641..733c0b46e93a2 100644 --- a/packages/eslint-plugin/.npmignore +++ b/packages/eslint-plugin/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index e7b1e4b58cfb8..5d7aed9712b1a 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -21,11 +21,11 @@ "build": "tsc" }, "dependencies": { - "@typescript-eslint/utils": "^5.23.0", + "@typescript-eslint/utils": "^5.24.0", "tslib": "^2.4.0" }, "devDependencies": { - "eslint-plugin-eslint-plugin": "^4.1.0" + "eslint-plugin-eslint-plugin": "^4.2.0" }, "peerDependencies": { "eslint": ">=6" diff --git a/packages/eslint-plugin/tsconfig.json b/packages/eslint-plugin/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/eslint-plugin/tsconfig.json +++ b/packages/eslint-plugin/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/lqip-loader/.npmignore b/packages/lqip-loader/.npmignore index ba8304029eb76..e4132af421720 100644 --- a/packages/lqip-loader/.npmignore +++ b/packages/lqip-loader/.npmignore @@ -1,5 +1,4 @@ -copyUntypedFiles.mjs -.tsbuildinfo +.tsbuildinfo* tsconfig* __tests__ diff --git a/packages/lqip-loader/src/lqip.ts b/packages/lqip-loader/src/lqip.ts index b6286872b44db..c26956f19e9c5 100644 --- a/packages/lqip-loader/src/lqip.ts +++ b/packages/lqip-loader/src/lqip.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import logger from '@docusaurus/logger'; import path from 'path'; +import logger from '@docusaurus/logger'; import sharp from 'sharp'; // eslint-disable-next-line @typescript-eslint/no-var-requires diff --git a/packages/lqip-loader/tsconfig.json b/packages/lqip-loader/tsconfig.json index f5902ba1089bc..80e43e9813efd 100644 --- a/packages/lqip-loader/tsconfig.json +++ b/packages/lqip-loader/tsconfig.json @@ -1,9 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": false, "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", "rootDir": "src", "outDir": "lib" - } + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] } diff --git a/packages/stylelint-copyright/index.js b/packages/stylelint-copyright/index.js deleted file mode 100644 index fdf2ab794ba9f..0000000000000 --- a/packages/stylelint-copyright/index.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const stylelint = require('stylelint'); - -const ruleName = 'docusaurus/copyright-header'; -const messages = stylelint.utils.ruleMessages(ruleName, { - rejected: 'Missing copyright in the header comment', -}); - -const plugin = stylelint.createPlugin( - ruleName, - (primaryOption, secondaryOption, context) => (root, result) => { - stylelint.utils.validateOptions( - result, - ruleName, - { - actual: primaryOption, - possible: [true, false], - }, - { - actual: secondaryOption, - possible: (v) => typeof v.header === 'string', - }, - ); - - if ( - root.first && - root.first.type === 'comment' && - root.first.source.start.column === 1 - ) { - const {text} = root.first; - if (text === secondaryOption.header) { - return; - } - } - if (context.fix) { - root.first?.before(`/*${secondaryOption.header}\n */`); - return; - } - - stylelint.utils.report({ - message: messages.rejected, - node: root, - result, - ruleName, - }); - }, -); - -module.exports = plugin; -module.exports.ruleName = ruleName; -module.exports.messages = messages; diff --git a/packages/stylelint-copyright/package.json b/packages/stylelint-copyright/package.json index c1e0c0a11af91..1afb9807cdd6c 100644 --- a/packages/stylelint-copyright/package.json +++ b/packages/stylelint-copyright/package.json @@ -2,14 +2,19 @@ "name": "stylelint-copyright", "version": "2.0.0-beta.20", "description": "Stylelint plugin to check CSS files for a copyright header.", - "main": "index.js", + "main": "lib/index.js", "license": "MIT", + "scripts": { + "build": "tsc", + "watch": "tsc --watch" + }, "repository": { "type": "git", "url": "https://github.com/facebook/docusaurus.git", "directory": "packages/stylelint-copyright" }, "dependencies": { - "stylelint": "^14.8.2" + "stylelint": "^14.8.2", + "tslib": "^2.4.0" } } diff --git a/packages/stylelint-copyright/__tests__/index.test.js b/packages/stylelint-copyright/src/__tests__/index.test.ts similarity index 81% rename from packages/stylelint-copyright/__tests__/index.test.js rename to packages/stylelint-copyright/src/__tests__/index.test.ts index 20de7dbae8f2e..f48b0499c67e6 100644 --- a/packages/stylelint-copyright/__tests__/index.test.js +++ b/packages/stylelint-copyright/src/__tests__/index.test.ts @@ -6,13 +6,21 @@ */ /* eslint-disable jest/no-conditional-expect */ -const stylelint = require('stylelint'); -const path = require('path'); -const rule = require('..'); +import path from 'path'; +import stylelint, {type LinterResult} from 'stylelint'; +import rule from '../index'; -const {ruleName, messages} = rule; +const {ruleName} = rule; -function getOutputCss(output) { +declare global { + namespace jest { + interface Matchers<R> { + toHaveMessage: () => R; + } + } +} + +function getOutputCss(output: LinterResult) { // eslint-disable-next-line no-underscore-dangle const result = output.results[0]._postcssResult; return result.root.toString(result.opts.syntax); @@ -97,6 +105,8 @@ function testStylelintRule(config, tests) { } return { + message: () => + 'Expected "reject" test case to not have a "message" property', pass: true, }; }, @@ -106,7 +116,7 @@ function testStylelintRule(config, tests) { testStylelintRule( { - plugins: [path.join(__dirname, '..')], + plugins: [path.join(__dirname, '../../lib/index.js')], rules: { [ruleName]: [true, {header: '*\n * Copyright'}], }, @@ -143,7 +153,8 @@ testStylelintRule( * Copyright */ .foo {}`, - message: messages.rejected, + message: + 'Missing copyright in the header comment (docusaurus/copyright-header)', line: 1, column: 1, }, @@ -154,7 +165,8 @@ testStylelintRule( * Copyright */ .foo {}`, - message: messages.rejected, + message: + 'Missing copyright in the header comment (docusaurus/copyright-header)', line: 1, column: 1, }, @@ -173,7 +185,8 @@ testStylelintRule( */ .foo {}`, - message: messages.rejected, + message: + 'Missing copyright in the header comment (docusaurus/copyright-header)', line: 1, column: 1, }, @@ -192,7 +205,8 @@ testStylelintRule( */ .foo {}`, - message: messages.rejected, + message: + 'Missing copyright in the header comment (docusaurus/copyright-header)', line: 1, column: 1, }, @@ -217,7 +231,8 @@ testStylelintRule( * Copyright */ .foo {}`, - message: messages.rejected, + message: + 'Missing copyright in the header comment (docusaurus/copyright-header)', line: 1, column: 1, }, diff --git a/packages/stylelint-copyright/src/index.ts b/packages/stylelint-copyright/src/index.ts new file mode 100644 index 0000000000000..a620d184d0a0c --- /dev/null +++ b/packages/stylelint-copyright/src/index.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import stylelint from 'stylelint'; + +const ruleName = 'docusaurus/copyright-header'; +const messages = stylelint.utils.ruleMessages(ruleName, { + rejected: 'Missing copyright in the header comment', +}); + +type SecondaryOption = {header?: string}; + +const plugin = stylelint.createPlugin( + ruleName, + (primaryOption: boolean, secondaryOption: SecondaryOption, context) => + (root, result) => { + stylelint.utils.validateOptions( + result, + ruleName, + { + actual: primaryOption, + possible: [true, false], + }, + { + actual: secondaryOption, + possible: (v) => typeof (v as SecondaryOption)?.header === 'string', + }, + ); + + if ( + root.first && + root.first.type === 'comment' && + root.first.source?.start?.column === 1 + ) { + const {text} = root.first; + if (text === secondaryOption.header) { + return; + } + } + if (context.fix) { + root.first?.before(`/*${secondaryOption.header}\n */`); + return; + } + + stylelint.utils.report({ + message: messages.rejected, + node: root, + result, + ruleName, + }); + }, +); + +export = plugin; diff --git a/packages/stylelint-copyright/tsconfig.json b/packages/stylelint-copyright/tsconfig.json new file mode 100644 index 0000000000000..80e43e9813efd --- /dev/null +++ b/packages/stylelint-copyright/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "module": "commonjs", + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src"], + "exclude": ["**/__tests__/**"] +} diff --git a/tsconfig.json b/tsconfig.json index cb10e8a5ccbc6..9b4ff3711eb33 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,13 +2,17 @@ "compilerOptions": { /* Emit */ "target": "ES2020", - "module": "commonjs", - "lib": ["ESNext", "DOM"], + "lib": ["ESNext"], "declaration": true, + // These two options will be selectively overridden in each project. + // Utility libraries will have source maps on, but plugins will not. "declarationMap": false, - "jsx": "react", + "sourceMap": false, + "jsx": "react-native", "importHelpers": true, "noEmitHelpers": true, + // Avoid accidentally using this config to build + "noEmit": true, /* Strict Type-Checking Options */ "allowUnreachableCode": false, @@ -44,5 +48,5 @@ "isolatedModules": true, "skipLibCheck": true // @types/webpack and webpack/types.d.ts are not the same thing }, - "exclude": ["node_modules", "**/__tests__/**/*", "**/lib/**/*"] + "exclude": ["node_modules", "**/lib/**/*"] } diff --git a/website/_dogfooding/_pages tests/error-boundary-tests.tsx b/website/_dogfooding/_pages tests/error-boundary-tests.tsx index a669c7f2afb36..100c7e6c0d2fd 100644 --- a/website/_dogfooding/_pages tests/error-boundary-tests.tsx +++ b/website/_dogfooding/_pages tests/error-boundary-tests.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import Layout from '@theme/Layout'; import Interpolate from '@docusaurus/Interpolate'; +import Layout from '@theme/Layout'; import ErrorBoundaryTestButton from '@site/src/components/ErrorBoundaryTestButton'; diff --git a/website/_dogfooding/_pages tests/link-tests.tsx b/website/_dogfooding/_pages tests/link-tests.tsx index d0afa2ef4f0a1..d1c7c448079c8 100644 --- a/website/_dogfooding/_pages tests/link-tests.tsx +++ b/website/_dogfooding/_pages tests/link-tests.tsx @@ -6,8 +6,8 @@ */ import React, {useRef} from 'react'; -import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; +import Layout from '@theme/Layout'; export default function LinkTest(): JSX.Element { const anchorRef = useRef<HTMLAnchorElement>(null); diff --git a/website/_dogfooding/testSwizzleThemeClassic.mjs b/website/_dogfooding/testSwizzleThemeClassic.mjs index b8b4a4cb1a762..ab75a7d1dafbb 100644 --- a/website/_dogfooding/testSwizzleThemeClassic.mjs +++ b/website/_dogfooding/testSwizzleThemeClassic.mjs @@ -31,7 +31,7 @@ const classicThemePathBase = path.join( const themePath = swizzleConfig ? path.join(classicThemePathBase, 'src/theme') - : path.join(classicThemePathBase, 'lib-next/theme'); + : path.join(classicThemePathBase, 'lib/theme'); const toPath = path.join(dirname, '_swizzle_theme_tests'); diff --git a/website/community/4-canary/Versions.tsx b/website/community/4-canary/Versions.tsx index 10e1fdd1ec25d..a36907b10cf43 100644 --- a/website/community/4-canary/Versions.tsx +++ b/website/community/4-canary/Versions.tsx @@ -8,8 +8,8 @@ import React, {useContext, useEffect, useState, type ReactNode} from 'react'; import {useDocsPreferredVersion} from '@docusaurus/theme-common'; import {useVersions} from '@docusaurus/plugin-content-docs/client'; -import CodeBlock from '@theme/CodeBlock'; import Translate from '@docusaurus/Translate'; +import CodeBlock from '@theme/CodeBlock'; type ContextValue = { name: string; diff --git a/website/docs/deployment.mdx b/website/docs/deployment.mdx index 9674693bce284..23ea588caf498 100644 --- a/website/docs/deployment.mdx +++ b/website/docs/deployment.mdx @@ -778,3 +778,7 @@ See [docs](https://docs.quantcdn.io/docs/cli/continuous-integration) and [blog]( ## Deploying to Cloudflare Pages {#deploying-to-cloudflare-pages} [Cloudflare Pages](https://pages.cloudflare.com/) is a Jamstack platform for frontend developers to collaborate and deploy websites. Get started within a few minutes by following [this article](https://dev.to/apidev234/deploying-docusaurus-to-cloudflare-pages-565g). + +## Deploying to Azure Static Web Apps {#deploying-to-azure-static-web-apps} + +[Azure Static Web Apps](https://docs.microsoft.com/en-us/azure/static-web-apps/overview) is a service that automatically builds and deploys full-stack web apps to Azure directly from the code repository, simplifying the developer experience for CI/CD. Static Web Apps separates the web application's static assets from its dynamic (API) endpoints. Static assets are served from globally-distributed content servers, making it faster for clients to retrieve files using servers nearby. Dynamic APIs are scaled with serverless architectures, using an event-driven functions-based approach that is more cost-effective and scales on demand. Get started in a few minutes by following [this step-by-step guide](https://dev.to/azure/11-share-content-with-docusaurus-azure-static-web-apps-30hc). diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 4c373b359cd16..27e3b73c556c7 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -7,14 +7,14 @@ // @ts-check const path = require('path'); -const versions = require('./versions.json'); const math = require('remark-math'); +const npm2yarn = require('@docusaurus/remark-plugin-npm2yarn'); +const versions = require('./versions.json'); const VersionsArchived = require('./versionsArchived.json'); const { dogfoodingPluginInstances, dogfoodingThemeInstances, } = require('./_dogfooding/dogfooding.config'); -const npm2yarn = require('@docusaurus/remark-plugin-npm2yarn'); const ArchivedVersionsDropdownItems = Object.entries(VersionsArchived).splice( 0, @@ -375,11 +375,7 @@ const config = { content: `⭐️ If you like Docusaurus, give it a star on <a target="_blank" rel="noopener noreferrer" href="https://github.com/facebook/docusaurus">GitHub</a> and follow us on <a target="_blank" rel="noopener noreferrer" href="https://twitter.com/docusaurus">Twitter ${TwitterSvg}</a>`, }, prism: { - // We need to load markdown again so that YAML is loaded before MD - // and the YAML front matter is highlighted correctly. - // TODO after we have forked prism-react-renderer, we should tweak the - // import order and fix it there - additionalLanguages: ['java', 'markdown', 'latex'], + additionalLanguages: ['java', 'latex'], magicComments: [ { className: 'theme-code-block-highlighted-line', diff --git a/website/package.json b/website/package.json index ee7a44bc87d4c..416bc81e47b1f 100644 --- a/website/package.json +++ b/website/package.json @@ -30,8 +30,7 @@ "netlify:crowdin:downloadTranslationsFailSafe": "yarn netlify:crowdin:wait && (yarn --cwd .. crowdin:download:website || echo 'Crowdin translation download failure (only internal PRs have access to the Crowdin env token)')", "netlify:crowdin:uploadSources": "yarn --cwd .. crowdin:upload:website", "netlify:test": "yarn netlify:build:deployPreview && npx --package netlify-cli netlify dev -- --debug", - "typecheck": "tsc", - "watch": "tsc --watch" + "typecheck": "tsc" }, "dependencies": { "@crowdin/cli": "^3.7.8", @@ -49,7 +48,7 @@ "@docusaurus/utils": "2.0.0-beta.20", "@docusaurus/utils-common": "2.0.0-beta.20", "@popperjs/core": "^2.11.5", - "@swc/core": "^1.2.181", + "@swc/core": "^1.2.185", "clsx": "^1.1.1", "color": "^4.2.3", "fs-extra": "^10.1.0", @@ -58,11 +57,11 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-lite-youtube-embed": "^2.2.2", - "react-medium-image-zoom": "^4.3.7", + "react-medium-image-zoom": "^4.4.0", "react-popper": "^2.3.0", "rehype-katex": "^6.0.2", "remark-math": "^3.0.1", - "swc-loader": "^0.2.0", + "swc-loader": "^0.2.1", "unist-util-visit": "^2.0.3", "workbox-routing": "^6.5.3", "workbox-strategies": "^6.5.3" @@ -82,7 +81,7 @@ "devDependencies": { "@docusaurus/eslint-plugin": "2.0.0-beta.20", "@tsconfig/docusaurus": "^1.0.5", - "@types/jest": "^27.5.0", + "@types/jest": "^27.5.1", "cross-env": "^7.0.3", "rimraf": "^3.0.2" } diff --git a/website/src/components/ColorGenerator/index.tsx b/website/src/components/ColorGenerator/index.tsx index 0ce0d508e358a..2fba54627f996 100644 --- a/website/src/components/ColorGenerator/index.tsx +++ b/website/src/components/ColorGenerator/index.tsx @@ -8,12 +8,11 @@ import React, {useEffect, useState} from 'react'; import clsx from 'clsx'; import Color from 'color'; -import CodeBlock from '@theme/CodeBlock'; -import Admonition from '@theme/Admonition'; import Link from '@docusaurus/Link'; import Translate from '@docusaurus/Translate'; import {useColorMode} from '@docusaurus/theme-common'; - +import CodeBlock from '@theme/CodeBlock'; +import Admonition from '@theme/Admonition'; import { type ColorState, COLOR_SHADES, diff --git a/website/src/components/Playground/index.tsx b/website/src/components/Playground/index.tsx index 45c4186fa3975..a661c965c270a 100644 --- a/website/src/components/Playground/index.tsx +++ b/website/src/components/Playground/index.tsx @@ -8,10 +8,10 @@ /* eslint-disable global-require */ import React from 'react'; +import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; import Link from '@docusaurus/Link'; import Image from '@theme/IdealImage'; -import clsx from 'clsx'; const Playgrounds = [ { diff --git a/website/src/components/UpgradeGuide/index.tsx b/website/src/components/UpgradeGuide/index.tsx index 0ba1913aae74d..01d1131cc9b52 100644 --- a/website/src/components/UpgradeGuide/index.tsx +++ b/website/src/components/UpgradeGuide/index.tsx @@ -11,11 +11,11 @@ import { useActiveDocContext, useVersions, } from '@docusaurus/plugin-content-docs/client'; -import Admonition from '@theme/Admonition'; import Link from '@docusaurus/Link'; -import CodeBlock from '@theme/CodeBlock'; import useIsBrowser from '@docusaurus/useIsBrowser'; import Translate from '@docusaurus/Translate'; +import Admonition from '@theme/Admonition'; +import CodeBlock from '@theme/CodeBlock'; function PackageJson() { const latestVersion = useLatestVersion(); diff --git a/website/src/data/__tests__/user.test.ts b/website/src/data/__tests__/user.test.ts index 1cd0f4ebe5293..06f76b53d1cb5 100644 --- a/website/src/data/__tests__/user.test.ts +++ b/website/src/data/__tests__/user.test.ts @@ -5,12 +5,11 @@ * LICENSE file in the root directory of this source tree. */ -import {TagList, sortedUsers, type User} from '../users'; -import {Joi} from '@docusaurus/utils-validation'; - import fs from 'fs-extra'; import path from 'path'; import imageSize from 'image-size'; +import {Joi} from '@docusaurus/utils-validation'; +import {TagList, sortedUsers, type User} from '../users'; declare global { namespace jest { diff --git a/website/src/data/showcase/30-days-swa.png b/website/src/data/showcase/30-days-swa.png new file mode 100644 index 0000000000000000000000000000000000000000..06c294bce4f65134b571acaa25ddd424ff5a4d40 GIT binary patch literal 74852 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�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 CDvQMc literal 0 HcmV?d00001 diff --git a/website/src/data/showcase/codesweetly.png b/website/src/data/showcase/codesweetly.png new file mode 100644 index 0000000000000000000000000000000000000000..6d848fee6aadd7af95b6e2f778e5f5d051323d72 GIT binary patch literal 17716 zcmbSxg;yO<tnj_KyE_#3;_mM5?(P(ai$l@k4#nMFFYYeIp+K>s#r^Sn=X`&_`}XX~ z&gASQGm}h`-6UE?Ng5e}00961Aj`@~r~v>FAOHX;0tfktA;c8q`FucGiz<o&01XL< zucpwSeW1IVv>2dvhUf$UfCQ*0Xh<?~%dqguk<klKFbeG}Q@_8zy}!SIe0)H7^_)zw zvGU1XTGE?Xd)PSpzP`OdWdHftru=w+{rGri=8-*}<a~R5W#E+BSE1QgqXT$$LHqRn zH~5pn+w05QJ1d|3>DlGk#TCG@<I0+emQ5VeyXWQQ<!Iy!RL&t4tLVoL4IvfJ@hJ7v z)6@0!^%o}LJ$Z6~Yv=v_12HY%$vErV`^Rqyyo;-UdHDsOGuv0B+}YXPlP2EV-!CaE z9~~XLxxL-k+^VXs2@MO6iH%!bTZha#xIIWa{d*P}^?hP;>hSRJ!jR<s=898Td0=qp zc${N-<yTX4OF-v#Umtj8X7;)`ArKVY)jRTA6#Lker?#=<V~a2)HSK<d;YU((dPZhh zRbzZY;@@fh?(UxE*3R?u^W!lFK>9&pQE`1k<M7zDn7kgpgvRmliHeT(`wqLTstH2g z;r#r9uV26)ov*otm3s##;K8xh&i;qf%IuunOEW4hBZr{yM3m6c@u`LOj!qnMj*m_3 zo82gVbC<T&v!wKb#ieC*BG&Yr67=-VOMA|5{!ugYE55-op5MGbZd=Xmy)GYK-(Ma! zwhxZ===2PX;*zq-83j$vEnVE)Pux`dhUO4)=m9DFZa!h{`ws{K{rlHX|3cNBJcB=l zb2hJd7H)I9!n5>iTS-NYE^aI|I{D*q<?U(D-qGpWP2e`wfhc_F<#sM2CRI#A>f<t* zkeJNM#*T}JzjXHa<=@DWjU*xp7Cj@&;>rE{%lSo;w^G6U$li6*@c!-d`>C(~#fr(x z!Pet>`}5Y);|%z=<>%|!QFKCvK-$#(Q0vFBiLFb(^_HJS)vsht_yi^3)6zIv{NjCY zHCFJzb$*1sTOeKK$xTf<QOWV}+EKL+TUWf~$AR+4U+=}mldE+n*QWKkDic%iWu_sz zM9W!`9qG~9=-qKq;^J-L`u*OJ=17ieUzS6x9Ke6_-;o+=lmuXh8-8=F_U-L$t|b{@ z-n>&BalW^Fuc6xr0FVJ>B}6s6*Uz$)Z76gJz~)&?u%^_JY5x|2)I#8RHK6Gk|B%hA zeJMB9r{F@MXb6Q-@Y)C)<HP8j7iTv$IiIVRp}{({d?{c&X#6>C`rJCYmd!gYX-Xb; zkOY-g5xiDc85^{4l6R45nXKEJpZZu?t*yE8aN~Dpv<!zfgv};a1|kE(W2o%kpKo|b zMO9&3p&+^>_lO^bJt7$e38f=?6HXJpOyc>D&FNAJA$KwA3X{s_cpHmYA;l|iNS`m7 zvn4*F4O+3Xjk*FaaCv^!8V`kdtAaPc`4{=Qx##&UN^9BNCmNWB;~9A#)mmoH<1y%S zbl0^+yFzIf?P9pK+Eb>2K04rRB#&+4*7$f7{hB6qaSzS&3q8xbt-He)_{Tkny8*uE z969(q-}2(hP$T@H(1t~8{4~>-iH0+k=j>V374R#~xawuV_Jk+qCKXGq9+L**bIPK; zOwaeK8*zxntHrJ&rI+2^;+7r07xW|1bK<fF_x-52bRlQ|5rgNd6B_%*%dD0Hg}T+4 zq&(_al<=<)1iq%mMnc@s6a$T@I0ILj+;0Uz;pgWaRw`1!c}Y=weNWU`nqn3D12;X@ z+7-{Y_M8-k-(?u=WV?zc>((^6O7?vL3r_hho(%$-y64)1Vm8D&slNwRjoO?ba4VmI zG`JB9gph>4>zlHLTs5)9NHlm4Xb|f{{lsnq+rmV1rh!witi8U}^LtH+D+9>9+GGqS zI+{$)7pcc@Z9?^g=+n~fMnWe5L55x!^o<?GQKlDRZgnrn9E}8FB$<%q@5z+9RJs** zMtX>HqN;mx70kcnX$#b}Pt`=n@6-#Jcky1kcTR}%&hlGO`C!ji9@=Lu29KcghPO(- zi5{5RThEwVNEwuW-*ukwGja%D4!&$}J$K(jP*a0iLqW<<#%Cy=U=@Wh;ACtMiLvxo z@9P}?m*@<!WI$%31XLZ$=t%2+5XCY5dTt1t39DrSnlAgLwGD&3?~;4$)bw>@k{W|% zXQu(y?Vp1>CX;Hp`?CgEE4>PLucR^$m}=Kuh=qy0jmE0lCdX?i;wl2>zuNyTYTxJX z;^N}H!pAExl0T|143?`oj9ww&v~D_C+X|8CH9#Dl(0}@4GX3|(sRw5hBkMu*JV@3V zj%XL|vQ{$0Jy>VG3;nL6$5uraRE0bDSI1Z%ee*A~jBMii1aI3w-f%H?SoJJwQ<l{q zlev!b37TI?<Cd3dP(zYemmSbWHF;a>s}msS+U{vW6uF#7&+YhWd#5roT}a6il_+72 z$`Z3TQCU^`VebZJ7eiobA%(X5vH<`Zs}o{E9D<}xDV`PH3~`f>&-N#X&>0$S#}~&w zuCc0h(dLo*+kJQ3bkF(j#mvS1w$+!;(Mu`2803Z>@LnCGMLy)tfEgJ~W;LqX@9-rI zcyC3hSl$IX)8Uv8;7Sv-HrM&&^NI-EXm@>mSnhYcFvIPqsjS(CgH?lTVE&K+o~!-u zK^%X{sh2a(OMhKX3g%s^-IX&#_(C7muCb~jw^Z*EjcVGJ!l_Y2PstUi1Nu9=7Nd!u zAfiY<tzobqz6(;X^kqEX<u<Xc?A29*w`ThWQWs%G?y8nU+3yW~q%Lvi!nmznuXm~G z-vNaBx_(Wq+D1OfP~Udttp@8)ocV6@G8WNAfrej44Y<S=uQ>78BB~iu+$4@D2su$f zv-$amKI&`8=xqJGxK~f*)+<L|CB#kJD)fKX#=3G>q0)<fW^`?khJ&S=(A^Ot0_$3o zSTAb=&S%do$!V}jaQ5W7^^`Tfm$bL&)ZtWNi-SYHsnW)*LjB^c1tmYebCO*Y-qgA; z*qSRpUR|AO5XKlOjcoE7Ph23CcE9?v9Zg7+VO}!^TaOQ?ggVLi80I~3zX#uz4va9i z6C2S+=2WodM<h0NW9Z$e&>Wnq_V*nmLZbX~Fd@VgTRrtUd=2?BFxcn?UDpZ`e=y*0 z2QAhZWHctF(Pj=L(@;uZ{O1$do*99xlf^&F^X+Wn`^ogVjyFRHU42*&;+d&Ns+{Iu zD~(fV|6fqmuNws#EV=0^pwy<yP>6U_!c9B#=f7ud_ozW5PdC975hr(RaqpOew=Y*> z?l*27FtBD(_RIK(M+3gud_)ux_#|xR+X*C1NO>@Wh&|9DR%9&KL8~sNm6#UM$riGN zaiW(NqK$T!TD7%9o+-XR&9JabChqihZ}`bqk=KOnZO_^Qq0WP$Mx3-Y`S0D%zu`<G z*^iQZty&jd?i}ex;9+SWM(ksU(ZCTN$y(hR(5)7Qoc}c>82iQC`hZgtHDzKqECyg+ z+!6I-K=>6fzkOaQgf@L2S%RNf6q=-DLVyUx!%P-!;6?WQdZGW2&n1-0pn(iwP^-V- z^j)Sd5_;*G-0{uG-~~@;KRBa~w!Uxj_pz~|Gb`shm3e*U%We;kQvNM0TJr{l+GTD1 z9Hw>gPN+#j5Z~KL2K0S0>d6X}W!p|}V4tZ>NXJ~Zg~a$ofRI-7rE}4Tz;5o>eYZps zI7%Ty*_HRFP2$Y~Fl0sBrAbUsWL`A&`{br?O&?m%RWPg?{2o1CCRr3i7#o>u3;vaS zNV}Mn6#O0nK0ZwpgGCq_T*&|Fe%vu(`>3?rPbS?tbrxnunEvSSrd})_x8PD<W9D}G zw{I3dqtm&8&z(8KQfr_2JO(qRvyXe%sL-cvyLo%Eoz(k_c=Go4w(8`BZewv-9=SPI z?>S}~ci*<*^=_@$Y4_lED()n+;<uvCg<zYGm5@p6I2XI1@4mV3{sm+5ER%R@Y5hX8 z&yYi}#UIg9rY&yv;YR}V)*35}XfukNGHq0&DT5?t#s`c9Ux-X5Tqt(MpllykWyBVr z+mld*!bkrJj_$jms?p)eX)eVYA(^3%uXm=R&0D%8){Nq*d6XE}*6PWZf9#taZRFFO zn+LfzdUacV1pnd#ZtDl!N?Lk)dXC&3&C9B{rT*nCDJ5k2y+&(vm^r<Azn0fsADe$f zSVP_{z?^A)duQ}!zrU8ejLV`5Hu7AgMDX6fZcA`@3)kaJCZ8$_@2l&5?JqU<%j(4a zdFXUgS!1>GjXMM)%QvpV$FAkw>~4~Usg<<1K8~=;Gr{rnX~!Y?EntI0D02adQE=E} z&3M}1=t%g?ps%V}4(DE)dTSg<-?l+TR#g-l8-<;<AH2_urEn#}%EqdOjyZ~gg-#&- zQ{P6%CV8ZI5an`bzCZ5r<DZi4L-xxz((YW#5UUl;X51P+>57C){-c!bVG@|&rSEPd z^|xM}2kyS%VJTj}*}`|)F;h(@Tn)X?r`V}mi^HQ8xzcJF(Cynsb5xo7$&%D=$U<%t z%ShPm?AWG?Ep2``cZ6pia!@px%R6ph?HZMR=Y#Kwl!9zSQgiNEfdS0eRR$5Cq%#pi z@p5)yA~p9{<&E*!y<A8TBQ#h84%q=WVi~0<-*?e7il0Y@L%@;rVm1T>Q8FK#%w7m{ zCb)lOtbRivBfGX>vr@~ksO|~hF$4@-92msg$t2`YYS*M%<imv|Qh)6_ezBPQ`=&=i zp`2J#2v0Y`K2T5*`L7xwms1REUZW7{^u;bw;>J*JSSyn2u3lRKvF}uy9?XE|<4|jo z_J!NBhUlQ$-8r2NX`8iFHYMen%f)LLP5cbL9}G(2fr^A?ACiMDv&~8QQ8S{Jyl0k> z48sP<6s?}QV-CbNpAUcLAx|8u3OW^%F^ePYlf`iU=q}AVSeRgGGG3&8@gSo4`3=_X zCQVS#cu;DW2R5jKMg#A93UMM1k@erEJdPHheVD_=WUx831g-5qBhy1CpHgv#*dE1> zwR)y7{_;2^U)eLw+BHpwJ_lZ|+#7WlSslP21Y`D`uoMHgKXYNgqPM!L#9(<VY&ImM z*$z`r&KTQOf~|&S`rEP|&(&`L?OUBf>$^MuVN!mU0^efG6<N$IO5;plIRWLWup)-S zU_<Mv`&cvsIV{JYV_kJO8@(<S8Kr!q)7@1)M;y6S=@wi$-6QjjC)S!E>s{HcHc~;V z)fLOakI~>VW>Uji@qE6%KQ-EU)bQInRdI^NZHrzO-v|5r+2mO@hgI@7H8=d1FuLuP zJhk%9=q#aNJOUg)6i%zOZ<2!q1pA5%4(c2oHRLV-MFGw_2xfHu=E)Yfk}s!AsLFPI zGY(t!Gw46{i&dC&r6M1iN#^-wD1<D+3#ro15JTJhVxlEdpkls(3HX(kG#Vi+nPQTv z?8zQGy!KLKC38yJ)Ox1pMXA~iJ+G`G@vQiU!3xDoHiOBJ;+*WT*T+zvn+n-)K&9U% zY>BKL?>P>&5q`~DQU?ILXHm*_vRJgM{m^q>FWqm4lf}X}qDv2|fAt20(XaBs`se!v zA3eMOoC_F#J<GL5ebdBH(ff1&+rBE6<^J5Tso8o;k)DCcCe>BS?s#u_IbtP<7&+3L zEKolbi}DJX0gibM7Cce`-nj0UL{F|l-mpgD>c@}!)NtM16~BVx_5nZ-<#eSPAdx`= zDfXqDEkWF0%NN6{k8c*4vSO3;>K=#38f+sLMmjf;0p$sAWJZ17yL<*Lo?~AiRO|pN zK4zk}0>_#|hwq$pNy|qW586UNl|;Hf8vvs5T?j}!07bPB70y@1QHw+mbP6B{+Y<!j z9wY>?ja`C(&K58gIhCRA8`fP%>-<o1?dmp&Fs!lokOSCY5RANgtL))FLQHAb2S5Sl z{k;2C1%vXIB}{>2BAITyHH<<=v;qN+I39etMn?BN4nGu;sRIkbt4_}`JZNnS<hb9~ zI`o5@%br+{TBqkk850uaZwE4@q_b*_uV(bvGGNIuL-}i4vBW=urO@Fm)%Q-jVJ6sa zU_JjIT%I;R=P5s$g}rL}2-=<E?#RwzzL}pLUXIW-Kf+un?&~k0pWGt}Ph@TKSJrC( zY)_7>^~G|-bbHXmG8t*B@4xC3mcGxmh-H24yPyoQ>uI&DzG}QkfC3|sLG$hofs)#{ z?Jx60ixnoBs6;Jzv|Fr1RF>W@K%QSapZyI;`*5_dvfS;s41}z@wl~(K>Uk5KMhb@7 ztJ%G3LpT9G>C59~R$G5CA+x@<;lGq2C1yrKDt`20*dXL4V8|`sK@YL7D?8$i8htnl zD)iW;`Izf+D&!1)74#>N?+YQi(&bA`*Xk<1MGX}Bn2Xwm`1#DTTO)XC_WbAOMjp4^ zGW6ny-u!iW_#+@oauN4?TqC~|%@47FYHfrn5}I%$<<@Bwb<(-`_$^M12)-Tu6)oR$ z0=$HiRZe?gb1K)CZVeqT!?&pN@m77gee++^wOJPY^w}5T_|FjHHn0T+cw)Fq#i#4U zn5V}sBMd9xeC{06g_08#hzr|aC2q^a`-O>B@b+g^^56hjYM0+%OBcxpQVhU^R^c;B zk_#M`-Mg0!Xf}j5Qc$cBB5?9E&UFP-R3*Vo=G(TCA+w4G$#TpUyvn&TkUWrONMVdK zkrleg(u`=WUl;12$VL=ot|GXmtv&w2`;r-m@TH8TqaY(8O7~P04&p;JKR+3TC?q>5 zM&Oi5h={<<<-M)tsJ4d_wx2!O?2lJj+(0UMQQ^J{u3L@Wve)cUdW3BnTXoi?xCgxq zbsLL@CB9H!w6Ql8ZJ;Y<tmi*<ITO*@7d&}NVY*#lPSFiHGW-4|hRLuI(ew>k+})tW zE07MgzX^06BOCI0QFuT;9N&0_JKjhfe&2Cno>A7-vb^Poe}2AWV=T};lV0MVKTSm0 z$tK5w*XM9=APohZ7VK<6;!I9L#=Ox&Wqk~m(b%lD>NqqE<LLhf{EAa9rY}jA-qz~- zuKpEWST*D?DD1tCOJ{0u`=SpzcY0v$RKjdIa9s{M!IAg1wePG4t>G>;eK<V#9L1({ zBL$jO61ETB?yQq%3`Hm+XVE^L8z`_Aa<N^RkU7{Ym|)M&W!%rd-zW-TeNcHSc72JJ zA9vnC?|Wm!n<b3si_|?kVplK@GC%Sc-{-pI30z=OKiZ!6J{oJ#r9YgY{H}m4O<oi) zc!;Ycz8IY$qEe)a*8dn@Y=9L-9e3&*Ws|N>PrTVl(a#f)#qD@9k9*!DXa4MU(pci; zf)Ie-ls?(jOJs>vDt)grx!2T>i@y^{8hf7XF-v@u(3g<cm#S6D?2bi16w`-*C#4!& z>*AJo7m~^wtN?Suil8V%wG5qvm4!w3s1Z?EXc;3PF>q{#7vY3sscVdpizmmarozF7 zA2NtA{%}C05?Cwvz0PvaJ@&k1!zfQmHg?|PjF&HAJF0};m1|ECUU4x(Sc_$)F9%m+ zsM92wC{*gT2|8(i&)6fpmD4J%*j<Nw(hV9*tpU^=sP^YZ;)h`#)&685_M|8xC!J6Z zO56?s(QrL_){%%5-r!y_NK5P|J_OMq&CVL*_}(}X1c5mZ$)&kGz5Lf&>ltrE#^`yZ zzB4VlEXgDMyl>D13C7eoi55OG{do#t^9u@TJFZN3aec&ee5NBU10nP|VO3Sf@8jBT z9O_7a8$cTOynUx{-CK!qcK)lnneGgdrE{ZN-7r<TF1lTfA*J%Rh_Oc3KR`bSS7@or z(&Zrb*UvlW?%A8?^wfBNIXyKCQf+vUZe7JmY5d|{UWRDOTi$Twr0;AgWKx-yi+7ZZ zCuudQ)KsQ6dGV(ktj&1c*jtco3UJf)({sw5t*|sQD9^V!v23KQHE4)YcYMNi4H)xf zbBdrKTvc=@uRkyAnHXP{Z>6|_un!;p*SL_QZ^tNW=hI&~2Ru|xSNPFZo1(CY9=g!r z=0_bn#H!)#Q_8ihRTf8KSWuWY<!V;bX@-qeRsPXnrl4MOBk!y0Wf>%An0CCz<uE*- z?TA(?L}+nJLE4T?WpIn+m}S>&Su>?SInPKZKr=<aJDjMG>_*KM=Z?LB1;LM2i|48O z4YHeDTZbGyu`P{~fhM|xO@9Ts#Ayo7^5>aWrY`5VB!B(fDyE5rLYB3o?00xWC#G6j z<f<{XOrc(?8{J8-e_DeKOmeAqo-+^A^hH=r!<!yW%=7A05y7rqMwEX!7-w<z`31Ha zH3gL!+?5pNpctoYvI?i0-%6cUbeU<{@MJU7j;3_k1c^zt(vNgTZxTUL*kxtk3+Ely zQ}(jsshA#}Ue840yd~5Bp%9lZeE;INoMe!%TTz2`P@1f*vv}B`15S#SPTMJu(d<~N zx2rZ!@lRl(eNIx#s#!iF(##9bWbc8)W^NZ9*L(zjOVJu+4Ksdvz74^-+C%VBz=Uv9 zD$P1ws9qPUW`{=LhTEV+R~$`3R9qI!aW6AyW*lc^hHBi;6zjPNi+r<VnA`LxFR)N` zgw|zH>0z_ys!E!t)g5Ta(Tkz%>ooW#!P46jgQ>FDlq%9R6=4nEa>8@J)Ec}(OUHEX z&%`qCX;&IOxYSSL5T>EPesGp}<I$bu<!_8E(12Y*g1dge0^QF5mqc4tOdb&te~;(J z^nG43b&*nj<$FXh4zH<!QG-N2IeP@{n(o$u3?CK~_da}vsVpBqjeOGgNal@7-n+T+ zY%N0PBb|+XL(99T5(lZo8aaNo;Y5~bt!>?_qS&&vQu3qk=OGs1cpRaA=mON@Y&Nd2 z(&ik-8jlVdWF2DFn9@lG5eK|^GrMcFU7d`$G^*Sl<h%-dszX%7!QMmrHuLb2qjwyq zB_mBddUwIhUz*bXO4x+M;_Qsg6O9bhAYOk-8nnq_u66{<j7Vp;Q<kC)mzW)+NwZyx zW?9JO#DM$qictq?mt4C$dm)QrtYF0TTPPFel$+h1$U|33>ss~Z(n8AfGsGerT57!K zi!9z?`J$M|DYI`!B57j_3p@DIJ*4YA)o5n*{?-|7-Jv31*IfM7FIbr=B1cC$e~P?6 zoOnI@6KqtMM0bvkRjG<*45qdu_mcZ5l5meSApM!D`oCWvh%kT+8EVA;0PH7-0Dv4R zZ&(1UQe?p3b48IyH~<<N00;y?L5YZb=E8uVz0U>|)c+^?9Tj@BrA+@!{-MaHF{b!s z#_P^2#xM~Cpxo73m3}>c&%AK?VE$nSBP71*?b0bP(2kCqP9RL>WE|MaZ_ulFd+7pv zKzryDd=}&8c|IR?wLQ@U57F$zc|>3KQm9pjy+r%HjNW@iP70Fk=8pGlnf|*xL3lKI zU3bxL=W^pS1m+VH9;2A=oOuHu(7kA2gO-r*NqUlNL1oerq<;|xzvP!N>~fn!3ZKA~ zjW|7kK*r8;;Qsh(1aEFbpzz-`P|-g30`}FnHmIDB0$8ZmNvl0aGswikWaF|mIG?1) zw?`W<D1V3JMGxp#llP^OZ^S1GZqu(X{6^rwy%>2+LaE)Mk|yE~EJB{IkH0=&@~}~N z^RzfGL|t@%e!#qRrrw5`@uY~J`vQ4+;SCIudVN0o83*luUZK?O_RY-2Wp4r3)t2tt zpnp65Tdm>w*ra&TapAAU^9Y}Z%^z`)S2c*a-iWC#2b<Eaw*30w$G4rF%`i}c*Fj4= zjF89uvIn&P+xiGP&+Wfq$iFv3l9ap0bACZ&fjOlhQb#ecI?KfcxL*SN^tbMly}7lM zqb|5?kKWtm-(fEYw14R1jh}c?HrmzWb2U8A`wY9QD;>gWP(a`yKmvlqAYlvk$3WR( z-R0|##K+e2=_0>2+Fgcg$AjI28jiP^IG_F8>)(oSj}ox)MQFq%A8gYEc$O<igl%G6 zGT`81+`}8`j~~KrpCTr8))h$s`6cwqp2=O$;_=`7S%D^!f{6DQE9N8ong2LC^2SOC z7lq+sa<=`&IkcF3Hxsv&es@2#oRD?-N4o{1lSLJTkphOxL6ryersU>E9~BVwqBjw) z{o`NJN4~Nsn14qZ?CG2J%O1K;v)@k@B2QKy46BcQ1z!GbL3ZG=4q>#N1?mcNHzh;A zTFa9Glg17cXZh29_@6vQUN1aAcPF=k%08EO4XG`?NE$5;QOl3>uoHMVqj?o`OyXv8 z<|UX25+;htZhtC^bo;xrnX4$HuS+<}y<X%oe^59?$*s##EH@_B4~1dySBjhri~c7e zZYPo$H^mgia4O+f52`55W=OMR*!H=QRxSHClN6lliPi80QG}Xol*@~rqnkYUOU3R? zFJF{P!6w_XeOB|JfSJ+D4}nZCqo}?H;1l&sNlX_IJbOh#oMgX82EsNZiow@_Wc_`E z?Ir>J@d2rW`mM>Jpdd{lzu$>vGt6AMaY2y?%4OLNK6(QeYVP-2f~Lr05*}*&B#g^6 zzR12-gKC6*5lyCF##miSI<eLh+vN)}khXv5%@+WTtGyva0F1-~10Pw&E+%@Q#c^qR zAz}E>{@Om&2e@LZ^hS#_&peT5ZPUM+U;%kf!0Csu>BCU#A%y(tf`EeEy*WiOuPzFc zd<dOLg&gBU=c47|aK86-qP9BS$h#vKLf8TeOxP!S{!6gp_$b-l!^;;WaFjSH92A-+ zc&5LR2C$^~ISG9^s7-0WHdpJe$csq+Qlw3GjJsbtTqF>f$nJ{B_Az-U$2_A54Mo5+ zp^o|RSM#b4R%NlD19rD5YX-!E2Ev>hYUy)IL)?YPz%U^4pXsu`^pe-r=IEAWAcJ6C zYQRcGG?BzTvO|Q~4FMiM06-xz;zEjEA2j$to(RBM7EB{B7J+%DW{ws7wlJ+JvPNC| zJ;oijpf7Qh+UZzuP5?l5x%Vg${B03^t}fKaAI71dTIm#h?r@Jx#)*xIj+J|1y2@mY z8bxjYY>ysTevRmW<q!Xek}DsWdc~9uEI8S-o6tBZxFzb7NM0;D8}XPQ9uAe)cWPCG z1aqlE%X7Jwv(!=ph7sDQ6gH(*F5v-+xT9rq@&Vj63o}C*bYe3Hz2f2kVR)AL{zYCi z!}7+}^R>c|mp_olXL~uo+tBftFHVM!3fO0H2xA@X4wER%7U(Vu1CbZ`{LI@!xs!Du zE!?A1K^91^E=lZHB_WXDxE{cO?(j)c(crI_GJv+dUF78}^wpJUYi?~Vjd^^`pP$G8 z<pW3?SJ(dQ;}l27dCnHeK8G|RNHc84jUiL89i&QZks2oVX*AR7-roI{5<-K+*A3?U zp~_+)Y-03AGU{$+2}E9RbM0aYi$|OR{;2S+<*!424};)n@c`Er2pjl=BN_ElTtIVs zJ0`-e6WL#8)G>t|55Q;*^GvG(_Af#AaPDK;$FGYc6(%RtC>`wt+rV?cC;K8gbr=v1 zuJob(u~?VYod|t3=<1604c}^OJ@o)jiVU_lGrxV#6~Km>o`hV`6yt6PY(SVv6@)Me z^K!Mu0%QED)$M_36+!<e)A*_2wGlj88&jwVyUHXYPt>(;#yKxc8C;g9BmlH1=J+v_ zxY0&>khz@#ks3i6_ucR{z(^fXXT^hw8%fQ~NC-|Uim5^t!B@;w0~{C<v2e6bH|Szh zJXO=6Wb=>_g8k$<0XzaRUhA=N1^U7NE+NX9_&Rvf0n|~^`cOu|L@(FHgO3UDKVd`L z&iC51u}J;;gHi=Cli^;TNRiWAPlR1=A*3%mL*x)UH0~eb(8csR18oKnpu(6UeOstA zXJPhVh-Kl5n-U_?(N!zBxE=__7yxx7@I{%Og2C{}R5ozv5~LF*quTEV5a4DoK~5(` z^>+P#wE*yO7U)=+JY6yS)B}tScQpEswWdT5HbjZ#yMfpMzRq?+(!zjV|Ayn_)f75- zFy^<d-Oy?Dz_rj0^qL`Uusb&PT*p^-C!)V<bQGY$LyDJsoXMg+ghwT4kRT^8WAyk> zKzPjLBowEsAV~!Xy?&J2sxv@kMU)f*t%Z_~)iw2HFE)m$+`B>2RirWm9aKdRAgXah zoS{Lw)uK-4cEO9NG;!7d`_|j{K6W@e-Gt`iVUh>m<{<#IbAd>`n-CTCp1)Z_Tt#{r zbb_O+cqo_gMUbm&s#E1}8GhL)=fsvO&;bZ2TP&VNrmWJ#-Myxu>fdyrK{MiN`~8a( z&XbHNG8**|nA)x~cHsgA5p2~20uMHUteMJam~DqY{#UgPA=^jwk~A{f>BZHm?m9~T zcXv!|K9@MzavLV{kE7LR(qSS6>eC!LIZRmq^6Eu;&#ue8H9cJWRsK|_0ka3ayfMA_ zsNTps7ZNpaqisB>MyP8m&d>q5hB+|^?X!17<HQNyf7N_vMo}Ve^Bh(MSU=V7w%_LQ zAbl2)9FszL>!wtMlmOriiGF3Q`HN!+i}juMu42*zXc8q6T$T&mZ^uH$ze<&=GlzYe zgw+gPWRXVLF96sQPRj|1#C%nJ?}K_6>M2Pjzh(wJ6j%+jJ(J&VB%ec%cbXNYbVkEx z6wE8wUB`xbH^qp6OB~*BbE~){u8NspLI77NyOUJOU>T^n?IR#N;%e0Fpt)?Z^;V<? z`TS##ygmde9@de5CQZ78{xKN=@H568(qvrOzJOHHSVf-?gS<nFj#>!=bTkkvmlljp z@pMqvaP-)0?a#o2`LG-3kEyK)voQeoWl%efhfK5o%?{u}kaTJQl%KR`NS6-BzQtTk zGfL#j*Cqhb*eZp4lw7M!G^>+wuJ9)$kW@2xlc~@I3D85&o$k?kxANfNM)ei~=ue{u z0r%|y7Y`q|KgWfMAe>qmz$Wb@2^XiFdVkUks5@p-$vK%5%=RPznmtBg%xDkb1n3d4 zugwrPL&`wRe`<y1RV4u+H=_7EU_drSk`|;26OkgWl2#Q$1*C1~p;&&5%Y?mxez%N? z=GSnAX&y7#mx^H_smjhDTT6sYgeue}K=guU`0Bbk{KpAuZd8mFCZ>)RG}%m}B&S|V z1UP3#>E*t`#PkNt+U&DB?{&s61KRC~l_i)7G%&IOD6`)I7}%S0^>oHzyCVv?05^3X z%;U98^?q?u0d-)mp#c<8X>RLo00Now9t6J~0PEB5Es7`1KAZuzzXHMv8hFT5`{fi2 zO2{ixfwxZx$2hSXSK>a3nT-HOU4xuEi!n&=F)J?<%m<m&Xz{pA@~;u8qF))=OTfr< zqru0lai4bHfV1sNeg{|)LwM?7H?d^^yuk%P$|xF`o3F70__}!BKZ)3op!;C{DuV#) z?<Hzr4eF5rBK8D8j*gD)FX_X;3IwChG8mEdj1Ha*2Vy%1yH0rUmjf{#Y{t={ao`+F zC(pOBNf<o{3Q)u9xgo-CrY^9{=&xGdAErq*N=}p`b5j5}|HU_sFtPTpJvHYuS5sqH z5Q#C6fz;H@L|Q;HS66X+LQ)bIF6v~o0Xu+El1ruSo?PBn^0eM|$AbOH-q2u=&Z^py zZ~$J+@QAOUGpUY(K`uR}bVTt#whZE9w(K`~WSCIozBrNR_1-swQDd`_PhX*BzDE|a zI{Z^5zfa)V)wP^+EyDu}Z9DXuos7d(ay_NO2UcWz_*z`;<$k++rnIZEoaOPGv-9Q9 z>r;bLo8up9ls(GMb~4<-iRy<B^v;*1@_?Pd>M|QCVd#~v%d5|GLIB|0+d~3;k-1GX zy7MQd{6fPEAoqVV>vd^XaI26Wh9F6xmxi8%xY~4;Ib}lTxXg1F77OTacxvi_terU- z8iKBmR);8Xl%Wq;LX<8VG4i*+*xGRZ<(}AO6G6c*FGL*%cuXe%RK$p5t5iJ{(e%Wj z+FKM+q0XcAn(dicI)<86sbVvh(Ww)FN@Mn&o8J$u9*aT;xffZKzLA;vx=R#sTRZIK zEzz;NwvJ5k2%kEWPZY#h;Y?+H{&|M(Q-|I)#}paT5}YF5r09zRC>+G}4*apee<#`H ziG`61_YcnEx%`YOc(^FBLvd`Sc7Kvey>1RanTWBvey9Jmlny+Wg_#;0RDr{H^#vi? zn!raxD75QvMDi*SE<@d}qPV#&V|9pS7LP9AAM?zLv4%6NjZ1mVj>sML%*AJ5JWrcn zk6YU=rFyWSLyi?iq7A)E%MW=P-zT%cYJh`wmqb|)_k%rOd;2qmG@R<OA^-EwQBHJ~ zy5*ijT;_GWFjrgb1`Hoyotd#5%gGUe9xvj7-40+NpVekU!iFyLerc}<-)%<!7#ax( zTcq6>Ca?G*^T!L@oMojVI)>csPl9v_;QOZ&Atq)Kj#DOwVW$X~`=Kyx6o5~1*cF1E z$>T0#cl1KiJbij6_R~G;KwQS>)1lA-cyV!UKEJ&T#Q2?iE&!x_m|T|^vk47r4hzEN ziMiK|q≪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 CrJyGO literal 0 HcmV?d00001 diff --git a/website/src/data/showcase/fast.png b/website/src/data/showcase/fast.png new file mode 100644 index 0000000000000000000000000000000000000000..c69425f7660c78981b656ea20c9c6f6359604368 GIT binary patch literal 38221 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ࡊqk7#z0^W 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 V0SnQ;bf^FT002ovPDHLkV1o5veBJ;6 literal 0 HcmV?d00001 diff --git a/website/src/data/showcase/httpin.png b/website/src/data/showcase/httpin.png new file mode 100644 index 0000000000000000000000000000000000000000..97cc4c84e256b9f35b7a192a6f9e05624b2e9ba6 GIT binary patch literal 23053 zcmV)6K*+y|P)<h;3K|Lk000e1NJLTq00Mvj00BS<0{{R38xuV^00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px&08mU+MgRZ*_V)Jw|Ni{^{q^_x`}_Oy^78)v{`UC# z{{8;)@$vfm{rLI$^z`-g_V@Yv`s?iM@bK~K>+AIO_W%F??(gvT_xSqy`}Owt@$vEK z=;{Cd|MK(o@$vHP?e72m{o&%{(bLrC=jh_&<hZ-P>FVnJ{{GC)(ER@Y*4Nn7*4N3( z%cG>F{{R2p-rxKE{^aH6vbDL-(bCDw&a1Dps;jKKzQVr2#I?A*pP-@n`1r%a#G#_2 z{r~^i+1k_8){~T#+1lK^y}p~Aox#Gxva__n!^Q{-4z#qj^YrtSmY1ELpTEDruClh4 zmzl=N%&4iV4G$8frl*;joA>$n-{9c@00FwYyv)tctgWuFv9h0|sI|7YsI0MzjEw^Y z2*=3D^O?KP&(Ma5i4hYQkdc!X7#o|PrHzh{{`~zOAS0xxt=ik&^PRq~u&|Gik;TTw zmz$v)93Q5tuketx+uh&zztsNs`NGA>g@uQqrK@XfZctKGdwhQV^Y-$UxQL01f`f&0 zc6Y?b%D1?=WMyaa`uF+D+gVy%`1}1mKS6MDbN>7LOH5DnqQLU^_4cmF+}+(oMo1_s zEcy2GeSUx~FEaYs<W*K!@r<$~B`EmC*m-$-^{K}9xzX)>sDFWj`On_{?(_7e!}hby z?}DsgVPpE#;`9FdGBh^sh_5#}J6v91>~^I4;p*k(<+-}M?3%djrojB>?)~cV^6KsI z(A@CY;gXk~{NwHW-stYM$?I*N@4V0N#?<Lvl=b!X@ALHTu)+2C`tjlC`t#|FkeB#M zMgH^D`r)emn-An@YyIuMcuY&|)wliio%PKH<eL!w`sV%S4*7=+|F{M3;mP?02kf~4 zxi>cd|GoLfW1BKC)v5yS=-1uDoBPHf``&|&$6e+=f%J=w?WtDza|&M?7;-HvqMVF( zY-aIF5z@Lz{`hT8h$heTrmdZ5w#S3O?U41eo4ad8w{HW|c>wg?T*&|czMr6vm1$*{ zM`WTjoRU;p5)sCT0Rp$c0RR9X07*naRCwC#oqKE($sNak@yNT1WojIhRF2vZAR!8m zD1?wu=Z<j6k#u>7oYUxXKqX#BK;dylB^XYSG%n?#J-CBXgk*YBsB7YqU1@D3zo_Ma zu2E?3Dj_08pyQ+iwbH%%Utj9X?%EEG^K{~bX1-o~cgGvYn*I3qo8NDCW&x<EsHmu@ zsHRCQix-w%u3>3iP)!el__>?~3Lw=a8#aW9b&FxfCWMS-H9a4FJRiSBZ6MWTS~V>K zKw5}GM}SNWApHI}zYV_+`xOEeP}vx?)HG6!ZtRd&5mM2SX@mTHjG#;)IfU?thT_ET zU;c{^KIjcc4J3h1LynG`PZlVHRHL`z6sbmz#r(Z}d+*-c>o7;G@&;6{ed*8`fDr8M z?S1rFk7E2{#*?^kgmTDB+>ujJC9;68-DquXz0$figMdb)h0Qw~uy$?+t;*w_oK>*3 zcqmIOTo8I6e)i}o2aDw+E8Ydjt%M44Alj3LU(;zNQ;lT*e)*z*pnu@Oi~scf0aSaJ z+i>Gf)lcrUHRQ@(7{R(XtM*)~=Z3mq{CIuw!-r45d8E4TpI<yv(su60&D+-P+LgI% z>H1SYCGMDtYFGfBeFHcCdcME!=JRf1@Q4B2(Xftev^4C%I~bn~*xFIw1zc7l0uem? z=HK6b{oP!=gP{9ty={Xn|MI1iuh~x9)^=5QQ2?n%0r15ZxI56-_q;&y!3MB3+yR3g zEDbiigYmI-+bW@>%2p9|(lKd>4Mc_Ce)sjWXXymSmh+ZdEgf(!w`=2-Q|EV_v0S47 zQjG%OgT5OBy)T|utEdnQxS52q)v^VYo$@<pPjx`Tcoq|=(L8zf>|g&h5CE4}TMjMk z$URiwaqGNg?Yd=_9W)4`8VSJp(AVGpyno=9Gn!0Bu%P+kd3{z}L&F*p&tj}LY+SP{ zr!_kfOC$lKdF$C%U;Se~>>q^a%|%0^Y$~duLQuT9dRhGj6KJC;I|Qe%ZANTe!y!2a z!H6AZEbHOTjKs!_{MlPeEl-}#mz#vjLrugWmZo8-Ms~rAV<f8l5#s7?0B3&`%>&|> zOIwFGW`sbEM)T<D1^LnhwF^YOP=O|*sYV1a+7l87Md=A4Po?i;gr1PN7e;75JozZr zbvIn+F%{KVtRhRo5jGCxaDBmp{zijafD}2Z$s%yv-jf<Vs+4<gDyr!d{RL7@ue7O_ zL9eBviVDnWsg>E7lj?s-HFIT7y~#CvkGdVImx2&LsS^wOc{K2$iU%Qh$uco1la>NF z!%qLSe*<6{6Jtt^7-O0Y;5ZVQW6fPsO(0P`6EeQ|>~Yuv>P&V!=1`|I=}aa&29j*) z7!z+N+~7^TPu6(h8Qp{pplKWcs^e2ecj_~wCSS#liWyLE3V<fY?(x`-Jj2*Io)1bq zZ!+N>lid^K@ivbSQPxI|^N_<Q9l#;gAs1-xaie`Cmxkz|y@{Q9!@QXTpxx?ri%zdG z;*eY(UqtfqyjL>XeQrnCC)&LdCrN_O>6Pq~$1P1hfI|k+E74Kb*c`io5;!pc=gbrU zb-XuZ_Xd6LPTv=SF9cEa`+cH66mSauV8rkDxE#Td7;*&MZjav`(oF$?3VI0Q1LN^S zZ^TUl{LhH{C(Q&MSx8HO6v=G_wFFWAUTq7AU9I0~b%(5OpTp^vIt9V&4%s_Jr!n9c zMW0s;32vv$<L-31t<KOCSU^&==M1Q$RagZ@gd3b3_WQ&@b9Twd$k7sq8>YMrp`B41 z1Eza440*Ky)R}m{;IayC!5i}W#ZIf>aR}Cs&nXImLv*+tA;IBvx$ye|zc4ixP=BSa z&c><Z;tiQ(Lyuz~NfbPGi3vtLo`_DzOAIH8q9@2m9HR?LjE?7g5sV`>fv<WSkdp+F z(}e?k(Blnwy<W*1__aUi#OGg<0uf)(>)|5-ozKSy!=5Ps5JAP!=IguP1|_IvHx}Wd zER)XZ^Lc{-SHKZ=1bsp{C<r>QD;RV~1fS@02QZzY!^`VTS_<H+4IoC!>16QJWaoLj z@Ql+d1~^j6F;3ozi%gtTe&1=If;0>^cg;7~@0~0AU=~5+#wdUoKbH^=d&Gb>7`A%w z@4+L8K9ArMj3VaJ<q<p-z+?c7wYX*Hllr8pnuumhMxzNo8S+X(OCzQ(S}MOX@|scJ zo$N$3u8eEljTbXj7i?~ni*OTA5(G~`h=>?KYzu?dPGdwAgJEn91B@>qhP{F{!ciBT zj0GeuZkCM>;7EBz4%-!{!?aCRS6sp%B)($R#0&{S7>VadgOAa1IzED}GG~<RI?l*3 z3|=JONQ01MEnv<<c|X$tkWpBa@~R|1fD~SfFnk&&Hhe%C%_2u37(5&zkz5NSGswx^ zFr=7dVB|uwOAX+}0Yq@HW@TA+S?-AiZ?qSdrF<5k6#IO3H~`@#02LrHfn##)TAGMX z20%;R@sgU=CFP3>PL#JVP5C4&DZV0N%zeQ!hA3?gH;U$%X;)lw04}O|!%}j*Y~_~K zrAr%2rezi&xg!igbj+~KB$}kN8Xah-m^XIZ7bA>eR13WvCaE?c(&Ce!iBMM79HiAw zPhCc*P(=hhrB_xy_44E#$(>)-o3i5uP#sP`I^dMQWTW5&;b6)wU}3ujO1RipFt7#j z@53eycPzjk4}fDFGfMGGIuAJQ)yYEI{emMUmi(ezroaFtmYn;!g^N%om%9XvB}{S_ z5J7hpfU(**UJFQ-5(_vpz6;j`87J~;?yhNiue5x7-kSRdS8OUQUvXgH@up43l4_S? zc(Yq8%%|T`lgt#rnGWDIOi0DT5B9;5_ww?}^}7nnk7PpT0mFgfro6m;?JJjTYELpS zLXi3Hm8yxjV5*e3V1#0$Ly*#@)}**K$b$K9>5=@hnldQezNB*B0j6nXDID4I!=@F* z?FUvTYXK2tA0B@coFFEq<W5--Lgs@^$LE=>HIUxZ^YMjLT0j==<!eE&H2^9$Kn@3b z&Oq)J!sNre{3L%1GJ(+)PhtR-3!>2oh>-)dBM><HCyWxL&teNWx4ivewpv&yzy9p= zKYjk-S7fHNl;&Yje64QAZnBgtfowd*I21tjeJt(Z7%YZHoDg;dj1Y=_Lc&;XIMUc@ z%RS5x09hz&v@|W?%8Lr~ipng<Y8JvLkN@)LPkU0@2K=8nQRA!0xL4dD_n8ntIZHFQ zC>vt;c^Zs{dgCW(S;meqyDR>L97{e7zMf$$q{&lzqS<T#ag|qEijQw8$ScjOEI(3} zy}c0r{^jGxf9(0ctds-*%4fgj<kjmRUS4aE35=RBR&OTbjgZ-l&09s?&Q;jJ4f(A^ zyIH!gkx$q_n9`fIz`krj<q06nYOh`VkL0=AuU=j><jxhd$O6g$79PthUA;2ncumc* z)f>V3w@<%(@cyg;5QETGS692YuD14~i4dqo>2h=K-r1{dV1UNkziR<l^I`L0Fkow? zMM_T%B1a*4T4G#@^>wwoukWs{Z3D<Sd9{_?nSyjN$<|G)m2Y>q<o4BV@p5I-;&d~d z-r0O<76XVETpxz-qfD~_=@DXb5WL>=$-}UQoh1NbChBXC-rm+&)pfMa21sRrtj{%c z;jIOAwOcVEb28(YD1lAvGZFlky=(hPV_V}NU4e-SM6iKI_mRl02JI%?6p9VhZp+jv z)u{n(dnks^Ub}lVtxnU#Dkin934y~yAreFS&?gguiGA#&f7)4d<I>IEIS;@w1tKzQ z!K|5Kethe@{#KmBx#jrADMQ}_Q#p|b7*fWmAI-(4mPD}1&LMe-=S<1f&j4(r7GHy3 ze!2E51$_ZPf+bxQm$rrN49yZV4Ba`-epm;HAC__MaC7I3!`b)d_}7ySSjsP%UZ0;m z5m(d6XTRu|^Djn;h=T{1nIQw%3b|Jo`4TRkq>0QtIy?U|4Y2q;e{VB0vvJJf)Atj^ z(mTnXy&Mw|p3Y}Km><&p4Zy#qLy?aE{Q2kqLoxo5w5Ic?&_)6xSjNmDgpe9W=5|Iv zm8DZmiu5ceFozSrpCmYrPHb<c61Sk3$Yl~KhF$}>kC{}Wc9!5T1Sl<FoOMg1ttNPm zO{~E;E=AKcdmF4=B2!76yb#BkgZn~%s_X^fxOAd=z*hQO0$!aHq6D={T%bnssr3Ya zM10+5*jHjAj@a=vRatYs;OPh2+f}x>8vgv1$NBrAO&&jiQ_Sa9PdHrFUaw;A%W4sG zWvejD4i{-$%6@&S2XL>I+02X!%8A0gPdT<UYAka&^L{=4f@crz8%Ija>E=R_E+Tb~ z<vz?5SbhM&D}ulFo{R1S@DYRW5fv>*9_1%croWQzGn%M>Mf#X*MlkaPh>T-rAj6c1 zoI7ADjvbag1h}lR0sw`@X-|nnq}kGMM5nCMUjRmDUTFZ97%rkKvqj;Mam?HSqHmTi z0MZ<rp295A6}7qkmVgQ=O5I)Cv^){j<81lsp4s`SVT;aZH~D5is^Swpl7M#v2?$Oe zW1PC<#(b@qE0*Y*R+S?t)WQyC32^2F0G`qXFv0J1#j(oZIncoeT9SYSKpPJaav0OE zz+I*DWH*>Q%4VuOPXI^&8B#-<XC49MnF<*`hZC#o4E{!jIO%UAL=rrRx>?Ws6gkO; zsG*y^P0b<`peGvGN^1SVXK#YL@xY2FUS9#MyE@<kW==qB3cH{3%mWwZtGQgQSUe96 z3jn+Uo2>v;!)pS-#|%GBuy`T@P#F>3=GZfE2mqu^rzyHpEh_*ddZLAA)<p4HBjXox zpPn*!0YdPe>31U}959nMG0$KgK;;H^T-~i1@Sg#gj96lCtoyM)e35+=+KqMLwzRc^ z7l{=d7q;KCywhA^mW1t42tqmf42B5+na4i@aBP_+<^{2v83BL@9%m0U!s%9-Qy8fV z-oRTl_e3T9uLID_Gh~83qHDrssa3F!2_PvrXZm^yMi38LWASlU*kRv}z8$B68vC|> zZ{8Z8u=ToN&9Su`jBNSM_Lw8E2;cX*P@mG?4|td6bD!eQcN~)ud@)5U7>+A>Q017y zHGpZ%J|_U=8vtY~aZQP>E|>{oO9X&wc${F4w~b>*98n-0Rpwl9?{R5ZEMQRr9?BB% zi0G0mzDsQATG?W#;OeyYHs<>rfW8O>V`h8Q<2Dna0}+qQ>-T^A=uh^xKuOdE+|hb_ zBH4}ll(vx&fMc3rD?G!L!T_5*UCLHd>>NOr=4vxA!LgNsW0Pf8A(JW+0KTLvVR%H- zEXx<zlBfexS(@Ri6^5=k1lxtHZ8}-Dlqr=kCIC!{5^$tK#&N<yiY;bvB8%W8h4~U& z!(4ysfJV=*e=2DAtpv6Mc0Cw&(d0^O-gz$=@9Eb<QS#cFL?0DAB5Hu%_yI)=VyRfc zeEDEP0Lo5*BgonzldmPmrCyRZOFZjJSGZSjj!(&nJ>;vOi6}cRo`#>(vK4GPs&Qn5 z{21A7uF9ou!JR749^K+g&dVG=60Qp#lX0d&`>u@H(jl=@(3c9&|F*_g<Nd7z>cTc~ zUk_0>6&k(-N=0;Q$0gEgd%Q|?qb7x-x|RUiJ{v{={^t#^SqYF$cwHdEN<Fn<7RV#g zkzq7y7zUj|AoUCxMnV62Z9~)nYg#!lcj?@S7^U4zmb8X+gvUT_97UAIV3MxJn6?Nj zqiCEKqZFgFrX6Io{$y5Yv4UH2kf>Isl%CGQjkKxm)JOeYKA>cFAt^;buA`IVy-i_X zs^PCh#RPxwuE5fFL2{X+`UvuF2%vdSN^Z&iZgjKxBmJEZD3s#1RK+!|q44uvb^DBH zibAN#A1d)h*NLO0xXeu@u~i7xfboE%Q%w0`9hS-n&AU<3ciZTew&Yhii5m5FMs(j@ zbw`SlL@8%mSf3t;0WZhT0>EaiuOo@j-2@<|q-~)A{yG6bdDegyMi#0;sG{Wlc6C`G zst&wnT9(e<-;R}Kir<(T4NB!YBmpJ88;NX{LQaap%mOl13m{NBy7il<K&1sa97taN zg+Pf6UPS;79vzl|$Ym26w&4~7ctj4$Eh<ZjAV=41HUv>0c~Jp`$N@}SLRlu<xT+Fx z@aQN2Z-Uz&beZF}U5!s?n{aG{+N?9U+;QuaTRj;ESIq2-&U&rh#kW@PWq0l%0pRYI zV{(5*AB!y}w|1?`n04Qd1_1023261tPWqF3fjw^^7D;Z|OncUV-{K7hqIOFXT=qS? zH(>Et?9;*MN_YJB2xff||M$H=-uiYu9(cCpPulm<U<&RF01kmIHW`dXoxYXH*{I=7 zK##u7?)hSSL8~u7066cQn)Oaj1}*kL)Eey;0E6Ce?3vvX^M9Y+_kOo;eVp2Y4(B8e z0C-g;;IJh^S?5j0kWXU<YZ!ssqIv5cAGy@nk{-}$#>eBM+a9mVY*rb&WrW!DX6uN3 z!n`-BvIM4Xd|c7Y4*=LlRxq@f#PybTLZxh8w)t>J-7x=C-vEF=qXd*HfhZ|3B)D3X z_7KP(Iq{7yhUmo6hvf4>@=K?^jspN*Q3?1DA8VxQcb`9%YRZX$9#zEwL4BQ#12rgV z#5bwGa#a72r_;iG)au9wgqnHRo9kcO6JIyja1ix(sToZt*q+n2<@~6tODi{s1vh4S z5fP{n>yh|6q+fxUpoQw|m^FeljfNDEQ&t&i6n9B!FZJ@SA4^dhX$lQYQsOL7U%pE0 z1xlWbl!*vYb;@;US_43toe(s0J0XCp$z%QF6x{qLT)?jsMg4rVjBO>LqtUWm3eeD8 zC<#>L8P<t}E(%>7d5(@s2$G5Y!L_KgP*^SPB!-N@=2*~y0z@4Onap~<S#KUOT-r?a z{p)~~H^q%*O@q0SYE74`({E8G;TS5aac-29Cb2lG{BVR1m`xJeue=c=XCxyfB3BQ_ z4gEws@a+JI?ph)I@3B=tdYINz27rq+ID|}Hf!92Lo}GpZExCuPMHn6d(8KzF*}MLq zG}1Kw;2cbhqlg4dNu2QYT0|+>$`|1fffD&5B@j}i9AP13>6I#*p1WGW1%yb-a;YY+ zT<Z0_>`HSkT};kjZh!JmyBWTSTD$F~%beHxLg0O89%f!<KJ&cKm-l%e6JQJ*ARK@( zHb7(#7+j!_5l1ql5ymipf&c-5YGlV7;L(Yn;ItWtq@a*<Z*RL|+m*#kx*moZE{hBW zv)PzjI)(us1%?oEVNej@(+UwD$Z~)-$UgeO;{Y1x1mU6}0#gXM4f1B0ZF&z!Pjr<) zJ`UuG7-T<@pb3NktQjCq0GQba_*I;7eSrhgxulNE#M^DWLxwY{nl5=kf}#w7DC{h| z1F550Bo_+moT0c53{JPv4>Wgd777&z%G~K950;|QEz5E;oO9ospP%y>8|LNMoN<{C z=AEhNvSB|6!fLJRFV_9ubVgcFJI&RKHnvnMxlHL=9AwXB`4mKR0C_u9Bi<SWx3$Jn zPLQtcgiIdoL}|xg&pE%}*Vkeg>=$bFsPRv-d^!&7RQW+|+f*@@6FE~Z?aF+wE9N7> zgn%U$(=9G$op55z%93%*;&Pk?$xz-D%pM8WyouP_cp#pV>O->sN&cb#3V@0Y5Z_oC zmh;AeFXh65l%bR=#{{@Sm{3r{0Xwr0`g)o#;xY~hS*F<%WVz)=h??Djh6`k#pm`iv zrqBd<Qc&El(DGie8x*mKHkw7iv>o9VvT;4cLv~jIWJfMrB;){alm|=s;##IMV=H^* zl{9C^mGY(p#gavzg2+#?Y92yafQ%W6)w%_=Df&NM<(k(}&s#j1im@0d@5_t6K+0}| z`b1G)a_;#{@cafnpAXyhkt(Ex`}=ihxN}HxKTO(9*X9Gu!TeGjECe4+>f<inv<z~n z#hVYrqbx9ok-a!L%sX!HRR>@{@b81ls$5ysSjAzn0F>5MjX}I>wca<W#578HAaRay z7TJ~a!VU#Pa29hVqm7(DV=_*7f+9P}v{F|V{JFRTc-!`>XD^dZg4yBGN6l;6Y0IKf zuaE67>KAj1@q2u*EX}(eZUTVe?X`-wluZ^hv59(lt-M#Ur;KGoU0+V^fvy76HOTD% zlw(jOV~WjrsP1Ve(wWq9u@oxj?Sj~IPiif>^V1wu9mPi4|NKEUR|2lNRGz3V)u6Vw zt*__I&gbK<O4L9I0Cm5tIGhQDVJqr<kaMhgN2ZhD4P-rWx6I>l&U+X2MrS^_7KmJZ z4u~rgV$of-Nv2RvsRUq>SXF$r_0FnFqgdro0YE~gnF=v^A{bLJg!r(eSH{Lmln?{5 zg;_X)qflW)!57lD0B=a=3AssUAw(&DJP0?;NdUds2~!W`-029<#!u*Utb2|uI87J~ zHz1&6CI~spv?N21+%qFyKNR%n$b{1u*_vWa`7^{2Jdy-o1f)^`!4`xGk&SFNw0<~> zm1ypQh~to9fdVQ&;(H<hGGBz2gaTjc;sNNUaoW5z0(|!aM#3eBdATXT6%d+_^yFk5 z#+L|^sp&E4(UyFsfdlQHlhK&wqX8Z00>E1eBU1qmTyZU!sQA=uT)-K@8MykP2qc3n zzC@(f@EAhdFq0wxioX;*dpP^0O7r-ug|9dialmeiwbfNfJKIm=h7d4Z90+7f{5CcE z7Rx>-^f$B~_NkuRQBON+F9O`cCHBBe4uxFka9g{+K#!dJXMH^#PkvJ~Om~k$(P^Dr zyhpt(#4X-XiiRKl5yWz_NR#M^=5{FuL|QL$jeDf!enFZ!8IYzCfSmSBZ(2I&9S2Q2 z{s`KZ=2NFlb2mXn?|e1s=q*ekq)ntXr5D<3{E`RnEZU2<e?(SV2X6X<=<P1hThwT~ zPDk6O3Itk43#8R2r0vrpDG}(pl&-oNrsaNXhsT||-kPZ@`zZ>KBNwX{uRMHq^C=>p z6Z@1a6anyz%K$kaj?ndnoH{4a(+rx;E7mrzb-fgwpoI(06#BbTjG*m^&Tg~=dNET3 zbSH+N8pqFBXS;^zbKVa)8{6>z;0ft=wjV(OrQVA}V1ogCK5)Q>*_aF_RYNc}`u(;4 z`F#Mq3O#DcQ@sp}zn+Y6WryGkR$%HMTeKqxKo7&>uK{?Km5_F}@|M55o4@>18b7W9 zcxBBngT4zwKa<tXJB3~Y@VfMt1F{#acj&WpiO+{K#%T;WU9qAVQGk>&Xc)ZafFFMR zx3gY+booRdm~#L`VEhgs>N{4kQe#zaSmlqcO2hrTf}0zw8kLnAKhCMt*-N9<2LQ0| zBk|V@On(L(khdU`suD`sxHNosPAq<UcUGvrsZ>eT;$boM0PNZPwf6uJo$PC-=s`cE zt9_U500g_F%)F=l?m~ypfddki6*bOM-x$GhT%*GIQ$qYiVwl6MLYyI_$dcJM?Kk}d z2-S-dwXB|#&AAYd$bpaeAh3w`1KR(n)gmjzyIF-va&Lb>`UveL3vQ>o;PNDrk&9)R zbEZM;#_^F~E5njARSuw^0|z|wA6b_mgMvbc0sKzF>eXJI_T2#N0BG~Y@tKpiF3jZR zSE9em4%?|3h$n}K!6e2dUKp1w#3y?QV=FqFu%Ut52$LfjZMLyC3Aa^m5)t&=TLW0D z&c%KwIr$uh;4`i`f&=}&wIU<Z3Y4H|Ml=Gd#~YYUGY3<uhlx?4gxclVnj0U%tG~Yd z`|<jB$FO;f?!I21{1<%l%VyvD%k^(wAMftMzyEQ(iGKI8@9RT&y$e6@u5YfBS0_R~ zI)1|mzzj!XE)eixa<S3T0c?OhFaVRI3g^Hmh82j$(4@~i3xYehMhCH>p`p=%(E*b3 zmLxcdjSeA$x7njGi3o%kcVLhJ=>Yro80#|tAfRt~5YI%207V>7{Zzeh_x@7?htD*E zg&w4-`Be^RE7^e#hsW^aw=a&Lyf{33_2%mzet7~f-#qzY_uDUC9Q^#^@YTVSgKvNQ z%i*8@cCdMP@aoOWgD-afK!;#9V}NPxeh`oujv~A~?r?BSW}iNG&){;d6x1Sj0G3>G zqtS1%o90piOdE!2y#!-pZlhkL4fu^NXVjbU8wImb&+L&?l(!E~XPr8cWy^as_-O;M zuaC4F^nH}>_geu_vtj!WdsqLHMw-XJItOIJ12T}ASy`M#aSDhqXnjLCumZ*kYYB#I zZEX+iHI`Fq8!ei<RJu76f2c9uPabih^=(a>+pdZJQqyGn%U#-}$tL?3?ENP<FM#N6 z?d^-yvpznVdESN@C!hH~&-eAYe;pd{&!RDAtmQ=L?mGd90sE)F2mpKz8>!`)%r~34 z+$N+lE0ErVt^DSbrS0|Q>BPo*YJK`;ej~q{o6hH!Ae~C{mp+X~N8u?N3Gy5W3t?}( ze<TpTb+<XxekT-l4}@6O6^l-IBK6IlR!{$J52_DBb0|jZ<StLMt0&s-az%%|t{&Gg zamNxL@H6cbFwzfxXCyS_(#X#=02S4CMcLl-2lP-;9xbvG)DQ#n*w{qt{m<*Jk59qB zW>19oK5hyo5I+U4WnX?bm(67I)A`k9SbYgR1xzd_QqOYRYtN=PaxXTX=aw_+{jIfZ zZhHyxnWb3<!jr?s@aWLP{xGUx@g3r7Jl;FdGtwWN4-Vdox#I>hqzkzMLE~^Rb}ice zn2p@23x630nQnOGT6my0a5oqn@CSlJP2MlHM)y5x-o-V0pxGaF_k`tVn*tUcr|kem zx733AP4owZg9>)iGEx4wYsC0~iW)Fp@2)HbEcn^tu)CeEUf-XAmA%C|Sjqz|<aS|k zWo~8$p6|}gB<B`qV0#^2BzO1mIoMmdFn|Cij99JJGwG9KHLTKEXCMfj(;;UV23hqM z0Q9`AMF0RG07*naRK^vA1}n{|7{)-#eT?Q(6JeS_I}ta*XpkdjU>L$_rB(HEt&io$ zBb`<5uu`Ozp{?v02Oyu{zJC20J|j(sRB?5}KV9Rb#0pvFje3%DK%TM0B}3n;8mPD! zMr4AM1@2bjNmlqXk377L>6QBMQb{J4oWB8$iu=uJ7@B7;C^b^5dFED!A%j6x=R_)m zsVKgM@4?XTl$e^YvretRBr9oQBwtr^YQ!Ox!Jt!PY8ul~7^T9f26V<L;16$pc>T7T zxKYp6TqaDI-f2?FC#cSDQw>~c?9e!?CeYtxM!4)?x=z$Kzof(}*nNHoYZ&3?$)pgh zLo&pb9wlj)YIspOmK4f3E{-nuCl$lzkXnr(zbi@fG<*`<G}1wk18P|fpGlHA7%3El zR&l&Ws)(J`*%m}AVDatu-@gTN+)K8#n#N~$KJS`sneDT6jQ7E;t#7CAud{tuJI6cw zM!i$A%DD(v%q{cSr@((QM9tAKFU0~@W>5ZZ&2IVcDE{ZE;p|Sqi}3Fse|!tt8%8vC z@ygVV`c`jWi=(Trt;-CZT{4@q??Gd{t;^P^b$0##zl!%!z;b5mU2NB{Tnhg@bA?Y& zXJD7#kOC?`ef{RmKcV}|MU&oi>7r4~GWwPdElXZufM0$zsK`!JBN>-FJ6<)_o_zq~ zVwONsEoywrx3DWM4-i4rN~u(+ttD#@5>Z|$OLZ9hY-5-+t_$WT;iI24QxuFyjzLw< zvgLQBCg2JKP+~&t5`Q76d6PJvtmaF&m`kcU(Gv+MJyA!Bi7^l)Ar?r2BKV__`BbMS zr3%4kX@oRhkDc2i9uh<=;4|SMyxt216`Z0F8?3O{kwO;X*a_Q4AIKZALa?ODQb6IB zIHY$Wzg}!wT|3lW+HMduD$0OpL}PZl7FpDG4smvi+D2i3A)slyh0~Zh1c(MDWtRzx zUL{hBnInmF03M})hZj9XASe`v)<q{Si7xJ%C_2KPlmhxVL3E7Z7sQ!0*m{xQm|0lb zeV%%<u$|aj*x1gcg{Rr^FrbL|1A^8B=5GTluk#HN!Fkr=jZqF?Y$A-AT1~np#t^b0 zn+-Iri1BGLAB)sf9jnr_pXl|JUQV6^@Gt;R(Gy8YYjkv;)NFr@Dz4#=UxN%1Pg39H zwz5krnauQlV&h3Fn_XMpTH_~X+gC%AuoLw@<iW@)J$H<E9YNb;=kTD*9159wZpN+- z;-)+8WX}-!RS*T+!4nEM`(5C&aym*K8Ep9Cws&;WjhJ%)o=yN_;B6b%T)J_o@uvBH z+k=y_f;~nPQuR10P{3`-B(mvrW@#(Co=QAPuO`;_Hn-*w1Re(5ir(hYN8Oi!aC~{I zKXTP04?(lzn#(*=A8Z2EAnlAoAoSE8HG!j9=QnvgdOxyiky-`qkHPk}LHiHuIRH;D z09!g7<HoM*^^LK%2U8UWptKrE3Twd4-HpU<E|p)&PVeWZSJHFane@m#khKqe8#YF6 z57;h&ytQ5*m>&#qp|~yPj=7@pp@_2gsr8Fn^{qq0nA;^EzGVzddfm=m%aD)LAu=4W z#@%M~y}&2u04xDeb;<zP*jWGPsh0b`sirRZ^@>wK$*j3d<93jK58(!>)E)7U@+Xaf zLl%y+@O%bGa~Nl#IVGa)2<Iq^(vB<`B_27BworfxOo+u!bD&h(E!xZH04%(5y6Thx zuw$%+G<RH4H8xGWGFO-hDe_oJJ_{lkT$ID$qS-xOofM-Bi4c_uUxtj8G-w)0za|zm zMOE8DMJ%$CZcXeI6l~{VI?BWjaH;_4GyMchQZX^i5jmtF6fBoNAME5HR;a39mbw8x zZg0#ZulbaH5yfy~*h%@t{W8Dc($3u_L&*xfjkAuxQwPA32=XK!?ESi69526nbr}Ub zJY5S9DmyOK)X08C!r*+SK8s((`zT-`q+j*H?lQPIXX5{*5a#D%4Xb4ZA58Hilvt@j zbgE=EjMQFgEoN<5T{>yCNBa5GS@p*J=u!S|E?5kMI<vpO2%=f4*jkOl-dqWn_EK<N zF|0O&sDh0tQX@(&71iQFr$cotQj2D({GZICR2TZiOT>aOj=xZ;)2W5ak<=$#B-B~e zISKrj09cd*rZSr|GkcI+Pp&V{EeeQCZ7=S@(hJz-Cu9s>k<wN~JYcn=Hkd+6gsJUn z8j~TUq&bdOA|A>X%;C1v7N*xuV>DPjM!OOdG{XFN{!H_ulo*A{bPx-Gox^mrU?Ytv zjMiaFl@ilohI5tOhs22jE|dj|`Ryj7V<@1krxz9>k)GRqCU_hzWw#R3NytsVTwBhr zeV1RzF56|GpS(2+jz>3LfMIpsR^O$OX2LvV_1%ovToGL`;_wgLYZ@B0?!-+lH|>cU zANjpI1EcZB4NZel-MmLP;vwVyCfmH*=V>Qgw_A4}MSb(;*s#rcE#M4~IBo5*rgp1i z*v6b2Eqs7AV9^Xh@DAc3SSTneKmjrM_78s-bivOSQmfTl(~x+c_z!#6|C2_x#g9yc zHOwI61ZHbt7C}@Lgko{+)`wqEW7VqB5CLf;Ha;Q6Zz)RKO~H1%;k`Ud*q1bhxL^@{ zBqnuD@P}%etp7{@k$3L^(OT_GUUsqBGP%s$xpQeq`ti&?pL@>d<UEHP+pw^Pu$Kr$ zV%un%<+()<!!6u>^bN`Fk>x&@O?AK1iSC`>TO96n*Rajy?HnKJ)-!d^#)BD)vt|62 z`PSfiud}89_SBm$*QjY^u5SFbt+UQ$oiJ-UtrPC0m&>o_dj9dN{a^p_FTHZO{=L}p z%3BUvxC$Bups)cV;wz@{p;;ANNi3iUX6)Dk?n5M;NPA%6IGXe1U@y6yj>lu3<Zg6V zt%jB-E?t*na&%Nz3)lQZ-7_<<9nPUT-81T-ZmQQiH@N6L7$0is8JRI^Eb7V5+k<}R zqDDW_`D}3XR-5-hUCWzg>jSrY*k&FcHZ4slCWptZy=IlG(d1rM_f44^T`Jw8&ff1R zTfoxekGMmU8~}$|2tl)!5P}w<x~=06+?D&x8W8Wo31B}Yf=E(y3`fDE;C>KxGO1u> zYbTf8PafL302~K$>u=*j78M8DYQJA@*RjG`T5HxSl^pYnUCD7YWtO6U&otT#Jw2>c z!Ep+@W|lc{sfk}&<*H^@Yi7_iqS;P1TM11U4QRnA5jV(5BPlnEC1^oN7#U-E4Or@f zfU$SYcc*pjPp2Ob2ye7Cu8g%mt@qEblmvi$tqndRx=>vqKm5_gaBCr$xq9TF0$r|Y z2{FSODM{0}WD|+qU-3V`#U5_cHwq!eX-Mo$e3N%=jjT*UD8zU^LpDj!G|I>_MuH-Z za)m-cF_eN~a6>&xf?KV;48T$Yu%k}*Zs6WL+_>9bd9S|yZuR=u%@uC-Zb>X);c=A+ zutZ=L&b#DGN28m3guc(0FM?jILk&O|NxOWiCC}y+^w(-?I9ZMKRH#j><)m7v_S|GG zpNDzzaZ<)#=>cfguC%W{Y+o6BT0e~d2=g80fqM^cmJWcQcgzd*Q{eK_LxSSLQ`v&k zL&US&g3ll4ONf;bSmHIHR0j4oQdu|cH#KUd(psR$)L?Edi4*d%Hx39ZSg)zL>2c8{ z!Dn-R|6ls)ub&O~MSH<{br7|zXcG(ka0zIbQ(#r0S1$gbS1&J-;1lsWsJ{Fru`e&- zEBaK99KWB1^tEe+me1CdU6P&oNg5|Vx8f`W%LecYc)+|&CiVx=|9nHSa7l@17~+#S zmnvQymEV{1op~!_fNluDC-4<2#__cUQCBNtWHRL9QVJzQ31u`blSpJroRdlOjlU>q zd`1^ef>S$%e9|VmmywK?E}Olp$6;};^(UeH^Xgb42(ImT;`_mHJQYgAe#95eKqQ+8 z!PZtJgkYEs$AbLy{WTtx#Ug^ZC**`GvC*yoO)aA_aV#kp_w*2qoNO@4jkt;B27bpE zb<hROoY=rhNrFTVkqd3sh_#hvyZ2W&vzPA$V=-nC9EKO7xvVD{+D&~(ZAOn1iF7#l zVGVxwcyh=jZs!82&G_a<I_}wot&Ilo59<IN!-FRPGHP=2WuJG#G3wOKy<TM*3Wi!u zPuxv@6=BzqDtirSCG1ZI!EZ9?y`0KT%j*oTK3ZaL1-)0YJOQ<28Gv6Y012r5`_I_+ zh615L;3zJD%tFi)OC}@mAq#ua+}q^BA+mYffxYbBaUigkh(=Q$5LCXn^#V@b)V%l& zfL7XCx<`#Jmu(qlr$E6pIflTbubb%}HTADM?mxG<*PWbx8OHnIz^OEQ>3-XkrF&v| zXvj2T5i(vC{X-dmUnu}ZaPqSah^p*<d^5DR>xsZ#GQIJ8BE6Fdcy<<IZ!?MTzNiXz zLz!I<#J7)<>CN}Yf4g4sW3TIu`hoVjodFrMZc|UH^)ssvtZh!9B!qQ{B?%a8Jeab0 z7cG{>_3?hOktJKzB+<Zt#cosU^{p0X+f)lwvfPrCD+BO~-4NnbZSS0H@Spz*=A%zz z+o|KdK=v>mPwr$Ola7X>kV$PFFXXlo@pKRt!k(Sv?%H8I5ZQUJ=>+JTYw4Q3J^XC8 z7i7u<F*JJn{WiVKI@82RC>Wk4ghq$XVZJrt=<Azlv(1Vr1x)lI^T^QM+O{PJmhja% z{9;AZ!6InOuiz_&U%p-|J~tHOK1C(6fH>z(WWb(<U<0sh9scB!XILPgPhjB3zvFLX z5&LcQBdbw&%C?BkLe9uYnk0mQL5>BB%N(&%6S}f2Ys9gFV%A9EQF#-esrk}P8YRdc ziqUgCtWlC>C*+D*7^M|=+tm31jS8St7O<EISA|uA0dszsWARnt+_)+OUn&WG%^(n= zXLt@8-GJ+u`{Va%l>9cGmZNEomT@#sxu8QPq-6X}Q6G!W5A$b=#FGmL8l;3}8s=&d z2>$xJ&~~!=rlwUVQdcSluu7|_G#2pmuYlh*E5;@oM1qe9XE^;}n($Osn3r%TgrAVj z^yNJCc?m(9t|(_BT_OGmc>L&5N5`Y-pWaCa=Gz`s+-!e5-CkM%USyR;m(i7Z0n4+B zy?+D=T1Md20q|k1>e0$Ty|qKy{<PyBd$Yc=UIhe{5P*4E=<|t~A0?-M`t37A=Yk6` zL@y6LxJXXAjK8Y{VDtQZ``E*uG##z;(_=RtJ{>R*+$@;|EL1APzJ`F0$~x6U5ESL| ztKg$rW(5SHi9blssNJ8bdU@gKsVKg%yyW|`7J;%m1gKAd1X?K~YFM^XBrKs9Tu93d z<%_l+7Pue-7^)z6gr@8S!FQO?+2kV+iXxsOsH{~;NCiVN3I%SIf<ld9Smg6kIKni4 zuTW6==Qsit4UzIP0>32q6|>;ZF)t<M0e!Hr7tg{WB#su2G4BH3i4J|>+fP9bVp{?T zd>0DA#t#1*Yxv~g2K2)zj^IWNq?j}q<VGNk(8K~EA$v*9xSSxx1h6Djk^o}B4^gLy z1cP>5DVLT3_+{}h7lhbdFO>x(hL>?tQYaE%i>Kbl!trnrqQT7CLL#!ewv`GbGu!c0 zG#d_Q!_l09fDx~)8Z2|qRRB~CjEtB}I_b#w?5tZc<LouLbfD9N`z70@ZuPs=oNHC% za{7DwC5>*b*EPernxWH7)RY1E)uH@<q-BQR1~wz{XksTEie@1bOK)bjqictrY<f2x z3GKyp!=6|)fp>*}TzoEtUtvl2U-r)KC#^IM;E$fbSyHUvL`d0|6@{TxqzZ^&4WOt& z1!N@z5iu~t6$4Z!;%By_RueZF*63`yjzgtYF=m=nP4uGmX1&>7?&V(YAFzMLaz6NQ zi?(B7YMu8{Ip=T?jyXS{_kEuC`A7lCdDz2$EPE^(>Zn>U`f3Bbwm>a3w(=L(>+NB) zd8oe6Xc9gPkGI%;<Ff;fu|AW{1{Nb5X+Q*Eb_BNQsUqd4d(p^hf&_5-AN%u>7m@h! z{O0P5)#%ph>TWc-5#LMJH$zb8Qpn^TPozp<ekHO)hkH1@yl4p8o$Wf%J50hJHXOCx z?rwBX29^i9Efs;=DvQtT2=+a85A>LhpihJ}AOi6G9IzBpHb`kaaeNX#jU9XkupK*2 z>>r#=zdcQE98V=<r+-K!rl;bE!vM_327#hhH{1Fk1)y*JK4;L!Z6D_wmhVbCxb@~5 zne-vwDQDL%SBD1$+`+KKt>;wLSNFG9O|B~{mctx*C7J_%A;wAJO7eYREtpKptjqoE z{K9n7{>fH1QL&dTxW&KC2g1DI-G|@R0s9tUY>da_-@2VLJsuK9$U{C51z~R05#iGq zAMW4A_(D_y>v~!tK(z_U=H_5U2QYn_O3P&7qhwMh5DA&1#KP|=*)Rzwb2LX|>D)Mi zLLz6NOCYI`2qY4LfZCAXbk()YaWz%MO+Y^qshY^~e7*Q1f?()U%ygwx;_kwK7zK-p z`KYBh!uBprAJEB?#3uDqN~>dxUN)vWccr#hszQl!FRvGW*@H4cX19(J`{%!p$_g}A zeHcIztkSyDoWskTXMRGlZM5`uy$IxKHP!kOgG3t^FEn?m?;5ndVkt2G1;#%Tfp>WE z0VLBdSvggDOX=pB6o4$kOu20CfdAr7nCQM=8~!lRHdQS(-1CY(3aM3Oec<&d--t%o z5c}_+e*UYZFy#?G5D%C+MbzP-r+#Gf%+#EaSb}4XqI~fi44_)dQ+lgLgyN90K`NGb zLd;OvTo;sm|F@rhRu(2K<}xdoC<P50TZxVR6%s%C%=TNFNr<fg3fQ~JL$EO9t!$X+ z3|l+76M_a${mi{4W)nMg>gefDe<_USx!ez!f^0r{e7e0^8s7&vp58gxNXB+oPLk6* ziMO!5<{wRMkOsW*MhO0%ZUm9N$a6ppxIfGi6;k~h@zt%h%@->WIY{ijNY1Y%=eHso z{>`aq#P5%8XH_GTn*|^}2$JPE$S)S@k|8E$7^6^Q-z5MF|NfL%3tl^kN4EANYun&I zPDCOQjm)pXtF`2d=>B)ngVikr;Eg5_GL337f$p@Q4ToY6!3<&u-a1YVwQJka-5rR} zze>KI-%7+IuM)fdSNofrt1Es#0uV`&j1Y1yI2OZ4W7BYQk~%()9qjIu#vpb;ObB7; zq?Fi0{2?it8>TKDl}{5nI!$d^b?H)B$ajaNI74v88IxQ6k8}oR8+9Sy@y)e>vyIp? zDhV%4_qcOeZoeok6G!^)w?iPcw12+vD3;S9^~x&{)Z1nY&Rn%dG?E*x0jaD<jP&|t zIweTTse1I-r^Jnr;aqsS+AjhSNghPLvH~z*Mgk?2;~B&G3}|9X%Yjdv0F3<!5hr>{ zieTj#(tt=V1n}ORC^R=Ys|kn1+_{iu$<r#fI-kw-R!@x7XhLd%S9{gYRVkbw&2ph5 z*o*)~av^|BwWe33X%M~<Pk3hT%~?eysu7jC%j#8CdO{MlD%5%B$|{h^pmYa$bkThT zAd)-)a_7V%y~Zn@u&P9A&4jf^HTSJ*PGl8ZI~%-AwMh9!dc|-UoFcH93MfPXBFPI0 zJ6yx5tgn`qX&&&jYHvNaWJy)&R8F#0;_@(CQPC^C`XrEYreJiu--Q5P;B?8UNc3K7 z5d4xdGdTVc7ljwN9Ws)u8>$&$_i7{`dd*b`#4oUdvmWMry=REl*^oI!nB+vR3faDd zjFiafahxp`NW+Sym$vCVlI-WuRykEy5JM1N12+tDQ(0eA2}z{egi1<E-)QVp^5SyT z%=-XRnMKq`5!GSHn0z|_jYV7+2F+gsbv5s&f8g{blAUU(EGp8C#3s|JsNbO<sKd<P z!e9{3Q-3XnA&2+%01?l$0?hS57jQ`;-w>QRWHkQ&DY9FuuP^(`qcgD74lQ;p&jx(* z1$*9$s;Ynz3$Y_3>B>CFvM-Tgpcj$PJI8|kpQPWBd}*`I_cdT`kF#Ib2ySBlrjx4) z|J#GjsU83R)anlW-fa|qZvxCE=U7ZGfItm<k>N7}=mudC94_cLtv`0dvcuJ1p|9$9 z2*Ns9U=hxI{W`bv&+FquGQce@htO;uQ2wZNo5vaBTzO0QM_&p+m%|6JxPE8w%+XSg z5;T9a0Ak=Xbr1Xc9CH0j*x6gzTk%H^{Qk(w>-i|OwHO?7AMo3QeG7&KAuKL*KPAdu z!N52?aSyFScbk1^!RDxWX$n8mJu?M$!K%hV;FyLV>Dq1Ij0qMoXz#Xx^XZW@So2&s z#L$_{iuIuiaM>61vrsVxW|w1pu(5zGX_0(c0K!?&zS!M$v@jrf4k!Md$Vqf_Ix-*M ze?2t?%kD#)T?vX|o6&?B1rXq*6yG-vfIbU6A5R%erbGL1`+$uX?CEzqp0rt<eGa!7 zI1UGAu+33x#9qSTm@WWJ->jwE*$si}pv`heu)qPATn9tVFso2Lvl$+>uu+4C>tm3l z4agz{Kjj0k&aNADb@{^b;YRo_u`_iN-``7~uE3W66v}%7hdw7Tbv^BEyyZJ!?t%fR zO3m<mGUy-{2`z_Z4tYsq@cFvUsAx0l`)%z`8=P4z!hS_#|MH>_%34~Mfh+HkxLp=# z8`g1bV|O}SAR4zY%;lgM8V+-VHjWuX0A2&~SfsOpocq(32+qQb+%GuyXcY1oA&_-} zr|Y*;UKA_`ngQ&Bx5RSa06+gU<T}?8f7ihoNZ$~N>~3*xOg;^WW0^uUK(?o5jk1XL z)T20yK9_z8<p-prC8&Rqv`aAaE*Y;2{gw5_5C^my2BT{mQNN#l1|jg7`Qu6Ip}ZBO zUeJ1)DzQ1IxCxWg6x2t1fg}2ys|PQw%Z9M#dV?-=GUC}d>P+lw)|Z`|Z<QN)o0Elw z@cZ0?L6gVxpdr*Ce#dOkc;-a!dOg;r5s#{ntwM^k7JNYi5hPz2fLht)#5<K%x+D~L z>P1TpjHVim{%qv>1Bm2i04O$yG*-28a-_*HW00z>GreBTh-V1_h~(Fq19tIBcx>4{ z5QeJDQ@bSsMx|CGfFfJLNRXU2cX8nG(|bZ*VW;N^KqQyW<jGVxEYrmgD`0tO1R#=+ zV<h9Hzzd(4ivUFOnbj-;5D5Yh$rmvpOs^r}#SKVBf+Qb+Sf)M<h5$tJ>o7+y?bB_u z03%~jh*$tJ&jJm>NQ%rKy+`Kt0Jj%FB&>gs+U*3G3>Udg0}@0aFgjHdrgoBGa7J4H z?UFEDrZKc?%0@I*)d~b4lH&4*fmp0ntN+K|+5NPUT><>SjG3_-3<gbhVu6LfGPc2t z$KOC~V&WxcW7m!&8)IWYgvQ+%c_Ee+;y{%IR@z~^4+)~JA|Cn_soF?Iead4=rR_ui zg1+~ue?j}!nemvf1s=c<H@=6FeCOUfBMblL+_~qTdyX^PXEk{^#*trl`GUrk5);hF z3ZC&x&J%(J0SGRuu9StG(-SBK!0Lh=7xQ>M(3J%)x^ig%p5;r0!lE{j+ysp)>vJqe zg|Z=EvUpmIF`oykWEXucUN3Wr0Ah+G8!`@J8i+*&Mkp}kFWLke@FwWF+#+;~vk*{J zLs`W}#mIm%7MC>yOG$qZ+?VBLKsc-z5q`}v3+|neV+bi_S9b+**th+10K}mG{Rmvc z1U*QAQlSvo@6b+Q1R-Vgef>V7eusALHjN!d3B=(z(ExSMY<dEK3P_~x98!jYbiREF z9o6De>MMQfd*MkyKTs0@c#N}4h*EzdfK#(^;&wW+GX>Co@705Lc(||`2EzU7SA8%y zdrxzJ8v%&q5&?9l+=c<x87bzwzx(mg>=3LzdcW`|!{(DG?_hQI&7&=9K6OWbcMSoE zq&^DqGywIF-VEy&-fQoE2bP!GzWd(;^>7kyrNR~jV3Ur;#PO(XL_OAoPXkbMcN^Nb zet=i^AOB$&UN1Zch<vyC<NYE6uz9#U2sB!&I6MidvWQ)95BI46-roUgYZW@vi8rZ` zUeJJ%*>{7tXEOqT8U$do@OQHo4z)*$II1LC6@*fbY^x+Nm=D7RgNdF9U_2Gq%)SEZ z@v7$Wx6~g~5o%$xFO%BVt)`0B)C2wO4g#=AtT3{4IATstG>JHvBYpn;Z4%%@p&U;H zF#IIkwe=8gY`%j#TaUM%0jw>o!t*Da+iy1(pCr28&LBHrQxK>vxvYcv_0B@f>hZcX zJ|h^tMwh2#U&oxzpwk3j?K}&oTP`vNpSTp)q3*zLTnD199bmZchFGaF0hlnLIxzJ$ zsSN@6+4F}%Y1C1uOt`qhaAABUYIiPMjVs&=w;s(wR{c{H;Kk+-uh#y2kyYU{Vnh?w zFHwz<F0BV13Co7$^9RuD@wf_x9A|`r(G%sO%N{QyM(N-R<qw@7N`O6ox4rh=3xGOn zKmwE9{)uYX`>IEFwRXP^{X(Dr5ZuL8jHZgCYZREp#nGfO=3CJQ?SqD-E*jI>9U2&j zul;f--cerwksy(0!JS55=aCUFkUXX&TL$$esPils36euET5=#!Oey?HfjNkqgi;JI zs>I}B5F?NVL~=QH7$tTjEXScxqqR>dAraDmNG=D!quwx=;0%KRMDnRAKOs{Rf#mAs zb9nqO5R&=CDEa8QywbTQ(a_)S_!L82A>I!re~`rxT8a8-z-oHLUm&>>Y3S`;1hMb` zax{l8)SUCBQmaJhZ)|ncfE_rJs}e=S5=cmqQ6bq;15Wb35<YtEVzahII7`Zzik^P_ zy{)xA0E#=Ga1zNC2~IZf5KKVtUol7fHA=GfQC~m{1quq&TA@n;CH2JcFr#Q`6S}eX zk-c+1NGAc<fdITZ{_uv)iAP`%$X7hE^-7ijg|d*#CoB1Yt5ga)V|h*+WwLp4i-iCH z7L!RtK~&k5*mxyh2LIEK|NU5B01<*$1mNEq8o-L7oHP1X>@KFjWT8^9c4sTyoX3|3 z(0Q`g*EwI*Vl{&K>EHkJ5BTj>0VuQ{JAU3u9%_;b)f4>KEf9c>4WQ1Ii~6`&Uk=)@ z<-E)5rKqPc!5NKFZrx~MxQfpg4d{%ZfPek-FYvXkt^kUF96+{TmN60w^r2>Q|E2m+ zf3nsh5m)WMe*szRg8(EN_7za$D|p*XREtJ98~5eE2s**8Fm-A>R`eyxz-5^mnu)ef zVP-;&ch-3b76GGaoTf!~qykRz@(J0~BmD1Z7N>EX=6RJwmsqB0mDsJ?pT>LfYKc_s zkvLC^{drtG#M)l*{!On18(ISr(9JN4S~<C*Kipadb!@c85PYowTWf1w0VHwO#_~3^ zNSEKnvu0M+Wfq9xZGN-8-$qgXH0kF_D3?L%3_@p?1slnRv>@~sE?%Noo1gUiS<@WL z2IsA`pVaWI3FrMbwr7N7#hW7yh&A#o7$o->LRoW97I!E~`D&C0jj~M|>Sc(QhhUo3 zxzpNsniZhiE!u+_ZD=jX(>#@#*6yZZ;6+z_!1~&r4BZ}6;VO1?pwEz4oG*rZG;Z@` z(U5jqf<=;Yhxm<5&tyOEFB;qfR>Mw2{nD-7ouc|D{f?q=bEE+qc?c$ITi&ECz)CpS zpDE{smXqvWAUWz88gM9(2wUAI(m%fu*&RxZ^(9zZ1snbG!Sa_7*@Z-ZF_Rpd9+~V1 zR&~o@cL(EB0}u2gfpTUpo^cGo5W6wg)jw@lmouQBf<!veJES!a7z~N|Fg*YR{RtI` z0K}Sm>GSk=K;AtPk8H%%B)j-!CKPvDdLQUXm2Gb9R=NK+Z@EQJ>BGCl#75jbsLMbi zQl6fi+Sn+LPVvdiba;Bqjn6DD6&;rN5+(GXWWa5T^8;zfgzQ5bA;XL*qo3MC03rZS z8-mRv-%PQgK4A#ni_cgn;e~EAz|y?_-ZysLl7>$kOuhQvxiXb@m<<8HKBDannL72R z@~FATJ)?`vjG00fa>;6T^wW+dO?r>F@7Z}nn%Ab2L-TYXlr;6)X$0W^DS&lLNq&X~ zv@;YBtY|Q?SV$gt+HV#{<{sT3?*|?So+pJlh%oi=)2x{m+DV~G5aEiTl}|c)%wWdB zO#5x54S2RX4`yvR4?SAI&BB$!^~em<pa9BlFvQQ@?W^7}V&;Z(5_phssp?gInju=4 ztde-u)@L@8xJop&hz31Bi__wXWbBhIHMH0+9%2<qvSyt1lcG&VXcW7s@R|`&>`C$} zu?iUi8yP^T?ueB95QN!=61xetosshP-1EjI+RycMCV&zwRS-#$A(@n_9q>%+on%3* zU3}_73R(ndXaGev7Q2Ol<DgCkjsSfU)FX2vk=^$55-4vtC(v5(r{=F=0VJShEd~ZA zZ&0*p%K<{K(?dW9S_Z>{Q4cJQ&CM~Pz_~&q2<+{S0jTe&&(MG*a@4yTY1APYgBZtA z%bsPU&f|>bnY^*W6g;|0A!>}~$AJlI?UXZlJ^%^OJR2E)F)bUgkvrBW6}mAsAO_2o z51uG2YbspQTk++9%UeMA6XRWmm<QVXI+Ld4d8fe`P`}<DJADYox{+qODp6f;B^vS_ zP*VV>uT=N|`4vOH;*DO5j%EwxXfEK)F2?}VQVLDm|JXa%n5NP+0Ketr^h=YPLMQD; zc5RCkST4o3)V5sg6i|dhD?(tnSgr#F3qq|ZBH{&!3=2j@ltEoJV>AR;P5i@7Hd+3- zD4J0Q9E`@jBszaae{E*w=k7VD?P-g}O{8_)&iAIC)9>r)IY-XZ_q)B9_p?7>EUlwE zR~iK~CebqmSU!x1Kh{C;Z%9BSUqaFuYNEJ=0P%q<0a8hVgyXsA_jQD0Z2dipd~Z7? z0qx<0<wHm-`dGaX5wMW?L`(AyT@h=A@SZb)-gV>vPDw}sSU%Wr^W$uSkq=}(KFq=K zW%dcNuu`%@EFa7-{nzb=jYD%_!2n{x0Aj%sc-1z<bYK9nyn{c&6aB@1Bof4kHW)xG zEAz+f377RfyCYmtQ$v`r8VeTp6p^la+uQY$NEbO6KrA8UkASouu{AQmDe98TA;GGY znA;>;jmSAI(xzbzh$Zv@Y777ddzaJNZ<ae_6KyJo-k$B$>Czl(5(9`O<N)SrAWduL zR%?X)Rx>G^)@{pEN$lNnj?NK@0mKsWQ3zqK){}ahEG<%9mS;1hIuq2>_BNq4TP5dU z0I__4Q82NrDm%gZ{^J0UnG}*rrKpv*?Z7C97l8!05(d+rNp#W>ibq~N;?c>1L#6@! zqU0}MDo4vF$LRpUQV8;|0?S83AZrfe2>^q9Tq;AQ0TH}|DCAd5-AF5Jx_AHn{ku2s zo*^)S;ZJ0cpK(A9DBz1{#C$&Si5S=b>8vSO#*B|y7y>DrdH(aGNB??0J3G6Vq7e(0 zRRT!B_|D0p$%)gqP9Ff0@kVBrUg#}B!qKU<K++|b+cNY$fAfrzM?Wkrox=cP35EtV z9=x%2<Y0|*cQ0K*__xM`%@Vef0IA~nKVQFo^XBK*^GpARVQfkrZe2iclk2sS4)9^H z`+!BY=>U?68@ZDMu|PHrO&!VL59}|U8Z^L--JG>Ij>7Gc$$?agz`IYLzIeQ_u<-Q7 z{Bwmg0zbB}!_YTFjkm&$;i@gR0%|}$<ky;jh&#J;u(x~=_LpBcT0Vv*J|7>i9f!f4 zYkRkTn!3Gr<HRH(h41Dl0-r9tc=6=P-0vgsASA5N0}fZ<#)NRiiXq~W+o=fnoKHvq z9$MYxM?e4x*imZ%h@2P#m>MP9a)j!M5#sC=z|bgM+j*_I6N<_Q;*u%^Qut<Z?x+7y z0RFT%H@5);7*0Y!j7^ma0%lxF+hBniQ7-}2{i3mq(Wyj~u3};q1-A+I04Uix2+%u< zj!jKWHTROEBUEVu2DWb>l>t~LwvHO9LC4=07v~-?JYIM*xA;mS#Q=sCfI5wk>(qBw zCu(eEa(fg^8?tSYDzj2!?^aejv}T#!DN|`UApr2$)>66;NCS8_YGR6Fv6nbY12_r; zy9=8~Aht*->8(}6hL^Lm-#?vyI!^)k4GiO_7FGcEJNnl<2)%k+-tVgIl-6-*%#OG; zo7TC`UcFwe*J-Nt=AOtPH^G#UP*vVRHNl@#$PMkD8EPIItUXQcrW)ka%`m<djO8`z z^3z$9qmiI^xwQ2ClOKPaU!0wNxd}JHVWt6{anUwV8M2+-W@{V;AOgGI>d<TWJ!Y-O ztkT-L6YVpr@+@6J12&A`1}Het0&w^M7_N=%y3k1cp^+(>2G+oZftk+np@AeIq?=wo zn5Vjbb3ZICJ-|(Hm`%gP$>p*(kO?78o<WBTOycviMg0lNF4Dl!_A9&iF}k&Fg5U$_ ziOla#3F|vP@rl#Gkcwc_rZfL|_3G7k4`w&udFXH>(7i?M<6rr(U;;>ugGo9bCcPm@ zW(kBO*b<4Tx3qr>ooyMAR0^O_Q0?{?6n|I)h82I*Q|8eIG0eIbV)D`uOdY!;&??=N z{<k?+KqowQ0+QJeOQplq_@njL9%dqpNkrbJkA3bzu}uhqK`LvkfceAnO8|%k3kDF& zFVrMs0I`IYGvBVBJADn4HzY_1VgRwc0}lEXPkVyI6YdO2-dPtqdnU2!jz0zv%gSsN z6hKr4^-f5qOy@CHpj~_rC3Y!gv0_ieUJPIWiGT>|g&A6v5Rj(>bCRHqPRx+V0oi&e zh_y+;sfp<->)}dbA%ns(=+iI(=6C$(SlCjaNL|ayezQi)lGMGUBkMiC|7qNT)fEw* zcdXl1pc6zyAb;!0w=W&w+aYkg`Tqql56o!}jkUj9?zBhCZC!Tr-?(7aijwkFYI}8p zUDL)G3I-WK<X&>~`eqXT-kNTgQJ0Y-fM4`#_xF6ByxW+TEwD3(J`R7#7g82KZ;|~b zQ=q}(u{Y|yB5fV%bNiGEM1E1-*(1SwOP>Fy@10-(-2m!zpy{`RMx(WXQ=3q&ae_kv zR;M9BFSqyTx)aPXq38orMKQ;{?80~?)2nifXA)D4CkWDwB#;Ek;2>8TMZ&c}L%8>@ z0=;ra5bj#~w1_$tfage8+&LeoCwDdC&(I5gt`ATv5AEAWG1u41;~^euRX`uzC86E{ z8m2!(yjBFQRFT@ypChFB_8v&-K^vXug1v}4#vRP?5$kM4GIi{|(`!$dKSp?<oR&MH zr_J`fJiXJZ?XmUSRg?yFDnTt*CG_ZJ6?RQ1G$2$()<pYO2^vHtzGZF-fXo0;!6{h- zsSV&4!67om?*fJ`%r0{?wOMmmNL?$P>$>2UPnZ4Pd?mULAm8BmJpf!kNA35zjU5!y z^Ecfdc>7KO+`QsB?A)K-2f%OdJshUb8QXNB<aV9stVva_eex~u1uJhY|C?0F-YW-M z_(?oOCWzNomlg0iL{b6O2P6u*L<Fo8gScQFM7JSf7ZHj+ATkzTn}K|kS<zBlmR#@| zoa(K+Z0QuWq~FRE7o~QTR$Mk!<Q@QWFyGjbpW0AVXn?ZPj-;~EB95gnxmew>x%5^{ zOKIF~ODZH@D9tWws>{i*YWXZ@K&_6evq%6$g)J48$(cr3q9wU3H;0>EG6O<m?z+mx zQ=2Wtl9Z~%m<Hp~#2i!Xu5>Y6-E;BW-sAhO9zR}R-*@%UiQ(4c?SGZRmHOi_eCg21 zo7d0pInf8_+pk~x@=pEUulHPs`w#DZd++{T1%h=)AZM&l*lB4iGVMyPs;H<e7D2K) z#n=FXExD3R<5-m}HuG5F`buLCw<$Mji-~KB!2r70;L+Mg=xrE%CTHk>5g{1`QyQ=| zITs*3GpjLrSH}*n5u!RIjq6Pvr*c|03QUcntYVYWlv4@N6y1@UUb4%SQU;k#+{1>- z{g$GFn1NE*Y-y??jag&qH4tMtWjT^^B<t9i*m!JX@)l)!mI&a~n4qS(<X~2fp`>xg z{>0p-#vNcvUX!0LX{kxfs%q@4OK;(pW?e39sY!*ezl^wa^5n(67f;q-J-_Er#9#X0 z&>z17xboGXC;<1hx3}+sOLw6D(4C9t@0`4Jv7OR?kDfhy^pMtaGc9ntGIQg9+q=4+ zHm)@Mz{rduflQEKwO%c2?2whQ*P>0)u0I6EHnlybUW0{kDD^l4W(_jnvRfL8y@_3{ zMtrG(4b1|{nj|G+O#&CWNTpnG6{&aC-tJBJqW`1w;g2DK)wT|av^mekWaiA7@!&ju z&pGe=&hxhUn5fR$v+Gu+4ja+$_r<4C)jRErnqvz?Qx^T4KRm!Nk-Di{0f#$I2v}U9 z6>?x`u~PL#@t@LifTGXD56IszCJ<0F&-pt0y#{UsRddEDm{?1X!_hWkO)wn}FbjN_ zu+FCNdxwm+03y+Yu+5+H4QnDxHhtJJ;thrUx9k>hhT7>lzolbpq#<hW*Lj`3fa(YX z>H3(}kh3RZ{w3q^T-3MFjX<wv*f9`ej{2RUwACNegiUF?#b(Bnzd!u?&eqnmzphU1 z>|D9>@X@E$*Jl5M<$vCJhUI5Zu1v08dH9bf_-ggqox7{|AKjnDGXC@3ci*FtpGbIe za698s#xxhGnKEtr4k9@V4E>iqVRVI=aI`t2VPaj=F`rlIV|rCXIXl-@PbPsfpTNa4 zO)@!=fEKl$Uv|uURMQ>kaPYIY9;cqNG%!}$?Q`Dr<_1HQQ)Q|{#2qnndR?zohsd_0 zo3jozn!ItH@z8Azao+8ly#XT*LQN5^&l2ZSjNOxf!J+T!S%5JU;JOZ+0d>N9*lDtR z41N#J`%F#lur^Z1wfTp1U7a>-^PpoOVFn&de!cVf-k12|i*Fu(b$9a7r<lDrc@KB* zKft*!uigFT;npNiKz;~*e1B*4!HzIJ{Ndl<e*dpe^r)^Kgf6ZL9U7d8qn3!e%Rbdn z4~~2H$O(_%(8k#eicmt)-ye!7EzJQ_)v%+%t|bI~jSN3ooQOigE~BIj-KLHv=?eKc z)y=(dW6tZQ<$b8Z@+mD;mJ=5Jr#|BB<d(E56CfO%D?Vo7(Y7XM3ulWz+rI(kWyw)Q zo$^uCfBRMl-WUPJfU~%`p((j6f5AzjkpAz)Ojw!QMDWOz55<eb%SsNHLRPJGN_NYV zF9vk^L(0wkMhs|-)ATsT$EDZvMVAY|86QVAzd0u@j`^K){64=G9{xAW;v1`?#9hfd zM3o*z{1abr1QqsZiueJKl`DK@G93S_1uV`#%V7q&k5+Qc$=t`F%e`gY3MEcTO%zSb zA{P|oj^Gm<(ejcgf`^YT1~Uo=)$;z5IHq*)tKU`20wnYc(T!tu8jpV<h$H$1GgSPc z^0-L7UILyPkUCil<fYy(cY7(4NB@-HB3%sZR?81?dK*E-22l1=(izT6NHz??i3X6y z9~*J?oi3^kbc6cW7oNAuXW4{+1ZO=0*W|9^x%#uuKSa$(m()-9JI}^BN(e}B5-7a? zhmY`a{Ig4cM)OsC@F!LM>zxA<yzLh7>3h!yp1$*m=VLT~jymO~Gl~uo0ur1^3(W^; z`~3x=<~@E0{%y<q7b;DAAp|7&X^UVnjv(fywYIlwJ!ce<BLpNkg@H1Etkgn=V1n1l zKUpk*rZ3XO4@mI;Np(U%0zyCnLO=onLO=pSKmvj{O+eY};V4NW(Z_@c%4K6o`X<3E zCLk@ULsN<Z1*_$X22zDgDScT?SOn2UC3v+2EGx2<5{B#RWXdeE9e%4+9h0`GxOg4G z+fG1{K8BTivLB*YKCMLE%)YQoDbR46fkLPuti7EA1^b%Y6y$^!v4U{fa*{8W;Aaz% zrjQBlWjBJ`!l96aL)nH4$vA2@D>YJkqgo&vbQ*Kb#XCuTL0&2&sAveLkZ>g_{37Y% zno~~Hj7-st8yKFScS1WhkCu!bwU}l*aDHPCT=)Q*^sdcJ#jI$*bqFriO@svqDzJbG zjIf9BU?J%145rcUx}kKfAjU4{gO?loGDj2Z8Ys}xmxYDRARUaDH#W0lNi0slA50<@ zB+3>9l@O4^QlIded5F!$U14Zu=9M$qrkOR+D@(0oyUF!dF*k8>9oJbWPt48$>jo1H zd0h>e^}VX(B3Ty`RAvFwY%f~Oy}@Xl4MR1PRgPtEx^hC5V&mo*Z}n=0PGMHRvQfno zux-09zmcD~taJ6O#PY*?87K$=2`aIGgX}J@?<HBij!i>7Dp<gVQGWFiFtpFC?7Qsz z2uz`6G&_+2qHO1!D`GYt9@MVy=e4)@H{EBHyiM?yEJFAJbT^pHjJoEb9^1U0WV5xS zw{e5Lo(`tYvrEc}O%(*ej5SxE69@-6o$E&L{=`lGsx{s&ZfXbt2`aIGymhM`*_&7! zO#!Bjb!H`}SldSZ{Q7zd4U1_kY)p&lG2Z-s6Ai=OyO_#v=J|E<W&T7YzeJ{h1eIAp zQ9J0DFzmJhO%xObg`y_2C@DmNZW8OXLi9L`>LI9sAP`PT*AfB}R5%3FiozaMQZb_n zs`#QjK8ot}D78>HCTCAT@N)?$g?lL}??6_WK^E+#Wd(z2N%S7_XfXL+2`V9Ak%YvS g5xg-161<)G5p)S`oa6?%JOBUy07*qoM6N<$g6mIc3;+NC literal 0 HcmV?d00001 diff --git a/website/src/data/users.tsx b/website/src/data/users.tsx index 40be9f49be44b..0855937be8649 100644 --- a/website/src/data/users.tsx +++ b/website/src/data/users.tsx @@ -371,6 +371,14 @@ const Users: User[] = [ source: 'https://github.com/lyft/clutch/tree/main/docs/_website', tags: ['opensource'], }, + { + title: 'CodeSweetly', + description: 'The Home of Simplified Web Development Tutorials', + preview: require('./showcase/codesweetly.png'), + website: 'https://codesweetly.com/', + source: null, + tags: ['personal'], + }, { title: 'CodeYourFuture', description: @@ -631,6 +639,14 @@ const Users: User[] = [ source: 'https://github.com/eta-dev/eta-docs', tags: ['opensource'], }, + { + title: 'FAST', + description: 'The adaptive interface system for modern web experiences.', + preview: require('./showcase/fast.png'), + website: 'https://www.fast.design/docs/introduction/', + source: 'https://github.com/microsoft/fast/tree/master/sites/website', + tags: ['opensource', 'product'], + }, { title: 'FBT', description: 'An internationalization framework', @@ -853,6 +869,14 @@ const Users: User[] = [ source: 'https://github.com/home-assistant/developers.home-assistant', tags: ['opensource'], }, + { + title: 'httpin', + description: 'Decode an HTTP request into a custom struct in Go', + preview: require('./showcase/httpin.png'), + website: 'https://ggicci.github.io/httpin/', + source: 'https://github.com/ggicci/httpin/tree/documentation/docs', + tags: ['opensource'], + }, { title: 'I am Massoud', description: 'The portfolio of Massoud Maboudi, Full Stack Developer', @@ -2077,6 +2101,14 @@ const Users: User[] = [ source: null, tags: ['meta'], }, + { + title: '30 Days Of SWA', + description: 'A 30-Day Developer Guide to Azure Static Web Apps', + preview: require('./showcase/30-days-swa.png'), + website: 'https://www.azurestaticwebapps.dev', + source: 'https://github.com/staticwebdev/30DaysOfSWA/tree/main/www', + tags: ['opensource', 'product'], + }, { title: 'TiDB Community Books', description: 'A website for co-created books by TiDB Community users.', diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index d2ccfc69aaca4..62363cbbd647b 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -6,6 +6,9 @@ */ import React from 'react'; +import clsx from 'clsx'; +import LiteYouTubeEmbed from 'react-lite-youtube-embed'; +import 'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css'; import Link from '@docusaurus/Link'; import Translate, {translate} from '@docusaurus/Translate'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; @@ -18,10 +21,6 @@ import Tweet from '@site/src/components/Tweet'; import Tweets, {type TweetItem} from '@site/src/data/tweets'; import Quotes from '@site/src/data/quotes'; import Features, {type FeatureItem} from '@site/src/data/features'; -import LiteYouTubeEmbed from 'react-lite-youtube-embed'; -import 'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css'; - -import clsx from 'clsx'; import styles from './styles.module.css'; diff --git a/website/src/pages/showcase/_components/ShowcaseCard/index.tsx b/website/src/pages/showcase/_components/ShowcaseCard/index.tsx index a09b4c5e49091..39c6c07f19dd8 100644 --- a/website/src/pages/showcase/_components/ShowcaseCard/index.tsx +++ b/website/src/pages/showcase/_components/ShowcaseCard/index.tsx @@ -7,13 +7,10 @@ import React from 'react'; import clsx from 'clsx'; -import Image from '@theme/IdealImage'; import Link from '@docusaurus/Link'; import Translate from '@docusaurus/Translate'; - -import styles from './styles.module.css'; +import Image from '@theme/IdealImage'; import FavoriteIcon from '@site/src/components/svgIcons/FavoriteIcon'; -import Tooltip from '../ShowcaseTooltip'; import { Tags, TagList, @@ -22,6 +19,8 @@ import { type Tag, } from '@site/src/data/users'; import {sortBy} from '@site/src/utils/jsUtils'; +import Tooltip from '../ShowcaseTooltip'; +import styles from './styles.module.css'; const TagComp = React.forwardRef<HTMLLIElement, Tag>( ({label, color, description}, ref) => ( diff --git a/website/src/pages/showcase/_components/ShowcaseFilterToggle/index.tsx b/website/src/pages/showcase/_components/ShowcaseFilterToggle/index.tsx index 8df064852eece..acb4516d111f7 100644 --- a/website/src/pages/showcase/_components/ShowcaseFilterToggle/index.tsx +++ b/website/src/pages/showcase/_components/ShowcaseFilterToggle/index.tsx @@ -6,12 +6,12 @@ */ import React, {useState, useEffect, useCallback} from 'react'; +import clsx from 'clsx'; import {useHistory, useLocation} from '@docusaurus/router'; import {prepareUserState} from '../../index'; import styles from './styles.module.css'; -import clsx from 'clsx'; export type Operator = 'OR' | 'AND'; diff --git a/website/src/pages/showcase/_components/ShowcaseTagSelect/index.tsx b/website/src/pages/showcase/_components/ShowcaseTagSelect/index.tsx index 29ed978841b9c..7495cf42eb58e 100644 --- a/website/src/pages/showcase/_components/ShowcaseTagSelect/index.tsx +++ b/website/src/pages/showcase/_components/ShowcaseTagSelect/index.tsx @@ -15,9 +15,9 @@ import React, { } from 'react'; import {useHistory, useLocation} from '@docusaurus/router'; import {toggleListItem} from '@site/src/utils/jsUtils'; -import {prepareUserState} from '../../index'; import type {TagType} from '@site/src/data/users'; +import {prepareUserState} from '../../index'; import styles from './styles.module.css'; interface Props extends ComponentProps<'input'> { diff --git a/website/src/pages/showcase/index.tsx b/website/src/pages/showcase/index.tsx index e3a576ca3c1c7..0cfd04de3d27d 100644 --- a/website/src/pages/showcase/index.tsx +++ b/website/src/pages/showcase/index.tsx @@ -6,11 +6,21 @@ */ import React, {useState, useMemo, useEffect} from 'react'; - -import Layout from '@theme/Layout'; import clsx from 'clsx'; +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import Translate, {translate} from '@docusaurus/Translate'; +import {useHistory, useLocation} from '@docusaurus/router'; +import {usePluralForm} from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; import FavoriteIcon from '@site/src/components/svgIcons/FavoriteIcon'; +import { + sortedUsers, + Tags, + TagList, + type User, + type TagType, +} from '@site/src/data/users'; import ShowcaseTagSelect, { readSearchTags, } from './_components/ShowcaseTagSelect'; @@ -19,20 +29,8 @@ import ShowcaseFilterToggle, { readOperator, } from './_components/ShowcaseFilterToggle'; import ShowcaseCard from './_components/ShowcaseCard'; -import { - sortedUsers, - Tags, - TagList, - type User, - type TagType, -} from '@site/src/data/users'; import ShowcaseTooltip from './_components/ShowcaseTooltip'; -import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; -import Translate, {translate} from '@docusaurus/Translate'; -import {useHistory, useLocation} from '@docusaurus/router'; -import {usePluralForm} from '@docusaurus/theme-common'; - import styles from './styles.module.css'; const TITLE = 'Docusaurus Site Showcase'; diff --git a/website/src/pages/versions.tsx b/website/src/pages/versions.tsx index c9239d28edb63..9db0ec5d10ee6 100644 --- a/website/src/pages/versions.tsx +++ b/website/src/pages/versions.tsx @@ -8,14 +8,13 @@ import React from 'react'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Link from '@docusaurus/Link'; -import Layout from '@theme/Layout'; -import Heading from '@theme/Heading'; import Translate from '@docusaurus/Translate'; import { useVersions, useLatestVersion, } from '@docusaurus/plugin-content-docs/client'; - +import Layout from '@theme/Layout'; +import Heading from '@theme/Heading'; import VersionsArchived from '@site/versionsArchived.json'; const VersionsArchivedList = Object.entries(VersionsArchived); diff --git a/website/src/plugins/changelog/theme/ChangelogAuthors/index.tsx b/website/src/plugins/changelog/theme/ChangelogAuthors/index.tsx index 0ca25fbe7cb94..57be25cbd4a04 100644 --- a/website/src/plugins/changelog/theme/ChangelogAuthors/index.tsx +++ b/website/src/plugins/changelog/theme/ChangelogAuthors/index.tsx @@ -7,11 +7,11 @@ import React, {useState} from 'react'; import clsx from 'clsx'; -import type {Props} from '@theme/BlogPostAuthors'; import ChangelogAuthor from '@theme/ChangelogAuthor'; +import IconExpand from '@theme/IconExpand'; +import type {Props} from '@theme/BlogPostAuthors'; import styles from './styles.module.css'; -import IconExpand from '@theme/IconExpand'; // Component responsible for the authors layout export default function BlogPostAuthors({ diff --git a/website/src/plugins/changelog/theme/ChangelogAuthors/styles.module.css b/website/src/plugins/changelog/theme/ChangelogAuthors/styles.module.css index 08d003d4e0e65..19ec3dd69dd2a 100644 --- a/website/src/plugins/changelog/theme/ChangelogAuthors/styles.module.css +++ b/website/src/plugins/changelog/theme/ChangelogAuthors/styles.module.css @@ -28,8 +28,8 @@ margin-left: 0.3rem; margin-right: 0.3rem; border-radius: 50%; - width: var(--ifm-avatar-photo-size-md); - height: var(--ifm-avatar-photo-size-md); + width: var(--ifm-avatar-photo-size); + height: var(--ifm-avatar-photo-size); background-color: var(--ifm-color-emphasis-100); } diff --git a/website/src/plugins/changelog/theme/ChangelogItem/index.tsx b/website/src/plugins/changelog/theme/ChangelogItem/index.tsx index fea34d46bcadd..fee2063062608 100644 --- a/website/src/plugins/changelog/theme/ChangelogItem/index.tsx +++ b/website/src/plugins/changelog/theme/ChangelogItem/index.tsx @@ -12,10 +12,10 @@ import Link from '@docusaurus/Link'; import {useBaseUrlUtils} from '@docusaurus/useBaseUrl'; import {blogPostContainerID} from '@docusaurus/utils-common'; import MDXComponents from '@theme/MDXComponents'; +import ChangelogAuthors from '@theme/ChangelogAuthors'; import type {Props} from '@theme/BlogPostItem'; import styles from './styles.module.css'; -import ChangelogAuthors from '@theme/ChangelogAuthors'; export default function ChangelogItem(props: Props): JSX.Element { const {withBaseUrl} = useBaseUrlUtils(); diff --git a/website/src/plugins/changelog/theme/ChangelogList/index.tsx b/website/src/plugins/changelog/theme/ChangelogList/index.tsx index cf0d7b7297a35..17aceebb6f018 100644 --- a/website/src/plugins/changelog/theme/ChangelogList/index.tsx +++ b/website/src/plugins/changelog/theme/ChangelogList/index.tsx @@ -6,21 +6,21 @@ */ import React from 'react'; -import BlogLayout from '@theme/BlogLayout'; -import BlogListPaginator from '@theme/BlogListPaginator'; +import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; -import type {Props} from '@theme/BlogListPage'; +import Link from '@docusaurus/Link'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, } from '@docusaurus/theme-common'; -import Link from '@docusaurus/Link'; +import BlogLayout from '@theme/BlogLayout'; +import BlogListPaginator from '@theme/BlogListPaginator'; +import SearchMetadata from '@theme/SearchMetadata'; import ChangelogItem from '@theme/ChangelogItem'; +import type {Props} from '@theme/BlogListPage'; import styles from './styles.module.css'; -import SearchMetadata from '@theme/SearchMetadata'; -import clsx from 'clsx'; function ChangelogListMetadata(props: Props): JSX.Element { const {metadata} = props; diff --git a/website/src/plugins/changelog/theme/ChangelogPage/index.tsx b/website/src/plugins/changelog/theme/ChangelogPage/index.tsx index ef45aa304e6b3..7ce92e1707d2d 100644 --- a/website/src/plugins/changelog/theme/ChangelogPage/index.tsx +++ b/website/src/plugins/changelog/theme/ChangelogPage/index.tsx @@ -6,19 +6,19 @@ */ import React from 'react'; +import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; -import BlogLayout from '@theme/BlogLayout'; -import ChangelogItem from '@theme/ChangelogItem'; -import ChangelogPaginator from '@theme/ChangelogPaginator'; -import type {Props} from '@theme/BlogPostPage'; +import Link from '@docusaurus/Link'; import { PageMetadata, HtmlClassNameProvider, ThemeClassNames, } from '@docusaurus/theme-common'; +import BlogLayout from '@theme/BlogLayout'; +import ChangelogItem from '@theme/ChangelogItem'; +import ChangelogPaginator from '@theme/ChangelogPaginator'; import TOC from '@theme/TOC'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; +import type {Props} from '@theme/BlogPostPage'; function ChangelogPageMetadata(props: Props): JSX.Element { const {content: BlogPostContents} = props; diff --git a/website/src/plugins/featureRequests/FeatureRequestsPage.tsx b/website/src/plugins/featureRequests/FeatureRequestsPage.tsx index 516f490485d20..f5d836130b532 100644 --- a/website/src/plugins/featureRequests/FeatureRequestsPage.tsx +++ b/website/src/plugins/featureRequests/FeatureRequestsPage.tsx @@ -6,10 +6,10 @@ */ import React, {useEffect} from 'react'; +import clsx from 'clsx'; import Layout from '@theme/Layout'; import cannyScript from './cannyScript'; -import clsx from 'clsx'; import styles from './styles.module.css'; const BOARD_TOKEN = '054e0e53-d951-b14c-7e74-9eb8f9ed2f91'; diff --git a/website/src/theme/CodeBlock/index.tsx b/website/src/theme/CodeBlock/index.tsx index dd5aedfc18dec..82dc1b0f5f14f 100644 --- a/website/src/theme/CodeBlock/index.tsx +++ b/website/src/theme/CodeBlock/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {Props} from '@theme/CodeBlock'; import CodeBlock from '@theme-original/CodeBlock'; +import type {Props} from '@theme/CodeBlock'; // This component does nothing on purpose // Dogfood: wrapping a theme component already enhanced by another theme diff --git a/website/src/theme/ColorModeToggle.tsx b/website/src/theme/ColorModeToggle.tsx index e9e653d163ab5..44f81a00ff66e 100644 --- a/website/src/theme/ColorModeToggle.tsx +++ b/website/src/theme/ColorModeToggle.tsx @@ -7,7 +7,6 @@ import React from 'react'; import OriginalToggle from '@theme-original/ColorModeToggle'; -import type {Props} from '@theme/ColorModeToggle'; import { lightStorage, darkStorage, @@ -19,6 +18,7 @@ import { DARK_BACKGROUND_COLOR, COLOR_SHADES, } from '@site/src/utils/colorUtils'; +import type {Props} from '@theme/ColorModeToggle'; // The ColorGenerator modifies the DOM styles. The styles are persisted in // session storage, and we need to apply the same style when toggling modes even diff --git a/website/src/theme/DocSidebar/Desktop/Content/index.js b/website/src/theme/DocSidebar/Desktop/Content/index.js index 0d47b8eec9780..19d30bc260019 100644 --- a/website/src/theme/DocSidebar/Desktop/Content/index.js +++ b/website/src/theme/DocSidebar/Desktop/Content/index.js @@ -6,8 +6,8 @@ */ import React from 'react'; -import Content from '@theme-original/DocSidebar/Desktop/Content'; import {useLocation} from '@docusaurus/router'; +import Content from '@theme-original/DocSidebar/Desktop/Content'; function SidebarAd() { return ( diff --git a/website/src/theme/Layout/index.tsx b/website/src/theme/Layout/index.tsx index 78f03a793f88a..44034528edcde 100644 --- a/website/src/theme/Layout/index.tsx +++ b/website/src/theme/Layout/index.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type {Props} from '@theme/Layout'; import Layout from '@theme-original/Layout'; +import type {Props} from '@theme/Layout'; // This component is only used to test for CSS insertion order import './styles.module.css'; diff --git a/yarn.lock b/yarn.lock index 5374e67cd0deb..769b532fb0fac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,22 +147,6 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/cli@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.17.10.tgz#5ea0bf6298bb78f3b59c7c06954f9bd1c79d5943" - integrity sha512-OygVO1M2J4yPMNOW9pb+I6kFGpQK77HmG44Oz3hg8xQIl5L/2zq+ZohwAdSaqYgVwM0SfmPHZHphH4wR8qzVYw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.8" - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - make-dir "^2.1.0" - slash "^2.0.0" - optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" - chokidar "^3.4.0" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -170,7 +154,7 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.10": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": version "7.17.10" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== @@ -197,21 +181,21 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.15.5", "@babel/core@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05" - integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA== +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.15.5", "@babel/core@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.12.tgz#b4eb2d7ebc3449b062381644c93050db545b70ee" + integrity sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.10" + "@babel/generator" "^7.17.12" "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.12" "@babel/helpers" "^7.17.9" - "@babel/parser" "^7.17.10" + "@babel/parser" "^7.17.12" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.10" - "@babel/types" "^7.17.10" + "@babel/traverse" "^7.17.12" + "@babel/types" "^7.17.12" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -227,13 +211,13 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.17.10", "@babel/generator@^7.7.2": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189" - integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg== +"@babel/generator@^7.12.5", "@babel/generator@^7.17.12", "@babel/generator@^7.7.2": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.12.tgz#5970e6160e9be0428e02f4aba62d8551ec366cc8" + integrity sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw== dependencies: - "@babel/types" "^7.17.10" - "@jridgewell/gen-mapping" "^0.1.0" + "@babel/types" "^7.17.12" + "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.16.7": @@ -261,10 +245,10 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== +"@babel/helper-create-class-features-plugin@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz#d4f8393fc4838cbff6b7c199af5229aee16d07cf" + integrity sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-environment-visitor" "^7.16.7" @@ -274,10 +258,10 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== +"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" + integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" @@ -339,10 +323,10 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz#bec00139520cb3feb078ef7a4578562480efb77e" + integrity sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA== dependencies: "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-module-imports" "^7.16.7" @@ -350,8 +334,8 @@ "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/traverse" "^7.17.12" + "@babel/types" "^7.17.12" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -365,10 +349,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" + integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -441,59 +425,59 @@ "@babel/types" "^7.17.0" "@babel/highlight@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" - integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" + integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" - integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.12.tgz#36c2ed06944e3691ba82735fc4cf62d12d491a23" + integrity sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" + integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" + integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== +"@babel/plugin-proposal-async-generator-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" + integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" + integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-class-static-block@^7.17.6": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== +"@babel/plugin-proposal-class-static-block@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz#947f09dd496322c9543ec3b318bf52b4d9833334" + integrity sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.16.7": @@ -504,36 +488,36 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== +"@babel/plugin-proposal-export-namespace-from@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" + integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== +"@babel/plugin-proposal-json-strings@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" + integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== +"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" + integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" + integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.16.7": @@ -553,16 +537,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== +"@babel/plugin-proposal-object-rest-spread@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz#f94a91715a7f2f8cfb3c06af820c776440bc0148" + integrity sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ== dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.17.12" "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.16.7" @@ -572,40 +556,40 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" + integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== +"@babel/plugin-proposal-private-methods@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" + integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== +"@babel/plugin-proposal-private-property-in-object@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" + integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== +"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" + integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -649,12 +633,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz#23d852902acd19f42923fca9d0f196984d124e73" + integrity sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -677,12 +661,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" + integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -740,27 +724,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz#80031e6042cad6a95ed753f672ebd23c30933195" - integrity sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ== +"@babel/plugin-syntax-typescript@^7.17.12", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz#b54fc3be6de734a56b87508f99d6428b5b605a7b" + integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== +"@babel/plugin-transform-arrow-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" + integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== +"@babel/plugin-transform-async-to-generator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" + integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== dependencies: "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-transform-block-scoped-functions@^7.16.7": @@ -770,40 +754,40 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== +"@babel/plugin-transform-block-scoping@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz#68fc3c4b3bb7dfd809d97b7ed19a584052a2725c" + integrity sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== +"@babel/plugin-transform-classes@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz#da889e89a4d38375eeb24985218edeab93af4f29" + integrity sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== +"@babel/plugin-transform-computed-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" + integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-destructuring@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" - integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== +"@babel/plugin-transform-destructuring@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz#0861d61e75e2401aca30f2570d46dfc85caacf35" + integrity sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" @@ -813,12 +797,12 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== +"@babel/plugin-transform-duplicate-keys@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" + integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" @@ -828,20 +812,20 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-flow-strip-types@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== +"@babel/plugin-transform-flow-strip-types@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz#5e070f99a4152194bd9275de140e83a92966cab3" + integrity sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-flow" "^7.17.12" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== +"@babel/plugin-transform-for-of@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz#5397c22554ec737a27918e7e7e0e7b679b05f5ec" + integrity sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" @@ -852,12 +836,12 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== +"@babel/plugin-transform-literals@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" + integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" @@ -866,57 +850,58 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== +"@babel/plugin-transform-modules-amd@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz#08ec1f10f854c15bb3b44952e60f1fc126d7d481" + integrity sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" - integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== +"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz#37691c7404320d007288edd5a2d8600bcef61c34" + integrity sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA== dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== +"@babel/plugin-transform-modules-systemjs@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz#e631b151b99d25401cd9679476cc35e6e5bbc7d4" + integrity sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw== dependencies: "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== +"@babel/plugin-transform-modules-umd@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz#b37be3ecf198c1fea10e6268461729ced05644e1" + integrity sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz#715dbcfafdb54ce8bccd3d12e8917296a4ba66a4" - integrity sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" + integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.0" + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== +"@babel/plugin-transform-new-target@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz#10842cd605a620944e81ea6060e9e65c265742e3" + integrity sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" @@ -926,12 +911,12 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" + integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" @@ -941,11 +926,11 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-constant-elements@^7.14.5": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz#6cc273c2f612a6a50cb657e63ee1303e5e68d10a" - integrity sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw== + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz#cc580857696b6dd9e5e3d079e673d060a0657f37" + integrity sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-transform-react-display-name@^7.16.7": version "7.16.7" @@ -961,16 +946,16 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" - integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" + integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/types" "^7.17.12" "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" @@ -987,20 +972,20 @@ dependencies: regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== +"@babel/plugin-transform-reserved-words@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" + integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-runtime@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz#b89d821c55d61b5e3d3c3d1d636d8d5a81040ae1" - integrity sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig== +"@babel/plugin-transform-runtime@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.12.tgz#5dc79735c4038c6f4fc0490f68f2798ce608cadd" + integrity sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw== dependencies: "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" @@ -1013,12 +998,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== +"@babel/plugin-transform-spread@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" + integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-transform-sticky-regex@^7.16.7": @@ -1028,28 +1013,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== +"@babel/plugin-transform-template-literals@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz#4aec0a18f39dd86c442e1d077746df003e362c6e" + integrity sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== +"@babel/plugin-transform-typeof-symbol@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" + integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-typescript@^7.16.7": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.17.12.tgz#9654587131bc776ff713218d929fa9a2e98ca16d" + integrity sha512-ICbXZqg6hgenjmwciVI/UfqZtExBrZOrS8sLB5mTHGO/j08Io3MmooULBiijWk9JBknjM3CbbtTc/0ZsqLrjXQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-typescript" "^7.17.12" "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" @@ -1066,32 +1051,32 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c" - integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g== +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.12.tgz#b81ae0bb762b683d68b07b6d2d4020ccbef8d67a" + integrity sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg== dependencies: "@babel/compat-data" "^7.17.10" "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.17.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-async-generator-functions" "^7.17.12" + "@babel/plugin-proposal-class-properties" "^7.17.12" + "@babel/plugin-proposal-class-static-block" "^7.17.12" "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.17.12" + "@babel/plugin-proposal-json-strings" "^7.17.12" + "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.17.3" + "@babel/plugin-proposal-object-rest-spread" "^7.17.12" "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-private-methods" "^7.17.12" + "@babel/plugin-proposal-private-property-in-object" "^7.17.12" + "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -1106,40 +1091,40 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-arrow-functions" "^7.17.12" + "@babel/plugin-transform-async-to-generator" "^7.17.12" "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.17.7" + "@babel/plugin-transform-block-scoping" "^7.17.12" + "@babel/plugin-transform-classes" "^7.17.12" + "@babel/plugin-transform-computed-properties" "^7.17.12" + "@babel/plugin-transform-destructuring" "^7.17.12" "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.17.12" "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.17.12" "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-literals" "^7.17.12" "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.17.9" - "@babel/plugin-transform-modules-systemjs" "^7.17.8" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10" - "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.17.12" + "@babel/plugin-transform-modules-commonjs" "^7.17.12" + "@babel/plugin-transform-modules-systemjs" "^7.17.12" + "@babel/plugin-transform-modules-umd" "^7.17.12" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" + "@babel/plugin-transform-new-target" "^7.17.12" "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.17.12" "@babel/plugin-transform-property-literals" "^7.16.7" "@babel/plugin-transform-regenerator" "^7.17.9" - "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.17.12" "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-spread" "^7.17.12" "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.17.12" + "@babel/plugin-transform-typeof-symbol" "^7.17.12" "@babel/plugin-transform-unicode-escapes" "^7.16.7" "@babel/plugin-transform-unicode-regex" "^7.16.7" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.17.10" + "@babel/types" "^7.17.12" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" @@ -1147,13 +1132,13 @@ semver "^6.3.0" "@babel/preset-flow@^7.13.13": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" - integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.17.12.tgz#664a5df59190260939eee862800a255bef3bd66f" + integrity sha512-7QDz7k4uiaBdu7N89VKjUn807pJRXmdirQu0KyR9LXnQrr5Jt41eIMKTS7ljej+H29erwmMrwq9Io9mJHLI3Lw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-flow-strip-types" "^7.16.7" + "@babel/plugin-transform-flow-strip-types" "^7.17.12" "@babel/preset-modules@^0.1.5": version "0.1.5" @@ -1166,26 +1151,26 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== +"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" + integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.17.12" "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c" + integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.17.12" "@babel/register@^7.13.16": version "7.17.7" @@ -1222,26 +1207,26 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.2": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" - integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.12", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.2": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.12.tgz#011874d2abbca0ccf1adbe38f6f7a4ff1747599c" + integrity sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.10" + "@babel/generator" "^7.17.12" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.17.9" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.10" - "@babel/types" "^7.17.10" + "@babel/parser" "^7.17.12" + "@babel/types" "^7.17.12" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.10", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4" - integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A== +"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.12.tgz#1210690a516489c0200f355d87619157fbbd69a0" + integrity sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" @@ -1393,9 +1378,9 @@ integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== "@cspell/dict-en_us@^2.2.2": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-2.2.4.tgz#20abce3eabe048aa5d858de7b9475c6c290cdc1e" - integrity sha512-gblsvIPLNAK+pRR/Mn2m2kRQLVFeoORQJeaZKlGHWckA3s0iuTN49hSSTbK66k3aWlzhirtSoux7IdvT2RpgnQ== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-2.2.5.tgz#7a1c325d54a7c9b8171da6e61f095ad34395ff68" + integrity sha512-gRHem02ZY83AQUTYBxtiVNmtM6gWFCJKumRoAKLj7vWYelmNLcCBsMA3BOOOJ7cZNKCI04lDEdh0u2f2akKZtQ== "@cspell/dict-filetypes@^2.0.1": version "2.0.1" @@ -1443,9 +1428,9 @@ integrity sha512-9f5LDATlAiXRGqxLxgqbOLlQxuMW2zcN7tBgxwtN+4u90vM03ZUOR/gKIuDV/y0ZuAiWBIjA73cjk8DJ13Q1eA== "@cspell/dict-latex@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-2.0.0.tgz#0b13b6522d305f5842833ec0179078d900714f65" - integrity sha512-H6RRwbHhQ9ARoO1R57SDqB+q/J5jUDdVnkdfukJkA+HNlJBhCcDuzGOIJqr+GBkJYDkF3obZ3LEOk2lUfT+Eyg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-2.0.2.tgz#f34150db2c4c781ccc7d551dbd8431c0a3938529" + integrity sha512-4tjuaieh5NJsYLco45lWu9SRT5H61aC1vtUNKS0+bpA+JaRJYvlpv/wAsq5HB0I9Iz17XHATDvX1zkp3QJ89gw== "@cspell/dict-lorem-ipsum@^2.0.0": version "2.0.0" @@ -1508,9 +1493,9 @@ integrity sha512-MUwA2YKpqaQOSR4V1/CVGRNk8Ii5kf6I8Ch+4/BhRZRQXuwWbi21rDRYWPqdQWps7VNzAbbMA+PQDWsD5YY38g== "@cspell/dict-software-terms@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-2.1.5.tgz#4e2aa08839f37aa933cf1ac5196dbc7005bc8d3e" - integrity sha512-ylXWCsOJlYuucaMoHaHQLVaB8HeDrsCZ42a3jrTC/i6F/SF9I+4tBg4lMivd4w31bXBgILdbIvVHtWzJf+5m0A== + version "2.1.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-2.1.7.tgz#30d45d23003980e01854d57788c6c134fa0387f5" + integrity sha512-2FW5MlbazmWPFHzMh2xKYFcYnX+E5MdOPRrfYkbVXvWecA0466l54V+op2zlh1CbngMk4eY7AY3qahfWv6gDHA== "@cspell/dict-swift@^1.0.2": version "1.0.2" @@ -1847,6 +1832,15 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" + integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.7" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" @@ -1862,10 +1856,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== -"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.10" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz#db436f0917d655393851bc258918c00226c9b183" - integrity sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q== +"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -2601,11 +2595,6 @@ dependencies: is-promise "^4.0.0" -"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": - version "2.1.8-no-fsevents.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" - integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -3025,89 +3014,89 @@ "@svgr/plugin-jsx" "^6.2.1" "@svgr/plugin-svgo" "^6.2.0" -"@swc/core-android-arm-eabi@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.181.tgz#8317b96dbcf43f30bc0a9c139f7dbe2ffea4ce2f" - integrity sha512-H3HNf8j6M13uIbSruef8iMsCElJJDZOhp5qxwm/+P1jAG4eQ4vPfajIlTVdFJes8Adrbr4WQaVvl+m4BQw51JQ== - -"@swc/core-android-arm64@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.181.tgz#23ee887e08993d26a2b31a5dce5232a5cf4e17b1" - integrity sha512-b1apYKeosBaXl28xE/By4QVHYrXaR2+nOdcP6rsDXg6nyLBArtoiS5YUFikFN/VQbSAQqNeJQ+rovT5zITrgSQ== - -"@swc/core-darwin-arm64@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.181.tgz#33d44c0aed28baebc797892d2243a845f5b49905" - integrity sha512-M3/PPeO6NTN7GYa1mOWPNMaAPxEQH8xd+X6FHMa7OBCi+Qxkarafu4DZRfzR88TcS3XikqFLgmmzSP7Z/tye2w== - -"@swc/core-darwin-x64@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.181.tgz#6da604c4c4e85c1baad9c355f25a4e0cceff52cb" - integrity sha512-8Uc6gx7YN5+eSnk3h7aHqp1f3RFoBJPDPeH9cURm4mfE4BTgkVgkctUm0IE5sS5AotazVbrOwhEFrl7TONSfPA== - -"@swc/core-freebsd-x64@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.181.tgz#41b26a7fd1214c9947e8a433231bcb3166916a33" - integrity sha512-SbnsbJHGFNY7VSTA5OhBh2PmLgQumIGerAxTCTYO1IgtbADCTL+gCjU0TK0viG/zpH4jnjaL965BI4JTo/bpRg== - -"@swc/core-linux-arm-gnueabihf@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.181.tgz#780f37f6b611ccd5c04d484b7b33e436e2ea8568" - integrity sha512-aWO6Lr9wea96Z7AEagzf4reKgDb3UWXZnClwJK7baScwF8KV+Mh99vVgkSe1nj2gKOZ31pBLp62RDJkc3gdlnA== - -"@swc/core-linux-arm64-gnu@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.181.tgz#34a4639fdcf3cf6c30087f719200c2fb1eac8792" - integrity sha512-+7fzDwsvcbhPafKdminMQrU3Ej1NHltXy7k+zgjj8BDPZbfi8hRzQcONeBV7sfl4xvw3d3roNHu2UMmKzLNs0w== - -"@swc/core-linux-arm64-musl@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.181.tgz#c1388644df35ad30b71c0d09fd9a96d31405299f" - integrity sha512-U9k8pv2oCxYYfu9DdOO1ZZgqbmF97NgJzSaIu3PsTedF4RcGIiPcuGOFqrUECsGUW2i6uKejE8onbXPj9UmaZQ== - -"@swc/core-linux-x64-gnu@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.181.tgz#2384b58d35bb2e31521005869acbc6ea2e0700b4" - integrity sha512-9AQXrvZ9BFQJeqYMpKQZRf9h/DEwhfHIR39krehO+g594i+mkkp+UNTToez6Ifn+NBYl58xyEcQGwsYIqtdYVw== - -"@swc/core-linux-x64-musl@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.181.tgz#4938a87eae011daaf9f360a1452ece8a2e9c5816" - integrity sha512-Pq/aBMj3F4CR4tXq85t7IW3piu76a677nIoo6QtBkAjrQ5QuJqpaez/5aewipG+kIXpiu/DNFIN+cISa1QeC8A== - -"@swc/core-win32-arm64-msvc@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.181.tgz#553b16cfb5aa918f191227abe929619263142ea5" - integrity sha512-m24036tVFDE8ZJ3fBVBfsHw4tHd0BG6g3TvT2MLAiW2MezYeTdrGpmvPBz4Woz686I/06cWeSg7cZF1/ZcZMMA== - -"@swc/core-win32-ia32-msvc@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.181.tgz#e520b9caa136c283fa789805bfe46966faec6d81" - integrity sha512-OPROzGapmr29qqwvB/aP9SA80r2eIukj+q7gghdQVptJrQU4GrTyzW1TpnGtpzj8rLZz4hEG6KtyPUh54bJZ/g== - -"@swc/core-win32-x64-msvc@1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.181.tgz#5cc5843e2aad673abb76231971faca140c711709" - integrity sha512-YrIaS63XsGiQ9AgxUVZ7Irt4pwQc3c2TPN7PyQP7ok9zBZxY5pBTwRTdLctlF4LNsSavlHE5+rvdPzcYAG0ekQ== - -"@swc/core@^1.2.181": - version "1.2.181" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.181.tgz#87a856be4581be4da5515287a2120544f9d733ba" - integrity sha512-evQX+Br/gC+FYLbUIF1dOQa7hUzBpowrcbgPkIRCEvi4HrCn7pGBZ2ZHBXmwEtBdLfOlyQvN/8USClApQKK4Rw== +"@swc/core-android-arm-eabi@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.185.tgz#6fca8a364428c3ff17fd960176a8c5a1047748c4" + integrity sha512-/ZTj5yaPkPC0UwggYN+y4d2DNZJI+b1y1gi4twrQJz997OMU032Hi9/59VxHFzHNxlzhIuCJYcbxOxi1Aqk2bA== + +"@swc/core-android-arm64@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.185.tgz#592fa96fb17036d920f57c8f36c859acf1dacb53" + integrity sha512-TgidzM+7H0YTIABu2ILI8MRDiIzcFULz5vIUWbhLwypPH9vJCFcDnAv5rBpg/4KBMzuSI6BNNBIcf/8Wc9e0HA== + +"@swc/core-darwin-arm64@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.185.tgz#5dfbb3425ddf479c8875a3737e1de5b127e335b2" + integrity sha512-segMc9FVYz+M5KzpPJR+M20Mmeq4ZQw4gi6rt0HXNpSPykm+oe/wb1CZbMk/9SpMaevpXOOZa0HHBM2ue+WhVA== + +"@swc/core-darwin-x64@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.185.tgz#e97ed012ff08fb39dcc51fc07233f4425fa89408" + integrity sha512-PL1Xq6R5zpBbYZsWJU0xK2/WQlhag/Kiq1eZd6ftSLaxn0q00wdSGPpzOqK5FTYAqi+5R1CWM/kCOHFoSlYDfg== + +"@swc/core-freebsd-x64@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.185.tgz#ba12147270c754c47eee9a99f08de75172ae4bb1" + integrity sha512-scaFxGfV7RhJrrCGzouwFe1XOzJvY/WjYWysHuD+slSdn3pjSnxXtX2Q9jPIYF0bmIcbTp4D6V8VITLhmfkzEA== + +"@swc/core-linux-arm-gnueabihf@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.185.tgz#4bd8ff733e06c8ea0dc916208f8fdeb907f25256" + integrity sha512-WQ84BVGF0al3ynWBeXuEpO7y6h8Bh4AXr+Ys2YaEgyZtAZ6zWUi3Ca4ktFWwpACSm0XUUB3lhlapUcqXJE8lZg== + +"@swc/core-linux-arm64-gnu@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.185.tgz#8abe168271f4ba6767da87fb4386ccea388fc324" + integrity sha512-INrmHqV5ti0ROS9FeGXPF5ZcIAWZ9Sp+Xbn5isWZ9owqT0c2CU4f9+w+OzNMMDKVFe2ARvlH/D927mLIgwqDmQ== + +"@swc/core-linux-arm64-musl@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.185.tgz#2352673452ac2553d45181d53351cb00d378d848" + integrity sha512-OEwVBlypM7SOZqpa82hIh9jeiu/eSXG+J+R0vekcWz7EkW5zb504uyGPeZJKMqX23I5GZtBpk96UUbhnNCaYUg== + +"@swc/core-linux-x64-gnu@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.185.tgz#058444fa372374f2f7f2f2d09c03085f928c8f12" + integrity sha512-H8LnCdViP7JsFlDE02w5czlKQWnAAM9ZN3oZnvAuTod2gJBjTJ4eZ3h9d+EQdcszw7Csh+IwXbmPz0mPwaR0vQ== + +"@swc/core-linux-x64-musl@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.185.tgz#a8f473965e87acb03057d6b4790f86857e5ce4ea" + integrity sha512-DRHmhjCsA2FloF+6/HMxJ8bkdfddAY/wqnpuW/l3CPUyL3VMDmvSiZICN8f/J8LKpGfDV2FdczztmbGi14jO+g== + +"@swc/core-win32-arm64-msvc@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.185.tgz#d8fc5bf11e67664d54a84ad37d9ac7d69df1a317" + integrity sha512-0BmuvU+Lfz5n1/ihh30UF2Viu9JJn3S3YC9QD9BfF80ueEl8KT4JihhJGuEG3XuZk5+35o2oZiCRkn6NKI/qpA== + +"@swc/core-win32-ia32-msvc@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.185.tgz#cbd3a4ad67bf40754143fafc87baed6021e9a780" + integrity sha512-yRNa/frm5MeXJMpj6V6uQy5a0yfO9q6ZOQ4L+439UH8vBcgIZYOG07bJGvxeUjaKkkrhfzEu5Q8fdXTzPgGeAA== + +"@swc/core-win32-x64-msvc@1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.185.tgz#f2459a88783ed95257229e41034fd913b487c5b4" + integrity sha512-nLF0AKADjeR3Rr05lWoKOeDbGBFpmbFnGkpLJK9EAwAIQUC9lDRYIps5yinPZsgqBwa0RCUsxzS3PjbWEY18bg== + +"@swc/core@^1.2.185": + version "1.2.185" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.185.tgz#26cdc7f9417fd2f04fde7f97d0b217aaa1bc8d3b" + integrity sha512-dDNzDrJ4bzMVWeFWqLJojjv5XZJZ84Zia7kQdJjp+kfOMdEhS+onrAwrk5Q88PlAvbrhY6kQbWD2LZ8JdyEaSQ== optionalDependencies: - "@swc/core-android-arm-eabi" "1.2.181" - "@swc/core-android-arm64" "1.2.181" - "@swc/core-darwin-arm64" "1.2.181" - "@swc/core-darwin-x64" "1.2.181" - "@swc/core-freebsd-x64" "1.2.181" - "@swc/core-linux-arm-gnueabihf" "1.2.181" - "@swc/core-linux-arm64-gnu" "1.2.181" - "@swc/core-linux-arm64-musl" "1.2.181" - "@swc/core-linux-x64-gnu" "1.2.181" - "@swc/core-linux-x64-musl" "1.2.181" - "@swc/core-win32-arm64-msvc" "1.2.181" - "@swc/core-win32-ia32-msvc" "1.2.181" - "@swc/core-win32-x64-msvc" "1.2.181" + "@swc/core-android-arm-eabi" "1.2.185" + "@swc/core-android-arm64" "1.2.185" + "@swc/core-darwin-arm64" "1.2.185" + "@swc/core-darwin-x64" "1.2.185" + "@swc/core-freebsd-x64" "1.2.185" + "@swc/core-linux-arm-gnueabihf" "1.2.185" + "@swc/core-linux-arm64-gnu" "1.2.185" + "@swc/core-linux-arm64-musl" "1.2.185" + "@swc/core-linux-x64-gnu" "1.2.185" + "@swc/core-linux-x64-musl" "1.2.185" + "@swc/core-win32-arm64-msvc" "1.2.185" + "@swc/core-win32-ia32-msvc" "1.2.185" + "@swc/core-win32-x64-msvc" "1.2.185" "@swc/jest@^0.2.21": version "0.2.21" @@ -3406,19 +3395,14 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^27.5.0": - version "27.5.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.0.tgz#e04ed1824ca6b1dd0438997ba60f99a7405d4c7b" - integrity sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g== +"@types/jest@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.1.tgz#2c8b6dc6ff85c33bcd07d0b62cb3d19ddfdb3ab9" + integrity sha512-fUy7YRpT+rHXto1YlL+J9rs0uLGyiqVt3ZOTQR+4ROc47yNl8WLdVLgUloBRhOxP1PZvguHl44T3H0wAWxahYQ== dependencies: jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/js-cookie@^2.2.6": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" - integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== - "@types/js-yaml@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" @@ -3497,10 +3481,10 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*", "@types/node@^17.0.31", "@types/node@^17.0.5": - version "17.0.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" - integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== +"@types/node@*", "@types/node@^17.0.34", "@types/node@^17.0.5": + version "17.0.34" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.34.tgz#3b0b6a50ff797280b8d000c6281d229f9c538cef" + integrity sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -3533,9 +3517,9 @@ integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g== "@types/prettier@^2.1.5": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" - integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== + version "2.6.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.1.tgz#76e72d8a775eef7ce649c63c8acae1a0824bbaed" + integrity sha512-XFjFHmaLVifrAKaZ+EKghFHtHSUonyw8P2Qmy2/+osBnrKbH9UYtlK10zg8/kCt47MFilll/DEDKy3DHfJ0URw== "@types/prismjs@^1.26.0": version "1.26.0" @@ -3575,10 +3559,10 @@ "@types/webpack" "^4" "@types/webpack-dev-server" "3" -"@types/react-dom@^18.0.3": - version "18.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" - integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== +"@types/react-dom@^18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.4.tgz#dcbcadb277bcf6c411ceff70069424c57797d375" + integrity sha512-FgTtbqPOCI3dzZPZoC2T/sx3L34qxy99ITWn4eoSA95qPyXDMH0ALoAqUp49ITniiJFsXUVBtalh/KffMpg21Q== dependencies: "@types/react" "*" @@ -3843,85 +3827,85 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.23.0.tgz#bc4cbcf91fbbcc2e47e534774781b82ae25cc3d8" - integrity sha512-hEcSmG4XodSLiAp1uxv/OQSGsDY6QN3TcRU32gANp+19wGE1QQZLRS8/GV58VRUoXhnkuJ3ZxNQ3T6Z6zM59DA== +"@typescript-eslint/eslint-plugin@^5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.24.0.tgz#59f9ed21fc4490444b75b250e4ce81e4b7bba18f" + integrity sha512-6bqFGk6wa9+6RrU++eLknKyDqXU1Oc8nyoLu5a1fU17PNRJd9UBr56rMF7c4DRaRtnarlkQ4jwxUbvBo8cNlpw== dependencies: - "@typescript-eslint/scope-manager" "5.23.0" - "@typescript-eslint/type-utils" "5.23.0" - "@typescript-eslint/utils" "5.23.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.24.0" + "@typescript-eslint/type-utils" "5.24.0" + "@typescript-eslint/utils" "5.24.0" + debug "^4.3.4" functional-red-black-tree "^1.0.1" - ignore "^5.1.8" + ignore "^5.2.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.23.0.tgz#443778e1afc9a8ff180f91b5e260ac3bec5e2de1" - integrity sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw== +"@typescript-eslint/parser@^5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.24.0.tgz#fe6563483f264aa9fe48b7fd9b329aa5f985841a" + integrity sha512-4q29C6xFYZ5B2CXqSBBdcS0lPyfM9M09DoQLtHS5kf+WbpV8pBBhHDLNhXfgyVwFnhrhYzOu7xmg02DzxeF2Uw== dependencies: - "@typescript-eslint/scope-manager" "5.23.0" - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/typescript-estree" "5.23.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.24.0" + "@typescript-eslint/types" "5.24.0" + "@typescript-eslint/typescript-estree" "5.24.0" + debug "^4.3.4" -"@typescript-eslint/scope-manager@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz#4305e61c2c8e3cfa3787d30f54e79430cc17ce1b" - integrity sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw== +"@typescript-eslint/scope-manager@5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.24.0.tgz#ac8c4d65064204b596909c204fe9b7e30c3f51b2" + integrity sha512-WpMWipcDzGmMzdT7NtTjRXFabx10WleLUGrJpuJLGaxSqpcyq5ACpKSD5VE40h2nz3melQ91aP4Du7lh9FliCA== dependencies: - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/visitor-keys" "5.23.0" + "@typescript-eslint/types" "5.24.0" + "@typescript-eslint/visitor-keys" "5.24.0" -"@typescript-eslint/type-utils@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.23.0.tgz#f852252f2fc27620d5bb279d8fed2a13d2e3685e" - integrity sha512-iuI05JsJl/SUnOTXA9f4oI+/4qS/Zcgk+s2ir+lRmXI+80D8GaGwoUqs4p+X+4AxDolPpEpVUdlEH4ADxFy4gw== +"@typescript-eslint/type-utils@5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.24.0.tgz#aad47227e89cceec9175b1a67df69ebcd79f9421" + integrity sha512-uGi+sQiM6E5CeCZYBXiaIvIChBXru4LZ1tMoeKbh1Lze+8BO9syUG07594C4lvN2YPT4KVeIupOJkVI+9/DAmQ== dependencies: - "@typescript-eslint/utils" "5.23.0" - debug "^4.3.2" + "@typescript-eslint/utils" "5.24.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.23.0.tgz#8733de0f58ae0ed318dbdd8f09868cdbf9f9ad09" - integrity sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw== +"@typescript-eslint/types@5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.24.0.tgz#565ff94a4b89073265e27514dc65225d18aabe6c" + integrity sha512-Tpg1c3shTDgTmZd3qdUyd+16r/pGmVaVEbLs+ufuWP0EruVbUiEOmpBBQxBb9a8iPRxi8Rb2oiwOxuZJzSq11A== -"@typescript-eslint/typescript-estree@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz#dca5f10a0a85226db0796e8ad86addc9aee52065" - integrity sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg== +"@typescript-eslint/typescript-estree@5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.24.0.tgz#30b9cbc1af475b9e02aca34cfe9ba9e1bb820143" + integrity sha512-zcor6vQkQmZAQfebSPVwUk/FD+CvnsnlfKXYeQDsWXRF+t7SBPmIfNia/wQxCSeu1h1JIjwV2i9f5/DdSp/uDw== dependencies: - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/visitor-keys" "5.23.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.24.0" + "@typescript-eslint/visitor-keys" "5.24.0" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.23.0", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.23.0.tgz#4691c3d1b414da2c53d8943310df36ab1c50648a" - integrity sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA== +"@typescript-eslint/utils@5.24.0", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.24.0.tgz#7a854028040a305ddea129328e45cfb2c6406e75" + integrity sha512-K05sbWoeCBJH8KXu6hetBJ+ukG0k2u2KlgD3bN+v+oBKm8adJqVHpSSLHNzqyuv0Lh4GVSAUgZ5lB4icmPmWLw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.23.0" - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/typescript-estree" "5.23.0" + "@typescript-eslint/scope-manager" "5.24.0" + "@typescript-eslint/types" "5.24.0" + "@typescript-eslint/typescript-estree" "5.24.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz#057c60a7ca64667a39f991473059377a8067c87b" - integrity sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg== +"@typescript-eslint/visitor-keys@5.24.0": + version "5.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.24.0.tgz#bb3e9a788ccd50c53e03557e4e203599880c3123" + integrity sha512-qzGwSXMyMnogcAo+/2fU+jhlPPVMXlIH2PeAonIKjJSoDKl1+lJVvG5Z5Oud36yU0TWK2cs1p/FaSN5J2OUFYA== dependencies: - "@typescript-eslint/types" "5.23.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.24.0" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -4044,11 +4028,6 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@xobotyi/scrollbar-width@^1.9.5": - version "1.9.5" - resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" - integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4530,9 +4509,9 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axe-core@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" - integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== + version "4.4.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c" + integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== axios@0.21.3: version "0.21.3" @@ -4960,9 +4939,9 @@ buffers@~0.1.1: integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== builtins@^1.0.3: version "1.0.3" @@ -5097,9 +5076,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001335: - version "1.0.30001339" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz#f9aece4ea8156071613b27791547ba0b33f176cf" - integrity sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ== + version "1.0.30001341" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz#59590c8ffa8b5939cf4161f00827b8873ad72498" + integrity sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA== caseless@~0.12.0: version "0.12.0" @@ -5219,7 +5198,7 @@ cheerio@^1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3: +chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -5255,9 +5234,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.1.tgz#58331f6f472a25fe3a50a351ae3052936c2c7f32" + integrity sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg== cjs-module-lexer@^1.0.0: version "1.2.2" @@ -5520,11 +5499,6 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^5.0.0, commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" @@ -5629,20 +5603,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -concurrently@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.1.0.tgz#477b49b8cfc630bb491f9b02e9ed7fb7bff02942" - integrity sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw== - dependencies: - chalk "^4.1.0" - date-fns "^2.16.1" - lodash "^4.17.21" - rxjs "^6.6.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" - tree-kill "^1.2.2" - yargs "^16.2.0" - config-chain@^1.1.12: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -5787,7 +5747,7 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -5814,13 +5774,6 @@ copy-text-to-clipboard@^3.0.1: resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== -copy-to-clipboard@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== - dependencies: - toggle-selection "^1.0.6" - copy-webpack-plugin@^10.2.4: version "10.2.4" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe" @@ -5902,6 +5855,17 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -6001,14 +5965,6 @@ css-functions-list@^3.0.1: resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.0.1.tgz#1460df7fb584d1692c30b105151dbb988c8094f9" integrity sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw== -css-in-js-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== - dependencies: - hyphenate-style-name "^1.0.2" - isobject "^3.0.1" - css-loader@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" @@ -6079,28 +6035,28 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.3.tgz#848422118d7a62b5b29a53edc160f58c7f7f7539" - integrity sha512-AB9SmTSC2Gd8T7PpKUsXFJ3eNsg7dc4CTZ0+XAJ29MNxyJsrCEk7N1lw31bpHrsQH2PVJr21bbWgGAfA9j0dIA== +cssnano-preset-advanced@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.4.tgz#91e79c253d3f0176608f7814636242132924195b" + integrity sha512-mZovba9FGPmwGPgeMAE/ChrgmluEFyxQzkGZbBUcDYKfhI263BPV2NSiCyqdy8wSmVYEgyRi8TxiPwI4ZO/yGQ== dependencies: autoprefixer "^10.3.7" - cssnano-preset-default "^5.2.7" + cssnano-preset-default "^5.2.8" postcss-discard-unused "^5.1.0" postcss-merge-idents "^5.1.1" postcss-reduce-idents "^5.2.0" postcss-zindex "^5.1.0" -cssnano-preset-default@^5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz#791e3603fb8f1b46717ac53b47e3c418e950f5f3" - integrity sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA== +cssnano-preset-default@^5.2.8: + version "5.2.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.8.tgz#d7886e8cf6d075ae2298d7526b4cccf0eacdcbdc" + integrity sha512-6xQXUhTAPupvib3KC0Gl0d1jIwGFcJyuWQiMcA6grprGdmIzt1cxG5z78VuZu6DRRS6qin6ETkQsH6ixxb/SQw== dependencies: css-declaration-sorter "^6.2.2" cssnano-utils "^3.1.0" postcss-calc "^8.2.3" postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.0" + postcss-convert-values "^5.1.1" postcss-discard-comments "^5.1.1" postcss-discard-duplicates "^5.1.0" postcss-discard-empty "^5.1.1" @@ -6109,7 +6065,7 @@ cssnano-preset-default@^5.2.7: postcss-merge-rules "^5.1.1" postcss-minify-font-values "^5.1.0" postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.2" + postcss-minify-params "^5.1.3" postcss-minify-selectors "^5.2.0" postcss-normalize-charset "^5.1.0" postcss-normalize-display-values "^5.1.0" @@ -6131,12 +6087,12 @@ cssnano-utils@^3.1.0: resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^5.0.6, cssnano@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.7.tgz#99858bef6c76c9240f0cdc9239570bc7db8368be" - integrity sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg== +cssnano@^5.0.6, cssnano@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.8.tgz#6add8a61c8ae493184689af347e61b1bc7cd57dd" + integrity sha512-5lma/yQlK+6eOHSUqNAS11b4/fbiuasoxmCHoVYxSg6lQsyX7bGGIqiLi4o3Pe2CrUTrgcD2udW7JIgzC2806g== dependencies: - cssnano-preset-default "^5.2.7" + cssnano-preset-default "^5.2.8" lilconfig "^2.0.3" yaml "^1.10.2" @@ -6164,10 +6120,10 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2, csstype@^3.0.6: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== +csstype@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== damerau-levenshtein@^1.0.7: version "1.0.8" @@ -6195,11 +6151,6 @@ data-urls@^3.0.1: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" -date-fns@^2.16.1: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -6342,10 +6293,10 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== +del@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.0.tgz#aa79a5b0a2a9ecc985c0a075e8ad9a5b23bf949c" + integrity sha512-OpcRktOt7G7HBfyxP0srBH4Djg4824EQORX8E1qvIhIzthNNArxxhrB/Mm7dRMiLi1nvFyUpDhzD2cTtbBhV8A== dependencies: globby "^11.0.1" graceful-fs "^4.2.4" @@ -6639,9 +6590,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.7.tgz#c544d9c7f715783dd92f0bddcf73a59e6962d006" - integrity sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== dependencies: jake "^10.8.5" @@ -6739,17 +6690,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" - integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== - dependencies: - stackframe "^1.1.1" - es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.0.tgz#b2d526489cceca004588296334726329e0a6bfb6" - integrity sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA== + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -6770,7 +6714,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 object-inspect "^1.12.0" object-keys "^1.1.1" object.assign "^4.1.2" - regexp.prototype.flags "^1.4.1" + regexp.prototype.flags "^1.4.3" string.prototype.trimend "^1.0.5" string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" @@ -6878,10 +6822,10 @@ eslint-module-utils@^2.7.3: debug "^3.2.7" find-up "^2.1.0" -eslint-plugin-eslint-plugin@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-4.1.0.tgz#40ae944d79e845dc9d4a85328eea3c5bf4ae0f7d" - integrity sha512-QJVw+WYXJuG2469gx5G929bz7crfxySDlK1i569FkuT6dpeHDeP7MmDrKaswCx17snG25LRFD6wmVX+AO5x7Qg== +eslint-plugin-eslint-plugin@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-4.2.0.tgz#64c5ba82f9b1073c89a79a1c8f451f278be6603a" + integrity sha512-ZDyUUlZJw85hmc9pGciNFiQwojXKxV7KAAVnQtojk1W/I8YYHxYV9JBuzhfAYfVemiQzDPNwj1zwAqQwGN1ROw== dependencies: eslint-utils "^3.0.0" estraverse "^5.2.0" @@ -6910,10 +6854,10 @@ eslint-plugin-import@^2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jest@^26.1.5: - version "26.1.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.1.5.tgz#6cfca264818d6d6aa120b019dab4d62b6aa8e775" - integrity sha512-su89aDuljL9bTjEufTXmKUMSFe2kZUL9bi7+woq+C2ukHZordhtfPm4Vg+tdioHBaKf8v3/FXW9uV0ksqhYGFw== +eslint-plugin-jest@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.2.2.tgz#74e000544259f1ef0462a609a3fc9e5da3768f6c" + integrity sha512-etSFZ8VIFX470aA6kTqDPhIq7YWe0tjBcboFNV3WeiC18PJ/AVonGhuTwlmuz2fBkH8FJHA7JQ4k7GsQIj1Gew== dependencies: "@typescript-eslint/utils" "^5.10.0" @@ -7002,7 +6946,7 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: +eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== @@ -7308,11 +7252,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-shallow-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" - integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== - fast-url-parser@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -7325,11 +7264,6 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== -fastest-stable-stringify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" - integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -7413,9 +7347,9 @@ file-loader@^6.2.0: schema-utils "^3.0.0" filelist@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.3.tgz#448607750376484932f67ef1b9ff07386b036c83" - integrity sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q== + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" @@ -7521,9 +7455,9 @@ flatted@^3.1.0: integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== flow-parser@0.*: - version "0.177.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.177.0.tgz#653092470c8e79ed737cb38e3be1d1de0d25feac" - integrity sha512-Ac1OwHjSoUALrcnHTTD6oaEPITaxYmP34iiEEcuCxeeD+tOKR7/Toaw4RpJKcDmYxLX79ZP9E7z+Q8ze9pESbQ== + version "0.178.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.178.0.tgz#85d300e29b146b54cb79e277e092ffd401b05f0c" + integrity sha512-OviMR2Y/sMSyUzR1xLLAmQvmHXTsD1Sq69OTmP5AckVulld7sVNsCfwsw7t3uK00dO9A7k4fD+wodbzzaaEn5g== flux@^4.0.1: version "4.0.3" @@ -7533,10 +7467,10 @@ flux@^4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" -focus-options-polyfill@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/focus-options-polyfill/-/focus-options-polyfill-1.2.0.tgz#9800ffb230bc9db63eea6d27694a62ac2e355946" - integrity sha512-4sgXxV/zU4WHM2IHWpjUmEWazbF6ie+M93/uo8ipfAbQ1GHopn+/V+Ca+PR0ndxswNQbisCNrjbnvWEq14MkTA== +focus-options-polyfill@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/focus-options-polyfill/-/focus-options-polyfill-1.5.1.tgz#0f422580d9d1fb65651f2968b547032eb17dab3c" + integrity sha512-7yH20IePROHJLLbJvqqtsG420jE6DuukccapiB/WagtUpnc98r9NzHbX5rnjCDgdZqLgcqlzGjn+8l0Zb8Zf9w== follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.7: version "1.15.0" @@ -7655,11 +7589,6 @@ fs-monkey@1.0.3: resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -7891,28 +7820,27 @@ glob-to-regexp@^0.4.1: integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" glob@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.1.tgz#00308f5c035aa0b2a447cd37ead267ddff1577d3" - integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow== + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" global-dirs@^0.1.1: version "0.1.1" @@ -7950,9 +7878,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.14.0.tgz#daf3ff9b4336527cf56e98330b6f64bea9aff9df" - integrity sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg== + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== dependencies: type-fest "^0.20.2" @@ -8537,11 +8465,6 @@ husky@^8.0.1: resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== -hyphenate-style-name@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -8578,7 +8501,7 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.1.9, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -8591,9 +8514,9 @@ image-size@^1.0.1: queue "6.0.2" immer@^9.0.7: - version "9.0.12" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.12.tgz#2d33ddf3ee1d247deab9d707ca472c8c942a0f20" - integrity sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA== + version "9.0.14" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.14.tgz#e05b83b63999d26382bb71676c9d827831248a48" + integrity sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -8687,13 +8610,6 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inline-style-prefixer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz#c5c0e43ba8831707afc5f5bbfd97edf45c1fa7ae" - integrity sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ== - dependencies: - css-in-js-utils "^2.0.0" - inquirer@^7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -8735,9 +8651,9 @@ invariant@^2.2.4: loose-envify "^1.0.0" ip@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.6.tgz#5a651a37644586e18b6ba3b48ca122bf56495f67" - integrity sha512-/dAvCivFs/VexXAtiAoMIqyhkhStNC9CPD0h1noonimOgB1xrCkexF2c5CjlqQ72GgMPjN6tiV+oreoPv3Ft1g== + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ipaddr.js@1.9.1: version "1.9.1" @@ -9667,11 +9583,6 @@ joi@^17.6.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-cookie@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -10483,6 +10394,11 @@ memfs@^3.1.2, memfs@^3.4.1: dependencies: fs-monkey "1.0.3" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -10641,7 +10557,7 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -10649,9 +10565,9 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" @@ -10806,9 +10722,9 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns@^7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" - integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" thunky "^1.0.2" @@ -10838,20 +10754,6 @@ mz@^2.4.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nano-css@^5.3.1: - version "5.3.4" - resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.4.tgz#40af6a83a76f84204f346e8ccaa9169cdae9167b" - integrity sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg== - dependencies: - css-tree "^1.1.2" - csstype "^3.0.6" - fastest-stable-stringify "^2.0.2" - inline-style-prefixer "^6.0.0" - rtl-css-js "^1.14.0" - sourcemap-codec "^1.4.8" - stacktrace-js "^2.0.2" - stylis "^4.0.6" - nanoid@^3.3.3: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" @@ -10899,6 +10801,11 @@ netlify-plugin-cache@^1.0.3: resolved "https://registry.yarnpkg.com/netlify-plugin-cache/-/netlify-plugin-cache-1.0.3.tgz#f60514e259dff2b3286b6d60b570bb1c81206794" integrity sha512-CTOwNWrTOP59T6y6unxQNnp1WX702v2R/faR5peSH94ebrYfyY4zT5IsRcIiHKq57jXeyCrhy0GLuTN8ktzuQg== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + njre@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/njre/-/njre-0.2.0.tgz#e5abfbafafb3db4438fe6b149da9a733fab0bf3d" @@ -11146,6 +11053,21 @@ npm-registry-fetch@^9.0.0: minizlib "^2.0.0" npm-package-arg "^8.0.0" +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -11676,6 +11598,11 @@ path-is-inside@1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -11740,6 +11667,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + pidtree@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" @@ -11814,11 +11746,12 @@ postcss-colormin@^5.3.0: colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz#f8d3abe40b4ce4b1470702a0706343eac17e7c10" - integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== +postcss-convert-values@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.1.tgz#31c8ffba650e86dc750631cafcf1db022c5bb6f1" + integrity sha512-UjcYfl3wJJdcabGKk8lgetPvhi1Et7VDc3sYr9EyhNBeB00YD4vHgPBp+oMVoG/dDWCc6ASbmzPNV6jADTwh8Q== dependencies: + browserslist "^4.20.3" postcss-value-parser "^4.2.0" postcss-discard-comments@^5.1.1: @@ -11912,10 +11845,10 @@ postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz#77e250780c64198289c954884ebe3ee4481c3b1c" - integrity sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g== +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== dependencies: browserslist "^4.16.6" cssnano-utils "^3.1.0" @@ -12192,10 +12125,10 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz#88fc9d0df6bed06ca2b9097421349f8c2f24e30d" - integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ== +prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" + integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== prismjs@^1.28.0: version "1.28.0" @@ -12547,14 +12480,13 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -react-medium-image-zoom@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/react-medium-image-zoom/-/react-medium-image-zoom-4.3.7.tgz#06c0771401c6de312a85843d1feebd15641a969b" - integrity sha512-Vg1M8CIX1EfhfSsmNc2tHP+8KjPDo9e5/zEDaSsfeTBHI82wjEvW3Lgb4k3jdWILPZVOWhM+7QHyDaAzghlvaQ== +react-medium-image-zoom@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-medium-image-zoom/-/react-medium-image-zoom-4.4.0.tgz#aa9f63dc08ffc2c2c919f16f3918f13951998a41" + integrity sha512-Y+1enQKyeM/ASAmvlKkLw0USbHePP5dbdjNSclHDBvzGLD8+tUqgxjjtTS54tMvvll7OSxTThVaXxrvO0uYO6A== dependencies: - focus-options-polyfill "1.2.0" - react-use "^17.2.1" - tslib "^2.1.0" + focus-options-polyfill "1.5.1" + tslib "^2.4.0" react-popper@^2.3.0: version "2.3.0" @@ -12572,22 +12504,22 @@ react-router-config@^5.1.1: "@babel/runtime" "^7.1.2" react-router-dom@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.1.tgz#0151baf2365c5fcd8493f6ec9b9b31f34d0f8ae1" - integrity sha512-f0pj/gMAbv9e8gahTmCEY20oFhxhrmHwYeIwH5EO5xu0qme+wXtsdB8YfUOAZzUz4VaXmb58m3ceiLtjMhqYmQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.2.tgz#93a82c95732963d137c02b3aee0505956baeb69e" + integrity sha512-j8sAq4YdWsrkM2DfDX26GnjtDKWUSd65LzHyBz8NcgFcK0ct7oTvYlwhOr532xpXsYP1HONq6QqUGA7GhbAY5w== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.3.1" + react-router "5.3.2" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.1, react-router@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.1.tgz#b13e84a016c79b9e80dde123ca4112c4f117e3cf" - integrity sha512-v+zwjqb7bakqgF+wMVKlAPTca/cEmPOvQ9zt7gpSNyPXau1+0qvuYZ5BWzzNDP1y6s15zDwgb9rPN63+SIniRQ== +react-router@5.3.2, react-router@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.2.tgz#87614394781e75cc6aa3b61cdfd147a1361cd890" + integrity sha512-GlsSUckZ4JthgsW5lV9oSCs5CoQ7q0t0Ump/Y5YQ8qhiS+WjaAhaoJhc7otpZW9eVhO6N06vYPt40SpEzuuZeg== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" @@ -12632,31 +12564,6 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.0.0" use-latest "^1.0.0" -react-universal-interface@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" - integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== - -react-use@^17.2.1: - version "17.3.2" - resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.3.2.tgz#448abf515f47c41c32455024db28167cb6e53be8" - integrity sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw== - dependencies: - "@types/js-cookie" "^2.2.6" - "@xobotyi/scrollbar-width" "^1.9.5" - copy-to-clipboard "^3.3.1" - fast-deep-equal "^3.1.3" - fast-shallow-equal "^1.0.0" - js-cookie "^2.2.1" - nano-css "^5.3.1" - react-universal-interface "^0.6.2" - resize-observer-polyfill "^1.5.1" - screenfull "^5.1.0" - set-harmonic-interval "^1.0.1" - throttle-debounce "^3.0.1" - ts-easing "^0.2.0" - tslib "^2.1.0" - react-waypoint@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-10.1.0.tgz#6ab522a61bd52946260e4a78b3182759a97b40ec" @@ -12908,7 +12815,7 @@ regexp-ast-analysis@^0.5.1: refa "^0.9.0" regexpp "^3.2.0" -regexp.prototype.flags@^1.4.1: +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -13197,11 +13104,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -13330,19 +13232,12 @@ rollup-plugin-terser@^7.0.0: terser "^5.0.0" rollup@^2.43.1: - version "2.72.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.72.1.tgz#861c94790537b10008f0ca0fbc60e631aabdd045" - integrity sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA== + version "2.73.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.73.0.tgz#128fef4b333fd92d02d6929afbb6ee38d7feb32d" + integrity sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ== optionalDependencies: fsevents "~2.3.2" -rtl-css-js@^1.14.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.15.0.tgz#680ed816e570a9ebccba9e1cd0f202c6a8bb2dc0" - integrity sha512-99Cu4wNNIhrI10xxUaABHsdDqzalrSRTie4GeCmbGVuehm4oj+fIy8fTzB+16pmKe8Bv9rl+hxIBez6KxExTew== - dependencies: - "@babel/runtime" "^7.1.2" - rtl-detect@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" @@ -13370,7 +13265,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0, rxjs@^6.6.3: +rxjs@^6.6.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -13463,11 +13358,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" -screenfull@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" - integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== - scslre@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/scslre/-/scslre-0.1.6.tgz#71a2832e4bf3a9254973a04fbed90aec94f75757" @@ -13504,7 +13394,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -13601,11 +13491,6 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-harmonic-interval@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" - integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== - set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -13657,6 +13542,13 @@ sharp@^0.30.4: tar-fs "^2.1.1" tunnel-agent "^0.6.0" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -13664,12 +13556,17 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.7.3: +shell-quote@^1.6.1, shell-quote@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== @@ -13742,11 +13639,6 @@ sitemap@^7.1.1: arg "^5.0.0" sax "^1.2.4" -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -13919,11 +13811,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -13961,11 +13848,6 @@ space-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -14078,13 +13960,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-generator@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" - integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== - dependencies: - stackframe "^1.1.1" - stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" @@ -14092,28 +13967,6 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" - integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== - -stacktrace-gps@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" - integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== - dependencies: - source-map "0.5.6" - stackframe "^1.1.1" - -stacktrace-js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" - state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -14201,6 +14054,15 @@ string.prototype.matchall@^4.0.6: regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" +string.prototype.padend@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" + integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + string.prototype.trimend@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" @@ -14407,11 +14269,6 @@ stylelint@^14.8.2: v8-compile-cache "^2.3.0" write-file-atomic "^4.0.1" -stylis@^4.0.6: - version "4.1.1" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.1.tgz#e46c6a9bbf7c58db1e65bb730be157311ae1fe12" - integrity sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -14426,7 +14283,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.0: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -14474,10 +14331,10 @@ svgo@^2.5.0, svgo@^2.7.0: picocolors "^1.0.0" stable "^0.1.8" -swc-loader@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.0.tgz#c26621f9fdeb5e28ba4a8ec19e25b1f3d03791c6" - integrity sha512-HefatIgiOaAekVcUPwT5hRNrWF3nULGv5nqGuXeHR7wz1HNN/VGlgmJE830yhIA7X3dHPln4yUTPnZ3ws7B5Fg== +swc-loader@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.1.tgz#43f2d1a746cf985476ca75ecac6234c7314fd9f8" + integrity sha512-opJG9R5Dl+Fa0QihOZO9v6vueB+JzRhJZw+c4ZRCqUHG2RZL10eHZRHMdQoDz6bvLp7XWe7XBIMUkuWtoGfMJw== symbol-tree@^3.2.4: version "3.2.4" @@ -14661,11 +14518,6 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -throttle-debounce@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" - integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -14777,11 +14629,6 @@ to-vfile@^6.1.0: is-buffer "^2.0.0" vfile "^4.0.0" -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -14840,11 +14687,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - tree-node-cli@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/tree-node-cli/-/tree-node-cli-1.5.2.tgz#c684fb9e7c2b9b29aa023eebaa9a095b6f93bf93" @@ -14879,11 +14721,6 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== -ts-easing@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" - integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== - tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -15013,9 +14850,9 @@ ua-parser-js@^0.7.30: integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== uglify-js@^3.1.4: - version "3.15.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.4.tgz#fa95c257e88f85614915b906204b9623d4fa340d" - integrity sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA== + version "3.15.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.5.tgz#2b10f9e0bfb3f5c15a8e8404393b6361eaeb33b3" + integrity sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ== uid-number@0.0.6: version "0.0.6" @@ -15828,7 +15665,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -16214,9 +16051,9 @@ yargs@^16.0.0, yargs@^16.2.0: yargs-parser "^20.2.2" yargs@^17.1.0, yargs@^17.3.1: - version "17.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284" - integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g== + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== dependencies: cliui "^7.0.2" escalade "^3.1.1"