frontend-hamroun 1.2.83 → 1.2.85

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 (245) hide show
  1. package/bin/cli.js +57 -869
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.client.cjs +1 -1
  5. package/dist/index.client.cjs.map +1 -1
  6. package/dist/index.client.js +2 -2
  7. package/dist/index.client.js.map +1 -1
  8. package/dist/index.js +116 -136
  9. package/dist/index.js.map +1 -1
  10. package/dist/jsx-runtime.cjs.map +1 -1
  11. package/dist/jsx-runtime.js.map +1 -1
  12. package/dist/renderer-DaVfBeVi.cjs +2 -0
  13. package/dist/renderer-DaVfBeVi.cjs.map +1 -0
  14. package/dist/renderer-nfT7XSpo.js +61 -0
  15. package/dist/renderer-nfT7XSpo.js.map +1 -0
  16. package/dist/server-renderer-B5b0Q0ck.cjs +2 -0
  17. package/dist/server-renderer-B5b0Q0ck.cjs.map +1 -0
  18. package/dist/{server-renderer-C1WXH-zV.js → server-renderer-C4MB-jAp.js} +6 -39
  19. package/dist/server-renderer-C4MB-jAp.js.map +1 -0
  20. package/dist/server-renderer.cjs +1 -1
  21. package/dist/server-renderer.js +1 -1
  22. package/package.json +1 -1
  23. package/templates/basic-app/build.d.ts +2 -0
  24. package/templates/basic-app/build.d.ts.map +1 -0
  25. package/templates/basic-app/dev.d.ts +2 -0
  26. package/templates/basic-app/dev.d.ts.map +1 -0
  27. package/templates/basic-app/esbuild.config.d.ts +2 -0
  28. package/templates/basic-app/esbuild.config.d.ts.map +1 -0
  29. package/templates/basic-app/postcss.config.d.ts +8 -0
  30. package/templates/basic-app/postcss.config.d.ts.map +1 -0
  31. package/templates/basic-app/server.d.ts +2 -0
  32. package/templates/basic-app/server.d.ts.map +1 -0
  33. package/templates/basic-app/src/App.d.ts +2 -0
  34. package/templates/basic-app/src/App.d.ts.map +1 -0
  35. package/templates/basic-app/src/App.js +148 -0
  36. package/templates/basic-app/src/App.tsx +397 -19
  37. package/templates/basic-app/src/client.d.ts +2 -0
  38. package/templates/basic-app/src/client.d.ts.map +1 -0
  39. package/templates/basic-app/src/client.js +6 -0
  40. package/templates/basic-app/src/components/Counter.d.ts +4 -0
  41. package/templates/basic-app/src/components/Counter.d.ts.map +1 -0
  42. package/templates/basic-app/src/components/Counter.js +9 -0
  43. package/templates/basic-app/src/jsx-shim.d.ts +8 -0
  44. package/templates/basic-app/src/jsx-shim.d.ts.map +1 -0
  45. package/templates/basic-app/src/main.d.ts +2 -0
  46. package/templates/basic-app/src/main.d.ts.map +1 -0
  47. package/templates/basic-app/src/main.js +57 -0
  48. package/templates/basic-app/src/server.d.ts +2 -0
  49. package/templates/basic-app/src/server.d.ts.map +1 -0
  50. package/templates/basic-app/tailwind.config.d.ts +9 -0
  51. package/templates/basic-app/tailwind.config.d.ts.map +1 -0
  52. package/templates/basic-app/vite.config.d.ts +3 -0
  53. package/templates/basic-app/vite.config.d.ts.map +1 -0
  54. package/templates/basic-app/vite.config.js +7 -0
  55. package/templates/complete-app/api/hello.d.ts +1 -0
  56. package/templates/complete-app/api/hello.d.ts.map +1 -0
  57. package/templates/complete-app/client.d.ts +2 -0
  58. package/templates/complete-app/client.d.ts.map +1 -0
  59. package/templates/complete-app/lib/frontend-hamroun.d.ts +18 -0
  60. package/templates/complete-app/lib/frontend-hamroun.d.ts.map +1 -0
  61. package/templates/complete-app/pages/about.d.ts +7 -0
  62. package/templates/complete-app/pages/about.d.ts.map +1 -0
  63. package/templates/complete-app/pages/index.d.ts +7 -0
  64. package/templates/complete-app/pages/index.d.ts.map +1 -0
  65. package/templates/complete-app/pages/wasm-demo.d.ts +7 -0
  66. package/templates/complete-app/pages/wasm-demo.d.ts.map +1 -0
  67. package/templates/complete-app/public/client.d.ts +17 -0
  68. package/templates/complete-app/public/client.d.ts.map +1 -0
  69. package/templates/complete-app/server.d.ts +2 -0
  70. package/templates/complete-app/server.d.ts.map +1 -0
  71. package/templates/complete-app/server.js +236 -218
  72. package/templates/complete-app/src/App.d.ts +2 -0
  73. package/templates/complete-app/src/App.d.ts.map +1 -0
  74. package/templates/complete-app/src/App.js +27 -0
  75. package/templates/complete-app/src/client.d.ts +2 -0
  76. package/templates/complete-app/src/client.d.ts.map +1 -0
  77. package/templates/complete-app/src/client.js +52 -0
  78. package/templates/complete-app/src/pages/index.d.ts +2 -0
  79. package/templates/complete-app/src/pages/index.d.ts.map +1 -0
  80. package/templates/complete-app/src/pages/index.js +19 -0
  81. package/templates/complete-app/src/server.d.ts +2 -0
  82. package/templates/complete-app/src/server.d.ts.map +1 -0
  83. package/templates/complete-app/src/server.js +192 -0
  84. package/templates/complete-app/vite.config.d.ts +3 -0
  85. package/templates/complete-app/vite.config.d.ts.map +1 -0
  86. package/templates/complete-app/vite.config.js +29 -57
  87. package/templates/fullstack-app/api/hello.d.ts +4 -0
  88. package/templates/fullstack-app/api/hello.d.ts.map +1 -0
  89. package/templates/fullstack-app/api/hello.js +14 -11
  90. package/templates/fullstack-app/api/users/[id].d.ts +5 -0
  91. package/templates/fullstack-app/api/users/[id].d.ts.map +1 -0
  92. package/templates/fullstack-app/api/users/[id].js +52 -0
  93. package/templates/fullstack-app/api/users/index.d.ts +4 -0
  94. package/templates/fullstack-app/api/users/index.d.ts.map +1 -0
  95. package/templates/fullstack-app/api/users/index.js +25 -0
  96. package/templates/fullstack-app/build/main.d.ts +211 -0
  97. package/templates/fullstack-app/build/main.d.ts.map +1 -0
  98. package/templates/fullstack-app/build.d.ts +2 -0
  99. package/templates/fullstack-app/build.d.ts.map +1 -0
  100. package/templates/fullstack-app/build.js +190 -0
  101. package/templates/fullstack-app/postcss.config.d.ts +5 -0
  102. package/templates/fullstack-app/postcss.config.d.ts.map +1 -0
  103. package/templates/fullstack-app/process-tailwind.d.ts +2 -0
  104. package/templates/fullstack-app/process-tailwind.d.ts.map +1 -0
  105. package/templates/fullstack-app/public/route-handler.d.ts +1 -0
  106. package/templates/fullstack-app/public/route-handler.d.ts.map +1 -0
  107. package/templates/fullstack-app/server.d.ts +2 -0
  108. package/templates/fullstack-app/server.d.ts.map +1 -0
  109. package/templates/fullstack-app/server.js +428 -266
  110. package/templates/fullstack-app/src/client.d.ts +2 -0
  111. package/templates/fullstack-app/src/client.d.ts.map +1 -0
  112. package/templates/fullstack-app/src/components/ClientHome.d.ts +1 -0
  113. package/templates/fullstack-app/src/components/ClientHome.d.ts.map +1 -0
  114. package/templates/fullstack-app/src/components/ClientHome.js +1 -0
  115. package/templates/fullstack-app/src/components/ErrorBoundary.d.ts +7 -0
  116. package/templates/fullstack-app/src/components/ErrorBoundary.d.ts.map +1 -0
  117. package/templates/fullstack-app/src/components/ErrorBoundary.js +12 -0
  118. package/templates/fullstack-app/src/components/Layout.d.ts +7 -0
  119. package/templates/fullstack-app/src/components/Layout.d.ts.map +1 -0
  120. package/templates/fullstack-app/src/components/Layout.js +4 -0
  121. package/templates/fullstack-app/src/components/StateDemo.d.ts +2 -0
  122. package/templates/fullstack-app/src/components/StateDemo.d.ts.map +1 -0
  123. package/templates/fullstack-app/src/components/StateDemo.js +86 -0
  124. package/templates/fullstack-app/src/components/UserList.d.ts +11 -0
  125. package/templates/fullstack-app/src/components/UserList.d.ts.map +1 -0
  126. package/templates/fullstack-app/src/components/UserList.js +7 -0
  127. package/templates/fullstack-app/src/config.d.ts +29 -0
  128. package/templates/fullstack-app/src/config.d.ts.map +1 -0
  129. package/templates/fullstack-app/src/config.js +36 -0
  130. package/templates/fullstack-app/src/data/api.d.ts +35 -0
  131. package/templates/fullstack-app/src/data/api.d.ts.map +1 -0
  132. package/templates/fullstack-app/src/data/api.js +173 -0
  133. package/templates/fullstack-app/src/main.d.ts +7 -0
  134. package/templates/fullstack-app/src/main.d.ts.map +1 -0
  135. package/templates/fullstack-app/src/main.js +130 -0
  136. package/templates/fullstack-app/src/middleware.d.ts +10 -0
  137. package/templates/fullstack-app/src/middleware.d.ts.map +1 -0
  138. package/templates/fullstack-app/src/middleware.js +14 -0
  139. package/templates/fullstack-app/src/pages/404.d.ts +4 -0
  140. package/templates/fullstack-app/src/pages/404.d.ts.map +1 -0
  141. package/templates/fullstack-app/src/pages/404.js +4 -0
  142. package/templates/fullstack-app/src/pages/[id].d.ts +1 -0
  143. package/templates/fullstack-app/src/pages/[id].d.ts.map +1 -0
  144. package/templates/fullstack-app/src/pages/[id].js +1 -0
  145. package/templates/fullstack-app/src/pages/_app.d.ts +6 -0
  146. package/templates/fullstack-app/src/pages/_app.d.ts.map +1 -0
  147. package/templates/fullstack-app/src/pages/_app.js +6 -0
  148. package/templates/fullstack-app/src/pages/_document.d.ts +7 -0
  149. package/templates/fullstack-app/src/pages/_document.d.ts.map +1 -0
  150. package/templates/fullstack-app/src/pages/_document.js +4 -0
  151. package/templates/fullstack-app/src/pages/_error.d.ts +4 -0
  152. package/templates/fullstack-app/src/pages/_error.d.ts.map +1 -0
  153. package/templates/fullstack-app/src/pages/_error.js +8 -0
  154. package/templates/fullstack-app/src/pages/about/index.d.ts +5 -0
  155. package/templates/fullstack-app/src/pages/about/index.d.ts.map +1 -0
  156. package/templates/fullstack-app/src/pages/about/index.js +6 -0
  157. package/templates/fullstack-app/src/pages/about.d.ts +10 -0
  158. package/templates/fullstack-app/src/pages/about.d.ts.map +1 -0
  159. package/templates/fullstack-app/src/pages/about.js +21 -0
  160. package/templates/fullstack-app/src/pages/api/users/[id].d.ts +6 -0
  161. package/templates/fullstack-app/src/pages/api/users/[id].d.ts.map +1 -0
  162. package/templates/fullstack-app/src/pages/api/users/[id].js +51 -0
  163. package/templates/fullstack-app/src/pages/api/users/index.d.ts +4 -0
  164. package/templates/fullstack-app/src/pages/api/users/index.d.ts.map +1 -0
  165. package/templates/fullstack-app/src/pages/api/users/index.js +33 -0
  166. package/templates/fullstack-app/src/pages/index.d.ts +21 -0
  167. package/templates/fullstack-app/src/pages/index.d.ts.map +1 -0
  168. package/templates/fullstack-app/src/pages/index.js +66 -0
  169. package/templates/fullstack-app/src/pages/users/[id].d.ts +38 -0
  170. package/templates/fullstack-app/src/pages/users/[id].d.ts.map +1 -0
  171. package/templates/fullstack-app/src/pages/users/[id].js +79 -0
  172. package/templates/fullstack-app/src/pages/users.d.ts +14 -0
  173. package/templates/fullstack-app/src/pages/users.d.ts.map +1 -0
  174. package/templates/fullstack-app/src/pages/users.js +14 -0
  175. package/templates/fullstack-app/src/pages/wasm-demo.d.ts +1 -0
  176. package/templates/fullstack-app/src/pages/wasm-demo.d.ts.map +1 -0
  177. package/templates/fullstack-app/src/pages/wasm-demo.js +2 -0
  178. package/templates/fullstack-app/src/router.d.ts +22 -0
  179. package/templates/fullstack-app/src/router.d.ts.map +1 -0
  180. package/templates/fullstack-app/src/router.js +210 -0
  181. package/templates/fullstack-app/tailwind.config.d.ts +3 -0
  182. package/templates/fullstack-app/tailwind.config.d.ts.map +1 -0
  183. package/templates/fullstack-app/vite.config.d.ts +3 -0
  184. package/templates/fullstack-app/vite.config.d.ts.map +1 -0
  185. package/templates/ssr-template/dist/client/assets/main-D-VH3xOb.d.ts +2 -0
  186. package/templates/ssr-template/dist/client/assets/main-D-VH3xOb.d.ts.map +1 -0
  187. package/templates/ssr-template/dist/client.d.ts +85 -0
  188. package/templates/ssr-template/dist/client.d.ts.map +1 -0
  189. package/templates/ssr-template/dist/server.d.ts +2 -0
  190. package/templates/ssr-template/dist/server.d.ts.map +1 -0
  191. package/templates/ssr-template/esbuild.config.d.ts +2 -0
  192. package/templates/ssr-template/esbuild.config.d.ts.map +1 -0
  193. package/templates/ssr-template/jsx-shim.d.ts +2 -0
  194. package/templates/ssr-template/jsx-shim.d.ts.map +1 -0
  195. package/templates/ssr-template/src/App.d.ts +2 -0
  196. package/templates/ssr-template/src/App.d.ts.map +1 -0
  197. package/templates/ssr-template/src/App.js +625 -0
  198. package/templates/ssr-template/src/App.tsx +43 -18
  199. package/templates/ssr-template/src/client.d.ts +2 -0
  200. package/templates/ssr-template/src/client.d.ts.map +1 -0
  201. package/templates/ssr-template/src/client.js +3 -0
  202. package/templates/ssr-template/src/server.d.ts +2 -0
  203. package/templates/ssr-template/src/server.d.ts.map +1 -0
  204. package/templates/ssr-template/src/server.js +29 -0
  205. package/templates/ssr-template/vite.config.d.ts +3 -0
  206. package/templates/ssr-template/vite.config.d.ts.map +1 -0
  207. package/templates/ssr-template/vite.config.js +30 -0
  208. package/templates/wasm/build-wasm.d.ts +2 -0
  209. package/templates/wasm/build-wasm.d.ts.map +1 -0
  210. package/templates/wasm/dist/assets/index-BNqTDBdE.d.ts +30 -0
  211. package/templates/wasm/dist/assets/index-BNqTDBdE.d.ts.map +1 -0
  212. package/templates/wasm/dist/wasm_exec.d.ts +1 -0
  213. package/templates/wasm/dist/wasm_exec.d.ts.map +1 -0
  214. package/templates/wasm/esbuild.config.d.ts +2 -0
  215. package/templates/wasm/esbuild.config.d.ts.map +1 -0
  216. package/templates/wasm/go/wasm_exec.d.ts +1 -0
  217. package/templates/wasm/go/wasm_exec.d.ts.map +1 -0
  218. package/templates/wasm/jsx-shim.d.ts +5 -0
  219. package/templates/wasm/jsx-shim.d.ts.map +1 -0
  220. package/templates/wasm/public/wasm_exec.d.ts +1 -0
  221. package/templates/wasm/public/wasm_exec.d.ts.map +1 -0
  222. package/templates/wasm/src/App.d.ts +2 -0
  223. package/templates/wasm/src/App.d.ts.map +1 -0
  224. package/templates/wasm/src/App.js +381 -0
  225. package/templates/wasm/src/client.d.ts +2 -0
  226. package/templates/wasm/src/client.d.ts.map +1 -0
  227. package/templates/wasm/src/client.js +210 -0
  228. package/templates/wasm/src/index.d.ts +2 -0
  229. package/templates/wasm/src/index.d.ts.map +1 -0
  230. package/templates/wasm/src/index.js +20 -0
  231. package/templates/wasm/src/server.d.ts +2 -0
  232. package/templates/wasm/src/server.d.ts.map +1 -0
  233. package/templates/wasm/src/server.js +131 -0
  234. package/templates/wasm/vite.config.d.ts +3 -0
  235. package/templates/wasm/vite.config.d.ts.map +1 -0
  236. package/templates/wasm/vite.config.js +36 -0
  237. package/templates/wasm/wasm-loader.d.ts +6 -0
  238. package/templates/wasm/wasm-loader.d.ts.map +1 -0
  239. package/dist/renderer-BL3gq8cW.cjs +0 -2
  240. package/dist/renderer-BL3gq8cW.cjs.map +0 -1
  241. package/dist/renderer-Dyy-o05F.js +0 -52
  242. package/dist/renderer-Dyy-o05F.js.map +0 -1
  243. package/dist/server-renderer-C1WXH-zV.js.map +0 -1
  244. package/dist/server-renderer-Chs-nmJm.cjs +0 -2
  245. package/dist/server-renderer-Chs-nmJm.cjs.map +0 -1
