frontend-hamroun 1.2.79 → 1.2.82
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/LICENSE +21 -0
- package/README.md +129 -1513
- package/bin/cli.js +506 -145
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.client.cjs +2 -0
- package/dist/index.client.cjs.map +1 -0
- package/dist/index.client.js +26 -0
- package/dist/index.client.js.map +1 -0
- package/dist/index.js +299 -1
- package/dist/index.js.map +1 -0
- package/dist/jsx-runtime.cjs +2 -0
- package/dist/jsx-runtime.cjs.map +1 -0
- package/dist/jsx-runtime.js +93 -1
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/renderer-Bo9zkUZ_.js +52 -0
- package/dist/renderer-Bo9zkUZ_.js.map +1 -0
- package/dist/renderer-Din1y3YM.cjs +2 -0
- package/dist/renderer-Din1y3YM.cjs.map +1 -0
- package/dist/server-renderer-CqIpQ-od.cjs +2 -0
- package/dist/server-renderer-CqIpQ-od.cjs.map +1 -0
- package/dist/server-renderer-QHt45Ip2.js +255 -0
- package/dist/server-renderer-QHt45Ip2.js.map +1 -0
- package/dist/server-renderer.cjs +2 -0
- package/dist/server-renderer.cjs.map +1 -0
- package/dist/server-renderer.js +5 -1
- package/dist/server-renderer.js.map +1 -0
- package/package.json +77 -120
- package/templates/basic-app/build.js +22 -0
- package/templates/basic-app/dev.js +27 -0
- package/templates/basic-app/esbuild.config.js +28 -0
- package/templates/basic-app/index.html +1 -1
- package/templates/basic-app/package.json +29 -28
- package/templates/basic-app/server.js +24 -0
- package/templates/basic-app/src/App.jsx +16 -0
- package/templates/basic-app/src/App.tsx +26 -0
- package/templates/basic-app/src/client.jsx +5 -0
- package/templates/basic-app/src/client.tsx +11 -0
- package/templates/basic-app/src/components/Counter.jsx +13 -0
- package/templates/basic-app/src/components/Counter.tsx +18 -0
- package/templates/basic-app/src/jsx-shim.js +3 -0
- package/templates/basic-app/src/jsx-shim.ts +11 -0
- package/templates/basic-app/src/main.jsx +98 -0
- package/templates/basic-app/src/main.tsx +0 -1
- package/templates/basic-app/src/server.js +47 -0
- package/templates/basic-app/src/server.ts +52 -0
- package/templates/basic-app/tsconfig.server.json +11 -0
- package/templates/complete-app/lib/frontend-hamroun.js +182 -0
- package/templates/complete-app/package.json +2 -1
- package/templates/complete-app/pages/about.jsx +0 -0
- package/templates/complete-app/pages/index.jsx +0 -0
- package/templates/complete-app/pages/wasm-demo.jsx +0 -0
- package/templates/complete-app/public/client.js +58 -49
- package/templates/complete-app/public/index.html +88 -17
- package/templates/complete-app/public/styles.css +30 -533
- package/templates/complete-app/server.js +31 -222
- package/templates/complete-app/wasm/build.bat +0 -0
- package/templates/complete-app/wasm/build.sh +0 -0
- package/templates/complete-app/wasm/example.go +0 -0
- package/templates/fullstack-app/build/main.js +130 -101
- package/templates/fullstack-app/build/main.js.map +4 -4
- package/templates/fullstack-app/package-lock.json +1773 -566
- package/templates/ssr-template/esbuild.config.js +33 -0
- package/templates/ssr-template/jsx-shim.js +1 -0
- package/templates/ssr-template/package.json +22 -16
- package/templates/ssr-template/src/App.tsx +12 -52
- package/templates/ssr-template/src/client.tsx +3 -17
- package/templates/ssr-template/src/server.ts +21 -204
- package/templates/ssr-template/tsconfig.json +10 -13
- package/templates/ssr-template/tsconfig.server.json +6 -14
- package/templates/wasm/build-wasm.js +228 -0
- package/templates/wasm/esbuild.config.js +63 -0
- package/templates/wasm/go/main.go +256 -0
- package/templates/wasm/go/wasm_exec.js +0 -0
- package/templates/wasm/index.html +97 -0
- package/templates/wasm/jsx-shim.js +9 -0
- package/templates/{go-wasm-app → wasm}/package-lock.json +5307 -3732
- package/templates/wasm/package.json +42 -0
- package/templates/wasm/public/example.wasm +0 -0
- package/templates/wasm/src/App.tsx +564 -0
- package/templates/wasm/src/client.tsx +220 -0
- package/templates/wasm/src/index.tsx +21 -0
- package/templates/wasm/src/server.ts +145 -0
- package/templates/wasm/tsconfig.json +21 -0
- package/templates/wasm/tsconfig.node.json +13 -0
- package/templates/wasm/tsconfig.server.json +23 -0
- package/templates/wasm/vite.config.ts +56 -0
- package/templates/wasm/wasm-loader.js +103 -0
- package/dist/batch/package.json +0 -16
- package/dist/client-router/package.json +0 -16
- package/dist/component/package.json +0 -16
- package/dist/context/package.json +0 -16
- package/dist/event-bus/package.json +0 -16
- package/dist/forms/package.json +0 -16
- package/dist/hooks/package.json +0 -16
- package/dist/hooks-0728361a.cjs +0 -1
- package/dist/hooks-b58f947c.js +0 -133
- package/dist/hooks.js +0 -1
- package/dist/hooks.mjs +0 -13
- package/dist/index.mjs +0 -137
- package/dist/jsx-runtime/package.json +0 -16
- package/dist/jsx-runtime.mjs +0 -64
- package/dist/lifecycle-events/package.json +0 -16
- package/dist/package.json +0 -71
- package/dist/render-component/package.json +0 -16
- package/dist/renderer/package.json +0 -16
- package/dist/renderer.js +0 -1
- package/dist/renderer.mjs +0 -27
- package/dist/router/package.json +0 -16
- package/dist/server/package.json +0 -17
- package/dist/server/src/batch.d.ts +0 -3
- package/dist/server/src/batch.js +0 -23
- package/dist/server/src/batch.js.map +0 -1
- package/dist/server/src/client-router.d.ts +0 -60
- package/dist/server/src/client-router.js +0 -210
- package/dist/server/src/client-router.js.map +0 -1
- package/dist/server/src/component.d.ts +0 -14
- package/dist/server/src/component.js +0 -106
- package/dist/server/src/component.js.map +0 -1
- package/dist/server/src/context.d.ts +0 -13
- package/dist/server/src/context.js +0 -21
- package/dist/server/src/context.js.map +0 -1
- package/dist/server/src/event-bus.d.ts +0 -23
- package/dist/server/src/event-bus.js +0 -75
- package/dist/server/src/event-bus.js.map +0 -1
- package/dist/server/src/forms.d.ts +0 -40
- package/dist/server/src/forms.js +0 -148
- package/dist/server/src/forms.js.map +0 -1
- package/dist/server/src/hooks.d.ts +0 -12
- package/dist/server/src/hooks.js +0 -170
- package/dist/server/src/hooks.js.map +0 -1
- package/dist/server/src/index.client.d.ts +0 -12
- package/dist/server/src/index.client.js +0 -14
- package/dist/server/src/index.client.js.map +0 -1
- package/dist/server/src/index.d.ts +0 -88
- package/dist/server/src/index.js +0 -79
- package/dist/server/src/index.js.map +0 -1
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +0 -1
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +0 -2
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +0 -1
- package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +0 -4
- package/dist/server/src/jsx-runtime/jsx-runtime.js +0 -41
- package/dist/server/src/jsx-runtime/jsx-runtime.js.map +0 -1
- package/dist/server/src/jsx-runtime.d.ts +0 -20
- package/dist/server/src/jsx-runtime.js +0 -105
- package/dist/server/src/jsx-runtime.js.map +0 -1
- package/dist/server/src/lifecycle-events.d.ts +0 -108
- package/dist/server/src/lifecycle-events.js +0 -177
- package/dist/server/src/lifecycle-events.js.map +0 -1
- package/dist/server/src/renderComponent.d.ts +0 -13
- package/dist/server/src/renderComponent.js +0 -30
- package/dist/server/src/renderComponent.js.map +0 -1
- package/dist/server/src/renderer.d.ts +0 -2
- package/dist/server/src/renderer.js +0 -31
- package/dist/server/src/renderer.js.map +0 -1
- package/dist/server/src/router.d.ts +0 -55
- package/dist/server/src/router.js +0 -166
- package/dist/server/src/router.js.map +0 -1
- package/dist/server/src/server/api-router.d.ts +0 -15
- package/dist/server/src/server/api-router.js +0 -111
- package/dist/server/src/server/api-router.js.map +0 -1
- package/dist/server/src/server/auth.d.ts +0 -32
- package/dist/server/src/server/auth.js +0 -80
- package/dist/server/src/server/auth.js.map +0 -1
- package/dist/server/src/server/database.d.ts +0 -24
- package/dist/server/src/server/database.js +0 -135
- package/dist/server/src/server/database.js.map +0 -1
- package/dist/server/src/server/index.d.ts +0 -116
- package/dist/server/src/server/index.js +0 -508
- package/dist/server/src/server/index.js.map +0 -1
- package/dist/server/src/server/middleware.d.ts +0 -11
- package/dist/server/src/server/middleware.js +0 -46
- package/dist/server/src/server/middleware.js.map +0 -1
- package/dist/server/src/server/server.d.ts +0 -9
- package/dist/server/src/server/server.js +0 -87
- package/dist/server/src/server/server.js.map +0 -1
- package/dist/server/src/server/templates.d.ts +0 -30
- package/dist/server/src/server/templates.js +0 -208
- package/dist/server/src/server/templates.js.map +0 -1
- package/dist/server/src/server/types.d.ts +0 -38
- package/dist/server/src/server/types.js +0 -4
- package/dist/server/src/server/types.js.map +0 -1
- package/dist/server/src/server/utils.d.ts +0 -70
- package/dist/server/src/server/utils.js +0 -156
- package/dist/server/src/server/utils.js.map +0 -1
- package/dist/server/src/server/wasm.d.ts +0 -9
- package/dist/server/src/server/wasm.js +0 -117
- package/dist/server/src/server/wasm.js.map +0 -1
- package/dist/server/src/server-renderer.d.ts +0 -5
- package/dist/server/src/server-renderer.js +0 -106
- package/dist/server/src/server-renderer.js.map +0 -1
- package/dist/server/src/server-types.d.ts +0 -42
- package/dist/server/src/server-types.js +0 -6
- package/dist/server/src/server-types.js.map +0 -1
- package/dist/server/src/store.d.ts +0 -41
- package/dist/server/src/store.js +0 -99
- package/dist/server/src/store.js.map +0 -1
- package/dist/server/src/types.d.ts +0 -19
- package/dist/server/src/types.js +0 -2
- package/dist/server/src/types.js.map +0 -1
- package/dist/server/src/utils.d.ts +0 -46
- package/dist/server/src/utils.js +0 -144
- package/dist/server/src/utils.js.map +0 -1
- package/dist/server/src/vdom.d.ts +0 -8
- package/dist/server/src/vdom.js +0 -22
- package/dist/server/src/vdom.js.map +0 -1
- package/dist/server/src/wasm.d.ts +0 -36
- package/dist/server/src/wasm.js +0 -159
- package/dist/server/src/wasm.js.map +0 -1
- package/dist/server/tsconfig.server.tsbuildinfo +0 -1
- package/dist/server-renderer/package.json +0 -16
- package/dist/server-renderer.mjs +0 -64
- package/dist/store/package.json +0 -16
- package/dist/types/package.json +0 -16
- package/dist/utils/package.json +0 -16
- package/dist/vdom/package.json +0 -16
- package/dist/wasm/package.json +0 -16
- package/dist/wasm.js +0 -1
- package/dist/wasm.mjs +0 -103
- package/templates/basic-app/docs/rapport_pfe.aux +0 -27
- package/templates/basic-app/docs/rapport_pfe.log +0 -399
- package/templates/basic-app/docs/rapport_pfe.out +0 -10
- package/templates/basic-app/docs/rapport_pfe.pdf +0 -0
- package/templates/basic-app/docs/rapport_pfe.tex +0 -68
- package/templates/basic-app/docs/rapport_pfe.toc +0 -14
- package/templates/complete-app/package-lock.json +0 -2536
- package/templates/go-wasm-app/README.md +0 -38
- package/templates/go-wasm-app/babel.config.js +0 -21
- package/templates/go-wasm-app/build-client.js +0 -49
- package/templates/go-wasm-app/build-wasm.js +0 -237
- package/templates/go-wasm-app/build.config.js +0 -62
- package/templates/go-wasm-app/build.js +0 -218
- package/templates/go-wasm-app/package.json +0 -32
- package/templates/go-wasm-app/public/index.html +0 -128
- package/templates/go-wasm-app/public/styles.css +0 -197
- package/templates/go-wasm-app/public/wasm/example.wasm +0 -0
- package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +0 -39
- package/templates/go-wasm-app/server.js +0 -70
- package/templates/go-wasm-app/src/App.jsx +0 -38
- package/templates/go-wasm-app/src/app.js +0 -173
- package/templates/go-wasm-app/src/client.js +0 -57
- package/templates/go-wasm-app/src/components/Footer.jsx +0 -13
- package/templates/go-wasm-app/src/components/Header.jsx +0 -19
- package/templates/go-wasm-app/src/components/WasmDemo.jsx +0 -120
- package/templates/go-wasm-app/src/main.jsx +0 -12
- package/templates/go-wasm-app/src/wasm/example.go +0 -75
- package/templates/go-wasm-app/tsconfig.server.json +0 -18
- package/templates/go-wasm-app/vite.config.js +0 -45
- package/templates/ssr-template/client.js +0 -58
- package/templates/ssr-template/package-lock.json +0 -2478
- package/templates/ssr-template/public/index.html +0 -47
- package/templates/ssr-template/readme.md +0 -188
- package/templates/ssr-template/server.js +0 -369
- package/templates/ssr-template/server.ts +0 -275
- package/templates/ssr-template/src/client.ts +0 -61
- package/templates/ssr-template/src/pages/index.tsx +0 -51
- package/templates/ssr-template/vite.config.js +0 -57
- /package/{dist/Counter.d.ts → templates/complete-app/api/hello.js} +0 -0
- /package/templates/{go-wasm-app/public/wasm → wasm/public}/wasm_exec.js +0 -0
@@ -1,116 +0,0 @@
|
|
1
|
-
import { Express, Request, Response, NextFunction } from 'express';
|
2
|
-
import cors from 'cors';
|
3
|
-
import { SignOptions } from 'jsonwebtoken';
|
4
|
-
import { renderToString } from '../server-renderer.js';
|
5
|
-
import { Database } from './database.js';
|
6
|
-
import { AuthService } from './auth.js';
|
7
|
-
import { ApiRouter } from './api-router.js';
|
8
|
-
import { rateLimit } from './middleware.js';
|
9
|
-
import * as utils from './utils.js';
|
10
|
-
import * as templates from './templates.js';
|
11
|
-
import { loadGoWasmFromFile } from './wasm.js';
|
12
|
-
export interface ServerConfig {
|
13
|
-
port?: number;
|
14
|
-
apiDir?: string;
|
15
|
-
pagesDir?: string;
|
16
|
-
staticDir?: string;
|
17
|
-
enableCors?: boolean;
|
18
|
-
corsOptions?: cors.CorsOptions;
|
19
|
-
db?: {
|
20
|
-
url: string;
|
21
|
-
type: 'mongodb' | 'mysql' | 'postgres';
|
22
|
-
};
|
23
|
-
auth?: {
|
24
|
-
secret: string;
|
25
|
-
expiresIn?: SignOptions['expiresIn'];
|
26
|
-
};
|
27
|
-
}
|
28
|
-
export declare class Server {
|
29
|
-
private app;
|
30
|
-
private server;
|
31
|
-
private config;
|
32
|
-
private db;
|
33
|
-
private auth;
|
34
|
-
constructor(config?: ServerConfig);
|
35
|
-
private setupApiRoutes;
|
36
|
-
private generateApiDocs;
|
37
|
-
private scanApiDirectory;
|
38
|
-
private getRoutePath;
|
39
|
-
private detectApiMethods;
|
40
|
-
private setupPageRoutes;
|
41
|
-
private renderPage;
|
42
|
-
getExpressApp(): Express;
|
43
|
-
getDatabase(): Database | null;
|
44
|
-
getAuth(): AuthService | null;
|
45
|
-
start(): Promise<void>;
|
46
|
-
stop(): Promise<void>;
|
47
|
-
restart(): Promise<void>;
|
48
|
-
enableSSR(options?: {
|
49
|
-
hydratable?: boolean;
|
50
|
-
}): void;
|
51
|
-
registerPlugin(plugin: (server: Server) => void): void;
|
52
|
-
addShutdownHandler(): void;
|
53
|
-
}
|
54
|
-
/**
|
55
|
-
* Creates and configures a new server instance
|
56
|
-
*/
|
57
|
-
export declare function createServer(config?: ServerConfig): Server;
|
58
|
-
/**
|
59
|
-
* Creates a new server with sensible defaults for development
|
60
|
-
*/
|
61
|
-
export declare function createDevServer(options?: {
|
62
|
-
port?: number;
|
63
|
-
enableCors?: boolean;
|
64
|
-
}): Server;
|
65
|
-
/**
|
66
|
-
* Creates a production-ready server with optimized settings
|
67
|
-
*/
|
68
|
-
export declare function createProductionServer(config: ServerConfig): Server;
|
69
|
-
export declare function getRequestIp(req: Request): string;
|
70
|
-
export declare function parseCookies(req: Request): Record<string, string>;
|
71
|
-
export declare const renderComponent: (Component: any, props?: any) => Promise<{
|
72
|
-
html: string;
|
73
|
-
success: boolean;
|
74
|
-
error?: undefined;
|
75
|
-
} | {
|
76
|
-
html: string;
|
77
|
-
success: boolean;
|
78
|
-
error: unknown;
|
79
|
-
}>;
|
80
|
-
export { initNodeWasm, loadGoWasmFromFile } from './wasm.js';
|
81
|
-
export * from './utils.js';
|
82
|
-
export * from './templates.js';
|
83
|
-
export { Database } from './database.js';
|
84
|
-
export { AuthService } from './auth.js';
|
85
|
-
export { ApiRouter } from './api-router.js';
|
86
|
-
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './middleware.js';
|
87
|
-
export { renderToString };
|
88
|
-
declare const _default: {
|
89
|
-
Server: typeof Server;
|
90
|
-
createServer: typeof createServer;
|
91
|
-
createDevServer: typeof createDevServer;
|
92
|
-
createProductionServer: typeof createProductionServer;
|
93
|
-
rateLimit: typeof rateLimit;
|
94
|
-
requestLogger: import("./middleware.js").MiddlewareFunction;
|
95
|
-
errorHandler: (err: Error, req: Request, res: Response, next: NextFunction) => void;
|
96
|
-
notFoundHandler: (req: Request, res: Response) => void;
|
97
|
-
loadGoWasmFromFile: typeof loadGoWasmFromFile;
|
98
|
-
templates: typeof templates;
|
99
|
-
utils: typeof utils;
|
100
|
-
renderComponent: (Component: any, props?: any) => Promise<{
|
101
|
-
html: string;
|
102
|
-
success: boolean;
|
103
|
-
error?: undefined;
|
104
|
-
} | {
|
105
|
-
html: string;
|
106
|
-
success: boolean;
|
107
|
-
error: unknown;
|
108
|
-
}>;
|
109
|
-
renderToString: typeof renderToString;
|
110
|
-
getRequestIp: typeof getRequestIp;
|
111
|
-
parseCookies: typeof parseCookies;
|
112
|
-
Database: typeof Database;
|
113
|
-
AuthService: typeof AuthService;
|
114
|
-
ApiRouter: typeof ApiRouter;
|
115
|
-
};
|
116
|
-
export default _default;
|
@@ -1,508 +0,0 @@
|
|
1
|
-
import express from 'express';
|
2
|
-
import path from 'path';
|
3
|
-
import fs from 'fs';
|
4
|
-
import cors from 'cors';
|
5
|
-
import { renderToString } from '../server-renderer';
|
6
|
-
import { Database } from './database';
|
7
|
-
import { AuthService } from './auth';
|
8
|
-
import { ApiRouter } from './api-router';
|
9
|
-
import { requestLogger, errorHandler, notFoundHandler, rateLimit } from './middleware';
|
10
|
-
// Import the utility functions
|
11
|
-
try {
|
12
|
-
import * as utils from './utils.js';
|
13
|
-
} catch (err) {
|
14
|
-
const utils = require('./utils.js');
|
15
|
-
};
|
16
|
-
try {
|
17
|
-
import * as templates from './templates.js';
|
18
|
-
} catch (err) {
|
19
|
-
const templates = require('./templates.js');
|
20
|
-
};
|
21
|
-
import { loadGoWasmFromFile } from './wasm';
|
22
|
-
// Helper function to get the component name from the file path
|
23
|
-
function getComponentName(filePath, pagesDir) {
|
24
|
-
try {
|
25
|
-
// Get relative path from pages directory
|
26
|
-
const relativePath = path.relative(pagesDir, filePath);
|
27
|
-
// Remove extension
|
28
|
-
const withoutExt = relativePath.replace(/\.[^/.]+$/, '');
|
29
|
-
// Replace index with empty for clean paths
|
30
|
-
const cleanPath = withoutExt.replace(/\/index$/, '');
|
31
|
-
// Convert to module path format
|
32
|
-
return `/pages/${cleanPath}`;
|
33
|
-
}
|
34
|
-
catch (e) {
|
35
|
-
return '';
|
36
|
-
}
|
37
|
-
}
|
38
|
-
export class Server {
|
39
|
-
constructor(config = {}) {
|
40
|
-
Object.defineProperty(this, "app", {
|
41
|
-
enumerable: true,
|
42
|
-
configurable: true,
|
43
|
-
writable: true,
|
44
|
-
value: void 0
|
45
|
-
});
|
46
|
-
Object.defineProperty(this, "server", {
|
47
|
-
enumerable: true,
|
48
|
-
configurable: true,
|
49
|
-
writable: true,
|
50
|
-
value: null
|
51
|
-
});
|
52
|
-
Object.defineProperty(this, "config", {
|
53
|
-
enumerable: true,
|
54
|
-
configurable: true,
|
55
|
-
writable: true,
|
56
|
-
value: void 0
|
57
|
-
});
|
58
|
-
Object.defineProperty(this, "db", {
|
59
|
-
enumerable: true,
|
60
|
-
configurable: true,
|
61
|
-
writable: true,
|
62
|
-
value: null
|
63
|
-
});
|
64
|
-
Object.defineProperty(this, "auth", {
|
65
|
-
enumerable: true,
|
66
|
-
configurable: true,
|
67
|
-
writable: true,
|
68
|
-
value: null
|
69
|
-
});
|
70
|
-
this.config = {
|
71
|
-
port: 3000,
|
72
|
-
apiDir: './api',
|
73
|
-
pagesDir: './pages',
|
74
|
-
staticDir: './public',
|
75
|
-
enableCors: true,
|
76
|
-
...config
|
77
|
-
};
|
78
|
-
this.app = express();
|
79
|
-
// Basic middleware
|
80
|
-
this.app.use(express.json());
|
81
|
-
this.app.use(express.urlencoded({ extended: true }));
|
82
|
-
// CORS setup
|
83
|
-
if (this.config.enableCors) {
|
84
|
-
this.app.use(cors(this.config.corsOptions));
|
85
|
-
}
|
86
|
-
// Setup database if configured
|
87
|
-
if (this.config.db) {
|
88
|
-
this.db = new Database(this.config.db);
|
89
|
-
}
|
90
|
-
// Setup auth if configured
|
91
|
-
if (this.config.auth) {
|
92
|
-
// Fix by explicitly typing the auth configuration
|
93
|
-
this.auth = new AuthService({
|
94
|
-
secret: this.config.auth.secret,
|
95
|
-
expiresIn: this.config.auth.expiresIn
|
96
|
-
});
|
97
|
-
// Expose auth middleware
|
98
|
-
this.app.use(this.auth.initialize());
|
99
|
-
}
|
100
|
-
// Static files
|
101
|
-
if (fs.existsSync(path.resolve(process.cwd(), this.config.staticDir))) {
|
102
|
-
this.app.use(express.static(path.resolve(process.cwd(), this.config.staticDir)));
|
103
|
-
}
|
104
|
-
// Setup API routes
|
105
|
-
this.setupApiRoutes();
|
106
|
-
// Setup page routes (for SSR)
|
107
|
-
this.setupPageRoutes();
|
108
|
-
}
|
109
|
-
setupApiRoutes() {
|
110
|
-
const apiRouter = new ApiRouter(this.config.apiDir, this.auth);
|
111
|
-
this.app.use('/api', requestLogger, apiRouter.router);
|
112
|
-
// Add API documentation route
|
113
|
-
this.app.get('/api-docs', (req, res) => {
|
114
|
-
const apiDocs = this.generateApiDocs();
|
115
|
-
res.json(apiDocs);
|
116
|
-
});
|
117
|
-
}
|
118
|
-
generateApiDocs() {
|
119
|
-
// Generate documentation based on API routes
|
120
|
-
const apiDir = path.resolve(process.cwd(), this.config.apiDir);
|
121
|
-
const docs = { endpoints: [] };
|
122
|
-
if (fs.existsSync(apiDir)) {
|
123
|
-
this.scanApiDirectory(apiDir, '', docs.endpoints);
|
124
|
-
}
|
125
|
-
return docs;
|
126
|
-
}
|
127
|
-
scanApiDirectory(dirPath, routePrefix, endpoints) {
|
128
|
-
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
129
|
-
for (const entry of entries) {
|
130
|
-
const fullPath = path.join(dirPath, entry.name);
|
131
|
-
if (entry.isDirectory()) {
|
132
|
-
this.scanApiDirectory(fullPath, `${routePrefix}/${entry.name}`, endpoints);
|
133
|
-
}
|
134
|
-
else if (entry.name.endsWith('.js') || entry.name.endsWith('.ts')) {
|
135
|
-
const routePath = this.getRoutePath(entry.name, routePrefix);
|
136
|
-
endpoints.push({
|
137
|
-
path: routePath,
|
138
|
-
file: path.relative(process.cwd(), fullPath),
|
139
|
-
methods: this.detectApiMethods(fullPath)
|
140
|
-
});
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}
|
144
|
-
getRoutePath(filename, routePrefix) {
|
145
|
-
const baseName = path.basename(filename, path.extname(filename));
|
146
|
-
if (baseName === 'index') {
|
147
|
-
return routePrefix || '/';
|
148
|
-
}
|
149
|
-
const paramMatch = baseName.match(/^\[(.+)\]$/);
|
150
|
-
if (paramMatch) {
|
151
|
-
return `${routePrefix}/:${paramMatch[1]}`;
|
152
|
-
}
|
153
|
-
return `${routePrefix}/${baseName}`;
|
154
|
-
}
|
155
|
-
detectApiMethods(filePath) {
|
156
|
-
try {
|
157
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
158
|
-
const methods = ['get', 'post', 'put', 'delete', 'patch', 'options'];
|
159
|
-
return methods.filter(method => new RegExp(`export (async )?function ${method}\\s*\\(`).test(content) ||
|
160
|
-
new RegExp(`export const ${method}\\s*=`).test(content));
|
161
|
-
}
|
162
|
-
catch (error) {
|
163
|
-
return [];
|
164
|
-
}
|
165
|
-
}
|
166
|
-
setupPageRoutes() {
|
167
|
-
if (!fs.existsSync(path.resolve(process.cwd(), this.config.pagesDir))) {
|
168
|
-
return;
|
169
|
-
}
|
170
|
-
// Setup catch-all route for SSR
|
171
|
-
this.app.get('*', async (req, res) => {
|
172
|
-
try {
|
173
|
-
// Implement page routing logic
|
174
|
-
const { html, statusCode } = await this.renderPage(req.path);
|
175
|
-
res.status(statusCode || 200).send(html);
|
176
|
-
}
|
177
|
-
catch (error) {
|
178
|
-
console.error('Error rendering page:', error);
|
179
|
-
res.status(500).send('Server Error');
|
180
|
-
}
|
181
|
-
});
|
182
|
-
}
|
183
|
-
async renderPage(routePath) {
|
184
|
-
try {
|
185
|
-
// Try to find the page component
|
186
|
-
const pagesDir = this.config.pagesDir ? path.resolve(process.cwd(), this.config.pagesDir) : '';
|
187
|
-
if (!pagesDir || !fs.existsSync(pagesDir)) {
|
188
|
-
return {
|
189
|
-
html: templates.generateErrorPage(404, 'Pages directory not found'),
|
190
|
-
statusCode: 404
|
191
|
-
};
|
192
|
-
}
|
193
|
-
// Normalize the path
|
194
|
-
let normalizedPath = routePath;
|
195
|
-
if (!normalizedPath.startsWith('/')) {
|
196
|
-
normalizedPath = '/' + normalizedPath;
|
197
|
-
}
|
198
|
-
// Default to index for the root
|
199
|
-
if (normalizedPath === '/') {
|
200
|
-
normalizedPath = '/index';
|
201
|
-
}
|
202
|
-
// Try to find a matching page file
|
203
|
-
let pagePath = '';
|
204
|
-
const possiblePaths = [
|
205
|
-
path.join(pagesDir, `${normalizedPath}.js`),
|
206
|
-
path.join(pagesDir, `${normalizedPath}.ts`),
|
207
|
-
path.join(pagesDir, `${normalizedPath}.jsx`),
|
208
|
-
path.join(pagesDir, `${normalizedPath}.tsx`),
|
209
|
-
path.join(pagesDir, `${normalizedPath}/index.js`),
|
210
|
-
path.join(pagesDir, `${normalizedPath}/index.ts`),
|
211
|
-
path.join(pagesDir, `${normalizedPath}/index.jsx`),
|
212
|
-
path.join(pagesDir, `${normalizedPath}/index.tsx`)
|
213
|
-
];
|
214
|
-
for (const p of possiblePaths) {
|
215
|
-
if (fs.existsSync(p)) {
|
216
|
-
pagePath = p;
|
217
|
-
break;
|
218
|
-
}
|
219
|
-
}
|
220
|
-
// Handle 404 if page not found
|
221
|
-
if (!pagePath) {
|
222
|
-
return {
|
223
|
-
html: templates.generateErrorPage(404, `Page not found: ${normalizedPath}`),
|
224
|
-
statusCode: 404
|
225
|
-
};
|
226
|
-
}
|
227
|
-
// Import and render the page component
|
228
|
-
try {
|
229
|
-
const pageModule = await import(pagePath);
|
230
|
-
if (!pageModule || !pageModule.default) {
|
231
|
-
throw new Error(`No default export found in ${pagePath}`);
|
232
|
-
}
|
233
|
-
const PageComponent = pageModule.default;
|
234
|
-
const initialProps = {
|
235
|
-
// Provide any initial props here
|
236
|
-
path: normalizedPath,
|
237
|
-
query: {}, // Could be parsed from URL
|
238
|
-
api: { serverTime: new Date().toISOString() }
|
239
|
-
};
|
240
|
-
// Render the component to HTML
|
241
|
-
const { html, success, error } = await renderComponent(PageComponent, initialProps);
|
242
|
-
if (!success) {
|
243
|
-
return {
|
244
|
-
html: templates.generateErrorPage(500, 'Failed to render page', error instanceof Error ? error : new Error('Unknown error')),
|
245
|
-
statusCode: 500
|
246
|
-
};
|
247
|
-
}
|
248
|
-
// Generate the full HTML document
|
249
|
-
let pageTitle = 'My App';
|
250
|
-
try {
|
251
|
-
// Try to extract title from component if it has a getTitle method
|
252
|
-
if (typeof PageComponent.getTitle === 'function') {
|
253
|
-
pageTitle = PageComponent.getTitle(initialProps);
|
254
|
-
}
|
255
|
-
else if (PageComponent.title) {
|
256
|
-
pageTitle = PageComponent.title;
|
257
|
-
}
|
258
|
-
}
|
259
|
-
catch (e) {
|
260
|
-
// Ignore title errors
|
261
|
-
}
|
262
|
-
// Parse the component name for hydration
|
263
|
-
const componentName = getComponentName(pagePath, pagesDir);
|
264
|
-
// Generate full HTML document with our template
|
265
|
-
const fullHtml = templates.generateDocument(html, {
|
266
|
-
title: pageTitle,
|
267
|
-
// Get description from component if available
|
268
|
-
description: typeof PageComponent.getDescription === 'function'
|
269
|
-
? PageComponent.getDescription(initialProps)
|
270
|
-
: (PageComponent.description || ''),
|
271
|
-
// Add scripts for client-side hydration
|
272
|
-
scripts: ['/client.js'],
|
273
|
-
// Add any custom meta tags
|
274
|
-
meta: typeof PageComponent.getMeta === 'function'
|
275
|
-
? PageComponent.getMeta(initialProps)
|
276
|
-
: {},
|
277
|
-
// Add custom styles
|
278
|
-
styles: ['/styles.css'],
|
279
|
-
// Add initial data for client-side hydration
|
280
|
-
initialData: initialProps,
|
281
|
-
// Add component information for hydration
|
282
|
-
componentName: componentName
|
283
|
-
});
|
284
|
-
return { html: fullHtml, statusCode: 200 };
|
285
|
-
}
|
286
|
-
catch (error) {
|
287
|
-
console.error('Error rendering page:', error);
|
288
|
-
return {
|
289
|
-
html: templates.generateErrorPage(500, 'Error rendering page', error instanceof Error ? error : new Error('Unknown error')),
|
290
|
-
statusCode: 500
|
291
|
-
};
|
292
|
-
}
|
293
|
-
}
|
294
|
-
catch (error) {
|
295
|
-
console.error('Error finding page:', error);
|
296
|
-
return {
|
297
|
-
html: templates.generateErrorPage(500, 'Server error', error instanceof Error ? error : new Error('Unknown error')),
|
298
|
-
statusCode: 500
|
299
|
-
};
|
300
|
-
}
|
301
|
-
}
|
302
|
-
getExpressApp() {
|
303
|
-
return this.app;
|
304
|
-
}
|
305
|
-
getDatabase() {
|
306
|
-
return this.db;
|
307
|
-
}
|
308
|
-
getAuth() {
|
309
|
-
return this.auth;
|
310
|
-
}
|
311
|
-
start() {
|
312
|
-
return new Promise((resolve) => {
|
313
|
-
this.server = this.app.listen(this.config.port, () => {
|
314
|
-
console.log(`Server running at http://localhost:${this.config.port}`);
|
315
|
-
resolve();
|
316
|
-
});
|
317
|
-
});
|
318
|
-
}
|
319
|
-
stop() {
|
320
|
-
return new Promise((resolve, reject) => {
|
321
|
-
if (!this.server) {
|
322
|
-
return resolve();
|
323
|
-
}
|
324
|
-
this.server.close((err) => {
|
325
|
-
if (err)
|
326
|
-
return reject(err);
|
327
|
-
this.server = null;
|
328
|
-
resolve();
|
329
|
-
});
|
330
|
-
});
|
331
|
-
}
|
332
|
-
restart() {
|
333
|
-
return this.stop().then(() => this.start());
|
334
|
-
}
|
335
|
-
enableSSR(options = {}) {
|
336
|
-
if (!fs.existsSync(path.resolve(process.cwd(), this.config.pagesDir))) {
|
337
|
-
fs.mkdirSync(path.resolve(process.cwd(), this.config.pagesDir), { recursive: true });
|
338
|
-
}
|
339
|
-
// Set up client-side JS for hydration if needed
|
340
|
-
if (options.hydratable) {
|
341
|
-
const staticDir = path.resolve(process.cwd(), this.config.staticDir);
|
342
|
-
if (!fs.existsSync(staticDir)) {
|
343
|
-
fs.mkdirSync(staticDir, { recursive: true });
|
344
|
-
}
|
345
|
-
// Generate or copy client hydration script
|
346
|
-
// This is a simplified example - would need more implementation
|
347
|
-
const clientJsPath = path.join(staticDir, 'client.js');
|
348
|
-
if (!fs.existsSync(clientJsPath)) {
|
349
|
-
const clientJsContent = `
|
350
|
-
// Auto-generated hydration script
|
351
|
-
import { hydrate } from 'frontend-hamroun';
|
352
|
-
|
353
|
-
// Find SSR content and hydrate it
|
354
|
-
document.addEventListener('DOMContentLoaded', () => {
|
355
|
-
const ssrRoots = document.querySelectorAll('[data-ssr-root]');
|
356
|
-
ssrRoots.forEach(root => {
|
357
|
-
const componentPath = root.getAttribute('data-component');
|
358
|
-
if (componentPath) {
|
359
|
-
import(componentPath).then(module => {
|
360
|
-
hydrate(module.default, root);
|
361
|
-
});
|
362
|
-
}
|
363
|
-
});
|
364
|
-
});
|
365
|
-
`;
|
366
|
-
fs.writeFileSync(clientJsPath, clientJsContent);
|
367
|
-
}
|
368
|
-
}
|
369
|
-
}
|
370
|
-
registerPlugin(plugin) {
|
371
|
-
plugin(this);
|
372
|
-
}
|
373
|
-
addShutdownHandler() {
|
374
|
-
// Handle graceful shutdown
|
375
|
-
const gracefulShutdown = async () => {
|
376
|
-
console.log('Received shutdown signal, closing server...');
|
377
|
-
try {
|
378
|
-
await this.stop();
|
379
|
-
if (this.db) {
|
380
|
-
await this.db.disconnect();
|
381
|
-
}
|
382
|
-
console.log('Server shut down gracefully');
|
383
|
-
process.exit(0);
|
384
|
-
}
|
385
|
-
catch (error) {
|
386
|
-
console.error('Error during shutdown:', error);
|
387
|
-
process.exit(1);
|
388
|
-
}
|
389
|
-
};
|
390
|
-
// Listen for termination signals
|
391
|
-
process.on('SIGTERM', gracefulShutdown);
|
392
|
-
process.on('SIGINT', gracefulShutdown);
|
393
|
-
}
|
394
|
-
}
|
395
|
-
// Add server utility functions
|
396
|
-
/**
|
397
|
-
* Creates and configures a new server instance
|
398
|
-
*/
|
399
|
-
export function createServer(config = {}) {
|
400
|
-
return new Server(config);
|
401
|
-
}
|
402
|
-
/**
|
403
|
-
* Creates a new server with sensible defaults for development
|
404
|
-
*/
|
405
|
-
export function createDevServer(options = {}) {
|
406
|
-
return new Server({
|
407
|
-
port: options.port || 3000,
|
408
|
-
enableCors: options.enableCors !== false,
|
409
|
-
apiDir: './src/api',
|
410
|
-
pagesDir: './src/pages',
|
411
|
-
staticDir: './public'
|
412
|
-
});
|
413
|
-
}
|
414
|
-
/**
|
415
|
-
* Creates a production-ready server with optimized settings
|
416
|
-
*/
|
417
|
-
export function createProductionServer(config) {
|
418
|
-
const server = new Server({
|
419
|
-
...config,
|
420
|
-
// Fix the PORT parsing
|
421
|
-
port: config.port || (process.env.PORT ? parseInt(process.env.PORT) : 8080)
|
422
|
-
});
|
423
|
-
// Add shutdown handler for production environments
|
424
|
-
server.addShutdownHandler();
|
425
|
-
return server;
|
426
|
-
}
|
427
|
-
// Export additional utility functions
|
428
|
-
export function getRequestIp(req) {
|
429
|
-
return req.ip ||
|
430
|
-
req.headers['x-forwarded-for']?.split(',')[0].trim() ||
|
431
|
-
req.socket.remoteAddress ||
|
432
|
-
'';
|
433
|
-
}
|
434
|
-
export function parseCookies(req) {
|
435
|
-
const cookies = {};
|
436
|
-
const cookieHeader = req.headers.cookie;
|
437
|
-
if (cookieHeader) {
|
438
|
-
cookieHeader.split(';').forEach(cookie => {
|
439
|
-
const [name, value] = cookie.split('=').map(c => c.trim());
|
440
|
-
cookies[name] = value;
|
441
|
-
});
|
442
|
-
}
|
443
|
-
return cookies;
|
444
|
-
}
|
445
|
-
// Fix the renderComponent function
|
446
|
-
export const renderComponent = async (Component, props = {}) => {
|
447
|
-
try {
|
448
|
-
// Create HTML string from component
|
449
|
-
const html = renderToString(Component(props));
|
450
|
-
return {
|
451
|
-
html,
|
452
|
-
success: true
|
453
|
-
};
|
454
|
-
}
|
455
|
-
catch (error) {
|
456
|
-
console.error('Error rendering component:', error);
|
457
|
-
return {
|
458
|
-
html: `<div class="error">Error rendering component</div>`,
|
459
|
-
success: false,
|
460
|
-
error
|
461
|
-
};
|
462
|
-
}
|
463
|
-
};
|
464
|
-
// Export WASM utilities for server-side usage
|
465
|
-
export { initNodeWasm, loadGoWasmFromFile } from './wasm.js';
|
466
|
-
// Import and export server utilities
|
467
|
-
export * from './utils.js';
|
468
|
-
export * from './templates.js';
|
469
|
-
// Export the Database and AuthService classes
|
470
|
-
export { Database } from './database.js';
|
471
|
-
export { AuthService } from './auth.js';
|
472
|
-
export { ApiRouter } from './api-router.js';
|
473
|
-
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './middleware.js';
|
474
|
-
// Export renderToString for convenient SSR
|
475
|
-
export { renderToString };
|
476
|
-
// Ensure the default export includes all required functions
|
477
|
-
export default {
|
478
|
-
Server,
|
479
|
-
createServer,
|
480
|
-
createDevServer,
|
481
|
-
createProductionServer,
|
482
|
-
rateLimit,
|
483
|
-
requestLogger,
|
484
|
-
errorHandler,
|
485
|
-
notFoundHandler,
|
486
|
-
loadGoWasmFromFile,
|
487
|
-
// Template utilities
|
488
|
-
templates,
|
489
|
-
// Server utilities
|
490
|
-
utils,
|
491
|
-
// Additional exports
|
492
|
-
renderComponent,
|
493
|
-
renderToString,
|
494
|
-
getRequestIp,
|
495
|
-
parseCookies,
|
496
|
-
Database,
|
497
|
-
AuthService,
|
498
|
-
ApiRouter
|
499
|
-
};
|
500
|
-
//# sourceMappingURL=index.js.map
|
501
|
-
// This module is compatible with both ESM and CommonJS
|
502
|
-
if (typeof exports === 'object' && typeof module !== 'undefined') {
|
503
|
-
// CommonJS environment
|
504
|
-
module.exports = exports;
|
505
|
-
} else if (typeof define === 'function' && define.amd) {
|
506
|
-
// AMD environment
|
507
|
-
define(['exports'], factory);
|
508
|
-
} // ESM environment is handled by default exports
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import { Request, Response, NextFunction } from 'express';
|
2
|
-
export interface MiddlewareFunction {
|
3
|
-
(req: Request, res: Response, next: NextFunction): void | Promise<void>;
|
4
|
-
}
|
5
|
-
export declare const requestLogger: MiddlewareFunction;
|
6
|
-
export declare const errorHandler: (err: Error, req: Request, res: Response, next: NextFunction) => void;
|
7
|
-
export declare const notFoundHandler: (req: Request, res: Response) => void;
|
8
|
-
export declare function rateLimit(options: {
|
9
|
-
windowMs: number;
|
10
|
-
max: number;
|
11
|
-
}): (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|