baraqex 1.0.63 → 1.0.65

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 (98) hide show
  1. package/bin/baraqex.js +1013 -1126
  2. package/dist/api/hello.d.ts +3 -0
  3. package/dist/api/hello.d.ts.map +1 -0
  4. package/dist/api/users/[id].d.ts +5 -0
  5. package/dist/api/users/[id].d.ts.map +1 -0
  6. package/dist/browser.d.ts +40 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +407 -1
  9. package/dist/browser.js.map +4 -4
  10. package/dist/browser.package.json +4 -0
  11. package/dist/forms/index.d.ts +2 -0
  12. package/dist/forms/index.d.ts.map +1 -0
  13. package/dist/forms/types.d.ts +2 -0
  14. package/dist/forms/types.d.ts.map +1 -0
  15. package/dist/frontend/components/WasmLoader.d.ts +2 -0
  16. package/dist/frontend/components/WasmLoader.d.ts.map +1 -0
  17. package/dist/frontend/hooks/useWasm.d.ts +2 -0
  18. package/dist/frontend/hooks/useWasm.d.ts.map +1 -0
  19. package/dist/frontend/index.d.ts +2 -0
  20. package/dist/frontend/index.d.ts.map +1 -0
  21. package/dist/index.d.ts +38 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +678 -317
  24. package/dist/index.js.map +4 -4
  25. package/dist/renderComponent.d.ts +9 -0
  26. package/dist/renderComponent.d.ts.map +1 -0
  27. package/dist/router/index.d.ts +2 -0
  28. package/dist/router/index.d.ts.map +1 -0
  29. package/dist/router/types.d.ts +2 -0
  30. package/dist/router/types.d.ts.map +1 -0
  31. package/dist/server/api-router.d.ts +16 -0
  32. package/dist/server/api-router.d.ts.map +1 -0
  33. package/dist/server/auth.d.ts +25 -0
  34. package/dist/server/auth.d.ts.map +1 -0
  35. package/dist/server/database.d.ts +22 -0
  36. package/dist/server/database.d.ts.map +1 -0
  37. package/dist/server/index.d.ts +116 -0
  38. package/dist/server/index.d.ts.map +1 -0
  39. package/dist/{server.js → server/index.js} +120 -23
  40. package/dist/server/index.js.map +7 -0
  41. package/dist/server/middleware.d.ts +11 -0
  42. package/dist/server/middleware.d.ts.map +1 -0
  43. package/dist/server/package.json +4 -0
  44. package/dist/server/templates.d.ts +31 -0
  45. package/dist/server/templates.d.ts.map +1 -0
  46. package/dist/server/types.d.ts +69 -0
  47. package/dist/server/types.d.ts.map +1 -0
  48. package/dist/server/utils.d.ts +70 -0
  49. package/dist/server/utils.d.ts.map +1 -0
  50. package/dist/server/wasm.d.ts +29 -0
  51. package/dist/server/wasm.d.ts.map +1 -0
  52. package/dist/server-renderer.d.ts +5 -0
  53. package/dist/server-renderer.d.ts.map +1 -0
  54. package/dist/store/index.d.ts +2 -0
  55. package/dist/store/index.d.ts.map +1 -0
  56. package/dist/store/types.d.ts +2 -0
  57. package/dist/store/types.d.ts.map +1 -0
  58. package/dist/wasm.d.ts +51 -0
  59. package/dist/wasm.d.ts.map +1 -0
  60. package/package.json +65 -56
  61. package/templates/basic-app/src/main.tsx +1 -0
  62. package/templates/fullstack-template/.env.example +42 -0
  63. package/templates/fullstack-template/README.md +38 -42
  64. package/templates/fullstack-template/package-lock.json +7932 -0
  65. package/templates/fullstack-template/package.json +58 -6
  66. package/templates/fullstack-template/server.js +28 -9
  67. package/templates/fullstack-template/src/App.tsx +94 -0
  68. package/templates/fullstack-template/src/api/auth/login.ts +75 -0
  69. package/templates/fullstack-template/src/api/auth/me.ts +66 -0
  70. package/templates/fullstack-template/src/api/auth/register.ts +59 -0
  71. package/templates/fullstack-template/src/api/todos/[id].ts +108 -0
  72. package/templates/fullstack-template/src/api/todos/index.ts +79 -0
  73. package/templates/fullstack-template/src/components/Dashboard.tsx +129 -0
  74. package/templates/fullstack-template/src/components/Header.tsx +76 -0
  75. package/templates/fullstack-template/src/contexts/ApiContext.tsx +69 -0
  76. package/templates/fullstack-template/src/contexts/AuthContext.tsx +155 -0
  77. package/templates/fullstack-template/src/server.ts +167 -0
  78. package/templates/fullstack-template/src/styles/App.css +446 -0
  79. package/templates/ssr-template/package-lock.json +38 -60
  80. package/templates/ssr-template/package.json +1 -1
  81. package/templates/ssr-template/src/App.tsx +4 -3
  82. package/templates/ssr-template/src/client.tsx +2 -1
  83. package/templates/wasm/App.tsx +564 -0
  84. package/templates/wasm/client.tsx +220 -0
  85. package/templates/wasm/index.tsx +21 -0
  86. package/templates/wasm/package-lock.json +5347 -5307
  87. package/templates/wasm/package.json +43 -25
  88. package/templates/wasm/public/example.wasm +0 -0
  89. package/templates/wasm/public/wasm_exec.js +1 -12
  90. package/templates/wasm/server.ts +145 -0
  91. package/templates/wasm/vite.config.ts +42 -24
  92. package/README_WASM.md +0 -472
  93. package/dist/server.js.map +0 -7
  94. package/templates/basic-app/src/App.jsx +0 -0
  95. package/templates/basic-app/src/App.tsx +0 -0
  96. package/templates/fullstack-template/src/api/hello.js +0 -17
  97. package/templates/fullstack-template/src/pages/index.js +0 -206
  98. /package/templates/{basic-app/server.js → wasm/go/wasm_exec.js} +0 -0