@@ -0,0 +1,381 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "frontend-hamroun/jsx-runtime";
2
+ import { useState, useEffect } from 'baraqex';
3
+ import { loadGoWasm, callWasmFunction } from 'baraqex';
4
+ export default function App() {
5
+ const [wasmReady, setWasmReady] = useState(false);
6
+ const [wasmError, setWasmError] = useState(null);
7
+ const [result, setResult] = useState(null);
8
+ const [inputA, setInputA] = useState(10);
9
+ const [inputB, setInputB] = useState(20);
10
+ const [fibInput, setFibInput] = useState(10);
11
+ const [primeInput, setPrimeInput] = useState(17);
12
+ const [name, setName] = useState('World');
13
+ useEffect(() => {
14
+ let mounted = true;
15
+ async function loadWasm() {
16
+ try {
17
+ console.log('Loading Go WASM module using baraqex API...');
18
+ // Use baraqex API to load WASM
19
+ await loadGoWasm('/example.wasm', {
20
+ debug: true,
21
+ onLoad: () => {
22
+ console.log('WASM module loaded successfully via baraqex');
23
+ }
24
+ });
25
+ if (mounted) {
26
+ setWasmReady(true);
27
+ setWasmError(null);
28
+ console.log('WASM module ready');
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.error('WASM loading error:', error);
33
+ if (mounted) {
34
+ setWasmError(error instanceof Error ? error.message : 'Unknown WASM loading error');
35
+ }
36
+ }
37
+ }
38
+ loadWasm();
39
+ return () => {
40
+ mounted = false;
41
+ };
42
+ }, []);
43
+ // Use baraqex callWasmFunction API
44
+ const callFunction = (funcName, ...args) => {
45
+ try {
46
+ // Call using baraqex API
47
+ return callWasmFunction(funcName, ...args);
48
+ }
49
+ catch (error) {
50
+ const errorMsg = error instanceof Error ? error.message : 'Function call failed';
51
+ setWasmError(errorMsg);
52
+ return null;
53
+ }
54
+ };
55
+ const handleHello = () => {
56
+ const greeting = callFunction('goHello', name);
57
+ if (greeting !== null) {
58
+ setResult({ type: 'hello', value: greeting, input: name });
59
+ setWasmError(null);
60
+ }
61
+ };
62
+ const handleAddition = () => {
63
+ const sum = callFunction('goAdd', inputA, inputB);
64
+ if (sum !== null) {
65
+ setResult({ type: 'addition', value: sum, inputs: [inputA, inputB] });
66
+ setWasmError(null);
67
+ }
68
+ };
69
+ const handleMultiplication = () => {
70
+ const product = callFunction('goMultiply', inputA, inputB);
71
+ if (product !== null) {
72
+ setResult({ type: 'multiplication', value: product, inputs: [inputA, inputB] });
73
+ setWasmError(null);
74
+ }
75
+ };
76
+ const handleFibonacci = () => {
77
+ if (fibInput > 40) {
78
+ setWasmError('Fibonacci input too large (max 40)');
79
+ return;
80
+ }
81
+ const fibResult = callFunction('goFibonacci', fibInput);
82
+ if (fibResult !== null) {
83
+ setResult({ type: 'fibonacci', value: fibResult, input: fibInput });
84
+ setWasmError(null);
85
+ }
86
+ };
87
+ const handlePrimeCheck = () => {
88
+ const isPrime = callFunction('goIsPrime', primeInput);
89
+ if (isPrime !== null) {
90
+ setResult({ type: 'prime', value: isPrime, input: primeInput });
91
+ setWasmError(null);
92
+ }
93
+ };
94
+ if (!wasmReady && !wasmError) {
95
+ return (_jsxs("div", { className: "app loading", children: [_jsx("div", { className: "spinner" }), _jsx("h2", { children: "Loading Go WASM Module..." }), _jsx("p", { children: "Initializing WebAssembly runtime..." })] }));
96
+ }
97
+ if (wasmError) {
98
+ return (_jsxs("div", { className: "app error", children: [_jsx("h2", { children: "WASM Error" }), _jsx("p", { children: wasmError }), _jsx("button", { onClick: () => window.location.reload(), children: "Reload Page" }), _jsxs("details", { style: { marginTop: '20px', textAlign: 'left' }, children: [_jsx("summary", { children: "Troubleshooting" }), _jsxs("ul", { children: [_jsxs("li", { children: ["Make sure the WASM file is built: ", _jsx("code", { children: "npm run build:wasm" })] }), _jsxs("li", { children: ["Check if ", _jsx("code", { children: "example.wasm" }), " exists in the public folder"] }), _jsxs("li", { children: ["Verify ", _jsx("code", { children: "wasm_exec.js" }), " is loaded in the HTML"] }), _jsx("li", { children: "Check browser console for additional errors" })] })] })] }));
99
+ }
100
+ return (_jsxs("div", { className: "app", children: [_jsxs("header", { children: [_jsx("h1", { children: "Frontend Hamroun + Go WASM (Baraqex)" }), _jsx("p", { children: "High-performance computing with WebAssembly via Baraqex API" }), _jsxs("div", { className: "status", children: [_jsx("span", { className: "status-indicator ready" }), "WASM Ready via Baraqex"] })] }), _jsxs("main", { children: [_jsxs("section", { className: "demo-grid", children: [_jsxs("div", { className: "demo-card", children: [_jsx("h3", { children: "\uD83C\uDF0D Hello Function" }), _jsxs("div", { className: "input-group", children: [_jsx("input", { type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Enter your name" }), _jsx("button", { onClick: handleHello, children: "Say Hello" })] }), _jsxs("small", { children: ["callWasmFunction('goHello', '", name, "')"] })] }), _jsxs("div", { className: "demo-card", children: [_jsx("h3", { children: "\uD83E\uDDEE Math Operations" }), _jsxs("div", { className: "input-group", children: [_jsx("input", { type: "number", value: inputA, onChange: (e) => setInputA(Number(e.target.value)), placeholder: "First number" }), _jsx("input", { type: "number", value: inputB, onChange: (e) => setInputB(Number(e.target.value)), placeholder: "Second number" })] }), _jsxs("div", { className: "button-group", children: [_jsx("button", { onClick: handleAddition, children: "Add" }), _jsx("button", { onClick: handleMultiplication, children: "Multiply" })] }), _jsxs("small", { children: ["callWasmFunction('goAdd', ", inputA, ", ", inputB, ")"] })] }), _jsxs("div", { className: "demo-card", children: [_jsx("h3", { children: "\uD83D\uDD22 Fibonacci Sequence" }), _jsxs("div", { className: "input-group", children: [_jsx("input", { type: "number", value: fibInput, onChange: (e) => setFibInput(Number(e.target.value)), placeholder: "Fibonacci number", min: "0", max: "40" }), _jsx("button", { onClick: handleFibonacci, children: "Calculate" })] }), _jsx("small", { children: "Maximum value: 40" })] }), _jsxs("div", { className: "demo-card", children: [_jsx("h3", { children: "\uD83D\uDD0D Prime Number Check" }), _jsxs("div", { className: "input-group", children: [_jsx("input", { type: "number", value: primeInput, onChange: (e) => setPrimeInput(Number(e.target.value)), placeholder: "Number to check", min: "1" }), _jsx("button", { onClick: handlePrimeCheck, children: "Check Prime" })] })] })] }), result && (_jsxs("section", { className: "results", children: [_jsx("h2", { children: "\uD83D\uDCCA Baraqex WASM Result" }), _jsxs("div", { className: "result-card", children: [result.type === 'hello' && (_jsxs("p", { children: [_jsx("strong", { children: "Greeting:" }), " ", _jsx("span", { className: "result-value", children: result.value })] })), result.type === 'addition' && (_jsxs("p", { children: [_jsx("strong", { children: "Addition:" }), " ", result.inputs[0], " + ", result.inputs[1], " = ", _jsx("span", { className: "result-value", children: result.value })] })), result.type === 'multiplication' && (_jsxs("p", { children: [_jsx("strong", { children: "Multiplication:" }), " ", result.inputs[0], " \u00D7 ", result.inputs[1], " = ", _jsx("span", { className: "result-value", children: result.value })] })), result.type === 'fibonacci' && (_jsxs("p", { children: [_jsx("strong", { children: "Fibonacci:" }), " F(", result.input, ") = ", _jsx("span", { className: "result-value", children: result.value })] })), result.type === 'prime' && (_jsxs("p", { children: [_jsx("strong", { children: "Prime Check:" }), " ", result.input, " is ", _jsx("span", { className: "result-value", children: result.value ? 'prime' : 'not prime' })] }))] })] })), _jsxs("section", { className: "info-section", children: [_jsx("h2", { children: "\u26A1 Baraqex WASM Benefits" }), _jsxs("div", { className: "benefits-grid", children: [_jsxs("div", { className: "benefit", children: [_jsx("h4", { children: "\uD83D\uDE80 Simple API" }), _jsx("p", { children: "Easy-to-use loadGoWasm() and callWasmFunction() API" })] }), _jsxs("div", { className: "benefit", children: [_jsx("h4", { children: "\uD83D\uDD04 Cross-Platform" }), _jsx("p", { children: "Works in browser and Node.js with same API" })] }), _jsxs("div", { className: "benefit", children: [_jsx("h4", { children: "\uD83D\uDEE0\uFE0F Go Integration" }), _jsx("p", { children: "Seamless Go + JavaScript interoperability" })] }), _jsxs("div", { className: "benefit", children: [_jsx("h4", { children: "\uD83D\uDCCA Debug Support" }), _jsx("p", { children: "Built-in debugging and function discovery" })] })] })] })] }), _jsx("style", { children: `
101
+ .app {
102
+ max-width: 1200px;
103
+ margin: 0 auto;
104
+ padding: 20px;
105
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
106
+ line-height: 1.6;
107
+ }
108
+
109
+ .app.loading, .app.error {
110
+ text-align: center;
111
+ padding: 60px 20px;
112
+ }
113
+
114
+ .spinner {
115
+ width: 50px;
116
+ height: 50px;
117
+ border: 4px solid #f3f3f3;
118
+ border-top: 4px solid #007acc;
119
+ border-radius: 50%;
120
+ animation: spin 1s linear infinite;
121
+ margin: 0 auto 20px;
122
+ }
123
+
124
+ @keyframes spin {
125
+ 0% { transform: rotate(0deg); }
126
+ 100% { transform: rotate(360deg); }
127
+ }
128
+
129
+ header {
130
+ text-align: center;
131
+ margin-bottom: 40px;
132
+ padding: 30px;
133
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
134
+ color: white;
135
+ border-radius: 16px;
136
+ position: relative;
137
+ }
138
+
139
+ header h1 {
140
+ margin: 0 0 10px 0;
141
+ font-size: 2.5rem;
142
+ font-weight: 700;
143
+ }
144
+
145
+ header p {
146
+ margin: 0 0 20px 0;
147
+ opacity: 0.9;
148
+ font-size: 1.1rem;
149
+ }
150
+
151
+ .status {
152
+ display: inline-flex;
153
+ align-items: center;
154
+ gap: 8px;
155
+ background: rgba(255, 255, 255, 0.2);
156
+ padding: 8px 16px;
157
+ border-radius: 20px;
158
+ font-size: 0.9rem;
159
+ }
160
+
161
+ .status-indicator {
162
+ width: 8px;
163
+ height: 8px;
164
+ border-radius: 50%;
165
+ background: #4ade80;
166
+ animation: pulse 2s infinite;
167
+ }
168
+
169
+ @keyframes pulse {
170
+ 0%, 100% { opacity: 1; }
171
+ 50% { opacity: 0.5; }
172
+ }
173
+
174
+ .demo-grid {
175
+ display: grid;
176
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
177
+ gap: 20px;
178
+ margin-bottom: 30px;
179
+ }
180
+
181
+ .demo-card {
182
+ background: white;
183
+ padding: 24px;
184
+ border-radius: 12px;
185
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
186
+ border: 1px solid #e5e7eb;
187
+ transition: transform 0.2s, box-shadow 0.2s;
188
+ }
189
+
190
+ .demo-card:hover {
191
+ transform: translateY(-2px);
192
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
193
+ }
194
+
195
+ .demo-card h3 {
196
+ margin-top: 0;
197
+ margin-bottom: 16px;
198
+ color: #374151;
199
+ font-size: 1.2rem;
200
+ }
201
+
202
+ .input-group {
203
+ display: flex;
204
+ gap: 8px;
205
+ margin-bottom: 12px;
206
+ flex-wrap: wrap;
207
+ }
208
+
209
+ .button-group {
210
+ display: flex;
211
+ gap: 8px;
212
+ flex-wrap: wrap;
213
+ }
214
+
215
+ input {
216
+ flex: 1;
217
+ min-width: 120px;
218
+ padding: 10px 12px;
219
+ border: 2px solid #e5e7eb;
220
+ border-radius: 8px;
221
+ font-size: 14px;
222
+ transition: border-color 0.2s;
223
+ }
224
+
225
+ input:focus {
226
+ outline: none;
227
+ border-color: #007acc;
228
+ }
229
+
230
+ button {
231
+ background: #007acc;
232
+ color: white;
233
+ border: none;
234
+ padding: 10px 16px;
235
+ border-radius: 8px;
236
+ cursor: pointer;
237
+ font-size: 14px;
238
+ font-weight: 600;
239
+ transition: all 0.2s;
240
+ white-space: nowrap;
241
+ }
242
+
243
+ button:hover {
244
+ background: #0056a3;
245
+ transform: translateY(-1px);
246
+ }
247
+
248
+ button:active {
249
+ transform: translateY(0);
250
+ }
251
+
252
+ small {
253
+ color: #6b7280;
254
+ font-size: 0.8rem;
255
+ }
256
+
257
+ .results {
258
+ background: #f0f9ff;
259
+ padding: 24px;
260
+ border-radius: 12px;
261
+ border: 2px solid #bae6fd;
262
+ margin: 30px 0;
263
+ }
264
+
265
+ .results h2 {
266
+ margin-top: 0;
267
+ color: #0369a1;
268
+ }
269
+
270
+ .result-card {
271
+ background: white;
272
+ padding: 16px;
273
+ border-radius: 8px;
274
+ border: 1px solid #bae6fd;
275
+ }
276
+
277
+ .result-value {
278
+ font-weight: bold;
279
+ color: #007acc;
280
+ background: #e0f2fe;
281
+ padding: 2px 6px;
282
+ border-radius: 4px;
283
+ }
284
+
285
+ .info-section {
286
+ margin-top: 40px;
287
+ }
288
+
289
+ .info-section h2 {
290
+ text-align: center;
291
+ margin-bottom: 30px;
292
+ color: #374151;
293
+ }
294
+
295
+ .benefits-grid {
296
+ display: grid;
297
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
298
+ gap: 20px;
299
+ }
300
+
301
+ .benefit {
302
+ background: #f9fafb;
303
+ padding: 20px;
304
+ border-radius: 12px;
305
+ border: 1px solid #e5e7eb;
306
+ text-align: center;
307
+ }
308
+
309
+ .benefit h4 {
310
+ margin: 0 0 8px 0;
311
+ color: #374151;
312
+ font-size: 1.1rem;
313
+ }
314
+
315
+ .benefit p {
316
+ margin: 0;
317
+ color: #6b7280;
318
+ font-size: 0.9rem;
319
+ }
320
+
321
+ .error {
322
+ color: #dc2626;
323
+ }
324
+
325
+ .error button {
326
+ background: #dc2626;
327
+ margin-top: 20px;
328
+ }
329
+
330
+ .error button:hover {
331
+ background: #b91c1c;
332
+ }
333
+
334
+ details {
335
+ background: #fef2f2;
336
+ padding: 16px;
337
+ border-radius: 8px;
338
+ border: 1px solid #fecaca;
339
+ }
340
+
341
+ summary {
342
+ cursor: pointer;
343
+ font-weight: 600;
344
+ margin-bottom: 8px;
345
+ }
346
+
347
+ code {
348
+ background: #f3f4f6;
349
+ padding: 2px 4px;
350
+ border-radius: 4px;
351
+ font-family: monospace;
352
+ font-size: 0.9em;
353
+ }
354
+
355
+ @media (max-width: 768px) {
356
+ .app {
357
+ padding: 10px;
358
+ }
359
+
360
+ header {
361
+ padding: 20px;
362
+ }
363
+
364
+ header h1 {
365
+ font-size: 2rem;
366
+ }
367
+
368
+ .demo-grid {
369
+ grid-template-columns: 1fr;
370
+ }
371
+
372
+ .input-group {
373
+ flex-direction: column;
374
+ }
375
+
376
+ input {
377
+ min-width: auto;
378
+ }
379
+ }
380
+ ` })] }));
381
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["client.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,210 @@
1
+ import { jsx, render } from 'frontend-hamroun';
2
+ import { loadGoWasm } from '../wasm-loader.js';
3
+ // WASM Demo Component
4
+ function WasmDemo() {
5
+ const [wasmReady, setWasmReady] = useState(false);
6
+ const [result, setResult] = useState('');
7
+ const [input1, setInput1] = useState('5');
8
+ const [input2, setInput2] = useState('3');
9
+ const [fibInput, setFibInput] = useState('10');
10
+ useEffect(() => {
11
+ loadWasm();
12
+ }, []);
13
+ const loadWasm = async () => {
14
+ try {
15
+ await loadGoWasm('/example.wasm');
16
+ setWasmReady(true);
17
+ setResult('✅ Go WASM module loaded successfully!');
18
+ }
19
+ catch (error) {
20
+ setResult(`❌ Failed to load WASM: ${error.message}`);
21
+ }
22
+ };
23
+ const testAdd = () => {
24
+ if (!wasmReady)
25
+ return;
26
+ try {
27
+ const num1 = parseFloat(input1);
28
+ const num2 = parseFloat(input2);
29
+ const result = window.add(num1, num2);
30
+ setResult(`Add result: ${num1} + ${num2} = ${result}`);
31
+ }
32
+ catch (error) {
33
+ setResult(`Error: ${error.message}`);
34
+ }
35
+ };
36
+ const testFibonacci = () => {
37
+ if (!wasmReady)
38
+ return;
39
+ try {
40
+ const n = parseInt(fibInput);
41
+ const result = window.fibonacci(n);
42
+ setResult(`Fibonacci(${n}) = ${result}`);
43
+ }
44
+ catch (error) {
45
+ setResult(`Error: ${error.message}`);
46
+ }
47
+ };
48
+ const testProcessArray = () => {
49
+ if (!wasmReady)
50
+ return;
51
+ try {
52
+ const testArray = [1, 2, 3, 4, 5];
53
+ const result = window.processArray(testArray);
54
+ const resultArray = Array.from(result);
55
+ setResult(`Process array [${testArray.join(', ')}] = [${resultArray.join(', ')}]`);
56
+ }
57
+ catch (error) {
58
+ setResult(`Error: ${error.message}`);
59
+ }
60
+ };
61
+ const testFormatMessage = () => {
62
+ if (!wasmReady)
63
+ return;
64
+ try {
65
+ const message = 'Hello from JavaScript!';
66
+ const result = window.formatMessage(message);
67
+ setResult(`Formatted: ${result}`);
68
+ }
69
+ catch (error) {
70
+ setResult(`Error: ${error.message}`);
71
+ }
72
+ };
73
+ const testPerformance = () => {
74
+ if (!wasmReady)
75
+ return;
76
+ try {
77
+ const iterations = 100000;
78
+ const startTime = performance.now();
79
+ const result = window.performanceBenchmark(iterations);
80
+ const endTime = performance.now();
81
+ setResult(`Performance test: ${result.message}\n` +
82
+ `Result: ${result.result}\n` +
83
+ `Time: ${(endTime - startTime).toFixed(2)}ms`);
84
+ }
85
+ catch (error) {
86
+ setResult(`Error: ${error.message}`);
87
+ }
88
+ };
89
+ const testTypeDemo = () => {
90
+ if (!wasmReady)
91
+ return;
92
+ try {
93
+ const result = window.typeDemo();
94
+ setResult(`Type demo results:\n` +
95
+ `String: ${result.string}\n` +
96
+ `Number: ${result.number}\n` +
97
+ `Boolean: ${result.boolean}\n` +
98
+ `Array: [${Array.from(result.array).join(', ')}]`);
99
+ }
100
+ catch (error) {
101
+ setResult(`Error: ${error.message}`);
102
+ }
103
+ };
104
+ return jsx('div', {
105
+ className: 'wasm-demo',
106
+ children: [
107
+ jsx('h1', { children: '🚀 Frontend Hamroun + Go WASM Demo' }),
108
+ jsx('div', {
109
+ className: 'status',
110
+ children: jsx('p', {
111
+ className: wasmReady ? 'ready' : 'loading',
112
+ children: wasmReady ? '✅ WASM Ready' : '⏳ Loading WASM...'
113
+ })
114
+ }),
115
+ jsx('div', {
116
+ className: 'controls',
117
+ children: [
118
+ jsx('h2', { children: '🧮 Arithmetic Operations' }),
119
+ jsx('div', {
120
+ className: 'input-group',
121
+ children: [
122
+ jsx('input', {
123
+ type: 'number',
124
+ value: input1,
125
+ onChange: (e) => setInput1(e.target.value),
126
+ placeholder: 'First number'
127
+ }),
128
+ jsx('span', { children: ' + ' }),
129
+ jsx('input', {
130
+ type: 'number',
131
+ value: input2,
132
+ onChange: (e) => setInput2(e.target.value),
133
+ placeholder: 'Second number'
134
+ }),
135
+ jsx('button', {
136
+ onClick: testAdd,
137
+ disabled: !wasmReady,
138
+ children: 'Calculate'
139
+ })
140
+ ]
141
+ }),
142
+ jsx('h2', { children: '🔢 Fibonacci Sequence' }),
143
+ jsx('div', {
144
+ className: 'input-group',
145
+ children: [
146
+ jsx('input', {
147
+ type: 'number',
148
+ value: fibInput,
149
+ onChange: (e) => setFibInput(e.target.value),
150
+ placeholder: 'Fibonacci number'
151
+ }),
152
+ jsx('button', {
153
+ onClick: testFibonacci,
154
+ disabled: !wasmReady,
155
+ children: 'Calculate Fibonacci'
156
+ })
157
+ ]
158
+ }),
159
+ jsx('h2', { children: '🔧 Advanced Functions' }),
160
+ jsx('div', {
161
+ className: 'button-group',
162
+ children: [
163
+ jsx('button', {
164
+ onClick: testProcessArray,
165
+ disabled: !wasmReady,
166
+ children: 'Process Array'
167
+ }),
168
+ jsx('button', {
169
+ onClick: testFormatMessage,
170
+ disabled: !wasmReady,
171
+ children: 'Format Message'
172
+ }),
173
+ jsx('button', {
174
+ onClick: testPerformance,
175
+ disabled: !wasmReady,
176
+ children: 'Performance Test'
177
+ }),
178
+ jsx('button', {
179
+ onClick: testTypeDemo,
180
+ disabled: !wasmReady,
181
+ children: 'Type Demo'
182
+ })
183
+ ]
184
+ })
185
+ ]
186
+ }),
187
+ jsx('div', {
188
+ className: 'result',
189
+ children: [
190
+ jsx('h3', { children: '📋 Result:' }),
191
+ jsx('pre', { children: result })
192
+ ]
193
+ })
194
+ ]
195
+ });
196
+ }
197
+ // App Component
198
+ function App() {
199
+ return jsx('div', {
200
+ className: 'app',
201
+ children: jsx(WasmDemo, {})
202
+ });
203
+ }
204
+ // Render the app
205
+ const appElement = document.getElementById('app');
206
+ if (appElement) {
207
+ render(jsx(App, {}), appElement);
208
+ }
209
+ // Import statements for hooks
210
+ import { useState, useEffect } from 'frontend-hamroun';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { jsx, render } from 'frontend-hamroun';
2
+ import App from './App.tsx';
3
+ // Simple render without infinite loops
4
+ function startApp() {
5
+ const appElement = jsx(App, {});
6
+ const rootElement = document.getElementById('app');
7
+ if (rootElement) {
8
+ render(appElement, rootElement);
9
+ }
10
+ else {
11
+ console.error('Root element not found');
12
+ }
13
+ }
14
+ // Start when DOM is ready
15
+ if (document.readyState === 'loading') {
16
+ document.addEventListener('DOMContentLoaded', startApp);
17
+ }
18
+ else {
19
+ startApp();
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":""}