frontend-hamroun 1.2.79 → 1.2.80

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -1513
  3. package/bin/cli.js +505 -144
  4. package/dist/index.cjs +2 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.client.cjs +2 -0
  7. package/dist/index.client.cjs.map +1 -0
  8. package/dist/index.client.js +26 -0
  9. package/dist/index.client.js.map +1 -0
  10. package/dist/index.js +298 -1
  11. package/dist/index.js.map +1 -0
  12. package/dist/jsx-runtime.cjs +2 -0
  13. package/dist/jsx-runtime.cjs.map +1 -0
  14. package/dist/jsx-runtime.js +93 -1
  15. package/dist/jsx-runtime.js.map +1 -0
  16. package/dist/renderer-Bo9zkUZ_.js +52 -0
  17. package/dist/renderer-Bo9zkUZ_.js.map +1 -0
  18. package/dist/renderer-Din1y3YM.cjs +2 -0
  19. package/dist/renderer-Din1y3YM.cjs.map +1 -0
  20. package/dist/server-renderer-CqIpQ-od.cjs +2 -0
  21. package/dist/server-renderer-CqIpQ-od.cjs.map +1 -0
  22. package/dist/server-renderer-QHt45Ip2.js +255 -0
  23. package/dist/server-renderer-QHt45Ip2.js.map +1 -0
  24. package/dist/server-renderer.cjs +2 -0
  25. package/dist/server-renderer.cjs.map +1 -0
  26. package/dist/server-renderer.js +5 -1
  27. package/dist/server-renderer.js.map +1 -0
  28. package/package.json +77 -120
  29. package/templates/basic-app/build.js +22 -0
  30. package/templates/basic-app/bun.lock +196 -0
  31. package/templates/basic-app/dev.js +27 -0
  32. package/templates/basic-app/docs/rapport_pfe.aux +27 -27
  33. package/templates/basic-app/docs/rapport_pfe.out +10 -10
  34. package/templates/basic-app/docs/rapport_pfe.toc +14 -14
  35. package/templates/basic-app/esbuild.config.js +28 -0
  36. package/templates/basic-app/index.html +1 -1
  37. package/templates/{fullstack-app → basic-app}/package-lock.json +4185 -5094
  38. package/templates/basic-app/package.json +29 -28
  39. package/templates/basic-app/server.js +24 -0
  40. package/templates/basic-app/src/App.tsx +26 -0
  41. package/templates/basic-app/src/client.tsx +11 -0
  42. package/templates/basic-app/src/components/Counter.tsx +18 -0
  43. package/templates/basic-app/src/jsx-shim.ts +4 -0
  44. package/templates/basic-app/src/main.tsx +0 -1
  45. package/templates/basic-app/src/server.ts +52 -0
  46. package/templates/basic-app/tsconfig.server.json +11 -0
  47. package/templates/fullstack-app/build/main.css +874 -874
  48. package/templates/fullstack-app/build/main.css.map +7 -7
  49. package/templates/fullstack-app/build/main.js +967 -967
  50. package/templates/fullstack-app/build/main.js.map +7 -7
  51. package/templates/fullstack-app/public/styles.css +768 -768
  52. package/templates/go/example.go +99 -154
  53. package/templates/go-wasm-app/babel.config.js +2 -8
  54. package/templates/go-wasm-app/package.json +12 -21
  55. package/templates/go-wasm-app/public/wasm/wasm_exec.js +561 -561
  56. package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +39 -39
  57. package/templates/go-wasm-app/server.js +510 -59
  58. package/templates/go-wasm-app/src/app.js +2 -22
  59. package/templates/go-wasm-app/src/wasm/example.go +75 -75
  60. package/templates/go-wasm-app/vite.config.js +5 -16
  61. package/templates/ssr-template/server.js +2 -2
  62. package/templates/ssr-template/vite.config.js +5 -16
  63. package/dist/Counter.d.ts +0 -0
  64. package/dist/batch/package.json +0 -16
  65. package/dist/client-router/package.json +0 -16
  66. package/dist/component/package.json +0 -16
  67. package/dist/context/package.json +0 -16
  68. package/dist/event-bus/package.json +0 -16
  69. package/dist/forms/package.json +0 -16
  70. package/dist/hooks/package.json +0 -16
  71. package/dist/hooks-0728361a.cjs +0 -1
  72. package/dist/hooks-b58f947c.js +0 -133
  73. package/dist/hooks.js +0 -1
  74. package/dist/hooks.mjs +0 -13
  75. package/dist/index.mjs +0 -137
  76. package/dist/jsx-runtime/package.json +0 -16
  77. package/dist/jsx-runtime.mjs +0 -64
  78. package/dist/lifecycle-events/package.json +0 -16
  79. package/dist/package.json +0 -71
  80. package/dist/render-component/package.json +0 -16
  81. package/dist/renderer/package.json +0 -16
  82. package/dist/renderer.js +0 -1
  83. package/dist/renderer.mjs +0 -27
  84. package/dist/router/package.json +0 -16
  85. package/dist/server/package.json +0 -17
  86. package/dist/server/src/batch.d.ts +0 -3
  87. package/dist/server/src/batch.js +0 -23
  88. package/dist/server/src/batch.js.map +0 -1
  89. package/dist/server/src/client-router.d.ts +0 -60
  90. package/dist/server/src/client-router.js +0 -210
  91. package/dist/server/src/client-router.js.map +0 -1
  92. package/dist/server/src/component.d.ts +0 -14
  93. package/dist/server/src/component.js +0 -106
  94. package/dist/server/src/component.js.map +0 -1
  95. package/dist/server/src/context.d.ts +0 -13
  96. package/dist/server/src/context.js +0 -21
  97. package/dist/server/src/context.js.map +0 -1
  98. package/dist/server/src/event-bus.d.ts +0 -23
  99. package/dist/server/src/event-bus.js +0 -75
  100. package/dist/server/src/event-bus.js.map +0 -1
  101. package/dist/server/src/forms.d.ts +0 -40
  102. package/dist/server/src/forms.js +0 -148
  103. package/dist/server/src/forms.js.map +0 -1
  104. package/dist/server/src/hooks.d.ts +0 -12
  105. package/dist/server/src/hooks.js +0 -170
  106. package/dist/server/src/hooks.js.map +0 -1
  107. package/dist/server/src/index.client.d.ts +0 -12
  108. package/dist/server/src/index.client.js +0 -14
  109. package/dist/server/src/index.client.js.map +0 -1
  110. package/dist/server/src/index.d.ts +0 -88
  111. package/dist/server/src/index.js +0 -79
  112. package/dist/server/src/index.js.map +0 -1
  113. package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +0 -1
  114. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +0 -2
  115. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +0 -1
  116. package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +0 -4
  117. package/dist/server/src/jsx-runtime/jsx-runtime.js +0 -41
  118. package/dist/server/src/jsx-runtime/jsx-runtime.js.map +0 -1
  119. package/dist/server/src/jsx-runtime.d.ts +0 -20
  120. package/dist/server/src/jsx-runtime.js +0 -105
  121. package/dist/server/src/jsx-runtime.js.map +0 -1
  122. package/dist/server/src/lifecycle-events.d.ts +0 -108
  123. package/dist/server/src/lifecycle-events.js +0 -177
  124. package/dist/server/src/lifecycle-events.js.map +0 -1
  125. package/dist/server/src/renderComponent.d.ts +0 -13
  126. package/dist/server/src/renderComponent.js +0 -30
  127. package/dist/server/src/renderComponent.js.map +0 -1
  128. package/dist/server/src/renderer.d.ts +0 -2
  129. package/dist/server/src/renderer.js +0 -31
  130. package/dist/server/src/renderer.js.map +0 -1
  131. package/dist/server/src/router.d.ts +0 -55
  132. package/dist/server/src/router.js +0 -166
  133. package/dist/server/src/router.js.map +0 -1
  134. package/dist/server/src/server/api-router.d.ts +0 -15
  135. package/dist/server/src/server/api-router.js +0 -111
  136. package/dist/server/src/server/api-router.js.map +0 -1
  137. package/dist/server/src/server/auth.d.ts +0 -32
  138. package/dist/server/src/server/auth.js +0 -80
  139. package/dist/server/src/server/auth.js.map +0 -1
  140. package/dist/server/src/server/database.d.ts +0 -24
  141. package/dist/server/src/server/database.js +0 -135
  142. package/dist/server/src/server/database.js.map +0 -1
  143. package/dist/server/src/server/index.d.ts +0 -116
  144. package/dist/server/src/server/index.js +0 -508
  145. package/dist/server/src/server/index.js.map +0 -1
  146. package/dist/server/src/server/middleware.d.ts +0 -11
  147. package/dist/server/src/server/middleware.js +0 -46
  148. package/dist/server/src/server/middleware.js.map +0 -1
  149. package/dist/server/src/server/server.d.ts +0 -9
  150. package/dist/server/src/server/server.js +0 -87
  151. package/dist/server/src/server/server.js.map +0 -1
  152. package/dist/server/src/server/templates.d.ts +0 -30
  153. package/dist/server/src/server/templates.js +0 -208
  154. package/dist/server/src/server/templates.js.map +0 -1
  155. package/dist/server/src/server/types.d.ts +0 -38
  156. package/dist/server/src/server/types.js +0 -4
  157. package/dist/server/src/server/types.js.map +0 -1
  158. package/dist/server/src/server/utils.d.ts +0 -70
  159. package/dist/server/src/server/utils.js +0 -156
  160. package/dist/server/src/server/utils.js.map +0 -1
  161. package/dist/server/src/server/wasm.d.ts +0 -9
  162. package/dist/server/src/server/wasm.js +0 -117
  163. package/dist/server/src/server/wasm.js.map +0 -1
  164. package/dist/server/src/server-renderer.d.ts +0 -5
  165. package/dist/server/src/server-renderer.js +0 -106
  166. package/dist/server/src/server-renderer.js.map +0 -1
  167. package/dist/server/src/server-types.d.ts +0 -42
  168. package/dist/server/src/server-types.js +0 -6
  169. package/dist/server/src/server-types.js.map +0 -1
  170. package/dist/server/src/store.d.ts +0 -41
  171. package/dist/server/src/store.js +0 -99
  172. package/dist/server/src/store.js.map +0 -1
  173. package/dist/server/src/types.d.ts +0 -19
  174. package/dist/server/src/types.js +0 -2
  175. package/dist/server/src/types.js.map +0 -1
  176. package/dist/server/src/utils.d.ts +0 -46
  177. package/dist/server/src/utils.js +0 -144
  178. package/dist/server/src/utils.js.map +0 -1
  179. package/dist/server/src/vdom.d.ts +0 -8
  180. package/dist/server/src/vdom.js +0 -22
  181. package/dist/server/src/vdom.js.map +0 -1
  182. package/dist/server/src/wasm.d.ts +0 -36
  183. package/dist/server/src/wasm.js +0 -159
  184. package/dist/server/src/wasm.js.map +0 -1
  185. package/dist/server/tsconfig.server.tsbuildinfo +0 -1
  186. package/dist/server-renderer/package.json +0 -16
  187. package/dist/server-renderer.mjs +0 -64
  188. package/dist/store/package.json +0 -16
  189. package/dist/types/package.json +0 -16
  190. package/dist/utils/package.json +0 -16
  191. package/dist/vdom/package.json +0 -16
  192. package/dist/wasm/package.json +0 -16
  193. package/dist/wasm.js +0 -1
  194. package/dist/wasm.mjs +0 -103
  195. package/templates/basic-app/docs/rapport_pfe.log +0 -399
  196. package/templates/complete-app/client.js +0 -58
  197. package/templates/complete-app/package-lock.json +0 -2536
  198. package/templates/complete-app/package.json +0 -17
  199. package/templates/complete-app/pages/about.js +0 -119
  200. package/templates/complete-app/pages/index.js +0 -157
  201. package/templates/complete-app/pages/wasm-demo.js +0 -290
  202. package/templates/complete-app/public/client.js +0 -80
  203. package/templates/complete-app/public/index.html +0 -47
  204. package/templates/complete-app/public/styles.css +0 -579
  205. package/templates/complete-app/readme.md +0 -188
  206. package/templates/complete-app/server.js +0 -417
  207. package/templates/complete-app/server.ts +0 -275
  208. package/templates/complete-app/src/App.tsx +0 -59
  209. package/templates/complete-app/src/client.ts +0 -61
  210. package/templates/complete-app/src/client.tsx +0 -18
  211. package/templates/complete-app/src/pages/index.tsx +0 -51
  212. package/templates/complete-app/src/server.ts +0 -218
  213. package/templates/complete-app/tsconfig.json +0 -22
  214. package/templates/complete-app/tsconfig.server.json +0 -19
  215. package/templates/complete-app/vite.config.js +0 -57
  216. package/templates/complete-app/vite.config.ts +0 -30
  217. package/templates/go-wasm-app/build.config.js +0 -62
  218. package/templates/go-wasm-app/build.js +0 -218
  219. package/templates/go-wasm-app/package-lock.json +0 -3732
@@ -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>>;
@@ -1,46 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
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;