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.
- package/bin/baraqex.js +1013 -1126
- package/dist/api/hello.d.ts +3 -0
- package/dist/api/hello.d.ts.map +1 -0
- package/dist/api/users/[id].d.ts +5 -0
- package/dist/api/users/[id].d.ts.map +1 -0
- package/dist/browser.d.ts +40 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +407 -1
- package/dist/browser.js.map +4 -4
- package/dist/browser.package.json +4 -0
- package/dist/forms/index.d.ts +2 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/types.d.ts +2 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/frontend/components/WasmLoader.d.ts +2 -0
- package/dist/frontend/components/WasmLoader.d.ts.map +1 -0
- package/dist/frontend/hooks/useWasm.d.ts +2 -0
- package/dist/frontend/hooks/useWasm.d.ts.map +1 -0
- package/dist/frontend/index.d.ts +2 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +678 -317
- package/dist/index.js.map +4 -4
- package/dist/renderComponent.d.ts +9 -0
- package/dist/renderComponent.d.ts.map +1 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/types.d.ts +2 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/server/api-router.d.ts +16 -0
- package/dist/server/api-router.d.ts.map +1 -0
- package/dist/server/auth.d.ts +25 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/database.d.ts +22 -0
- package/dist/server/database.d.ts.map +1 -0
- package/dist/server/index.d.ts +116 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/{server.js → server/index.js} +120 -23
- package/dist/server/index.js.map +7 -0
- package/dist/server/middleware.d.ts +11 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/package.json +4 -0
- package/dist/server/templates.d.ts +31 -0
- package/dist/server/templates.d.ts.map +1 -0
- package/dist/server/types.d.ts +69 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/utils.d.ts +70 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/wasm.d.ts +29 -0
- package/dist/server/wasm.d.ts.map +1 -0
- package/dist/server-renderer.d.ts +5 -0
- package/dist/server-renderer.d.ts.map +1 -0
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/types.d.ts +2 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/wasm.d.ts +51 -0
- package/dist/wasm.d.ts.map +1 -0
- package/package.json +65 -56
- package/templates/basic-app/src/main.tsx +1 -0
- package/templates/fullstack-template/.env.example +42 -0
- package/templates/fullstack-template/README.md +38 -42
- package/templates/fullstack-template/package-lock.json +7932 -0
- package/templates/fullstack-template/package.json +58 -6
- package/templates/fullstack-template/server.js +28 -9
- package/templates/fullstack-template/src/App.tsx +94 -0
- package/templates/fullstack-template/src/api/auth/login.ts +75 -0
- package/templates/fullstack-template/src/api/auth/me.ts +66 -0
- package/templates/fullstack-template/src/api/auth/register.ts +59 -0
- package/templates/fullstack-template/src/api/todos/[id].ts +108 -0
- package/templates/fullstack-template/src/api/todos/index.ts +79 -0
- package/templates/fullstack-template/src/components/Dashboard.tsx +129 -0
- package/templates/fullstack-template/src/components/Header.tsx +76 -0
- package/templates/fullstack-template/src/contexts/ApiContext.tsx +69 -0
- package/templates/fullstack-template/src/contexts/AuthContext.tsx +155 -0
- package/templates/fullstack-template/src/server.ts +167 -0
- package/templates/fullstack-template/src/styles/App.css +446 -0
- package/templates/ssr-template/package-lock.json +337 -60
- package/templates/ssr-template/package.json +1 -1
- package/templates/ssr-template/src/App.tsx +2 -2
- package/templates/wasm/App.tsx +564 -0
- package/templates/wasm/client.tsx +220 -0
- package/templates/wasm/index.tsx +21 -0
- package/templates/wasm/package-lock.json +5347 -5307
- package/templates/wasm/package.json +43 -25
- package/templates/wasm/public/example.wasm +0 -0
- package/templates/wasm/public/wasm_exec.js +1 -12
- package/templates/wasm/server.ts +145 -0
- package/templates/wasm/vite.config.ts +42 -24
- package/README_WASM.md +0 -472
- package/dist/server.js.map +0 -7
- package/templates/basic-app/src/App.jsx +0 -0
- package/templates/basic-app/src/App.tsx +0 -0
- package/templates/fullstack-template/src/api/hello.js +0 -17
- package/templates/fullstack-template/src/pages/index.js +0 -206
- /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
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
margin: 0;
|
|
125
|
-
color: #e74c3c;
|
|
159
|
+
if (globalRenderCallback && globalContainer && currentElement) {
|
|
160
|
+
await globalRenderCallback(currentElement, globalContainer);
|
|
126
161
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
157
|
-
|
|
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
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
.
|
|
186
|
-
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
198
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
|
367
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
209
368
|
}
|
|
210
|
-
var
|
|
211
|
-
|
|
212
|
-
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
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
|
|
772
|
-
return
|
|
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 (
|
|
802
|
-
delete
|
|
1178
|
+
if (globalThis.Go) {
|
|
1179
|
+
delete globalThis.Go;
|
|
803
1180
|
}
|
|
804
1181
|
await import(wasmExecUrl);
|
|
805
|
-
if (typeof
|
|
1182
|
+
if (typeof globalThis.Go === "function") {
|
|
806
1183
|
console.log(`[WASM] Loaded Go runtime from: ${resolvedPath}`);
|
|
807
|
-
return
|
|
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 =
|
|
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
|
|
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
|
-
|
|
975
|
-
return
|
|
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 =
|
|
1702
|
+
renderComponent = (Component, props = {}) => {
|
|
1322
1703
|
try {
|
|
1323
|
-
const
|
|
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
|
|
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
|
-
|
|
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
|
|
1493
|
-
var
|
|
1494
|
-
var
|
|
1495
|
-
var
|
|
1496
|
-
var
|
|
1497
|
-
var
|
|
1498
|
-
var
|
|
1499
|
-
var
|
|
1500
|
-
var
|
|
1501
|
-
var
|
|
1502
|
-
var
|
|
1503
|
-
var
|
|
1504
|
-
var
|
|
1505
|
-
var
|
|
1506
|
-
var
|
|
1507
|
-
var
|
|
1508
|
-
var
|
|
1509
|
-
var
|
|
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
|
|
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
|
|
1528
|
-
var
|
|
1529
|
-
var
|
|
1530
|
-
var
|
|
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
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
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
|