From 4772b27a635c238651f29b21ed989a853065c845 Mon Sep 17 00:00:00 2001 From: Tommaso Sotte Date: Thu, 18 Apr 2024 13:14:28 +0200 Subject: [PATCH 01/11] fix(theme-translations): correct label for tip admonition in italian (#10051) --- .../docusaurus-theme-translations/locales/it/theme-common.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docusaurus-theme-translations/locales/it/theme-common.json b/packages/docusaurus-theme-translations/locales/it/theme-common.json index 8d79b44fff..f969fec7b4 100644 --- a/packages/docusaurus-theme-translations/locales/it/theme-common.json +++ b/packages/docusaurus-theme-translations/locales/it/theme-common.json @@ -18,7 +18,7 @@ "theme.admonition.danger": "pericolo", "theme.admonition.info": "informazioni", "theme.admonition.note": "note", - "theme.admonition.tip": "mancia", + "theme.admonition.tip": "suggerimento", "theme.admonition.warning": "warning", "theme.blog.archive.description": "Archivio", "theme.blog.archive.title": "Archivio", From 128738786b5f7c99c07922cede1c640804cdbed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Thu, 18 Apr 2024 15:08:30 +0200 Subject: [PATCH 02/11] fix(core): sortRoutes shouldn't have a default baseUrl value, this led to a bug (#10054) --- .../src/__tests__/index.test.ts | 4 +-- .../plugins/__tests__/routeConfig.test.ts | 31 ++++++++++++++----- .../docusaurus/src/server/plugins/plugins.ts | 13 +++++--- .../src/server/plugins/routeConfig.ts | 30 +++++++++++++++--- 4 files changed, 58 insertions(+), 20 deletions(-) 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 150ca37766..65c1b32179 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/index.test.ts @@ -58,7 +58,7 @@ Available ids are:\n- ${version.docs.map((d) => d.id).join('\n- ')}`, } const createFakeActions = (contentDir: string) => { - const routeConfigs: RouteConfig[] = []; + let routeConfigs: RouteConfig[] = []; const dataContainer: {[key: string]: unknown} = {}; const globalDataContainer: {pluginName?: {pluginId: unknown}} = {}; @@ -83,7 +83,7 @@ const createFakeActions = (contentDir: string) => { expectSnapshot: () => { // Sort the route config like in src/server/plugins/index.ts for // consistent snapshot ordering - sortRoutes(routeConfigs); + routeConfigs = sortRoutes(routeConfigs, '/'); expect(routeConfigs).not.toEqual([]); expect(routeConfigs).toMatchSnapshot('route config'); expect(dataContainer).toMatchSnapshot('data'); diff --git a/packages/docusaurus/src/server/plugins/__tests__/routeConfig.test.ts b/packages/docusaurus/src/server/plugins/__tests__/routeConfig.test.ts index da4345add7..f35dc7637f 100644 --- a/packages/docusaurus/src/server/plugins/__tests__/routeConfig.test.ts +++ b/packages/docusaurus/src/server/plugins/__tests__/routeConfig.test.ts @@ -202,9 +202,7 @@ describe('sortRoutes', () => { }, ]; - sortRoutes(routes); - - expect(routes).toMatchSnapshot(); + expect(sortRoutes(routes, '/')).toMatchSnapshot(); }); it('sorts route config recursively', () => { @@ -248,9 +246,7 @@ describe('sortRoutes', () => { }, ]; - sortRoutes(routes); - - expect(routes).toMatchSnapshot(); + expect(sortRoutes(routes, '/')).toMatchSnapshot(); }); it('sorts route config given a baseURL', () => { @@ -290,8 +286,27 @@ describe('sortRoutes', () => { }, ]; - sortRoutes(routes, baseURL); + expect(sortRoutes(routes, baseURL)).toMatchSnapshot(); + }); - expect(routes).toMatchSnapshot(); + it('sorts parent route configs when one included in another', () => { + const r1: RouteConfig = { + path: '/one', + component: '', + routes: [{path: `/one/myDoc`, component: ''}], + }; + const r2: RouteConfig = { + path: '/', + component: '', + routes: [{path: `/someDoc`, component: ''}], + }; + const r3: RouteConfig = { + path: '/one/another', + component: '', + routes: [{path: `/one/another/myDoc`, component: ''}], + }; + + expect(sortRoutes([r1, r2, r3], '/')).toEqual([r3, r1, r2]); + expect(sortRoutes([r3, r1, r2], '/')).toEqual([r3, r1, r2]); }); }); diff --git a/packages/docusaurus/src/server/plugins/plugins.ts b/packages/docusaurus/src/server/plugins/plugins.ts index 17e1b2d6c7..631e586644 100644 --- a/packages/docusaurus/src/server/plugins/plugins.ts +++ b/packages/docusaurus/src/server/plugins/plugins.ts @@ -224,17 +224,18 @@ async function executeAllPluginsAllContentLoaded({ // - contentLoaded() // - allContentLoaded() function mergeResults({ + baseUrl, plugins, allContentLoadedResult, }: { + baseUrl: string; plugins: LoadedPlugin[]; allContentLoadedResult: AllContentLoadedResult; }) { - const routes: PluginRouteConfig[] = [ - ...aggregateRoutes(plugins), - ...allContentLoadedResult.routes, - ]; - sortRoutes(routes); + const routes: PluginRouteConfig[] = sortRoutes( + [...aggregateRoutes(plugins), ...allContentLoadedResult.routes], + baseUrl, + ); const globalData: GlobalData = mergeGlobalData( aggregateGlobalData(plugins), @@ -279,6 +280,7 @@ export async function loadPlugins( }); const {routes, globalData} = mergeResults({ + baseUrl: context.baseUrl, plugins, allContentLoadedResult, }); @@ -324,6 +326,7 @@ export async function reloadPlugin({ }); const {routes, globalData} = mergeResults({ + baseUrl: context.baseUrl, plugins, allContentLoadedResult, }); diff --git a/packages/docusaurus/src/server/plugins/routeConfig.ts b/packages/docusaurus/src/server/plugins/routeConfig.ts index 6e0891bfd2..7832499ecc 100644 --- a/packages/docusaurus/src/server/plugins/routeConfig.ts +++ b/packages/docusaurus/src/server/plugins/routeConfig.ts @@ -27,10 +27,11 @@ export function applyRouteTrailingSlash( }; } -export function sortRoutes( - routeConfigs: RouteConfig[], - baseUrl: string = '/', -): void { +export function sortRoutes( + routesToSort: Route[], + baseUrl: string, +): Route[] { + const routeConfigs = [...routesToSort]; // Sort the route config. This ensures that route with nested // routes is always placed last. routeConfigs.sort((a, b) => { @@ -48,6 +49,23 @@ export function sortRoutes( if (!a.routes && b.routes) { return -1; } + + // If both are parent routes (for example routeBasePath: "/" and "/docs/" + // We must order them carefully in case of overlapping paths + if (a.routes && b.routes) { + if (a.path === b.path) { + // We don't really support that kind of routing ATM + // React-Router by default will only "enter" a single parent route + } else { + if (a.path.includes(b.path)) { + return -1; + } + if (b.path.includes(a.path)) { + return 1; + } + } + } + // Higher priority get placed first. if (a.priority || b.priority) { const priorityA = a.priority ?? 0; @@ -64,7 +82,9 @@ export function sortRoutes( routeConfigs.forEach((routeConfig) => { if (routeConfig.routes) { - sortRoutes(routeConfig.routes, baseUrl); + routeConfig.routes = sortRoutes(routeConfig.routes, baseUrl); } }); + + return routeConfigs; } From 01ffcd96a01b262cdbd1ab34c0d92453a7a55624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Thu, 18 Apr 2024 15:22:33 +0200 Subject: [PATCH 03/11] docs(search): Algolia troubleshooting section for index configuration problems (#10056) --- website/docs/search.mdx | 65 +++++++++++++++++- .../docsearch-troubleshoot-index-facets.jpg | Bin 0 -> 159132 bytes .../versioned_docs/version-3.2.1/search.mdx | 65 +++++++++++++++++- 3 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 website/static/img/docsearch-troubleshoot-index-facets.jpg diff --git a/website/docs/search.mdx b/website/docs/search.mdx index 3597c81ace..83281e3085 100644 --- a/website/docs/search.mdx +++ b/website/docs/search.mdx @@ -47,9 +47,17 @@ You can read more about migration from the legacy DocSearch infra in [our blog p After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via [the web interface](https://crawler.algolia.com/). Indices are readily available after deployment, so manual configuration usually isn't necessary. -:::tip +:::danger Use the recommended crawler config -It is highly recommended to use a config similar to the [**Docusaurus v3 website config**](https://docsearch.algolia.com/docs/templates/#docusaurus-v2-template). +It is highly recommended to use our official [**Docusaurus v3 crawler configuration**](https://docsearch.algolia.com/docs/templates/#docusaurus-v3-template). We cannot support you if you choose a different crawler configuration. + +::: + +:::warning When updating your crawler config + +The crawler configuration contains a `initialIndexSettings`, which will only be used to initialize your Algolia index if it does not exist yet. + +If you update your `initialIndexSettings` crawler setting, it is possible to update the index manually through the interface, but [the Algolia team recommends to delete your index and then restart a crawl](https://github.com/facebook/docusaurus/issues/9200#issuecomment-1667338492) to fully reinitialize it with the new settings. ::: @@ -197,6 +205,12 @@ Refer to the relevant [Algolia faceting documentation](https://www.algolia.com/d ::: +:::warning Contextual search doesn't work? + +If you only get search results when Contextual Search is disabled, this is very likely because of an [index configuration issue](#algolia-no-search-results). + +::: + ### Styling your Algolia search {#styling-your-algolia-search} By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards. @@ -272,6 +286,53 @@ If you prefer to edit the Algolia search React component, [swizzle](swizzling.md npm run swizzle @docusaurus/theme-search-algolia SearchBar ``` +### Troubleshooting {#algolia-troubleshooting} + +Here are the most common issues Docusaurus users face when using Algolia DocSearch. + +#### No Search Results {#algolia-no-search-results} + +Seeing no search results is usually related to an **index configuration problem**. + +
+ How to check if I have an config problem? + +Docusaurus uses [Algolia faceting](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/) for its [Contextual Search](#contextual-search) feature, to create dynamic queries such as: + +```json +[ + "language:en", + [ + "docusaurus_tag:default", + "docusaurus_tag:docs-default-3.2.1", + "docusaurus_tag:docs-community-current", + "docusaurus_tag:docs-docs-tests-current" + ] +] +``` + +On the Algolia UI, your index should allow to create facet queries on fields `docusaurus_tag`, `language`, `lang`, `version`, `type`, as shown in the screenshot below: + +![Algolia index showing appropriate faceting fields](/img/docsearch-troubleshoot-index-facets.jpg) + +Alternatively, if you disable [Contextual Search](#contextual-search) with `{contextualSearch: false}` (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results. + +
+ +:::danger Use the recommended configuration + +We [recommend a specific crawler configuration](#algolia-index-configuration) for a good reason. We cannot support you if you choose to use a different configuration. + +::: + +You can fix index configuration problems by following those steps: + +1. Use the [recommend crawler configuration](#algolia-index-configuration) +2. Delete your index through the UI +3. Trigger a new crawl through the UI +4. Check your index is recreated with the appropriate faceting fields: `docusaurus_tag`, `language`, `lang`, `version`, `type` +5. See that you now get search results, even with [Contextual Search](#contextual-search) enabled + ### Support {#algolia-support} The Algolia DocSearch team can help you figure out search problems on your site. diff --git a/website/static/img/docsearch-troubleshoot-index-facets.jpg b/website/static/img/docsearch-troubleshoot-index-facets.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4a4906a881ed3b0b46a377bbe46837adc0e2dab GIT binary patch literal 159132 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

SbAl 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 LyYTyueoy}o3<)rP literal 0 HcmV?d00001 diff --git a/website/versioned_docs/version-3.2.1/search.mdx b/website/versioned_docs/version-3.2.1/search.mdx index 3597c81ace..83281e3085 100644 --- a/website/versioned_docs/version-3.2.1/search.mdx +++ b/website/versioned_docs/version-3.2.1/search.mdx @@ -47,9 +47,17 @@ You can read more about migration from the legacy DocSearch infra in [our blog p After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via [the web interface](https://crawler.algolia.com/). Indices are readily available after deployment, so manual configuration usually isn't necessary. -:::tip +:::danger Use the recommended crawler config -It is highly recommended to use a config similar to the [**Docusaurus v3 website config**](https://docsearch.algolia.com/docs/templates/#docusaurus-v2-template). +It is highly recommended to use our official [**Docusaurus v3 crawler configuration**](https://docsearch.algolia.com/docs/templates/#docusaurus-v3-template). We cannot support you if you choose a different crawler configuration. + +::: + +:::warning When updating your crawler config + +The crawler configuration contains a `initialIndexSettings`, which will only be used to initialize your Algolia index if it does not exist yet. + +If you update your `initialIndexSettings` crawler setting, it is possible to update the index manually through the interface, but [the Algolia team recommends to delete your index and then restart a crawl](https://github.com/facebook/docusaurus/issues/9200#issuecomment-1667338492) to fully reinitialize it with the new settings. ::: @@ -197,6 +205,12 @@ Refer to the relevant [Algolia faceting documentation](https://www.algolia.com/d ::: +:::warning Contextual search doesn't work? + +If you only get search results when Contextual Search is disabled, this is very likely because of an [index configuration issue](#algolia-no-search-results). + +::: + ### Styling your Algolia search {#styling-your-algolia-search} By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards. @@ -272,6 +286,53 @@ If you prefer to edit the Algolia search React component, [swizzle](swizzling.md npm run swizzle @docusaurus/theme-search-algolia SearchBar ``` +### Troubleshooting {#algolia-troubleshooting} + +Here are the most common issues Docusaurus users face when using Algolia DocSearch. + +#### No Search Results {#algolia-no-search-results} + +Seeing no search results is usually related to an **index configuration problem**. + +

+ How to check if I have an config problem? + +Docusaurus uses [Algolia faceting](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/) for its [Contextual Search](#contextual-search) feature, to create dynamic queries such as: + +```json +[ + "language:en", + [ + "docusaurus_tag:default", + "docusaurus_tag:docs-default-3.2.1", + "docusaurus_tag:docs-community-current", + "docusaurus_tag:docs-docs-tests-current" + ] +] +``` + +On the Algolia UI, your index should allow to create facet queries on fields `docusaurus_tag`, `language`, `lang`, `version`, `type`, as shown in the screenshot below: + +![Algolia index showing appropriate faceting fields](/img/docsearch-troubleshoot-index-facets.jpg) + +Alternatively, if you disable [Contextual Search](#contextual-search) with `{contextualSearch: false}` (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results. + +
+ +:::danger Use the recommended configuration + +We [recommend a specific crawler configuration](#algolia-index-configuration) for a good reason. We cannot support you if you choose to use a different configuration. + +::: + +You can fix index configuration problems by following those steps: + +1. Use the [recommend crawler configuration](#algolia-index-configuration) +2. Delete your index through the UI +3. Trigger a new crawl through the UI +4. Check your index is recreated with the appropriate faceting fields: `docusaurus_tag`, `language`, `lang`, `version`, `type` +5. See that you now get search results, even with [Contextual Search](#contextual-search) enabled + ### Support {#algolia-support} The Algolia DocSearch team can help you figure out search problems on your site. From 8e084ef8ba515c41aac1eb379d1f0f7456e3d6a3 Mon Sep 17 00:00:00 2001 From: Virgil993 <80636398+Virgil993@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:00:24 +0300 Subject: [PATCH 04/11] fix(algolia): add insights property on Algolia Theme Config object TS definition (#10048) Co-authored-by: sebastien --- .github/workflows/lint-autofix.yml | 3 +++ package.json | 2 +- .../src/theme-search-algolia.d.ts | 1 + project-words.txt | 11 ++++++----- website/docs/search.mdx | 3 +++ website/versioned_docs/version-2.x/search.mdx | 3 +++ website/versioned_docs/version-3.0.1/search.mdx | 3 +++ website/versioned_docs/version-3.1.1/search.mdx | 3 +++ website/versioned_docs/version-3.2.1/search.mdx | 3 +++ 9 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint-autofix.yml b/.github/workflows/lint-autofix.yml index ed857a3e91..10d26262a8 100644 --- a/.github/workflows/lint-autofix.yml +++ b/.github/workflows/lint-autofix.yml @@ -39,6 +39,9 @@ jobs: - name: AutoFix Spelling run: yarn lint:spelling:fix + - name: Print Diff + run: git diff + - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: 'refactor: apply lint autofix' diff --git a/package.json b/package.json index 580d85d1ea..19b1b56873 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "lint:js": "eslint --cache --report-unused-disable-directives \"**/*.{js,jsx,ts,tsx,mjs}\"", "lint:js:fix": "yarn lint:js --fix", "lint:spelling": "cspell \"**\" --no-progress --show-context --show-suggestions", - "lint:spelling:fix": "yarn rimraf project-words.txt && echo \"# Project Words - DO NOT TOUCH - This is updated through CI\" >> project-words.txt && yarn -s lint:spelling --words-only --unique --no-exit-code --no-summary \"**\" | sort --ignore-case >> project-words.txt", + "lint:spelling:fix": "yarn rimraf project-words.txt && echo \"# Project Words - DO NOT TOUCH - This is updated through CI\" >> project-words.txt && yarn -s lint:spelling --words-only --unique --no-exit-code --no-summary \"**\" | cross-env LC_ALL=en_US.UTF-8 sort --ignore-case >> project-words.txt", "lint:style": "stylelint \"**/*.css\"", "lint:style:fix": "yarn lint:style --fix", "lerna": "lerna", diff --git a/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts b/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts index a6ce183b5d..d9c5f280ba 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts +++ b/packages/docusaurus-theme-search-algolia/src/theme-search-algolia.d.ts @@ -21,6 +21,7 @@ declare module '@docusaurus/theme-search-algolia' { from: string; to: string; }; + insights?: boolean; }; }; export type UserThemeConfig = DeepPartial; diff --git a/project-words.txt b/project-words.txt index a8d6f78c13..9cda2a4659 100644 --- a/project-words.txt +++ b/project-words.txt @@ -67,9 +67,11 @@ Datagit datagit Datagit's dedup +Déja devto dingers Dmitry +Docsearch docsearch Docsify Docu @@ -83,7 +85,6 @@ dogfooding Dojocat Dyte dyte -Déja easyops Endi endi @@ -118,14 +119,14 @@ Hamel Hasura hasura Heavener +Héctor +héllô Hideable hideable hola Hostman hoverable Husain -Héctor -héllô IANAD idempotency Iframes @@ -220,6 +221,7 @@ noninteractive npmjs nprogress Nuxt +ödingers opensearch opensearchdescription opensource @@ -305,6 +307,7 @@ saurus Scaleway Sebastien sebastien +Sébastien sebastienlorber sensical setaf @@ -350,7 +353,6 @@ supabase SVGR svgr swizzlable -Sébastien Teik templating Thanos @@ -408,4 +410,3 @@ yangshunz Zhou zoomable zpao -ödingers diff --git a/website/docs/search.mdx b/website/docs/search.mdx index 83281e3085..51be402a0c 100644 --- a/website/docs/search.mdx +++ b/website/docs/search.mdx @@ -124,6 +124,9 @@ export default { // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + //... other Algolia params }, // highlight-end diff --git a/website/versioned_docs/version-2.x/search.mdx b/website/versioned_docs/version-2.x/search.mdx index 3b260fcd7f..c02656451b 100644 --- a/website/versioned_docs/version-2.x/search.mdx +++ b/website/versioned_docs/version-2.x/search.mdx @@ -116,6 +116,9 @@ module.exports = { // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + //... other Algolia params }, // highlight-end diff --git a/website/versioned_docs/version-3.0.1/search.mdx b/website/versioned_docs/version-3.0.1/search.mdx index d79d1be4e4..9d6bd51579 100644 --- a/website/versioned_docs/version-3.0.1/search.mdx +++ b/website/versioned_docs/version-3.0.1/search.mdx @@ -116,6 +116,9 @@ export default { // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + //... other Algolia params }, // highlight-end diff --git a/website/versioned_docs/version-3.1.1/search.mdx b/website/versioned_docs/version-3.1.1/search.mdx index d79d1be4e4..9d6bd51579 100644 --- a/website/versioned_docs/version-3.1.1/search.mdx +++ b/website/versioned_docs/version-3.1.1/search.mdx @@ -116,6 +116,9 @@ export default { // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + //... other Algolia params }, // highlight-end diff --git a/website/versioned_docs/version-3.2.1/search.mdx b/website/versioned_docs/version-3.2.1/search.mdx index 83281e3085..51be402a0c 100644 --- a/website/versioned_docs/version-3.2.1/search.mdx +++ b/website/versioned_docs/version-3.2.1/search.mdx @@ -124,6 +124,9 @@ export default { // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + //... other Algolia params }, // highlight-end From edb695b9aa577ef3c2a5d4a15f2c92e8ed43e9e7 Mon Sep 17 00:00:00 2001 From: Mikey O'Toole Date: Thu, 18 Apr 2024 16:04:56 +0100 Subject: [PATCH 05/11] docs: add troubleshooting steps to migration/upgrade page (#9490) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joshua Chen Co-authored-by: sebastienlorber Co-authored-by: Sébastien Lorber --- website/docs/migration/index.mdx | 39 ++++++++++++++++++++++++++++++++ website/docusaurus.config.ts | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/website/docs/migration/index.mdx b/website/docs/migration/index.mdx index c78662f032..9a9a5616ed 100644 --- a/website/docs/migration/index.mdx +++ b/website/docs/migration/index.mdx @@ -11,3 +11,42 @@ Docusaurus versioning is based on the `major.minor.patch` scheme and respects [* import DocCardList from '@theme/DocCardList'; + +## Troubleshooting upgrades + +When upgrading Docusaurus you may experience issues caused by mismatching cached dependencies - there are a few troubleshooting steps you should perform to resolve these common issues before reporting a bug or seeking support. + +### Run the `clear` command + +This CLI command is used to clear a Docusaurus site's generated assets, caches and build artifacts. + +```bash npm2yarn +npm run clear +``` + +### Remove `node_modules` and your lock file(s) + +Remove the `node_modules` folder and your package manager's lock file using the following: + + + + +```bash +rm -rf node_modules yarn.lock package-lock.json +``` + + + + +```powershell +@('node_modules','yarn.lock','package-lock.json') | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue +``` + + + + +Then reinstall packages and regenerate the `lock` file using: + +```bash npm2yarn +npm install +``` diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index a5cdb17b4a..996dcb42b0 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ import path from 'path'; - import npm2yarn from '@docusaurus/remark-plugin-npm2yarn'; import remarkMath from 'remark-math'; import rehypeKatex from 'rehype-katex'; @@ -523,6 +522,7 @@ export default async function createConfigAsync() { 'haskell', 'matlab', 'PHp', + 'powershell', 'bash', 'diff', 'json', From 491af1fcae7d0a6898f6811ab7a0251f3d6ccbf1 Mon Sep 17 00:00:00 2001 From: volcanofr Date: Thu, 18 Apr 2024 17:05:32 +0200 Subject: [PATCH 06/11] fix(website): fix website manifest.json name "Docusaurus v2" to just "Docusaurus" (#10049) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Lorber --- website/static/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/manifest.json b/website/static/manifest.json index a746e2e8f0..8a08d58d2e 100644 --- a/website/static/manifest.json +++ b/website/static/manifest.json @@ -1,5 +1,5 @@ { - "name": "Docusaurus v2", + "name": "Docusaurus", "short_name": "Docusaurus", "theme_color": "#2196f3", "background_color": "#424242", From a612b4eacf92215750fd12f7d721c2d59504c8e4 Mon Sep 17 00:00:00 2001 From: Alexander Sandor <137198655+SandPod@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:59:31 +0200 Subject: [PATCH 07/11] feat(cli): docusaurus deploy should support a --target-dir option (#9767) Co-authored-by: sebastien --- packages/docusaurus/bin/docusaurus.mjs | 4 ++++ packages/docusaurus/src/commands/deploy.ts | 27 ++++++++++++---------- website/docs/cli.mdx | 1 + 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/docusaurus/bin/docusaurus.mjs b/packages/docusaurus/bin/docusaurus.mjs index cd53d42d59..7429f4f415 100755 --- a/packages/docusaurus/bin/docusaurus.mjs +++ b/packages/docusaurus/bin/docusaurus.mjs @@ -115,6 +115,10 @@ cli '--skip-build', 'skip building website before deploy it (default: false)', ) + .option( + '--target-dir ', + 'path to the target directory to deploy to (default: `.`)', + ) .action(deploy); /** diff --git a/packages/docusaurus/src/commands/deploy.ts b/packages/docusaurus/src/commands/deploy.ts index e16f488155..2e23a8e3ef 100644 --- a/packages/docusaurus/src/commands/deploy.ts +++ b/packages/docusaurus/src/commands/deploy.ts @@ -19,6 +19,7 @@ export type DeployCLIOptions = Pick< 'config' | 'locale' | 'outDir' > & { skipBuild?: boolean; + targetDir?: string; }; // GIT_PASS env variable should not appear in logs @@ -185,32 +186,33 @@ You can also set the deploymentBranch property in docusaurus.config.js .`); const currentCommit = shellExecLog('git rev-parse HEAD').stdout.trim(); const runDeploy = async (outputDirectory: string) => { + const targetDirectory = cliOptions.targetDir ?? '.'; const fromPath = outputDirectory; const toPath = await fs.mkdtemp( path.join(os.tmpdir(), `${projectName}-${deploymentBranch}`), ); shell.cd(toPath); - // Check out deployment branch when cloning repository, and then remove all - // the files in the directory. If the 'clone' command fails, assume that - // the deployment branch doesn't exist, and initialize git in an empty - // directory, check out a clean deployment branch and add remote. + // Clones the repo into the temp folder and checks out the target branch. + // If the branch doesn't exist, it creates a new one based on the + // repository default branch. if ( shellExecLog( `git clone --depth 1 --branch ${deploymentBranch} ${deploymentRepoURL} "${toPath}"`, - ).code === 0 + ).code !== 0 ) { - shellExecLog('git rm -rf .'); - } else { - shellExecLog('git init'); + shellExecLog(`git clone --depth 1 ${deploymentRepoURL} "${toPath}"`); shellExecLog(`git checkout -b ${deploymentBranch}`); - shellExecLog(`git remote add origin ${deploymentRepoURL}`); } + // Clear out any existing contents in the target directory + shellExecLog(`git rm -rf ${targetDirectory}`); + + const targetPath = path.join(toPath, targetDirectory); try { - await fs.copy(fromPath, toPath); + await fs.copy(fromPath, targetPath); } catch (err) { - logger.error`Copying build assets from path=${fromPath} to path=${toPath} failed.`; + logger.error`Copying build assets from path=${fromPath} to path=${targetPath} failed.`; throw err; } shellExecLog('git add --all'); @@ -254,7 +256,8 @@ You can also set the deploymentBranch property in docusaurus.config.js .`); if (!cliOptions.skipBuild) { // Build site, then push to deploymentBranch branch of specified repo. try { - await build(siteDir, cliOptions, false).then(() => runDeploy(outDir)); + await build(siteDir, cliOptions, false); + await runDeploy(outDir); } catch (err) { logger.error('Deployment of the build output failed.'); throw err; diff --git a/website/docs/cli.mdx b/website/docs/cli.mdx index 369779788a..5be24e5191 100644 --- a/website/docs/cli.mdx +++ b/website/docs/cli.mdx @@ -144,6 +144,7 @@ Deploys your site with [GitHub Pages](https://pages.github.com/). Check out the | `--locale` | | Deploy the site in the specified locale. If not specified, all known locales are deployed. | | `--out-dir` | `build` | The full path for the new output directory, relative to the current workspace. | | `--skip-build` | `false` | Deploy website without building it. This may be useful when using a custom deploy script. | +| `--target-dir` | `.` | Path to the target directory to deploy to. | | `--config` | `undefined` | Path to Docusaurus config file, default to `[siteDir]/docusaurus.config.js` | ### `docusaurus serve [siteDir]` {#docusaurus-serve-sitedir} From c746289db2b24c78f4c1ea4fa19e20085707d68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Fri, 19 Apr 2024 13:11:07 +0200 Subject: [PATCH 08/11] refactor(theme): simplify CSS solution to solve empty search container (#10061) --- .../src/theme/Navbar/Search/styles.module.css | 11 +- project-words.txt | 138 +++++++++--------- 2 files changed, 71 insertions(+), 78 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/Search/styles.module.css b/packages/docusaurus-theme-classic/src/theme/Navbar/Search/styles.module.css index 2ac0232513..b59d29e3fc 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/Search/styles.module.css +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/Search/styles.module.css @@ -9,15 +9,8 @@ Workaround to avoid rendering empty search container See https://github.com/facebook/docusaurus/pull/9385 */ -/* -TODO temporary @supports check, remove before 2025 -only needed for Firefox < 121 -see https://github.com/facebook/docusaurus/issues/9527#issuecomment-1805272379 - */ -@supports selector(:has(*)) { - .navbarSearchContainer:not(:has(> *)) { - display: none; - } +.navbarSearchContainer:empty { + display: none; } @media (max-width: 996px) { diff --git a/project-words.txt b/project-words.txt index 9cda2a4659..2378c09abd 100644 --- a/project-words.txt +++ b/project-words.txt @@ -6,10 +6,10 @@ alexbdebrie Alexey algoliasearch Allez -Anshul anshul -APFS +Anshul apfs +APFS appinstalled Applanga architecting @@ -17,20 +17,20 @@ Astro atrule Autoconverted autofix -Autogen autogen +Autogen autogenerating autohide Autolinks Bartosz beforeinstallprompt Bhatt -Blockquotes blockquotes +Blockquotes Bokmål browserstack -Buble buble +Buble Buble's bunx caabernathy @@ -41,14 +41,14 @@ camelcase Candillon cdabcdab cdpath -Cena cena +Cena changefreq -Chedeau chedeau +Chedeau Clément -Codegen codegen +Codegen codesandbox Codespaces commonmark @@ -58,44 +58,44 @@ Couriol creativecommons Csapo Csvg -Customizability customizability -Dabit +Customizability dabit +Dabit Daishi -Datagit datagit +Datagit Datagit's dedup Déja devto dingers Dmitry -Docsearch docsearch +Docsearch Docsify -Docu docu +Docu docusuarus Docz -Dogfood dogfood -Dogfooding +Dogfood dogfooding +Dogfooding Dojocat -Dyte dyte +Dyte easyops -Endi endi -Endi's -Endilie +Endi endilie +Endilie endiliey +Endi's ERRNAMETOOLONG evaluable -Execa execa +Execa externalwaiting failfast Fargate @@ -112,17 +112,17 @@ gabrielcsapo Gifs Goss Goyal -Gtag gtag +Gtag hahaha Hamel -Hasura hasura +Hasura Heavener Héctor héllô -Hideable hideable +Hideable hola Hostman hoverable @@ -131,15 +131,15 @@ IANAD idempotency Iframes Immer -Infima infima +Infima Infima's inlines Intelli intellij interactiveness -Interpolatable interpolatable +Interpolatable Investec javadoc jiti @@ -148,67 +148,67 @@ jodyheavener joshcena jssdk Kaszubowski -Katex katex +Katex Kato -Keytar keytar +Keytar Kinsta Knapen Koyeb Koyeb's Lamana -Lastmod lastmod -Lifecycles +Lastmod lifecycles -Linkify +Lifecycles linkify +Linkify Localizable lockb Lorber Lorber's -LQIP lqip +LQIP lunrjs Marcey Marcey's -Markprompt markprompt +Markprompt Massoud mathjax maxlynch maxresdefault -MDAST mdast +MDAST mdwn MDXA MDXAST MDXHAST -Mdxjs mdxjs -Meilisearch +Mdxjs meilisearch +Meilisearch merveilleuse metadatum metastring metrica Metrika -Microdata microdata -Mindmap +Microdata mindmap +Mindmap mkdn mkdocs mkdown -Moesif moesif +Moesif msapplication Nabors Nakagawa nand -Navigations navigations +Navigations navlink netrc Nextra @@ -226,38 +226,38 @@ opensearch opensearchdescription opensource optimizt -Orama orama -Orta +Orama orta -Outerbounds +Orta +O’Shannessy outerbounds +Outerbounds overrideable ozaki -O’Shannessy pageview -Palenight palenight +Palenight Paletton Palo -Paraiso paraiso +Paraiso pathinfo paularmstrong philpl -Photoshop photoshop +Photoshop picomatch Pipeable playbtn -Pluggable pluggable -Plushie +Pluggable plushie +Plushie plushies posthog -Precache precache +Precache precached precaching preconfigured @@ -267,8 +267,8 @@ printfn println prismjs producthunt -Profilo profilo +Profilo Protobuf protobuffet PRPL @@ -278,8 +278,8 @@ Qovery quasis Quddus Quddús -Quickwit quickwit +Quickwit rachelnabors Ramón reactjs @@ -290,31 +290,31 @@ Redoc redocusaurus redwoodjs refactorings -Rehype rehype -Reloadable +Rehype reloadable +Reloadable renderable REPONAME -Retrocompatibility retrocompatibility -Retrocompatible +Retrocompatibility retrocompatible +Retrocompatible rmiz rtcts rtlcss saurus Scaleway -Sebastien sebastien +Sebastien Sébastien sebastienlorber sensical setaf setext setlocal -Shiki shiki +Shiki shortcodes showinfo Sida @@ -323,8 +323,8 @@ slorber sluggified sluggifies sluggify -Solana solana +Solana spâce stackblitz stackblitzrc @@ -344,14 +344,14 @@ subsetting subsubcategory subsubfolder subsubsection -Subsubsubfolder subsubsubfolder +Subsubsubfolder Sucipto sunsetting -Supabase supabase -SVGR +Supabase svgr +SVGR swizzlable Teik templating @@ -361,32 +361,32 @@ toolset toplevel Transifex transpiles -Treeified treeified +Treeified treeifies treeify -Triaging triaging +Triaging TSES twoslash typecheck typesafe -Typesense typesense +Typesense Unavatar unlinkable -Unlisteds unlisteds -Unlocalized +Unlisteds unlocalized +Unlocalized unnormalized unswizzle upvotes urlset Vannicatte vbnet -Vetter vetter +Vetter vfile Vicenti Vieira @@ -395,8 +395,8 @@ Vinnik vjeux voir waivable -WCAG wcag +WCAG webfactory webpackbar webstorm @@ -404,8 +404,8 @@ Wolcott Xplorer XSOAR Yacop -Yangshun yangshun +Yangshun yangshunz Zhou zoomable From eb07e9d6d438db351d8b0974d347b276f20df9a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Fri, 19 Apr 2024 13:13:52 +0200 Subject: [PATCH 09/11] refactor(core): optimize App entrypoint, it should not re-render when navigating (#10060) --- packages/docusaurus/src/client/App.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/docusaurus/src/client/App.tsx b/packages/docusaurus/src/client/App.tsx index 3a93ec6524..e235fb3556 100644 --- a/packages/docusaurus/src/client/App.tsx +++ b/packages/docusaurus/src/client/App.tsx @@ -25,9 +25,19 @@ import SiteMetadataDefaults from './SiteMetadataDefaults'; import ErrorBoundary from '@docusaurus/ErrorBoundary'; import HasHydratedDataAttribute from './hasHydratedDataAttribute'; -export default function App(): JSX.Element { - const routeElement = renderRoutes(routes); +const routesElement = renderRoutes(routes); + +function AppNavigation() { const location = useLocation(); + const normalizedLocation = normalizeLocation(location); + return ( + + {routesElement} + + ); +} + +export default function App(): JSX.Element { return ( @@ -36,9 +46,7 @@ export default function App(): JSX.Element { - - {routeElement} - + From e736dcb8798fa0ac99277fc17035571b26ad4d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Fri, 19 Apr 2024 19:01:04 +0200 Subject: [PATCH 10/11] test(e2e): TypeCheck website/starter in min/max range of TS versions (#10063) --- .github/workflows/tests-e2e.yml | 20 +++++++++++++++++-- .github/workflows/tests-windows.yml | 9 +++++++++ .github/workflows/tests.yml | 13 ++++++++++-- website/docs/migration/v3.mdx | 8 ++++---- website/docs/typescript-support.mdx | 2 +- .../version-3.0.1/migration/v3.mdx | 8 ++++---- .../version-3.0.1/typescript-support.mdx | 2 +- .../version-3.1.1/migration/v3.mdx | 8 ++++---- .../version-3.1.1/typescript-support.mdx | 2 +- .../version-3.2.1/migration/v3.mdx | 8 ++++---- .../version-3.2.1/typescript-support.mdx | 2 +- 11 files changed, 58 insertions(+), 24 deletions(-) diff --git a/.github/workflows/tests-e2e.yml b/.github/workflows/tests-e2e.yml index bdb96090f9..de5f5134ea 100644 --- a/.github/workflows/tests-e2e.yml +++ b/.github/workflows/tests-e2e.yml @@ -114,11 +114,27 @@ jobs: working-directory: ../test-website env: E2E_TEST: true - - name: Type check + + - name: TypeCheck website # TODO: there're some lingering issues with PnP + tsc. Enable tsc in PnP later. if: matrix.variant == '-st' && matrix.nodeLinker != 'pnp' - run: yarn typecheck working-directory: ../test-website + run: yarn typecheck + - name: TypeCheck website - min version - v5.1 + # TODO: there're some lingering issues with PnP + tsc. Enable tsc in PnP later. + if: matrix.variant == '-st' && matrix.nodeLinker != 'pnp' + working-directory: ../test-website + run: | + yarn add typescript@5.1.6 --exact + yarn typecheck + - name: TypeCheck website - max version - Latest + # TODO: there're some lingering issues with PnP + tsc. Enable tsc in PnP later. + if: matrix.variant == '-st' && matrix.nodeLinker != 'pnp' + working-directory: ../test-website + run: | + yarn add typescript@latest --exact + yarn typecheck + - name: Build test-website project run: yarn build working-directory: ../test-website diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index 2c14fe9706..0cb9a15b6c 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -52,5 +52,14 @@ jobs: run: yarn workspace website test:swizzle:wrap:ts - name: Docusaurus Build run: yarn build:website:fast + - name: TypeCheck website run: yarn workspace website typecheck + - name: TypeCheck website - min version - v5.1 + run: | + yarn workspace website add typescript@5.1.6 --exact + yarn workspace website typecheck + - name: TypeCheck website - max version - Latest + run: | + yarn workspace website add typescript@latest --exact + yarn workspace website typecheck diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 208d26c93b..16d9e168a7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -39,9 +39,18 @@ jobs: run: yarn - name: Test run: yarn test - - name: TypeCheck website - run: yarn workspace website typecheck - name: Remove Theme Internal Re-export run: yarn workspace @docusaurus/theme-common removeThemeInternalReexport - name: Docusaurus Build run: yarn build:website:fast + + - name: TypeCheck website + run: yarn workspace website typecheck + - name: TypeCheck website - min version - v5.1 + run: | + yarn workspace website add typescript@5.1.6 --exact + yarn workspace website typecheck + - name: TypeCheck website - max version - Latest + run: | + yarn workspace website add typescript@latest --exact + yarn workspace website typecheck diff --git a/website/docs/migration/v3.mdx b/website/docs/migration/v3.mdx index 219310b1c6..38cc4a4026 100644 --- a/website/docs/migration/v3.mdx +++ b/website/docs/migration/v3.mdx @@ -36,7 +36,7 @@ Docusaurus v3 now uses the following dependencies: - Node.js v18.0+ - React v18.0+ - MDX v3.0+ -- TypeScript v5.0+ +- TypeScript v5.1+ - prism-react-renderer v2.0+ - react-live v4.0+ - remark-emoji v4.0+ @@ -98,7 +98,7 @@ For TypeScript users: // upgrade React types to v18.0+ - "@types/react": "^17.0.69", + "@types/react": "^18.2.29", - // upgrade TypeScript to v5.0+ + // upgrade TypeScript to v5.1+ - "typescript": "~4.7.4" + "typescript": "~5.2.2" } @@ -689,9 +689,9 @@ However, this is a new major library version containing breaking changes, and we ::: -### TypeScript v5.0+ +### TypeScript v5.1+ -Docusaurus v3 now requires **TypeScript >= 5.0**. +Docusaurus v3 now requires **TypeScript >= 5.1**. :::info How to upgrade diff --git a/website/docs/typescript-support.mdx b/website/docs/typescript-support.mdx index 3746982f4c..1493cbe123 100644 --- a/website/docs/typescript-support.mdx +++ b/website/docs/typescript-support.mdx @@ -6,7 +6,7 @@ description: Docusaurus is written in TypeScript and provides first-class TypeSc Docusaurus is written in TypeScript and provides first-class TypeScript support. -The minimum required version is **TypeScript 5.0**. +The minimum required version is **TypeScript 5.1**. ## Initialization {#initialization} diff --git a/website/versioned_docs/version-3.0.1/migration/v3.mdx b/website/versioned_docs/version-3.0.1/migration/v3.mdx index 25056f9487..affbb747ad 100644 --- a/website/versioned_docs/version-3.0.1/migration/v3.mdx +++ b/website/versioned_docs/version-3.0.1/migration/v3.mdx @@ -36,7 +36,7 @@ Docusaurus v3 now uses the following dependencies: - Node.js v18.0+ - React v18.0+ - MDX v3.0+ -- TypeScript v5.0+ +- TypeScript v5.1+ - prism-react-renderer v2.0+ - react-live v4.0+ - remark-emoji v4.0+ @@ -98,7 +98,7 @@ For TypeScript users: // upgrade React types to v18.0+ - "@types/react": "^17.0.69", + "@types/react": "^18.2.29", - // upgrade TypeScript to v5.0+ + // upgrade TypeScript to v5.1+ - "typescript": "~4.7.4" + "typescript": "~5.2.2" } @@ -601,9 +601,9 @@ However, this is a new major library version containing breaking changes, and we ::: -### TypeScript v5.0+ +### TypeScript v5.1+ -Docusaurus v3 now requires **TypeScript >= 5.0**. +Docusaurus v3 now requires **TypeScript >= 5.1**. :::info How to upgrade diff --git a/website/versioned_docs/version-3.0.1/typescript-support.mdx b/website/versioned_docs/version-3.0.1/typescript-support.mdx index 3746982f4c..1493cbe123 100644 --- a/website/versioned_docs/version-3.0.1/typescript-support.mdx +++ b/website/versioned_docs/version-3.0.1/typescript-support.mdx @@ -6,7 +6,7 @@ description: Docusaurus is written in TypeScript and provides first-class TypeSc Docusaurus is written in TypeScript and provides first-class TypeScript support. -The minimum required version is **TypeScript 5.0**. +The minimum required version is **TypeScript 5.1**. ## Initialization {#initialization} diff --git a/website/versioned_docs/version-3.1.1/migration/v3.mdx b/website/versioned_docs/version-3.1.1/migration/v3.mdx index ff8a0050f1..7195e82ea9 100644 --- a/website/versioned_docs/version-3.1.1/migration/v3.mdx +++ b/website/versioned_docs/version-3.1.1/migration/v3.mdx @@ -36,7 +36,7 @@ Docusaurus v3 now uses the following dependencies: - Node.js v18.0+ - React v18.0+ - MDX v3.0+ -- TypeScript v5.0+ +- TypeScript v5.1+ - prism-react-renderer v2.0+ - react-live v4.0+ - remark-emoji v4.0+ @@ -98,7 +98,7 @@ For TypeScript users: // upgrade React types to v18.0+ - "@types/react": "^17.0.69", + "@types/react": "^18.2.29", - // upgrade TypeScript to v5.0+ + // upgrade TypeScript to v5.1+ - "typescript": "~4.7.4" + "typescript": "~5.2.2" } @@ -689,9 +689,9 @@ However, this is a new major library version containing breaking changes, and we ::: -### TypeScript v5.0+ +### TypeScript v5.1+ -Docusaurus v3 now requires **TypeScript >= 5.0**. +Docusaurus v3 now requires **TypeScript >= 5.1**. :::info How to upgrade diff --git a/website/versioned_docs/version-3.1.1/typescript-support.mdx b/website/versioned_docs/version-3.1.1/typescript-support.mdx index 3746982f4c..1493cbe123 100644 --- a/website/versioned_docs/version-3.1.1/typescript-support.mdx +++ b/website/versioned_docs/version-3.1.1/typescript-support.mdx @@ -6,7 +6,7 @@ description: Docusaurus is written in TypeScript and provides first-class TypeSc Docusaurus is written in TypeScript and provides first-class TypeScript support. -The minimum required version is **TypeScript 5.0**. +The minimum required version is **TypeScript 5.1**. ## Initialization {#initialization} diff --git a/website/versioned_docs/version-3.2.1/migration/v3.mdx b/website/versioned_docs/version-3.2.1/migration/v3.mdx index 219310b1c6..38cc4a4026 100644 --- a/website/versioned_docs/version-3.2.1/migration/v3.mdx +++ b/website/versioned_docs/version-3.2.1/migration/v3.mdx @@ -36,7 +36,7 @@ Docusaurus v3 now uses the following dependencies: - Node.js v18.0+ - React v18.0+ - MDX v3.0+ -- TypeScript v5.0+ +- TypeScript v5.1+ - prism-react-renderer v2.0+ - react-live v4.0+ - remark-emoji v4.0+ @@ -98,7 +98,7 @@ For TypeScript users: // upgrade React types to v18.0+ - "@types/react": "^17.0.69", + "@types/react": "^18.2.29", - // upgrade TypeScript to v5.0+ + // upgrade TypeScript to v5.1+ - "typescript": "~4.7.4" + "typescript": "~5.2.2" } @@ -689,9 +689,9 @@ However, this is a new major library version containing breaking changes, and we ::: -### TypeScript v5.0+ +### TypeScript v5.1+ -Docusaurus v3 now requires **TypeScript >= 5.0**. +Docusaurus v3 now requires **TypeScript >= 5.1**. :::info How to upgrade diff --git a/website/versioned_docs/version-3.2.1/typescript-support.mdx b/website/versioned_docs/version-3.2.1/typescript-support.mdx index 3746982f4c..1493cbe123 100644 --- a/website/versioned_docs/version-3.2.1/typescript-support.mdx +++ b/website/versioned_docs/version-3.2.1/typescript-support.mdx @@ -6,7 +6,7 @@ description: Docusaurus is written in TypeScript and provides first-class TypeSc Docusaurus is written in TypeScript and provides first-class TypeScript support. -The minimum required version is **TypeScript 5.0**. +The minimum required version is **TypeScript 5.1**. ## Initialization {#initialization} From f88da6c66d578f11960a1301e72ffdc4a59dd78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Fri, 19 Apr 2024 21:03:32 +0200 Subject: [PATCH 11/11] refactor: extract base TS client config + upgrade TS + refactor TS setup (#10065) --- .eslintrc.js | 2 +- .github/workflows/tests-e2e.yml | 4 +- .github/workflows/tests-windows.yml | 2 +- .github/workflows/tests.yml | 2 +- __tests__/validate-tsconfig.test.ts | 53 +++++++++---------- .../create-docusaurus/tsconfig.build.json | 4 +- packages/create-docusaurus/tsconfig.json | 2 +- .../docusaurus-cssnano-preset/tsconfig.json | 4 +- packages/docusaurus-logger/tsconfig.json | 4 +- packages/docusaurus-mdx-loader/tsconfig.json | 4 +- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../docusaurus-plugin-debug/tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 10 +--- packages/docusaurus-plugin-pwa/tsconfig.json | 4 +- .../tsconfig.worker.json | 4 +- .../docusaurus-plugin-sitemap/tsconfig.json | 4 +- .../tsconfig.client.json | 12 ++--- .../tsconfig.json | 4 +- .../docusaurus-preset-classic/tsconfig.json | 4 +- .../tsconfig.json | 4 +- .../tsconfig.client.json | 10 +--- .../docusaurus-theme-classic/tsconfig.json | 4 +- .../docusaurus-theme-common/tsconfig.json | 15 ++---- .../tsconfig.client.json | 10 +--- .../tsconfig.json | 4 +- .../tsconfig.client.json | 10 +--- .../docusaurus-theme-mermaid/tsconfig.json | 4 +- .../tsconfig.client.json | 10 +--- .../tsconfig.json | 4 +- .../tsconfig.build.json | 4 +- .../tsconfig.json | 2 +- .../docusaurus-utils-common/tsconfig.json | 4 +- .../docusaurus-utils-validation/tsconfig.json | 4 +- packages/docusaurus-utils/tsconfig.json | 4 +- packages/docusaurus/tsconfig.client.json | 12 ++--- packages/docusaurus/tsconfig.json | 2 +- packages/docusaurus/tsconfig.server.json | 4 +- packages/eslint-plugin/tsconfig.json | 4 +- packages/lqip-loader/tsconfig.json | 4 +- packages/stylelint-copyright/tsconfig.json | 4 +- tsconfig.base.client.json | 11 ++++ tsconfig.json => tsconfig.base.json | 0 56 files changed, 149 insertions(+), 228 deletions(-) create mode 100644 tsconfig.base.client.json rename tsconfig.json => tsconfig.base.json (100%) diff --git a/.eslintrc.js b/.eslintrc.js index 3b67b00309..9aefce002e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -32,7 +32,7 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { // tsconfigRootDir: __dirname, - // project: ['./tsconfig.json', './website/tsconfig.json'], + // project: ['./tsconfig.base.json', './website/tsconfig.base.json'], }, globals: { JSX: true, diff --git a/.github/workflows/tests-e2e.yml b/.github/workflows/tests-e2e.yml index de5f5134ea..b98cb3270b 100644 --- a/.github/workflows/tests-e2e.yml +++ b/.github/workflows/tests-e2e.yml @@ -10,7 +10,7 @@ on: - yarn.lock - jest.config.mjs - packages/** - - tsconfig.json + - tsconfig.*.json pull_request: branches: - main @@ -20,7 +20,7 @@ on: - yarn.lock - jest.config.mjs - packages/** - - tsconfig.json + - tsconfig.*.json - admin/verdaccio.yaml - .github/workflows/tests-e2e.yml diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index 0cb9a15b6c..c280e4fd96 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -10,7 +10,7 @@ on: - yarn.lock - jest.config.mjs - packages/** - - tsconfig.json + - tsconfig.*.json concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 16d9e168a7..ae170e8b25 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ on: - yarn.lock - jest.config.mjs - packages/** - - tsconfig.json + - tsconfig.*.json concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} diff --git a/__tests__/validate-tsconfig.test.ts b/__tests__/validate-tsconfig.test.ts index 8038a04ae8..c5dc5749ed 100644 --- a/__tests__/validate-tsconfig.test.ts +++ b/__tests__/validate-tsconfig.test.ts @@ -31,38 +31,37 @@ async function getTsconfigFiles(): Promise { } 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(), - }).unknown(), - otherwise: Joi.object({ - noEmit: Joi.valid(false).required(), - incremental: Joi.valid(true).required(), - rootDir: Joi.valid('src').required(), - outDir: Joi.valid('lib').required(), - }).unknown(), - }, + extends: Joi.valid( + '../../tsconfig.base.json', + '../../tsconfig.base.client.json', ), + compilerOptions: Joi.object({ + rootDir: Joi.valid('src').required(), + outDir: Joi.valid('lib').required(), + tsBuildInfoFile: Joi.valid( + 'lib/.tsbuildinfo', + 'lib/.tsbuildinfo-client', + 'lib/.tsbuildinfo-worker', + ), + }).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; - } - }); + + tsconfigFiles + // Ignore noEmit configs + .filter((file) => !(file.content.compilerOptions!.noEmit === true)) + .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/packages/create-docusaurus/tsconfig.build.json b/packages/create-docusaurus/tsconfig.build.json index 36377cdd0c..a95d8eb4c1 100644 --- a/packages/create-docusaurus/tsconfig.build.json +++ b/packages/create-docusaurus/tsconfig.build.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "composite": true, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/create-docusaurus/tsconfig.json b/packages/create-docusaurus/tsconfig.json index 13e35c5a95..fd08e5ac97 100644 --- a/packages/create-docusaurus/tsconfig.json +++ b/packages/create-docusaurus/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.build.json"}], "compilerOptions": { "noEmit": true, diff --git a/packages/docusaurus-cssnano-preset/tsconfig.json b/packages/docusaurus-cssnano-preset/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/docusaurus-cssnano-preset/tsconfig.json +++ b/packages/docusaurus-cssnano-preset/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-logger/tsconfig.json b/packages/docusaurus-logger/tsconfig.json index 69bd9341b4..6a904aac6f 100644 --- a/packages/docusaurus-logger/tsconfig.json +++ b/packages/docusaurus-logger/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-mdx-loader/tsconfig.json b/packages/docusaurus-mdx-loader/tsconfig.json index 670db9ce91..8708abf63c 100644 --- a/packages/docusaurus-mdx-loader/tsconfig.json +++ b/packages/docusaurus-mdx-loader/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-plugin-client-redirects/tsconfig.json b/packages/docusaurus-plugin-client-redirects/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/docusaurus-plugin-client-redirects/tsconfig.json +++ b/packages/docusaurus-plugin-client-redirects/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-content-blog/tsconfig.client.json b/packages/docusaurus-plugin-content-blog/tsconfig.client.json index 5d06aa818c..5e2b6e2452 100644 --- a/packages/docusaurus-plugin-content-blog/tsconfig.client.json +++ b/packages/docusaurus-plugin-content-blog/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/client", "src/*.d.ts"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus-plugin-content-blog/tsconfig.json b/packages/docusaurus-plugin-content-blog/tsconfig.json index 3936df64b7..fd1428b0b3 100644 --- a/packages/docusaurus-plugin-content-blog/tsconfig.json +++ b/packages/docusaurus-plugin-content-blog/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-content-docs/tsconfig.client.json b/packages/docusaurus-plugin-content-docs/tsconfig.client.json index 5d06aa818c..5e2b6e2452 100644 --- a/packages/docusaurus-plugin-content-docs/tsconfig.client.json +++ b/packages/docusaurus-plugin-content-docs/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 3936df64b7..fd1428b0b3 100644 --- a/packages/docusaurus-plugin-content-docs/tsconfig.json +++ b/packages/docusaurus-plugin-content-docs/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-content-pages/tsconfig.json b/packages/docusaurus-plugin-content-pages/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/docusaurus-plugin-content-pages/tsconfig.json +++ b/packages/docusaurus-plugin-content-pages/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-debug/tsconfig.client.json b/packages/docusaurus-plugin-debug/tsconfig.client.json index e69d347194..c411568a6d 100644 --- a/packages/docusaurus-plugin-debug/tsconfig.client.json +++ b/packages/docusaurus-plugin-debug/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 18b9536626..65bf6a5b9e 100644 --- a/packages/docusaurus-plugin-debug/tsconfig.json +++ b/packages/docusaurus-plugin-debug/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-google-analytics/tsconfig.client.json b/packages/docusaurus-plugin-google-analytics/tsconfig.client.json index 7cf373d92f..d9c0e68fff 100644 --- a/packages/docusaurus-plugin-google-analytics/tsconfig.client.json +++ b/packages/docusaurus-plugin-google-analytics/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 c7fda37eff..b3ccd5c069 100644 --- a/packages/docusaurus-plugin-google-analytics/tsconfig.json +++ b/packages/docusaurus-plugin-google-analytics/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-google-gtag/tsconfig.client.json b/packages/docusaurus-plugin-google-gtag/tsconfig.client.json index e31b80c88b..9d3fd42b75 100644 --- a/packages/docusaurus-plugin-google-gtag/tsconfig.client.json +++ b/packages/docusaurus-plugin-google-gtag/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/gtag.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 fe656511f3..d71de8f767 100644 --- a/packages/docusaurus-plugin-google-gtag/tsconfig.json +++ b/packages/docusaurus-plugin-google-gtag/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-google-tag-manager/tsconfig.client.json b/packages/docusaurus-plugin-google-tag-manager/tsconfig.client.json index 3480c8bca6..ba742c0016 100644 --- a/packages/docusaurus-plugin-google-tag-manager/tsconfig.client.json +++ b/packages/docusaurus-plugin-google-tag-manager/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/*.d.ts"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus-plugin-google-tag-manager/tsconfig.json b/packages/docusaurus-plugin-google-tag-manager/tsconfig.json index 1e49538f9e..b10e2ae302 100644 --- a/packages/docusaurus-plugin-google-tag-manager/tsconfig.json +++ b/packages/docusaurus-plugin-google-tag-manager/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-ideal-image/tsconfig.client.json b/packages/docusaurus-plugin-ideal-image/tsconfig.client.json index e69d347194..c411568a6d 100644 --- a/packages/docusaurus-plugin-ideal-image/tsconfig.client.json +++ b/packages/docusaurus-plugin-ideal-image/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 18b9536626..65bf6a5b9e 100644 --- a/packages/docusaurus-plugin-ideal-image/tsconfig.json +++ b/packages/docusaurus-plugin-ideal-image/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-pwa/tsconfig.client.json b/packages/docusaurus-plugin-pwa/tsconfig.client.json index 52fd7b2b33..c0825ea082 100644 --- a/packages/docusaurus-plugin-pwa/tsconfig.client.json +++ b/packages/docusaurus-plugin-pwa/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "rootDir": "src", "outDir": "lib", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext" + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": [ "src/theme/", diff --git a/packages/docusaurus-plugin-pwa/tsconfig.json b/packages/docusaurus-plugin-pwa/tsconfig.json index 0bef8e6016..555d8315d1 100644 --- a/packages/docusaurus-plugin-pwa/tsconfig.json +++ b/packages/docusaurus-plugin-pwa/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [ {"path": "./tsconfig.client.json"}, {"path": "./tsconfig.worker.json"} @@ -7,7 +7,7 @@ "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-pwa/tsconfig.worker.json b/packages/docusaurus-plugin-pwa/tsconfig.worker.json index 7e3209535a..6316e841c2 100644 --- a/packages/docusaurus-plugin-pwa/tsconfig.worker.json +++ b/packages/docusaurus-plugin-pwa/tsconfig.worker.json @@ -1,11 +1,11 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "composite": true, "incremental": true, "lib": ["webworker", "esnext"], - "tsBuildInfoFile": "./lib/.tsbuildinfo-worker", + "tsBuildInfoFile": "lib/.tsbuildinfo-worker", "rootDir": "src", "outDir": "lib", "moduleResolution": "bundler", diff --git a/packages/docusaurus-plugin-sitemap/tsconfig.json b/packages/docusaurus-plugin-sitemap/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/docusaurus-plugin-sitemap/tsconfig.json +++ b/packages/docusaurus-plugin-sitemap/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-plugin-vercel-analytics/tsconfig.client.json b/packages/docusaurus-plugin-vercel-analytics/tsconfig.client.json index e77a5fd904..09a0864ae1 100644 --- a/packages/docusaurus-plugin-vercel-analytics/tsconfig.client.json +++ b/packages/docusaurus-plugin-vercel-analytics/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/analytics.ts", "src/options.ts", "src/*.d.ts"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus-plugin-vercel-analytics/tsconfig.json b/packages/docusaurus-plugin-vercel-analytics/tsconfig.json index c7fda37eff..b3ccd5c069 100644 --- a/packages/docusaurus-plugin-vercel-analytics/tsconfig.json +++ b/packages/docusaurus-plugin-vercel-analytics/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-preset-classic/tsconfig.json b/packages/docusaurus-preset-classic/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/docusaurus-preset-classic/tsconfig.json +++ b/packages/docusaurus-preset-classic/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json b/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json index 69bd9341b4..6a904aac6f 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json +++ b/packages/docusaurus-remark-plugin-npm2yarn/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-theme-classic/tsconfig.client.json b/packages/docusaurus-theme-classic/tsconfig.client.json index babbfc92e1..c034d3826b 100644 --- a/packages/docusaurus-theme-classic/tsconfig.client.json +++ b/packages/docusaurus-theme-classic/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "rootDir": "src", "outDir": "lib", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext" + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": [ "src/nprogress.ts", diff --git a/packages/docusaurus-theme-classic/tsconfig.json b/packages/docusaurus-theme-classic/tsconfig.json index 8aa1157eef..1ede3dd6e1 100644 --- a/packages/docusaurus-theme-classic/tsconfig.json +++ b/packages/docusaurus-theme-classic/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-theme-common/tsconfig.json b/packages/docusaurus-theme-common/tsconfig.json index c3110df949..226848d2d6 100644 --- a/packages/docusaurus-theme-common/tsconfig.json +++ b/packages/docusaurus-theme-common/tsconfig.json @@ -1,16 +1,11 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", - "sourceMap": true, - "declarationMap": true, "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client", + "sourceMap": true, + "declarationMap": true }, "include": ["src"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus-theme-live-codeblock/tsconfig.client.json b/packages/docusaurus-theme-live-codeblock/tsconfig.client.json index 361e08ae7d..20d299c518 100644 --- a/packages/docusaurus-theme-live-codeblock/tsconfig.client.json +++ b/packages/docusaurus-theme-live-codeblock/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "rootDir": "src", "outDir": "lib", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext" + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 a6dc07deee..fecfd3133a 100644 --- a/packages/docusaurus-theme-live-codeblock/tsconfig.json +++ b/packages/docusaurus-theme-live-codeblock/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-theme-mermaid/tsconfig.client.json b/packages/docusaurus-theme-mermaid/tsconfig.client.json index a8a71b6cad..394b25d2a3 100644 --- a/packages/docusaurus-theme-mermaid/tsconfig.client.json +++ b/packages/docusaurus-theme-mermaid/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "rootDir": "src", "outDir": "lib", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext" + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/client", "src/theme", "src/*.d.ts"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus-theme-mermaid/tsconfig.json b/packages/docusaurus-theme-mermaid/tsconfig.json index 4eb745d80c..7ce7f61f55 100644 --- a/packages/docusaurus-theme-mermaid/tsconfig.json +++ b/packages/docusaurus-theme-mermaid/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-theme-search-algolia/tsconfig.client.json b/packages/docusaurus-theme-search-algolia/tsconfig.client.json index 46cf1129e2..2d3e8ea694 100644 --- a/packages/docusaurus-theme-search-algolia/tsconfig.client.json +++ b/packages/docusaurus-theme-search-algolia/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", "rootDir": "src", "outDir": "lib", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext" + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "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 4eb745d80c..7ce7f61f55 100644 --- a/packages/docusaurus-theme-search-algolia/tsconfig.json +++ b/packages/docusaurus-theme-search-algolia/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.client.json"}], "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/docusaurus-theme-translations/tsconfig.build.json b/packages/docusaurus-theme-translations/tsconfig.build.json index 912de0a933..377da210d5 100644 --- a/packages/docusaurus-theme-translations/tsconfig.build.json +++ b/packages/docusaurus-theme-translations/tsconfig.build.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "composite": true, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-theme-translations/tsconfig.json b/packages/docusaurus-theme-translations/tsconfig.json index 6ba7dee96b..c0dddebdf6 100644 --- a/packages/docusaurus-theme-translations/tsconfig.json +++ b/packages/docusaurus-theme-translations/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [{"path": "./tsconfig.build.json"}], "compilerOptions": { "noEmit": true, diff --git a/packages/docusaurus-utils-common/tsconfig.json b/packages/docusaurus-utils-common/tsconfig.json index 0e5365a3c1..6be28b4e8f 100644 --- a/packages/docusaurus-utils-common/tsconfig.json +++ b/packages/docusaurus-utils-common/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-utils-validation/tsconfig.json b/packages/docusaurus-utils-validation/tsconfig.json index 69bd9341b4..6a904aac6f 100644 --- a/packages/docusaurus-utils-validation/tsconfig.json +++ b/packages/docusaurus-utils-validation/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus-utils/tsconfig.json b/packages/docusaurus-utils/tsconfig.json index 69bd9341b4..6a904aac6f 100644 --- a/packages/docusaurus-utils/tsconfig.json +++ b/packages/docusaurus-utils/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "sourceMap": true, "declarationMap": true, "rootDir": "src", diff --git a/packages/docusaurus/tsconfig.client.json b/packages/docusaurus/tsconfig.client.json index 5d06aa818c..5e2b6e2452 100644 --- a/packages/docusaurus/tsconfig.client.json +++ b/packages/docusaurus/tsconfig.client.json @@ -1,15 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "noEmit": false, - "composite": true, - "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo-client", - "moduleResolution": "bundler", - "module": "esnext", - "target": "esnext", "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "tsBuildInfoFile": "lib/.tsbuildinfo-client" }, "include": ["src/client", "src/*.d.ts"], "exclude": ["**/__tests__/**"] diff --git a/packages/docusaurus/tsconfig.json b/packages/docusaurus/tsconfig.json index 80dfc91440..253a34db6c 100644 --- a/packages/docusaurus/tsconfig.json +++ b/packages/docusaurus/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "references": [ {"path": "./tsconfig.server.json"}, {"path": "./tsconfig.client.json"} diff --git a/packages/docusaurus/tsconfig.server.json b/packages/docusaurus/tsconfig.server.json index e26c376455..b55af5720a 100644 --- a/packages/docusaurus/tsconfig.server.json +++ b/packages/docusaurus/tsconfig.server.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "composite": true, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/eslint-plugin/tsconfig.json b/packages/eslint-plugin/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/eslint-plugin/tsconfig.json +++ b/packages/eslint-plugin/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/lqip-loader/tsconfig.json b/packages/lqip-loader/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/lqip-loader/tsconfig.json +++ b/packages/lqip-loader/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/packages/stylelint-copyright/tsconfig.json b/packages/stylelint-copyright/tsconfig.json index e16d5c2c5d..0f463da3d7 100644 --- a/packages/stylelint-copyright/tsconfig.json +++ b/packages/stylelint-copyright/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": false, "incremental": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", + "tsBuildInfoFile": "lib/.tsbuildinfo", "rootDir": "src", "outDir": "lib" }, diff --git a/tsconfig.base.client.json b/tsconfig.base.client.json new file mode 100644 index 0000000000..186c9e90df --- /dev/null +++ b/tsconfig.base.client.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "moduleResolution": "bundler", + "module": "esnext", + "target": "esnext" + } +} diff --git a/tsconfig.json b/tsconfig.base.json similarity index 100% rename from tsconfig.json rename to tsconfig.base.json