@@ -0,0 +1,446 @@
1
+ /* Reset and base styles */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ body {
9
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
10
+ line-height: 1.6;
11
+ color: #333;
12
+ background-color: #f8fafc;
13
+ }
14
+
15
+ .app {
16
+ min-height: 100vh;
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+
21
+ /* Header Styles */
22
+ .app-header {
23
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
24
+ color: white;
25
+ padding: 1rem 0;
26
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
27
+ }
28
+
29
+ .header-content {
30
+ max-width: 1200px;
31
+ margin: 0 auto;
32
+ padding: 0 2rem;
33
+ display: flex;
34
+ justify-content: space-between;
35
+ align-items: center;
36
+ flex-wrap: wrap;
37
+ gap: 1rem;
38
+ }
39
+
40
+ .app-title {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 0.5rem;
44
+ font-size: 1.5rem;
45
+ font-weight: 700;
46
+ }
47
+
48
+ .logo {
49
+ font-size: 2rem;
50
+ }
51
+
52
+ .header-nav {
53
+ display: flex;
54
+ gap: 0.5rem;
55
+ }
56
+
57
+ .nav-button {
58
+ background: rgba(255,255,255,0.1);
59
+ border: none;
60
+ color: white;
61
+ padding: 0.5rem 1rem;
62
+ border-radius: 0.5rem;
63
+ cursor: pointer;
64
+ transition: all 0.2s;
65
+ font-size: 0.9rem;
66
+ }
67
+
68
+ .nav-button:hover {
69
+ background: rgba(255,255,255,0.2);
70
+ transform: translateY(-1px);
71
+ }
72
+
73
+ .nav-button.active {
74
+ background: rgba(255,255,255,0.3);
75
+ font-weight: 600;
76
+ }
77
+
78
+ .user-menu {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 1rem;
82
+ }
83
+
84
+ .user-greeting {
85
+ font-size: 0.9rem;
86
+ opacity: 0.9;
87
+ }
88
+
89
+ .logout-button {
90
+ background: rgba(255,255,255,0.1);
91
+ border: 1px solid rgba(255,255,255,0.3);
92
+ color: white;
93
+ padding: 0.5rem 1rem;
94
+ border-radius: 0.5rem;
95
+ cursor: pointer;
96
+ transition: all 0.2s;
97
+ font-size: 0.9rem;
98
+ }
99
+
100
+ .logout-button:hover {
101
+ background: rgba(255,255,255,0.2);
102
+ }
103
+
104
+ /* Main Content */
105
+ .main-content {
106
+ flex: 1;
107
+ max-width: 1200px;
108
+ margin: 0 auto;
109
+ padding: 2rem;
110
+ width: 100%;
111
+ }
112
+
113
+ /* Dashboard Styles */
114
+ .dashboard {
115
+ display: flex;
116
+ flex-direction: column;
117
+ gap: 2rem;
118
+ }
119
+
120
+ .dashboard-header {
121
+ text-align: center;
122
+ margin-bottom: 1rem;
123
+ }
124
+
125
+ .dashboard-header h2 {
126
+ font-size: 2rem;
127
+ color: #2d3748;
128
+ margin-bottom: 0.5rem;
129
+ }
130
+
131
+ .dashboard-subtitle {
132
+ color: #718096;
133
+ font-size: 1.1rem;
134
+ }
135
+
136
+ .stats-grid {
137
+ display: grid;
138
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
139
+ gap: 1.5rem;
140
+ margin-bottom: 2rem;
141
+ }
142
+
143
+ .stat-card {
144
+ background: white;
145
+ padding: 1.5rem;
146
+ border-radius: 1rem;
147
+ box-shadow: 0 4px 6px rgba(0,0,0,0.05);
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 1rem;
151
+ transition: transform 0.2s, box-shadow 0.2s;
152
+ }
153
+
154
+ .stat-card:hover {
155
+ transform: translateY(-2px);
156
+ box-shadow: 0 8px 25px rgba(0,0,0,0.1);
157
+ }
158
+
159
+ .stat-icon {
160
+ font-size: 2.5rem;
161
+ opacity: 0.8;
162
+ }
163
+
164
+ .stat-number {
165
+ font-size: 2rem;
166
+ font-weight: 700;
167
+ color: #2d3748;
168
+ margin-bottom: 0.25rem;
169
+ }
170
+
171
+ .stat-label {
172
+ color: #718096;
173
+ font-size: 0.9rem;
174
+ }
175
+
176
+ /* Login Form */
177
+ .login-container {
178
+ display: flex;
179
+ justify-content: center;
180
+ align-items: center;
181
+ min-height: 60vh;
182
+ }
183
+
184
+ .login-form {
185
+ background: white;
186
+ padding: 2rem;
187
+ border-radius: 1rem;
188
+ box-shadow: 0 10px 25px rgba(0,0,0,0.1);
189
+ width: 100%;
190
+ max-width: 400px;
191
+ }
192
+
193
+ .login-title {
194
+ text-align: center;
195
+ font-size: 1.8rem;
196
+ color: #2d3748;
197
+ margin-bottom: 1.5rem;
198
+ }
199
+
200
+ .form-group {
201
+ margin-bottom: 1rem;
202
+ }
203
+
204
+ .form-label {
205
+ display: block;
206
+ margin-bottom: 0.5rem;
207
+ color: #4a5568;
208
+ font-weight: 500;
209
+ }
210
+
211
+ .form-input {
212
+ width: 100%;
213
+ padding: 0.75rem;
214
+ border: 2px solid #e2e8f0;
215
+ border-radius: 0.5rem;
216
+ font-size: 1rem;
217
+ transition: border-color 0.2s;
218
+ }
219
+
220
+ .form-input:focus {
221
+ outline: none;
222
+ border-color: #667eea;
223
+ }
224
+
225
+ .submit-button {
226
+ width: 100%;
227
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
228
+ color: white;
229
+ border: none;
230
+ padding: 0.75rem;
231
+ border-radius: 0.5rem;
232
+ font-size: 1rem;
233
+ font-weight: 600;
234
+ cursor: pointer;
235
+ transition: transform 0.2s;
236
+ }
237
+
238
+ .submit-button:hover {
239
+ transform: translateY(-1px);
240
+ }
241
+
242
+ .submit-button:disabled {
243
+ opacity: 0.6;
244
+ cursor: not-allowed;
245
+ transform: none;
246
+ }
247
+
248
+ .form-toggle {
249
+ text-align: center;
250
+ margin-top: 1rem;
251
+ color: #718096;
252
+ }
253
+
254
+ .form-toggle button {
255
+ background: none;
256
+ border: none;
257
+ color: #667eea;
258
+ cursor: pointer;
259
+ text-decoration: underline;
260
+ }
261
+
262
+ .error-message {
263
+ background: #fed7d7;
264
+ color: #c53030;
265
+ padding: 0.75rem;
266
+ border-radius: 0.5rem;
267
+ margin-bottom: 1rem;
268
+ text-align: center;
269
+ }
270
+
271
+ /* Loading Spinner */
272
+ .loading-container {
273
+ display: flex;
274
+ flex-direction: column;
275
+ align-items: center;
276
+ justify-content: center;
277
+ padding: 4rem 2rem;
278
+ }
279
+
280
+ .spinner {
281
+ width: 50px;
282
+ height: 50px;
283
+ border: 4px solid #e2e8f0;
284
+ border-top: 4px solid #667eea;
285
+ border-radius: 50%;
286
+ animation: spin 1s linear infinite;
287
+ margin-bottom: 1rem;
288
+ }
289
+
290
+ @keyframes spin {
291
+ 0% { transform: rotate(0deg); }
292
+ 100% { transform: rotate(360deg); }
293
+ }
294
+
295
+ /* Todo List Styles */
296
+ .todo-container {
297
+ background: white;
298
+ border-radius: 1rem;
299
+ box-shadow: 0 4px 6px rgba(0,0,0,0.05);
300
+ overflow: hidden;
301
+ }
302
+
303
+ .todo-header {
304
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
305
+ color: white;
306
+ padding: 1.5rem;
307
+ text-align: center;
308
+ }
309
+
310
+ .todo-content {
311
+ padding: 1.5rem;
312
+ }
313
+
314
+ .todo-form {
315
+ display: flex;
316
+ gap: 1rem;
317
+ margin-bottom: 2rem;
318
+ }
319
+
320
+ .todo-input {
321
+ flex: 1;
322
+ padding: 0.75rem;
323
+ border: 2px solid #e2e8f0;
324
+ border-radius: 0.5rem;
325
+ font-size: 1rem;
326
+ }
327
+
328
+ .todo-input:focus {
329
+ outline: none;
330
+ border-color: #667eea;
331
+ }
332
+
333
+ .add-button {
334
+ background: #667eea;
335
+ color: white;
336
+ border: none;
337
+ padding: 0.75rem 1.5rem;
338
+ border-radius: 0.5rem;
339
+ cursor: pointer;
340
+ white-space: nowrap;
341
+ transition: background-color 0.2s;
342
+ }
343
+
344
+ .add-button:hover {
345
+ background: #5a67d8;
346
+ }
347
+
348
+ .todo-list {
349
+ display: flex;
350
+ flex-direction: column;
351
+ gap: 0.75rem;
352
+ }
353
+
354
+ .todo-item {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 1rem;
358
+ padding: 1rem;
359
+ background: #f7fafc;
360
+ border-radius: 0.5rem;
361
+ transition: background-color 0.2s;
362
+ }
363
+
364
+ .todo-item:hover {
365
+ background: #edf2f7;
366
+ }
367
+
368
+ .todo-checkbox {
369
+ width: 1.25rem;
370
+ height: 1.25rem;
371
+ cursor: pointer;
372
+ }
373
+
374
+ .todo-text {
375
+ flex: 1;
376
+ font-size: 1rem;
377
+ }
378
+
379
+ .todo-text.completed {
380
+ text-decoration: line-through;
381
+ opacity: 0.6;
382
+ }
383
+
384
+ .delete-button {
385
+ background: #e53e3e;
386
+ color: white;
387
+ border: none;
388
+ padding: 0.5rem 1rem;
389
+ border-radius: 0.25rem;
390
+ cursor: pointer;
391
+ font-size: 0.9rem;
392
+ transition: background-color 0.2s;
393
+ }
394
+
395
+ .delete-button:hover {
396
+ background: #c53030;
397
+ }
398
+
399
+ /* Footer */
400
+ .app-footer {
401
+ background: #2d3748;
402
+ color: white;
403
+ text-align: center;
404
+ padding: 1rem;
405
+ margin-top: auto;
406
+ }
407
+
408
+ /* Responsive Design */
409
+ @media (max-width: 768px) {
410
+ .header-content {
411
+ flex-direction: column;
412
+ text-align: center;
413
+ }
414
+
415
+ .header-nav {
416
+ order: 3;
417
+ width: 100%;
418
+ justify-content: center;
419
+ }
420
+
421
+ .main-content {
422
+ padding: 1rem;
423
+ }
424
+
425
+ .stats-grid {
426
+ grid-template-columns: 1fr;
427
+ }
428
+
429
+ .todo-form {
430
+ flex-direction: column;
431
+ }
432
+ }
433
+
434
+ @media (max-width: 480px) {
435
+ .stat-card {
436
+ padding: 1rem;
437
+ }
438
+
439
+ .stat-icon {
440
+ font-size: 2rem;
441
+ }
442
+
443
+ .stat-number {
444
+ font-size: 1.5rem;
445
+ }
446
+ }
@@ -8,7 +8,7 @@
8
8
  "name": "ssr-template",
9
9
  "version": "1.0.0",
10
10
  "dependencies": {
11
- "baraqex": "file:../..",
11
+ "baraqex": "^1.0.64",
12
12
  "express": "^4.18.0",
13
13
  "frontend-hamroun": "^1.2.35"
14
14
  },
@@ -19,63 +19,6 @@
19
19
  "rimraf": "^5.0.0"
20
20
  }
