diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1d33754 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +name: CI + +on: + pull_request: + push: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: yarn + + - name: Install dependencies + run: yarn install --frozen-lockfile + + # docusaurus.config.ts sets onBrokenLinks: "throw", so this fails the + # job on any broken internal link. Without it that failure only shows + # up in Netlify after the merge has already landed. + # + # CONTEXT is unset here, so the build omits the analytics tag. The + # Algolia reindex is not run: it is a no-op outside a production + # deploy and CI has no crawler credentials. + - name: Build + run: yarn build diff --git a/.gitignore b/.gitignore index 5404223..124237e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ build # Local Netlify folder .netlify + +# macOS +.DS_Store diff --git a/config/api-sidebars.js b/config/api-sidebars.js deleted file mode 100644 index 54ba609..0000000 --- a/config/api-sidebars.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - { - type: 'category', - label: 'Tutorial', - items: ['hello'], - }, - ], - */ -}; - -module.exports = sidebars; diff --git a/config/redirects.config.js b/config/redirects.config.js deleted file mode 100644 index d203fd9..0000000 --- a/config/redirects.config.js +++ /dev/null @@ -1,219 +0,0 @@ -/** - * URL Redirects Configuration - * - * Handles redirects for documentation reorganization (v4.0.0 docs restructure) - * Preserves external links from Google, blogs, Stack Overflow, etc. - * - * Based on analytics showing: - * - Quick Start: 2,971 views - * - Installation: 1,580 views - * - API Reference: 1,700 views - * - Solitary Tests: 1,251 views - */ - -module.exports = { - redirects: [ - // ============================================ - // CRITICAL REDIRECTS (High Traffic Pages) - // ============================================ - - // Quick Start (2,971 views) - { - from: '/docs/overview/quickstart', - to: '/docs/get-started/quickstart', - }, - { - from: '/docs/learn/get-started/quickstart', - to: '/docs/get-started/quickstart', - }, - - // Installation (1,580 views) - { - from: '/docs/overview/installation', - to: '/docs/get-started/installation', - }, - { - from: '/docs/learn/get-started/installation', - to: '/docs/get-started/installation', - }, - - // API Reference (1,700 views) - { - from: '/docs/developer-guide/unit-tests/suites-api', - to: '/docs/api-reference/', - }, - { - from: '/docs/learn/unit-tests/suites-api', - to: '/docs/api-reference/', - }, - { - from: '/docs/api-reference/testbed-api', - to: '/docs/api-reference/', - }, - - // Solitary Tests (1,251 views) - { - from: '/docs/developer-guide/unit-tests/solitary', - to: '/docs/guides/solitary', - }, - { - from: '/docs/learn/unit-tests/solitary', - to: '/docs/guides/solitary', - }, - - // Sociable Tests (1,104 views) - { - from: '/docs/developer-guide/unit-tests/sociable', - to: '/docs/guides/sociable', - }, - { - from: '/docs/learn/unit-tests/sociable', - to: '/docs/guides/sociable', - }, - - // ============================================ - // HIGH PRIORITY REDIRECTS - // ============================================ - - // Test Doubles (651 views, 72.7s engagement) - { - from: '/docs/developer-guide/unit-tests/test-doubles', - to: '/docs/guides/test-doubles', - }, - { - from: '/docs/learn/unit-tests/test-doubles', - to: '/docs/guides/test-doubles', - }, - - // Fundamentals (1,389 views) - { - from: '/docs/developer-guide/unit-tests/fundamentals', - to: '/docs/guides/fundamentals', - }, - { - from: '/docs/learn/unit-tests/fundamentals', - to: '/docs/guides/fundamentals', - }, - - // Migrating from Automock (1,082 views) - { - from: '/docs/migrating-from-automock', - to: '/docs/migration-guides/from-automock', - }, - { - from: '/docs/resources/migrating-from-automock', - to: '/docs/migration-guides/from-automock', - }, - { - from: '/docs/overview/migrating-from-automock', - to: '/docs/migration-guides/from-automock', - }, - - // Overview section base (redirect to get-started) - { - from: '/docs/overview', - to: '/docs/get-started/', - }, - - // What is Suites (567 views) - redirect to get-started - { - from: '/docs/overview/what-is-suites', - to: '/docs/get-started/', - }, - - // Problems Solved (933 views) - consolidated into why-suites - { - from: '/docs/overview/problems-solved', - to: '/docs/get-started/why-suites', - }, - { - from: '/docs/resources/problems-solved', - to: '/docs/get-started/why-suites', - }, - - // Comparisons (new page, but redirect just in case) - { - from: '/docs/overview/comparisons', - to: '/docs/get-started/why-suites', - }, - - // Developer Guide Unit Tests - redirect to guides - { - from: '/docs/developer-guide/unit-tests', - to: '/docs/guides/', - }, - - // ============================================ - // ADDITIONAL REDIRECTS (From Netlify 502 logs) - // ============================================ - - // Docs base path - { - from: '/docs', - to: '/docs/get-started/', - }, - - // Introduction section (old structure) - { - from: '/docs/introduction/quick-example', - to: '/docs/get-started/quickstart', - }, - - // Overview motivation - { - from: '/docs/overview/motivation', - to: '/docs/get-started/why-suites', - }, - - // Overview dependency injection (including typo variant) - { - from: '/docs/overview/depdency-injection-and-automock', - to: '/docs/get-started/why-suites', - }, - { - from: '/docs/overview/dependency-injection-and-automock', - to: '/docs/get-started/why-suites', - }, - - // Core concepts section (removed) - { - from: '/docs/core-concepts/dependency-injection', - to: '/docs/get-started/why-suites', - }, - - // API Reference fail-fast (removed) - { - from: '/docs/api-reference/fail-fast', - to: '/docs/api-reference/', - }, - - // Category pages - { - from: '/docs/category/extras', - to: '/docs/guides/', - }, - - // Adapters section (restructured - adapters now bundled) - { - from: '/docs/adapters/inversify', - to: '/docs/get-started/', - }, - { - from: '/docs/adapters/identifiers', - to: '/docs/get-started/', - }, - { - from: '/docs/developer-guide/adapters/inversifyjs', - to: '/docs/get-started/', - }, - { - from: '/docs/developer-guide/adapters/identifiers', - to: '/docs/get-started/', - }, - { - from: '/docs/guides/adapters/inversifyjs', - to: '/docs/get-started/', - }, - - ], -}; diff --git a/docs/api-reference/unit-reference.md b/docs/api-reference/unit-reference.md index cf953e7..285cc56 100644 --- a/docs/api-reference/unit-reference.md +++ b/docs/api-reference/unit-reference.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 7 title: UnitReference description: Access mocked dependencies in your tests --- diff --git a/docs/get-started/installation.mdx b/docs/get-started/installation.mdx index 1b8d0b3..6ca9d2f 100644 --- a/docs/get-started/installation.mdx +++ b/docs/get-started/installation.mdx @@ -20,6 +20,12 @@ Get Suites up and running in your project. TypeScript classes (manually) - A testing library ([Jest](https://jestjs.io/), [Vitest](https://vitest.dev/), or [Sinon](https://sinonjs.org/)) +:::tip Coming from Automock? +`@automock/jest` and `@automock/sinon` are deprecated and replaced by Suites. The +[migration guide](/docs/migration-guides/from-automock/) covers the rename and the +API differences; most projects are a dependency swap and a find-and-replace. +::: + ## Installation Install the core package: @@ -30,49 +36,133 @@ npm install -D @suites/unit Install the adapters for your framework and testing library: - - - ```bash - # Install NestJS dependencies - npm install @nestjs/common @nestjs/core reflect-metadata - - # Install Suites core and adapters - npm install --save-dev @suites/unit @suites/di.nestjs @suites/doubles.jest - - # Install TypeScript and Jest - npm install --save-dev ts-jest @types/jest jest typescript - ``` + + + + + ```bash + # Install NestJS dependencies + npm install @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + npm install --save-dev @suites/unit @suites/di.nestjs @suites/doubles.jest + + # Install TypeScript and Jest + npm install --save-dev ts-jest @types/jest jest typescript + ``` + + + ```bash + # Install NestJS dependencies + pnpm add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + pnpm add -D @suites/unit @suites/di.nestjs @suites/doubles.jest + + # Install TypeScript and Jest + pnpm add -D ts-jest @types/jest jest typescript + ``` + + + ```bash + # Install NestJS dependencies + yarn add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + yarn add -D @suites/unit @suites/di.nestjs @suites/doubles.jest + + # Install TypeScript and Jest + yarn add -D ts-jest @types/jest jest typescript + ``` + + - - ```bash - # Install NestJS dependencies - pnpm add @nestjs/common @nestjs/core reflect-metadata - - # Install Suites core and adapters - pnpm add -D @suites/unit @suites/di.nestjs @suites/doubles.jest - - # Install TypeScript and Jest - pnpm add -D ts-jest @types/jest jest typescript - ``` + + + + ```bash + # Install NestJS dependencies + npm install @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + npm install --save-dev @suites/unit @suites/di.nestjs @suites/doubles.vitest + + # Install TypeScript and Vitest + npm install --save-dev vitest unplugin-swc @swc/core typescript + ``` + + + ```bash + # Install NestJS dependencies + pnpm add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + pnpm add -D @suites/unit @suites/di.nestjs @suites/doubles.vitest + + # Install TypeScript and Vitest + pnpm add -D vitest unplugin-swc @swc/core typescript + ``` + + + ```bash + # Install NestJS dependencies + yarn add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + yarn add -D @suites/unit @suites/di.nestjs @suites/doubles.vitest + + # Install TypeScript and Vitest + yarn add -D vitest unplugin-swc @swc/core typescript + ``` + + - - ```bash - # Install NestJS dependencies - yarn add @nestjs/common @nestjs/core reflect-metadata - - # Install Suites core and adapters - yarn add -D @suites/unit @suites/di.nestjs @suites/doubles.jest - - # Install TypeScript and Jest - yarn add -D ts-jest @types/jest jest typescript - ``` + + + + ```bash + # Install NestJS dependencies + npm install @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + npm install --save-dev @suites/unit @suites/di.nestjs @suites/doubles.sinon + + # Install TypeScript and Sinon + npm install --save-dev sinon @types/sinon typescript + ``` + + + ```bash + # Install NestJS dependencies + pnpm add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + pnpm add -D @suites/unit @suites/di.nestjs @suites/doubles.sinon + + # Install TypeScript and Sinon + pnpm add -D sinon @types/sinon typescript + ``` + + + ```bash + # Install NestJS dependencies + yarn add @nestjs/common @nestjs/core reflect-metadata + + # Install Suites core and adapters + yarn add -D @suites/unit @suites/di.nestjs @suites/doubles.sinon + + # Install TypeScript and Sinon + yarn add -D sinon @types/sinon typescript + ``` + + This installs three packages: - `@suites/unit` - Core TestBed API - `@suites/di.nestjs` - NestJS adapter for reading DI metadata -- `@suites/doubles.jest` - Jest integration for creating type-safe mocks +- `@suites/doubles.` - the adapter for the test runner selected above, which creates type-safe mocks **Suites will automatically detect the installed adapters and configure itself accordingly.** @@ -165,7 +255,7 @@ Some package managers may have limitations with dependency hoisting that can aff across workspaces. Refer to the package manager's documentation for specific guidance on dependency hoisting. ::: -## For Vitest Users +## Vitest: decorator metadata setup When integrating Suites with Vitest, additional configuration is required. Vitest typically uses [`esbuild`](https://esbuild.github.io/) for TypeScript interpretation, which does not support `emitDecoratorMetadata` - a feature extensively used by Suites for diff --git a/docs/get-started/why-suites.md b/docs/get-started/why-suites.md index a33e530..253bb26 100644 --- a/docs/get-started/why-suites.md +++ b/docs/get-started/why-suites.md @@ -224,6 +224,11 @@ and let teams change constructors or add dependencies without breaking tests. Suites works seamlessly with frameworks implementing IoC using the same clean API. +The same applies to test runners. Jest, Vitest and Sinon each have an adapter, and +the `TestBed` API is identical across all three, so the examples below and +everywhere else in these docs work whichever runner a project uses. Switching +runners means changing one dependency, not rewriting tests. + diff --git a/docs/guides/sociable.md b/docs/guides/sociable.md index ed7705c..29af047 100644 --- a/docs/guides/sociable.md +++ b/docs/guides/sociable.md @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem'; > **What this covers:** Testing real component (class) interactions while controlling external dependencies \ > **Time to read:** ~15 minutes \ -> **Prerequisites:** [Unit Testing Fundamentals](/docs/guides/fundamentals), [Solitary Unit Tests](./solitary), [Test Doubles](./test-doubles) \ +> **Prerequisites:** [Unit Testing Fundamentals](/docs/guides/fundamentals), [Solitary Unit Tests](/docs/guides/solitary/), [Test Doubles](/docs/guides/test-doubles/) \ > **Best for:** Verifying components (classes) work together correctly, catching integration bugs while maintaining test speed Sociable unit tests verify how components interact with their real dependencies while keeping external I/O operations under control. This approach identifies bugs in how business logic components work together - bugs that solitary tests miss. @@ -325,5 +325,5 @@ Sociable tests work alongside solitary tests to provide comprehensive coverage: After understanding sociable testing, explore these resources: -- **[Test Doubles](./test-doubles)**: Core concepts of mocking and stubbing +- **[Test Doubles](/docs/guides/test-doubles/)**: Core concepts of mocking and stubbing - **[Suites Examples Repository](https://github.com/suites-dev/examples)**: Working examples of sociable testing patterns diff --git a/docs/guides/solitary.md b/docs/guides/solitary.md index 7a7427c..91e3c4c 100644 --- a/docs/guides/solitary.md +++ b/docs/guides/solitary.md @@ -8,7 +8,7 @@ description: Testing in isolation with Suites > **What this covers:** Writing unit tests that isolate a single component (class) using automatic mocking \ > **Time to read:** ~8 minutes \ -> **Prerequisites:** [Unit Testing Fundamentals](/docs/guides/fundamentals), [Test Doubles](./test-doubles) \ +> **Prerequisites:** [Unit Testing Fundamentals](/docs/guides/fundamentals), [Test Doubles](/docs/guides/test-doubles/) \ > **Best for:** Testing component logic in complete isolation, controlling all inputs for predictable results Solitary unit tests evaluate a single unit of work in complete isolation from its external dependencies. These tests use diff --git a/docs/guides/test-doubles.md b/docs/guides/test-doubles.md index 9ead5e1..bef0b08 100644 --- a/docs/guides/test-doubles.md +++ b/docs/guides/test-doubles.md @@ -211,8 +211,8 @@ See [Sociable Unit Tests](/docs/guides/sociable) for more information. Learn more about using test doubles in practice: -- **[Solitary Unit Tests](./solitary)**: Test components in complete isolation using automatic mocking -- **[Sociable Unit Tests](./sociable)**: Test multiple components together with real implementations +- **[Solitary Unit Tests](/docs/guides/solitary/)**: Test components in complete isolation using automatic mocking +- **[Sociable Unit Tests](/docs/guides/sociable/)**: Test multiple components together with real implementations ## Additional Resources diff --git a/docusaurus.config.ts b/docusaurus.config.ts index fc1e736..869d4d4 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -2,12 +2,24 @@ import algoliaConfig from "./config/algolia-config"; import type { Config } from "@docusaurus/types"; import { draculaThemeConfig } from "./config/prisma-theme.config"; +// Netlify sets CONTEXT to "production" | "deploy-preview" | "branch-deploy". +// It is unset locally and in CI, so analytics never fires outside a real +// production deploy. SUITES_FORCE_GTAG is an escape hatch for reproducing a +// tagging bug locally without editing this file. +const isProductionDeploy = + process.env.CONTEXT === "production" || process.env.SUITES_FORCE_GTAG === "1"; + +console.log( + `[docusaurus] CONTEXT=${process.env.CONTEXT ?? "(unset)"} gtag=${isProductionDeploy ? "enabled" : "disabled"}`, +); + const config: Config = { title: "Suites Documentation", tagline: "A unit testing framework for TypeScript backends working with inversion of control and dependency injection", organizationName: "suites-dev", url: "https://suites.dev", baseUrl: "/", + trailingSlash: true, onBrokenLinks: "throw", onBrokenMarkdownLinks: "throw", favicon: "img/favicon.png", @@ -46,19 +58,23 @@ const config: Config = { customCss: require.resolve("./src/css/custom.css"), }, blog: false, - gtag: { - trackingID: "G-G7FJBNFPJJ", - anonymizeIP: true, + ...(isProductionDeploy + ? { + gtag: { + trackingID: "G-G7FJBNFPJJ", + anonymizeIP: true, + }, + } + : {}), + sitemap: { + changefreq: "weekly", + priority: 0.5, + filename: "sitemap.xml", + ignorePatterns: ["/404", "/404/", "/search", "/search/"], }, }, ], ], - plugins: [ - [ - "@docusaurus/plugin-client-redirects", - require("./config/redirects.config.js"), - ], - ], themeConfig: { metadata: [ { diff --git a/netlify.toml b/netlify.toml index 2bd9515..681f152 100644 --- a/netlify.toml +++ b/netlify.toml @@ -15,28 +15,36 @@ command = "yarn run build && yarn algolia:reindex" publish = "build" +# Pinned rather than left to the dashboard toggle, because file configuration +# overrides UI configuration. Pretty URLs serves the slash-terminated form, +# which is what `trailingSlash: true` in docusaurus.config.ts declares as +# canonical. The two settings must agree or every page redirects away from +# its own canonical URL. +[build.processing.html] +pretty_urls = true + # =========================================== # CRITICAL REDIRECTS (High Traffic Pages) # =========================================== [[redirects]] from = "/docs/overview/quickstart" -to = "/docs/get-started/quickstart" +to = "/docs/get-started/quickstart/" status = 301 [[redirects]] from = "/docs/learn/get-started/quickstart" -to = "/docs/get-started/quickstart" +to = "/docs/get-started/quickstart/" status = 301 [[redirects]] from = "/docs/overview/installation" -to = "/docs/get-started/installation" +to = "/docs/get-started/installation/" status = 301 [[redirects]] from = "/docs/learn/get-started/installation" -to = "/docs/get-started/installation" +to = "/docs/get-started/installation/" status = 301 [[redirects]] @@ -51,22 +59,22 @@ status = 301 [[redirects]] from = "/docs/learn/unit-tests/solitary" -to = "/docs/guides/solitary" +to = "/docs/guides/solitary/" status = 301 [[redirects]] from = "/docs/learn/unit-tests/sociable" -to = "/docs/guides/sociable" +to = "/docs/guides/sociable/" status = 301 [[redirects]] from = "/docs/learn/unit-tests/test-doubles" -to = "/docs/guides/test-doubles" +to = "/docs/guides/test-doubles/" status = 301 [[redirects]] from = "/docs/learn/unit-tests/fundamentals" -to = "/docs/guides/fundamentals" +to = "/docs/guides/fundamentals/" status = 301 # =========================================== @@ -75,22 +83,22 @@ status = 301 [[redirects]] from = "/docs/migrating-from-automock" -to = "/docs/migration-guides/from-automock" +to = "/docs/migration-guides/from-automock/" status = 301 [[redirects]] from = "/docs/resources/migrating-from-automock" -to = "/docs/migration-guides/from-automock" +to = "/docs/migration-guides/from-automock/" status = 301 [[redirects]] from = "/docs/overview/migrating-from-automock" -to = "/docs/migration-guides/from-automock" +to = "/docs/migration-guides/from-automock/" status = 301 [[redirects]] from = "/docs/getting-started/change-log" -to = "/docs/migration-guides/from-automock" +to = "/docs/migration-guides/from-automock/" status = 301 # =========================================== @@ -102,10 +110,6 @@ from = "/docs/overview" to = "/docs/get-started/" status = 301 -[[redirects]] -from = "/docs/overview/" -to = "/docs/get-started/" -status = 301 [[redirects]] from = "/docs/overview/what-is-suites" @@ -114,32 +118,32 @@ status = 301 [[redirects]] from = "/docs/overview/problems-solved" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] from = "/docs/resources/problems-solved" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] from = "/docs/overview/comparisons" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] from = "/docs/overview/motivation" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] from = "/docs/overview/depdency-injection-and-automock" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] from = "/docs/overview/dependency-injection-and-automock" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 # =========================================== @@ -153,22 +157,22 @@ status = 301 [[redirects]] from = "/docs/developer-guide/unit-tests/solitary*" -to = "/docs/guides/solitary" +to = "/docs/guides/solitary/" status = 301 [[redirects]] from = "/docs/developer-guide/unit-tests/sociable*" -to = "/docs/guides/sociable" +to = "/docs/guides/sociable/" status = 301 [[redirects]] from = "/docs/developer-guide/unit-tests/test-doubles*" -to = "/docs/guides/test-doubles" +to = "/docs/guides/test-doubles/" status = 301 [[redirects]] from = "/docs/developer-guide/unit-tests/fundamentals*" -to = "/docs/guides/fundamentals" +to = "/docs/guides/fundamentals/" status = 301 [[redirects]] @@ -218,19 +222,15 @@ from = "/docs" to = "/docs/get-started/" status = 301 -[[redirects]] -from = "/docs/" -to = "/docs/get-started/" -status = 301 [[redirects]] from = "/docs/introduction/quick-example" -to = "/docs/get-started/quickstart" +to = "/docs/get-started/quickstart/" status = 301 [[redirects]] from = "/docs/core-concepts/dependency-injection" -to = "/docs/get-started/why-suites" +to = "/docs/get-started/why-suites/" status = 301 [[redirects]] @@ -243,10 +243,6 @@ from = "/docs/extras/identical-injections" to = "/docs/guides/" status = 301 -[[redirects]] -from = "/docs/extras/identical-injections/" -to = "/docs/guides/" -status = 301 [[redirects]] from = "/docs/category/extras" @@ -258,17 +254,42 @@ from = "/docs/category/di-framework-adapters" to = "/docs/get-started/" status = 301 + [[redirects]] -from = "/docs/category/di-framework-adapters/" +from = "/docs/adapters/*" to = "/docs/get-started/" status = 301 [[redirects]] -from = "/docs/adapters/*" +from = "/docs/guides/adapters/inversifyjs" to = "/docs/get-started/" status = 301 +# =========================================== +# LEGACY PATHS OBSERVED 404ing AT THE EDGE +# =========================================== + [[redirects]] -from = "/docs/guides/adapters/inversifyjs" +from = "/docs/getting-started/examples" to = "/docs/get-started/" -status = 301 \ No newline at end of file +status = 301 + +[[redirects]] +from = "/docs/overview/examples" +to = "/docs/get-started/" +status = 301 + +[[redirects]] +from = "/docs/category/adapters" +to = "/docs/get-started/" +status = 301 + +[[redirects]] +from = "/docs/category/core-concepts" +to = "/docs/guides/" +status = 301 + +[[redirects]] +from = "/docs/category/api-reference" +to = "/docs/api-reference/" +status = 301 diff --git a/package.json b/package.json index f527ce4..e13f175 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "dependencies": { "@algolia/client-search": "^4.24.0", "@docusaurus/core": "^3.4.0", - "@docusaurus/plugin-client-redirects": "^3.4.0", "@docusaurus/plugin-google-gtag": "^3.4.0", "@docusaurus/plugin-sitemap": "^3.4.0", "@docusaurus/preset-classic": "^3.4.0", diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx index 5008a8e..6497274 100644 --- a/src/components/Header/index.tsx +++ b/src/components/Header/index.tsx @@ -55,7 +55,7 @@ export default function Header(): JSX.Element {