baraqex 1.0.64 → 1.0.66

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 (97) hide show
  1. package/bin/baraqex.js +1013 -1126
  2. package/dist/api/hello.d.ts +3 -0
  3. package/dist/api/hello.d.ts.map +1 -0
  4. package/dist/api/users/[id].d.ts +5 -0
  5. package/dist/api/users/[id].d.ts.map +1 -0
  6. package/dist/browser.d.ts +40 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +407 -1
  9. package/dist/browser.js.map +4 -4
  10. package/dist/browser.package.json +4 -0
  11. package/dist/forms/index.d.ts +2 -0
  12. package/dist/forms/index.d.ts.map +1 -0
  13. package/dist/forms/types.d.ts +2 -0
  14. package/dist/forms/types.d.ts.map +1 -0
  15. package/dist/frontend/components/WasmLoader.d.ts +2 -0
  16. package/dist/frontend/components/WasmLoader.d.ts.map +1 -0
  17. package/dist/frontend/hooks/useWasm.d.ts +2 -0
  18. package/dist/frontend/hooks/useWasm.d.ts.map +1 -0
  19. package/dist/frontend/index.d.ts +2 -0
  20. package/dist/frontend/index.d.ts.map +1 -0
  21. package/dist/index.d.ts +38 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +678 -317
  24. package/dist/index.js.map +4 -4
  25. package/dist/renderComponent.d.ts +9 -0
  26. package/dist/renderComponent.d.ts.map +1 -0
  27. package/dist/router/index.d.ts +2 -0
  28. package/dist/router/index.d.ts.map +1 -0
  29. package/dist/router/types.d.ts +2 -0
  30. package/dist/router/types.d.ts.map +1 -0
  31. package/dist/server/api-router.d.ts +16 -0
  32. package/dist/server/api-router.d.ts.map +1 -0
  33. package/dist/server/auth.d.ts +25 -0
  34. package/dist/server/auth.d.ts.map +1 -0
  35. package/dist/server/database.d.ts +22 -0
  36. package/dist/server/database.d.ts.map +1 -0
  37. package/dist/server/index.d.ts +116 -0
  38. package/dist/server/index.d.ts.map +1 -0
  39. package/dist/{server.js → server/index.js} +120 -23
  40. package/dist/server/index.js.map +7 -0
  41. package/dist/server/middleware.d.ts +11 -0
  42. package/dist/server/middleware.d.ts.map +1 -0
  43. package/dist/server/package.json +4 -0
  44. package/dist/server/templates.d.ts +31 -0
  45. package/dist/server/templates.d.ts.map +1 -0
  46. package/dist/server/types.d.ts +69 -0
  47. package/dist/server/types.d.ts.map +1 -0
  48. package/dist/server/utils.d.ts +70 -0
  49. package/dist/server/utils.d.ts.map +1 -0
  50. package/dist/server/wasm.d.ts +29 -0
  51. package/dist/server/wasm.d.ts.map +1 -0
  52. package/dist/server-renderer.d.ts +5 -0
  53. package/dist/server-renderer.d.ts.map +1 -0
  54. package/dist/store/index.d.ts +2 -0
  55. package/dist/store/index.d.ts.map +1 -0
  56. package/dist/store/types.d.ts +2 -0
  57. package/dist/store/types.d.ts.map +1 -0
  58. package/dist/wasm.d.ts +51 -0
  59. package/dist/wasm.d.ts.map +1 -0
  60. package/package.json +65 -56
  61. package/templates/basic-app/src/main.tsx +1 -0
  62. package/templates/fullstack-template/.env.example +42 -0
  63. package/templates/fullstack-template/README.md +38 -42
  64. package/templates/fullstack-template/package-lock.json +7932 -0
  65. package/templates/fullstack-template/package.json +58 -6
  66. package/templates/fullstack-template/server.js +28 -9
  67. package/templates/fullstack-template/src/App.tsx +94 -0
  68. package/templates/fullstack-template/src/api/auth/login.ts +75 -0
  69. package/templates/fullstack-template/src/api/auth/me.ts +66 -0
  70. package/templates/fullstack-template/src/api/auth/register.ts +59 -0
  71. package/templates/fullstack-template/src/api/todos/[id].ts +108 -0
  72. package/templates/fullstack-template/src/api/todos/index.ts +79 -0
  73. package/templates/fullstack-template/src/components/Dashboard.tsx +129 -0
  74. package/templates/fullstack-template/src/components/Header.tsx +76 -0
  75. package/templates/fullstack-template/src/contexts/ApiContext.tsx +69 -0
  76. package/templates/fullstack-template/src/contexts/AuthContext.tsx +155 -0
  77. package/templates/fullstack-template/src/server.ts +167 -0
  78. package/templates/fullstack-template/src/styles/App.css +446 -0
  79. package/templates/ssr-template/package-lock.json +337 -60
  80. package/templates/ssr-template/package.json +1 -1
  81. package/templates/ssr-template/src/App.tsx +2 -2
  82. package/templates/wasm/App.tsx +564 -0
  83. package/templates/wasm/client.tsx +220 -0
  84. package/templates/wasm/index.tsx +21 -0
  85. package/templates/wasm/package-lock.json +5347 -5307
  86. package/templates/wasm/package.json +43 -25
  87. package/templates/wasm/public/example.wasm +0 -0
  88. package/templates/wasm/public/wasm_exec.js +1 -12
  89. package/templates/wasm/server.ts +145 -0
  90. package/templates/wasm/vite.config.ts +42 -24
  91. package/README_WASM.md +0 -472
  92. package/dist/server.js.map +0 -7
  93. package/templates/basic-app/src/App.jsx +0 -0
  94. package/templates/basic-app/src/App.tsx +0 -0
  95. package/templates/fullstack-template/src/api/hello.js +0 -17
  96. package/templates/fullstack-template/src/pages/index.js +0 -206
  97. /package/templates/{basic-app/server.js → wasm/go/wasm_exec.js} +0 -0
package/dist/index.js CHANGED
@@ -15,201 +15,380 @@ var __export = (target, all) => {
15
15
  __defProp(target, name, { get: all[name], enumerable: true });
16
16
  };
17
17
 
