diff --git a/src/middleware/redirectionMiddleware.ts b/src/middleware/redirectionMiddleware.ts new file mode 100644 index 0000000..9f6f497 --- /dev/null +++ b/src/middleware/redirectionMiddleware.ts @@ -0,0 +1,16 @@ +import type { Middleware } from './middleware'; + +/** + * Redirects a path to another URL + */ +export class RedirectionMiddleware implements Middleware { + targetURL: string; + + constructor(targetURL: string) { + this.targetURL = targetURL; + } + + async handle(): Promise { + return Response.redirect(this.targetURL, 308); + } +} diff --git a/src/routes/index.ts b/src/routes/index.ts index d6b196e..e374b9b 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#readme'); + 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];