baraqex 1.0.74 → 2.0.0

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 (185) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +272 -472
  3. package/bin/baraqex.js +150 -12
  4. package/dist/browser.d.ts +1 -1
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +2319 -205
  7. package/dist/browser.js.map +4 -4
  8. package/dist/core/batch.d.ts +10 -0
  9. package/dist/core/batch.d.ts.map +1 -0
  10. package/dist/core/component.d.ts +69 -0
  11. package/dist/core/component.d.ts.map +1 -0
  12. package/dist/core/context.d.ts +22 -0
  13. package/dist/core/context.d.ts.map +1 -0
  14. package/dist/core/errors.d.ts +125 -0
  15. package/dist/core/errors.d.ts.map +1 -0
  16. package/dist/core/event-bus.d.ts +29 -0
  17. package/dist/core/event-bus.d.ts.map +1 -0
  18. package/dist/core/forms.d.ts +128 -0
  19. package/dist/core/forms.d.ts.map +1 -0
  20. package/dist/core/hooks.d.ts +84 -0
  21. package/dist/core/hooks.d.ts.map +1 -0
  22. package/dist/core/index.d.ts +23 -0
  23. package/dist/core/index.d.ts.map +1 -0
  24. package/dist/core/jsx-runtime.d.ts +45 -0
  25. package/dist/core/jsx-runtime.d.ts.map +1 -0
  26. package/dist/core/lifecycle-events.d.ts +71 -0
  27. package/dist/core/lifecycle-events.d.ts.map +1 -0
  28. package/dist/core/renderer.d.ts +39 -0
  29. package/dist/core/renderer.d.ts.map +1 -0
  30. package/dist/core/router.d.ts +108 -0
  31. package/dist/core/router.d.ts.map +1 -0
  32. package/dist/core/server-renderer.d.ts +26 -0
  33. package/dist/core/server-renderer.d.ts.map +1 -0
  34. package/dist/core/store.d.ts +102 -0
  35. package/dist/core/store.d.ts.map +1 -0
  36. package/dist/core/types.d.ts +66 -0
  37. package/dist/core/types.d.ts.map +1 -0
  38. package/dist/core/utils.d.ts +153 -0
  39. package/dist/core/utils.d.ts.map +1 -0
  40. package/dist/core/vdom.d.ts +29 -0
  41. package/dist/core/vdom.d.ts.map +1 -0
  42. package/dist/index.d.ts +39 -35
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2592 -508
  45. package/dist/index.js.map +4 -4
  46. package/dist/server/auth.d.ts +8 -3
  47. package/dist/server/auth.d.ts.map +1 -1
  48. package/dist/server/index.d.ts +2 -2
  49. package/dist/server/index.d.ts.map +1 -1
  50. package/dist/server/index.js +173 -112
  51. package/dist/server/index.js.map +4 -4
  52. package/dist/server/middleware.d.ts +10 -1
  53. package/dist/server/middleware.d.ts.map +1 -1
  54. package/package.json +224 -124
  55. package/templates/basic-app/src/main.jsx +336 -0
  56. package/templates/complete-app/api/hello.js +0 -0
  57. package/templates/complete-app/client.js +58 -0
  58. package/templates/complete-app/lib/frontend-hamroun.js +182 -0
  59. package/templates/complete-app/package.json +18 -0
  60. package/templates/complete-app/pages/about.js +119 -0
  61. package/templates/complete-app/pages/about.jsx +0 -0
  62. package/templates/complete-app/pages/index.js +157 -0
  63. package/templates/complete-app/pages/index.jsx +0 -0
  64. package/templates/complete-app/pages/wasm-demo.js +290 -0
  65. package/templates/complete-app/pages/wasm-demo.jsx +0 -0
  66. package/templates/complete-app/public/client.js +89 -0
  67. package/templates/complete-app/public/index.html +118 -0
  68. package/templates/complete-app/public/styles.css +76 -0
  69. package/templates/complete-app/readme.md +188 -0
  70. package/templates/complete-app/server.js +226 -0
  71. package/templates/complete-app/server.ts +275 -0
  72. package/templates/complete-app/src/App.tsx +59 -0
  73. package/templates/complete-app/src/client.ts +61 -0
  74. package/templates/complete-app/src/client.tsx +18 -0
  75. package/templates/complete-app/src/pages/index.tsx +51 -0
  76. package/templates/complete-app/src/server.ts +218 -0
  77. package/templates/complete-app/tsconfig.json +22 -0
  78. package/templates/complete-app/tsconfig.server.json +19 -0
  79. package/templates/complete-app/vite.config.js +57 -0
  80. package/templates/complete-app/vite.config.ts +30 -0
  81. package/templates/complete-app/wasm/build.bat +0 -0
  82. package/templates/complete-app/wasm/build.sh +0 -0
  83. package/templates/complete-app/wasm/example.go +0 -0
  84. package/templates/fullstack-app/README.md +37 -0
  85. package/templates/fullstack-app/api/hello.js +11 -0
  86. package/templates/fullstack-app/api/hello.ts +18 -0
  87. package/templates/fullstack-app/api/users/[id].ts +73 -0
  88. package/templates/fullstack-app/api/users/index.ts +32 -0
  89. package/templates/fullstack-app/build/main.css +874 -0
  90. package/templates/fullstack-app/build/main.css.map +7 -0
  91. package/templates/fullstack-app/build/main.js +967 -0
  92. package/templates/fullstack-app/build/main.js.map +7 -0
  93. package/templates/fullstack-app/build.ts +210 -0
  94. package/templates/fullstack-app/index.html +36 -0
  95. package/templates/fullstack-app/package.json +35 -0
  96. package/templates/fullstack-app/postcss.config.js +6 -0
  97. package/templates/fullstack-app/process-tailwind.js +45 -0
  98. package/templates/fullstack-app/public/_redirects +1 -0
  99. package/templates/fullstack-app/public/route-handler.js +47 -0
  100. package/templates/fullstack-app/public/spa-fix.html +17 -0
  101. package/templates/fullstack-app/public/styles.css +975 -0
  102. package/templates/fullstack-app/public/tailwind.css +15 -0
  103. package/templates/fullstack-app/server.js +267 -0
  104. package/templates/fullstack-app/server.ts +474 -0
  105. package/templates/fullstack-app/src/README.md +55 -0
  106. package/templates/fullstack-app/src/client.js +87 -0
  107. package/templates/fullstack-app/src/components/ClientHome.tsx +0 -0
  108. package/templates/fullstack-app/src/components/ErrorBoundary.tsx +36 -0
  109. package/templates/fullstack-app/src/components/Layout.tsx +42 -0
  110. package/templates/fullstack-app/src/components/StateDemo.tsx +207 -0
  111. package/templates/fullstack-app/src/components/UserList.tsx +44 -0
  112. package/templates/fullstack-app/src/config.ts +42 -0
  113. package/templates/fullstack-app/src/data/api.ts +206 -0
  114. package/templates/fullstack-app/src/main.tsx +155 -0
  115. package/templates/fullstack-app/src/middleware.ts +28 -0
  116. package/templates/fullstack-app/src/pages/404.tsx +28 -0
  117. package/templates/fullstack-app/src/pages/[id].tsx +0 -0
  118. package/templates/fullstack-app/src/pages/_app.tsx +11 -0
  119. package/templates/fullstack-app/src/pages/_document.tsx +25 -0
  120. package/templates/fullstack-app/src/pages/_error.tsx +45 -0
  121. package/templates/fullstack-app/src/pages/about/index.tsx +67 -0
  122. package/templates/fullstack-app/src/pages/about.tsx +71 -0
  123. package/templates/fullstack-app/src/pages/api/users/[id].ts +73 -0
  124. package/templates/fullstack-app/src/pages/api/users/index.ts +43 -0
  125. package/templates/fullstack-app/src/pages/index.tsx +110 -0
  126. package/templates/fullstack-app/src/pages/users/[id].tsx +153 -0
  127. package/templates/fullstack-app/src/pages/users.tsx +60 -0
  128. package/templates/fullstack-app/src/pages/wasm-demo.tsx +1 -0
  129. package/templates/fullstack-app/src/router.ts +255 -0
  130. package/templates/fullstack-app/src/styles.css +5 -0
  131. package/templates/fullstack-app/tailwind.config.js +11 -0
  132. package/templates/fullstack-app/tsconfig.json +18 -0
  133. package/templates/fullstack-app/vite.config.js +87 -0
  134. package/templates/go/build.bat +36 -0
  135. package/templates/go/build.sh +43 -0
  136. package/templates/go/example.go +205 -0
  137. package/templates/go-wasm-app/README.md +38 -0
  138. package/templates/go-wasm-app/babel.config.js +21 -0
  139. package/templates/go-wasm-app/build-client.js +49 -0
  140. package/templates/go-wasm-app/build-wasm.js +237 -0
  141. package/templates/go-wasm-app/build.config.js +62 -0
  142. package/templates/go-wasm-app/build.js +218 -0
  143. package/templates/go-wasm-app/package.json +32 -0
  144. package/templates/go-wasm-app/public/index.html +128 -0
  145. package/templates/go-wasm-app/public/styles.css +197 -0
  146. package/templates/go-wasm-app/public/wasm/example.wasm +0 -0
  147. package/templates/go-wasm-app/public/wasm/wasm_exec.js +561 -0
  148. package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +39 -0
  149. package/templates/go-wasm-app/server.js +70 -0
  150. package/templates/go-wasm-app/src/App.jsx +38 -0
  151. package/templates/go-wasm-app/src/app.js +173 -0
  152. package/templates/go-wasm-app/src/client.js +57 -0
  153. package/templates/go-wasm-app/src/components/Footer.jsx +13 -0
  154. package/templates/go-wasm-app/src/components/Header.jsx +19 -0
  155. package/templates/go-wasm-app/src/components/WasmDemo.jsx +120 -0
  156. package/templates/go-wasm-app/src/main.jsx +12 -0
  157. package/templates/go-wasm-app/src/wasm/example.go +75 -0
  158. package/templates/go-wasm-app/tsconfig.server.json +18 -0
  159. package/templates/go-wasm-app/vite.config.js +45 -0
  160. package/templates/ssr-template/package.json +16 -10
  161. package/templates/wasm/package.json +43 -43
  162. package/templates/wasm/src/App.tsx +2 -2
  163. package/dist/forms/index.d.ts +0 -2
  164. package/dist/forms/index.d.ts.map +0 -1
  165. package/dist/forms/types.d.ts +0 -2
  166. package/dist/forms/types.d.ts.map +0 -1
  167. package/dist/frontend/components/WasmLoader.d.ts +0 -2
  168. package/dist/frontend/components/WasmLoader.d.ts.map +0 -1
  169. package/dist/frontend/hooks/useWasm.d.ts +0 -2
  170. package/dist/frontend/hooks/useWasm.d.ts.map +0 -1
  171. package/dist/frontend/index.d.ts +0 -2
  172. package/dist/frontend/index.d.ts.map +0 -1
  173. package/dist/router/index.d.ts +0 -2
  174. package/dist/router/index.d.ts.map +0 -1
  175. package/dist/router/types.d.ts +0 -2
  176. package/dist/router/types.d.ts.map +0 -1
  177. package/dist/store/index.d.ts +0 -2
  178. package/dist/store/index.d.ts.map +0 -1
  179. package/dist/store/types.d.ts +0 -2
  180. package/dist/store/types.d.ts.map +0 -1
  181. package/templates/basic-app/package-lock.json +0 -7173
  182. package/templates/fullstack-template/package-lock.json +0 -3558
  183. package/templates/ssr-template/package-lock.json +0 -5380
  184. package/templates/wasm/package-lock.json +0 -5347
  185. package/templates/wasm/public/example.wasm +0 -0
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
6
+ "allowJs": false,
7
+ "skipLibCheck": true,
8
+ "esModuleInterop": true,
9
+ "allowSyntheticDefaultImports": true,
10
+ "strict": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "module": "ESNext",
13
+ "moduleResolution": "Node",
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true,
17
+ "jsx": "preserve",
18
+ "jsxFactory": "createElement",
19
+ "jsxFragmentFactory": "Fragment"
20
+ },
21
+ "include": ["src"]
22
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "target": "ES2020",
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
7
+ "esModuleInterop": true,
8
+ "outDir": "./dist/server",
9
+ "declaration": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "skipLibCheck": true,
13
+ "jsx": "react",
14
+ "jsxFactory": "createElement",
15
+ "jsxFragmentFactory": "Fragment"
16
+ },
17
+ "include": ["server.ts", "src/pages/**/*.tsx"],
18
+ "exclude": ["node_modules", "dist"]
19
+ }
@@ -0,0 +1,57 @@
1
+ import { defineConfig } from 'vite';
2
+ import { resolve } from 'path';
3
+
4
+ export default defineConfig({
5
+ // Configure JSX
6
+ esbuild: {
7
+ jsxFactory: 'createElement',
8
+ jsxFragment: 'Fragment',
9
+ jsxInject: `import { createElement, Fragment } from 'frontend-hamroun'`
10
+ },
11
+
12
+ // Configure build
13
+ build: {
14
+ outDir: 'dist/public',
15
+ emptyOutDir: true,
16
+ rollupOptions: {
17
+ input: {
18
+ client: resolve(__dirname, 'src/client.ts')
19
+ },
20
+ output: [
21
+ {
22
+ // ESM output
23
+ entryFileNames: 'assets/[name].mjs',
24
+ chunkFileNames: 'assets/[name]-[hash].mjs',
25
+ assetFileNames: 'assets/[name]-[hash].[ext]',
26
+ format: 'es',
27
+ },
28
+ {
29
+ // CommonJS output
30
+ entryFileNames: 'assets/[name].js',
31
+ chunkFileNames: 'assets/[name]-[hash].js',
32
+ assetFileNames: 'assets/[name]-[hash].[ext]',
33
+ format: 'cjs',
34
+ }
35
+ ]
36
+ }
37
+ },
38
+
39
+ // Add optimizations for frontend-hamroun
40
+ optimizeDeps: {
41
+ include: ['frontend-hamroun']
42
+ },
43
+
44
+ // Resolve aliases for better imports
45
+ resolve: {
46
+ alias: {
47
+ '@': resolve(__dirname, 'src')
48
+ }
49
+ },
50
+
51
+ // Development server
52
+ server: {
53
+ proxy: {
54
+ '/api': 'http://localhost:3000'
55
+ }
56
+ }
57
+ });
@@ -0,0 +1,30 @@
1
+ import { defineConfig } from 'vite';
2
+ import path from 'path';
3
+
4
+ export default defineConfig({
5
+ resolve: {
6
+ alias: {
7
+ 'frontend-hamroun': path.resolve(__dirname, 'node_modules/frontend-hamroun')
8
+ }
9
+ },
10
+ build: {
11
+ outDir: 'dist',
12
+ ssr: 'src/server.ts',
13
+ rollupOptions: {
14
+ input: {
15
+ client: './src/client.tsx',
16
+ server: './src/server.ts'
17
+ },
18
+ output: {
19
+ entryFileNames: '[name].js',
20
+ chunkFileNames: 'assets/[name]-[hash].js',
21
+ assetFileNames: 'assets/[name]-[hash].[ext]'
22
+ }
23
+ }
24
+ },
25
+ esbuild: {
26
+ jsxFactory: '_jsx',
27
+ jsxFragment: '_Fragment',
28
+ jsxInject: `import { jsx as _jsx, Fragment as _Fragment } from 'frontend-hamroun'`
29
+ }
30
+ });
File without changes
File without changes
File without changes
@@ -0,0 +1,37 @@
1
+ # Frontend Hamroun Fullstack Template
2
+
3
+ A dynamic, customizable fullstack template with automatic routing.
4
+
5
+ ## Getting Started
6
+
7
+ 1. Install dependencies:
8
+ ```
9
+ npm install
10
+ ```
11
+
12
+ 2. Run the development server:
13
+ ```
14
+ npm run dev
15
+ ```
16
+
17
+ 3. Build for production:
18
+ ```
19
+ npm run build
20
+ ```
21
+
22
+ 4. Run in production mode:
23
+ ```
24
+ npm start
25
+ ```
26
+
27
+ ## Customizing Without Touching Core Files
28
+
29
+ This template is designed to be customized without modifying the core server or app files:
30
+
31
+ 1. **Configuration**: Edit `src/config.ts` to change app settings
32
+ 2. **Pages**: Add new pages in `src/pages` - they become routes automatically
33
+ 3. **Components**: Create reusable components in `src/components`
34
+ 4. **API Endpoints**: Add new API endpoints in `src/data/api.ts`
35
+
36
+ ## File Structure
37
+
@@ -0,0 +1,11 @@
1
+ export const get = (req, res) => {
2
+ res.json({
3
+ message: 'Hello from the API!',
4
+ time: new Date().toISOString(),
5
+ features: [
6
+ 'Server-side rendering',
7
+ 'API integration',
8
+ 'No build step required'
9
+ ]
10
+ });
11
+ };
@@ -0,0 +1,18 @@
1
+ import { Request, Response } from 'express';
2
+
3
+ export const get = (req: Request, res: Response) => {
4
+ res.json({
5
+ message: 'Hello from the API!',
6
+ timestamp: new Date().toISOString()
7
+ });
8
+ };
9
+
10
+ export const post = (req: Request, res: Response) => {
11
+ const { name = 'Guest' } = req.body;
12
+
13
+ res.json({
14
+ message: `Hello, ${name}!`,
15
+ timestamp: new Date().toISOString(),
16
+ receivedData: req.body
17
+ });
18
+ };
@@ -0,0 +1,73 @@
1
+ import { Request, Response } from 'express';
2
+
3
+ // Mock user database - same as in index.ts for simplicity
4
+ const users = [
5
+ { id: 1, name: 'User 1', email: 'user1@example.com' },
6
+ { id: 2, name: 'User 2', email: 'user2@example.com' },
7
+ { id: 3, name: 'User 3', email: 'user3@example.com' }
8
+ ];
9
+
10
+ export const get = (req: Request, res: Response) => {
11
+ const userId = parseInt(req.params.id);
12
+
13
+ if (isNaN(userId)) {
14
+ return res.status(400).json({ error: 'Invalid user ID' });
15
+ }
16
+
17
+ const user = users.find(u => u.id === userId);
18
+
19
+ if (!user) {
20
+ return res.status(404).json({ error: 'User not found' });
21
+ }
22
+
23
+ res.json(user);
24
+ };
25
+
26
+ export const put = (req: Request, res: Response) => {
27
+ const userId = parseInt(req.params.id);
28
+
29
+ if (isNaN(userId)) {
30
+ return res.status(400).json({ error: 'Invalid user ID' });
31
+ }
32
+
33
+ const userIndex = users.findIndex(u => u.id === userId);
34
+
35
+ if (userIndex === -1) {
36
+ return res.status(404).json({ error: 'User not found' });
37
+ }
38
+
39
+ const { name, email } = req.body;
40
+
41
+ if (!name && !email) {
42
+ return res.status(400).json({ error: 'Name or email must be provided' });
43
+ }
44
+
45
+ // Update the user
46
+ users[userIndex] = {
47
+ ...users[userIndex],
48
+ ...(name && { name }),
49
+ ...(email && { email })
50
+ };
51
+
52
+ res.json(users[userIndex]);
53
+ };
54
+
55
+ export const delete_ = (req: Request, res: Response) => {
56
+ const userId = parseInt(req.params.id);
57
+
58
+ if (isNaN(userId)) {
59
+ return res.status(400).json({ error: 'Invalid user ID' });
60
+ }
61
+
62
+ const userIndex = users.findIndex(u => u.id === userId);
63
+
64
+ if (userIndex === -1) {
65
+ return res.status(404).json({ error: 'User not found' });
66
+ }
67
+
68
+ // Remove the user
69
+ const deletedUser = users[userIndex];
70
+ users.splice(userIndex, 1);
71
+
72
+ res.json({ success: true, deletedUser });
73
+ };
@@ -0,0 +1,32 @@
1
+ import { Request, Response } from 'express';
2
+
3
+ // Mock user database
4
+ const users = [
5
+ { id: 1, name: 'User 1', email: 'user1@example.com' },
6
+ { id: 2, name: 'User 2', email: 'user2@example.com' },
7
+ { id: 3, name: 'User 3', email: 'user3@example.com' }
8
+ ];
9
+
10
+ export const get = (req: Request, res: Response) => {
11
+ // Return users without sensitive information
12
+ const safeUsers = users.map(({ id, name, email }) => ({ id, name, email }));
13
+ res.json(safeUsers);
14
+ };
15
+
16
+ export const post = (req: Request, res: Response) => {
17
+ const { name, email } = req.body;
18
+
19
+ if (!name || !email) {
20
+ return res.status(400).json({ error: 'Name and email are required' });
21
+ }
22
+
23
+ // In a real app, validate data and save to database
24
+ const newUser = {
25
+ id: users.length + 1,
26
+ name,
27
+ email
28
+ };
29
+
30
+ users.push(newUser);
31
+ res.status(201).json(newUser);
32
+ };