21
21
  },
22
- "../..": {
23
- "version": "1.0.44",
24
- "license": "MIT",
25
- "dependencies": {
26
- "frontend-hamroun": "^1.2.35"
27
- },
28
- "bin": {
29
- "baraqex": "bin/baraqex.js"
30
- },
31
- "devDependencies": {
32
- "@types/bcryptjs": "^2.4.6",
33
- "@types/cors": "^2.8.18",
34
- "@types/express": "^5.0.2",
35
- "@types/node": "^20.0.0",
36
- "@types/pg": "^8.15.4",
37
- "esbuild": "^0.19.0",
38
- "jest": "^29.0.0",
39
- "rimraf": "^5.0.0",
40
- "typescript": "^5.0.0"
41
- },
42
- "optionalDependencies": {
43
- "bcryptjs": "^2.4.3",
44
- "cors": "^2.8.5",
45
- "express": "^4.18.0",
46
- "jsonwebtoken": "^9.0.0",
47
- "mongodb": "^6.0.0",
48
- "mysql2": "^3.6.0",
49
- "pg": "^8.11.0"
50
- },
51
- "peerDependencies": {
52
- "cors": "^2.8.5",
53
- "express": "^4.18.0"
54
- },
55
- "peerDependenciesMeta": {
56
- "bcryptjs": {
57
- "optional": true
58
- },
59
- "cors": {
60
- "optional": true
61
- },
62
- "express": {
63
- "optional": true
64
- },
65
- "jsonwebtoken": {
66
- "optional": true
67
- },
68
- "mongodb": {
69
- "optional": true
70
- },
71
- "mysql2": {
72
- "optional": true
73
- },
74
- "pg": {
75
- "optional": true
76
- }
77
- }
78
- },
79
22
  "node_modules/@babel/runtime": {
80
23
  "version": "7.27.6",
81
24
  "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
@@ -877,8 +820,43 @@
877
820
  "license": "MIT"
878
821
  },
