Skip to content

Commit e8fb50f

Browse files
committed
Minor improvements to viewer-request function
1 parent c1e1065 commit e8fb50f

File tree

1 file changed

+66
-17
lines changed

1 file changed

+66
-17
lines changed

aws/viewer-request/index.js

+66-17
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
const validSections = ['surrealdb', 'surrealml', 'surrealist', 'surrealism', 'surrealql', 'sdk', 'tutorials', 'cloud'];
1+
const validSections = [
2+
'surrealdb',
3+
'surrealml',
4+
'surrealist',
5+
'surrealism',
6+
'surrealql',
7+
'sdk',
8+
'tutorials',
9+
'cloud',
10+
];
211

312
const versions = [
413
'nightly',
@@ -9,27 +18,53 @@ const versions = [
918
'2.x'
1019
];
1120

12-
const prefixedRedirects = {
21+
const prefixes = {
1322
'/docs/integration/libraries/': '/docs/sdk/',
1423
'/docs/surrealdb/integration/sdks/': '/docs/sdk/',
1524
}
1625

1726
const redirects = {
27+
// Redirect old sdk libraries page
1828
'/docs/integration/libraries': '/docs/surrealdb/integration/sdks',
29+
// Redirect old websocket protocol page
1930
'/docs/integration/websocket/text': '/docs/surrealdb/integration/rpc',
2031
'/docs/integration/websocket/binary': '/docs/surrealdb/integration/rpc',
2132
'/docs/surrealdb/integration/websocket': '/docs/surrealdb/integration/rpc',
2233
'/docs/surrealql/statements/define/login': '/docs/surrealdb/surrealql/statements/define/user',
34+
// Redirect Node.js docs to JavaScript docs
2335
'/docs/integration/libraries/nodejs': '/docs/sdk/javascript',
2436
'/docs/surrealdb/integration/sdks/nodejs': '/docs/sdk/javascript',
37+
// Redirect Deno docs to JavaScript docs
2538
'/docs/integration/libraries/deno': '/docs/sdk/javascript',
2639
'/docs/surrealdb/integration/sdks/deno': '/docs/sdk/javascript',
40+
// Redirect old JavaScript SDK paths
41+
'/docs/sdk/javascript/setup': '/docs/sdk/javascript/core',
2742
'/docs/sdk/javascript/core/initialization': '/docs/sdk/javascript/core/create-a-new-connection',
2843
'/docs/sdk/javascript/core/authentication': '/docs/sdk/javascript/core/handling-authentication',
2944
'/docs/sdk/javascript/core/data-querying': '/docs/sdk/javascript/core/data-maniplulation',
3045
'/docs/sdk/javascript/core/methods/authenticate': '/docs/sdk/javascript/methods/authenticate',
3146
'/docs/sdk/javascript/core/methods/invalidate': '/docs/sdk/javascript/methods/invalidate',
32-
'/docs/sdk/javascript/setup': '/docs/sdk/javascript/core',
47+
// Redirect old database function paths
48+
'/docs/surrealdb/surrealql/functions/array': '/docs/surrealdb/surrealql/functions/database/array',
49+
'/docs/surrealdb/surrealql/functions/count': '/docs/surrealdb/surrealql/functions/database/count',
50+
'/docs/surrealdb/surrealql/functions/crypto': '/docs/surrealdb/surrealql/functions/database/crypto',
51+
'/docs/surrealdb/surrealql/functions/duration': '/docs/surrealdb/surrealql/functions/database/duration',
52+
'/docs/surrealdb/surrealql/functions/encoding': '/docs/surrealdb/surrealql/functions/database/encoding',
53+
'/docs/surrealdb/surrealql/functions/geo': '/docs/surrealdb/surrealql/functions/database/geo',
54+
'/docs/surrealdb/surrealql/functions/http': '/docs/surrealdb/surrealql/functions/database/http',
55+
'/docs/surrealdb/surrealql/functions/math': '/docs/surrealdb/surrealql/functions/database/math',
56+
'/docs/surrealdb/surrealql/functions/meta': '/docs/surrealdb/surrealql/functions/database/meta',
57+
'/docs/surrealdb/surrealql/functions/object': '/docs/surrealdb/surrealql/functions/database/object',
58+
'/docs/surrealdb/surrealql/functions/parse': '/docs/surrealdb/surrealql/functions/database/parse',
59+
'/docs/surrealdb/surrealql/functions/rand': '/docs/surrealdb/surrealql/functions/database/rand',
60+
'/docs/surrealdb/surrealql/functions/search': '/docs/surrealdb/surrealql/functions/database/search',
61+
'/docs/surrealdb/surrealql/functions/session': '/docs/surrealdb/surrealql/functions/database/session',
62+
'/docs/surrealdb/surrealql/functions/sleep': '/docs/surrealdb/surrealql/functions/database/sleep',
63+
'/docs/surrealdb/surrealql/functions/string': '/docs/surrealdb/surrealql/functions/database/string',
64+
'/docs/surrealdb/surrealql/functions/time': '/docs/surrealdb/surrealql/functions/database/time',
65+
'/docs/surrealdb/surrealql/functions/type': '/docs/surrealdb/surrealql/functions/database/type',
66+
'/docs/surrealdb/surrealql/functions/vector': '/docs/surrealdb/surrealql/functions/database/vector',
67+
// Redirect old directory structure
3368
'/docs/intro': '/docs/surrealdb',
3469
'/docs/surrealdb/intro': '/docs/surrealdb',
3570
'/docs/cli/overview': '/docs/surrealdb/cli',
@@ -68,12 +103,10 @@ const redirects = {
68103
'/docs/surrealdb/surrealql/statements/define/overview': '/docs/surrealql/statements/define',
69104
'/docs/surrealql/statements/remove/overview': '/docs/surrealql/statements/remove',
70105
'/docs/surrealdb/surrealql/statements/remove/overview': '/docs/surrealql/statements/remove',
71-
'/docs/surrealdb/installation/upgrading/beta': '/docs/installation/upgrading/migrating-data-to-2x'
106+
'/docs/surrealdb/installation/upgrading/beta': '/docs/installation/upgrading/migrating-data-to-2x',
72107
};
73108

74-
function redirect(input) {
75-
const path = input !== '/docs/' && input.endsWith('/') ? input.slice(0, -1) : input;
76-
109+
function redirect(path) {
77110
return {
78111
statusCode: 301,
79112
statusDescription: 'Moved Permanently',
@@ -85,46 +118,62 @@ function redirect(input) {
85118
}
86119

87120
function handler(event) {
121+
88122
const request = event.request;
89123
const host = request.headers.host.value;
90124
const path = request.uri.toLowerCase();
91125

126+
// Only use the base domain, not subdomains
92127
if (host !== 'surrealdb.com') return redirect(path);
128+
129+
// Base path always needs to have a trailing slash
93130
if (path === '/docs') return redirect('/docs/');
131+
132+
// Display the content for the documentation path
94133
if (path === '/docs/') {
95134
request.uri += 'index.html';
96135
return request;
97136
}
98137

99-
if (/^\/docs\/((_astro\/|~partytown\/)|llms\.txt$)/.test(path)) return request;
138+
// Display the LLM text document without redirecting
139+
if (path === '/docs/llms.txt') return request;
140+
141+
// Display documentation assets without redirecting
142+
if (path.startsWith('/docs/_astro/')) return request;
100143

144+
// Redirect any paths which have trailing slashes
145+
if (path.endsWith('/')) return redirect(path.slice(0, -1));
146+
147+
// Ensure request is normalized and lowercase
148+
if (path !== request.uri) return redirect(path);
149+
150+
// Redirect simple paths which don't need matching
101151
if (redirects[path]) return redirect(redirects[path]);
102152

153+
// Redirect old versioned documentation paths
103154
const versionMatch = path.match(/^\/docs\/(?:surrealdb\/)?([^\/]+)(\/.*)?$/);
104155
if (versions.includes(versionMatch[1])) {
105156
return redirect(`/docs/surrealdb${versionMatch[2] || ""}`);
106157
}
107158

108-
const entries = Object.keys(prefixedRedirects);
109-
for (let i = 0; i < entries.length; i++) {
110-
const prefix = entries[i];
111-
const target = prefixedRedirects[prefix];
112-
159+
// Redirect prefixed paths to new locations
160+
for (const prefix in prefixes) {
161+
const target = prefixes[prefix];
113162
if (path.startsWith(prefix)) {
114163
return redirect(`${target}${path.slice(prefix.length)}`);
115164
}
116165
}
117-
118-
if (request.uri.endsWith('/')) return redirect(path.slice(0, -1));
119-
if (path !== request.uri) return redirect(path);
120166

167+
// Ensure all docs sections are valid
121168
if (path.startsWith('/docs/')) {
122169
const section = path.split('/')[2];
123-
if (!validSections.includes(section) && path !== '/docs/llms.txt') {
170+
if (!validSections.includes(section)) {
124171
return redirect(`/docs/surrealdb/${path.slice(6)}`);
125172
}
126173
}
127174

128175
request.uri += '/index.html';
176+
129177
return request;
178+
130179
}

0 commit comments

Comments
 (0)