diff --git a/Checks/PWR043/README.md b/Checks/PWR043/README.md index 5add2164..bb2b245f 100644 --- a/Checks/PWR043/README.md +++ b/Checks/PWR043/README.md @@ -176,7 +176,7 @@ end do * [PWR043 examples](https://github.com/codee-com/open-catalog/tree/main/Checks/PWR043/) -* [PWR010: Avoid column-major array access in C/C++](../PWR010/README.md) +* [PWR010: Avoid column-major array access in C/C++](../../Deprecated/PWR010/README.md) * [PWR039: Consider loop interchange to improve the locality of reference and enable vectorization](../PWR039/README.md) diff --git a/Checks/PWR062/README.md b/Checks/PWR062/README.md index 1f452011..b3c5c86a 100644 --- a/Checks/PWR062/README.md +++ b/Checks/PWR062/README.md @@ -181,7 +181,7 @@ end subroutine matmul * [PWR062 examples](https://github.com/codee-com/open-catalog/tree/main/Checks/PWR062/) -* [PWR010: Avoid column-major array access in C/C++](../PWR010/README.md) +* [PWR010: Avoid column-major array access in C/C++](../../Deprecated/PWR010/README.md) * [PWR039: Consider loop interchange to improve the locality of reference and enable vectorization](../PWR039/README.md) diff --git a/Checks/_category_.json b/Checks/_category_.json new file mode 100644 index 00000000..046edaa3 --- /dev/null +++ b/Checks/_category_.json @@ -0,0 +1,3 @@ +{ + "position": 2 +} diff --git a/Checks/PWR010/README.md b/Deprecated/PWR010/README.md similarity index 81% rename from Checks/PWR010/README.md rename to Deprecated/PWR010/README.md index c6892da8..52feef35 100644 --- a/Checks/PWR010/README.md +++ b/Deprecated/PWR010/README.md @@ -1,5 +1,14 @@ # PWR010: Avoid column-major array access in C/C++ +> [!WARNING] +> This check was deprecated in favor of [PWR039](../../Checks/PWR039/README.md) +> and [PWR040](../../Checks/PWR040/README.md). This is because PWR010 can apply +> to loops with multiple array accesses. When the stride is fixed, applying it +> may break the other accesses, creating a conflicting situation. In contrast, +> [PWR039](../../Checks/PWR039/README.md) and +> [PWR040](../../Checks/PWR040/README.md) only apply when all accesses are +> inefficient, which makes the check safe and actionable. + ### Issue In the C and C++ programming languages, matrices are stored in a @@ -55,7 +64,7 @@ for (int i = 0; i < n; ++i) { ### Related resources -* [PWR010 examples](https://github.com/codee-com/open-catalog/tree/main/Checks/PWR010/) +* [PWR010 examples](https://github.com/codee-com/open-catalog/tree/main/Deprecated/PWR010/) ### References diff --git a/Checks/PWR010/example.c b/Deprecated/PWR010/example.c similarity index 100% rename from Checks/PWR010/example.c rename to Deprecated/PWR010/example.c diff --git a/Checks/PWR033/README.md b/Deprecated/PWR033/README.md similarity index 90% rename from Checks/PWR033/README.md rename to Deprecated/PWR033/README.md index d51779ed..50d374e2 100644 --- a/Checks/PWR033/README.md +++ b/Deprecated/PWR033/README.md @@ -1,5 +1,12 @@ # PWR033: Move invariant conditional out of the loop to avoid redundant computations +> [!WARNING] +> This check was deprecated in favor of [PWR022](../../Checks/PWR022/README.md). +> This is because PWR033 largely overlaps with +> [PWR022](../../Checks/PWR022/README.md), but +> [PWR022](../../Checks/PWR022/README.md) provides clearer actionable guidance +> and better examples. + ### Issue [Loop-invariant conditional](../../Glossary/Loop-unswitching.md) can be moved out of @@ -103,7 +110,7 @@ end subroutine ### Related resources -* [PWR033 examples](https://github.com/codee-com/open-catalog/tree/main/Checks/PWR033/) +* [PWR033 examples](https://github.com/codee-com/open-catalog/tree/main/Deprecated/PWR033/) ### References diff --git a/Checks/PWR033/example.c b/Deprecated/PWR033/example.c similarity index 100% rename from Checks/PWR033/example.c rename to Deprecated/PWR033/example.c diff --git a/Checks/PWR033/example.f90 b/Deprecated/PWR033/example.f90 similarity index 100% rename from Checks/PWR033/example.f90 rename to Deprecated/PWR033/example.f90 diff --git a/Checks/RMK001/README.md b/Deprecated/RMK001/README.md similarity index 61% rename from Checks/RMK001/README.md rename to Deprecated/RMK001/README.md index f593b800..d34929fc 100644 --- a/Checks/RMK001/README.md +++ b/Deprecated/RMK001/README.md @@ -1,5 +1,14 @@ # RMK001: loop nesting that might benefit from hybrid parallelization using multithreading and SIMD +> [!WARNING] +> This check was deprecated in favor of [PWR050](../../Checks/PWR050/README.md), +> [PWR051](../../Checks/PWR051/README.md), +> [PWR052](../../Checks/PWR052/README.md), +> [PWR053](../../Checks/PWR053/README.md), and +> [PWR054](../../Checks/PWR054/README.md). This is because RMK001 combined +> multithreading and vectorization concerns into a single check. The highlighted +> checks split these cases into more focused and actionable rules. + ### Issue Use multi-threading and SIMD hybrid parallelization to maximize the parallel diff --git a/Checks/RMK002/README.md b/Deprecated/RMK002/README.md similarity index 70% rename from Checks/RMK002/README.md rename to Deprecated/RMK002/README.md index 74566e91..4e4d685f 100644 --- a/Checks/RMK002/README.md +++ b/Deprecated/RMK002/README.md @@ -1,5 +1,14 @@ # RMK002: Loop nesting that might benefit from hybrid parallelization using offloading and SIMD +> [!WARNING] +> This check was deprecated in favor of [PWR053](../../Checks/PWR053/README.md), +> [PWR054](../../Checks/PWR054/README.md), +> [PWR055](../../Checks/PWR055/README.md), +> [PWR056](../../Checks/PWR056/README.md), and +> [PWR057](../../Checks/PWR057/README.md). This is because RMK002 combined +> offloading and vectorization concerns into a single check. The highlighted +> checks split these cases into more focused and actionable rules. + ### Issue Use offloading to the GPU and SIMD hybrid parallelization to maximize the diff --git a/Checks/RMK003/README.md b/Deprecated/RMK003/README.md similarity index 92% rename from Checks/RMK003/README.md rename to Deprecated/RMK003/README.md index f4e1e665..0bebbc2d 100644 --- a/Checks/RMK003/README.md +++ b/Deprecated/RMK003/README.md @@ -1,5 +1,8 @@ # RMK003: potential temporary variable for the loop which might be privatizable, thus enabling the loop parallelization +> [!WARNING] +> This check was deprecated due to the lack of actionable guidance and examples. + ### Issue Loop is a potential parallelization opportunity if it can be confirmed that diff --git a/Checks/RMK007/README.md b/Deprecated/RMK007/README.md similarity index 52% rename from Checks/RMK007/README.md rename to Deprecated/RMK007/README.md index 276e8a7e..586df86c 100644 --- a/Checks/RMK007/README.md +++ b/Deprecated/RMK007/README.md @@ -1,5 +1,14 @@ # RMK007: Vectorization opportunity within a multithreaded region +> [!WARNING] +> This check was deprecated in favor of [PWR050](../../Checks/PWR050/README.md), +> [PWR051](../../Checks/PWR051/README.md), +> [PWR052](../../Checks/PWR052/README.md), +> [PWR053](../../Checks/PWR053/README.md), and +> [PWR054](../../Checks/PWR054/README.md). This is because RMK007 combined +> multithreading and vectorization concerns into a single check. The highlighted +> checks split these cases into more focused and actionable rules. + ### Issue There is a SIMD vectorization opportunity within a multithreaded region. diff --git a/Checks/RMK008/README.md b/Deprecated/RMK008/README.md similarity index 53% rename from Checks/RMK008/README.md rename to Deprecated/RMK008/README.md index 906a47da..0db6eda5 100644 --- a/Checks/RMK008/README.md +++ b/Deprecated/RMK008/README.md @@ -1,5 +1,14 @@ # RMK008: Vectorization opportunity within an offloaded region +> [!WARNING] +> This check was deprecated in favor of [PWR053](../../Checks/PWR053/README.md), +> [PWR054](../../Checks/PWR054/README.md), +> [PWR055](../../Checks/PWR055/README.md), +> [PWR056](../../Checks/PWR056/README.md), and +> [PWR057](../../Checks/PWR057/README.md). This is because RMK008 combined +> offloading and vectorization concerns into a single check. The highlighted +> checks split these cases into more focused and actionable rules. + ### Issue There is a SIMD vectorization opportunity within an offloaded region. diff --git a/Checks/RMK009/README.md b/Deprecated/RMK009/README.md similarity index 58% rename from Checks/RMK009/README.md rename to Deprecated/RMK009/README.md index 4fc5372f..cf64eade 100644 --- a/Checks/RMK009/README.md +++ b/Deprecated/RMK009/README.md @@ -1,3 +1,6 @@ # RMK009: Outline loop to increase compiler and tooling code coverage +> [!WARNING] +> This check was deprecated due to the lack of actionable guidance and examples. + We are working on this remark and it will be available soon. diff --git a/Deprecated/_category_.json b/Deprecated/_category_.json new file mode 100644 index 00000000..484e2553 --- /dev/null +++ b/Deprecated/_category_.json @@ -0,0 +1,3 @@ +{ + "position": 4 +} diff --git a/Glossary/_category_.json b/Glossary/_category_.json new file mode 100644 index 00000000..0c949e0f --- /dev/null +++ b/Glossary/_category_.json @@ -0,0 +1,3 @@ +{ + "position": 3 +} diff --git a/README.md b/README.md index 27ee794c..3f907713 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ designed to demonstrate: | [PWR007](Checks/PWR007/) | Disable the implicit declaration of variables and procedures | correctness, modernization, security | [CWE-628](https://cwe.mitre.org/data/definitions/628.html) | [6.17](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.18](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.19](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.21](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.54](https://j3-fortran.org/doc/year/23/23-241.pdf), [7.2](https://j3-fortran.org/doc/year/23/23-241.pdf) | [DCL07-C](https://wiki.sei.cmu.edu/confluence/display/c/DCL07-C.+Include+the+appropriate+type+information+in+function+declarators), [DCL31-C](https://wiki.sei.cmu.edu/confluence/display/c/DCL31-C.+Declare+identifiers+before+using+them), [EXP37-C](https://wiki.sei.cmu.edu/confluence/display/c/EXP37-C.+Call+functions+with+the+correct+number+and+type+of+arguments) | | | ✓ | | ✓[^1] | | [PWR008](Checks/PWR008/) | Declare the intent for each procedure argument | correctness, modernization, security | [CWE-374](https://cwe.mitre.org/data/definitions/374.html) | [6.32](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.65](https://j3-fortran.org/doc/year/23/23-241.pdf) | [DCL13-C](https://wiki.sei.cmu.edu/confluence/display/c/DCL13-C.+Declare+function+parameters+that+are+pointers+to+values+not+changed+by+the+function+as+const) | | | ✓ | | ✓[^1] | | [PWR009](Checks/PWR009/) | Use OpenMP teams to offload work to GPU | optimization | | | | | ✓ | ✓ | ✓ | | -| [PWR010](Checks/PWR010/) | Avoid column-major array access in C/C++ | optimization | | | | | ✓ | | ✓ | | | [PWR012](Checks/PWR012/) | Pass only required fields from derived type as arguments | modernization, optimization | | | | | ✓ | ✓ | ✓ | | | [PWR013](Checks/PWR013/) | Avoid copying unused variables to or from the GPU | optimization | | | | | ✓ | ✓ | ✓ | | | [PWR014](Checks/PWR014/) | Out-of-dimension-bounds matrix access | correctness, security | [CWE-125](https://cwe.mitre.org/data/definitions/125.html), [CWE-787](https://cwe.mitre.org/data/definitions/787.html) | [6.8](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.9](https://j3-fortran.org/doc/year/23/23-241.pdf), [6.10](https://j3-fortran.org/doc/year/23/23-241.pdf) | [ARR30-C](https://wiki.sei.cmu.edu/confluence/display/c/ARR30-C.+Do+not+form+or+use+out-of-bounds+pointers+or+array+subscripts) | | ✓ | | ✓ | | @@ -62,7 +61,6 @@ designed to demonstrate: | [PWR030](Checks/PWR030/) | Remove pointer assignment preventing performance optimization for perfectly nested loops | security, optimization | [CWE-468](https://cwe.mitre.org/data/definitions/468.html) | | [EXP08-C](https://wiki.sei.cmu.edu/confluence/display/c/EXP08-C.+Ensure+pointer+arithmetic+is+used+correctly) | | ✓ | ✓ | ✓ | | | [PWR031](Checks/PWR031/) | Replace pow by multiplication, division and/or square root | optimization | | | | | ✓ | ✓ | ✓ | | | [PWR032](Checks/PWR032/) | Avoid calls to mathematical functions with higher precision than required | optimization | | | | | ✓ | | ✓ | | -| [PWR033](Checks/PWR033/) | Move invariant conditional out of the loop to avoid redundant computations | optimization | | | | | ✓ | ✓ | ✓ | | | [PWR034](Checks/PWR034/) | Avoid strided array access to improve performance | optimization | | | | | ✓ | ✓ | ✓ | | | [PWR035](Checks/PWR035/) | Avoid non-consecutive array access to improve performance | optimization | | | | | ✓ | ✓ | ✓ | | | [PWR036](Checks/PWR036/) | Avoid indirect array access to improve performance | optimization | | | | | ✓ | ✓ | ✓ | | @@ -108,12 +106,6 @@ designed to demonstrate: | [PWD009](Checks/PWD009/) | Incorrect privatization in parallel region | correctness, security | [CWE-821](https://cwe.mitre.org/data/definitions/821.html) | | | | ✓ | ✓ | ✓ | | | [PWD010](Checks/PWD010/) | Incorrect sharing in parallel region | correctness, security | [CWE-366](https://cwe.mitre.org/data/definitions/366.html), [CWE-821](https://cwe.mitre.org/data/definitions/821.html) | [6.61](https://j3-fortran.org/doc/year/23/23-241.pdf) | [CON43-C](https://wiki.sei.cmu.edu/confluence/display/c/CON43-C.+Do+not+allow+data+races+in+multithreaded+code) | | ✓ | ✓ | ✓ | | | [PWD011](Checks/PWD011/) | Missing OpenMP lastprivate clause | correctness, security | [CWE-821](https://cwe.mitre.org/data/definitions/821.html) | | | | ✓ | ✓ | ✓ | | -| [RMK001](Checks/RMK001/) | Loop nesting that might benefit from hybrid parallelization using multithreading and SIMD | optimization | | | | | ✓ | ✓ | ✓ | ✓[^1] | -| [RMK002](Checks/RMK002/) | Loop nesting that might benefit from hybrid parallelization using offloading and SIMD | optimization | | | | | ✓ | ✓ | ✓ | | -| [RMK003](Checks/RMK003/) | Potentially privatizable temporary variable | optimization | | | | | ✓ | | ✓ | | -| [RMK007](Checks/RMK007/) | Vectorization opportunity within a multithreaded region | optimization | | | | | ✓ | ✓ | ✓ | ✓[^1] | -| [RMK008](Checks/RMK008/) | Vectorization opportunity within an offloaded region | optimization | | | | | ✓ | ✓ | ✓ | | -| [RMK009](Checks/RMK009/) | Outline loop to increase compiler and tooling code coverage | optimization | | | | | ✓ | | ✓ | | | [RMK010](Checks/RMK010/) | Strided memory accesses in the loop body may prevent vectorization | optimization | | | | | ✓ | ✓ | ✓ | | | [RMK012](Checks/RMK012/) | Conditional execution in the loop body may prevent vectorization | optimization | | | | | ✓ | ✓ | ✓ | | | [RMK013](Checks/RMK013/) | Low trip count unknown at compile time may prevent vectorization of the loop | optimization | | | | | ✓ | ✓ | ✓ | | diff --git a/docusaurus.config.ts b/docusaurus.config.ts index e8fdcd3f..1d9f4308 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -39,6 +39,7 @@ const config: Config = { include: [ 'README.md', 'Checks/**/*.md', + 'Deprecated/**/*.md', 'Glossary/**/*.md', // Standalone pages are stored in `static/pages/**` instead of // `src/pages/**` to prevent conflicts between the `mdx-loader` of @@ -156,7 +157,48 @@ const config: Config = { }, } satisfies Preset.ThemeConfig, - plugins: [require.resolve('docusaurus-lunr-search')], + plugins: [ + require.resolve('docusaurus-lunr-search'), + [ + '@docusaurus/plugin-client-redirects', + { + redirects: [ + { + to: '/Deprecated/PWR010', + from: '/Checks/PWR010', + }, + { + to: '/Deprecated/PWR033', + from: '/Checks/PWR033', + }, + { + to: '/Deprecated/RMK001', + from: '/Checks/RMK001', + }, + { + to: '/Deprecated/RMK002', + from: '/Checks/RMK002', + }, + { + to: '/Deprecated/RMK003', + from: '/Checks/RMK003', + }, + { + to: '/Deprecated/RMK007', + from: '/Checks/RMK007', + }, + { + to: '/Deprecated/RMK008', + from: '/Checks/RMK008', + }, + { + to: '/Deprecated/RMK009', + from: '/Checks/RMK009', + }, + ], + }, + ], + ], // Executed on client-side (web browser) clientModules: [require.resolve('./src/scripts/custom.js')], diff --git a/package-lock.json b/package-lock.json index f0f1caea..687acf20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@docusaurus/core": "^3.9.2", + "@docusaurus/plugin-client-redirects": "^3.9.2", "@docusaurus/preset-classic": "^3.9.2", "@iconify/react": "^5.0.2", "@mdx-js/react": "^3.0.0", @@ -240,7 +241,6 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.42.0.tgz", "integrity": "sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/client-common": "5.42.0", "@algolia/requester-browser-xhr": "5.42.0", @@ -366,7 +366,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2156,7 +2155,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2179,7 +2177,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2289,7 +2286,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2711,7 +2707,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3417,7 +3412,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/babel": "3.9.2", "@docusaurus/bundler": "3.9.2", @@ -3560,6 +3554,30 @@ "react-dom": "*" } }, + "node_modules/@docusaurus/plugin-client-redirects": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.9.2.tgz", + "integrity": "sha512-lUgMArI9vyOYMzLRBUILcg9vcPTCyyI2aiuXq/4npcMVqOr6GfmwtmBYWSbNMlIUM0147smm4WhpXD0KFboffw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@docusaurus/plugin-content-blog": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz", @@ -3599,7 +3617,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -4323,7 +4340,6 @@ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -4642,7 +4658,6 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5020,7 +5035,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -5377,7 +5391,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5463,7 +5476,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5509,7 +5521,6 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.42.0.tgz", "integrity": "sha512-X5+PtWc9EJIPafT/cj8ZG+6IU3cjRRnlHGtqMHK/9gsiupQbAyYlH5y7qt/FtsAhfX5AICHffZy69ZAsVrxWkQ==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/abtesting": "1.8.0", "@algolia/client-abtesting": "5.42.0", @@ -5872,23 +5883,23 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -5913,12 +5924,41 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -5998,7 +6038,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -6970,7 +7009,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8363,21 +8401,6 @@ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8544,7 +8567,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -10844,9 +10866,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, "node_modules/lodash.debounce": { @@ -13598,7 +13620,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14114,7 +14135,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -15018,7 +15038,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15693,12 +15712,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -15758,15 +15777,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -15781,6 +15800,35 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -15816,7 +15864,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -15844,7 +15891,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -15907,7 +15953,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" }, @@ -15936,7 +15981,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -17806,8 +17850,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/type-fest": { "version": "2.19.0", @@ -17870,7 +17913,6 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18248,7 +18290,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -18452,7 +18493,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -19077,7 +19117,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index c001015c..22ba39d6 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@docusaurus/core": "^3.9.2", + "@docusaurus/plugin-client-redirects": "^3.9.2", "@docusaurus/preset-classic": "^3.9.2", "@iconify/react": "^5.0.2", "@mdx-js/react": "^3.0.0",