baraqex 1.0.44 → 1.0.46
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/README_WASM.md +472 -0
- package/dist/browser.js +1 -422
- package/dist/browser.js.map +4 -4
- package/dist/index.js +31 -421
- package/dist/index.js.map +4 -4
- package/dist/{server/index.js → server.js} +21 -114
- package/dist/server.js.map +7 -0
- package/package.json +48 -57
- package/templates/ssr-template/package-lock.json +2 -2
- package/templates/ssr-template/src/App.tsx +1 -1
- package/templates/ssr-template/src/client.tsx +1 -1
- package/templates/ssr-template/src/server.ts +1 -1
- package/templates/wasm/package-lock.json +3169 -2710
- package/templates/wasm/package.json +10 -12
- package/templates/wasm/src/App.tsx +50 -19
- package/templates/wasm/vite.config.ts +24 -59
- package/dist/api/hello.d.ts +0 -3
- package/dist/api/hello.d.ts.map +0 -1
- package/dist/api/users/[id].d.ts +0 -5
- package/dist/api/users/[id].d.ts.map +0 -1
- package/dist/browser.d.ts +0 -29
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.package.json +0 -4
- package/dist/frontend/components/WasmLoader.d.ts +0 -2
- package/dist/frontend/components/WasmLoader.d.ts.map +0 -1
- package/dist/frontend/hooks/useWasm.d.ts +0 -2
- package/dist/frontend/hooks/useWasm.d.ts.map +0 -1
- package/dist/frontend/index.d.ts +0 -2
- package/dist/frontend/index.d.ts.map +0 -1
- package/dist/index.d.ts +0 -34
- package/dist/index.d.ts.map +0 -1
- package/dist/renderComponent.d.ts +0 -9
- package/dist/renderComponent.d.ts.map +0 -1
- package/dist/server/api-router.d.ts +0 -16
- package/dist/server/api-router.d.ts.map +0 -1
- package/dist/server/auth.d.ts +0 -25
- package/dist/server/auth.d.ts.map +0 -1
- package/dist/server/database.d.ts +0 -22
- package/dist/server/database.d.ts.map +0 -1
- package/dist/server/index.d.ts +0 -115
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -7
- package/dist/server/middleware.d.ts +0 -11
- package/dist/server/middleware.d.ts.map +0 -1
- package/dist/server/package.json +0 -4
- package/dist/server/templates.d.ts +0 -31
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/types.d.ts +0 -69
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/utils.d.ts +0 -70
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/wasm.d.ts +0 -29
- package/dist/server/wasm.d.ts.map +0 -1
- package/dist/server-renderer.d.ts +0 -5
- package/dist/server-renderer.d.ts.map +0 -1
- package/dist/wasm.d.ts +0 -51
- package/dist/wasm.d.ts.map +0 -1
- package/templates/wasm/src/index.html +0 -14
- package/templates/wasm/src/main.tsx +0 -5
- package/templates/wasm/src/wasm-loader.ts +0 -119
package/dist/index.js
CHANGED
|
@@ -15,383 +15,6 @@ var __export = (target, all) => {
|
|
|
15
15
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
16
16
|
};
|
|
17
17
|
|
|
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();
|
|
30
|
-
}
|
|
31
|
-
} finally {
|
|
32
|
-
isBatching = false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
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
|
-
}
|
|
89
|
-
};
|
|
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();
|
|
105
|
-
}
|
|
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, []);
|
|
158
|
-
}
|
|
159
|
-
if (globalRenderCallback && globalContainer && currentElement) {
|
|
160
|
-
await globalRenderCallback(currentElement, globalContainer);
|
|
161
|
-
}
|
|
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);
|
|
181
|
-
}
|
|
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);
|
|
213
|
-
}
|
|
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
|
-
}
|
|
230
|
-
}
|
|
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
|
-
}
|
|
253
|
-
}
|
|
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();
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
}
|
|
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
|
-
}
|
|
329
|
-
}
|
|
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);
|
|
333
|
-
}
|
|
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}/>`;
|
|
352
|
-
}
|
|
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);
|
|
360
|
-
}
|
|
361
|
-
return fragmentOutput;
|
|
362
|
-
}
|
|
363
|
-
console.warn("Unknown vnode type:", vnode.type);
|
|
364
|
-
return "";
|
|
365
|
-
}
|
|
366
|
-
function escapeHtml(text) {
|
|
367
|
-
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
368
|
-
}
|
|
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
|
-
};
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
|
|
395
18
|
// src/server/templates.ts
|
|
396
19
|
var templates_exports = {};
|
|
397
20
|
__export(templates_exports, {
|
|
@@ -415,38 +38,38 @@ function generateDocument(content, options = {}) {
|
|
|
415
38
|
initialData = {},
|
|
416
39
|
componentName = ""
|
|
417
40
|
} = options;
|
|
418
|
-
const htmlAttributes = Object.entries(htmlAttrs).map(([key, value]) => `${key}="${
|
|
419
|
-
const bodyAttributes = Object.entries(bodyAttrs).map(([key, value]) => `${key}="${
|
|
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(" ");
|
|
420
43
|
const metaTags = [
|
|
421
44
|
`<meta charset="${charset}">`,
|
|
422
45
|
`<meta name="viewport" content="${viewport}">`,
|
|
423
|
-
description ? `<meta name="description" content="${
|
|
46
|
+
description ? `<meta name="description" content="${escapeHtml(description)}">` : ""
|
|
424
47
|
];
|
|
425
48
|
Object.entries(meta).forEach(([name, content2]) => {
|
|
426
|
-
metaTags.push(`<meta name="${
|
|
49
|
+
metaTags.push(`<meta name="${escapeHtml(name)}" content="${escapeHtml(content2)}">`);
|
|
427
50
|
});
|
|
428
51
|
const scriptTags = scripts.map((src) => {
|
|
429
52
|
if (src.startsWith("<script")) {
|
|
430
53
|
return src;
|
|
431
54
|
}
|
|
432
|
-
return `<script src="${
|
|
55
|
+
return `<script src="${escapeHtml(src)}" ${src.endsWith(".js") ? 'type="module"' : ""} defer></script>`;
|
|
433
56
|
});
|
|
434
57
|
const styleTags = styles.map((href) => {
|
|
435
58
|
if (href.startsWith("<style")) {
|
|
436
59
|
return href;
|
|
437
60
|
}
|
|
438
|
-
return `<link rel="stylesheet" href="${
|
|
61
|
+
return `<link rel="stylesheet" href="${escapeHtml(href)}">`;
|
|
439
62
|
});
|
|
440
|
-
const initialDataScript = Object.keys(initialData).length > 0 ? `<script id="__APP_DATA__" type="application/json">${
|
|
63
|
+
const initialDataScript = Object.keys(initialData).length > 0 ? `<script id="__APP_DATA__" type="application/json">${escapeHtml(JSON.stringify(initialData))}</script>` : "";
|
|
441
64
|
return `<!DOCTYPE html>
|
|
442
65
|
<html lang="${lang}" ${htmlAttributes}>
|
|
443
66
|
<head>
|
|
444
67
|
${metaTags.filter(Boolean).join("\n ")}
|
|
445
|
-
<title>${
|
|
68
|
+
<title>${escapeHtml(title)}</title>
|
|
446
69
|
${styleTags.join("\n ")}
|
|
447
70
|
</head>
|
|
448
71
|
<body class="${bodyClasses}" ${bodyAttributes}>
|
|
449
|
-
<div id="app-root" data-ssr-root${componentName ? ` data-component="${
|
|
72
|
+
<div id="app-root" data-ssr-root${componentName ? ` data-component="${escapeHtml(componentName)}"` : ""}>${content}</div>
|
|
450
73
|
${initialDataScript}
|
|
451
74
|
${scriptTags.join("\n ")}
|
|
452
75
|
</body>
|
|
@@ -464,14 +87,14 @@ function generateErrorPage(statusCode, message, error) {
|
|
|
464
87
|
const isDev = process.env.NODE_ENV !== "production";
|
|
465
88
|
const errorDetails = isDev && error ? `
|
|
466
89
|
<div class="error-details">
|
|
467
|
-
<pre>${
|
|
90
|
+
<pre>${escapeHtml(error.stack || error.message)}</pre>
|
|
468
91
|
</div>
|
|
469
92
|
` : "";
|
|
470
93
|
const content = `
|
|
471
94
|
<div class="error-container">
|
|
472
95
|
<h1>${statusCode}</h1>
|
|
473
|
-
<h2>${
|
|
474
|
-
<p>${
|
|
96
|
+
<h2>${escapeHtml(errorMessages[statusCode] || "Error")}</h2>
|
|
97
|
+
<p>${escapeHtml(message)}</p>
|
|
475
98
|
${errorDetails}
|
|
476
99
|
<a href="/" class="home-link">Back to Home</a>
|
|
477
100
|
</div>
|
|
@@ -545,7 +168,7 @@ function generateLoadingPage(message = "Loading...") {
|
|
|
545
168
|
const content = `
|
|
546
169
|
<div class="loading-container">
|
|
547
170
|
<div class="spinner"></div>
|
|
548
|
-
<p>${
|
|
171
|
+
<p>${escapeHtml(message)}</p>
|
|
549
172
|
</div>
|
|
550
173
|
`;
|
|
551
174
|
const styles = [`<style>
|
|
@@ -581,7 +204,7 @@ function generateLoadingPage(message = "Loading...") {
|
|
|
581
204
|
styles
|
|
582
205
|
});
|
|
583
206
|
}
|
|
584
|
-
function
|
|
207
|
+
function escapeHtml(text) {
|
|
585
208
|
return String(text).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
586
209
|
}
|
|
587
210
|
var init_templates = __esm({
|
|
@@ -1145,8 +768,8 @@ async function initNodeWasm() {
|
|
|
1145
768
|
}
|
|
1146
769
|
}
|
|
1147
770
|
async function loadGoRuntime(goWasmPath) {
|
|
1148
|
-
if (typeof
|
|
1149
|
-
return
|
|
771
|
+
if (typeof global.Go === "function") {
|
|
772
|
+
return global.Go;
|
|
1150
773
|
}
|
|
1151
774
|
const possiblePaths = [
|
|
1152
775
|
goWasmPath,
|
|
@@ -1175,13 +798,13 @@ async function loadGoRuntime(goWasmPath) {
|
|
|
1175
798
|
continue;
|
|
1176
799
|
}
|
|
1177
800
|
const wasmExecUrl = pathToFileURL2(resolvedPath).href;
|
|
1178
|
-
if (
|
|
1179
|
-
delete
|
|
801
|
+
if (global.Go) {
|
|
802
|
+
delete global.Go;
|
|
1180
803
|
}
|
|
1181
804
|
await import(wasmExecUrl);
|
|
1182
|
-
if (typeof
|
|
805
|
+
if (typeof global.Go === "function") {
|
|
1183
806
|
console.log(`[WASM] Loaded Go runtime from: ${resolvedPath}`);
|
|
1184
|
-
return
|
|
807
|
+
return global.Go;
|
|
1185
808
|
} else {
|
|
1186
809
|
console.warn(`[WASM] File found but Go class not exported: ${resolvedPath}`);
|
|
1187
810
|
}
|
|
@@ -1233,7 +856,7 @@ async function loadGoWasmFromFile(wasmFilePath, options = {}) {
|
|
|
1233
856
|
console.log("[WASM] Scanning global object for Go functions...");
|
|
1234
857
|
}
|
|
1235
858
|
const functions = {};
|
|
1236
|
-
const globalObj =
|
|
859
|
+
const globalObj = global;
|
|
1237
860
|
const allKeys = Object.getOwnPropertyNames(globalObj);
|
|
1238
861
|
const goKeys = allKeys.filter((key) => key.startsWith("go"));
|
|
1239
862
|
if (options.debug) {
|
|
@@ -1319,6 +942,7 @@ __export(server_exports, {
|
|
|
1319
942
|
});
|
|
1320
943
|
import path4 from "path";
|
|
1321
944
|
import fs4 from "fs";
|
|
945
|
+
import { renderToString } from "frontend-hamroun";
|
|
1322
946
|
function getComponentName(filePath, pagesDir) {
|
|
1323
947
|
try {
|
|
1324
948
|
const relativePath = path4.relative(pagesDir, filePath);
|
|
@@ -1342,13 +966,13 @@ function createDevServer(options = {}) {
|
|
|
1342
966
|
});
|
|
1343
967
|
}
|
|
1344
968
|
function createProductionServer(config) {
|
|
1345
|
-
const
|
|
969
|
+
const server = new Server({
|
|
1346
970
|
...config,
|
|
1347
971
|
// Fix the PORT parsing
|
|
1348
972
|
port: config.port || (process.env.PORT ? parseInt(process.env.PORT) : 8080)
|
|
1349
973
|
});
|
|
1350
|
-
|
|
1351
|
-
return
|
|
974
|
+
server.addShutdownHandler();
|
|
975
|
+
return server;
|
|
1352
976
|
}
|
|
1353
977
|
function getRequestIp(req) {
|
|
1354
978
|
return req.ip || req.headers["x-forwarded-for"]?.split(",")[0].trim() || req.socket.remoteAddress || "";
|
|
@@ -1368,7 +992,6 @@ var Server, renderComponent, server_default;
|
|
|
1368
992
|
var init_server = __esm({
|
|
1369
993
|
"src/server/index.ts"() {
|
|
1370
994
|
"use strict";
|
|
1371
|
-
init_dist();
|
|
1372
995
|
init_database();
|
|
1373
996
|
init_auth();
|
|
1374
997
|
init_api_router();
|
|
@@ -1695,9 +1318,11 @@ var init_server = __esm({
|
|
|
1695
1318
|
process.on("SIGINT", gracefulShutdown);
|
|
1696
1319
|
}
|
|
1697
1320
|
};
|
|
1698
|
-
renderComponent = (Component, props = {}) => {
|
|
1321
|
+
renderComponent = async (Component, props = {}) => {
|
|
1699
1322
|
try {
|
|
1700
|
-
const
|
|
1323
|
+
const { jsx, renderToString: renderToString3 } = await import("frontend-hamroun");
|
|
1324
|
+
const element = jsx(Component, props);
|
|
1325
|
+
const html = renderToString3(element);
|
|
1701
1326
|
return {
|
|
1702
1327
|
html: typeof html === "string" ? html : String(html),
|
|
1703
1328
|
success: true
|
|
@@ -1705,7 +1330,7 @@ var init_server = __esm({
|
|
|
1705
1330
|
} catch (error) {
|
|
1706
1331
|
console.error("Error rendering component:", error);
|
|
1707
1332
|
return {
|
|
1708
|
-
html: `<div class="error">Error rendering component</div>`,
|
|
1333
|
+
html: `<div class="error">Error rendering component: ${error instanceof Error ? error.message : "Unknown error"}</div>`,
|
|
1709
1334
|
success: false,
|
|
1710
1335
|
error
|
|
1711
1336
|
};
|
|
@@ -1770,7 +1395,7 @@ var init_server_renderer = __esm({
|
|
|
1770
1395
|
});
|
|
1771
1396
|
|
|
1772
1397
|
// src/index.ts
|
|
1773
|
-
|
|
1398
|
+
export * from "frontend-hamroun";
|
|
1774
1399
|
|
|
1775
1400
|
// src/wasm.ts
|
|
1776
1401
|
async function loadGoWasm(wasmUrl, options = {}) {
|
|
@@ -1960,11 +1585,8 @@ export {
|
|
|
1960
1585
|
AuthService2 as AuthService,
|
|
1961
1586
|
BaraqexServer,
|
|
1962
1587
|
Database2 as Database,
|
|
1963
|
-
Fragment,
|
|
1964
1588
|
baraqexRenderToString,
|
|
1965
|
-
batchUpdates,
|
|
1966
1589
|
callWasmFunction,
|
|
1967
|
-
createContext,
|
|
1968
1590
|
createDevServer2 as createDevServer,
|
|
1969
1591
|
createProductionServer2 as createProductionServer,
|
|
1970
1592
|
createServer2 as createServer,
|
|
@@ -1978,32 +1600,20 @@ export {
|
|
|
1978
1600
|
getPagination2 as getPagination,
|
|
1979
1601
|
getWasmFunctions,
|
|
1980
1602
|
hashString2 as hashString,
|
|
1981
|
-
hydrate,
|
|
1982
1603
|
initNodeWasm3 as initNodeWasm,
|
|
1983
1604
|
isDirectoryEmpty2 as isDirectoryEmpty,
|
|
1984
1605
|
isWasmReady,
|
|
1985
|
-
jsx,
|
|
1986
|
-
jsx as jsxs,
|
|
1987
1606
|
loadGoWasm,
|
|
1988
1607
|
loadGoWasmFromFile2 as loadGoWasmFromFile,
|
|
1989
1608
|
notFoundHandler2 as notFoundHandler,
|
|
1990
1609
|
rateLimit2 as rateLimit,
|
|
1991
1610
|
readJsonFile2 as readJsonFile,
|
|
1992
|
-
render,
|
|
1993
1611
|
renderComponent2 as renderComponent,
|
|
1994
|
-
renderToString,
|
|
1995
1612
|
requestLogger2 as requestLogger,
|
|
1996
1613
|
safeJsonParse2 as safeJsonParse,
|
|
1997
1614
|
sendError2 as sendError,
|
|
1998
1615
|
sendSuccess2 as sendSuccess,
|
|
1999
|
-
server,
|
|
2000
|
-
useContext,
|
|
2001
|
-
useEffect,
|
|
2002
|
-
useErrorBoundary,
|
|
2003
1616
|
useGoWasm,
|
|
2004
|
-
useMemo,
|
|
2005
|
-
useRef,
|
|
2006
|
-
useState,
|
|
2007
1617
|
validateFields2 as validateFields,
|
|
2008
1618
|
validateFileUpload2 as validateFileUpload,
|
|
2009
1619
|
writeJsonFile2 as writeJsonFile
|