h3 0.7.8 → 0.7.11
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 +24 -9
- package/dist/index.d.ts +9 -3
- package/dist/index.mjs +24 -9
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -82,7 +82,7 @@ function handleCacheHeaders(event, opts) {
|
|
|
82
82
|
const cacheControls = ["public"].concat(opts.cacheControls || []);
|
|
83
83
|
let cacheMatched = false;
|
|
84
84
|
if (opts.maxAge !== void 0) {
|
|
85
|
-
|
|
85
|
+
cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
86
86
|
}
|
|
87
87
|
if (opts.modifiedTime) {
|
|
88
88
|
const modifiedTime = new Date(opts.modifiedTime);
|
|
@@ -183,14 +183,19 @@ class H3Error extends Error {
|
|
|
183
183
|
constructor() {
|
|
184
184
|
super(...arguments);
|
|
185
185
|
this.statusCode = 500;
|
|
186
|
-
this.
|
|
186
|
+
this.fatal = false;
|
|
187
|
+
this.unhandled = false;
|
|
188
|
+
this.statusMessage = "Internal Server Error";
|
|
187
189
|
}
|
|
188
190
|
}
|
|
189
191
|
function createError(input) {
|
|
192
|
+
if (typeof input === "string") {
|
|
193
|
+
return new H3Error(input);
|
|
194
|
+
}
|
|
190
195
|
if (input instanceof H3Error) {
|
|
191
196
|
return input;
|
|
192
197
|
}
|
|
193
|
-
const err = new H3Error(input.message ?? input.statusMessage);
|
|
198
|
+
const err = new H3Error(input.message ?? input.statusMessage, input.cause ? { cause: input.cause } : void 0);
|
|
194
199
|
if (input.statusCode) {
|
|
195
200
|
err.statusCode = input.statusCode;
|
|
196
201
|
}
|
|
@@ -200,6 +205,12 @@ function createError(input) {
|
|
|
200
205
|
if (input.data) {
|
|
201
206
|
err.data = input.data;
|
|
202
207
|
}
|
|
208
|
+
if (input.fatal !== void 0) {
|
|
209
|
+
err.fatal = input.fatal;
|
|
210
|
+
}
|
|
211
|
+
if (input.unhandled !== void 0) {
|
|
212
|
+
err.unhandled = input.unhandled;
|
|
213
|
+
}
|
|
203
214
|
return err;
|
|
204
215
|
}
|
|
205
216
|
function sendError(event, error, debug) {
|
|
@@ -373,14 +384,18 @@ function createApp(options = {}) {
|
|
|
373
384
|
const event = createEvent(req, res);
|
|
374
385
|
try {
|
|
375
386
|
await handler(event);
|
|
376
|
-
} catch (
|
|
387
|
+
} catch (_error) {
|
|
388
|
+
const error = createError(_error);
|
|
389
|
+
if (!isError(_error)) {
|
|
390
|
+
error.unhandled = true;
|
|
391
|
+
}
|
|
392
|
+
if (error.unhandled || error.fatal) {
|
|
393
|
+
console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
|
|
394
|
+
}
|
|
377
395
|
if (options.onError) {
|
|
378
|
-
await options.onError(
|
|
396
|
+
await options.onError(error, event);
|
|
379
397
|
} else {
|
|
380
|
-
|
|
381
|
-
console.error("[h3]", err);
|
|
382
|
-
}
|
|
383
|
-
await sendError(event, err, !!options.debug);
|
|
398
|
+
await sendError(event, error, !!options.debug);
|
|
384
399
|
}
|
|
385
400
|
}
|
|
386
401
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -2,12 +2,14 @@ import http from 'http';
|
|
|
2
2
|
import { CookieSerializeOptions } from 'cookie-es';
|
|
3
3
|
import * as ufo from 'ufo';
|
|
4
4
|
|
|
5
|
+
interface H3EventContext extends Record<string, any> {
|
|
6
|
+
}
|
|
5
7
|
interface H3Event {
|
|
6
8
|
'__is_event__': true;
|
|
7
9
|
event: H3Event;
|
|
8
10
|
req: IncomingMessage;
|
|
9
11
|
res: ServerResponse;
|
|
10
|
-
context:
|
|
12
|
+
context: H3EventContext;
|
|
11
13
|
}
|
|
12
14
|
declare type CompatibilityEvent = H3Event | IncomingMessage;
|
|
13
15
|
declare type H3Response<T = any> = T | Promise<T>;
|
|
@@ -96,12 +98,16 @@ declare function createAppEventHandler(stack: Stack, options: AppOptions): Event
|
|
|
96
98
|
* @extends Error
|
|
97
99
|
* @property {Number} statusCode An Integer indicating the HTTP response status code.
|
|
98
100
|
* @property {String} statusMessage A String representing the HTTP status message
|
|
101
|
+
* @property {String} fatal Indicates if the error is a fatal error.
|
|
102
|
+
* @property {String} unhandled Indicates if the error was unhandled and auto captured.
|
|
99
103
|
* @property {Any} data An extra data that will includes in the response.<br>
|
|
100
104
|
* This can be used to pass additional information about the error.
|
|
101
105
|
* @property {Boolean} internal Setting this property to <code>true</code> will mark error as an internal error
|
|
102
106
|
*/
|
|
103
107
|
declare class H3Error extends Error {
|
|
104
108
|
statusCode: number;
|
|
109
|
+
fatal: boolean;
|
|
110
|
+
unhandled: boolean;
|
|
105
111
|
statusMessage: string;
|
|
106
112
|
data?: any;
|
|
107
113
|
}
|
|
@@ -111,7 +117,7 @@ declare class H3Error extends Error {
|
|
|
111
117
|
* @param input {Partial<H3Error>}
|
|
112
118
|
* @return {H3Error} An instance of the H3Error
|
|
113
119
|
*/
|
|
114
|
-
declare function createError(input: Partial<H3Error>): H3Error;
|
|
120
|
+
declare function createError(input: string | Partial<H3Error>): H3Error;
|
|
115
121
|
/**
|
|
116
122
|
* Receive an error and return the corresponding response.<br>
|
|
117
123
|
* H3 internally uses this function to handle unhandled errors.<br>
|
|
@@ -240,4 +246,4 @@ interface Router extends AddRouteShortcuts {
|
|
|
240
246
|
}
|
|
241
247
|
declare function createRouter(): Router;
|
|
242
248
|
|
|
243
|
-
export { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, 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 };
|
|
249
|
+
export { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3EventContext, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, 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
|
@@ -74,7 +74,7 @@ function handleCacheHeaders(event, opts) {
|
|
|
74
74
|
const cacheControls = ["public"].concat(opts.cacheControls || []);
|
|
75
75
|
let cacheMatched = false;
|
|
76
76
|
if (opts.maxAge !== void 0) {
|
|
77
|
-
|
|
77
|
+
cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
78
78
|
}
|
|
79
79
|
if (opts.modifiedTime) {
|
|
80
80
|
const modifiedTime = new Date(opts.modifiedTime);
|
|
@@ -175,14 +175,19 @@ class H3Error extends Error {
|
|
|
175
175
|
constructor() {
|
|
176
176
|
super(...arguments);
|
|
177
177
|
this.statusCode = 500;
|
|
178
|
-
this.
|
|
178
|
+
this.fatal = false;
|
|
179
|
+
this.unhandled = false;
|
|
180
|
+
this.statusMessage = "Internal Server Error";
|
|
179
181
|
}
|
|
180
182
|
}
|
|
181
183
|
function createError(input) {
|
|
184
|
+
if (typeof input === "string") {
|
|
185
|
+
return new H3Error(input);
|
|
186
|
+
}
|
|
182
187
|
if (input instanceof H3Error) {
|
|
183
188
|
return input;
|
|
184
189
|
}
|
|
185
|
-
const err = new H3Error(input.message ?? input.statusMessage);
|
|
190
|
+
const err = new H3Error(input.message ?? input.statusMessage, input.cause ? { cause: input.cause } : void 0);
|
|
186
191
|
if (input.statusCode) {
|
|
187
192
|
err.statusCode = input.statusCode;
|
|
188
193
|
}
|
|
@@ -192,6 +197,12 @@ function createError(input) {
|
|
|
192
197
|
if (input.data) {
|
|
193
198
|
err.data = input.data;
|
|
194
199
|
}
|
|
200
|
+
if (input.fatal !== void 0) {
|
|
201
|
+
err.fatal = input.fatal;
|
|
202
|
+
}
|
|
203
|
+
if (input.unhandled !== void 0) {
|
|
204
|
+
err.unhandled = input.unhandled;
|
|
205
|
+
}
|
|
195
206
|
return err;
|
|
196
207
|
}
|
|
197
208
|
function sendError(event, error, debug) {
|
|
@@ -365,14 +376,18 @@ function createApp(options = {}) {
|
|
|
365
376
|
const event = createEvent(req, res);
|
|
366
377
|
try {
|
|
367
378
|
await handler(event);
|
|
368
|
-
} catch (
|
|
379
|
+
} catch (_error) {
|
|
380
|
+
const error = createError(_error);
|
|
381
|
+
if (!isError(_error)) {
|
|
382
|
+
error.unhandled = true;
|
|
383
|
+
}
|
|
384
|
+
if (error.unhandled || error.fatal) {
|
|
385
|
+
console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
|
|
386
|
+
}
|
|
369
387
|
if (options.onError) {
|
|
370
|
-
await options.onError(
|
|
388
|
+
await options.onError(error, event);
|
|
371
389
|
} else {
|
|
372
|
-
|
|
373
|
-
console.error("[h3]", err);
|
|
374
|
-
}
|
|
375
|
-
await sendError(event, err, !!options.debug);
|
|
390
|
+
await sendError(event, error, !!options.debug);
|
|
376
391
|
}
|
|
377
392
|
}
|
|
378
393
|
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "h3",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.11",
|
|
4
4
|
"description": "Tiny JavaScript Server",
|
|
5
5
|
"repository": "unjs/h3",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
10
11
|
"import": "./dist/index.mjs",
|
|
11
12
|
"require": "./dist/index.cjs"
|
|
12
13
|
}
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
"cookie-es": "^0.5.0",
|
|
22
23
|
"destr": "^1.1.1",
|
|
23
24
|
"radix3": "^0.1.2",
|
|
24
|
-
"ufo": "^0.8.
|
|
25
|
+
"ufo": "^0.8.5"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"0x": "latest",
|
|
@@ -44,7 +45,7 @@
|
|
|
44
45
|
"unbuild": "latest",
|
|
45
46
|
"vitest": "latest"
|
|
46
47
|
},
|
|
47
|
-
"packageManager": "pnpm@7.
|
|
48
|
+
"packageManager": "pnpm@7.5.2",
|
|
48
49
|
"scripts": {
|
|
49
50
|
"build": "unbuild",
|
|
50
51
|
"dev": "vitest",
|