879
822
  "node_modules/baraqex": {
880
- "resolved": "../..",
881
- "link": true
823
+ "version": "1.0.64",
824
+ "resolved": "https://registry.npmjs.org/baraqex/-/baraqex-1.0.64.tgz",
825
+ "integrity": "sha512-36lcAME0NUUKltHV69Rt/tk2OXWvtRhjIHaAd/MCLd6pw69sGDGxKFF5H8hyRUs9lq0kvUw9sD1rSFHw2YfeRQ==",
826
+ "license": "MIT",
827
+ "dependencies": {
828
+ "frontend-hamroun": "^1.2.35"
829
+ },
830
+ "bin": {
831
+ "baraqex": "bin/baraqex.js"
832
+ },
833
+ "peerDependencies": {
834
+ "cors": ">=2.8.0",
835
+ "express": ">=4.18.0"
836
+ },
837
+ "peerDependenciesMeta": {
838
+ "bcryptjs": {
839
+ "optional": true
840
+ },
841
+ "cors": {
842
+ "optional": true
843
+ },
844
+ "express": {
845
+ "optional": true
846
+ },
847
+ "jsonwebtoken": {
848
+ "optional": true
849
+ },
850
+ "mongodb": {
851
+ "optional": true
852
+ },
853
+ "mysql2": {
854
+ "optional": true
855
+ },
856
+ "pg": {
857
+ "optional": true
858
+ }
859
+ }
882
860
  },
