@bquery/bquery 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -19
- package/dist/{a11y-DG2i4iZN.js → a11y-DgUQ8-fI.js} +1 -1
- package/dist/{a11y-DG2i4iZN.js.map → a11y-DgUQ8-fI.js.map} +1 -1
- package/dist/a11y.es.mjs +1 -1
- package/dist/{component-DRotf1hl.js → component-D8ydhe58.js} +2 -2
- package/dist/{component-DRotf1hl.js.map → component-D8ydhe58.js.map} +1 -1
- package/dist/component.es.mjs +1 -1
- package/dist/concurrency-BU1wPEsZ.js.map +1 -1
- package/dist/{constraints-CqjhmpZC.js → constraints-Dlbx_m1b.js} +1 -1
- package/dist/{constraints-CqjhmpZC.js.map → constraints-Dlbx_m1b.js.map} +1 -1
- package/dist/{core-EMYSLzaT.js → core-tOP6QOrY.js} +2 -2
- package/dist/{core-EMYSLzaT.js.map → core-tOP6QOrY.js.map} +1 -1
- package/dist/core.es.mjs +1 -1
- package/dist/{custom-directives-BjFzFhuf.js → custom-directives-5DlKqvd2.js} +1 -1
- package/dist/{custom-directives-BjFzFhuf.js.map → custom-directives-5DlKqvd2.js.map} +1 -1
- package/dist/{devtools-C5FExMwv.js → devtools-QosAqo0T.js} +2 -2
- package/dist/{devtools-C5FExMwv.js.map → devtools-QosAqo0T.js.map} +1 -1
- package/dist/devtools.es.mjs +1 -1
- package/dist/{dnd-BAqzPlSo.js → dnd-d2OU4len.js} +1 -1
- package/dist/{dnd-BAqzPlSo.js.map → dnd-d2OU4len.js.map} +1 -1
- package/dist/dnd.es.mjs +1 -1
- package/dist/{forms-Dx1Scvh0.js → forms-BLx4ZzT7.js} +1 -1
- package/dist/{forms-Dx1Scvh0.js.map → forms-BLx4ZzT7.js.map} +1 -1
- package/dist/forms.es.mjs +1 -1
- package/dist/full.d.ts +4 -2
- package/dist/full.d.ts.map +1 -1
- package/dist/full.es.mjs +258 -219
- package/dist/full.iife.js +41 -37
- package/dist/full.iife.js.map +1 -1
- package/dist/full.umd.js +41 -37
- package/dist/full.umd.js.map +1 -1
- package/dist/{i18n-Cazyk9RD.js → i18n--p7PM-9r.js} +1 -1
- package/dist/{i18n-Cazyk9RD.js.map → i18n--p7PM-9r.js.map} +1 -1
- package/dist/i18n.es.mjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.mjs +291 -252
- package/dist/match-CrZRVC4z.js +174 -0
- package/dist/match-CrZRVC4z.js.map +1 -0
- package/dist/{media-dAKIGPk3.js → media-gjbWNq50.js} +1 -1
- package/dist/{media-dAKIGPk3.js.map → media-gjbWNq50.js.map} +1 -1
- package/dist/media.es.mjs +1 -1
- package/dist/motion-BBMso9Ir.js.map +1 -1
- package/dist/{mount-C8O2vXkQ.js → mount-0A9qtcRJ.js} +3 -3
- package/dist/{mount-C8O2vXkQ.js.map → mount-0A9qtcRJ.js.map} +1 -1
- package/dist/platform-BPHIXbw8.js.map +1 -1
- package/dist/{plugin-DjTqWg-P.js → plugin-SZEirbwq.js} +2 -2
- package/dist/{plugin-DjTqWg-P.js.map → plugin-SZEirbwq.js.map} +1 -1
- package/dist/plugin.es.mjs +1 -1
- package/dist/reactive-BAd2hfl8.js.map +1 -1
- package/dist/{registry-Cr6VH8CR.js → registry-jpUQHf4E.js} +1 -1
- package/dist/{registry-Cr6VH8CR.js.map → registry-jpUQHf4E.js.map} +1 -1
- package/dist/router-C4weu0QL.js +333 -0
- package/dist/router-C4weu0QL.js.map +1 -0
- package/dist/router.es.mjs +1 -1
- package/dist/{sanitize-B1V4JswB.js → sanitize-DOMkRO9G.js} +12 -7
- package/dist/{sanitize-B1V4JswB.js.map → sanitize-DOMkRO9G.js.map} +1 -1
- package/dist/security.es.mjs +1 -1
- package/dist/server/create-server.d.ts +25 -0
- package/dist/server/create-server.d.ts.map +1 -0
- package/dist/server/index.d.ts +11 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/types.d.ts +396 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server-QdyKtCS1.js +349 -0
- package/dist/server-QdyKtCS1.js.map +1 -0
- package/dist/server.es.mjs +6 -0
- package/dist/ssr/adapters.d.ts +74 -0
- package/dist/ssr/adapters.d.ts.map +1 -0
- package/dist/ssr/async.d.ts +40 -0
- package/dist/ssr/async.d.ts.map +1 -0
- package/dist/ssr/config.d.ts +60 -0
- package/dist/ssr/config.d.ts.map +1 -0
- package/dist/ssr/context.d.ts +73 -0
- package/dist/ssr/context.d.ts.map +1 -0
- package/dist/ssr/defer-brand.d.ts +5 -0
- package/dist/ssr/defer-brand.d.ts.map +1 -0
- package/dist/ssr/escape.d.ts +17 -0
- package/dist/ssr/escape.d.ts.map +1 -0
- package/dist/ssr/expression.d.ts +44 -0
- package/dist/ssr/expression.d.ts.map +1 -0
- package/dist/ssr/hash.d.ts +39 -0
- package/dist/ssr/hash.d.ts.map +1 -0
- package/dist/ssr/head.d.ts +102 -0
- package/dist/ssr/head.d.ts.map +1 -0
- package/dist/ssr/html-parser.d.ts +58 -0
- package/dist/ssr/html-parser.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +49 -43
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/mismatch.d.ts +60 -0
- package/dist/ssr/mismatch.d.ts.map +1 -0
- package/dist/ssr/render-async.d.ts +84 -0
- package/dist/ssr/render-async.d.ts.map +1 -0
- package/dist/ssr/render.d.ts.map +1 -1
- package/dist/ssr/renderer.d.ts +25 -0
- package/dist/ssr/renderer.d.ts.map +1 -0
- package/dist/ssr/resumability.d.ts +65 -0
- package/dist/ssr/resumability.d.ts.map +1 -0
- package/dist/ssr/router-bridge.d.ts +101 -0
- package/dist/ssr/router-bridge.d.ts.map +1 -0
- package/dist/ssr/runtime.d.ts +63 -0
- package/dist/ssr/runtime.d.ts.map +1 -0
- package/dist/ssr/serialize.d.ts.map +1 -1
- package/dist/ssr/store-snapshot.d.ts +87 -0
- package/dist/ssr/store-snapshot.d.ts.map +1 -0
- package/dist/ssr/strategies.d.ts +43 -0
- package/dist/ssr/strategies.d.ts.map +1 -0
- package/dist/ssr/suspense.d.ts +47 -0
- package/dist/ssr/suspense.d.ts.map +1 -0
- package/dist/ssr/types.d.ts +17 -0
- package/dist/ssr/types.d.ts.map +1 -1
- package/dist/ssr-Bt6BQA3J.js +2127 -0
- package/dist/ssr-Bt6BQA3J.js.map +1 -0
- package/dist/ssr.es.mjs +42 -7
- package/dist/{store-CjmEeX9-.js → store-DnXuu6Li.js} +2 -2
- package/dist/{store-CjmEeX9-.js.map → store-DnXuu6Li.js.map} +1 -1
- package/dist/store.es.mjs +2 -2
- package/dist/storybook.es.mjs +1 -1
- package/dist/{testing-TdfaL7VE.js → testing-CeMUwrRD.js} +2 -2
- package/dist/{testing-TdfaL7VE.js.map → testing-CeMUwrRD.js.map} +1 -1
- package/dist/testing.es.mjs +1 -1
- package/dist/view.es.mjs +1 -1
- package/package.json +17 -12
- package/src/full.ts +99 -0
- package/src/index.ts +3 -0
- package/src/server/create-server.ts +754 -0
- package/src/server/index.ts +33 -0
- package/src/server/types.ts +490 -0
- package/src/ssr/adapters.ts +330 -0
- package/src/ssr/async.ts +125 -0
- package/src/ssr/config.ts +86 -0
- package/src/ssr/context.ts +245 -0
- package/src/ssr/defer-brand.ts +3 -0
- package/src/ssr/escape.ts +25 -0
- package/src/ssr/expression.ts +669 -0
- package/src/ssr/hash.ts +71 -0
- package/src/ssr/head.ts +240 -0
- package/src/ssr/html-parser.ts +387 -0
- package/src/ssr/index.ts +136 -43
- package/src/ssr/mismatch.ts +110 -0
- package/src/ssr/render-async.ts +286 -0
- package/src/ssr/render.ts +130 -59
- package/src/ssr/renderer.ts +453 -0
- package/src/ssr/resumability.ts +142 -0
- package/src/ssr/router-bridge.ts +177 -0
- package/src/ssr/runtime.ts +131 -0
- package/src/ssr/serialize.ts +1 -27
- package/src/ssr/store-snapshot.ts +209 -0
- package/src/ssr/strategies.ts +245 -0
- package/src/ssr/suspense.ts +504 -0
- package/src/ssr/types.ts +18 -0
- package/dist/router-CCepRMpC.js +0 -493
- package/dist/router-CCepRMpC.js.map +0 -1
- package/dist/ssr-D-1IPcfw.js +0 -248
- package/dist/ssr-D-1IPcfw.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight backend helpers for bQuery.js.
|
|
3
|
+
*
|
|
4
|
+
* Provides an Express-inspired middleware and routing layer that stays
|
|
5
|
+
* dependency-free, tree-shakeable, and SSR-aware.
|
|
6
|
+
*
|
|
7
|
+
* @module bquery/server
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export { createServer, isServerWebSocketSession, isWebSocketRequest } from './create-server';
|
|
11
|
+
export type {
|
|
12
|
+
CreateServerOptions,
|
|
13
|
+
ServerApp,
|
|
14
|
+
ServerContext,
|
|
15
|
+
ServerHandler,
|
|
16
|
+
ServerResult,
|
|
17
|
+
ServerHtmlResponseInit,
|
|
18
|
+
ServerMiddleware,
|
|
19
|
+
ServerNext,
|
|
20
|
+
ServerQuery,
|
|
21
|
+
ServerRenderResponseOptions,
|
|
22
|
+
ServerRequestInit,
|
|
23
|
+
ServerResponseInit,
|
|
24
|
+
ServerRoute,
|
|
25
|
+
ServerWebSocketConnection,
|
|
26
|
+
ServerWebSocketData,
|
|
27
|
+
ServerWebSocketHandlerSet,
|
|
28
|
+
ServerWebSocketMiddleware,
|
|
29
|
+
ServerWebSocketNext,
|
|
30
|
+
ServerWebSocketPeer,
|
|
31
|
+
ServerWebSocketRouteHandler,
|
|
32
|
+
ServerWebSocketSession,
|
|
33
|
+
} from './types';
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import type { RenderOptions } from '../ssr/index';
|
|
2
|
+
import type { BindingContext } from '../view/index';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Repeated query parameters are represented as arrays.
|
|
6
|
+
*/
|
|
7
|
+
export interface ServerQuery {
|
|
8
|
+
[key: string]: string | string[] | undefined;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Lightweight request input accepted by `handle()`.
|
|
13
|
+
*/
|
|
14
|
+
export interface ServerRequestInit {
|
|
15
|
+
/**
|
|
16
|
+
* Request URL or path.
|
|
17
|
+
*
|
|
18
|
+
* Relative paths are resolved against `CreateServerOptions.baseUrl`.
|
|
19
|
+
*/
|
|
20
|
+
url: string | URL;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* HTTP method.
|
|
24
|
+
* @default 'GET'
|
|
25
|
+
*/
|
|
26
|
+
method?: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Request headers.
|
|
30
|
+
*/
|
|
31
|
+
headers?: HeadersInit;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional request body.
|
|
35
|
+
*/
|
|
36
|
+
body?: BodyInit | null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Shared response options used by server helpers.
|
|
41
|
+
*/
|
|
42
|
+
export interface ServerResponseInit extends ResponseInit {
|
|
43
|
+
headers?: HeadersInit;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* HTML response options.
|
|
48
|
+
*/
|
|
49
|
+
export interface ServerHtmlResponseInit extends ServerResponseInit {
|
|
50
|
+
/**
|
|
51
|
+
* When `true`, the HTML string is assumed to be already safe and is returned
|
|
52
|
+
* without additional sanitization.
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
55
|
+
trusted?: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* SSR response options.
|
|
60
|
+
*/
|
|
61
|
+
export interface ServerRenderResponseOptions extends RenderOptions {
|
|
62
|
+
/**
|
|
63
|
+
* HTTP status to use for the response.
|
|
64
|
+
* @default 200
|
|
65
|
+
*/
|
|
66
|
+
status?: number;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Additional response headers.
|
|
70
|
+
*/
|
|
71
|
+
headers?: HeadersInit;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Binary/text payloads accepted by server-side WebSocket peers and sessions.
|
|
76
|
+
*
|
|
77
|
+
* Use this for raw frames sent through `socket.send(...)`.
|
|
78
|
+
*/
|
|
79
|
+
export type ServerWebSocketData = string | Blob | ArrayBufferLike | ArrayBufferView;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Minimal runtime WebSocket peer shape consumed by server-side WebSocket sessions.
|
|
83
|
+
*/
|
|
84
|
+
export interface ServerWebSocketPeer {
|
|
85
|
+
/**
|
|
86
|
+
* Negotiated sub-protocol, when available.
|
|
87
|
+
*/
|
|
88
|
+
protocol?: string;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Current readyState, when the runtime exposes it.
|
|
92
|
+
*/
|
|
93
|
+
readyState?: number;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Remote URL, when the runtime exposes it.
|
|
97
|
+
*/
|
|
98
|
+
url?: string;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Send a raw payload to the connected peer.
|
|
102
|
+
*/
|
|
103
|
+
send(data: ServerWebSocketData): void;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Close the connection.
|
|
107
|
+
*/
|
|
108
|
+
close(code?: number, reason?: string): void;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Wrapped WebSocket connection exposed to route handlers.
|
|
113
|
+
*/
|
|
114
|
+
export interface ServerWebSocketConnection extends ServerWebSocketPeer {
|
|
115
|
+
/**
|
|
116
|
+
* Serialize a value with `JSON.stringify()` and send it to the peer.
|
|
117
|
+
*/
|
|
118
|
+
sendJson(data: unknown): void;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Request/response context passed through the server pipeline.
|
|
123
|
+
*/
|
|
124
|
+
export interface ServerContext {
|
|
125
|
+
/**
|
|
126
|
+
* Normalized `Request` instance.
|
|
127
|
+
*/
|
|
128
|
+
request: Request;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Parsed URL for the current request.
|
|
132
|
+
*/
|
|
133
|
+
url: URL;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Uppercase HTTP method.
|
|
137
|
+
*/
|
|
138
|
+
method: string;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Pathname without query string.
|
|
142
|
+
*/
|
|
143
|
+
path: string;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Route params captured from `:param` path segments.
|
|
147
|
+
*/
|
|
148
|
+
params: Record<string, string>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Parsed query object. Repeated keys become arrays.
|
|
152
|
+
*/
|
|
153
|
+
query: ServerQuery;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Per-request mutable state bag for middleware communication.
|
|
157
|
+
*/
|
|
158
|
+
state: Record<string, unknown>;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Create a raw `Response`.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```ts
|
|
165
|
+
* return ctx.response('Created', { status: 201 });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
response(body?: BodyInit | null, init?: ServerResponseInit): Response;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Create a plain-text response.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```ts
|
|
175
|
+
* return ctx.text('ok');
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
text(body: string, init?: ServerResponseInit): Response;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Create a sanitized HTML response by default.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* return ctx.html('<h1>Hello</h1>');
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
html(body: string, init?: ServerHtmlResponseInit): Response;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Create a JSON response.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* return ctx.json({ ok: true });
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
json(data: unknown, init?: ServerResponseInit): Response;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Create a redirect response.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```ts
|
|
205
|
+
* return ctx.redirect('/login', 302);
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
redirect(location: string | URL, status?: number): Response;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Render a bQuery SSR template into an HTML response.
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```ts
|
|
215
|
+
* return ctx.render('<h1 bq-text="title"></h1>', { title: 'Dashboard' });
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
render(
|
|
219
|
+
template: string,
|
|
220
|
+
data: BindingContext,
|
|
221
|
+
options?: ServerRenderResponseOptions
|
|
222
|
+
): Response;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* `true` when the incoming request is a WebSocket upgrade handshake.
|
|
226
|
+
*/
|
|
227
|
+
isWebSocketRequest: boolean;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Final request handler.
|
|
232
|
+
*/
|
|
233
|
+
export interface ServerHandler {
|
|
234
|
+
(context: ServerContext): Response | Promise<Response>;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* WebSocket route lifecycle callbacks.
|
|
239
|
+
*/
|
|
240
|
+
export interface ServerWebSocketHandlerSet<TReceive = unknown> {
|
|
241
|
+
/**
|
|
242
|
+
* Requested sub-protocols for the handshake.
|
|
243
|
+
*/
|
|
244
|
+
protocols?: string | string[];
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Additional handshake headers used by compatible runtimes.
|
|
248
|
+
*/
|
|
249
|
+
headers?: HeadersInit;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Deserialize incoming WebSocket messages.
|
|
253
|
+
*
|
|
254
|
+
* Defaults to JSON.parse for string payloads with a raw-string fallback.
|
|
255
|
+
*/
|
|
256
|
+
deserialize?: (event: MessageEvent) => TReceive;
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Called after the runtime accepts the upgrade.
|
|
260
|
+
*/
|
|
261
|
+
onOpen?: (socket: ServerWebSocketConnection, context: ServerContext) => void | Promise<void>;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Called for each incoming message after deserialization.
|
|
265
|
+
*/
|
|
266
|
+
onMessage?: (
|
|
267
|
+
data: TReceive,
|
|
268
|
+
socket: ServerWebSocketConnection,
|
|
269
|
+
context: ServerContext,
|
|
270
|
+
event: MessageEvent
|
|
271
|
+
) => void | Promise<void>;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Called when the connection closes.
|
|
275
|
+
*/
|
|
276
|
+
onClose?: (
|
|
277
|
+
event: CloseEvent,
|
|
278
|
+
socket: ServerWebSocketConnection,
|
|
279
|
+
context: ServerContext
|
|
280
|
+
) => void | Promise<void>;
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Called when the runtime reports a socket error.
|
|
284
|
+
*/
|
|
285
|
+
onError?: (
|
|
286
|
+
event: Event,
|
|
287
|
+
socket: ServerWebSocketConnection,
|
|
288
|
+
context: ServerContext
|
|
289
|
+
) => void | Promise<void>;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* WebSocket route definition or per-request factory.
|
|
294
|
+
*/
|
|
295
|
+
export type ServerWebSocketRouteHandler<TReceive = unknown> =
|
|
296
|
+
| ServerWebSocketHandlerSet<TReceive>
|
|
297
|
+
| ((
|
|
298
|
+
context: ServerContext
|
|
299
|
+
) => ServerWebSocketHandlerSet<TReceive> | Promise<ServerWebSocketHandlerSet<TReceive>>);
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Runtime-agnostic WebSocket session returned by `handleWebSocket()`.
|
|
303
|
+
*/
|
|
304
|
+
export interface ServerWebSocketSession {
|
|
305
|
+
/**
|
|
306
|
+
* Request context captured during route matching and middleware execution.
|
|
307
|
+
*/
|
|
308
|
+
context: ServerContext;
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Normalized requested sub-protocols.
|
|
312
|
+
*/
|
|
313
|
+
protocols: string[];
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Additional handshake headers requested by the route.
|
|
317
|
+
*/
|
|
318
|
+
headers?: HeadersInit;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Notify the session that the runtime accepted the connection.
|
|
322
|
+
*/
|
|
323
|
+
open(socket: ServerWebSocketPeer): Promise<void>;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Deliver an incoming message event to the session.
|
|
327
|
+
*/
|
|
328
|
+
message(socket: ServerWebSocketPeer, event: MessageEvent): Promise<void>;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Notify the session about a close event.
|
|
332
|
+
*/
|
|
333
|
+
close(socket: ServerWebSocketPeer, event: CloseEvent): Promise<void>;
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Notify the session about a socket error.
|
|
337
|
+
*/
|
|
338
|
+
error(socket: ServerWebSocketPeer, event: Event): Promise<void>;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Result type used by middleware and WebSocket handling.
|
|
343
|
+
*/
|
|
344
|
+
export type ServerResult = Response | ServerWebSocketSession | null;
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Middleware continuation callback.
|
|
348
|
+
*/
|
|
349
|
+
export interface ServerNext {
|
|
350
|
+
(): Promise<Response>;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Express-inspired middleware for request pipelines.
|
|
355
|
+
*/
|
|
356
|
+
export interface ServerMiddleware {
|
|
357
|
+
(context: ServerContext, next: ServerNext): Response | Promise<Response>;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* WebSocket middleware continuation callback.
|
|
362
|
+
*/
|
|
363
|
+
export interface ServerWebSocketNext {
|
|
364
|
+
(): Promise<ServerResult>;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Middleware used by WebSocket routes.
|
|
369
|
+
*/
|
|
370
|
+
export interface ServerWebSocketMiddleware {
|
|
371
|
+
(context: ServerContext, next: ServerWebSocketNext): ServerResult | Promise<ServerResult>;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Route definition used by `add()`.
|
|
376
|
+
*/
|
|
377
|
+
export interface ServerRoute {
|
|
378
|
+
/**
|
|
379
|
+
* Route path. Supports static segments, `:params`, and terminal `*`.
|
|
380
|
+
*/
|
|
381
|
+
path: string;
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* One or many HTTP methods. Omit for "all methods".
|
|
385
|
+
*/
|
|
386
|
+
method?: string | string[];
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Optional route-scoped middleware.
|
|
390
|
+
*/
|
|
391
|
+
middlewares?: ServerMiddleware[];
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Final route handler.
|
|
395
|
+
*/
|
|
396
|
+
handler: ServerHandler;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Configures a server instance.
|
|
401
|
+
*/
|
|
402
|
+
export interface CreateServerOptions {
|
|
403
|
+
/**
|
|
404
|
+
* Base URL used to resolve relative request paths.
|
|
405
|
+
* @default 'http://localhost'
|
|
406
|
+
*/
|
|
407
|
+
baseUrl?: string;
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Global middleware applied to every request.
|
|
411
|
+
*/
|
|
412
|
+
middlewares?: ServerMiddleware[];
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Custom 404 handler.
|
|
416
|
+
*/
|
|
417
|
+
notFound?: ServerHandler;
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Custom error handler.
|
|
421
|
+
*/
|
|
422
|
+
onError?: (error: unknown, context: ServerContext) => Response | Promise<Response>;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Express-inspired app-like server handle.
|
|
427
|
+
*/
|
|
428
|
+
export interface ServerApp {
|
|
429
|
+
/**
|
|
430
|
+
* Register global middleware.
|
|
431
|
+
*/
|
|
432
|
+
use(middleware: ServerMiddleware): ServerApp;
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Add a fully specified route.
|
|
436
|
+
*/
|
|
437
|
+
add(route: ServerRoute): ServerApp;
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Register a GET route.
|
|
441
|
+
*/
|
|
442
|
+
get(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Register a POST route.
|
|
446
|
+
*/
|
|
447
|
+
post(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Register a PUT route.
|
|
451
|
+
*/
|
|
452
|
+
put(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Register a PATCH route.
|
|
456
|
+
*/
|
|
457
|
+
patch(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Register a DELETE route.
|
|
461
|
+
*/
|
|
462
|
+
delete(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Register a route that matches any method.
|
|
466
|
+
*/
|
|
467
|
+
all(path: string, handler: ServerHandler, middlewares?: ServerMiddleware[]): ServerApp;
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Register a WebSocket route.
|
|
471
|
+
*/
|
|
472
|
+
ws<TReceive = unknown>(
|
|
473
|
+
path: string,
|
|
474
|
+
handler: ServerWebSocketRouteHandler<TReceive>,
|
|
475
|
+
middlewares?: ServerWebSocketMiddleware[]
|
|
476
|
+
): ServerApp;
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Handle a normalized request.
|
|
480
|
+
*/
|
|
481
|
+
handle(input: Request | string | URL | ServerRequestInit): Promise<Response>;
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Resolve a WebSocket upgrade request into a runtime-agnostic session.
|
|
485
|
+
*
|
|
486
|
+
* Returns `null` when the request is not a WebSocket handshake or no matching
|
|
487
|
+
* WebSocket route exists. Middleware may also short-circuit with a `Response`.
|
|
488
|
+
*/
|
|
489
|
+
handleWebSocket(input: Request | string | URL | ServerRequestInit): Promise<ServerResult>;
|
|
490
|
+
}
|