From 59debcb603672e5cd2c108c722b3316c91eb38ec Mon Sep 17 00:00:00 2001 From: zahidalidev Date: Tue, 31 Dec 2024 23:41:06 +0500 Subject: [PATCH 1/4] Added redirects middleware --- next.config.js | 60 +++++++++++++++++------------------ src/middleware.ts | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 30 deletions(-) create mode 100644 src/middleware.ts diff --git a/next.config.js b/next.config.js index 85bf27ef0..b521a8d58 100644 --- a/next.config.js +++ b/next.config.js @@ -14,36 +14,36 @@ const nextConfig = { // https://vercel.com/docs/projects/environment-variables/system-environment-variables // basePath: process.env.VERCEL_ENV === 'production' ? '/docs' : '', basePath: '/docs', - async redirects() { - return [ - ...updatedRedirectsData, - { - source: `/v/${config.DOCS_LATEST_VERSION}/:slug*`, - destination: `https://sourcegraph.com/docs/:slug*`, - permanent: false - }, - { - source: `/@${config.DOCS_LATEST_VERSION}/:slug*`, - destination: `https://sourcegraph.com/docs/:slug*`, - permanent: false - }, - { - source: '/v/:version(\\d+\\.\\d+)/:slug*', - destination: 'https://:version.sourcegraph.com/:slug*', - permanent: true - }, - { - source: '/@:version(\\d+\\.\\d+)/:slug*', - destination: 'https://:version.sourcegraph.com/:slug*', - permanent: true - }, - { - source: '/changelog.rss', - destination: '/technical-changelog.rss', - permanent: true - } - ]; - } + // async redirects() { + // return [ + // ...updatedRedirectsData, + // { + // source: `/v/${config.DOCS_LATEST_VERSION}/:slug*`, + // destination: `https://sourcegraph.com/docs/:slug*`, + // permanent: false + // }, + // { + // source: `/@${config.DOCS_LATEST_VERSION}/:slug*`, + // destination: `https://sourcegraph.com/docs/:slug*`, + // permanent: false + // }, + // { + // source: '/v/:version(\\d+\\.\\d+)/:slug*', + // destination: 'https://:version.sourcegraph.com/:slug*', + // permanent: true + // }, + // { + // source: '/@:version(\\d+\\.\\d+)/:slug*', + // destination: 'https://:version.sourcegraph.com/:slug*', + // permanent: true + // }, + // { + // source: '/changelog.rss', + // destination: '/technical-changelog.rss', + // permanent: true + // } + // ]; + // } }; module.exports = async () => { diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 000000000..70ed57c72 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,81 @@ +import { NextResponse } from 'next/server' +import type { NextRequest } from 'next/server' +import docsConfig from '../docs.config.js' +const { updatedRedirectsData } = require('./data/redirects.ts'); +function createRedirectUrl(request: NextRequest, destination: string, path: string): string { + // Handle absolute URLs + if (destination.startsWith('http')) { + // Handle dynamic slug replacements + if (destination.includes(':slug')) { + const slugMatch = path.match(/[^/]+$/) + const slug = slugMatch ? slugMatch[0] : '' + destination = destination.replace(':slug*', slug) + } + // Handle version replacements + if (destination.includes(':version')) { + const versionMatch = path.match(/\d+\.\d+/) + const version = versionMatch ? versionMatch[0] : '' + destination = destination.replace(':version', version) + } + return destination + } + // Handle relative paths + const basePath = '/docs' + return destination.startsWith('/') ? + `${request.nextUrl.origin}${basePath}${destination}` : + `${request.nextUrl.origin}${basePath}/${destination}` +} + +export function middleware(request: NextRequest) { + const path = request.nextUrl.pathname + const pathWithoutBase = path.replace('/docs', '') + // Handle base redirects from redirects.ts + const redirect = updatedRedirectsData.find((r: any) => r.source === pathWithoutBase) + if (redirect) { + return NextResponse.redirect(createRedirectUrl(request, redirect.destination, path)) + } + // Handle version without slug + const versionOnlyMatch = pathWithoutBase.match(/^\/v\/(\d+\.\d+)$/) + if (versionOnlyMatch) { + return NextResponse.redirect(`https://${versionOnlyMatch[1]}.sourcegraph.com/`) + } + // Handle version-specific redirects + if (pathWithoutBase.startsWith(`/v/${docsConfig.DOCS_LATEST_VERSION}/`)) { + return NextResponse.redirect(createRedirectUrl( + request, + `https://sourcegraph.com/docs/:slug*`, + pathWithoutBase + )) + } + if (pathWithoutBase.startsWith(`/@${docsConfig.DOCS_LATEST_VERSION}/`)) { + return NextResponse.redirect(createRedirectUrl( + request, + `https://sourcegraph.com/docs/:slug*`, + pathWithoutBase + )) + } + const versionMatch = pathWithoutBase.match(/^\/v\/(\d+\.\d+)\/(.*)/) + if (versionMatch) { + return NextResponse.redirect(createRedirectUrl( + request, + 'https://:version.sourcegraph.com/:slug*', + pathWithoutBase + )) + } + const atVersionMatch = pathWithoutBase.match(/^\/@(\d+\.\d+)\/(.*)/) + if (atVersionMatch) { + return NextResponse.redirect(createRedirectUrl( + request, + 'https://:version.sourcegraph.com/:slug*', + pathWithoutBase + )) + } + if (pathWithoutBase === '/changelog.rss') + return NextResponse.redirect(createRedirectUrl(request, '/technical-changelog.rss', path)) + return NextResponse.next() +} +export const config = { + matcher: [ + '/((?!api|_next/static|_next/image|assets|favicon.ico|sw.js).*)', + ], +} From 81d6659d1ff6b24c882860dbcc9ddabd4c452be9 Mon Sep 17 00:00:00 2001 From: zahidalidev Date: Tue, 31 Dec 2024 23:46:30 +0500 Subject: [PATCH 2/4] Refactoring --- src/middleware.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/middleware.ts b/src/middleware.ts index 70ed57c72..ea508acda 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,7 +1,9 @@ import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' import docsConfig from '../docs.config.js' + const { updatedRedirectsData } = require('./data/redirects.ts'); + function createRedirectUrl(request: NextRequest, destination: string, path: string): string { // Handle absolute URLs if (destination.startsWith('http')) { @@ -17,8 +19,10 @@ function createRedirectUrl(request: NextRequest, destination: string, path: stri const version = versionMatch ? versionMatch[0] : '' destination = destination.replace(':version', version) } + return destination } + // Handle relative paths const basePath = '/docs' return destination.startsWith('/') ? @@ -29,6 +33,7 @@ function createRedirectUrl(request: NextRequest, destination: string, path: stri export function middleware(request: NextRequest) { const path = request.nextUrl.pathname const pathWithoutBase = path.replace('/docs', '') + // Handle base redirects from redirects.ts const redirect = updatedRedirectsData.find((r: any) => r.source === pathWithoutBase) if (redirect) { @@ -72,8 +77,10 @@ export function middleware(request: NextRequest) { } if (pathWithoutBase === '/changelog.rss') return NextResponse.redirect(createRedirectUrl(request, '/technical-changelog.rss', path)) + return NextResponse.next() } + export const config = { matcher: [ '/((?!api|_next/static|_next/image|assets|favicon.ico|sw.js).*)', From 092f0130f7e2e83d9b51087a47b38306df2ecf5d Mon Sep 17 00:00:00 2001 From: Maedah Batool Date: Mon, 20 Jan 2025 21:37:07 +0500 Subject: [PATCH 3/4] Add redirect --- src/data/redirects.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/data/redirects.ts b/src/data/redirects.ts index c6e331297..428561990 100644 --- a/src/data/redirects.ts +++ b/src/data/redirects.ts @@ -6717,6 +6717,13 @@ const redirectsData = [ destination: "/code-search/code-navigation/inference_configuration", permanent: true }, + // Model Config docs + + { + source: "/cody/clients/model-configuration", + destination: "/cody/enterprise/model-configuration", + permanent: true + }, ]; From 9209f3f78a84a8fb48451a9e29541b45b7947e2a Mon Sep 17 00:00:00 2001 From: Maedah Batool Date: Mon, 20 Jan 2025 21:46:23 +0500 Subject: [PATCH 4/4] Add redirect for commands --- docs/cody/capabilities/{commands.mdx => prompts.mdx} | 0 src/data/navigation.ts | 2 +- src/data/redirects.ts | 9 ++++++++- 3 files changed, 9 insertions(+), 2 deletions(-) rename docs/cody/capabilities/{commands.mdx => prompts.mdx} (100%) diff --git a/docs/cody/capabilities/commands.mdx b/docs/cody/capabilities/prompts.mdx similarity index 100% rename from docs/cody/capabilities/commands.mdx rename to docs/cody/capabilities/prompts.mdx diff --git a/src/data/navigation.ts b/src/data/navigation.ts index fb8e6bd91..3f5e48333 100644 --- a/src/data/navigation.ts +++ b/src/data/navigation.ts @@ -55,7 +55,7 @@ export const navigation: NavigationItem[] = [ subsections: [ { title: "Chat", href: "/cody/capabilities/chat", }, { title: "Autocomplete", href: "/cody/capabilities/autocomplete", }, - { title: "Prompts", href: "/cody/capabilities/commands", }, + { title: "Prompts", href: "/cody/capabilities/prompts", }, { title: "OpenCtx", href: "/cody/capabilities/openctx", }, { title: "Debug Code", href: "/cody/capabilities/debug-code", }, { title: "Context Filters", href: "/cody/capabilities/ignore-context", }, diff --git a/src/data/redirects.ts b/src/data/redirects.ts index 428561990..eeddb73bf 100644 --- a/src/data/redirects.ts +++ b/src/data/redirects.ts @@ -6718,13 +6718,20 @@ const redirectsData = [ permanent: true }, // Model Config docs - { source: "/cody/clients/model-configuration", destination: "/cody/enterprise/model-configuration", permanent: true }, + //Commands redirects + { + source: "/cody/capabilities/commands", + destination: "/cody/capabilities/prompts", + permanent: true + }, + + ]; const updatedRedirectsData = redirectsData.map(redirect => {