883
861
  "node_modules/base64-js": {
884
862
  "version": "1.5.1",
@@ -16,7 +16,7 @@
16
16
  "clean": "rimraf dist"
17
17
  },
18
18
  "dependencies": {
19
- "baraqex": "file:../..",
19
+ "baraqex": "^1.0.64",
20
20
  "express": "^4.18.0",
21
21
  "frontend-hamroun": "^1.2.35"
22
22
  },
@@ -1,4 +1,5 @@
1
- import { useState, useEffect, useRef, useMemo } from 'baraqex';
1
+ import { useState, useEffect, useRef, useMemo } from 'frontend-hamroun';
2
+ import { jsx } from 'baraqex';
2
3
 
3
4
  // Custom hooks for better code organization
4
5
  function useTimer(initialTime = 0) {
@@ -418,8 +419,7 @@ export function App() {
418
419
  transition: 'all 0.2s ease'
419
420
  }}
420
421
  >
421
- -
422
- </button>
422
+ -</button>
423
423
 
424
424
  <button
425
425
  onClick={reset}
@@ -721,6 +721,7 @@ export function App() {
721
721
  })
722
722
  </button>
723
723
  ))}
724
+
724
725
  </div>
725
726
 
726
727
  {/* Todo Items */}
@@ -1,4 +1,5 @@
1
- import { hydrate, jsx, render } from 'baraqex';
1
+ import { hydrate, render } from 'frontend-hamroun';
2
+ import { jsx } from 'baraqex';
2
3
  import { App } from './App.js';
3
4
 
4
5
  await hydrate(jsx(App, {}), document.getElementById('root')!);