// Reduced from the personal site's redirect handler. No dependencies. // Save as redirect-repro.mjs and run: node redirect-repro.mjs import assert from 'node:assert/strict'; const redirects = [ { from: '/journal', to: '/writing', status: 301, preserveQuery: true, enabled: true }, { from: '/old', to: '/new', status: 302, preserveQuery: false, enabled: true }, { from: '/disabled', to: '/writing', status: 301, enabled: false }, ]; function getModeledRedirect(pathname, search = '') { const row = redirects.find(entry => entry.enabled && entry.from === pathname); return row ? { status: row.status, location: row.to + (row.preserveQuery ? search : '') } : null; } // Before: the table exists, but nothing connects it to an incoming request. function disconnected() { return new Response('Not found', { status: 404 }); } function connected(request) { const url = new URL(request.url); const row = getModeledRedirect(url.pathname, url.search); return row ? Response.redirect(new URL(row.location, url), row.status) : new Response('Not found', { status: 404 }); } const request = path => new Request('https://example.test' + path); assert.equal(disconnected(request('/journal')).status, 404); const result = connected(request('/journal?from=bookmark')); assert.equal(result.status, 301); assert.equal(result.headers.get('location'), 'https://example.test/writing?from=bookmark'); assert.equal(connected(request('/unknown')).status, 404); assert.equal(connected(request('/disabled')).status, 404); assert.equal(connected(request('/journal/child')).status, 404); assert.equal(connected(request('/old?discard=this')).headers.get('location'), 'https://example.test/new'); console.log('PASS: disconnected route, redirect status, query preservation, unknown and disabled paths.');