Skip to content

Commit 62233d9

Browse files
committed
minify logic
1 parent 46c55d5 commit 62233d9

File tree

1 file changed

+97
-236
lines changed

1 file changed

+97
-236
lines changed

aws/viewer-request/index.js

+97-236
Original file line numberDiff line numberDiff line change
@@ -1,263 +1,124 @@
1-
function redirect(location) {
1+
function redirect(path) {
22
return {
33
statusCode: 301,
44
statusDescription: 'Moved Permanently',
55
headers: {
6-
'cache-control': {
7-
value: 'public, max-age=86400',
8-
},
9-
location: {
10-
value: location,
11-
},
12-
},
6+
'cache-control': { value: 'public, max-age=86400' },
7+
location: { value: `https://surrealdb.com${path}` }
8+
}
139
};
1410
}
1511

1612
function handler(event) {
17-
1813
const request = event.request;
1914
const host = request.headers.host.value;
20-
let path = request.uri.toLowerCase();
21-
22-
// Only use the base domain, not subdomains
23-
if (host !== 'surrealdb.com') {
24-
return redirect(`https://surrealdb.com${path}`);
25-
}
15+
const path = request.uri.toLowerCase();
2616

27-
// Docusaurus base path always has a trailing slash
28-
if (path === '/docs') {
29-
return redirect('https://surrealdb.com/docs/');
30-
}
31-
32-
// Display the content for the documentation path
17+
if (host !== 'surrealdb.com') return redirect(path);
18+
if (path === '/docs') return redirect('/docs/');
3319
if (path === '/docs/') {
34-
request.uri = request.uri.concat('index.html');
20+
request.uri += 'index.html';
3521
return request;
3622
}
3723

38-
// Display any documentation assets and image files
39-
if (path.startsWith('/docs/_astro/') || path.startsWith('/docs/~partytown/') || path === '/docs/llms.txt') {
40-
return request;
41-
}
24+
if (/^\/docs\/(_astro\/|~partytown\/)|\/docs\/llms\.txt$/.test(path)) return request;
25+
if (request.uri.endsWith('/')) return redirect(path.slice(0, -1));
26+
if (path !== request.uri) return redirect(path);
4227

43-
// Redirect any paths which have trailing slashes
44-
if (request.uri.endsWith('/')) {
45-
return redirect(`https://surrealdb.com${path.slice(0, -1)}`);
46-
}
28+
const redirects = {
29+
'/docs/integration/libraries': '/docs/surrealdb/integration/sdks',
30+
'/docs/integration/websocket/text': '/docs/surrealdb/integration/rpc',
31+
'/docs/integration/websocket/binary': '/docs/surrealdb/integration/rpc',
32+
'/docs/surrealdb/integration/websocket': '/docs/surrealdb/integration/rpc',
33+
'/docs/surrealql/statements/define/login': '/docs/surrealdb/surrealql/statements/define/user',
34+
'/docs/integration/libraries/nodejs': '/docs/sdk/javascript',
35+
'/docs/surrealdb/integration/sdks/nodejs': '/docs/sdk/javascript',
36+
'/docs/integration/libraries/deno': '/docs/sdk/javascript',
37+
'/docs/surrealdb/integration/sdks/deno': '/docs/sdk/javascript',
38+
'/docs/sdk/javascript/core/initialization': '/docs/sdk/javascript/core/create-a-new-connection',
39+
'/docs/sdk/javascript/core/authentication': '/docs/sdk/javascript/core/handling-authentication',
40+
'/docs/sdk/javascript/core/data-querying': '/docs/sdk/javascript/core/data-maniplulation',
41+
'/docs/sdk/javascript/core/methods/authenticate': '/docs/sdk/javascript/methods/authenticate',
42+
'/docs/sdk/javascript/core/methods/invalidate': '/docs/sdk/javascript/methods/invalidate',
43+
'/docs/sdk/javascript/setup': '/docs/sdk/javascript/core',
44+
'/docs/intro': '/docs/surrealdb',
45+
'/docs/surrealdb/intro': '/docs/surrealdb',
46+
'/docs/cli/overview': '/docs/surrealdb/cli',
47+
'/docs/surrealdb/cli/overview': '/docs/surrealdb/cli',
48+
'/docs/deployment/overview': '/docs/surrealdb/deployment',
49+
'/docs/surrealdb/deployment/overview': '/docs/surrealdb/deployment',
50+
'/docs/embedding/overview': '/docs/surrealdb/embedding',
51+
'/docs/surrealdb/embedding/overview': '/docs/surrealdb/embedding',
52+
'/docs/faqs/overview': '/docs/surrealdb/faqs',
53+
'/docs/surrealdb/faqs/overview': '/docs/surrealdb/faqs',
54+
'/docs/how-to/overview': '/docs/tutorials',
55+
'/docs/surrealdb/how-to/overview': '/docs/tutorials',
56+
'/docs/tutorials/overview': '/docs/tutorials',
57+
'/docs/surrealdb/tutorials/overview': '/docs/tutorials',
58+
'/docs/surrealdb/tutorials': '/docs/tutorials',
59+
'/docs/installation/overview': '/docs/surrealdb/installation',
60+
'/docs/surrealdb/installation/overview': '/docs/surrealdb/installation',
61+
'/docs/integration/overview': '/docs/surrealdb/integration',
62+
'/docs/surrealdb/integration/overview': '/docs/surrealdb/integration',
63+
'/docs/integration/sdks/overview': '/docs/surrealdb/integration/sdks',
64+
'/docs/surrealdb/integration/sdks/overview': '/docs/surrealdb/integration/sdks',
65+
'/docs/introduction/overview': '/docs/surrealdb/introduction',
66+
'/docs/surrealdb/introduction/overview': '/docs/surrealdb/introduction',
67+
'/docs/surrealql/overview': '/docs/surrealdb/surrealql',
68+
'/docs/surrealdb/surrealql/overview': '/docs/surrealdb/surrealql',
69+
'/docs/surrealql/datamodel/overview': '/docs/surrealdb/surrealql/datamodel',
70+
'/docs/surrealdb/surrealql/datamodel/overview': '/docs/surrealdb/surrealql/datamodel',
71+
'/docs/surrealql/functions/overview': '/docs/surrealdb/surrealql/functions',
72+
'/docs/surrealdb/surrealql/functions/overview': '/docs/surrealdb/surrealql/functions',
73+
'/docs/surrealql/functions/script/overview': '/docs/surrealdb/surrealql/functions/script',
74+
'/docs/surrealdb/surrealql/functions/script/overview': '/docs/surrealdb/surrealql/functions/script',
75+
'/docs/surrealql/statements/overview': '/docs/surrealdb/surrealql/statements',
76+
'/docs/surrealdb/surrealql/statements/overview': '/docs/surrealdb/surrealql/statements',
77+
'/docs/surrealdb/surrealql': '/docs/surrealql',
78+
'/docs/surrealql/statements/define/overview': '/docs/surrealdb/surrealql/statements/define',
79+
'/docs/surrealdb/surrealql/statements/define/overview': '/docs/surrealdb/surrealql/statements/define',
80+
'/docs/surrealql/statements/remove/overview': '/docs/surrealdb/surrealql/statements/remove',
81+
'/docs/surrealdb/surrealql/statements/remove/overview': '/docs/surrealdb/surrealql/statements/remove',
82+
'/docs/surrealdb/installation/upgrading/beta': '/docs/surrealdb/installation/upgrading/migrating-data-to-2x'
83+
};
4784

48-
// Redirect any capitalised paths to lowercase
49-
if (path !== request.uri) {
50-
return redirect(`https://surrealdb.com${path}`);
51-
}
85+
if (redirects[path]) return redirect(redirects[path]);
86+
87+
const versionPrefixes = [
88+
'/docs/nightly/',
89+
'/docs/surrealdb/nightly/',
90+
'/docs/1.0.x/', '/docs/1.0.0/',
91+
'/docs/1.1.x/', '/docs/1.1.0/',
92+
'/docs/1.2.x/', '/docs/1.2.0/',
93+
'/docs/1.3.x/', '/docs/1.3.0/',
94+
'/docs/surrealdb/2.x/',
95+
'/docs/surrealdb/1.0.x/', '/docs/surrealdb/1.0.0/',
96+
'/docs/surrealdb/1.1.x/', '/docs/surrealdb/1.1.0/',
97+
'/docs/surrealdb/1.2.x/', '/docs/surrealdb/1.2.0/',
98+
'/docs/surrealdb/1.3.x/', '/docs/surrealdb/1.3.0/'
99+
];
52100

53-
if (path.endsWith('/')) {
54-
path = path.slice(0, -1);
101+
for (const prefix of versionPrefixes) {
102+
if (path.startsWith(prefix)) {
103+
return redirect(`/docs/surrealdb/${path.slice(prefix.length)}`);
104+
}
55105
}
56106

57-
switch (path) {
58-
// Redirect old sdk libraries page
59-
case '/docs/integration/libraries':
60-
return redirect('https://surrealdb.com/docs/surrealdb/integration/sdks');
61-
// Redirect old websocket protocol page
62-
case '/docs/integration/websocket/text':
63-
case '/docs/integration/websocket/binary':
64-
case '/docs/surrealdb/integration/websocket':
65-
return redirect('https://surrealdb.com/docs/surrealdb/integration/rpc');
66-
// Redirect old DEFINE LOGIN statement page
67-
case '/docs/surrealql/statements/define/login':
68-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/statements/define/user');
69-
// Redirect NodeJS docs to JavaScript docs
70-
case '/docs/integration/libraries/nodejs':
71-
case '/docs/surrealdb/integration/sdks/nodejs':
72-
return redirect('https://surrealdb.com/docs/sdk/javascript');
73-
// Redirect Deno docs to JavaScript docs
74-
case '/docs/integration/libraries/deno':
75-
case '/docs/surrealdb/integration/sdks/deno':
76-
return redirect('https://surrealdb.com/docs/sdk/javascript');
77-
// Redirect broken JS SDK doc urls
78-
case '/docs/sdk/javascript/core/initialization':
79-
return redirect('/docs/sdk/javascript/core/create-a-new-connection');
80-
case '/docs/sdk/javascript/core/authentication':
81-
return redirect('/docs/sdk/javascript/core/handling-authentication');
82-
case '/docs/sdk/javascript/core/data-querying':
83-
return redirect('/docs/sdk/javascript/core/data-maniplulation');
84-
case '/docs/sdk/javascript/core/methods/authenticate':
85-
return redirect('/docs/sdk/javascript/methods/authenticate');
86-
case '/docs/sdk/javascript/core/methods/invalidate':
87-
return redirect('/docs/sdk/javascript/methods/invalidate');
88-
case '/docs/sdk/javascript/setup':
89-
return redirect('/docs/sdk/javascript/core');
90-
// Redirect old SurrealQL functions pages
91-
case '/docs/surrealdb/surrealql/functions/array':
92-
case '/docs/surrealdb/surrealql/functions/count':
93-
case '/docs/surrealdb/surrealql/functions/crypto':
94-
case '/docs/surrealdb/surrealql/functions/duration':
95-
case '/docs/surrealdb/surrealql/functions/encoding':
96-
case '/docs/surrealdb/surrealql/functions/geo':
97-
case '/docs/surrealdb/surrealql/functions/http':
98-
case '/docs/surrealdb/surrealql/functions/math':
99-
case '/docs/surrealdb/surrealql/functions/meta':
100-
case '/docs/surrealdb/surrealql/functions/object':
101-
case '/docs/surrealdb/surrealql/functions/parse':
102-
case '/docs/surrealdb/surrealql/functions/rand':
103-
case '/docs/surrealdb/surrealql/functions/search':
104-
case '/docs/surrealdb/surrealql/functions/session':
105-
case '/docs/surrealdb/surrealql/functions/sleep':
106-
case '/docs/surrealdb/surrealql/functions/string':
107-
case '/docs/surrealdb/surrealql/functions/time':
108-
case '/docs/surrealdb/surrealql/functions/type':
109-
case '/docs/surrealdb/surrealql/functions/vector':
110-
return redirect(`https://surrealdb.com/docs/surrealdb/surrealql/functions/database/${path.slice(36)}`);
111-
// Redirect old directory structure
112-
case '/docs/intro':
113-
case '/docs/surrealdb/intro':
114-
return redirect('https://surrealdb.com/docs/surrealdb');
115-
case '/docs/cli/overview':
116-
case '/docs/surrealdb/cli/overview':
117-
return redirect('https://surrealdb.com/docs/surrealdb/cli');
118-
case '/docs/deployment/overview':
119-
case '/docs/surrealdb/deployment/overview':
120-
return redirect('https://surrealdb.com/docs/surrealdb/deployment');
121-
case '/docs/embedding/overview':
122-
case '/docs/surrealdb/embedding/overview':
123-
return redirect('https://surrealdb.com/docs/surrealdb/embedding');
124-
case '/docs/faqs/overview':
125-
case '/docs/surrealdb/faqs/overview':
126-
return redirect('https://surrealdb.com/docs/surrealdb/faqs');
127-
case '/docs/how-to/overview':
128-
case '/docs/surrealdb/how-to/overview':
129-
return redirect('https://surrealdb.com/docs/tutorials');
130-
case '/docs/tutorials/overview':
131-
case '/docs/surrealdb/tutorials/overview':
132-
return redirect('https://surrealdb.com/docs/tutorials');
133-
case '/docs/surrealdb/tutorials':
134-
return redirect('https://surrealdb.com/docs/tutorials');
135-
case '/docs/installation/overview':
136-
case '/docs/surrealdb/installation/overview':
137-
return redirect('https://surrealdb.com/docs/surrealdb/installation');
138-
case '/docs/integration/overview':
139-
case '/docs/surrealdb/integration/overview':
140-
return redirect('https://surrealdb.com/docs/surrealdb/integration');
141-
case '/docs/integration/sdks/overview':
142-
case '/docs/surrealdb/integration/sdks/overview':
143-
return redirect('https://surrealdb.com/docs/surrealdb/integration/sdks');
144-
case '/docs/introduction/overview':
145-
case '/docs/surrealdb/introduction/overview':
146-
return redirect('https://surrealdb.com/docs/surrealdb/introduction');
147-
case '/docs/surrealql/overview':
148-
case '/docs/surrealdb/surrealql/overview':
149-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql');
150-
case '/docs/surrealql/datamodel/overview':
151-
case '/docs/surrealdb/surrealql/datamodel/overview':
152-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/datamodel');
153-
case '/docs/surrealql/functions/overview':
154-
case '/docs/surrealdb/surrealql/functions/overview':
155-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/functions');
156-
case '/docs/surrealql/functions/script/overview':
157-
case '/docs/surrealdb/surrealql/functions/script/overview':
158-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/functions/script');
159-
case '/docs/surrealql/statements/overview':
160-
case '/docs/surrealdb/surrealql/statements/overview':
161-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/statements');
162-
case '/docs/surrealdb/surrealql':
163-
return redirect('https://surrealdb.com/docs/surrealql');
164-
case '/docs/surrealql/statements/define/overview':
165-
case '/docs/surrealdb/surrealql/statements/define/overview':
166-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/statements/define');
167-
case '/docs/surrealql/statements/remove/overview':
168-
case '/docs/surrealdb/surrealql/statements/remove/overview':
169-
return redirect('https://surrealdb.com/docs/surrealdb/surrealql/statements/remove');
170-
case '/docs/surrealdb/installation/upgrading/beta':
171-
return redirect('/docs/surrealdb/installation/upgrading/migrating-data-to-2x');
172-
case '/docs/1.0.x':
173-
case '/docs/1.0.0':
174-
case '/docs/1.1.x':
175-
case '/docs/1.1.0':
176-
case '/docs/1.2.x':
177-
case '/docs/1.2.0':
178-
case '/docs/1.3.x':
179-
case '/docs/1.3.0':
180-
case '/docs/surrealdb/2.x':
181-
case '/docs/surrealdb/1.0.x':
182-
case '/docs/surrealdb/1.0.0':
183-
case '/docs/surrealdb/1.1.x':
184-
case '/docs/surrealdb/1.1.0':
185-
case '/docs/surrealdb/1.2.x':
186-
case '/docs/surrealdb/1.2.0':
187-
case '/docs/surrealdb/1.3.x':
188-
case '/docs/surrealdb/1.3.0':
189-
return redirect('https://surrealdb.com/docs/surrealdb');
107+
if (path.startsWith('/docs/integration/libraries/')) {
108+
return redirect(`/docs/sdk/${path.slice(28)}`);
109+
}
110+
if (path.startsWith('/docs/surrealdb/integration/sdks/')) {
111+
return redirect(`/docs/sdk/${path.slice(33)}`);
190112
}
191113

192-
switch (true) {
193-
// Redirect nightly pages to default
194-
case path.startsWith('/docs/nightly/'):
195-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(14)}`);
196-
// Redirect nightly pages to default
197-
case path.startsWith('/docs/surrealdb/nightly/'):
198-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(24)}`);
199-
// Redirect versioned pages to default
200-
case path.startsWith('/docs/1.0.x/'):
201-
case path.startsWith('/docs/1.0.0/'):
202-
case path.startsWith('/docs/1.1.x/'):
203-
case path.startsWith('/docs/1.1.0/'):
204-
case path.startsWith('/docs/1.2.x/'):
205-
case path.startsWith('/docs/1.2.0/'):
206-
case path.startsWith('/docs/1.3.x/'):
207-
case path.startsWith('/docs/1.3.0/'):
208-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(12)}`);
209-
// Redirect versioned pages to default
210-
case path.startsWith('/docs/surrealdb/2.x/'):
211-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(20)}`);
212-
case path.startsWith('/docs/surrealdb/1.0.x/'):
213-
case path.startsWith('/docs/surrealdb/1.0.0/'):
214-
case path.startsWith('/docs/surrealdb/1.1.x/'):
215-
case path.startsWith('/docs/surrealdb/1.1.0/'):
216-
case path.startsWith('/docs/surrealdb/1.2.x/'):
217-
case path.startsWith('/docs/surrealdb/1.2.0/'):
218-
case path.startsWith('/docs/surrealdb/1.3.x/'):
219-
case path.startsWith('/docs/surrealdb/1.3.0/'):
220-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(22)}`);
221-
// Redirect libraries pages to sdks
222-
case path.startsWith('/docs/integration/libraries/'):
223-
return redirect(`https://surrealdb.com/docs/sdk/${path.slice(28)}`);
224-
case path.startsWith('/docs/surrealdb/integration/sdks/'):
225-
return redirect(`https://surrealdb.com/docs/sdk/${path.slice(33)}`);
226-
// Redirect how-to pages to tutorials
227-
case path.startsWith('/docs/how-to/'):
228-
return redirect(`https://surrealdb.com/docs/tutorials/${path.slice(13)}`);
229-
case path.startsWith('/docs/surrealdb/how-to/'):
230-
return redirect(`https://surrealdb.com/docs/tutorials/${path.slice(23)}`);
231-
case path.startsWith('/docs/surrealdb/tutorials/'):
232-
return redirect(`https://surrealdb.com/docs/tutorials/${path.slice(26)}`);
233-
// Redirect SurrealQL subpaths to Querying
234-
case path.startsWith('/docs/surrealdb/surrealql/'):
235-
return redirect(`https://surrealdb.com/docs/surrealql/${path.slice(26)}`);
236-
// Redirect all other docs pages
237-
case path.startsWith('/docs/'): {
238-
const splitted = path.split('/').slice(1);
239-
switch (splitted[1]) {
240-
case 'surrealdb':
241-
case 'surrealml':
242-
case 'surrealist':
243-
case 'surrealism':
244-
case 'surrealql':
245-
case 'sdk':
246-
case 'tutorials':
247-
case 'cloud':
248-
case undefined:
249-
break;
250-
default:
251-
// Skip redirection for llms.txt which is already handled above
252-
if (path === '/docs/llms.txt') {
253-
break;
254-
}
255-
return redirect(`https://surrealdb.com/docs/surrealdb/${path.slice(6)}`);
256-
}
114+
if (path.startsWith('/docs/')) {
115+
const section = path.split('/')[2];
116+
const validSections = ['surrealdb', 'surrealml', 'surrealist', 'surrealism', 'surrealql', 'sdk', 'tutorials', 'cloud'];
117+
if (!validSections.includes(section) && path !== '/docs/llms.txt') {
118+
return redirect(`/docs/surrealdb/${path.slice(6)}`);
257119
}
258120
}
259121

260-
request.uri = request.uri.concat('/index.html');
261-
122+
request.uri += '/index.html';
262123
return request;
263124
}

0 commit comments

Comments
 (0)