@harpy-js/core 0.5.5 → 0.5.7
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/core/__tests__/redirect-logic.spec.d.ts +0 -0
- package/dist/core/__tests__/redirect-logic.spec.js +157 -0
- package/dist/core/app-setup.d.ts +6 -0
- package/dist/core/app-setup.js +66 -1
- package/dist/core/error-pages/default-401.d.ts +6 -0
- package/dist/core/error-pages/default-401.js +21 -0
- package/dist/core/error-pages/default-403.d.ts +6 -0
- package/dist/core/error-pages/default-403.js +21 -0
- package/dist/core/error-pages/default-404.d.ts +7 -0
- package/dist/core/error-pages/default-404.js +26 -0
- package/dist/core/error-pages/default-500.d.ts +7 -0
- package/dist/core/error-pages/default-500.js +28 -0
- package/dist/core/error-pages/error-layout.d.ts +6 -0
- package/dist/core/error-pages/error-layout.js +17 -0
- package/dist/core/jsx-exception.filter.d.ts +14 -0
- package/dist/core/jsx-exception.filter.js +115 -0
- package/dist/core/lazy-route-loader.service.d.ts +28 -0
- package/dist/core/lazy-route-loader.service.js +79 -0
- package/dist/core/lazy-routes.module.d.ts +2 -0
- package/dist/core/lazy-routes.module.js +21 -0
- package/dist/decorators/lazy-route.decorator.d.ts +12 -0
- package/dist/decorators/lazy-route.decorator.js +22 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +13 -1
- package/package.json +1 -1
- package/src/core/__tests__/redirect-logic.spec.ts +200 -0
- package/src/core/app-setup.js.map +1 -0
- package/src/core/app-setup.ts +111 -1
- package/src/core/error-pages/default-401.js.map +1 -0
- package/src/core/error-pages/default-401.tsx +43 -0
- package/src/core/error-pages/default-403.js.map +1 -0
- package/src/core/error-pages/default-403.tsx +43 -0
- package/src/core/error-pages/default-404.js.map +1 -0
- package/src/core/error-pages/default-404.tsx +54 -0
- package/src/core/error-pages/default-500.js.map +1 -0
- package/src/core/error-pages/default-500.tsx +59 -0
- package/src/core/error-pages/error-layout.js.map +1 -0
- package/src/core/error-pages/error-layout.tsx +30 -0
- package/src/core/hydration-manifest.js.map +1 -0
- package/src/core/hydration.js.map +1 -0
- package/src/core/jsx-exception.filter.js.map +1 -0
- package/src/core/jsx-exception.filter.ts +130 -0
- package/src/core/jsx.engine.js.map +1 -0
- package/src/core/live-reload.controller.js.map +1 -0
- package/src/core/static-assets.controller.js.map +1 -0
- package/src/decorators/jsx.decorator.js.map +1 -0
- package/src/index.ts +9 -0
- package/src/types/jsx.types.js.map +1 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { JsxLayoutProps } from '../../types/jsx.types';
|
|
3
|
+
|
|
4
|
+
export interface NotFoundPageProps extends JsxLayoutProps {
|
|
5
|
+
path?: string;
|
|
6
|
+
message?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default function Default404Page({
|
|
10
|
+
path,
|
|
11
|
+
message = 'Page Not Found',
|
|
12
|
+
}: NotFoundPageProps) {
|
|
13
|
+
return (
|
|
14
|
+
<div className="min-h-screen bg-gradient-to-br from-purple-600 to-blue-600 flex items-center justify-center p-6">
|
|
15
|
+
<div className="max-w-2xl w-full text-center bg-white rounded-2xl shadow-2xl p-12">
|
|
16
|
+
<div className="mb-8">
|
|
17
|
+
<div className="inline-flex items-center justify-center w-28 h-28 bg-gradient-to-br from-purple-600 to-blue-600 rounded-full shadow-lg mb-6">
|
|
18
|
+
<span className="text-5xl font-bold text-white">H</span>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<h1 className="text-9xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-purple-600 to-blue-600 mb-4">
|
|
23
|
+
404
|
|
24
|
+
</h1>
|
|
25
|
+
|
|
26
|
+
<h2 className="text-3xl font-bold text-gray-900 mb-4">{message}</h2>
|
|
27
|
+
|
|
28
|
+
<p className="text-lg text-gray-600 mb-8">
|
|
29
|
+
The page you're looking for doesn't exist or has been moved.
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
{path && (
|
|
33
|
+
<div className="bg-gray-100 border border-gray-300 rounded-lg p-4 mb-8">
|
|
34
|
+
<p className="font-mono text-sm text-gray-700">
|
|
35
|
+
<span className="text-gray-500">Requested path:</span>{' '}
|
|
36
|
+
<span className="text-purple-600 font-semibold">{path}</span>
|
|
37
|
+
</p>
|
|
38
|
+
</div>
|
|
39
|
+
)}
|
|
40
|
+
|
|
41
|
+
<a
|
|
42
|
+
href="/"
|
|
43
|
+
className="inline-block px-8 py-3 bg-gradient-to-r from-purple-600 to-blue-600 text-white font-semibold rounded-lg shadow-md hover:shadow-lg transform hover:-translate-y-0.5 transition-all duration-200"
|
|
44
|
+
>
|
|
45
|
+
Go to Homepage
|
|
46
|
+
</a>
|
|
47
|
+
|
|
48
|
+
<p className="mt-12 text-sm text-gray-500">
|
|
49
|
+
Powered by <span className="text-purple-600 font-semibold">Harpy.js</span>
|
|
50
|
+
</p>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-500.js","sourceRoot":"","sources":["default-500.tsx"],"names":[],"mappings":";;AAQA,iCAkDC;;AAlDD,SAAwB,cAAc,CAAC,EACrC,OAAO,GAAG,uBAAuB,EACjC,KAAK,GACgB;IACrB,OAAO,CACL,gCAAK,SAAS,EAAC,8FAA8F,YAC3G,iCAAK,SAAS,EAAC,mEAAmE,aAChF,gCAAK,SAAS,EAAC,MAAM,YACnB,gCAAK,SAAS,EAAC,0HAA0H,YACvI,iCAAM,SAAS,EAAC,+BAA+B,kBAAS,GACpD,GACF,EAEN,+BAAI,SAAS,EAAC,sGAAsG,oBAE/G,EAEL,+BAAI,SAAS,EAAC,uCAAuC,YAAE,OAAO,GAAM,EAEpE,8BAAG,SAAS,EAAC,4BAA4B,yEAErC,EAEH,KAAK,IAAI,CACR,gCAAK,SAAS,EAAC,iEAAiE,YAC9E,iCAAK,SAAS,EAAC,wBAAwB,aACrC,gCAAK,SAAS,EAAC,2CAA2C,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,YAC9G,iCAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,mDAAmD,GAAG,GACvH,EACN,iCAAK,SAAS,EAAC,QAAQ,aACrB,+BAAI,SAAS,EAAC,yCAAyC,8BAAmB,EAC1E,gCAAK,SAAS,EAAC,gEAAgE,YAAE,KAAK,GAAO,IACzF,IACF,GACF,CACP,EAED,8BACE,IAAI,EAAC,GAAG,EACR,SAAS,EAAC,6LAA6L,+BAGrM,EAEJ,+BAAG,SAAS,EAAC,6BAA6B,4BAC7B,iCAAM,SAAS,EAAC,4BAA4B,yBAAgB,IACrE,IACA,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { JsxLayoutProps } from '../../types/jsx.types';
|
|
3
|
+
|
|
4
|
+
export interface ServerErrorPageProps extends JsxLayoutProps {
|
|
5
|
+
message?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default function Default500Page({
|
|
10
|
+
message = 'Internal Server Error',
|
|
11
|
+
error,
|
|
12
|
+
}: ServerErrorPageProps) {
|
|
13
|
+
return (
|
|
14
|
+
<div className="min-h-screen bg-gradient-to-br from-red-500 to-pink-600 flex items-center justify-center p-6">
|
|
15
|
+
<div className="max-w-2xl w-full text-center bg-white rounded-2xl shadow-2xl p-12">
|
|
16
|
+
<div className="mb-8">
|
|
17
|
+
<div className="inline-flex items-center justify-center w-28 h-28 bg-gradient-to-br from-red-500 to-pink-600 rounded-full shadow-lg mb-6">
|
|
18
|
+
<span className="text-5xl font-bold text-white">H</span>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<h1 className="text-9xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-red-500 to-pink-600 mb-4">
|
|
23
|
+
500
|
|
24
|
+
</h1>
|
|
25
|
+
|
|
26
|
+
<h2 className="text-3xl font-bold text-gray-900 mb-4">{message}</h2>
|
|
27
|
+
|
|
28
|
+
<p className="text-lg text-gray-600 mb-8">
|
|
29
|
+
Something went wrong on our end. Please try again later.
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
{error && (
|
|
33
|
+
<div className="bg-red-50 border-2 border-red-200 rounded-lg p-6 mb-8 text-left">
|
|
34
|
+
<div className="flex items-start gap-3">
|
|
35
|
+
<svg className="w-6 h-6 text-red-600 flex-shrink-0 mt-0.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
36
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
37
|
+
</svg>
|
|
38
|
+
<div className="flex-1">
|
|
39
|
+
<h3 className="text-sm font-semibold text-red-900 mb-2">Error Details</h3>
|
|
40
|
+
<pre className="text-xs text-red-800 font-mono whitespace-pre-wrap break-words">{error}</pre>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
)}
|
|
45
|
+
|
|
46
|
+
<a
|
|
47
|
+
href="/"
|
|
48
|
+
className="inline-block px-8 py-3 bg-gradient-to-r from-red-500 to-pink-600 text-white font-semibold rounded-lg shadow-md hover:shadow-lg transform hover:-translate-y-0.5 transition-all duration-200"
|
|
49
|
+
>
|
|
50
|
+
Go to Homepage
|
|
51
|
+
</a>
|
|
52
|
+
|
|
53
|
+
<p className="mt-12 text-sm text-gray-500">
|
|
54
|
+
Powered by <span className="text-red-600 font-semibold">Harpy.js</span>
|
|
55
|
+
</p>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-layout.js","sourceRoot":"","sources":["error-layout.tsx"],"names":[],"mappings":";;AAWA,8BAkBC;;AAlBD,SAAwB,WAAW,CAAC,EAClC,QAAQ,EACR,KAAK,GAAG,OAAO,GACE;IACjB,OAAO,CACL,kCAAM,IAAI,EAAC,IAAI,aACb,6CACE,iCAAM,OAAO,EAAC,OAAO,GAAG,EACxB,iCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,qCAAqC,GAAG,EACtE,4CAAQ,KAAK,GAAS,EACtB,iCAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,oBAAoB,GAAG,EACnD,iCAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,oBAAoB,GAAG,IAC9C,EACP,2CACG,QAAQ,GACJ,IACF,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ErrorLayoutProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Default layout wrapper for error pages.
|
|
10
|
+
* This ensures styles are loaded and provides a consistent structure.
|
|
11
|
+
*/
|
|
12
|
+
export default function ErrorLayout({
|
|
13
|
+
children,
|
|
14
|
+
title = 'Error',
|
|
15
|
+
}: ErrorLayoutProps) {
|
|
16
|
+
return (
|
|
17
|
+
<html lang="en">
|
|
18
|
+
<head>
|
|
19
|
+
<meta charSet="utf-8" />
|
|
20
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
21
|
+
<title>{title}</title>
|
|
22
|
+
<link rel="stylesheet" href="/styles/styles.css" />
|
|
23
|
+
<link rel="stylesheet" href="/assets/styles.css" />
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
{children}
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydration-manifest.js","sourceRoot":"","sources":["hydration-manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,oDAqCC;AAKD,4CAGC;AAKD,oCAGC;AAKD,0DAEC;AAzED,uCAAyB;AACzB,2CAA6B;AAM7B,IAAI,cAAc,GAA6B,IAAI,CAAC;AAMpD,SAAgB,oBAAoB;IAClC,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAGD,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,yBAAyB,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,CAAC;KAC3D,CAAC;IAEF,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CACV,gDAAgD,EAChD,aAAa,EACb,uCAAuC,CACxC,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;QAC1D,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACvE,cAAc,GAAG,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAKD,SAAgB,gBAAgB,CAAC,aAAqB;IACpD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAKD,SAAgB,YAAY,CAAC,aAAqB;IAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAKD,SAAgB,uBAAuB;IACrC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydration.js","sourceRoot":"","sources":["hydration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,gDAEC;AAKD,gEAKC;AAKD,0DAOC;AAKD,kDAMC;AAKD,sDAKC;AArED,6CAAgD;AAChD,+CAAiC;AAkBpB,QAAA,gBAAgB,GAAG,IAAI,+BAAiB,EAAoB,CAAC;AAK1E,SAAgB,kBAAkB,CAAC,aAAqB;IACtD,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAClE,CAAC;AAKD,SAAgB,0BAA0B;IACxC,MAAM,OAAO,GAAqB;QAChC,gBAAgB,EAAE,IAAI,GAAG,EAAE;KAC5B,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD,SAAgB,uBAAuB,CACrC,QAAiC;IAEjC,MAAM,OAAO,GAAG,wBAAgB,CAAC,QAAQ,EAAE,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAKD,SAAgB,mBAAmB;IACjC,MAAM,OAAO,GAAG,wBAAgB,CAAC,QAAQ,EAAE,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AACvD,CAAC;AAKD,SAAgB,qBAAqB;IACnC,MAAM,OAAO,GAAG,wBAAgB,CAAC,QAAQ,EAAE,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-exception.filter.js","sourceRoot":"","sources":["jsx-exception.filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExceptionFilter,
|
|
3
|
+
Catch,
|
|
4
|
+
ArgumentsHost,
|
|
5
|
+
HttpException,
|
|
6
|
+
HttpStatus,
|
|
7
|
+
} from '@nestjs/common';
|
|
8
|
+
import type { FastifyReply, FastifyRequest } from 'fastify';
|
|
9
|
+
import React from 'react';
|
|
10
|
+
import { renderToString } from 'react-dom/server';
|
|
11
|
+
import Default404Page from './error-pages/default-404';
|
|
12
|
+
import Default500Page from './error-pages/default-500';
|
|
13
|
+
import Default401Page from './error-pages/default-401';
|
|
14
|
+
import Default403Page from './error-pages/default-403';
|
|
15
|
+
import ErrorLayout from './error-pages/error-layout';
|
|
16
|
+
|
|
17
|
+
export interface ErrorPagesConfig {
|
|
18
|
+
/** Custom 404 Not Found page component */
|
|
19
|
+
404?: React.ComponentType<any>;
|
|
20
|
+
/** Custom 500 Internal Server Error page component */
|
|
21
|
+
500?: React.ComponentType<any>;
|
|
22
|
+
/** Custom 401 Unauthorized page component */
|
|
23
|
+
401?: React.ComponentType<any>;
|
|
24
|
+
/** Custom 403 Forbidden page component */
|
|
25
|
+
403?: React.ComponentType<any>;
|
|
26
|
+
/** Generic error page for other status codes */
|
|
27
|
+
default?: React.ComponentType<any>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Global exception filter that renders JSX error pages instead of JSON responses.
|
|
32
|
+
* This filter catches all exceptions and renders appropriate error pages based on
|
|
33
|
+
* the HTTP status code.
|
|
34
|
+
*/
|
|
35
|
+
@Catch()
|
|
36
|
+
export class JsxExceptionFilter implements ExceptionFilter {
|
|
37
|
+
constructor(private readonly errorPages: ErrorPagesConfig = {}) {}
|
|
38
|
+
|
|
39
|
+
catch(exception: unknown, host: ArgumentsHost) {
|
|
40
|
+
const ctx = host.switchToHttp();
|
|
41
|
+
const reply = ctx.getResponse<FastifyReply>();
|
|
42
|
+
const request = ctx.getRequest<FastifyRequest>();
|
|
43
|
+
|
|
44
|
+
// Determine the status code and error message
|
|
45
|
+
let status: number;
|
|
46
|
+
let message: string;
|
|
47
|
+
let error: string | undefined;
|
|
48
|
+
|
|
49
|
+
if (exception instanceof HttpException) {
|
|
50
|
+
status = exception.getStatus();
|
|
51
|
+
const response = exception.getResponse();
|
|
52
|
+
|
|
53
|
+
if (typeof response === 'string') {
|
|
54
|
+
message = response;
|
|
55
|
+
} else if (typeof response === 'object' && response !== null) {
|
|
56
|
+
message =
|
|
57
|
+
(response as any).message || (response as any).error || 'An error occurred';
|
|
58
|
+
error = (response as any).error;
|
|
59
|
+
} else {
|
|
60
|
+
message = 'An error occurred';
|
|
61
|
+
}
|
|
62
|
+
} else if (exception instanceof Error) {
|
|
63
|
+
status = HttpStatus.INTERNAL_SERVER_ERROR;
|
|
64
|
+
message = 'Internal Server Error';
|
|
65
|
+
error = process.env.NODE_ENV === 'development' ? exception.message : undefined;
|
|
66
|
+
} else {
|
|
67
|
+
status = HttpStatus.INTERNAL_SERVER_ERROR;
|
|
68
|
+
message = 'Unknown error occurred';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Select the appropriate error page component
|
|
72
|
+
let ErrorComponent: React.ComponentType<any>;
|
|
73
|
+
|
|
74
|
+
switch (status) {
|
|
75
|
+
case HttpStatus.NOT_FOUND:
|
|
76
|
+
ErrorComponent = this.errorPages[404] || Default404Page;
|
|
77
|
+
break;
|
|
78
|
+
case HttpStatus.UNAUTHORIZED:
|
|
79
|
+
ErrorComponent = this.errorPages[401] || Default401Page;
|
|
80
|
+
break;
|
|
81
|
+
case HttpStatus.FORBIDDEN:
|
|
82
|
+
ErrorComponent = this.errorPages[403] || Default403Page;
|
|
83
|
+
break;
|
|
84
|
+
case HttpStatus.INTERNAL_SERVER_ERROR:
|
|
85
|
+
ErrorComponent = this.errorPages[500] || Default500Page;
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
ErrorComponent = this.errorPages.default || this.errorPages[500] || Default500Page;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Prepare props for the error page
|
|
92
|
+
const props: any = {
|
|
93
|
+
message,
|
|
94
|
+
error,
|
|
95
|
+
path: request.url,
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Determine the appropriate title for the error page
|
|
99
|
+
const titleMap: Record<number, string> = {
|
|
100
|
+
404: '404 - Page Not Found',
|
|
101
|
+
401: '401 - Unauthorized',
|
|
102
|
+
403: '403 - Forbidden',
|
|
103
|
+
500: '500 - Internal Server Error',
|
|
104
|
+
};
|
|
105
|
+
const title = titleMap[status] || `${status} - Error`;
|
|
106
|
+
|
|
107
|
+
// Render the error page wrapped in ErrorLayout for proper styling
|
|
108
|
+
try {
|
|
109
|
+
const errorPageContent = React.createElement(ErrorComponent, props);
|
|
110
|
+
const wrappedInLayout = React.createElement(ErrorLayout, {
|
|
111
|
+
title,
|
|
112
|
+
children: errorPageContent,
|
|
113
|
+
});
|
|
114
|
+
const html = renderToString(wrappedInLayout);
|
|
115
|
+
|
|
116
|
+
void reply
|
|
117
|
+
.status(status)
|
|
118
|
+
.header('Content-Type', 'text/html; charset=utf-8')
|
|
119
|
+
.send(`<!DOCTYPE html>${html}`);
|
|
120
|
+
} catch (renderError) {
|
|
121
|
+
// Fallback to JSON if rendering fails
|
|
122
|
+
console.error('Error rendering JSX error page:', renderError);
|
|
123
|
+
void reply.status(status).send({
|
|
124
|
+
statusCode: status,
|
|
125
|
+
message,
|
|
126
|
+
error,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.engine.js","sourceRoot":"","sources":["jsx.engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-reload.controller.js","sourceRoot":"","sources":["live-reload.controller.ts"],"names":[],"mappings":";;;AAMA,MAAa,oBAAoB;IACvB,OAAO,GAAmB,EAAE,CAAC;IAC7B,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEpC,UAAU,CAAC,KAAmB;QAE5B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACvB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QAGH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAGzB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QAGtE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;QAElG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;YAEf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAhDD,oDAgDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-assets.controller.js","sourceRoot":"","sources":["static-assets.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,2CAA6B;AAK7B,MAAa,sBAAsB;IACjC,gBAAgB,CAAC,KAAmB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAEjE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF;AAXD,wDAWC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.decorator.js","sourceRoot":"","sources":["jsx.decorator.ts"],"names":[],"mappings":";;AAiCA,8BAgBC;AAjDD,wDAA2D;AAiC3D,SAAgB,SAAS,CACvB,QAAwC,EACxC,UAAyB,EAAE;IAE3B,OAAO,CACL,MAAc,EACd,GAAoB,EACpB,UAAwC,EACxC,EAAE;QACF,OAAO,CAAC,cAAc,CACpB,2BAAe,EACf,CAAC,QAAQ,EAAE,OAAO,CAAC,EACnB,UAAU,CAAC,KAAK,CACjB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,15 @@ export { withJsxEngine } from "./core/jsx.engine";
|
|
|
6
6
|
export { LiveReloadController } from "./core/live-reload.controller";
|
|
7
7
|
export { StaticAssetsController } from "./core/static-assets.controller";
|
|
8
8
|
|
|
9
|
+
// Exception filter & error pages
|
|
10
|
+
export { JsxExceptionFilter } from "./core/jsx-exception.filter";
|
|
11
|
+
export type { ErrorPagesConfig } from "./core/jsx-exception.filter";
|
|
12
|
+
export { default as Default404Page } from "./core/error-pages/default-404";
|
|
13
|
+
export { default as Default500Page } from "./core/error-pages/default-500";
|
|
14
|
+
export { default as Default401Page } from "./core/error-pages/default-401";
|
|
15
|
+
export { default as Default403Page } from "./core/error-pages/default-403";
|
|
16
|
+
export { default as ErrorLayout } from "./core/error-pages/error-layout";
|
|
17
|
+
|
|
9
18
|
// Decorators
|
|
10
19
|
export { JsxRender } from "./decorators/jsx.decorator";
|
|
11
20
|
export { WithLayout } from "./decorators/layout.decorator";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.types.js","sourceRoot":"","sources":["jsx.types.ts"],"names":[],"mappings":""}
|