From 9e3f9a49a3e51e1e04daa0a2956783c1579a0985 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 17 Apr 2025 15:14:34 +0200 Subject: [PATCH 1/4] feat: redirect Corepack documentation page --- src/middleware/redirectionMiddleware.ts | 26 +++++++++++++++++++++++++ src/routes/index.ts | 6 ++++++ 2 files changed, 32 insertions(+) create mode 100644 src/middleware/redirectionMiddleware.ts diff --git a/src/middleware/redirectionMiddleware.ts b/src/middleware/redirectionMiddleware.ts new file mode 100644 index 0000000..83dde4a --- /dev/null +++ b/src/middleware/redirectionMiddleware.ts @@ -0,0 +1,26 @@ +import type { Middleware } from './middleware'; + +/** + * Subtitutes a string in a request's url to a different value and sends it + * back to the router to be handled again. + * + * This is useful for paths like /dist/latest/, where we look for `latest` and + * replace it with whatever the latest version is and send it back to be + * handled by the /dist route. + */ +export class RedirectionMiddleware implements Middleware { + targetURL: string; + + constructor(targetURL: string) { + this.targetURL = targetURL; + } + + async handle(): Promise { + return new Response(undefined, { + status: 308, + headers: { + Location: this.targetURL, + }, + }); + } +} diff --git a/src/routes/index.ts b/src/routes/index.ts index d6b196e..8d59062 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -5,6 +5,7 @@ import { NotFoundMiddleware } from '../middleware/notFoundMiddleware'; import { OptionsMiddleware } from '../middleware/optionsMiddleware'; import { OriginMiddleware } from '../middleware/originMiddleware'; import { R2Middleware } from '../middleware/r2Middleware'; +import { RedirectionMiddleware } from '../middleware/redirectionMiddleware'; import { SubtitutionMiddleware } from '../middleware/subtituteMiddleware'; import type { Router } from './router'; @@ -13,11 +14,16 @@ export function registerRoutes(router: Router): void { const cachedR2Middleware = cached(r2Middleware); const originMiddleware = new OriginMiddleware(); + const corepackRedirectMiddleware = new RedirectionMiddleware('https://github.com/nodejs/corepack'); + router.options('*', [new OptionsMiddleware()]); router.head('/metrics/?:filePath+', [r2Middleware, originMiddleware]); router.get('/metrics/?:filePath+', [cachedR2Middleware, originMiddleware]); + router.all('/api/corepack.html', [corepackRedirectMiddleware]); + router.all('/docs/latest/api/corepack.html', [corepackRedirectMiddleware]); + // Register routes for latest releases (e.g. `/dist/latest/`) for (const branch in latestVersions) { const latestVersion = latestVersions[branch as keyof typeof latestVersions]; From 46268967ec40290d1c17ae07d0bcac9dd82acad7 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 17 Apr 2025 15:27:45 +0200 Subject: [PATCH 2/4] Update src/middleware/redirectionMiddleware.ts Co-authored-by: Matt Cowley --- src/middleware/redirectionMiddleware.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/middleware/redirectionMiddleware.ts b/src/middleware/redirectionMiddleware.ts index 83dde4a..6548b5c 100644 --- a/src/middleware/redirectionMiddleware.ts +++ b/src/middleware/redirectionMiddleware.ts @@ -16,11 +16,6 @@ export class RedirectionMiddleware implements Middleware { } async handle(): Promise { - return new Response(undefined, { - status: 308, - headers: { - Location: this.targetURL, - }, - }); + return Response.redirect(this.targetURL, 308); } } From 78aca07e9718a78a27c30251fd32db849b44c9da Mon Sep 17 00:00:00 2001 From: "Claudio W." Date: Wed, 30 Apr 2025 11:59:26 +0200 Subject: [PATCH 3/4] Update src/routes/index.ts Co-authored-by: Matt Cowley --- src/routes/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/index.ts b/src/routes/index.ts index 8d59062..e374b9b 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -14,7 +14,7 @@ export function registerRoutes(router: Router): void { const cachedR2Middleware = cached(r2Middleware); const originMiddleware = new OriginMiddleware(); - const corepackRedirectMiddleware = new RedirectionMiddleware('https://github.com/nodejs/corepack'); + const corepackRedirectMiddleware = new RedirectionMiddleware('https://github.com/nodejs/corepack#readme'); router.options('*', [new OptionsMiddleware()]); From bd7ca6d1bf82381566e99c9aae8fb72a87de02bb Mon Sep 17 00:00:00 2001 From: "Claudio W." Date: Wed, 30 Apr 2025 12:00:05 +0200 Subject: [PATCH 4/4] Update redirectionMiddleware.ts --- src/middleware/redirectionMiddleware.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/middleware/redirectionMiddleware.ts b/src/middleware/redirectionMiddleware.ts index 6548b5c..9f6f497 100644 --- a/src/middleware/redirectionMiddleware.ts +++ b/src/middleware/redirectionMiddleware.ts @@ -1,12 +1,7 @@ import type { Middleware } from './middleware'; /** - * Subtitutes a string in a request's url to a different value and sends it - * back to the router to be handled again. - * - * This is useful for paths like /dist/latest/, where we look for `latest` and - * replace it with whatever the latest version is and send it back to be - * handled by the /dist route. + * Redirects a path to another URL */ export class RedirectionMiddleware implements Middleware { targetURL: string;