diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ca7504d02..4cedd135e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -138,15 +138,9 @@ jobs: cache: 'pnpm' cache-dependency-path: website/pnpm-lock.yaml - run: pnpm i - - name: Set environment variable for Node v16 above - if: ${{ matrix.node-version > '16' }} - run: echo "NODE_OPTIONS=--openssl-legacy-provider" >> $GITHUB_ENV - name: Build docs - run: npm run build + run: pnpm run build working-directory: website - - name: Unset environment variable for Node v16 above - if: ${{ matrix.node-version > '16' }} - run: echo "NODE_OPTIONS=''" >> $GITHUB_ENV all: runs-on: ubuntu-latest diff --git a/website/_redirects b/website/_redirects new file mode 100644 index 000000000..beb18527a --- /dev/null +++ b/website/_redirects @@ -0,0 +1,5 @@ +# https://docs.netlify.com/routing/redirects/redirect-options/#custom-404-page-handling +# redirect all nonexistent paths in /en/ to /en/404 +/en/* /en/404 404 +# redirect all en browser language request to homepage to /en/ +/ /en 302 Language=en diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 2865decd1..a410595e0 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -32,6 +32,36 @@ const config = { locales: ['zh', 'en'], }, + plugins: [ + [ + '@dipakparmar/docusaurus-plugin-umami', + /** @type {import('@dipakparmar/docusaurus-plugin-umami').Options} */ + ({ + websiteID: 'be1761be-7547-49d5-91b8-5c97c8f7cec7', // Required + analyticsDomain: 'umami.diygod.dev', // Required + }), + ], + [ + '@docusaurus/plugin-client-redirects', + /** @type {import('@docusaurus/plugin-client-redirects').Options} */ + ({ + fromExtensions: ['html'], + redirects: [ + { from: '/joinus', to: '/joinus/quick-start' }, + { from: '/joinus/script-standard', to: '/joinus/advanced/script-standard' }, + { from: '/joinus/pub-date', to: '/joinus/advanced/pub-date' }, + { from: '/joinus/use-cache', to: '/joinus/advanced/use-cache' }, + ...Object.values(require('./sidebars').guideSidebar) + .find((s) => s.label === '路由') + .items.map((category) => ({ + from: `/${category.split('/')[1]}`, + to: `/routes/${category.split('/')[1]}`, + })), + ], + }), + ], + ], + presets: [ [ '@docusaurus/preset-classic', @@ -44,6 +74,8 @@ const config = { // Please change this to your repo. // Remove this to remove the "edit this page" links. editUrl: 'https://github.com/DIYgod/RSSHub/blob/master/website/', + showLastUpdateAuthor: true, + showLastUpdateTime: true, }, blog: false, theme: { @@ -65,17 +97,6 @@ const config = { }, }, - plugins: [ - [ - '@dipakparmar/docusaurus-plugin-umami', - /** @type {import('@dipakparmar/docusaurus-plugin-umami').Options} */ - ({ - websiteID: 'be1761be-7547-49d5-91b8-5c97c8f7cec7', // Required - analyticsDomain: 'umami.diygod.dev', // Required - }), - ], - ], - themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ diff --git a/website/package.json b/website/package.json index b693d22a8..f2d87033d 100644 --- a/website/package.json +++ b/website/package.json @@ -5,6 +5,7 @@ "scripts": { "docusaurus": "docusaurus", "start": "docusaurus start", + "start:en": "docusaurus start --locale en", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", @@ -17,6 +18,7 @@ "dependencies": { "@dipakparmar/docusaurus-plugin-umami": "^2.1.0", "@docusaurus/core": "2.4.1", + "@docusaurus/plugin-client-redirects": "2.4.1", "@docusaurus/preset-classic": "2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", @@ -29,7 +31,12 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "2.4.1", + "@docusaurus/types": "^2.4.1", "@tsconfig/docusaurus": "^2.0.0", + "@types/markdown-it": "^13.0.0", + "@types/mdx-js__react": "^1.5.5", + "@types/react": "^17.0.64", + "@types/react-dom": "^17.0.20", "typescript": "^4.7.4" }, "browserslist": { diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml index 07b84236c..77b19d956 100644 --- a/website/pnpm-lock.yaml +++ b/website/pnpm-lock.yaml @@ -11,9 +11,12 @@ dependencies: '@docusaurus/core': specifier: 2.4.1 version: 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) + '@docusaurus/plugin-client-redirects': + specifier: 2.4.1 + version: 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/preset-classic': specifier: 2.4.1 - version: 2.4.1(@algolia/client-search@4.19.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4) + version: 2.4.1(@algolia/client-search@4.19.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4) '@mdx-js/react': specifier: ^1.6.22 version: 1.6.22(react@17.0.2) @@ -43,9 +46,24 @@ devDependencies: '@docusaurus/module-type-aliases': specifier: 2.4.1 version: 2.4.1(react-dom@17.0.2)(react@17.0.2) + '@docusaurus/types': + specifier: ^2.4.1 + version: 2.4.1(react-dom@17.0.2)(react@17.0.2) '@tsconfig/docusaurus': specifier: ^2.0.0 version: 2.0.0 + '@types/markdown-it': + specifier: ^13.0.0 + version: 13.0.0 + '@types/mdx-js__react': + specifier: ^1.5.5 + version: 1.5.5 + '@types/react': + specifier: ^17.0.64 + version: 17.0.64 + '@types/react-dom': + specifier: ^17.0.20 + version: 17.0.20 typescript: specifier: ^4.7.4 version: 4.7.4 @@ -1617,7 +1635,7 @@ packages: resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} dev: false - /@docsearch/react@3.5.1(@algolia/client-search@4.19.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0): + /@docsearch/react@3.5.1(@algolia/client-search@4.19.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0): resolution: {integrity: sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -1634,6 +1652,7 @@ packages: '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.7.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) '@docsearch/css': 3.5.1 + '@types/react': 17.0.64 algoliasearch: 4.19.1 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -1817,6 +1836,43 @@ packages: - uglify-js - webpack-cli + /@docusaurus/plugin-client-redirects@2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4): + resolution: {integrity: sha512-tp0j16gaLIJ4p+IR0P6KDOFsTOGGMY54MNPnmM61Vaqqt5omLqsuKUO8UlCGU1oW/4EIQOhXYy99XYY5MjE+7A==} + engines: {node: '>=16.14'} + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + dependencies: + '@docusaurus/core': 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) + '@docusaurus/logger': 2.4.1 + '@docusaurus/utils': 2.4.1(@docusaurus/types@2.4.1) + '@docusaurus/utils-common': 2.4.1(@docusaurus/types@2.4.1) + '@docusaurus/utils-validation': 2.4.1(@docusaurus/types@2.4.1) + eta: 2.2.0 + fs-extra: 10.1.0 + lodash: 4.17.21 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + tslib: 2.6.1 + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/plugin-content-blog@2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4): resolution: {integrity: sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==} engines: {node: '>=16.14'} @@ -1938,7 +1994,7 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-debug@2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4): + /@docusaurus/plugin-debug@2.4.1(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4): resolution: {integrity: sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==} engines: {node: '>=16.14'} peerDependencies: @@ -1951,7 +2007,7 @@ packages: fs-extra: 10.1.0 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - react-json-view: 1.21.3(react-dom@17.0.2)(react@17.0.2) + react-json-view: 1.21.3(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2) tslib: 2.6.1 transitivePeerDependencies: - '@parcel/css' @@ -2102,7 +2158,7 @@ packages: - webpack-cli dev: false - /@docusaurus/preset-classic@2.4.1(@algolia/client-search@4.19.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4): + /@docusaurus/preset-classic@2.4.1(@algolia/client-search@4.19.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4): resolution: {integrity: sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==} engines: {node: '>=16.14'} peerDependencies: @@ -2113,14 +2169,14 @@ packages: '@docusaurus/plugin-content-blog': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-content-docs': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-content-pages': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) - '@docusaurus/plugin-debug': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) + '@docusaurus/plugin-debug': 2.4.1(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-google-analytics': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-google-gtag': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-google-tag-manager': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/plugin-sitemap': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/theme-classic': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/theme-common': 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) - '@docusaurus/theme-search-algolia': 2.4.1(@algolia/client-search@4.19.1)(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4) + '@docusaurus/theme-search-algolia': 2.4.1(@algolia/client-search@4.19.1)(@docusaurus/types@2.4.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4) '@docusaurus/types': 2.4.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -2251,14 +2307,14 @@ packages: - webpack-cli dev: false - /@docusaurus/theme-search-algolia@2.4.1(@algolia/client-search@4.19.1)(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4): + /@docusaurus/theme-search-algolia@2.4.1(@algolia/client-search@4.19.1)(@docusaurus/types@2.4.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0)(typescript@4.7.4): resolution: {integrity: sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==} engines: {node: '>=16.14'} peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 dependencies: - '@docsearch/react': 3.5.1(@algolia/client-search@4.19.1)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0) + '@docsearch/react': 3.5.1(@algolia/client-search@4.19.1)(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.7.0) '@docusaurus/core': 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) '@docusaurus/logger': 2.4.1 '@docusaurus/plugin-content-docs': 2.4.1(react-dom@17.0.2)(react@17.0.2)(typescript@4.7.4) @@ -2823,12 +2879,33 @@ packages: '@types/node': 20.5.0 dev: false + /@types/linkify-it@3.0.2: + resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + dev: true + + /@types/markdown-it@13.0.0: + resolution: {integrity: sha512-mPTaUl5glYfzdJFeCsvhXQwZKdyszNAZcMm5ZTP5SfpTu+vIbog7J3z8Fa4x/Fzv5TB4R6OA/pHBYIYmkYOWGQ==} + dependencies: + '@types/linkify-it': 3.0.2 + '@types/mdurl': 1.0.2 + dev: true + /@types/mdast@3.0.12: resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} dependencies: '@types/unist': 2.0.7 dev: false + /@types/mdurl@1.0.2: + resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} + dev: true + + /@types/mdx-js__react@1.5.5: + resolution: {integrity: sha512-k8pnaP6JXVlQh18HgL5X6sYFNC/qZnzO7R2+HsmwrwUd+JnnsU0d9lyyT0RQrHg1anxDU36S98TI/fsGtmYqqg==} + dependencies: + '@types/react': 17.0.64 + dev: true + /@types/mime@1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: false @@ -2863,6 +2940,12 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: false + /@types/react-dom@17.0.20: + resolution: {integrity: sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==} + dependencies: + '@types/react': 17.0.64 + dev: true + /@types/react-router-config@5.0.7: resolution: {integrity: sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==} dependencies: @@ -6918,7 +7001,7 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-json-view@1.21.3(react-dom@17.0.2)(react@17.0.2): + /react-json-view@1.21.3(@types/react@17.0.64)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} peerDependencies: react: ^17.0.0 || ^16.3.0 || ^15.5.4 @@ -6929,7 +7012,7 @@ packages: react-base16-styling: 0.6.0 react-dom: 17.0.2(react@17.0.2) react-lifecycles-compat: 3.0.4 - react-textarea-autosize: 8.5.2(react@17.0.2) + react-textarea-autosize: 8.5.2(@types/react@17.0.64)(react@17.0.2) transitivePeerDependencies: - '@types/react' - encoding @@ -6994,7 +7077,7 @@ packages: tiny-warning: 1.0.3 dev: false - /react-textarea-autosize@8.5.2(react@17.0.2): + /react-textarea-autosize@8.5.2(@types/react@17.0.64)(react@17.0.2): resolution: {integrity: sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==} engines: {node: '>=10'} peerDependencies: @@ -7003,7 +7086,7 @@ packages: '@babel/runtime': 7.22.10 react: 17.0.2 use-composed-ref: 1.3.0(react@17.0.2) - use-latest: 1.2.1(react@17.0.2) + use-latest: 1.2.1(@types/react@17.0.64)(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false @@ -8098,7 +8181,7 @@ packages: react: 17.0.2 dev: false - /use-isomorphic-layout-effect@1.1.2(react@17.0.2): + /use-isomorphic-layout-effect@1.1.2(@types/react@17.0.64)(react@17.0.2): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -8107,10 +8190,11 @@ packages: '@types/react': optional: true dependencies: + '@types/react': 17.0.64 react: 17.0.2 dev: false - /use-latest@1.2.1(react@17.0.2): + /use-latest@1.2.1(@types/react@17.0.64)(react@17.0.2): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -8119,8 +8203,9 @@ packages: '@types/react': optional: true dependencies: + '@types/react': 17.0.64 react: 17.0.2 - use-isomorphic-layout-effect: 1.1.2(react@17.0.2) + use-isomorphic-layout-effect: 1.1.2(@types/react@17.0.64)(react@17.0.2) dev: false /use-sync-external-store@1.2.0(react@17.0.2):