18
- // src/server/templates.ts
19
- var templates_exports = {};
20
- __export(templates_exports, {
21
- generateDocument: () => generateDocument,
22
- generateErrorPage: () => generateErrorPage,
23
- generateLoadingPage: () => generateLoadingPage
24
- });
25
- function generateDocument(content, options = {}) {
26
- const {
27
- title = "Frontend Hamroun App",
28
- description = "",
29
- lang = "en",
30
- charset = "UTF-8",
31
- viewport = "width=device-width, initial-scale=1.0",
32
- scripts = [],
33
- styles = [],
34
- meta = {},
35
- bodyClasses = "",
36
- htmlAttrs = {},
37
- bodyAttrs = {},
38
- initialData = {},
39
- componentName = ""
40
- } = options;
41
- const htmlAttributes = Object.entries(htmlAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
42
- const bodyAttributes = Object.entries(bodyAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
43
- const metaTags = [
44
- `<meta charset="${charset}">`,
45
- `<meta name="viewport" content="${viewport}">`,
46
- description ? `<meta name="description" content="${escapeHtml(description)}">` : ""
47
- ];
48
- Object.entries(meta).forEach(([name, content2]) => {
49
- metaTags.push(`<meta name="${escapeHtml(name)}" content="${escapeHtml(content2)}">`);
50
- });
51
- const scriptTags = scripts.map((src) => {
52
- if (src.startsWith("<script")) {
53
- return src;
54
- }
55
- return `<script src="${escapeHtml(src)}" ${src.endsWith(".js") ? 'type="module"' : ""} defer></script>`;
56
- });
57
- const styleTags = styles.map((href) => {
58
- if (href.startsWith("<style")) {
59
- return href;
18
+ // node_modules/frontend-hamroun/dist/index.mjs
19
+ function batchUpdates(fn) {
20
+ if (isBatching) {
21
+ queue.push(fn);
22
+ return;
23
+ }
24
+ isBatching = true;
25
+ try {
26
+ fn();
27
+ while (queue.length > 0) {
28
+ const nextFn = queue.shift();
29
+ nextFn == null ? void 0 : nextFn();
60
30
  }
61
- return `<link rel="stylesheet" href="${escapeHtml(href)}">`;
62
- });
63
- const initialDataScript = Object.keys(initialData).length > 0 ? `<script id="__APP_DATA__" type="application/json">${escapeHtml(JSON.stringify(initialData))}</script>` : "";
64
- return `<!DOCTYPE html>
65
- <html lang="${lang}" ${htmlAttributes}>
66
- <head>
67
- ${metaTags.filter(Boolean).join("\n ")}
68
- <title>${escapeHtml(title)}</title>
69
- ${styleTags.join("\n ")}
70
- </head>
71
- <body class="${bodyClasses}" ${bodyAttributes}>
72
- <div id="app-root" data-ssr-root${componentName ? ` data-component="${escapeHtml(componentName)}"` : ""}>${content}</div>
73
- ${initialDataScript}
74
- ${scriptTags.join("\n ")}
75
- </body>
76
- </html>`;
31
+ } finally {
32
+ isBatching = false;
33
+ }
77
34
  }
78
- function generateErrorPage(statusCode, message, error) {
79
- const errorMessages = {
80
- 400: "Bad Request",
81
- 401: "Unauthorized",
82
- 403: "Forbidden",
83
- 404: "Not Found",
84
- 500: "Internal Server Error"
35
+ function setRenderCallback(callback, element, container) {
36
+ globalRenderCallback = callback;
37
+ globalContainer = container;
38
+ currentElement = element;
39
+ }
40
+ function prepareRender() {
41
+ currentRender++;
42
+ stateIndices.set(currentRender, 0);
43
+ return currentRender;
44
+ }
45
+ function finishRender() {
46
+ if (isServer) {
47
+ serverStates.delete(currentRender);
48
+ }
49
+ currentRender = 0;
50
+ }
51
+ function useState(initial) {
52
+ if (!currentRender) {
53
+ throw new Error("useState must be called within a render");
54
+ }
55
+ if (isServer) {
56
+ if (!serverStates.has(currentRender)) {
57
+ serverStates.set(currentRender, /* @__PURE__ */ new Map());
58
+ }
59
+ const componentState = serverStates.get(currentRender);
60
+ const index2 = stateIndices.get(currentRender) || 0;
61
+ if (!componentState.has(index2)) {
62
+ componentState.set(index2, initial);
63
+ }
64
+ const state2 = componentState.get(index2);
65
+ const setState2 = (newValue) => {
66
+ };
67
+ stateIndices.set(currentRender, index2 + 1);
68
+ return [state2, setState2];
69
+ }
70
+ if (!states.has(currentRender)) {
71
+ states.set(currentRender, []);
72
+ }
73
+ const componentStates = states.get(currentRender);
74
+ const index = stateIndices.get(currentRender);
75
+ if (index >= componentStates.length) {
76
+ componentStates.push(initial);
77
+ }
78
+ const state = componentStates[index];
79
+ const setState = (newValue) => {
80
+ const nextValue = typeof newValue === "function" ? newValue(componentStates[index]) : newValue;
81
+ if (componentStates[index] === nextValue)
82
+ return;
83
+ componentStates[index] = nextValue;
84
+ if (isBatching) {
85
+ batchUpdates(() => rerender(currentRender));
86
+ } else {
87
+ rerender(currentRender);
88
+ }
85
89
  };
86
- const title = `${statusCode} - ${errorMessages[statusCode] || "Error"}`;
87
- const isDev = process.env.NODE_ENV !== "production";
88
- const errorDetails = isDev && error ? `
89
- <div class="error-details">
90
- <pre>${escapeHtml(error.stack || error.message)}</pre>
91
- </div>
92
- ` : "";
93
- const content = `
94
- <div class="error-container">
95
- <h1>${statusCode}</h1>
96
- <h2>${escapeHtml(errorMessages[statusCode] || "Error")}</h2>
97
- <p>${escapeHtml(message)}</p>
98
- ${errorDetails}
99
- <a href="/" class="home-link">Back to Home</a>
100
- </div>
101
- `;
102
- const styles = [`<style>
103
- body {
104
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
105
- display: flex;
106
- justify-content: center;
107
- align-items: center;
108
- min-height: 100vh;
109
- margin: 0;
110
- background-color: #f7f7f7;
111
- color: #333;
90
+ stateIndices.set(currentRender, index + 1);
91
+ return [state, setState];
92
+ }
93
+ function useEffect(callback, deps) {
94
+ if (!currentRender)
95
+ throw new Error("useEffect must be called within a render");
96
+ const effectIndex = stateIndices.get(currentRender);
97
+ if (!effects.has(currentRender)) {
98
+ effects.set(currentRender, []);
99
+ }
100
+ const componentEffects = effects.get(currentRender);
101
+ const prevEffect = componentEffects[effectIndex];
102
+ if (!prevEffect || !deps || !prevEffect.deps || deps.some((dep, i) => dep !== prevEffect.deps[i])) {
103
+ if (prevEffect == null ? void 0 : prevEffect.cleanup) {
104
+ prevEffect.cleanup();
112
105
  }
113
- .error-container {
114
- text-align: center;
115
- padding: 2rem;
116
- border-radius: 8px;
117
- background-color: white;
118
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
119
- max-width: 600px;
120
- width: 100%;
106
+ queueMicrotask(() => {
107
+ const cleanup = callback() || void 0;
108
+ componentEffects[effectIndex] = { cleanup, deps };
109
+ });
110
+ }
111
+ stateIndices.set(currentRender, effectIndex + 1);
112
+ }
113
+ function useMemo(factory, deps) {
114
+ if (!currentRender)
115
+ throw new Error("useMemo must be called within a render");
116
+ const memoIndex = stateIndices.get(currentRender);
117
+ if (!memos.has(currentRender)) {
118
+ memos.set(currentRender, []);
119
+ }
120
+ const componentMemos = memos.get(currentRender);
121
+ const prevMemo = componentMemos[memoIndex];
122
+ if (!prevMemo || deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i]))) {
123
+ const value = factory();
124
+ componentMemos[memoIndex] = { value, deps };
125
+ stateIndices.set(currentRender, memoIndex + 1);
126
+ return value;
127
+ }
128
+ stateIndices.set(currentRender, memoIndex + 1);
129
+ return prevMemo.value;
130
+ }
131
+ function useRef(initial) {
132
+ if (!currentRender)
133
+ throw new Error("useRef must be called within a render");
134
+ const refIndex = stateIndices.get(currentRender);
135
+ if (!refs.has(currentRender)) {
136
+ refs.set(currentRender, []);
137
+ }
138
+ const componentRefs = refs.get(currentRender);
139
+ if (refIndex >= componentRefs.length) {
140
+ const ref2 = { current: initial };
141
+ componentRefs.push(ref2);
142
+ stateIndices.set(currentRender, refIndex + 1);
143
+ return ref2;
144
+ }
145
+ const ref = componentRefs[refIndex];
146
+ stateIndices.set(currentRender, refIndex + 1);
147
+ return ref;
148
+ }
149
+ async function rerender(rendererId) {
150
+ try {
151
+ const componentEffects = effects.get(rendererId);
152
+ if (componentEffects) {
153
+ componentEffects.forEach((effect) => {
154
+ if (effect.cleanup)
155
+ effect.cleanup();
156
+ });
157
+ effects.set(rendererId, []);
121
158
  }
122
- h1 {
123
- font-size: 6rem;
124
- margin: 0;
125
- color: #e74c3c;
159
+ if (globalRenderCallback && globalContainer && currentElement) {
160
+ await globalRenderCallback(currentElement, globalContainer);
126
161
  }
127
- h2 {
128
- margin-top: 0;
129
- margin-bottom: 1rem;
130
- color: #333;
162
+ } catch (error) {
163
+ console.error("Error during rerender:", error);
164
+ }
165
+ }
166
+ function useErrorBoundary() {
167
+ const [error, setError] = useState(null);
168
+ return [error, () => setError(null)];
169
+ }
170
+ function createContext(defaultValue) {
171
+ const context = {
172
+ Provider: ({ value, children }) => {
173
+ return children;
174
+ },
175
+ Consumer: ({ children }) => {
176
+ return children(defaultValue);
177
+ },
178
+ _id: Symbol(),
179
+ useSelector: (selector) => {
180
+ return selector(defaultValue);
131
181
  }
132
- .error-details {
133
- text-align: left;
134
- margin: 2rem 0;
135
- padding: 1rem;
136
- background-color: #f8f8f8;
137
- border-radius: 4px;
138
- overflow: auto;
182
+ };
183
+ return context;
184
+ }
185
+ function useContext(context) {
186
+ return context;
187
+ }
188
+ function jsx(type, props) {
189
+ console.log("JSX Transform:", { type, props });
190
+ const processedProps = { ...props };
191
+ if (arguments.length > 2) {
192
+ processedProps.children = Array.prototype.slice.call(arguments, 2);
193
+ }
194
+ return { type, props: processedProps };
195
+ }
196
+ async function createElement(vnode) {
197
+ var _a;
198
+ console.log("Creating element from:", vnode);
199
+ if (vnode == null) {
200
+ return document.createTextNode("");
201
+ }
202
+ if (typeof vnode === "boolean") {
203
+ return document.createTextNode("");
204
+ }
205
+ if (typeof vnode === "number" || typeof vnode === "string") {
206
+ return document.createTextNode(String(vnode));
207
+ }
208
+ if (Array.isArray(vnode)) {
209
+ const fragment = document.createDocumentFragment();
210
+ for (const child of vnode) {
211
+ const node = await createElement(child);
212
+ fragment.appendChild(node);
139
213
  }
140
- pre {
141
- margin: 0;
142
- font-family: monospace;
143
- font-size: 0.85rem;
144
- white-space: pre-wrap;
214
+ return fragment;
215
+ }
216
+ if ("type" in vnode && vnode.props !== void 0) {
217
+ const { type, props } = vnode;
218
+ if (typeof type === "function") {
219
+ try {
220
+ const result = await type(props || {});
221
+ const node = await createElement(result);
222
+ if (node instanceof Element) {
223
+ node.setAttribute("data-component-id", type.name || type.toString());
224
+ }
225
+ return node;
226
+ } catch (error) {
227
+ console.error("Error rendering component:", error);
228
+ return document.createTextNode("");
229
+ }
145
230
  }
146
- .home-link {
147
- display: inline-block;
148
- margin-top: 1.5rem;
149
- padding: 0.75rem 1.5rem;
150
- background-color: #3498db;
151
- color: white;
152
- text-decoration: none;
153
- border-radius: 4px;
154
- transition: background-color 0.2s;
231
+ const element = document.createElement(type);
232
+ for (const [key, value] of Object.entries(props || {})) {
233
+ if (key === "children")
234
+ continue;
235
+ if (key.startsWith("on") && typeof value === "function") {
236
+ const eventName = key.toLowerCase().slice(2);
237
+ const existingHandler = (_a = element.__events) == null ? void 0 : _a[eventName];
238
+ if (existingHandler) {
239
+ element.removeEventListener(eventName, existingHandler);
240
+ }
241
+ element.addEventListener(eventName, value);
242
+ if (!element.__events) {
243
+ element.__events = {};
244
+ }
245
+ element.__events[eventName] = value;
246
+ } else if (key === "style" && typeof value === "object") {
247
+ Object.assign(element.style, value);
248
+ } else if (key === "className") {
249
+ element.setAttribute("class", String(value));
250
+ } else if (key !== "key" && key !== "ref") {
251
+ element.setAttribute(key, String(value));
252
+ }
155
253
  }
156
- .home-link:hover {
157
- background-color: #2980b9;
254
+ const children = props == null ? void 0 : props.children;
255
+ if (children != null) {
256
+ const childArray = Array.isArray(children) ? children.flat() : [children];
257
+ for (const child of childArray) {
258
+ const childNode = await createElement(child);
259
+ element.appendChild(childNode);
260
+ }
261
+ }
262
+ return element;
263
+ }
264
+ return document.createTextNode(String(vnode));
265
+ }
266
+ async function hydrate(element, container) {
267
+ isHydrating = true;
268
+ try {
269
+ await render(element, container);
270
+ } finally {
271
+ isHydrating = false;
272
+ }
273
+ }
274
+ async function render(element, container) {
275
+ console.log("Rendering to:", container.id);
276
+ batchUpdates(async () => {
277
+ const rendererId = prepareRender();
278
+ try {
279
+ setRenderCallback(render, element, container);
280
+ const domNode = await createElement(element);
281
+ if (!isHydrating) {
282
+ container.innerHTML = "";
283
+ }
284
+ container.appendChild(domNode);
285
+ } finally {
286
+ finishRender();
158
287
  }
159
- </style>`];
160
- return generateDocument(content, {
161
- title,
162
- description: `Error ${statusCode}: ${errorMessages[statusCode] || "Error"}`,
163
- bodyClasses: "error-page",
164
- styles
165
288
  });
166
289
  }
167
- function generateLoadingPage(message = "Loading...") {
168
- const content = `
169
- <div class="loading-container">
170
- <div class="spinner"></div>
171
- <p>${escapeHtml(message)}</p>
172
- </div>
173
- `;
174
- const styles = [`<style>
175
- body {
176
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
177
- display: flex;
178
- justify-content: center;
179
- align-items: center;
180
- min-height: 100vh;
181
- margin: 0;
182
- background-color: #f7f7f7;
183
- color: #333;
290
+ function renderToString(vnode) {
291
+ prepareRender();
292
+ const html = renderNodeToString(vnode);
293
+ finishRender();
294
+ return html;
295
+ }
296
+ function renderNodeToString(vnode) {
297
+ var _a, _b, _c;
298
+ if (vnode === null || vnode === void 0)
299
+ return "";
300
+ if (typeof vnode === "boolean")
301
+ return "";
302
+ if (typeof vnode === "number" || typeof vnode === "string")
303
+ return escapeHtml(String(vnode));
304
+ if (typeof vnode.type === "function") {
305
+ const Component2 = vnode.type;
306
+ const renderedNode = Component2(vnode.props || {});
307
+ return renderNodeToString(renderedNode);
308
+ }
309
+ if (typeof vnode.type === "string") {
310
+ const tag = vnode.type;
311
+ let attrs = "";
312
+ let children = "";
313
+ if (vnode.props) {
314
+ for (const [key, value] of Object.entries(vnode.props)) {
315
+ if (key === "children")
316
+ continue;
317
+ if (key.startsWith("on"))
318
+ continue;
319
+ if (key === "className") {
320
+ attrs += ` class="${escapeHtml(value)}"`;
321
+ continue;
322
+ }
323
+ if (typeof value === "string" || typeof value === "number") {
324
+ attrs += ` ${key}="${escapeHtml(String(value))}"`;
325
+ } else if (value === true) {
326
+ attrs += ` ${key}`;
327
+ }
328
+ }
184
329
  }
185
- .loading-container {
186
- text-align: center;
330
+ const childrenArray = ((_a = vnode.props) == null ? void 0 : _a.children) ? Array.isArray(vnode.props.children) ? vnode.props.children : [vnode.props.children] : [];
331
+ for (const child of childrenArray) {
332
+ children += renderNodeToString(child);
187
333
  }
188
- .spinner {
189
- width: 50px;
190
- height: 50px;
191
- border: 5px solid rgba(0, 0, 0, 0.1);
192
- border-radius: 50%;
193
- border-top-color: #3498db;
194
- animation: spin 1s ease-in-out infinite;
195
- margin: 0 auto 20px;
334
+ const selfClosing = [
335
+ "area",
336
+ "base",
337
+ "br",
338
+ "col",
339
+ "embed",
340
+ "hr",
341
+ "img",
342
+ "input",
343
+ "link",
344
+ "meta",
345
+ "param",
346
+ "source",
347
+ "track",
348
+ "wbr"
349
+ ];
350
+ if (selfClosing.includes(tag)) {
351
+ return `<${tag}${attrs}/>`;
196
352
  }
197
- @keyframes spin {
198
- to { transform: rotate(360deg); }
353
+ return `<${tag}${attrs}>${children}</${tag}>`;
354
+ }
355
+ if (vnode.type === Symbol.for("react.fragment")) {
356
+ let fragmentOutput = "";
357
+ const children = Array.isArray((_b = vnode.props) == null ? void 0 : _b.children) ? vnode.props.children : ((_c = vnode.props) == null ? void 0 : _c.children) ? [vnode.props.children] : [];
358
+ for (const child of children) {
359
+ fragmentOutput += renderNodeToString(child);
199
360
  }
200
- </style>`];
201
- return generateDocument(content, {
202
- title: "Loading",
203
- bodyClasses: "loading-page",
204
- styles
205
- });
361
+ return fragmentOutput;
362
+ }
363
+ console.warn("Unknown vnode type:", vnode.type);
364
+ return "";
206
365
  }
207
366
  function escapeHtml(text) {
208
- return String(text).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
367
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
209
368
  }
210
- var init_templates = __esm({
211
- "src/server/templates.ts"() {
212
- "use strict";
369
+ var isBatching, queue, currentRender, states, stateIndices, effects, memos, refs, globalRenderCallback, globalContainer, currentElement, isServer, serverStates, Fragment, isHydrating, server;
370
+ var init_dist = __esm({
371
+ "node_modules/frontend-hamroun/dist/index.mjs"() {
372
+ isBatching = false;
373
+ queue = [];
374
+ currentRender = 0;
375
+ states = /* @__PURE__ */ new Map();
376
+ stateIndices = /* @__PURE__ */ new Map();
377
+ effects = /* @__PURE__ */ new Map();
378
+ memos = /* @__PURE__ */ new Map();
379
+ refs = /* @__PURE__ */ new Map();
380
+ globalRenderCallback = null;
381
+ globalContainer = null;
382
+ currentElement = null;
383
+ isServer = typeof window === "undefined";
384
+ serverStates = /* @__PURE__ */ new Map();
385
+ Fragment = ({ children }) => children;
386
+ isHydrating = false;
387
+ server = {
388
+ async getServer() {
389
+ throw new Error("Server module can only be used in Node.js environment");
390
+ }
391
+ };
213
392
  }
214
393
  });
215
394
 
@@ -751,6 +930,204 @@ var init_utils = __esm({
751
930
  }
752
931
  });
753
932
 
933
+ // src/server/templates.ts
934
+ var templates_exports = {};
935
+ __export(templates_exports, {
936
+ generateDocument: () => generateDocument,
937
+ generateErrorPage: () => generateErrorPage,
938
+ generateLoadingPage: () => generateLoadingPage
939
+ });
940
+ function generateDocument(content, options = {}) {
941
+ const {
942
+ title = "Frontend Hamroun App",
943
+ description = "",
944
+ lang = "en",
945
+ charset = "UTF-8",
946
+ viewport = "width=device-width, initial-scale=1.0",
947
+ scripts = [],
948
+ styles = [],
949
+ meta = {},
950
+ bodyClasses = "",
951
+ htmlAttrs = {},
952
+ bodyAttrs = {},
953
+ initialData = {},
954
+ componentName = ""
955
+ } = options;
956
+ const htmlAttributes = Object.entries(htmlAttrs).map(([key, value]) => `${key}="${escapeHtml2(value)}"`).join(" ");
957
+ const bodyAttributes = Object.entries(bodyAttrs).map(([key, value]) => `${key}="${escapeHtml2(value)}"`).join(" ");
958
+ const metaTags = [
959
+ `<meta charset="${charset}">`,
960
+ `<meta name="viewport" content="${viewport}">`,
961
+ description ? `<meta name="description" content="${escapeHtml2(description)}">` : ""
962
+ ];
963
+ Object.entries(meta).forEach(([name, content2]) => {
964
+ metaTags.push(`<meta name="${escapeHtml2(name)}" content="${escapeHtml2(content2)}">`);
965
+ });
966
+ const scriptTags = scripts.map((src) => {
967
+ if (src.startsWith("<script")) {
968
+ return src;
969
+ }
970
+ return `<script src="${escapeHtml2(src)}" ${src.endsWith(".js") ? 'type="module"' : ""} defer></script>`;
971
+ });
972
+ const styleTags = styles.map((href) => {
973
+ if (href.startsWith("<style")) {
974
+ return href;
975
+ }
976
+ return `<link rel="stylesheet" href="${escapeHtml2(href)}">`;
977
+ });
978
+ const initialDataScript = Object.keys(initialData).length > 0 ? `<script id="__APP_DATA__" type="application/json">${escapeHtml2(JSON.stringify(initialData))}</script>` : "";
979
+ return `<!DOCTYPE html>
980
+ <html lang="${lang}" ${htmlAttributes}>
981
+ <head>
982
+ ${metaTags.filter(Boolean).join("\n ")}
983
+ <title>${escapeHtml2(title)}</title>
984
+ ${styleTags.join("\n ")}
985
+ </head>
986
+ <body class="${bodyClasses}" ${bodyAttributes}>
987
+ <div id="app-root" data-ssr-root${componentName ? ` data-component="${escapeHtml2(componentName)}"` : ""}>${content}</div>
988
+ ${initialDataScript}
989
+ ${scriptTags.join("\n ")}
990
+ </body>
991
+ </html>`;
992
+ }
993
+ function generateErrorPage(statusCode, message, error) {
994
+ const errorMessages = {
995
+ 400: "Bad Request",
996
+ 401: "Unauthorized",
997
+ 403: "Forbidden",
998
+ 404: "Not Found",
999
+ 500: "Internal Server Error"
1000
+ };
1001
+ const title = `${statusCode} - ${errorMessages[statusCode] || "Error"}`;
1002
+ const isDev = process.env.NODE_ENV !== "production";
1003
+ const errorDetails = isDev && error ? `
1004
+ <div class="error-details">
1005
+ <pre>${escapeHtml2(error.stack || error.message)}</pre>
1006
+ </div>
1007
+ ` : "";
1008
+ const content = `
1009
+ <div class="error-container">
1010
+ <h1>${statusCode}</h1>
1011
+ <h2>${escapeHtml2(errorMessages[statusCode] || "Error")}</h2>
1012
+ <p>${escapeHtml2(message)}</p>
1013
+ ${errorDetails}
1014
+ <a href="/" class="home-link">Back to Home</a>
1015
+ </div>
1016
+ `;
1017
+ const styles = [`<style>
1018
+ body {
1019
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
1020
+ display: flex;
1021
+ justify-content: center;
1022
+ align-items: center;
1023
+ min-height: 100vh;
1024
+ margin: 0;
1025
+ background-color: #f7f7f7;
1026
+ color: #333;
1027
+ }
1028
+ .error-container {
1029
+ text-align: center;
1030
+ padding: 2rem;
1031
+ border-radius: 8px;
1032
+ background-color: white;
1033
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
1034
+ max-width: 600px;
1035
+ width: 100%;
1036
+ }
1037
+ h1 {
1038
+ font-size: 6rem;
1039
+ margin: 0;
1040
+ color: #e74c3c;
1041
+ }
1042
+ h2 {
1043
+ margin-top: 0;
1044
+ margin-bottom: 1rem;
1045
+ color: #333;
1046
+ }
1047
+ .error-details {
1048
+ text-align: left;
1049
+ margin: 2rem 0;
1050
+ padding: 1rem;
1051
+ background-color: #f8f8f8;
1052
+ border-radius: 4px;
1053
+ overflow: auto;
1054
+ }
1055
+ pre {
1056
+ margin: 0;
1057
+ font-family: monospace;
1058
+ font-size: 0.85rem;
1059
+ white-space: pre-wrap;
1060
+ }
1061
+ .home-link {
1062
+ display: inline-block;
1063
+ margin-top: 1.5rem;
1064
+ padding: 0.75rem 1.5rem;
1065
+ background-color: #3498db;
1066
+ color: white;
1067
+ text-decoration: none;
1068
+ border-radius: 4px;
1069
+ transition: background-color 0.2s;
1070
+ }
1071
+ .home-link:hover {
1072
+ background-color: #2980b9;
1073
+ }
1074
+ </style>`];
1075
+ return generateDocument(content, {
1076
+ title,
1077
+ description: `Error ${statusCode}: ${errorMessages[statusCode] || "Error"}`,
1078
+ bodyClasses: "error-page",
1079
+ styles
1080
+ });
1081
+ }
1082
+ function generateLoadingPage(message = "Loading...") {
1083
+ const content = `
1084
+ <div class="loading-container">
1085
+ <div class="spinner"></div>
1086
+ <p>${escapeHtml2(message)}</p>
1087
+ </div>
1088
+ `;
1089
+ const styles = [`<style>
1090
+ body {
1091
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
1092
+ display: flex;
1093
+ justify-content: center;
1094
+ align-items: center;
1095
+ min-height: 100vh;
1096
+ margin: 0;
1097
+ background-color: #f7f7f7;
1098
+ color: #333;
1099
+ }
1100
+ .loading-container {
1101
+ text-align: center;
1102
+ }
1103
+ .spinner {
1104
+ width: 50px;
1105
+ height: 50px;
1106
+ border: 5px solid rgba(0, 0, 0, 0.1);
1107
+ border-radius: 50%;
1108
+ border-top-color: #3498db;
1109
+ animation: spin 1s ease-in-out infinite;
1110
+ margin: 0 auto 20px;
1111
+ }
1112
+ @keyframes spin {
1113
+ to { transform: rotate(360deg); }
1114
+ }
1115
+ </style>`];
1116
+ return generateDocument(content, {
1117
+ title: "Loading",
1118
+ bodyClasses: "loading-page",
1119
+ styles
1120
+ });
1121
+ }
1122
+ function escapeHtml2(text) {
1123
+ return String(text).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
1124
+ }
1125
+ var init_templates = __esm({
1126
+ "src/server/templates.ts"() {
1127
+ "use strict";
1128
+ }
1129
+ });
1130
+
754
1131
  // src/server/wasm.ts
755
1132
  import fs3 from "fs/promises";
756
1133
  import path3 from "path";
@@ -768,8 +1145,8 @@ async function initNodeWasm() {
768
1145
  }
769
1146
  }
770
1147
  async function loadGoRuntime(goWasmPath) {
771
- if (typeof global.Go === "function") {
772
- return global.Go;
1148
+ if (typeof globalThis.Go === "function") {
1149
+ return globalThis.Go;
773
1150
  }
774
1151
  const possiblePaths = [
775
1152
  goWasmPath,
@@ -798,13 +1175,13 @@ async function loadGoRuntime(goWasmPath) {
798
1175
  continue;
799
1176
  }
800
1177
  const wasmExecUrl = pathToFileURL2(resolvedPath).href;
801
- if (global.Go) {
802
- delete global.Go;
1178
+ if (globalThis.Go) {
1179
+ delete globalThis.Go;
803
1180
  }
804
1181
  await import(wasmExecUrl);
805
- if (typeof global.Go === "function") {
1182
+ if (typeof globalThis.Go === "function") {
806
1183
  console.log(`[WASM] Loaded Go runtime from: ${resolvedPath}`);
807
- return global.Go;
1184
+ return globalThis.Go;
808
1185
  } else {
809
1186
  console.warn(`[WASM] File found but Go class not exported: ${resolvedPath}`);
810
1187
  }
@@ -856,7 +1233,7 @@ async function loadGoWasmFromFile(wasmFilePath, options = {}) {
856
1233
  console.log("[WASM] Scanning global object for Go functions...");
857
1234
  }
858
1235
  const functions = {};
859
- const globalObj = global;
1236
+ const globalObj = globalThis;
860
1237
  const allKeys = Object.getOwnPropertyNames(globalObj);
861
1238
  const goKeys = allKeys.filter((key) => key.startsWith("go"));
862
1239
  if (options.debug) {
@@ -942,7 +1319,6 @@ __export(server_exports, {
942
1319
  });
943
1320
  import path4 from "path";
944
1321
  import fs4 from "fs";
945
- import { renderToString } from "frontend-hamroun";
946
1322
  function getComponentName(filePath, pagesDir) {
947
1323
  try {
948
1324
  const relativePath = path4.relative(pagesDir, filePath);
@@ -966,13 +1342,13 @@ function createDevServer(options = {}) {
966
1342
  });
967
1343
  }
968
1344
  function createProductionServer(config) {
969
- const server = new Server({
1345
+ const server2 = new Server({
970
1346
  ...config,
971
1347
  // Fix the PORT parsing
972
1348
  port: config.port || (process.env.PORT ? parseInt(process.env.PORT) : 8080)
973
1349
  });
974
- server.addShutdownHandler();
975
- return server;
1350
+ server2.addShutdownHandler();
1351
+ return server2;
976
1352
  }
977
1353
  function getRequestIp(req) {
978
1354
  return req.ip || req.headers["x-forwarded-for"]?.split(",")[0].trim() || req.socket.remoteAddress || "";
@@ -992,6 +1368,7 @@ var Server, renderComponent, server_default;
992
1368
  var init_server = __esm({
993
1369
  "src/server/index.ts"() {
994
1370
  "use strict";
1371
+ init_dist();
995
1372
  init_database();
996
1373
  init_auth();
997
1374
  init_api_router();
@@ -1011,6 +1388,7 @@ var init_server = __esm({
1011
1388
  this.server = null;
1012
1389
  this.db = null;
1013
1390
  this.auth = null;
1391
+ this.initialized = false;
1014
1392
  this.config = {
1015
1393
  port: 3e3,
1016
1394
  apiDir: "./api",
@@ -1019,9 +1397,10 @@ var init_server = __esm({
1019
1397
  enableCors: true,
1020
1398
  ...config
1021
1399
  };
1022
- this.initializeApp();
1023
1400
  }
1024
1401
  async initializeApp() {
1402
+ if (this.initialized)
1403
+ return;
1025
1404
  try {
1026
1405
  const express = await import("express");
1027
1406
  this.app = express.default();
@@ -1053,6 +1432,7 @@ var init_server = __esm({
1053
1432
  this.setupPageRoutes();
1054
1433
  this.app.use(notFoundHandler);
1055
1434
  this.app.use(errorHandler);
1435
+ this.initialized = true;
1056
1436
  } catch (error) {
1057
1437
  if (error.code === "MODULE_NOT_FOUND" && error.message.includes("express")) {
1058
1438
  throw new Error("Express not installed. Run: npm install express @types/express");
@@ -1240,7 +1620,8 @@ var init_server = __esm({
1240
1620
  getAuth() {
1241
1621
  return this.auth;
1242
1622
  }
1243
- start() {
1623
+ async start() {
1624
+ await this.initializeApp();
1244
1625
  return new Promise((resolve) => {
1245
1626
  this.server = this.app.listen(this.config.port, () => {
1246
1627
  console.log(`Server running at http://localhost:${this.config.port}`);
@@ -1318,11 +1699,9 @@ var init_server = __esm({
1318
1699
  process.on("SIGINT", gracefulShutdown);
1319
1700
  }
1320
1701
  };
1321
- renderComponent = async (Component, props = {}) => {
1702
+ renderComponent = (Component, props = {}) => {
1322
1703
  try {
1323
- const { jsx, renderToString: renderToString4 } = await import("frontend-hamroun");
1324
- const element = jsx(Component, props);
1325
- const html = renderToString4(element);
1704
+ const html = renderToString(Component(props));
1326
1705
  return {
1327
1706
  html: typeof html === "string" ? html : String(html),
1328
1707
  success: true
@@ -1330,7 +1709,7 @@ var init_server = __esm({
1330
1709
  } catch (error) {
1331
1710
  console.error("Error rendering component:", error);
1332
1711
  return {
1333
- html: `<div class="error">Error rendering component: ${error instanceof Error ? error.message : "Unknown error"}</div>`,
1712
+ html: `<div class="error">Error rendering component</div>`,
1334
1713
  success: false,
1335
1714
  error
1336
1715
  };
@@ -1395,7 +1774,7 @@ var init_server_renderer = __esm({
1395
1774
  });
1396
1775
 
1397
1776
  // src/index.ts
1398
- export * from "frontend-hamroun";
1777
+ init_dist();
1399
1778
 
1400
1779
  // src/wasm.ts
1401
1780
  async function loadGoWasm(wasmUrl, options = {}) {
@@ -1489,31 +1868,40 @@ function useGoWasm(wasmUrl, options = {}) {
1489
1868
  // src/index.ts
1490
1869
  var isNode = typeof process !== "undefined" && process.versions?.node;
1491
1870
  var isBrowser = typeof window !== "undefined";
1492
- var templateGenerateDocument = null;
1493
- var templateGenerateErrorPage = null;
1494
- var templateGenerateLoadingPage = null;
1495
- var BaraqexServerClass = null;
1496
- var createServerFn = null;
1497
- var createDevServerFn = null;
1498
- var createProductionServerFn = null;
1499
- var renderComponentFn = null;
1500
- var DatabaseClass = null;
1501
- var AuthServiceClass = null;
1502
- var ApiRouterClass = null;
1503
- var requestLoggerFn = null;
1504
- var errorHandlerFn = null;
1505
- var notFoundHandlerFn = null;
1506
- var rateLimitFn = null;
1507
- var initNodeWasmFn = null;
1508
- var loadGoWasmFromFileFn = null;
1509
- var safeJsonParseFn = (json, fallback) => {
1871
+ var BaraqexServer = null;
1872
+ var createServer2 = null;
1873
+ var createDevServer2 = null;
1874
+ var createProductionServer2 = null;
1875
+ var renderComponent2 = null;
1876
+ var Database2 = null;
1877
+ var AuthService2 = null;
1878
+ var ApiRouter2 = null;
1879
+ var requestLogger2 = null;
1880
+ var errorHandler2 = null;
1881
+ var notFoundHandler2 = null;
1882
+ var rateLimit2 = null;
1883
+ var initNodeWasm3 = null;
1884
+ var loadGoWasmFromFile2 = null;
1885
+ var hashString2 = null;
1886
+ var getPagination2 = null;
1887
+ var sendSuccess2 = null;
1888
+ var sendError2 = null;
1889
+ var validateFields2 = null;
1890
+ var validateFileUpload2 = null;
1891
+ var getEnvironmentInfo2 = null;
1892
+ var isDirectoryEmpty2 = null;
1893
+ var ensureDirectory2 = null;
1894
+ var writeJsonFile2 = null;
1895
+ var readJsonFile2 = null;
1896
+ var baraqexRenderToString = null;
1897
+ var safeJsonParse2 = (json, fallback) => {
1510
1898
  try {
1511
1899
  return JSON.parse(json);
1512
1900
  } catch {
1513
1901
  return fallback;
1514
1902
  }
1515
1903
  };
1516
- var generateTokenFn = (length = 32) => {
1904
+ var generateToken2 = (length = 32) => {
1517
1905
  const array = new Uint8Array(length);
1518
1906
  if (typeof crypto !== "undefined" && crypto.getRandomValues) {
1519
1907
  crypto.getRandomValues(array);
@@ -1524,72 +1912,10 @@ var generateTokenFn = (length = 32) => {
1524
1912
  }
1525
1913
  return Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join("");
1526
1914
  };
1527
- var hashStringFn = null;
1528
- var getPaginationFn = null;
1529
- var sendSuccessFn = null;
1530
- var sendErrorFn = null;
1531
- var validateFieldsFn = null;
1532
- var validateFileUploadFn = null;
1533
- var getEnvironmentInfoFn = null;
1534
- var isDirectoryEmptyFn = null;
1535
- var ensureDirectoryFn = null;
1536
- var writeJsonFileFn = null;
1537
- var readJsonFileFn = null;
1538
- var baraqexRenderToStringFn = null;
1539
- if (isNode && !isBrowser) {
1540
- Promise.resolve().then(async () => {
1541
- try {
1542
- const templatesModule = await Promise.resolve().then(() => (init_templates(), templates_exports));
1543
- templateGenerateDocument = templatesModule.generateDocument;
1544
- templateGenerateErrorPage = templatesModule.generateErrorPage;
1545
- templateGenerateLoadingPage = templatesModule.generateLoadingPage;
1546
- try {
1547
- await import("express");
1548
- } catch {
1549
- console.warn("Express not available - server functionality disabled");
1550
- return;
1551
- }
1552
- const serverModule = await Promise.resolve().then(() => (init_server(), server_exports));
1553
- BaraqexServerClass = serverModule.Server;
1554
- createServerFn = serverModule.createServer;
1555
- createDevServerFn = serverModule.createDevServer;
1556
- createProductionServerFn = serverModule.createProductionServer;
1557
- renderComponentFn = serverModule.renderComponent;
1558
- DatabaseClass = serverModule.Database;
1559
- AuthServiceClass = serverModule.AuthService;
1560
- ApiRouterClass = serverModule.ApiRouter;
1561
- requestLoggerFn = serverModule.requestLogger;
1562
- errorHandlerFn = serverModule.errorHandler;
1563
- notFoundHandlerFn = serverModule.notFoundHandler;
1564
- rateLimitFn = serverModule.rateLimit;
1565
- initNodeWasmFn = serverModule.initNodeWasm;
1566
- loadGoWasmFromFileFn = serverModule.loadGoWasmFromFile;
1567
- const utilsModule = await Promise.resolve().then(() => (init_utils(), utils_exports));
1568
- safeJsonParseFn = utilsModule.safeJsonParse;
1569
- generateTokenFn = utilsModule.generateToken;
1570
- hashStringFn = utilsModule.hashString;
1571
- getPaginationFn = utilsModule.getPagination;
1572
- sendSuccessFn = utilsModule.sendSuccess;
1573
- sendErrorFn = utilsModule.sendError;
1574
- validateFieldsFn = utilsModule.validateFields;
1575
- validateFileUploadFn = utilsModule.validateFileUpload;
1576
- getEnvironmentInfoFn = utilsModule.getEnvironmentInfo;
1577
- isDirectoryEmptyFn = utilsModule.isDirectoryEmpty;
1578
- ensureDirectoryFn = utilsModule.ensureDirectory;
1579
- writeJsonFileFn = utilsModule.writeJsonFile;
1580
- readJsonFileFn = utilsModule.readJsonFile;
1581
- const rendererModule = await Promise.resolve().then(() => (init_server_renderer(), server_renderer_exports));
1582
- baraqexRenderToStringFn = rendererModule.renderToString;
1583
- } catch (error) {
1584
- console.warn("Server modules not available:", error.message);
1585
- }
1586
- });
1587
- } else {
1588
- templateGenerateDocument = (content, options = {}) => `<!DOCTYPE html><html><head><title>${options.title || "App"}</title></head><body>${content}</body></html>`;
1589
- templateGenerateErrorPage = (code, message) => `<div>Error ${code}: ${message}</div>`;
1590
- templateGenerateLoadingPage = (message = "Loading...") => `<div>${message}</div>`;
1591
- }
1592
- var renderToStringFallback = (component) => {
1915
+ var generateDocument2 = (content, options = {}) => `<!DOCTYPE html><html><head><title>${options.title || "App"}</title></head><body>${content}</body></html>`;
1916
+ var generateErrorPage2 = (code, message) => `<div>Error ${code}: ${message}</div>`;
1917
+ var generateLoadingPage2 = (message = "Loading...") => `<div>${message}</div>`;
1918
+ var renderToString3 = (component) => {
1593
1919
  try {
1594
1920
  if (typeof component === "function") {
1595
1921
  const result = component();
@@ -1600,80 +1926,115 @@ var renderToStringFallback = (component) => {
1600
1926
  return "<div>Error rendering component</div>";
1601
1927
  }
1602
1928
  };
1603
- var BaraqexServer = BaraqexServerClass;
1604
- var createServer2 = createServerFn;
1605
- var createDevServer2 = createDevServerFn;
1606
- var createProductionServer2 = createProductionServerFn;
1607
- var renderComponent2 = renderComponentFn;
1608
- var Database2 = DatabaseClass;
1609
- var AuthService2 = AuthServiceClass;
1610
- var ApiRouter2 = ApiRouterClass;
1611
- var requestLogger2 = requestLoggerFn;
1612
- var errorHandler2 = errorHandlerFn;
1613
- var notFoundHandler2 = notFoundHandlerFn;
1614
- var rateLimit2 = rateLimitFn;
1615
- var initNodeWasm3 = initNodeWasmFn;
1616
- var loadGoWasmFromFile2 = loadGoWasmFromFileFn;
1617
- var safeJsonParse2 = safeJsonParseFn;
1618
- var generateToken2 = generateTokenFn;
1619
- var hashString2 = hashStringFn;
1620
- var getPagination2 = getPaginationFn;
1621
- var sendSuccess2 = sendSuccessFn;
1622
- var sendError2 = sendErrorFn;
1623
- var validateFields2 = validateFieldsFn;
1624
- var validateFileUpload2 = validateFileUploadFn;
1625
- var getEnvironmentInfo2 = getEnvironmentInfoFn;
1626
- var isDirectoryEmpty2 = isDirectoryEmptyFn;
1627
- var ensureDirectory2 = ensureDirectoryFn;
1628
- var writeJsonFile2 = writeJsonFileFn;
1629
- var readJsonFile2 = readJsonFileFn;
1630
- var baraqexRenderToString = baraqexRenderToStringFn;
1631
- var generateDocument2 = () => templateGenerateDocument || templateGenerateDocument;
1632
- var generateErrorPage2 = () => templateGenerateErrorPage || templateGenerateErrorPage;
1633
- var generateLoadingPage2 = () => templateGenerateLoadingPage || templateGenerateLoadingPage;
1634
- var generateDocumentTemplate = () => templateGenerateDocument || templateGenerateDocument;
1635
- var generateErrorPageTemplate = () => templateGenerateErrorPage || templateGenerateErrorPage;
1636
- var generateLoadingPageTemplate = () => templateGenerateLoadingPage || templateGenerateLoadingPage;
1637
- var renderToString3 = renderToStringFallback;
1929
+ if (isNode && !isBrowser) {
1930
+ (async () => {
1931
+ try {
1932
+ try {
1933
+ await import("express");
1934
+ const [serverModule, utilsModule, templatesModule, rendererModule] = await Promise.all([
1935
+ Promise.resolve().then(() => (init_server(), server_exports)),
1936
+ Promise.resolve().then(() => (init_utils(), utils_exports)),
1937
+ Promise.resolve().then(() => (init_templates(), templates_exports)),
1938
+ Promise.resolve().then(() => (init_server_renderer(), server_renderer_exports))
1939
+ ]);
1940
+ BaraqexServer = serverModule.Server;
1941
+ createServer2 = serverModule.createServer;
1942
+ createDevServer2 = serverModule.createDevServer;
1943
+ createProductionServer2 = serverModule.createProductionServer;
1944
+ renderComponent2 = serverModule.renderComponent;
1945
+ Database2 = serverModule.Database;
1946
+ AuthService2 = serverModule.AuthService;
1947
+ ApiRouter2 = serverModule.ApiRouter;
1948
+ requestLogger2 = serverModule.requestLogger;
1949
+ errorHandler2 = serverModule.errorHandler;
1950
+ notFoundHandler2 = serverModule.notFoundHandler;
1951
+ rateLimit2 = serverModule.rateLimit;
1952
+ initNodeWasm3 = serverModule.initNodeWasm;
1953
+ loadGoWasmFromFile2 = serverModule.loadGoWasmFromFile;
1954
+ safeJsonParse2 = utilsModule.safeJsonParse;
1955
+ generateToken2 = utilsModule.generateToken;
1956
+ hashString2 = utilsModule.hashString;
1957
+ getPagination2 = utilsModule.getPagination;
1958
+ sendSuccess2 = utilsModule.sendSuccess;
1959
+ sendError2 = utilsModule.sendError;
1960
+ validateFields2 = utilsModule.validateFields;
1961
+ validateFileUpload2 = utilsModule.validateFileUpload;
1962
+ getEnvironmentInfo2 = utilsModule.getEnvironmentInfo;
1963
+ isDirectoryEmpty2 = utilsModule.isDirectoryEmpty;
1964
+ ensureDirectory2 = utilsModule.ensureDirectory;
1965
+ writeJsonFile2 = utilsModule.writeJsonFile;
1966
+ readJsonFile2 = utilsModule.readJsonFile;
1967
+ generateDocument2 = templatesModule.generateDocument;
1968
+ generateErrorPage2 = templatesModule.generateErrorPage;
1969
+ generateLoadingPage2 = templatesModule.generateLoadingPage;
1970
+ baraqexRenderToString = rendererModule.renderToString;
1971
+ } catch (expressError) {
1972
+ console.warn("Express not available - server functionality disabled");
1973
+ createServer2 = () => {
1974
+ throw new Error("Server functionality not available. Make sure you have Express installed: npm install express @types/express");
1975
+ };
1976
+ createDevServer2 = () => {
1977
+ throw new Error("Server functionality not available. Make sure you have Express installed: npm install express @types/express");
1978
+ };
1979
+ createProductionServer2 = () => {
1980
+ throw new Error("Server functionality not available. Make sure you have Express installed: npm install express @types/express");
1981
+ };
1982
+ }
1983
+ } catch (error) {
1984
+ console.warn("Server modules not available:", error.message);
1985
+ }
1986
+ })();
1987
+ }
1638
1988
  console.log("Baraqex - powered by Frontend Hamroun Framework with additional utilities");
1639
1989
  export {
1640
1990
  ApiRouter2 as ApiRouter,
1641
1991
  AuthService2 as AuthService,
1642
1992
  BaraqexServer,
1643
1993
  Database2 as Database,
1994
+ Fragment,
1644
1995
  baraqexRenderToString,
1996
+ batchUpdates,
1645
1997
  callWasmFunction,
1998
+ createContext,
1646
1999
  createDevServer2 as createDevServer,
1647
2000
  createProductionServer2 as createProductionServer,
1648
2001
  createServer2 as createServer,
1649
2002
  ensureDirectory2 as ensureDirectory,
1650
2003
  errorHandler2 as errorHandler,
1651
2004
  generateDocument2 as generateDocument,
1652
- generateDocumentTemplate,
1653
2005
  generateErrorPage2 as generateErrorPage,
1654
- generateErrorPageTemplate,
1655
2006
  generateLoadingPage2 as generateLoadingPage,
1656
- generateLoadingPageTemplate,
1657
2007
  generateToken2 as generateToken,
1658
2008
  getEnvironmentInfo2 as getEnvironmentInfo,
1659
2009
  getPagination2 as getPagination,
1660
2010
  getWasmFunctions,
1661
2011
  hashString2 as hashString,
2012
+ hydrate,
1662
2013
  initNodeWasm3 as initNodeWasm,
1663
2014
  isDirectoryEmpty2 as isDirectoryEmpty,
1664
2015
  isWasmReady,
2016
+ jsx,
2017
+ jsx as jsxs,
1665
2018
  loadGoWasm,
1666
2019
  loadGoWasmFromFile2 as loadGoWasmFromFile,
1667
2020
  notFoundHandler2 as notFoundHandler,
1668
2021
  rateLimit2 as rateLimit,
1669
2022
  readJsonFile2 as readJsonFile,
2023
+ render,
1670
2024
  renderComponent2 as renderComponent,
1671
2025
  renderToString3 as renderToString,
1672
2026
  requestLogger2 as requestLogger,
1673
2027
  safeJsonParse2 as safeJsonParse,
1674
2028
  sendError2 as sendError,
1675
2029
  sendSuccess2 as sendSuccess,
2030
+ server,
2031
+ useContext,
2032
+ useEffect,
2033
+ useErrorBoundary,
1676
2034
  useGoWasm,
2035
+ useMemo,
2036
+ useRef,
2037
+ useState,
1677
2038
  validateFields2 as validateFields,
1678
2039
  validateFileUpload2 as validateFileUpload,
1679
2040
  writeJsonFile2 as writeJsonFile