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
+ ] ;
2
11
3
12
const versions = [
4
13
'nightly' ,
@@ -9,27 +18,53 @@ const versions = [
9
18
'2.x'
10
19
] ;
11
20
12
- const prefixedRedirects = {
21
+ const prefixes = {
13
22
'/docs/integration/libraries/' : '/docs/sdk/' ,
14
23
'/docs/surrealdb/integration/sdks/' : '/docs/sdk/' ,
15
24
}
16
25
17
26
const redirects = {
27
+ // Redirect old sdk libraries page
18
28
'/docs/integration/libraries' : '/docs/surrealdb/integration/sdks' ,
29
+ // Redirect old websocket protocol page
19
30
'/docs/integration/websocket/text' : '/docs/surrealdb/integration/rpc' ,
20
31
'/docs/integration/websocket/binary' : '/docs/surrealdb/integration/rpc' ,
21
32
'/docs/surrealdb/integration/websocket' : '/docs/surrealdb/integration/rpc' ,
22
33
'/docs/surrealql/statements/define/login' : '/docs/surrealdb/surrealql/statements/define/user' ,
34
+ // Redirect Node.js docs to JavaScript docs
23
35
'/docs/integration/libraries/nodejs' : '/docs/sdk/javascript' ,
24
36
'/docs/surrealdb/integration/sdks/nodejs' : '/docs/sdk/javascript' ,
37
+ // Redirect Deno docs to JavaScript docs
25
38
'/docs/integration/libraries/deno' : '/docs/sdk/javascript' ,
26
39
'/docs/surrealdb/integration/sdks/deno' : '/docs/sdk/javascript' ,
40
+ // Redirect old JavaScript SDK paths
41
+ '/docs/sdk/javascript/setup' : '/docs/sdk/javascript/core' ,
27
42
'/docs/sdk/javascript/core/initialization' : '/docs/sdk/javascript/core/create-a-new-connection' ,
28
43
'/docs/sdk/javascript/core/authentication' : '/docs/sdk/javascript/core/handling-authentication' ,
29
44
'/docs/sdk/javascript/core/data-querying' : '/docs/sdk/javascript/core/data-maniplulation' ,
30
45
'/docs/sdk/javascript/core/methods/authenticate' : '/docs/sdk/javascript/methods/authenticate' ,
31
46
'/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
33
68
'/docs/intro' : '/docs/surrealdb' ,
34
69
'/docs/surrealdb/intro' : '/docs/surrealdb' ,
35
70
'/docs/cli/overview' : '/docs/surrealdb/cli' ,
@@ -68,12 +103,10 @@ const redirects = {
68
103
'/docs/surrealdb/surrealql/statements/define/overview' : '/docs/surrealql/statements/define' ,
69
104
'/docs/surrealql/statements/remove/overview' : '/docs/surrealql/statements/remove' ,
70
105
'/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' ,
72
107
} ;
73
108
74
- function redirect ( input ) {
75
- const path = input !== '/docs/' && input . endsWith ( '/' ) ? input . slice ( 0 , - 1 ) : input ;
76
-
109
+ function redirect ( path ) {
77
110
return {
78
111
statusCode : 301 ,
79
112
statusDescription : 'Moved Permanently' ,
@@ -85,46 +118,62 @@ function redirect(input) {
85
118
}
86
119
87
120
function handler ( event ) {
121
+
88
122
const request = event . request ;
89
123
const host = request . headers . host . value ;
90
124
const path = request . uri . toLowerCase ( ) ;
91
125
126
+ // Only use the base domain, not subdomains
92
127
if ( host !== 'surrealdb.com' ) return redirect ( path ) ;
128
+
129
+ // Base path always needs to have a trailing slash
93
130
if ( path === '/docs' ) return redirect ( '/docs/' ) ;
131
+
132
+ // Display the content for the documentation path
94
133
if ( path === '/docs/' ) {
95
134
request . uri += 'index.html' ;
96
135
return request ;
97
136
}
98
137
99
- if ( / ^ \/ d o c s \/ ( ( _ a s t r o \/ | ~ p a r t y t o w n \/ ) | l l m s \. t x t $ ) / . 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 ;
100
143
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
101
151
if ( redirects [ path ] ) return redirect ( redirects [ path ] ) ;
102
152
153
+ // Redirect old versioned documentation paths
103
154
const versionMatch = path . match ( / ^ \/ d o c s \/ (?: s u r r e a l d b \/ ) ? ( [ ^ \/ ] + ) ( \/ .* ) ? $ / ) ;
104
155
if ( versions . includes ( versionMatch [ 1 ] ) ) {
105
156
return redirect ( `/docs/surrealdb${ versionMatch [ 2 ] || "" } ` ) ;
106
157
}
107
158
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 ] ;
113
162
if ( path . startsWith ( prefix ) ) {
114
163
return redirect ( `${ target } ${ path . slice ( prefix . length ) } ` ) ;
115
164
}
116
165
}
117
-
118
- if ( request . uri . endsWith ( '/' ) ) return redirect ( path . slice ( 0 , - 1 ) ) ;
119
- if ( path !== request . uri ) return redirect ( path ) ;
120
166
167
+ // Ensure all docs sections are valid
121
168
if ( path . startsWith ( '/docs/' ) ) {
122
169
const section = path . split ( '/' ) [ 2 ] ;
123
- if ( ! validSections . includes ( section ) && path !== '/docs/llms.txt' ) {
170
+ if ( ! validSections . includes ( section ) ) {
124
171
return redirect ( `/docs/surrealdb/${ path . slice ( 6 ) } ` ) ;
125
172
}
126
173
}
127
174
128
175
request . uri += '/index.html' ;
176
+
129
177
return request ;
178
+
130
179
}
0 commit comments