h3 0.5.5 → 0.5.6
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/dist/index.cjs +36 -4
- package/dist/index.d.ts +27 -16
- package/dist/index.mjs +36 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -78,6 +78,37 @@ async function useBody(event) {
|
|
|
78
78
|
return json;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
function handleCacheHeaders(event, opts) {
|
|
82
|
+
const cacheControls = ["public"].concat(opts.cacheControls || []);
|
|
83
|
+
let cacheMatched = false;
|
|
84
|
+
if (opts.maxAge !== void 0) {
|
|
85
|
+
opts.cacheControls?.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
86
|
+
}
|
|
87
|
+
if (opts.modifiedTime) {
|
|
88
|
+
const ifModifiedSince = event.req.headers["if-modified-since"];
|
|
89
|
+
event.res.setHeader("Last-Modified", +opts.modifiedTime + "");
|
|
90
|
+
if (ifModifiedSince) {
|
|
91
|
+
if (new Date(ifModifiedSince) >= opts.modifiedTime) {
|
|
92
|
+
cacheMatched = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (opts.etag) {
|
|
97
|
+
event.res.setHeader("Etag", opts.etag);
|
|
98
|
+
const ifNonMatch = event.req.headers["if-none-match"];
|
|
99
|
+
if (ifNonMatch === opts.etag) {
|
|
100
|
+
cacheMatched = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
event.res.setHeader("Cache-Control", cacheControls.join(", "));
|
|
104
|
+
if (cacheMatched) {
|
|
105
|
+
event.res.statusCode = 304;
|
|
106
|
+
event.res.end("");
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
|
|
81
112
|
const MIMES = {
|
|
82
113
|
html: "text/html",
|
|
83
114
|
json: "application/json"
|
|
@@ -250,12 +281,12 @@ function useBase(base, handler) {
|
|
|
250
281
|
};
|
|
251
282
|
}
|
|
252
283
|
|
|
253
|
-
function
|
|
284
|
+
function defineEventHandler(handler) {
|
|
254
285
|
handler.__is_handler__ = true;
|
|
255
286
|
return handler;
|
|
256
287
|
}
|
|
257
|
-
const
|
|
258
|
-
function
|
|
288
|
+
const eventHandler = defineEventHandler;
|
|
289
|
+
function defineLazyEventHandler(factory) {
|
|
259
290
|
let _promise;
|
|
260
291
|
let _resolved;
|
|
261
292
|
const resolveHandler = () => {
|
|
@@ -281,7 +312,7 @@ function lazyEventHandler(factory) {
|
|
|
281
312
|
return resolveHandler().then((handler) => handler(event));
|
|
282
313
|
});
|
|
283
314
|
}
|
|
284
|
-
const
|
|
315
|
+
const lazyEventHandler = defineLazyEventHandler;
|
|
285
316
|
function dynamicEventHandler(initial) {
|
|
286
317
|
let current = initial;
|
|
287
318
|
const wrapper = eventHandler((event) => {
|
|
@@ -494,6 +525,7 @@ exports.defineMiddleware = defineMiddleware;
|
|
|
494
525
|
exports.deleteCookie = deleteCookie;
|
|
495
526
|
exports.dynamicEventHandler = dynamicEventHandler;
|
|
496
527
|
exports.eventHandler = eventHandler;
|
|
528
|
+
exports.handleCacheHeaders = handleCacheHeaders;
|
|
497
529
|
exports.isError = isError;
|
|
498
530
|
exports.isEvent = isEvent;
|
|
499
531
|
exports.isEventHandler = isEventHandler;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,9 +7,7 @@ interface H3Event {
|
|
|
7
7
|
event: H3Event;
|
|
8
8
|
req: IncomingMessage;
|
|
9
9
|
res: ServerResponse;
|
|
10
|
-
/**
|
|
11
|
-
* Request params only filled with h3 Router handlers
|
|
12
|
-
*/
|
|
10
|
+
/** Request params only filled with h3 Router handlers */
|
|
13
11
|
params?: Record<string, any>;
|
|
14
12
|
}
|
|
15
13
|
declare type CompatibilityEvent = H3Event | IncomingMessage | ServerResponse;
|
|
@@ -20,13 +18,11 @@ interface EventHandler {
|
|
|
20
18
|
'__is_handler__'?: true;
|
|
21
19
|
(event: CompatibilityEvent): H3Response | Promise<H3Response>;
|
|
22
20
|
}
|
|
23
|
-
declare function
|
|
24
|
-
|
|
25
|
-
declare const defineEventHandler: typeof eventHandler;
|
|
21
|
+
declare function defineEventHandler(handler: EventHandler): EventHandler;
|
|
22
|
+
declare const eventHandler: typeof defineEventHandler;
|
|
26
23
|
declare type LazyEventHandler = () => EventHandler | Promise<EventHandler>;
|
|
27
|
-
declare function
|
|
28
|
-
|
|
29
|
-
declare const defineLazyEventHandler: typeof lazyEventHandler;
|
|
24
|
+
declare function defineLazyEventHandler(factory: LazyEventHandler): EventHandler;
|
|
25
|
+
declare const lazyEventHandler: typeof defineLazyEventHandler;
|
|
30
26
|
interface DynamicEventHandler extends EventHandler {
|
|
31
27
|
set: (handler: EventHandler) => void;
|
|
32
28
|
}
|
|
@@ -37,19 +33,21 @@ declare function toEventHandler(handler: CompatibilityEventHandler): EventHandle
|
|
|
37
33
|
declare function createEvent(req: http.IncomingMessage, res: http.ServerResponse): CompatibilityEvent;
|
|
38
34
|
declare function isEvent(input: any): input is H3Event;
|
|
39
35
|
|
|
40
|
-
interface
|
|
41
|
-
originalUrl?: string;
|
|
36
|
+
interface CompatibilityRequestProps {
|
|
42
37
|
event: H3Event;
|
|
38
|
+
/** Only available with connect and press */
|
|
39
|
+
originalUrl?: string;
|
|
40
|
+
/** Request params only filled with h3 Router handlers */
|
|
41
|
+
params?: Record<string, any>;
|
|
42
|
+
}
|
|
43
|
+
interface IncomingMessage extends http.IncomingMessage, CompatibilityRequestProps {
|
|
43
44
|
req: H3Event['req'];
|
|
44
45
|
res: H3Event['res'];
|
|
45
46
|
}
|
|
46
47
|
interface ServerResponse extends http.ServerResponse {
|
|
47
48
|
event: H3Event;
|
|
48
49
|
res: H3Event['res'];
|
|
49
|
-
req: http.ServerResponse['req'] &
|
|
50
|
-
event: H3Event;
|
|
51
|
-
originalUrl?: string;
|
|
52
|
-
};
|
|
50
|
+
req: http.ServerResponse['req'] & CompatibilityRequestProps;
|
|
53
51
|
}
|
|
54
52
|
declare type Handler<T = any, ReqT = {}> = (req: IncomingMessage & ReqT, res: ServerResponse) => T;
|
|
55
53
|
declare type PromisifiedHandler = Handler<Promise<any>>;
|
|
@@ -165,6 +163,19 @@ declare function useRawBody(event: CompatibilityEvent, encoding?: Encoding): Enc
|
|
|
165
163
|
*/
|
|
166
164
|
declare function useBody<T = any>(event: CompatibilityEvent): Promise<T>;
|
|
167
165
|
|
|
166
|
+
interface CacheConditions {
|
|
167
|
+
modifiedTime?: Date;
|
|
168
|
+
maxAge?: number;
|
|
169
|
+
etag?: string;
|
|
170
|
+
cacheControls?: string[];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check request caching headers (`If-Modified-Since`) and add caching headers (Last-Modified, Cache-Control)
|
|
174
|
+
* Note: `public` cache control will be added by default
|
|
175
|
+
* @returns `true` when cache headers are matching. When `true` is returned, no reponse should be sent anymore
|
|
176
|
+
*/
|
|
177
|
+
declare function handleCacheHeaders(event: CompatibilityEvent, opts: CacheConditions): boolean;
|
|
178
|
+
|
|
168
179
|
declare const MIMES: {
|
|
169
180
|
html: string;
|
|
170
181
|
json: string;
|
|
@@ -233,4 +244,4 @@ interface Router extends AddRouteShortcuts {
|
|
|
233
244
|
}
|
|
234
245
|
declare function createRouter(): Router;
|
|
235
246
|
|
|
236
|
-
export { AddRouteShortcuts, App, AppOptions, AppUse, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, JSONValue, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, _JSONValue, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
|
247
|
+
export { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, JSONValue, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, _JSONValue, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, handleCacheHeaders, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
package/dist/index.mjs
CHANGED
|
@@ -70,6 +70,37 @@ async function useBody(event) {
|
|
|
70
70
|
return json;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
function handleCacheHeaders(event, opts) {
|
|
74
|
+
const cacheControls = ["public"].concat(opts.cacheControls || []);
|
|
75
|
+
let cacheMatched = false;
|
|
76
|
+
if (opts.maxAge !== void 0) {
|
|
77
|
+
opts.cacheControls?.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
78
|
+
}
|
|
79
|
+
if (opts.modifiedTime) {
|
|
80
|
+
const ifModifiedSince = event.req.headers["if-modified-since"];
|
|
81
|
+
event.res.setHeader("Last-Modified", +opts.modifiedTime + "");
|
|
82
|
+
if (ifModifiedSince) {
|
|
83
|
+
if (new Date(ifModifiedSince) >= opts.modifiedTime) {
|
|
84
|
+
cacheMatched = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (opts.etag) {
|
|
89
|
+
event.res.setHeader("Etag", opts.etag);
|
|
90
|
+
const ifNonMatch = event.req.headers["if-none-match"];
|
|
91
|
+
if (ifNonMatch === opts.etag) {
|
|
92
|
+
cacheMatched = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
event.res.setHeader("Cache-Control", cacheControls.join(", "));
|
|
96
|
+
if (cacheMatched) {
|
|
97
|
+
event.res.statusCode = 304;
|
|
98
|
+
event.res.end("");
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
|
|
73
104
|
const MIMES = {
|
|
74
105
|
html: "text/html",
|
|
75
106
|
json: "application/json"
|
|
@@ -242,12 +273,12 @@ function useBase(base, handler) {
|
|
|
242
273
|
};
|
|
243
274
|
}
|
|
244
275
|
|
|
245
|
-
function
|
|
276
|
+
function defineEventHandler(handler) {
|
|
246
277
|
handler.__is_handler__ = true;
|
|
247
278
|
return handler;
|
|
248
279
|
}
|
|
249
|
-
const
|
|
250
|
-
function
|
|
280
|
+
const eventHandler = defineEventHandler;
|
|
281
|
+
function defineLazyEventHandler(factory) {
|
|
251
282
|
let _promise;
|
|
252
283
|
let _resolved;
|
|
253
284
|
const resolveHandler = () => {
|
|
@@ -273,7 +304,7 @@ function lazyEventHandler(factory) {
|
|
|
273
304
|
return resolveHandler().then((handler) => handler(event));
|
|
274
305
|
});
|
|
275
306
|
}
|
|
276
|
-
const
|
|
307
|
+
const lazyEventHandler = defineLazyEventHandler;
|
|
277
308
|
function dynamicEventHandler(initial) {
|
|
278
309
|
let current = initial;
|
|
279
310
|
const wrapper = eventHandler((event) => {
|
|
@@ -466,4 +497,4 @@ function createRouter() {
|
|
|
466
497
|
return router;
|
|
467
498
|
}
|
|
468
499
|
|
|
469
|
-
export { H3Error, MIMES, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
|
500
|
+
export { H3Error, MIMES, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, handleCacheHeaders, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|