frontend-hamroun 1.2.74 → 1.2.75
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/Counter.d.ts +0 -0
- package/dist/hooks-0728361a.cjs +1 -0
- package/dist/hooks-b58f947c.js +133 -0
- package/dist/hooks.js +1 -0
- package/dist/hooks.mjs +13 -0
- package/dist/index.js +1 -384
- package/dist/index.mjs +130 -374
- package/dist/jsx-runtime.js +1 -0
- package/dist/jsx-runtime.mjs +64 -0
- package/dist/renderer.js +1 -0
- package/dist/renderer.mjs +27 -0
- package/dist/server/src/batch.d.ts +3 -0
- package/dist/server/src/batch.js +23 -0
- package/dist/server/src/batch.js.map +1 -0
- package/dist/server/src/component.d.ts +14 -0
- package/dist/server/src/component.js +106 -0
- package/dist/server/src/component.js.map +1 -0
- package/dist/server/src/context.d.ts +13 -0
- package/dist/server/src/context.js +21 -0
- package/dist/server/src/context.js.map +1 -0
- package/dist/server/src/hooks.d.ts +12 -0
- package/dist/server/src/hooks.js +170 -0
- package/dist/server/src/hooks.js.map +1 -0
- package/dist/server/src/index.client.d.ts +12 -0
- package/dist/server/src/index.client.js +14 -0
- package/dist/server/src/index.client.js.map +1 -0
- package/dist/server/src/index.d.ts +88 -0
- package/dist/server/src/index.js +70 -0
- package/dist/server/src/index.js.map +1 -0
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +1 -0
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +2 -0
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +1 -0
- package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +4 -0
- package/dist/server/src/jsx-runtime/jsx-runtime.js +41 -0
- package/dist/server/src/jsx-runtime/jsx-runtime.js.map +1 -0
- package/dist/server/src/jsx-runtime.d.ts +20 -0
- package/dist/server/src/jsx-runtime.js +105 -0
- package/dist/server/src/jsx-runtime.js.map +1 -0
- package/dist/server/src/renderComponent.d.ts +14 -0
- package/dist/server/src/renderComponent.js +25 -0
- package/dist/server/src/renderComponent.js.map +1 -0
- package/dist/server/src/renderer.d.ts +2 -0
- package/dist/server/src/renderer.js +31 -0
- package/dist/server/src/renderer.js.map +1 -0
- package/dist/server/src/server/api-router.d.ts +15 -0
- package/dist/server/src/server/api-router.js +111 -0
- package/dist/server/src/server/api-router.js.map +1 -0
- package/dist/server/src/server/auth.d.ts +32 -0
- package/dist/server/src/server/auth.js +80 -0
- package/dist/server/src/server/auth.js.map +1 -0
- package/dist/server/src/server/database.d.ts +24 -0
- package/dist/server/src/server/database.js +135 -0
- package/dist/server/src/server/database.js.map +1 -0
- package/dist/server/src/server/index.d.ts +54 -0
- package/dist/server/src/server/index.js +172 -0
- package/dist/server/src/server/index.js.map +1 -0
- package/dist/server/src/server/middleware.d.ts +11 -0
- package/dist/server/src/server/middleware.js +46 -0
- package/dist/server/src/server/middleware.js.map +1 -0
- package/dist/server/src/server/server.d.ts +9 -0
- package/dist/server/src/server/server.js +87 -0
- package/dist/server/src/server/server.js.map +1 -0
- package/dist/server/src/server/types.d.ts +38 -0
- package/dist/server/src/server/types.js +4 -0
- package/dist/server/src/server/types.js.map +1 -0
- package/dist/server/src/server/wasm.d.ts +9 -0
- package/dist/server/src/server/wasm.js +117 -0
- package/dist/server/src/server/wasm.js.map +1 -0
- package/dist/server/src/server-renderer.d.ts +5 -0
- package/dist/server/src/server-renderer.js +106 -0
- package/dist/server/src/server-renderer.js.map +1 -0
- package/dist/server/src/server-types.d.ts +42 -0
- package/dist/server/src/server-types.js +6 -0
- package/dist/server/src/server-types.js.map +1 -0
- package/dist/server/src/types.d.ts +19 -0
- package/dist/server/src/types.js +2 -0
- package/dist/server/src/types.js.map +1 -0
- package/dist/server/src/vdom.d.ts +8 -0
- package/dist/server/src/vdom.js +22 -0
- package/dist/server/src/vdom.js.map +1 -0
- package/dist/server/src/wasm.d.ts +36 -0
- package/dist/server/src/wasm.js +159 -0
- package/dist/server/src/wasm.js.map +1 -0
- package/dist/server/tsconfig.server.tsbuildinfo +1 -0
- package/dist/server/wasm.d.ts +7 -0
- package/dist/server-renderer.js +1 -0
- package/dist/server-renderer.mjs +64 -0
- package/dist/wasm.d.ts +37 -0
- package/dist/wasm.js +1 -0
- package/dist/wasm.mjs +103 -0
- package/package.json +1 -1
- package/templates/go/build.sh +43 -43
- package/templates/go-wasm-app/build-wasm.js +84 -84
- package/templates/go-wasm-app/package.json +6 -5
- package/templates/go-wasm-app/public/index.html +49 -53
- package/templates/go-wasm-app/server.js +0 -188
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
@@ -0,0 +1,54 @@
|
|
1
|
+
import { Express } 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
|
+
export interface ServerConfig {
|
8
|
+
port?: number;
|
9
|
+
apiDir?: string;
|
10
|
+
pagesDir?: string;
|
11
|
+
staticDir?: string;
|
12
|
+
enableCors?: boolean;
|
13
|
+
corsOptions?: cors.CorsOptions;
|
14
|
+
db?: {
|
15
|
+
url: string;
|
16
|
+
type: 'mongodb' | 'mysql' | 'postgres';
|
17
|
+
};
|
18
|
+
auth?: {
|
19
|
+
secret: string;
|
20
|
+
expiresIn?: SignOptions['expiresIn'];
|
21
|
+
};
|
22
|
+
}
|
23
|
+
export declare class Server {
|
24
|
+
private app;
|
25
|
+
private server;
|
26
|
+
private config;
|
27
|
+
private db;
|
28
|
+
private auth;
|
29
|
+
constructor(config?: ServerConfig);
|
30
|
+
private setupApiRoutes;
|
31
|
+
private setupPageRoutes;
|
32
|
+
private renderPage;
|
33
|
+
getExpressApp(): Express;
|
34
|
+
getDatabase(): Database | null;
|
35
|
+
getAuth(): AuthService | null;
|
36
|
+
start(): Promise<void>;
|
37
|
+
stop(): Promise<void>;
|
38
|
+
}
|
39
|
+
export { Database } from './database.js';
|
40
|
+
export { AuthService } from './auth.js';
|
41
|
+
export { ApiRouter } from './api-router.js';
|
42
|
+
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './middleware.js';
|
43
|
+
export { renderToString };
|
44
|
+
export declare const renderComponent: (Component: any, props?: any) => Promise<{
|
45
|
+
html: string;
|
46
|
+
success: boolean;
|
47
|
+
error?: undefined;
|
48
|
+
} | {
|
49
|
+
html: string;
|
50
|
+
success: boolean;
|
51
|
+
error: unknown;
|
52
|
+
}>;
|
53
|
+
export { initNodeWasm, loadGoWasmFromFile } from './wasm.js';
|
54
|
+
export default Server;
|
@@ -0,0 +1,172 @@
|
|
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.js';
|
6
|
+
import { Database } from './database.js';
|
7
|
+
import { AuthService } from './auth.js';
|
8
|
+
import { ApiRouter } from './api-router.js';
|
9
|
+
export class Server {
|
10
|
+
constructor(config = {}) {
|
11
|
+
Object.defineProperty(this, "app", {
|
12
|
+
enumerable: true,
|
13
|
+
configurable: true,
|
14
|
+
writable: true,
|
15
|
+
value: void 0
|
16
|
+
});
|
17
|
+
Object.defineProperty(this, "server", {
|
18
|
+
enumerable: true,
|
19
|
+
configurable: true,
|
20
|
+
writable: true,
|
21
|
+
value: null
|
22
|
+
});
|
23
|
+
Object.defineProperty(this, "config", {
|
24
|
+
enumerable: true,
|
25
|
+
configurable: true,
|
26
|
+
writable: true,
|
27
|
+
value: void 0
|
28
|
+
});
|
29
|
+
Object.defineProperty(this, "db", {
|
30
|
+
enumerable: true,
|
31
|
+
configurable: true,
|
32
|
+
writable: true,
|
33
|
+
value: null
|
34
|
+
});
|
35
|
+
Object.defineProperty(this, "auth", {
|
36
|
+
enumerable: true,
|
37
|
+
configurable: true,
|
38
|
+
writable: true,
|
39
|
+
value: null
|
40
|
+
});
|
41
|
+
this.config = {
|
42
|
+
port: 3000,
|
43
|
+
apiDir: './api',
|
44
|
+
pagesDir: './pages',
|
45
|
+
staticDir: './public',
|
46
|
+
enableCors: true,
|
47
|
+
...config
|
48
|
+
};
|
49
|
+
this.app = express();
|
50
|
+
// Basic middleware
|
51
|
+
this.app.use(express.json());
|
52
|
+
this.app.use(express.urlencoded({ extended: true }));
|
53
|
+
// CORS setup
|
54
|
+
if (this.config.enableCors) {
|
55
|
+
this.app.use(cors(this.config.corsOptions));
|
56
|
+
}
|
57
|
+
// Setup database if configured
|
58
|
+
if (this.config.db) {
|
59
|
+
this.db = new Database(this.config.db);
|
60
|
+
}
|
61
|
+
// Setup auth if configured
|
62
|
+
if (this.config.auth) {
|
63
|
+
// Fix by explicitly typing the auth configuration
|
64
|
+
this.auth = new AuthService({
|
65
|
+
secret: this.config.auth.secret,
|
66
|
+
expiresIn: this.config.auth.expiresIn
|
67
|
+
});
|
68
|
+
// Expose auth middleware
|
69
|
+
this.app.use(this.auth.initialize());
|
70
|
+
}
|
71
|
+
// Static files
|
72
|
+
if (fs.existsSync(path.resolve(process.cwd(), this.config.staticDir))) {
|
73
|
+
this.app.use(express.static(path.resolve(process.cwd(), this.config.staticDir)));
|
74
|
+
}
|
75
|
+
// Setup API routes
|
76
|
+
this.setupApiRoutes();
|
77
|
+
// Setup page routes (for SSR)
|
78
|
+
this.setupPageRoutes();
|
79
|
+
}
|
80
|
+
setupApiRoutes() {
|
81
|
+
const apiRouter = new ApiRouter(this.config.apiDir, this.auth);
|
82
|
+
this.app.use('/api', apiRouter.router);
|
83
|
+
}
|
84
|
+
setupPageRoutes() {
|
85
|
+
if (!fs.existsSync(path.resolve(process.cwd(), this.config.pagesDir))) {
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
// Setup catch-all route for SSR
|
89
|
+
this.app.get('*', async (req, res) => {
|
90
|
+
try {
|
91
|
+
// Implement page routing logic
|
92
|
+
const { html, statusCode } = await this.renderPage(req.path);
|
93
|
+
res.status(statusCode || 200).send(html);
|
94
|
+
}
|
95
|
+
catch (error) {
|
96
|
+
console.error('Error rendering page:', error);
|
97
|
+
res.status(500).send('Server Error');
|
98
|
+
}
|
99
|
+
});
|
100
|
+
}
|
101
|
+
async renderPage(path) {
|
102
|
+
// Implementation would find the correct page component and render it
|
103
|
+
// This is a simplified version
|
104
|
+
return {
|
105
|
+
html: `<!DOCTYPE html><html><body><h1>Page: ${path}</h1></body></html>`,
|
106
|
+
statusCode: 200
|
107
|
+
};
|
108
|
+
}
|
109
|
+
getExpressApp() {
|
110
|
+
return this.app;
|
111
|
+
}
|
112
|
+
getDatabase() {
|
113
|
+
return this.db;
|
114
|
+
}
|
115
|
+
getAuth() {
|
116
|
+
return this.auth;
|
117
|
+
}
|
118
|
+
start() {
|
119
|
+
return new Promise((resolve) => {
|
120
|
+
this.server = this.app.listen(this.config.port, () => {
|
121
|
+
console.log(`Server running at http://localhost:${this.config.port}`);
|
122
|
+
resolve();
|
123
|
+
});
|
124
|
+
});
|
125
|
+
}
|
126
|
+
stop() {
|
127
|
+
return new Promise((resolve, reject) => {
|
128
|
+
if (!this.server) {
|
129
|
+
return resolve();
|
130
|
+
}
|
131
|
+
this.server.close((err) => {
|
132
|
+
if (err)
|
133
|
+
return reject(err);
|
134
|
+
this.server = null;
|
135
|
+
resolve();
|
136
|
+
});
|
137
|
+
});
|
138
|
+
}
|
139
|
+
}
|
140
|
+
// Server module main export file
|
141
|
+
// Export all server components
|
142
|
+
// Server is already exported above, no need to re-export
|
143
|
+
export { Database } from './database.js';
|
144
|
+
export { AuthService } from './auth.js';
|
145
|
+
export { ApiRouter } from './api-router.js';
|
146
|
+
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './middleware.js';
|
147
|
+
// Export renderToString for convenient SSR
|
148
|
+
export { renderToString };
|
149
|
+
// Fix the renderComponent function
|
150
|
+
export const renderComponent = async (Component, props = {}) => {
|
151
|
+
try {
|
152
|
+
// Create HTML string from component
|
153
|
+
const html = renderToString(Component(props));
|
154
|
+
return {
|
155
|
+
html,
|
156
|
+
success: true
|
157
|
+
};
|
158
|
+
}
|
159
|
+
catch (error) {
|
160
|
+
console.error('Error rendering component:', error);
|
161
|
+
return {
|
162
|
+
html: `<div class="error">Error rendering component</div>`,
|
163
|
+
success: false,
|
164
|
+
error
|
165
|
+
};
|
166
|
+
}
|
167
|
+
};
|
168
|
+
// Export WASM utilities for server-side usage
|
169
|
+
export { initNodeWasm, loadGoWasmFromFile } from './wasm.js';
|
170
|
+
// Export default Server class for convenience
|
171
|
+
export default Server;
|
172
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,11 @@
|
|
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>>;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// Common middleware functions
|
2
|
+
export const requestLogger = (req, res, next) => {
|
3
|
+
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
|
4
|
+
next();
|
5
|
+
};
|
6
|
+
export const errorHandler = (err, req, res, next) => {
|
7
|
+
console.error(err.stack);
|
8
|
+
res.status(500).json({
|
9
|
+
error: {
|
10
|
+
message: 'Internal Server Error',
|
11
|
+
...(process.env.NODE_ENV !== 'production' ? { details: err.message, stack: err.stack } : {})
|
12
|
+
}
|
13
|
+
});
|
14
|
+
};
|
15
|
+
export const notFoundHandler = (req, res) => {
|
16
|
+
res.status(404).json({
|
17
|
+
error: {
|
18
|
+
message: `Not Found - ${req.method} ${req.url}`
|
19
|
+
}
|
20
|
+
});
|
21
|
+
};
|
22
|
+
// Middleware for rate limiting
|
23
|
+
export function rateLimit(options) {
|
24
|
+
const requests = new Map();
|
25
|
+
return (req, res, next) => {
|
26
|
+
const ip = req.ip || 'unknown';
|
27
|
+
const now = Date.now();
|
28
|
+
// Get existing requests and filter out old ones
|
29
|
+
const reqTimes = (requests.get(ip) || [])
|
30
|
+
.filter(time => now - time < options.windowMs);
|
31
|
+
// Add current request
|
32
|
+
reqTimes.push(now);
|
33
|
+
requests.set(ip, reqTimes);
|
34
|
+
// Check if too many requests
|
35
|
+
if (reqTimes.length > options.max) {
|
36
|
+
return res.status(429).json({
|
37
|
+
error: {
|
38
|
+
message: 'Too Many Requests',
|
39
|
+
retryAfter: Math.ceil(options.windowMs / 1000)
|
40
|
+
}
|
41
|
+
});
|
42
|
+
}
|
43
|
+
return next();
|
44
|
+
};
|
45
|
+
}
|
46
|
+
//# sourceMappingURL=middleware.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/server/middleware.ts"],"names":[],"mappings":"AAMA,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAClE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACtE,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAU,EACV,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE;YACL,OAAO,EAAE,uBAAuB;YAChC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE;YACL,OAAO,EAAE,eAAe,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;SAChD;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,+BAA+B;AAC/B,MAAM,UAAU,SAAS,CAAC,OAA0C;IAClE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE7C,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,gDAAgD;QAChD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aACtC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjD,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE3B,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE;oBACL,OAAO,EAAE,mBAAmB;oBAC5B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;iBAC/C;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import fs from 'fs';
|
2
|
+
import path from 'path';
|
3
|
+
import { renderComponent } from '../renderComponent.js'; // Fixed import path with .js extension
|
4
|
+
class Server {
|
5
|
+
constructor(config) {
|
6
|
+
Object.defineProperty(this, "config", {
|
7
|
+
enumerable: true,
|
8
|
+
configurable: true,
|
9
|
+
writable: true,
|
10
|
+
value: void 0
|
11
|
+
});
|
12
|
+
this.config = config;
|
13
|
+
}
|
14
|
+
async renderPage(urlPath) {
|
15
|
+
try {
|
16
|
+
// Try to find the page component
|
17
|
+
const pagesDir = path.resolve(process.cwd(), this.config.pagesDir);
|
18
|
+
// Check various file patterns
|
19
|
+
let pagePath = '';
|
20
|
+
const possiblePagePaths = [
|
21
|
+
`${pagesDir}${path}.jsx`,
|
22
|
+
`${pagesDir}${path}.tsx`,
|
23
|
+
`${pagesDir}${path}/index.jsx`,
|
24
|
+
`${pagesDir}${path}/index.tsx`,
|
25
|
+
// For dynamic routes
|
26
|
+
...fs.readdirSync(pagesDir, { recursive: true })
|
27
|
+
.filter((file) => typeof file === 'string')
|
28
|
+
.filter((file) => file.endsWith('.jsx') || file.endsWith('.tsx'))
|
29
|
+
.map((file) => path.join(pagesDir, file))
|
30
|
+
.filter((file) => {
|
31
|
+
const routePattern = file
|
32
|
+
.replace(pagesDir, '')
|
33
|
+
.replace(/\.[jt]sx$/, '')
|
34
|
+
.replace(/\/index$/, '/')
|
35
|
+
.replace(/\[([^\]]+)\]/g, ':$1');
|
36
|
+
// Create Express-like path matcher
|
37
|
+
return this.pathMatchesPattern(urlPath, routePattern);
|
38
|
+
})
|
39
|
+
];
|
40
|
+
for (const possiblePath of possiblePagePaths) {
|
41
|
+
if (fs.existsSync(possiblePath)) {
|
42
|
+
pagePath = possiblePath;
|
43
|
+
break;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
if (!pagePath) {
|
47
|
+
return {
|
48
|
+
html: `<!DOCTYPE html><html><body><h1>404 - Page Not Found</h1></body></html>`,
|
49
|
+
statusCode: 404
|
50
|
+
};
|
51
|
+
}
|
52
|
+
// Import and render the page component
|
53
|
+
const { default: PageComponent } = await import(pagePath);
|
54
|
+
if (!PageComponent || typeof PageComponent !== 'function') {
|
55
|
+
throw new Error(`Invalid page component: ${pagePath}`);
|
56
|
+
}
|
57
|
+
const { html } = await renderComponent(PageComponent);
|
58
|
+
// Add DOCTYPE and wrap in html/body if not present
|
59
|
+
let finalHtml = html;
|
60
|
+
if (!finalHtml.includes('<!DOCTYPE')) {
|
61
|
+
finalHtml = `<!DOCTYPE html><html><head>
|
62
|
+
<meta charset="UTF-8">
|
63
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
64
|
+
<script type="module" src="/client.js"></script>
|
65
|
+
</head><body>${finalHtml}</body></html>`;
|
66
|
+
}
|
67
|
+
return { html: finalHtml, statusCode: 200 };
|
68
|
+
}
|
69
|
+
catch (error) {
|
70
|
+
console.error('Error rendering page:', error);
|
71
|
+
return {
|
72
|
+
html: `<!DOCTYPE html><html><body><h1>500 - Server Error</h1><pre>${error}</pre></body></html>`,
|
73
|
+
statusCode: 500
|
74
|
+
};
|
75
|
+
}
|
76
|
+
}
|
77
|
+
pathMatchesPattern(path, pattern) {
|
78
|
+
// Convert Express-like pattern to regex
|
79
|
+
const regexPattern = pattern
|
80
|
+
.replace(/\//g, '\\/') // Escape slashes
|
81
|
+
.replace(/:([^\/]+)/g, '([^\\/]+)'); // Convert :param to regex group
|
82
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
83
|
+
return regex.test(path);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
export default Server;
|
87
|
+
//# sourceMappingURL=server.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/server/server.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
export interface ServerConfig {
|
2
|
+
port?: number;
|
3
|
+
apiDir?: string;
|
4
|
+
pagesDir?: string;
|
5
|
+
staticDir?: string;
|
6
|
+
enableCors?: boolean;
|
7
|
+
corsOptions?: any;
|
8
|
+
db?: {
|
9
|
+
url: string;
|
10
|
+
type: 'mongodb' | 'mysql' | 'postgres';
|
11
|
+
};
|
12
|
+
auth?: {
|
13
|
+
secret: string;
|
14
|
+
expiresIn?: string;
|
15
|
+
};
|
16
|
+
}
|
17
|
+
export interface Server {
|
18
|
+
start(): Promise<void>;
|
19
|
+
stop(): Promise<void>;
|
20
|
+
getExpressApp(): any;
|
21
|
+
getDatabase(): any;
|
22
|
+
getAuth(): any;
|
23
|
+
}
|
24
|
+
export interface User {
|
25
|
+
id: string | number;
|
26
|
+
username: string;
|
27
|
+
password?: string;
|
28
|
+
email?: string;
|
29
|
+
roles?: string[];
|
30
|
+
[key: string]: any;
|
31
|
+
}
|
32
|
+
export interface DbConfig {
|
33
|
+
url: string;
|
34
|
+
type: 'mongodb' | 'mysql' | 'postgres';
|
35
|
+
}
|
36
|
+
export interface MiddlewareFunction {
|
37
|
+
(req: any, res: any, next: any): void | Promise<void>;
|
38
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/server/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,kDAAkD"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { GoWasmInstance, GoWasmOptions } from '../wasm.js';
|
2
|
+
/**
|
3
|
+
* Initialize the Node.js environment for running Go WASM modules
|
4
|
+
*/
|
5
|
+
export declare function initNodeWasm(): Promise<void>;
|
6
|
+
/**
|
7
|
+
* Load a Go WASM module from a file path for server-side usage
|
8
|
+
*/
|
9
|
+
export declare function loadGoWasmFromFile(wasmFilePath: string, options?: GoWasmOptions): Promise<GoWasmInstance>;
|
@@ -0,0 +1,117 @@
|
|
1
|
+
/**
|
2
|
+
* Server-side Go WASM integration for Node.js
|
3
|
+
*/
|
4
|
+
import fs from 'fs/promises';
|
5
|
+
import path from 'path';
|
6
|
+
import { fileURLToPath } from 'url';
|
7
|
+
// Global flag to ensure we only initialize WASM once
|
8
|
+
let initialized = false;
|
9
|
+
/**
|
10
|
+
* Initialize the Node.js environment for running Go WASM modules
|
11
|
+
*/
|
12
|
+
export async function initNodeWasm() {
|
13
|
+
if (initialized)
|
14
|
+
return;
|
15
|
+
try {
|
16
|
+
// Check if node requires WASM flags
|
17
|
+
const nodeVersion = process.version;
|
18
|
+
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0], 10);
|
19
|
+
// Node.js version check for WASM flags requirement
|
20
|
+
if (majorVersion < 16) {
|
21
|
+
console.warn('[WASM] Note: Node.js version < 16 detected. ' +
|
22
|
+
'You may need --experimental-wasm-bigint flag for Go WASM modules.');
|
23
|
+
}
|
24
|
+
// Global WASM environment setup for Node.js
|
25
|
+
globalThis.TextEncoder = globalThis.TextEncoder || TextEncoder;
|
26
|
+
globalThis.TextDecoder = globalThis.TextDecoder || TextDecoder;
|
27
|
+
// Mark as initialized
|
28
|
+
initialized = true;
|
29
|
+
}
|
30
|
+
catch (error) {
|
31
|
+
console.error('[WASM] Failed to initialize Node.js WASM environment:', error);
|
32
|
+
throw error;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
/**
|
36
|
+
* Load a Go WASM module from a file path for server-side usage
|
37
|
+
*/
|
38
|
+
export async function loadGoWasmFromFile(wasmFilePath, options = {}) {
|
39
|
+
try {
|
40
|
+
// Initialize Node.js WASM environment
|
41
|
+
await initNodeWasm();
|
42
|
+
// Get __dirname equivalent in ESM
|
43
|
+
const __filename = fileURLToPath(import.meta.url);
|
44
|
+
const __dirname = path.dirname(__filename);
|
45
|
+
// Load Go runtime
|
46
|
+
const goRuntimePath = options.goWasmPath ||
|
47
|
+
path.join(__dirname, '..', '..', 'templates', 'go', 'wasm_exec_node.js');
|
48
|
+
// Import the Go runtime
|
49
|
+
const { Go } = await import(goRuntimePath);
|
50
|
+
const go = new Go();
|
51
|
+
// Load WASM binary
|
52
|
+
const wasmBuffer = await fs.readFile(wasmFilePath);
|
53
|
+
const wasmModule = await WebAssembly.compile(wasmBuffer);
|
54
|
+
// Create imports object
|
55
|
+
const finalImportObject = {
|
56
|
+
...go.importObject,
|
57
|
+
...options.importObject
|
58
|
+
};
|
59
|
+
// Instantiate the WASM module
|
60
|
+
const instance = await WebAssembly.instantiate(wasmModule, finalImportObject);
|
61
|
+
// Initialize Go runtime
|
62
|
+
go.run(instance);
|
63
|
+
// Extract exported functions
|
64
|
+
const exports = instance.exports;
|
65
|
+
const functions = {};
|
66
|
+
// Generate wrapper functions for all exports that are functions
|
67
|
+
for (const key in exports) {
|
68
|
+
if (typeof exports[key] === 'function') {
|
69
|
+
// Fix the type assertion
|
70
|
+
const exportedFunc = exports[key];
|
71
|
+
functions[key] = (...args) => exportedFunc(...args);
|
72
|
+
if (options.debug) {
|
73
|
+
const originalFn = functions[key];
|
74
|
+
functions[key] = (...args) => {
|
75
|
+
console.log(`[WASM] Calling ${key}(${args.join(', ')})`);
|
76
|
+
const result = originalFn(...args);
|
77
|
+
console.log(`[WASM] ${key} returned:`, result);
|
78
|
+
return result;
|
79
|
+
};
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
// Also capture global functions exported by Go
|
84
|
+
for (const key in global) {
|
85
|
+
if (key.startsWith('go') && typeof global[key] === 'function') {
|
86
|
+
// Fix the type assertion
|
87
|
+
const globalFunc = global[key];
|
88
|
+
functions[key] = (...args) => globalFunc(...args);
|
89
|
+
if (options.debug) {
|
90
|
+
const originalFn = functions[key];
|
91
|
+
functions[key] = (...args) => {
|
92
|
+
console.log(`[WASM] Calling global ${key}(${args.join(', ')})`);
|
93
|
+
const result = originalFn(...args);
|
94
|
+
console.log(`[WASM] ${key} returned:`, result);
|
95
|
+
return result;
|
96
|
+
};
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
const wasmInstance = {
|
101
|
+
instance,
|
102
|
+
module: wasmModule,
|
103
|
+
exports,
|
104
|
+
functions
|
105
|
+
};
|
106
|
+
// Run onLoad callback if provided
|
107
|
+
if (options.onLoad) {
|
108
|
+
options.onLoad(wasmInstance);
|
109
|
+
}
|
110
|
+
return wasmInstance;
|
111
|
+
}
|
112
|
+
catch (error) {
|
113
|
+
console.error('[WASM] Failed to load Go WASM module:', error);
|
114
|
+
throw error;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
//# sourceMappingURL=wasm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../../src/server/wasm.ts"],"names":[],"mappings":"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"}
|