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.
Files changed (99) hide show
  1. package/dist/Counter.d.ts +0 -0
  2. package/dist/hooks-0728361a.cjs +1 -0
  3. package/dist/hooks-b58f947c.js +133 -0
  4. package/dist/hooks.js +1 -0
  5. package/dist/hooks.mjs +13 -0
  6. package/dist/index.js +1 -384
  7. package/dist/index.mjs +130 -374
  8. package/dist/jsx-runtime.js +1 -0
  9. package/dist/jsx-runtime.mjs +64 -0
  10. package/dist/renderer.js +1 -0
  11. package/dist/renderer.mjs +27 -0
  12. package/dist/server/src/batch.d.ts +3 -0
  13. package/dist/server/src/batch.js +23 -0
  14. package/dist/server/src/batch.js.map +1 -0
  15. package/dist/server/src/component.d.ts +14 -0
  16. package/dist/server/src/component.js +106 -0
  17. package/dist/server/src/component.js.map +1 -0
  18. package/dist/server/src/context.d.ts +13 -0
  19. package/dist/server/src/context.js +21 -0
  20. package/dist/server/src/context.js.map +1 -0
  21. package/dist/server/src/hooks.d.ts +12 -0
  22. package/dist/server/src/hooks.js +170 -0
  23. package/dist/server/src/hooks.js.map +1 -0
  24. package/dist/server/src/index.client.d.ts +12 -0
  25. package/dist/server/src/index.client.js +14 -0
  26. package/dist/server/src/index.client.js.map +1 -0
  27. package/dist/server/src/index.d.ts +88 -0
  28. package/dist/server/src/index.js +70 -0
  29. package/dist/server/src/index.js.map +1 -0
  30. package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +1 -0
  31. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +2 -0
  32. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +1 -0
  33. package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +4 -0
  34. package/dist/server/src/jsx-runtime/jsx-runtime.js +41 -0
  35. package/dist/server/src/jsx-runtime/jsx-runtime.js.map +1 -0
  36. package/dist/server/src/jsx-runtime.d.ts +20 -0
  37. package/dist/server/src/jsx-runtime.js +105 -0
  38. package/dist/server/src/jsx-runtime.js.map +1 -0
  39. package/dist/server/src/renderComponent.d.ts +14 -0
  40. package/dist/server/src/renderComponent.js +25 -0
  41. package/dist/server/src/renderComponent.js.map +1 -0
  42. package/dist/server/src/renderer.d.ts +2 -0
  43. package/dist/server/src/renderer.js +31 -0
  44. package/dist/server/src/renderer.js.map +1 -0
  45. package/dist/server/src/server/api-router.d.ts +15 -0
  46. package/dist/server/src/server/api-router.js +111 -0
  47. package/dist/server/src/server/api-router.js.map +1 -0
  48. package/dist/server/src/server/auth.d.ts +32 -0
  49. package/dist/server/src/server/auth.js +80 -0
  50. package/dist/server/src/server/auth.js.map +1 -0
  51. package/dist/server/src/server/database.d.ts +24 -0
  52. package/dist/server/src/server/database.js +135 -0
  53. package/dist/server/src/server/database.js.map +1 -0
  54. package/dist/server/src/server/index.d.ts +54 -0
  55. package/dist/server/src/server/index.js +172 -0
  56. package/dist/server/src/server/index.js.map +1 -0
  57. package/dist/server/src/server/middleware.d.ts +11 -0
  58. package/dist/server/src/server/middleware.js +46 -0
  59. package/dist/server/src/server/middleware.js.map +1 -0
  60. package/dist/server/src/server/server.d.ts +9 -0
  61. package/dist/server/src/server/server.js +87 -0
  62. package/dist/server/src/server/server.js.map +1 -0
  63. package/dist/server/src/server/types.d.ts +38 -0
  64. package/dist/server/src/server/types.js +4 -0
  65. package/dist/server/src/server/types.js.map +1 -0
  66. package/dist/server/src/server/wasm.d.ts +9 -0
  67. package/dist/server/src/server/wasm.js +117 -0
  68. package/dist/server/src/server/wasm.js.map +1 -0
  69. package/dist/server/src/server-renderer.d.ts +5 -0
  70. package/dist/server/src/server-renderer.js +106 -0
  71. package/dist/server/src/server-renderer.js.map +1 -0
  72. package/dist/server/src/server-types.d.ts +42 -0
  73. package/dist/server/src/server-types.js +6 -0
  74. package/dist/server/src/server-types.js.map +1 -0
  75. package/dist/server/src/types.d.ts +19 -0
  76. package/dist/server/src/types.js +2 -0
  77. package/dist/server/src/types.js.map +1 -0
  78. package/dist/server/src/vdom.d.ts +8 -0
  79. package/dist/server/src/vdom.js +22 -0
  80. package/dist/server/src/vdom.js.map +1 -0
  81. package/dist/server/src/wasm.d.ts +36 -0
  82. package/dist/server/src/wasm.js +159 -0
  83. package/dist/server/src/wasm.js.map +1 -0
  84. package/dist/server/tsconfig.server.tsbuildinfo +1 -0
  85. package/dist/server/wasm.d.ts +7 -0
  86. package/dist/server-renderer.js +1 -0
  87. package/dist/server-renderer.mjs +64 -0
  88. package/dist/wasm.d.ts +37 -0
  89. package/dist/wasm.js +1 -0
  90. package/dist/wasm.mjs +103 -0
  91. package/package.json +1 -1
  92. package/templates/go/build.sh +43 -43
  93. package/templates/go-wasm-app/build-wasm.js +84 -84
  94. package/templates/go-wasm-app/package.json +6 -5
  95. package/templates/go-wasm-app/public/index.html +49 -53
  96. package/templates/go-wasm-app/server.js +0 -188
  97. package/dist/index.d.ts +0 -1
  98. package/dist/index.js.map +0 -1
  99. 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,9 @@
1
+ declare class Server {
2
+ private config;
3
+ constructor(config: {
4
+ pagesDir?: string;
5
+ });
6
+ private renderPage;
7
+ private pathMatchesPattern;
8
+ }
9
+ export default Server;
@@ -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,4 @@
1
+ // Type definitions without actual implementation
2
+ // These can be safely imported in any environment
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -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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"}
@@ -0,0 +1,5 @@
1
+ import { VNode } from './types.js';
2
+ /**
3
+ * Renders a virtual DOM tree to an HTML string
4
+ */
5
+ export declare function renderToString(vnode: VNode): string;