@visulima/error-handler 1.0.1 → 1.0.3
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/CHANGELOG.md +18 -0
- package/dist/error-handler/html-error-handler.js +7 -35
- package/dist/error-handler/json-error-handler.js +1 -31
- package/dist/error-handler/jsonapi-error-handler.js +1 -46
- package/dist/error-handler/jsonp-error-handler.js +1 -36
- package/dist/error-handler/problem-error-handler.js +1 -53
- package/dist/error-handler/text-error-handler.js +2 -27
- package/dist/error-handler/xml-error-handler.js +1 -45
- package/dist/handler/cli-handler.js +2 -172
- package/dist/handler/http/fetch-handler.js +1 -267
- package/dist/handler/http/node-handler.js +1 -17
- package/dist/index.js +1 -8
- package/dist/packem_shared/add-status-code-to-response-DOfo6_g6.js +1 -0
- package/dist/packem_shared/createNegotiatedErrorHandler-ElYcOlsu.js +1 -0
- package/dist/packem_shared/send-json-Cedv8-Bt.js +1 -0
- package/dist/packem_shared/set-error-headers-BWc7Sbh2.js +1 -0
- package/package.json +3 -3
- package/dist/packem_shared/add-status-code-to-response-DdfxTQsK.js +0 -17
- package/dist/packem_shared/createNegotiatedErrorHandler-Cd7yj67Z.js +0 -52
- package/dist/packem_shared/send-json-o-t1rNfw.js +0 -8
- package/dist/packem_shared/set-error-headers-B6ZeX5k4.js +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## @visulima/error-handler [1.0.3](https://github.com/visulima/visulima/compare/@visulima/error-handler@1.0.2...@visulima/error-handler@1.0.3) (2025-09-19)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* **deps:** update dependencies and improve build scripts ([1979067](https://github.com/visulima/visulima/commit/197906796481aeaad4c57f7bb207ea6d8a9e227b))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Dependencies
|
|
9
|
+
|
|
10
|
+
* **@visulima/error:** upgraded to 4.6.1
|
|
11
|
+
|
|
12
|
+
## @visulima/error-handler [1.0.2](https://github.com/visulima/visulima/compare/@visulima/error-handler@1.0.1...@visulima/error-handler@1.0.2) (2025-09-12)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Dependencies
|
|
16
|
+
|
|
17
|
+
* **@visulima/error:** upgraded to 4.6.0
|
|
18
|
+
|
|
1
19
|
## @visulima/error-handler [1.0.1](https://github.com/visulima/visulima/compare/@visulima/error-handler@1.0.0...@visulima/error-handler@1.0.1) (2025-09-12)
|
|
2
20
|
|
|
3
21
|
### Miscellaneous Chores
|
|
@@ -1,41 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
3
|
-
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
const htmlErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
7
|
-
return async (error, request, response) => {
|
|
8
|
-
addStatusCodeToResponse(response, error);
|
|
9
|
-
response.setHeader("content-type", "text/html; charset=utf-8");
|
|
10
|
-
const title = getReasonPhrase(response.statusCode) || "Error";
|
|
11
|
-
const nonceAttr = options.cspNonce ? ` nonce="${options.cspNonce}"` : "";
|
|
12
|
-
if (options.errorPage) {
|
|
13
|
-
const override = typeof options.errorPage === "function" ? await options.errorPage({
|
|
14
|
-
error,
|
|
15
|
-
request,
|
|
16
|
-
response,
|
|
17
|
-
reasonPhrase: title,
|
|
18
|
-
statusCode: response.statusCode
|
|
19
|
-
}) : options.errorPage;
|
|
20
|
-
if (override) {
|
|
21
|
-
response.end(override);
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
response.end(`<!DOCTYPE html>
|
|
1
|
+
var l=Object.defineProperty;var d=(e,r)=>l(e,"name",{value:r,configurable:!0});import{getReasonPhrase as c}from"http-status-codes";import{a as m}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";var g=Object.defineProperty,s=d((e,r)=>g(e,"name",{value:r,configurable:!0}),"n");const x=s((e={})=>async(r,n,t)=>{m(t,r),t.setHeader("content-type","text/html; charset=utf-8");const o=c(t.statusCode)||"Error",a=e.cspNonce?` nonce="${e.cspNonce}"`:"";if(e.errorPage){const i=typeof e.errorPage=="function"?await e.errorPage({error:r,request:n,response:t,reasonPhrase:o,statusCode:t.statusCode}):e.errorPage;if(i){t.end(i);return}}t.end(`<!DOCTYPE html>
|
|
26
2
|
<html lang="en">
|
|
27
3
|
<head>
|
|
28
4
|
<meta charset="utf-8">
|
|
29
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
30
6
|
|
|
31
|
-
<title>${
|
|
7
|
+
<title>${o}</title>
|
|
32
8
|
<meta name="robots" content="noindex">
|
|
33
9
|
|
|
34
|
-
<style${
|
|
10
|
+
<style${a}>
|
|
35
11
|
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}code{font-family:monospace,monospace;font-size:1em}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}code{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.border-r{border-right-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-xl{max-width:36rem}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.text-center{text-align:center}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tracking-wider{letter-spacing:.05em}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\\:rounded-lg{border-radius:.5rem}.sm\\:block{display:block}.sm\\:items-center{align-items:center}.sm\\:justify-start{justify-content:flex-start}.sm\\:justify-between{justify-content:space-between}.sm\\:h-20{height:5rem}.sm\\:ml-0{margin-left:0}.sm\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:pt-0{padding-top:0}.sm\\:text-left{text-align:left}.sm\\:text-right{text-align:right}}@media (min-width:768px){.md\\:border-t-0{border-top-width:0}.md\\:border-l{border-left-width:1px}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.dark\\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.dark\\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.dark\\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.dark\\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}}
|
|
36
12
|
</style>
|
|
37
13
|
|
|
38
|
-
<style${
|
|
14
|
+
<style${a}>
|
|
39
15
|
body {
|
|
40
16
|
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
41
17
|
}
|
|
@@ -46,18 +22,14 @@ const htmlErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
|
46
22
|
<div class="max-w-xl mx-auto sm:px-6 lg:px-8">
|
|
47
23
|
<div class="flex items-center justify-center">
|
|
48
24
|
<div class="px-6 text-lg text-gray-600 dark:text-gray-400 border-r border-gray-400 dark:border-gray-700 tracking-wider font-semibold">
|
|
49
|
-
${
|
|
25
|
+
${t.statusCode}
|
|
50
26
|
</div>
|
|
51
27
|
|
|
52
28
|
<div class="ml-4 text-lg text-gray-600 dark:text-gray-400 uppercase tracking-wider">
|
|
53
|
-
${
|
|
29
|
+
${o}
|
|
54
30
|
</div>
|
|
55
31
|
</div>
|
|
56
32
|
</div>
|
|
57
33
|
</div>
|
|
58
34
|
</body>
|
|
59
|
-
</html>`);
|
|
60
|
-
};
|
|
61
|
-
}, "htmlErrorHandler");
|
|
62
|
-
|
|
63
|
-
export { htmlErrorHandler };
|
|
35
|
+
</html>`)},"htmlErrorHandler");export{x as htmlErrorHandler};
|
|
@@ -1,31 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
3
|
-
import { s as sendJson } from '../packem_shared/send-json-o-t1rNfw.js';
|
|
4
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
5
|
-
|
|
6
|
-
var __defProp = Object.defineProperty;
|
|
7
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
-
const jsonErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
9
|
-
return async (error, request, response) => {
|
|
10
|
-
addStatusCodeToResponse(response, error);
|
|
11
|
-
setErrorHeaders(response, error);
|
|
12
|
-
const statusCode = response.statusCode;
|
|
13
|
-
const reasonPhrase = getReasonPhrase(statusCode) || "An error occurred";
|
|
14
|
-
if (options.formatter) {
|
|
15
|
-
const body = await options.formatter({ error, request, response, reasonPhrase, statusCode });
|
|
16
|
-
sendJson(response, body);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const expose = error.expose;
|
|
20
|
-
sendJson(response, {
|
|
21
|
-
statusCode,
|
|
22
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
23
|
-
error: reasonPhrase,
|
|
24
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
25
|
-
message: error.message || reasonPhrase,
|
|
26
|
-
...expose ? { stack: error.stack } : {}
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
}, "jsonErrorHandler");
|
|
30
|
-
|
|
31
|
-
export { jsonErrorHandler };
|
|
1
|
+
var p=Object.defineProperty;var a=(e,r)=>p(e,"name",{value:r,configurable:!0});import{getReasonPhrase as u}from"http-status-codes";import{a as f}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as n}from"../packem_shared/send-json-Cedv8-Bt.js";import{s as i}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var g=Object.defineProperty,l=a((e,r)=>g(e,"name",{value:r,configurable:!0}),"n");const P=l((e={})=>async(r,d,s)=>{f(s,r),i(s,r);const o=s.statusCode,t=u(o)||"An error occurred";if(e.formatter){const c=await e.formatter({error:r,request:d,response:s,reasonPhrase:t,statusCode:o});n(s,c);return}const m=r.expose;n(s,{statusCode:o,error:t,message:r.message||t,...m?{stack:r.stack}:{}})},"jsonErrorHandler");export{P as jsonErrorHandler};
|
|
@@ -1,46 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getReasonPhrase } from 'http-status-codes';
|
|
3
|
-
import tsJapi from 'ts-japi';
|
|
4
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
5
|
-
import { s as sendJson } from '../packem_shared/send-json-o-t1rNfw.js';
|
|
6
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
7
|
-
|
|
8
|
-
var __defProp = Object.defineProperty;
|
|
9
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
-
const defaultTitle = "An error occurred";
|
|
11
|
-
const jsonapiErrorHandler = /* @__PURE__ */ __name((error, _request, response) => {
|
|
12
|
-
addStatusCodeToResponse(response, error);
|
|
13
|
-
setErrorHeaders(response, error);
|
|
14
|
-
if (error instanceof tsJapi.JapiError || tsJapi.JapiError.isLikeJapiError(error)) {
|
|
15
|
-
const serializer = new tsJapi.ErrorSerializer();
|
|
16
|
-
sendJson(response, serializer.serialize(error));
|
|
17
|
-
} else if (isHttpError(error)) {
|
|
18
|
-
const statusCode = "statusCode" in error && typeof error.statusCode === "number" ? error.statusCode : "status" in error && typeof error.status === "number" ? error.status : response.statusCode;
|
|
19
|
-
const title = "title" in error && typeof error.title === "string" ? error.title : void 0;
|
|
20
|
-
const message = "message" in error && typeof error.message === "string" ? error.message : "";
|
|
21
|
-
sendJson(response, {
|
|
22
|
-
errors: [
|
|
23
|
-
{
|
|
24
|
-
code: statusCode ?? response.statusCode,
|
|
25
|
-
title: title || getReasonPhrase(statusCode) || defaultTitle,
|
|
26
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
27
|
-
detail: message
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
});
|
|
31
|
-
} else {
|
|
32
|
-
const { message } = error;
|
|
33
|
-
sendJson(response, {
|
|
34
|
-
errors: [
|
|
35
|
-
{
|
|
36
|
-
code: "500",
|
|
37
|
-
title: getReasonPhrase(response.statusCode) || defaultTitle,
|
|
38
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
39
|
-
detail: message
|
|
40
|
-
}
|
|
41
|
-
]
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}, "jsonapiErrorHandler");
|
|
45
|
-
|
|
46
|
-
export { jsonapiErrorHandler as default };
|
|
1
|
+
var u=Object.defineProperty;var i=(e,s)=>u(e,"name",{value:s,configurable:!0});import{isHttpError as f}from"http-errors";import{getReasonPhrase as n}from"http-status-codes";import a from"ts-japi";import{a as l}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as t}from"../packem_shared/send-json-Cedv8-Bt.js";import{s as c}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var g=Object.defineProperty,C=i((e,s)=>g(e,"name",{value:s,configurable:!0}),"n");const d="An error occurred",z=C((e,s,r)=>{if(l(r,e),c(r,e),e instanceof a.JapiError||a.JapiError.isLikeJapiError(e)){const o=new a.ErrorSerializer;t(r,o.serialize(e))}else if(f(e)){const o="statusCode"in e&&typeof e.statusCode=="number"?e.statusCode:"status"in e&&typeof e.status=="number"?e.status:r.statusCode,m="title"in e&&typeof e.title=="string"?e.title:void 0,p="message"in e&&typeof e.message=="string"?e.message:"";t(r,{errors:[{code:o??r.statusCode,title:m||n(o)||d,detail:p}]})}else{const{message:o}=e;t(r,{errors:[{code:"500",title:n(r.statusCode)||d,detail:o}]})}},"jsonapiErrorHandler");export{z as default};
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
3
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
const defaultCallbackParam = "callback";
|
|
8
|
-
const jsonpErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
9
|
-
return async (error, request, response) => {
|
|
10
|
-
addStatusCodeToResponse(response, error);
|
|
11
|
-
setErrorHeaders(response, error);
|
|
12
|
-
const statusCode = response.statusCode;
|
|
13
|
-
const reasonPhrase = getReasonPhrase(statusCode) || "An error occurred";
|
|
14
|
-
const url = new URL(request.url ?? "http://localhost", "http://localhost");
|
|
15
|
-
const callbackParamName = options.callbackParamName || defaultCallbackParam;
|
|
16
|
-
const callbackName = url.searchParams.get(callbackParamName) || "callback";
|
|
17
|
-
let payload;
|
|
18
|
-
if (options.formatter) {
|
|
19
|
-
payload = await options.formatter({ error, request, response, reasonPhrase, statusCode });
|
|
20
|
-
} else {
|
|
21
|
-
const expose = error.expose;
|
|
22
|
-
payload = {
|
|
23
|
-
statusCode,
|
|
24
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
25
|
-
error: reasonPhrase,
|
|
26
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
27
|
-
message: error.message || reasonPhrase,
|
|
28
|
-
...expose ? { stack: error.stack } : {}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
response.setHeader("content-type", "application/javascript; charset=utf-8");
|
|
32
|
-
response.end(`${callbackName}(${JSON.stringify(payload)});`);
|
|
33
|
-
};
|
|
34
|
-
}, "jsonpErrorHandler");
|
|
35
|
-
|
|
36
|
-
export { jsonpErrorHandler };
|
|
1
|
+
var i=Object.defineProperty;var n=(a,e)=>i(a,"name",{value:e,configurable:!0});import{getReasonPhrase as u}from"http-status-codes";import{a as f}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as h}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var g=Object.defineProperty,b=n((a,e)=>g(a,"name",{value:e,configurable:!0}),"c");const k="callback",C=b((a={})=>async(e,c,r)=>{f(r,e),h(r,e);const t=r.statusCode,s=u(t)||"An error occurred",l=new URL(c.url??"http://localhost","http://localhost"),p=a.callbackParamName||k,m=l.searchParams.get(p)||"callback";let o;if(a.formatter)o=await a.formatter({error:e,request:c,response:r,reasonPhrase:s,statusCode:t});else{const d=e.expose;o={statusCode:t,error:s,message:e.message||s,...d?{stack:e.stack}:{}}}r.setHeader("content-type","application/javascript; charset=utf-8"),r.end(`${m}(${JSON.stringify(o)});`)},"jsonpErrorHandler");export{C as jsonpErrorHandler};
|
|
@@ -1,53 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getReasonPhrase } from 'http-status-codes';
|
|
3
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
4
|
-
import { s as sendJson } from '../packem_shared/send-json-o-t1rNfw.js';
|
|
5
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
6
|
-
|
|
7
|
-
var __defProp = Object.defineProperty;
|
|
8
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
-
const defaultType = "about:blank";
|
|
10
|
-
const defaultTitle = "An error occurred";
|
|
11
|
-
const problemErrorHandler = /* @__PURE__ */ __name((error, _request, response) => {
|
|
12
|
-
const { message, stack } = error;
|
|
13
|
-
if (isHttpError(error)) {
|
|
14
|
-
const expose = "expose" in error ? error.expose : void 0;
|
|
15
|
-
const statusCode = "statusCode" in error && typeof error.statusCode === "number" ? error.statusCode : "status" in error && typeof error.status === "number" ? error.status : response.statusCode;
|
|
16
|
-
const title = "title" in error && typeof error.title === "string" ? error.title : void 0;
|
|
17
|
-
const type = "type" in error && typeof error.type === "string" ? error.type : void 0;
|
|
18
|
-
response.statusCode = statusCode;
|
|
19
|
-
setErrorHeaders(response, error);
|
|
20
|
-
sendJson(
|
|
21
|
-
response,
|
|
22
|
-
{
|
|
23
|
-
type: type || defaultType,
|
|
24
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
25
|
-
title: title || getReasonPhrase(statusCode) || defaultTitle,
|
|
26
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
27
|
-
status: statusCode,
|
|
28
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
29
|
-
detail: message,
|
|
30
|
-
...expose ? { trace: stack } : {}
|
|
31
|
-
},
|
|
32
|
-
"application/problem+json"
|
|
33
|
-
);
|
|
34
|
-
} else {
|
|
35
|
-
addStatusCodeToResponse(response, error);
|
|
36
|
-
sendJson(
|
|
37
|
-
response,
|
|
38
|
-
{
|
|
39
|
-
type: defaultType,
|
|
40
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
41
|
-
title: getReasonPhrase(response.statusCode) || defaultTitle,
|
|
42
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
43
|
-
status: response.statusCode,
|
|
44
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
45
|
-
detail: message,
|
|
46
|
-
...error.expose ? { trace: stack } : {}
|
|
47
|
-
},
|
|
48
|
-
"application/problem+json"
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
}, "problemErrorHandler");
|
|
52
|
-
|
|
53
|
-
export { problemErrorHandler as default };
|
|
1
|
+
var c=Object.defineProperty;var i=(e,o)=>c(e,"name",{value:o,configurable:!0});import{isHttpError as y}from"http-errors";import{getReasonPhrase as p}from"http-status-codes";import{a as b}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as n}from"../packem_shared/send-json-Cedv8-Bt.js";import{s as C}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var v=Object.defineProperty,g=i((e,o)=>v(e,"name",{value:o,configurable:!0}),"i");const d="about:blank",u="An error occurred",R=g((e,o,t)=>{const{message:r,stack:a}=e;if(y(e)){const l="expose"in e?e.expose:void 0,s="statusCode"in e&&typeof e.statusCode=="number"?e.statusCode:"status"in e&&typeof e.status=="number"?e.status:t.statusCode,m="title"in e&&typeof e.title=="string"?e.title:void 0,f="type"in e&&typeof e.type=="string"?e.type:void 0;t.statusCode=s,C(t,e),n(t,{type:f||d,title:m||p(s)||u,status:s,detail:r,...l?{trace:a}:{}},"application/problem+json")}else b(t,e),n(t,{type:d,title:p(t.statusCode)||u,status:t.statusCode,detail:r,...e.expose?{trace:a}:{}},"application/problem+json")},"problemErrorHandler");export{R as default};
|
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
3
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
1
|
+
var i=Object.defineProperty;var d=(t,e)=>i(t,"name",{value:e,configurable:!0});import{getReasonPhrase as p}from"http-status-codes";import{a as f}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as u}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var l=Object.defineProperty,x=d((t,e)=>l(t,"name",{value:e,configurable:!0}),"m");const h=x((t={})=>async(e,m,r)=>{f(r,e),u(r,e);const o=r.statusCode,s=p(o)||"Error";if(r.setHeader("content-type","text/plain; charset=utf-8"),t.formatter){const c=await t.formatter({error:e,request:m,response:r,reasonPhrase:s,statusCode:o});r.end(c);return}const a=e.message||s,n=e.expose?e.stack:void 0;r.end(n?`${a}
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
const textErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
8
|
-
return async (error, request, response) => {
|
|
9
|
-
addStatusCodeToResponse(response, error);
|
|
10
|
-
setErrorHeaders(response, error);
|
|
11
|
-
const statusCode = response.statusCode;
|
|
12
|
-
const reasonPhrase = getReasonPhrase(statusCode) || "Error";
|
|
13
|
-
response.setHeader("content-type", "text/plain; charset=utf-8");
|
|
14
|
-
if (options.formatter) {
|
|
15
|
-
const text = await options.formatter({ error, request, response, reasonPhrase, statusCode });
|
|
16
|
-
response.end(text);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const message = error.message || reasonPhrase;
|
|
20
|
-
const expose = error.expose;
|
|
21
|
-
const stack = expose ? error.stack : void 0;
|
|
22
|
-
response.end(stack ? `${message}
|
|
23
|
-
|
|
24
|
-
${stack}` : message);
|
|
25
|
-
};
|
|
26
|
-
}, "textErrorHandler");
|
|
27
|
-
|
|
28
|
-
export { textErrorHandler };
|
|
3
|
+
${n}`:a)},"textErrorHandler");export{h as textErrorHandler};
|
|
@@ -1,45 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { toXML } from 'jstoxml';
|
|
3
|
-
import { a as addStatusCodeToResponse } from '../packem_shared/add-status-code-to-response-DdfxTQsK.js';
|
|
4
|
-
import { s as setErrorHeaders } from '../packem_shared/set-error-headers-B6ZeX5k4.js';
|
|
5
|
-
|
|
6
|
-
var __defProp = Object.defineProperty;
|
|
7
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
-
const xmlErrorHandler = /* @__PURE__ */ __name((options = {}) => {
|
|
9
|
-
return async (error, request, response) => {
|
|
10
|
-
addStatusCodeToResponse(response, error);
|
|
11
|
-
setErrorHeaders(response, error);
|
|
12
|
-
const statusCode = response.statusCode;
|
|
13
|
-
const reasonPhrase = getReasonPhrase(statusCode) || "An error occurred";
|
|
14
|
-
let payload;
|
|
15
|
-
if (options.formatter) {
|
|
16
|
-
payload = await options.formatter({ error, request, response, reasonPhrase, statusCode });
|
|
17
|
-
} else {
|
|
18
|
-
const expose = error.expose;
|
|
19
|
-
payload = {
|
|
20
|
-
error: {
|
|
21
|
-
statusCode,
|
|
22
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
23
|
-
name: reasonPhrase,
|
|
24
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
25
|
-
message: error.message || reasonPhrase,
|
|
26
|
-
...expose ? { stack: error.stack } : {}
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
const xml = toXML(payload, {
|
|
31
|
-
header: options.toXml?.header ?? options.xmlHeader ?? true,
|
|
32
|
-
indent: options.toXml?.indent ?? " ",
|
|
33
|
-
...options.toXml?.attributeReplacements ? { attributeReplacements: options.toXml.attributeReplacements } : {},
|
|
34
|
-
...options.toXml?.attributeFilter ? { attributeFilter: options.toXml.attributeFilter } : {},
|
|
35
|
-
...options.toXml?.attributeExplicitTrue !== void 0 ? { attributeExplicitTrue: options.toXml.attributeExplicitTrue } : {},
|
|
36
|
-
...options.toXml?.contentMap ? { contentMap: options.toXml.contentMap } : {},
|
|
37
|
-
...options.toXml?.contentReplacements ? { contentReplacements: options.toXml.contentReplacements } : {},
|
|
38
|
-
...options.toXml?.selfCloseTags !== void 0 ? { selfCloseTags: options.toXml.selfCloseTags } : {}
|
|
39
|
-
});
|
|
40
|
-
response.setHeader("content-type", "application/xml; charset=utf-8");
|
|
41
|
-
response.end(xml);
|
|
42
|
-
};
|
|
43
|
-
}, "xmlErrorHandler");
|
|
44
|
-
|
|
45
|
-
export { xmlErrorHandler };
|
|
1
|
+
var c=Object.defineProperty;var l=(t,e)=>c(t,"name",{value:e,configurable:!0});import{getReasonPhrase as p}from"http-status-codes";import{toXML as u}from"jstoxml";import{a as d}from"../packem_shared/add-status-code-to-response-DOfo6_g6.js";import{s as X}from"../packem_shared/set-error-headers-BWc7Sbh2.js";var f=Object.defineProperty,b=l((t,e)=>f(t,"name",{value:e,configurable:!0}),"l");const E=b((t={})=>async(e,n,o)=>{d(o,e),X(o,e);const r=o.statusCode,a=p(r)||"An error occurred";let s;if(t.formatter)s=await t.formatter({error:e,request:n,response:o,reasonPhrase:a,statusCode:r});else{const i=e.expose;s={error:{statusCode:r,name:a,message:e.message||a,...i?{stack:e.stack}:{}}}}const m=u(s,{header:t.toXml?.header??t.xmlHeader??!0,indent:t.toXml?.indent??" ",...t.toXml?.attributeReplacements?{attributeReplacements:t.toXml.attributeReplacements}:{},...t.toXml?.attributeFilter?{attributeFilter:t.toXml.attributeFilter}:{},...t.toXml?.attributeExplicitTrue!==void 0?{attributeExplicitTrue:t.toXml.attributeExplicitTrue}:{},...t.toXml?.contentMap?{contentMap:t.toXml.contentMap}:{},...t.toXml?.contentReplacements?{contentReplacements:t.toXml.contentReplacements}:{},...t.toXml?.selfCloseTags!==void 0?{selfCloseTags:t.toXml.selfCloseTags}:{}});o.setHeader("content-type","application/xml; charset=utf-8"),o.end(m)},"xmlErrorHandler");export{E as xmlErrorHandler};
|
|
@@ -1,173 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { boxen } from '@visulima/boxen';
|
|
3
|
-
import { renderError } from '@visulima/error/error';
|
|
4
|
-
import { readFile } from 'node:fs/promises';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import { ruleBasedFinder, errorHintFinder } from '@visulima/error/solution';
|
|
1
|
+
var g=Object.defineProperty;var c=(e,r)=>g(e,"name",{value:r,configurable:!0});import{parseStacktrace as b}from"@visulima/error/stacktrace";import{boxen as x}from"@visulima/boxen";import{renderError as j}from"@visulima/error/error";import{readFile as v}from"node:fs/promises";import{fileURLToPath as y}from"node:url";import{ruleBasedFinder as h,errorHintFinder as w}from"@visulima/error/solution";var O=Object.defineProperty,$=c((e,r)=>O(e,"name",{value:r,configurable:!0}),"r");const A=["cjs","mjs"],F=["mdoc"],B=$(e=>{const r=(e.split("?")[0]??e).split(".").pop()?.toLowerCase();if(!r||A.includes(r))return"javascript";if(F.includes(r))return"markdown";switch(r){case"js":return"javascript";case"json":return"json";case"json5":return"json5";case"jsonc":return"jsonc";case"jsx":return"jsx";case"sql":return"sql";case"ts":return"typescript";case"tsx":return"tsx";case"xml":return"xml";case"md":return"markdown";case"mdx":return"mdx";default:return"javascript"}},"findLanguageBasedOnExtension");var P=Object.defineProperty,k=c((e,r)=>P(e,"name",{value:r,configurable:!0}),"o$1");const u=new Map,H=k(async e=>{if(/^(?:http|https|file|data):/.test(e)){if(u.has(e))return u.get(e);if(e.startsWith("file:"))try{const r=y(e),t=await v(r,"utf8");return u.set(e,t),t}catch(r){console.log(r);return}try{const r=await fetch(e);if(!r.ok)return;const t=await r.text();return u.set(e,t),t}catch(r){console.log(r);return}}},"getFileSource");var L=Object.defineProperty,f=c((e,r)=>L(e,"name",{value:r,configurable:!0}),"d");const S=f(e=>e.replace(/^\s*#+\s*/,"").trim(),"sanitizeTitle"),T=f(async(e,r,t=!1)=>{const o=[...r,h,w],n=b(e,{frameLimit:1})[0]??{};for await(const i of o.sort((a,s)=>a.priority-s.priority)){const{handle:a,name:s}=i;if(t&&console.debug(`Running solution finder: ${s}`),typeof a!="function")continue;const l=await a(e,{file:n.file??"",language:B(n.file??""),line:n.line??0,snippet:n.file?await H(n.file):""});if(l)return l}},"runSolutionFinders"),d=f(async(e,r)=>{const{solutionFinders:t=[],solutionTitle:o,color:n,debug:i=!1,...a}=r,s=j(e,{...a,...n?.codeFrame}),l=await T(e,t,i);if(!l)return{errorAnsi:s,solutionBox:void 0};const p=S(l.header??o??"A possible solution to this error"),m=x(l.body,{borderStyle:"round",padding:{top:1,right:2,bottom:1,left:2},margin:{top:0,right:0,bottom:0,left:0},headerText:`💡 ${p}`,headerAlignment:"left",textAlignment:"left",...n?.boxen});return{errorAnsi:s,solutionBox:m}},"buildOutput"),q=f(async(e,r={})=>{const{logger:t=console,...o}=r,{errorAnsi:n,solutionBox:i}=await d(e,o);t.error(n),i&&(t.log(""),t.log(i))},"terminalOutput");var C=Object.defineProperty,E=c((e,r)=>C(e,"name",{value:r,configurable:!0}),"o");const I=E(async(e,r={})=>{const{errorAnsi:t,solutionBox:o}=await d(e,r);return o===void 0?t:`${t}
|
|
7
2
|
|
|
8
|
-
|
|
9
|
-
var __name$3 = (target, value) => __defProp$3(target, "name", { value, configurable: true });
|
|
10
|
-
const ALTERNATIVE_JS_EXTS = ["cjs", "mjs"];
|
|
11
|
-
const ALTERNATIVE_MD_EXTS = ["mdoc"];
|
|
12
|
-
const findLanguageBasedOnExtension = /* @__PURE__ */ __name$3((file) => {
|
|
13
|
-
const cleaned = file.split("?")[0] ?? file;
|
|
14
|
-
const extension = cleaned.split(".").pop()?.toLowerCase();
|
|
15
|
-
if (!extension) {
|
|
16
|
-
return "javascript";
|
|
17
|
-
}
|
|
18
|
-
if (ALTERNATIVE_JS_EXTS.includes(extension)) {
|
|
19
|
-
return "javascript";
|
|
20
|
-
}
|
|
21
|
-
if (ALTERNATIVE_MD_EXTS.includes(extension)) {
|
|
22
|
-
return "markdown";
|
|
23
|
-
}
|
|
24
|
-
switch (extension) {
|
|
25
|
-
case "js": {
|
|
26
|
-
return "javascript";
|
|
27
|
-
}
|
|
28
|
-
case "json": {
|
|
29
|
-
return "json";
|
|
30
|
-
}
|
|
31
|
-
case "json5": {
|
|
32
|
-
return "json5";
|
|
33
|
-
}
|
|
34
|
-
case "jsonc": {
|
|
35
|
-
return "jsonc";
|
|
36
|
-
}
|
|
37
|
-
case "jsx": {
|
|
38
|
-
return "jsx";
|
|
39
|
-
}
|
|
40
|
-
case "sql": {
|
|
41
|
-
return "sql";
|
|
42
|
-
}
|
|
43
|
-
case "ts": {
|
|
44
|
-
return "typescript";
|
|
45
|
-
}
|
|
46
|
-
case "tsx": {
|
|
47
|
-
return "tsx";
|
|
48
|
-
}
|
|
49
|
-
case "xml": {
|
|
50
|
-
return "xml";
|
|
51
|
-
}
|
|
52
|
-
case "md": {
|
|
53
|
-
return "markdown";
|
|
54
|
-
}
|
|
55
|
-
case "mdx": {
|
|
56
|
-
return "mdx";
|
|
57
|
-
}
|
|
58
|
-
default: {
|
|
59
|
-
return "javascript";
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}, "findLanguageBasedOnExtension");
|
|
63
|
-
|
|
64
|
-
var __defProp$2 = Object.defineProperty;
|
|
65
|
-
var __name$2 = (target, value) => __defProp$2(target, "name", { value, configurable: true });
|
|
66
|
-
const cache = /* @__PURE__ */ new Map();
|
|
67
|
-
const getFileSource = /* @__PURE__ */ __name$2(async (file) => {
|
|
68
|
-
if (!/^(?:http|https|file|data):/.test(file)) {
|
|
69
|
-
return void 0;
|
|
70
|
-
}
|
|
71
|
-
if (cache.has(file)) {
|
|
72
|
-
return cache.get(file);
|
|
73
|
-
}
|
|
74
|
-
if (file.startsWith("file:")) {
|
|
75
|
-
try {
|
|
76
|
-
const path = fileURLToPath(file);
|
|
77
|
-
const source = await readFile(path, "utf8");
|
|
78
|
-
cache.set(file, source);
|
|
79
|
-
return source;
|
|
80
|
-
} catch (error) {
|
|
81
|
-
console.log(error);
|
|
82
|
-
return void 0;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
const response = await fetch(file);
|
|
87
|
-
if (!response.ok) {
|
|
88
|
-
return void 0;
|
|
89
|
-
}
|
|
90
|
-
const source = await response.text();
|
|
91
|
-
cache.set(file, source);
|
|
92
|
-
return source;
|
|
93
|
-
} catch (error) {
|
|
94
|
-
console.log(error);
|
|
95
|
-
return void 0;
|
|
96
|
-
}
|
|
97
|
-
}, "getFileSource");
|
|
98
|
-
|
|
99
|
-
var __defProp$1 = Object.defineProperty;
|
|
100
|
-
var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true });
|
|
101
|
-
const sanitizeTitle = /* @__PURE__ */ __name$1((title) => title.replace(/^\s*#+\s*/, "").trim(), "sanitizeTitle");
|
|
102
|
-
const runSolutionFinders = /* @__PURE__ */ __name$1(async (error, solutionFinders, debug = false) => {
|
|
103
|
-
const candidates = [...solutionFinders, ruleBasedFinder, errorHintFinder];
|
|
104
|
-
const firstTrace = parseStacktrace(error, { frameLimit: 1 })[0] ?? {};
|
|
105
|
-
for await (const handler of candidates.sort((a, b) => a.priority - b.priority)) {
|
|
106
|
-
const { handle, name } = handler;
|
|
107
|
-
if (debug) {
|
|
108
|
-
console.debug(`Running solution finder: ${name}`);
|
|
109
|
-
}
|
|
110
|
-
if (typeof handle !== "function") {
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
const hint = await handle(error, {
|
|
114
|
-
file: firstTrace.file ?? "",
|
|
115
|
-
language: findLanguageBasedOnExtension(firstTrace.file ?? ""),
|
|
116
|
-
line: firstTrace.line ?? 0,
|
|
117
|
-
snippet: firstTrace.file ? await getFileSource(firstTrace.file) : ""
|
|
118
|
-
});
|
|
119
|
-
if (hint) {
|
|
120
|
-
return hint;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return void 0;
|
|
124
|
-
}, "runSolutionFinders");
|
|
125
|
-
const buildOutput = /* @__PURE__ */ __name$1(async (error, options) => {
|
|
126
|
-
const { solutionFinders = [], solutionTitle, color, debug = false, ...renderOptions } = options;
|
|
127
|
-
const errorAnsi = renderError(error, {
|
|
128
|
-
...renderOptions,
|
|
129
|
-
...color?.codeFrame
|
|
130
|
-
});
|
|
131
|
-
const hint = await runSolutionFinders(error, solutionFinders, debug);
|
|
132
|
-
if (!hint) {
|
|
133
|
-
return { errorAnsi, solutionBox: void 0 };
|
|
134
|
-
}
|
|
135
|
-
const header = sanitizeTitle(hint.header ?? solutionTitle ?? "A possible solution to this error");
|
|
136
|
-
const solutionBox = boxen(hint.body, {
|
|
137
|
-
borderStyle: "round",
|
|
138
|
-
padding: { top: 1, right: 2, bottom: 1, left: 2 },
|
|
139
|
-
margin: { top: 0, right: 0, bottom: 0, left: 0 },
|
|
140
|
-
headerText: `💡 ${header}`,
|
|
141
|
-
headerAlignment: "left",
|
|
142
|
-
textAlignment: "left",
|
|
143
|
-
...color?.boxen
|
|
144
|
-
});
|
|
145
|
-
return {
|
|
146
|
-
errorAnsi,
|
|
147
|
-
solutionBox
|
|
148
|
-
};
|
|
149
|
-
}, "buildOutput");
|
|
150
|
-
const terminalOutput = /* @__PURE__ */ __name$1(async (error, options = {}) => {
|
|
151
|
-
const { logger = console, ...rest } = options;
|
|
152
|
-
const { errorAnsi, solutionBox } = await buildOutput(error, rest);
|
|
153
|
-
logger.error(errorAnsi);
|
|
154
|
-
if (solutionBox) {
|
|
155
|
-
logger.log("");
|
|
156
|
-
logger.log(solutionBox);
|
|
157
|
-
}
|
|
158
|
-
}, "terminalOutput");
|
|
159
|
-
|
|
160
|
-
var __defProp = Object.defineProperty;
|
|
161
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
162
|
-
const ansiHandler = /* @__PURE__ */ __name(async (error, options = {}) => {
|
|
163
|
-
const { errorAnsi, solutionBox } = await buildOutput(error, options);
|
|
164
|
-
if (solutionBox === void 0) {
|
|
165
|
-
return errorAnsi;
|
|
166
|
-
}
|
|
167
|
-
return `${errorAnsi}
|
|
168
|
-
|
|
169
|
-
${solutionBox}`;
|
|
170
|
-
}, "ansiHandler");
|
|
171
|
-
const cliHandler = terminalOutput;
|
|
172
|
-
|
|
173
|
-
export { ansiHandler, cliHandler };
|
|
3
|
+
${o}`},"ansiHandler"),J=q;export{I as ansiHandler,J as cliHandler};
|
|
@@ -1,267 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import jsonapiErrorHandler from '../../error-handler/jsonapi-error-handler.js';
|
|
3
|
-
import problemErrorHandler from '../../error-handler/problem-error-handler.js';
|
|
4
|
-
import { textErrorHandler } from '../../error-handler/text-error-handler.js';
|
|
5
|
-
import { jsonErrorHandler } from '../../error-handler/json-error-handler.js';
|
|
6
|
-
import { jsonpErrorHandler } from '../../error-handler/jsonp-error-handler.js';
|
|
7
|
-
import { xmlErrorHandler } from '../../error-handler/xml-error-handler.js';
|
|
8
|
-
|
|
9
|
-
var __defProp$2 = Object.defineProperty;
|
|
10
|
-
var __name$2 = (target, value) => __defProp$2(target, "name", { value, configurable: true });
|
|
11
|
-
class MockServerResponse {
|
|
12
|
-
static {
|
|
13
|
-
__name$2(this, "MockServerResponse");
|
|
14
|
-
}
|
|
15
|
-
statusCode = 200;
|
|
16
|
-
statusMessage = "";
|
|
17
|
-
headers = {};
|
|
18
|
-
headersSent = false;
|
|
19
|
-
writable = true;
|
|
20
|
-
finished = false;
|
|
21
|
-
writableEnded = false;
|
|
22
|
-
writableFinished = false;
|
|
23
|
-
writableHighWaterMark = 16384;
|
|
24
|
-
writableLength = 0;
|
|
25
|
-
destroyed = false;
|
|
26
|
-
writableCorked = 0;
|
|
27
|
-
readable = false;
|
|
28
|
-
readableHighWaterMark = 16384;
|
|
29
|
-
readableLength = 0;
|
|
30
|
-
errored = null;
|
|
31
|
-
closed = false;
|
|
32
|
-
readableAborted = false;
|
|
33
|
-
readableDidRead = false;
|
|
34
|
-
readableEncoding = null;
|
|
35
|
-
readableEnded = false;
|
|
36
|
-
readableFlowing = null;
|
|
37
|
-
_events;
|
|
38
|
-
_eventsCount = 0;
|
|
39
|
-
_maxListeners;
|
|
40
|
-
body = "";
|
|
41
|
-
setHeader(name, value) {
|
|
42
|
-
this.headers[name.toLowerCase()] = value;
|
|
43
|
-
return this;
|
|
44
|
-
}
|
|
45
|
-
getHeader(name) {
|
|
46
|
-
return this.headers[name.toLowerCase()];
|
|
47
|
-
}
|
|
48
|
-
getHeaders() {
|
|
49
|
-
return { ...this.headers };
|
|
50
|
-
}
|
|
51
|
-
getHeaderNames() {
|
|
52
|
-
return Object.keys(this.headers);
|
|
53
|
-
}
|
|
54
|
-
hasHeader(name) {
|
|
55
|
-
return name.toLowerCase() in this.headers;
|
|
56
|
-
}
|
|
57
|
-
removeHeader(name) {
|
|
58
|
-
delete this.headers[name.toLowerCase()];
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
writeHead(statusCode, statusMessage, headers) {
|
|
62
|
-
this.statusCode = statusCode;
|
|
63
|
-
if (typeof statusMessage === "string") {
|
|
64
|
-
this.statusMessage = statusMessage;
|
|
65
|
-
}
|
|
66
|
-
if (typeof statusMessage === "object") {
|
|
67
|
-
headers = statusMessage;
|
|
68
|
-
}
|
|
69
|
-
if (headers) {
|
|
70
|
-
Object.assign(this.headers, headers);
|
|
71
|
-
}
|
|
72
|
-
return this;
|
|
73
|
-
}
|
|
74
|
-
write(chunk) {
|
|
75
|
-
this.body += chunk.toString();
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
end(data, encoding, cb) {
|
|
79
|
-
if (data) {
|
|
80
|
-
this.body += data.toString();
|
|
81
|
-
}
|
|
82
|
-
this.finished = true;
|
|
83
|
-
return this;
|
|
84
|
-
}
|
|
85
|
-
flushHeaders() {
|
|
86
|
-
this.headersSent = true;
|
|
87
|
-
}
|
|
88
|
-
// Stub methods for interface compliance
|
|
89
|
-
addListener = /* @__PURE__ */ __name$2(() => this, "addListener");
|
|
90
|
-
on = /* @__PURE__ */ __name$2(() => this, "on");
|
|
91
|
-
once = /* @__PURE__ */ __name$2(() => this, "once");
|
|
92
|
-
removeListener = /* @__PURE__ */ __name$2(() => this, "removeListener");
|
|
93
|
-
off = /* @__PURE__ */ __name$2(() => this, "off");
|
|
94
|
-
removeAllListeners = /* @__PURE__ */ __name$2(() => this, "removeAllListeners");
|
|
95
|
-
setMaxListeners = /* @__PURE__ */ __name$2(() => this, "setMaxListeners");
|
|
96
|
-
getMaxListeners = /* @__PURE__ */ __name$2(() => 10, "getMaxListeners");
|
|
97
|
-
listeners = /* @__PURE__ */ __name$2(() => [], "listeners");
|
|
98
|
-
rawListeners = /* @__PURE__ */ __name$2(() => [], "rawListeners");
|
|
99
|
-
emit = /* @__PURE__ */ __name$2(() => false, "emit");
|
|
100
|
-
eventNames = /* @__PURE__ */ __name$2(() => [], "eventNames");
|
|
101
|
-
listenerCount = /* @__PURE__ */ __name$2(() => 0, "listenerCount");
|
|
102
|
-
prependListener = /* @__PURE__ */ __name$2(() => this, "prependListener");
|
|
103
|
-
prependOnceListener = /* @__PURE__ */ __name$2(() => this, "prependOnceListener");
|
|
104
|
-
// Additional methods
|
|
105
|
-
cork = /* @__PURE__ */ __name$2(() => {
|
|
106
|
-
}, "cork");
|
|
107
|
-
uncork = /* @__PURE__ */ __name$2(() => {
|
|
108
|
-
}, "uncork");
|
|
109
|
-
destroy = /* @__PURE__ */ __name$2(() => this, "destroy");
|
|
110
|
-
read = /* @__PURE__ */ __name$2(() => null, "read");
|
|
111
|
-
setEncoding = /* @__PURE__ */ __name$2(() => this, "setEncoding");
|
|
112
|
-
pause = /* @__PURE__ */ __name$2(() => this, "pause");
|
|
113
|
-
resume = /* @__PURE__ */ __name$2(() => this, "resume");
|
|
114
|
-
isPaused = /* @__PURE__ */ __name$2(() => false, "isPaused");
|
|
115
|
-
destroySoon = /* @__PURE__ */ __name$2(() => this, "destroySoon");
|
|
116
|
-
pipe = /* @__PURE__ */ __name$2(() => ({}), "pipe");
|
|
117
|
-
unpipe = /* @__PURE__ */ __name$2(() => this, "unpipe");
|
|
118
|
-
unshift = /* @__PURE__ */ __name$2(() => {
|
|
119
|
-
}, "unshift");
|
|
120
|
-
wrap = /* @__PURE__ */ __name$2(() => this, "wrap");
|
|
121
|
-
setTimeout = /* @__PURE__ */ __name$2(() => this, "setTimeout");
|
|
122
|
-
assignSocket = /* @__PURE__ */ __name$2(() => {
|
|
123
|
-
}, "assignSocket");
|
|
124
|
-
detachSocket = /* @__PURE__ */ __name$2(() => {
|
|
125
|
-
}, "detachSocket");
|
|
126
|
-
writeContinue = /* @__PURE__ */ __name$2(() => {
|
|
127
|
-
}, "writeContinue");
|
|
128
|
-
writeEarlyHints = /* @__PURE__ */ __name$2(() => {
|
|
129
|
-
}, "writeEarlyHints");
|
|
130
|
-
sendDate = true;
|
|
131
|
-
strictContentLength = false;
|
|
132
|
-
chunkedEncoding = false;
|
|
133
|
-
shouldKeepAlive = true;
|
|
134
|
-
useChunkedEncodingByDefault = true;
|
|
135
|
-
_hasBody = true;
|
|
136
|
-
_trailer = "";
|
|
137
|
-
connection = null;
|
|
138
|
-
socket = null;
|
|
139
|
-
}
|
|
140
|
-
const fetchHtmlErrorHandler = /* @__PURE__ */ __name$2((options = {}) => {
|
|
141
|
-
const nodeHandler = htmlErrorHandler(options);
|
|
142
|
-
return async (error, request) => {
|
|
143
|
-
const mockReq = {
|
|
144
|
-
url: request.url,
|
|
145
|
-
method: request.method,
|
|
146
|
-
headers: Object.fromEntries(Array.from(request.headers.entries()))
|
|
147
|
-
};
|
|
148
|
-
const mockRes = new MockServerResponse();
|
|
149
|
-
await nodeHandler(error, mockReq, mockRes);
|
|
150
|
-
const contentType = mockRes.getHeader("content-type") || "text/html; charset=utf-8";
|
|
151
|
-
return new Response(mockRes.body, {
|
|
152
|
-
status: mockRes.statusCode,
|
|
153
|
-
headers: {
|
|
154
|
-
"content-type": contentType,
|
|
155
|
-
...mockRes.headers
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
};
|
|
159
|
-
}, "fetchHtmlErrorHandler");
|
|
160
|
-
|
|
161
|
-
var __defProp$1 = Object.defineProperty;
|
|
162
|
-
var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true });
|
|
163
|
-
const negotiateContentType = /* @__PURE__ */ __name$1((acceptHeader) => {
|
|
164
|
-
if (!acceptHeader) return "text/html";
|
|
165
|
-
const accept = acceptHeader.toLowerCase();
|
|
166
|
-
if (accept.includes("text/html")) return "text/html";
|
|
167
|
-
if (accept.includes("application/vnd.api+json")) return "application/vnd.api+json";
|
|
168
|
-
if (accept.includes("application/problem+json")) return "application/problem+json";
|
|
169
|
-
if (accept.includes("application/json")) return "application/json";
|
|
170
|
-
if (accept.includes("text/plain")) return "text/plain";
|
|
171
|
-
if (accept.includes("application/javascript") || accept.includes("text/javascript")) return "application/javascript";
|
|
172
|
-
if (accept.includes("application/xml") || accept.includes("text/xml")) return "application/xml";
|
|
173
|
-
return "text/html";
|
|
174
|
-
}, "negotiateContentType");
|
|
175
|
-
const adaptErrorHandlerToFetch = /* @__PURE__ */ __name$1((nodeHandler) => {
|
|
176
|
-
return async (error, request) => {
|
|
177
|
-
const mockReq = {
|
|
178
|
-
url: request.url,
|
|
179
|
-
method: request.method,
|
|
180
|
-
headers: Object.fromEntries(request.headers.entries())
|
|
181
|
-
};
|
|
182
|
-
const mockRes = {
|
|
183
|
-
statusCode: 200,
|
|
184
|
-
headers: {},
|
|
185
|
-
_body: "",
|
|
186
|
-
setHeader(name, value) {
|
|
187
|
-
this.headers[name.toLowerCase()] = value;
|
|
188
|
-
},
|
|
189
|
-
getHeader(name) {
|
|
190
|
-
return this.headers[name.toLowerCase()];
|
|
191
|
-
},
|
|
192
|
-
getHeaders() {
|
|
193
|
-
return { ...this.headers };
|
|
194
|
-
},
|
|
195
|
-
writeHead(statusCode) {
|
|
196
|
-
this.statusCode = statusCode;
|
|
197
|
-
},
|
|
198
|
-
write(chunk) {
|
|
199
|
-
this._body += chunk.toString();
|
|
200
|
-
},
|
|
201
|
-
end(data) {
|
|
202
|
-
if (data) {
|
|
203
|
-
this._body += data.toString();
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
flushHeaders() {
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
await nodeHandler(error, mockReq, mockRes);
|
|
210
|
-
const headers = {};
|
|
211
|
-
for (const [key, value] of Object.entries(mockRes.headers)) {
|
|
212
|
-
if (Array.isArray(value)) {
|
|
213
|
-
headers[key] = value.join(", ");
|
|
214
|
-
} else {
|
|
215
|
-
headers[key] = String(value);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return new Response(mockRes._body, {
|
|
219
|
-
status: mockRes.statusCode,
|
|
220
|
-
headers
|
|
221
|
-
});
|
|
222
|
-
};
|
|
223
|
-
}, "adaptErrorHandlerToFetch");
|
|
224
|
-
const createFetchNegotiatedErrorHandler = /* @__PURE__ */ __name$1((errorHandlers, showTrace, defaultHtmlHandler) => async (error, request) => {
|
|
225
|
-
const accept = request.headers.get("accept");
|
|
226
|
-
const chosenType = negotiateContentType(accept);
|
|
227
|
-
let fetchErrorHandler = defaultHtmlHandler || adaptErrorHandlerToFetch(problemErrorHandler);
|
|
228
|
-
if (chosenType === "text/html" && defaultHtmlHandler) {
|
|
229
|
-
fetchErrorHandler = defaultHtmlHandler;
|
|
230
|
-
} else if (chosenType === "application/vnd.api+json") {
|
|
231
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(jsonapiErrorHandler);
|
|
232
|
-
} else if (chosenType === "application/problem+json") {
|
|
233
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(problemErrorHandler);
|
|
234
|
-
} else if (chosenType === "application/json") {
|
|
235
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(jsonErrorHandler());
|
|
236
|
-
} else if (chosenType === "text/plain") {
|
|
237
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(textErrorHandler());
|
|
238
|
-
} else if (chosenType === "application/javascript") {
|
|
239
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(jsonpErrorHandler());
|
|
240
|
-
} else if (chosenType === "application/xml") {
|
|
241
|
-
fetchErrorHandler = adaptErrorHandlerToFetch(xmlErrorHandler());
|
|
242
|
-
}
|
|
243
|
-
for (const { handler, regex } of errorHandlers) {
|
|
244
|
-
const headerStr = accept ?? "";
|
|
245
|
-
if (regex.test(headerStr)) {
|
|
246
|
-
fetchErrorHandler = handler;
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
error.expose = showTrace;
|
|
251
|
-
return fetchErrorHandler(error, request);
|
|
252
|
-
}, "createFetchNegotiatedErrorHandler");
|
|
253
|
-
|
|
254
|
-
var __defProp = Object.defineProperty;
|
|
255
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
256
|
-
const fetchHandler = /* @__PURE__ */ __name(async (error, options = {}) => {
|
|
257
|
-
const defaultHtml = fetchHtmlErrorHandler(options);
|
|
258
|
-
const negotiated = createFetchNegotiatedErrorHandler(options.extraHandlers ?? [], options.showTrace ?? true, defaultHtml);
|
|
259
|
-
return async (request) => {
|
|
260
|
-
if (options?.onError) {
|
|
261
|
-
await options.onError(error, request);
|
|
262
|
-
}
|
|
263
|
-
return negotiated(error, request);
|
|
264
|
-
};
|
|
265
|
-
}, "fetchHandler");
|
|
266
|
-
|
|
267
|
-
export { fetchHandler as default };
|
|
1
|
+
var b=Object.defineProperty;var h=(s,e)=>b(s,"name",{value:e,configurable:!0});import{htmlErrorHandler as g}from"../../error-handler/html-error-handler.js";import y from"../../error-handler/jsonapi-error-handler.js";import u from"../../error-handler/problem-error-handler.js";import{textErrorHandler as w}from"../../error-handler/text-error-handler.js";import{jsonErrorHandler as H}from"../../error-handler/json-error-handler.js";import{jsonpErrorHandler as v}from"../../error-handler/jsonp-error-handler.js";import{xmlErrorHandler as L}from"../../error-handler/xml-error-handler.js";var j=Object.defineProperty,t=h((s,e)=>j(s,"name",{value:e,configurable:!0}),"e");class x{static{h(this,"u")}static{t(this,"MockServerResponse")}statusCode=200;statusMessage="";headers={};headersSent=!1;writable=!0;finished=!1;writableEnded=!1;writableFinished=!1;writableHighWaterMark=16384;writableLength=0;destroyed=!1;writableCorked=0;readable=!1;readableHighWaterMark=16384;readableLength=0;errored=null;closed=!1;readableAborted=!1;readableDidRead=!1;readableEncoding=null;readableEnded=!1;readableFlowing=null;_events;_eventsCount=0;_maxListeners;body="";setHeader(e,a){return this.headers[e.toLowerCase()]=a,this}getHeader(e){return this.headers[e.toLowerCase()]}getHeaders(){return{...this.headers}}getHeaderNames(){return Object.keys(this.headers)}hasHeader(e){return e.toLowerCase()in this.headers}removeHeader(e){return delete this.headers[e.toLowerCase()],this}writeHead(e,a,n){return this.statusCode=e,typeof a=="string"&&(this.statusMessage=a),typeof a=="object"&&(n=a),n&&Object.assign(this.headers,n),this}write(e){return this.body+=e.toString(),!0}end(e,a,n){return e&&(this.body+=e.toString()),this.finished=!0,this}flushHeaders(){this.headersSent=!0}addListener=t(()=>this,"addListener");on=t(()=>this,"on");once=t(()=>this,"once");removeListener=t(()=>this,"removeListener");off=t(()=>this,"off");removeAllListeners=t(()=>this,"removeAllListeners");setMaxListeners=t(()=>this,"setMaxListeners");getMaxListeners=t(()=>10,"getMaxListeners");listeners=t(()=>[],"listeners");rawListeners=t(()=>[],"rawListeners");emit=t(()=>!1,"emit");eventNames=t(()=>[],"eventNames");listenerCount=t(()=>0,"listenerCount");prependListener=t(()=>this,"prependListener");prependOnceListener=t(()=>this,"prependOnceListener");cork=t(()=>{},"cork");uncork=t(()=>{},"uncork");destroy=t(()=>this,"destroy");read=t(()=>null,"read");setEncoding=t(()=>this,"setEncoding");pause=t(()=>this,"pause");resume=t(()=>this,"resume");isPaused=t(()=>!1,"isPaused");destroySoon=t(()=>this,"destroySoon");pipe=t(()=>({}),"pipe");unpipe=t(()=>this,"unpipe");unshift=t(()=>{},"unshift");wrap=t(()=>this,"wrap");setTimeout=t(()=>this,"setTimeout");assignSocket=t(()=>{},"assignSocket");detachSocket=t(()=>{},"detachSocket");writeContinue=t(()=>{},"writeContinue");writeEarlyHints=t(()=>{},"writeEarlyHints");sendDate=!0;strictContentLength=!1;chunkedEncoding=!1;shouldKeepAlive=!0;useChunkedEncodingByDefault=!0;_hasBody=!0;_trailer="";connection=null;socket=null}const C=t((s={})=>{const e=g(s);return async(a,n)=>{const o={url:n.url,method:n.method,headers:Object.fromEntries(Array.from(n.headers.entries()))},d=new x;await e(a,o,d);const r=d.getHeader("content-type")||"text/html; charset=utf-8";return new Response(d.body,{status:d.statusCode,headers:{"content-type":r,...d.headers}})}},"fetchHtmlErrorHandler");var E=Object.defineProperty,c=h((s,e)=>E(s,"name",{value:e,configurable:!0}),"l");const k=c(s=>{if(!s)return"text/html";const e=s.toLowerCase();return e.includes("text/html")?"text/html":e.includes("application/vnd.api+json")?"application/vnd.api+json":e.includes("application/problem+json")?"application/problem+json":e.includes("application/json")?"application/json":e.includes("text/plain")?"text/plain":e.includes("application/javascript")||e.includes("text/javascript")?"application/javascript":e.includes("application/xml")||e.includes("text/xml")?"application/xml":"text/html"},"negotiateContentType"),l=c(s=>async(e,a)=>{const n={url:a.url,method:a.method,headers:Object.fromEntries(a.headers.entries())},o={statusCode:200,headers:{},_body:"",setHeader(r,i){this.headers[r.toLowerCase()]=i},getHeader(r){return this.headers[r.toLowerCase()]},getHeaders(){return{...this.headers}},writeHead(r){this.statusCode=r},write(r){this._body+=r.toString()},end(r){r&&(this._body+=r.toString())},flushHeaders(){}};await s(e,n,o);const d={};for(const[r,i]of Object.entries(o.headers))Array.isArray(i)?d[r]=i.join(", "):d[r]=String(i);return new Response(o._body,{status:o.statusCode,headers:d})},"adaptErrorHandlerToFetch"),S=c((s,e,a)=>async(n,o)=>{const d=o.headers.get("accept"),r=k(d);let i=a||l(u);r==="text/html"&&a?i=a:r==="application/vnd.api+json"?i=l(y):r==="application/problem+json"?i=l(u):r==="application/json"?i=l(H()):r==="text/plain"?i=l(w()):r==="application/javascript"?i=l(v()):r==="application/xml"&&(i=l(L()));for(const{handler:p,regex:m}of s){const f=d??"";if(m.test(f)){i=p;break}}return n.expose=e,i(n,o)},"createFetchNegotiatedErrorHandler");var O=Object.defineProperty,M=h((s,e)=>O(s,"name",{value:e,configurable:!0}),"t");const B=M(async(s,e={})=>{const a=C(e),n=S(e.extraHandlers??[],e.showTrace??!0,a);return async o=>(e?.onError&&await e.onError(s,o),n(s,o))},"fetchHandler");export{B as default};
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import createNegotiatedErrorHandler from '../../packem_shared/createNegotiatedErrorHandler-Cd7yj67Z.js';
|
|
3
|
-
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
const httpHandler = /* @__PURE__ */ __name(async (error, options = {}) => {
|
|
7
|
-
const defaultHtml = htmlErrorHandler(options);
|
|
8
|
-
const negotiated = createNegotiatedErrorHandler(options.extraHandlers ?? [], options.showTrace ?? true, defaultHtml);
|
|
9
|
-
return async (request, response) => {
|
|
10
|
-
if (options?.onError) {
|
|
11
|
-
await options.onError(error, request, response);
|
|
12
|
-
}
|
|
13
|
-
await negotiated(error, request, response);
|
|
14
|
-
};
|
|
15
|
-
}, "httpHandler");
|
|
16
|
-
|
|
17
|
-
export { httpHandler as default };
|
|
1
|
+
var s=Object.defineProperty;var o=(a,r)=>s(a,"name",{value:r,configurable:!0});import{htmlErrorHandler as c}from"../../error-handler/html-error-handler.js";import m from"../../packem_shared/createNegotiatedErrorHandler-ElYcOlsu.js";var i=Object.defineProperty,u=o((a,r)=>i(a,"name",{value:r,configurable:!0}),"s");const h=u(async(a,r={})=>{const n=c(r),l=m(r.extraHandlers??[],r.showTrace??!0,n);return async(t,e)=>{r?.onError&&await r.onError(a,t,e),await l(a,t,e)}},"httpHandler");export{h as default};
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { default as problemErrorHandler } from './error-handler/problem-error-handler.js';
|
|
3
|
-
export { htmlErrorHandler } from './error-handler/html-error-handler.js';
|
|
4
|
-
export { default as createNegotiatedErrorHandler } from './packem_shared/createNegotiatedErrorHandler-Cd7yj67Z.js';
|
|
5
|
-
export { textErrorHandler } from './error-handler/text-error-handler.js';
|
|
6
|
-
export { jsonErrorHandler } from './error-handler/json-error-handler.js';
|
|
7
|
-
export { jsonpErrorHandler } from './error-handler/jsonp-error-handler.js';
|
|
8
|
-
export { xmlErrorHandler } from './error-handler/xml-error-handler.js';
|
|
1
|
+
import{default as e}from"./error-handler/jsonapi-error-handler.js";import{default as t}from"./error-handler/problem-error-handler.js";import{htmlErrorHandler as d}from"./error-handler/html-error-handler.js";import{default as m}from"./packem_shared/createNegotiatedErrorHandler-ElYcOlsu.js";import{textErrorHandler as p}from"./error-handler/text-error-handler.js";import{jsonErrorHandler as E}from"./error-handler/json-error-handler.js";import{jsonpErrorHandler as s}from"./error-handler/jsonp-error-handler.js";import{xmlErrorHandler as u}from"./error-handler/xml-error-handler.js";export{m as createNegotiatedErrorHandler,d as htmlErrorHandler,E as jsonErrorHandler,e as jsonapiErrorHandler,s as jsonpErrorHandler,t as problemErrorHandler,p as textErrorHandler,u as xmlErrorHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var r=Object.defineProperty;var a=(e,s)=>r(e,"name",{value:s,configurable:!0});import{StatusCodes as u}from"http-status-codes";var d=Object.defineProperty,n=a((e,s)=>d(e,"name",{value:s,configurable:!0}),"s");const i=n((e,s)=>{const o=s,t=Number(o.statusCode??o.status);if(Number.isInteger(t)&&t>=400&&t<=599){e.statusCode=t;return}e.statusCode<400&&(e.statusCode=u.INTERNAL_SERVER_ERROR)},"addStatusCodeToResponse");export{i as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var j=Object.defineProperty;var l=(a,o)=>j(a,"name",{value:o,configurable:!0});import d from"../error-handler/jsonapi-error-handler.js";import c from"../error-handler/problem-error-handler.js";import{textErrorHandler as v}from"../error-handler/text-error-handler.js";import{jsonErrorHandler as b}from"../error-handler/json-error-handler.js";import{jsonpErrorHandler as y}from"../error-handler/jsonp-error-handler.js";import{xmlErrorHandler as E}from"../error-handler/xml-error-handler.js";import{Accepts as H}from"@tinyhttp/accepts";var g=Object.defineProperty,h=l((a,o)=>g(a,"name",{value:o,configurable:!0}),"i");const q=h((a,o,e)=>async(n,i,m)=>{const r=new H(i).type(["text/html","application/vnd.api+json","application/problem+json","application/json","text/plain","application/javascript","text/javascript","application/xml","text/xml"]);let t=e||c;r==="text/html"&&e?t=e:r==="application/vnd.api+json"?t=d:r==="application/problem+json"?t=c:r==="application/json"?t=b():r==="text/plain"?t=v():r==="application/javascript"||r==="text/javascript"?t=y():(r==="application/xml"||r==="text/xml")&&(t=E());for(const{handler:s,regex:x}of a){const p=i.headers.accept??"",f=Array.isArray(p)?p.join(","):p;if(x.test(f)){t=s;break}}n.expose=o,await t(n,i,m)},"createNegotiatedErrorHandler");export{q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=Object.defineProperty;var t=(e,n)=>s(e,"name",{value:n,configurable:!0});var a=Object.defineProperty,o=t((e,n)=>a(e,"name",{value:n,configurable:!0}),"t");const i=o((e,n,r="application/json; charset=utf-8")=>{e.setHeader("content-type",r),e.end(JSON.stringify(n))},"sendJson");export{i as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=Object.defineProperty;var s=(e,r)=>o(e,"name",{value:r,configurable:!0});var c=Object.defineProperty,n=s((e,r)=>c(e,"name",{value:r,configurable:!0}),"o");const b=n((e,r)=>{const a=r.headers??{};Object.keys(a).forEach(t=>{e.setHeader(t,a[t])})},"setErrorHeaders");export{b as s};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/error-handler",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Error handlers for use in development and production environments.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"visulima",
|
|
@@ -133,9 +133,9 @@
|
|
|
133
133
|
"CHANGELOG.md"
|
|
134
134
|
],
|
|
135
135
|
"dependencies": {
|
|
136
|
-
"@tinyhttp/accepts": "^2.2.
|
|
136
|
+
"@tinyhttp/accepts": "^2.2.4",
|
|
137
137
|
"@visulima/boxen": "2.0.3",
|
|
138
|
-
"@visulima/error": "4.
|
|
138
|
+
"@visulima/error": "4.6.1",
|
|
139
139
|
"http-errors": "^2.0.0",
|
|
140
140
|
"http-status-codes": "^2.3.0",
|
|
141
141
|
"jstoxml": "^7.0.1",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { StatusCodes } from 'http-status-codes';
|
|
2
|
-
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
-
const addStatusCodeToResponse = /* @__PURE__ */ __name((response, error) => {
|
|
6
|
-
const err = error;
|
|
7
|
-
const candidate = Number(err.statusCode ?? err.status);
|
|
8
|
-
if (Number.isInteger(candidate) && candidate >= 400 && candidate <= 599) {
|
|
9
|
-
response.statusCode = candidate;
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
if (response.statusCode < 400) {
|
|
13
|
-
response.statusCode = StatusCodes.INTERNAL_SERVER_ERROR;
|
|
14
|
-
}
|
|
15
|
-
}, "addStatusCodeToResponse");
|
|
16
|
-
|
|
17
|
-
export { addStatusCodeToResponse as a };
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import jsonapiErrorHandler from '../error-handler/jsonapi-error-handler.js';
|
|
2
|
-
import problemErrorHandler from '../error-handler/problem-error-handler.js';
|
|
3
|
-
import { textErrorHandler } from '../error-handler/text-error-handler.js';
|
|
4
|
-
import { jsonErrorHandler } from '../error-handler/json-error-handler.js';
|
|
5
|
-
import { jsonpErrorHandler } from '../error-handler/jsonp-error-handler.js';
|
|
6
|
-
import { xmlErrorHandler } from '../error-handler/xml-error-handler.js';
|
|
7
|
-
import { Accepts } from '@tinyhttp/accepts';
|
|
8
|
-
|
|
9
|
-
var __defProp = Object.defineProperty;
|
|
10
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
11
|
-
const createNegotiatedErrorHandler = /* @__PURE__ */ __name((errorHandlers, showTrace, defaultHtmlHandler) => async (error, request, response) => {
|
|
12
|
-
const accept = new Accepts(request);
|
|
13
|
-
const chosenType = accept.type([
|
|
14
|
-
"text/html",
|
|
15
|
-
"application/vnd.api+json",
|
|
16
|
-
"application/problem+json",
|
|
17
|
-
"application/json",
|
|
18
|
-
"text/plain",
|
|
19
|
-
"application/javascript",
|
|
20
|
-
"text/javascript",
|
|
21
|
-
"application/xml",
|
|
22
|
-
"text/xml"
|
|
23
|
-
]);
|
|
24
|
-
let errorHandler = defaultHtmlHandler || problemErrorHandler;
|
|
25
|
-
if (chosenType === "text/html" && defaultHtmlHandler) {
|
|
26
|
-
errorHandler = defaultHtmlHandler;
|
|
27
|
-
} else if (chosenType === "application/vnd.api+json") {
|
|
28
|
-
errorHandler = jsonapiErrorHandler;
|
|
29
|
-
} else if (chosenType === "application/problem+json") {
|
|
30
|
-
errorHandler = problemErrorHandler;
|
|
31
|
-
} else if (chosenType === "application/json") {
|
|
32
|
-
errorHandler = jsonErrorHandler();
|
|
33
|
-
} else if (chosenType === "text/plain") {
|
|
34
|
-
errorHandler = textErrorHandler();
|
|
35
|
-
} else if (chosenType === "application/javascript" || chosenType === "text/javascript") {
|
|
36
|
-
errorHandler = jsonpErrorHandler();
|
|
37
|
-
} else if (chosenType === "application/xml" || chosenType === "text/xml") {
|
|
38
|
-
errorHandler = xmlErrorHandler();
|
|
39
|
-
}
|
|
40
|
-
for (const { handler, regex } of errorHandlers) {
|
|
41
|
-
const headerVal = request.headers.accept ?? "";
|
|
42
|
-
const headerStr = Array.isArray(headerVal) ? headerVal.join(",") : headerVal;
|
|
43
|
-
if (regex.test(headerStr)) {
|
|
44
|
-
errorHandler = handler;
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
error.expose = showTrace;
|
|
49
|
-
await errorHandler(error, request, response);
|
|
50
|
-
}, "createNegotiatedErrorHandler");
|
|
51
|
-
|
|
52
|
-
export { createNegotiatedErrorHandler as default };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
const sendJson = /* @__PURE__ */ __name((response, jsonBody, contentType = "application/json; charset=utf-8") => {
|
|
4
|
-
response.setHeader("content-type", contentType);
|
|
5
|
-
response.end(JSON.stringify(jsonBody));
|
|
6
|
-
}, "sendJson");
|
|
7
|
-
|
|
8
|
-
export { sendJson as s };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
const setErrorHeaders = /* @__PURE__ */ __name((response, error) => {
|
|
4
|
-
const headers = error.headers ?? {};
|
|
5
|
-
Object.keys(headers).forEach((header) => {
|
|
6
|
-
response.setHeader(header, headers[header]);
|
|
7
|
-
});
|
|
8
|
-
}, "setErrorHeaders");
|
|
9
|
-
|
|
10
|
-
export { setErrorHeaders as s };
|