frontend-hamroun 1.2.79 → 1.2.82
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/LICENSE +21 -0
- package/README.md +129 -1513
- package/bin/cli.js +506 -145
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.client.cjs +2 -0
- package/dist/index.client.cjs.map +1 -0
- package/dist/index.client.js +26 -0
- package/dist/index.client.js.map +1 -0
- package/dist/index.js +299 -1
- package/dist/index.js.map +1 -0
- package/dist/jsx-runtime.cjs +2 -0
- package/dist/jsx-runtime.cjs.map +1 -0
- package/dist/jsx-runtime.js +93 -1
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/renderer-Bo9zkUZ_.js +52 -0
- package/dist/renderer-Bo9zkUZ_.js.map +1 -0
- package/dist/renderer-Din1y3YM.cjs +2 -0
- package/dist/renderer-Din1y3YM.cjs.map +1 -0
- package/dist/server-renderer-CqIpQ-od.cjs +2 -0
- package/dist/server-renderer-CqIpQ-od.cjs.map +1 -0
- package/dist/server-renderer-QHt45Ip2.js +255 -0
- package/dist/server-renderer-QHt45Ip2.js.map +1 -0
- package/dist/server-renderer.cjs +2 -0
- package/dist/server-renderer.cjs.map +1 -0
- package/dist/server-renderer.js +5 -1
- package/dist/server-renderer.js.map +1 -0
- package/package.json +77 -120
- package/templates/basic-app/build.js +22 -0
- package/templates/basic-app/dev.js +27 -0
- package/templates/basic-app/esbuild.config.js +28 -0
- package/templates/basic-app/index.html +1 -1
- package/templates/basic-app/package.json +29 -28
- package/templates/basic-app/server.js +24 -0
- package/templates/basic-app/src/App.jsx +16 -0
- package/templates/basic-app/src/App.tsx +26 -0
- package/templates/basic-app/src/client.jsx +5 -0
- package/templates/basic-app/src/client.tsx +11 -0
- package/templates/basic-app/src/components/Counter.jsx +13 -0
- package/templates/basic-app/src/components/Counter.tsx +18 -0
- package/templates/basic-app/src/jsx-shim.js +3 -0
- package/templates/basic-app/src/jsx-shim.ts +11 -0
- package/templates/basic-app/src/main.jsx +98 -0
- package/templates/basic-app/src/main.tsx +0 -1
- package/templates/basic-app/src/server.js +47 -0
- package/templates/basic-app/src/server.ts +52 -0
- package/templates/basic-app/tsconfig.server.json +11 -0
- package/templates/complete-app/lib/frontend-hamroun.js +182 -0
- package/templates/complete-app/package.json +2 -1
- package/templates/complete-app/pages/about.jsx +0 -0
- package/templates/complete-app/pages/index.jsx +0 -0
- package/templates/complete-app/pages/wasm-demo.jsx +0 -0
- package/templates/complete-app/public/client.js +58 -49
- package/templates/complete-app/public/index.html +88 -17
- package/templates/complete-app/public/styles.css +30 -533
- package/templates/complete-app/server.js +31 -222
- package/templates/complete-app/wasm/build.bat +0 -0
- package/templates/complete-app/wasm/build.sh +0 -0
- package/templates/complete-app/wasm/example.go +0 -0
- package/templates/fullstack-app/build/main.js +130 -101
- package/templates/fullstack-app/build/main.js.map +4 -4
- package/templates/fullstack-app/package-lock.json +1773 -566
- package/templates/ssr-template/esbuild.config.js +33 -0
- package/templates/ssr-template/jsx-shim.js +1 -0
- package/templates/ssr-template/package.json +22 -16
- package/templates/ssr-template/src/App.tsx +12 -52
- package/templates/ssr-template/src/client.tsx +3 -17
- package/templates/ssr-template/src/server.ts +21 -204
- package/templates/ssr-template/tsconfig.json +10 -13
- package/templates/ssr-template/tsconfig.server.json +6 -14
- package/templates/wasm/build-wasm.js +228 -0
- package/templates/wasm/esbuild.config.js +63 -0
- package/templates/wasm/go/main.go +256 -0
- package/templates/wasm/go/wasm_exec.js +0 -0
- package/templates/wasm/index.html +97 -0
- package/templates/wasm/jsx-shim.js +9 -0
- package/templates/{go-wasm-app → wasm}/package-lock.json +5307 -3732
- package/templates/wasm/package.json +42 -0
- package/templates/wasm/public/example.wasm +0 -0
- package/templates/wasm/src/App.tsx +564 -0
- package/templates/wasm/src/client.tsx +220 -0
- package/templates/wasm/src/index.tsx +21 -0
- package/templates/wasm/src/server.ts +145 -0
- package/templates/wasm/tsconfig.json +21 -0
- package/templates/wasm/tsconfig.node.json +13 -0
- package/templates/wasm/tsconfig.server.json +23 -0
- package/templates/wasm/vite.config.ts +56 -0
- package/templates/wasm/wasm-loader.js +103 -0
- package/dist/batch/package.json +0 -16
- package/dist/client-router/package.json +0 -16
- package/dist/component/package.json +0 -16
- package/dist/context/package.json +0 -16
- package/dist/event-bus/package.json +0 -16
- package/dist/forms/package.json +0 -16
- package/dist/hooks/package.json +0 -16
- package/dist/hooks-0728361a.cjs +0 -1
- package/dist/hooks-b58f947c.js +0 -133
- package/dist/hooks.js +0 -1
- package/dist/hooks.mjs +0 -13
- package/dist/index.mjs +0 -137
- package/dist/jsx-runtime/package.json +0 -16
- package/dist/jsx-runtime.mjs +0 -64
- package/dist/lifecycle-events/package.json +0 -16
- package/dist/package.json +0 -71
- package/dist/render-component/package.json +0 -16
- package/dist/renderer/package.json +0 -16
- package/dist/renderer.js +0 -1
- package/dist/renderer.mjs +0 -27
- package/dist/router/package.json +0 -16
- package/dist/server/package.json +0 -17
- package/dist/server/src/batch.d.ts +0 -3
- package/dist/server/src/batch.js +0 -23
- package/dist/server/src/batch.js.map +0 -1
- package/dist/server/src/client-router.d.ts +0 -60
- package/dist/server/src/client-router.js +0 -210
- package/dist/server/src/client-router.js.map +0 -1
- package/dist/server/src/component.d.ts +0 -14
- package/dist/server/src/component.js +0 -106
- package/dist/server/src/component.js.map +0 -1
- package/dist/server/src/context.d.ts +0 -13
- package/dist/server/src/context.js +0 -21
- package/dist/server/src/context.js.map +0 -1
- package/dist/server/src/event-bus.d.ts +0 -23
- package/dist/server/src/event-bus.js +0 -75
- package/dist/server/src/event-bus.js.map +0 -1
- package/dist/server/src/forms.d.ts +0 -40
- package/dist/server/src/forms.js +0 -148
- package/dist/server/src/forms.js.map +0 -1
- package/dist/server/src/hooks.d.ts +0 -12
- package/dist/server/src/hooks.js +0 -170
- package/dist/server/src/hooks.js.map +0 -1
- package/dist/server/src/index.client.d.ts +0 -12
- package/dist/server/src/index.client.js +0 -14
- package/dist/server/src/index.client.js.map +0 -1
- package/dist/server/src/index.d.ts +0 -88
- package/dist/server/src/index.js +0 -79
- package/dist/server/src/index.js.map +0 -1
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +0 -1
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +0 -2
- package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +0 -1
- package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +0 -4
- package/dist/server/src/jsx-runtime/jsx-runtime.js +0 -41
- package/dist/server/src/jsx-runtime/jsx-runtime.js.map +0 -1
- package/dist/server/src/jsx-runtime.d.ts +0 -20
- package/dist/server/src/jsx-runtime.js +0 -105
- package/dist/server/src/jsx-runtime.js.map +0 -1
- package/dist/server/src/lifecycle-events.d.ts +0 -108
- package/dist/server/src/lifecycle-events.js +0 -177
- package/dist/server/src/lifecycle-events.js.map +0 -1
- package/dist/server/src/renderComponent.d.ts +0 -13
- package/dist/server/src/renderComponent.js +0 -30
- package/dist/server/src/renderComponent.js.map +0 -1
- package/dist/server/src/renderer.d.ts +0 -2
- package/dist/server/src/renderer.js +0 -31
- package/dist/server/src/renderer.js.map +0 -1
- package/dist/server/src/router.d.ts +0 -55
- package/dist/server/src/router.js +0 -166
- package/dist/server/src/router.js.map +0 -1
- package/dist/server/src/server/api-router.d.ts +0 -15
- package/dist/server/src/server/api-router.js +0 -111
- package/dist/server/src/server/api-router.js.map +0 -1
- package/dist/server/src/server/auth.d.ts +0 -32
- package/dist/server/src/server/auth.js +0 -80
- package/dist/server/src/server/auth.js.map +0 -1
- package/dist/server/src/server/database.d.ts +0 -24
- package/dist/server/src/server/database.js +0 -135
- package/dist/server/src/server/database.js.map +0 -1
- package/dist/server/src/server/index.d.ts +0 -116
- package/dist/server/src/server/index.js +0 -508
- package/dist/server/src/server/index.js.map +0 -1
- package/dist/server/src/server/middleware.d.ts +0 -11
- package/dist/server/src/server/middleware.js +0 -46
- package/dist/server/src/server/middleware.js.map +0 -1
- package/dist/server/src/server/server.d.ts +0 -9
- package/dist/server/src/server/server.js +0 -87
- package/dist/server/src/server/server.js.map +0 -1
- package/dist/server/src/server/templates.d.ts +0 -30
- package/dist/server/src/server/templates.js +0 -208
- package/dist/server/src/server/templates.js.map +0 -1
- package/dist/server/src/server/types.d.ts +0 -38
- package/dist/server/src/server/types.js +0 -4
- package/dist/server/src/server/types.js.map +0 -1
- package/dist/server/src/server/utils.d.ts +0 -70
- package/dist/server/src/server/utils.js +0 -156
- package/dist/server/src/server/utils.js.map +0 -1
- package/dist/server/src/server/wasm.d.ts +0 -9
- package/dist/server/src/server/wasm.js +0 -117
- package/dist/server/src/server/wasm.js.map +0 -1
- package/dist/server/src/server-renderer.d.ts +0 -5
- package/dist/server/src/server-renderer.js +0 -106
- package/dist/server/src/server-renderer.js.map +0 -1
- package/dist/server/src/server-types.d.ts +0 -42
- package/dist/server/src/server-types.js +0 -6
- package/dist/server/src/server-types.js.map +0 -1
- package/dist/server/src/store.d.ts +0 -41
- package/dist/server/src/store.js +0 -99
- package/dist/server/src/store.js.map +0 -1
- package/dist/server/src/types.d.ts +0 -19
- package/dist/server/src/types.js +0 -2
- package/dist/server/src/types.js.map +0 -1
- package/dist/server/src/utils.d.ts +0 -46
- package/dist/server/src/utils.js +0 -144
- package/dist/server/src/utils.js.map +0 -1
- package/dist/server/src/vdom.d.ts +0 -8
- package/dist/server/src/vdom.js +0 -22
- package/dist/server/src/vdom.js.map +0 -1
- package/dist/server/src/wasm.d.ts +0 -36
- package/dist/server/src/wasm.js +0 -159
- package/dist/server/src/wasm.js.map +0 -1
- package/dist/server/tsconfig.server.tsbuildinfo +0 -1
- package/dist/server-renderer/package.json +0 -16
- package/dist/server-renderer.mjs +0 -64
- package/dist/store/package.json +0 -16
- package/dist/types/package.json +0 -16
- package/dist/utils/package.json +0 -16
- package/dist/vdom/package.json +0 -16
- package/dist/wasm/package.json +0 -16
- package/dist/wasm.js +0 -1
- package/dist/wasm.mjs +0 -103
- package/templates/basic-app/docs/rapport_pfe.aux +0 -27
- package/templates/basic-app/docs/rapport_pfe.log +0 -399
- package/templates/basic-app/docs/rapport_pfe.out +0 -10
- package/templates/basic-app/docs/rapport_pfe.pdf +0 -0
- package/templates/basic-app/docs/rapport_pfe.tex +0 -68
- package/templates/basic-app/docs/rapport_pfe.toc +0 -14
- package/templates/complete-app/package-lock.json +0 -2536
- package/templates/go-wasm-app/README.md +0 -38
- package/templates/go-wasm-app/babel.config.js +0 -21
- package/templates/go-wasm-app/build-client.js +0 -49
- package/templates/go-wasm-app/build-wasm.js +0 -237
- package/templates/go-wasm-app/build.config.js +0 -62
- package/templates/go-wasm-app/build.js +0 -218
- package/templates/go-wasm-app/package.json +0 -32
- package/templates/go-wasm-app/public/index.html +0 -128
- package/templates/go-wasm-app/public/styles.css +0 -197
- package/templates/go-wasm-app/public/wasm/example.wasm +0 -0
- package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +0 -39
- package/templates/go-wasm-app/server.js +0 -70
- package/templates/go-wasm-app/src/App.jsx +0 -38
- package/templates/go-wasm-app/src/app.js +0 -173
- package/templates/go-wasm-app/src/client.js +0 -57
- package/templates/go-wasm-app/src/components/Footer.jsx +0 -13
- package/templates/go-wasm-app/src/components/Header.jsx +0 -19
- package/templates/go-wasm-app/src/components/WasmDemo.jsx +0 -120
- package/templates/go-wasm-app/src/main.jsx +0 -12
- package/templates/go-wasm-app/src/wasm/example.go +0 -75
- package/templates/go-wasm-app/tsconfig.server.json +0 -18
- package/templates/go-wasm-app/vite.config.js +0 -45
- package/templates/ssr-template/client.js +0 -58
- package/templates/ssr-template/package-lock.json +0 -2478
- package/templates/ssr-template/public/index.html +0 -47
- package/templates/ssr-template/readme.md +0 -188
- package/templates/ssr-template/server.js +0 -369
- package/templates/ssr-template/server.ts +0 -275
- package/templates/ssr-template/src/client.ts +0 -61
- package/templates/ssr-template/src/pages/index.tsx +0 -51
- package/templates/ssr-template/vite.config.js +0 -57
- /package/{dist/Counter.d.ts → templates/complete-app/api/hello.js} +0 -0
- /package/templates/{go-wasm-app/public/wasm → wasm/public}/wasm_exec.js +0 -0
package/package.json
CHANGED
@@ -1,159 +1,112 @@
|
|
1
1
|
{
|
2
2
|
"name": "frontend-hamroun",
|
3
|
-
"version": "1.2.
|
3
|
+
"version": "1.2.82",
|
4
4
|
"description": "A lightweight full-stack JavaScript framework",
|
5
5
|
"type": "module",
|
6
|
-
"main": "
|
7
|
-
"module": "
|
8
|
-
"types": "
|
9
|
-
"files": [
|
10
|
-
"dist",
|
11
|
-
"README.md",
|
12
|
-
"LICENSE",
|
13
|
-
"bin",
|
14
|
-
"templates"
|
15
|
-
],
|
6
|
+
"main": "dist/index.cjs",
|
7
|
+
"module": "dist/index.js",
|
8
|
+
"types": "dist/index.d.ts",
|
16
9
|
"exports": {
|
17
10
|
".": {
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"default": "./dist/index.js"
|
22
|
-
},
|
23
|
-
"./server": {
|
24
|
-
"types": "./dist/server/index.d.ts",
|
25
|
-
"node": "./dist/server/index.js",
|
26
|
-
"import": "./dist/server/index.mjs",
|
27
|
-
"require": "./dist/server/index.js"
|
11
|
+
"import": "./dist/index.js",
|
12
|
+
"require": "./dist/index.cjs",
|
13
|
+
"types": "./dist/index.d.ts"
|
28
14
|
},
|
29
|
-
"./
|
30
|
-
"
|
31
|
-
"
|
32
|
-
"
|
15
|
+
"./client": {
|
16
|
+
"import": "./dist/index.client.js",
|
17
|
+
"require": "./dist/index.client.cjs",
|
18
|
+
"types": "./dist/index.client.d.ts"
|
33
19
|
},
|
34
|
-
"./server
|
35
|
-
"
|
36
|
-
"
|
37
|
-
"
|
38
|
-
},
|
39
|
-
"./server/middleware": {
|
40
|
-
"types": "./dist/server/middleware.d.ts",
|
41
|
-
"import": "./dist/server/middleware.mjs",
|
42
|
-
"require": "./dist/server/middleware.js"
|
43
|
-
},
|
44
|
-
"./server/api-router": {
|
45
|
-
"types": "./dist/server/api-router.d.ts",
|
46
|
-
"import": "./dist/server/api-router.mjs",
|
47
|
-
"require": "./dist/server/api-router.js"
|
48
|
-
},
|
49
|
-
"./server-types": {
|
50
|
-
"types": "./dist/server-types.d.ts",
|
51
|
-
"import": "./dist/server-types.mjs",
|
52
|
-
"require": "./dist/server-types.js"
|
53
|
-
},
|
54
|
-
"./ssr": {
|
55
|
-
"types": "./dist/server-renderer.d.ts",
|
56
|
-
"import": "./dist/server-renderer.mjs",
|
57
|
-
"require": "./dist/server-renderer.js"
|
20
|
+
"./server": {
|
21
|
+
"import": "./dist/server-renderer.js",
|
22
|
+
"require": "./dist/server-renderer.cjs",
|
23
|
+
"types": "./dist/server-renderer.d.ts"
|
58
24
|
},
|
59
25
|
"./jsx-runtime": {
|
60
|
-
"
|
61
|
-
"
|
62
|
-
"
|
63
|
-
},
|
64
|
-
"./hooks": {
|
65
|
-
"types": "./dist/hooks.d.ts",
|
66
|
-
"import": "./dist/hooks.mjs",
|
67
|
-
"require": "./dist/hooks.js"
|
68
|
-
},
|
69
|
-
"./renderer": {
|
70
|
-
"types": "./dist/renderer.d.ts",
|
71
|
-
"import": "./dist/renderer.mjs",
|
72
|
-
"require": "./dist/renderer.js"
|
73
|
-
},
|
74
|
-
"./wasm": {
|
75
|
-
"types": "./dist/wasm.d.ts",
|
76
|
-
"import": "./dist/wasm.mjs",
|
77
|
-
"require": "./dist/wasm.js"
|
78
|
-
},
|
79
|
-
"./server/wasm": {
|
80
|
-
"types": "./dist/server/wasm.d.ts",
|
81
|
-
"import": "./dist/server/wasm.mjs",
|
82
|
-
"require": "./dist/server/wasm.js"
|
26
|
+
"import": "./dist/jsx-runtime.js",
|
27
|
+
"require": "./dist/jsx-runtime.cjs",
|
28
|
+
"types": "./dist/jsx-runtime.d.ts"
|
83
29
|
}
|
84
30
|
},
|
85
31
|
"bin": {
|
86
|
-
"frontend-hamroun": "./bin/cli.js"
|
87
|
-
"create-frontend-app": "./bin/cli.js"
|
32
|
+
"frontend-hamroun": "./bin/cli.js"
|
88
33
|
},
|
34
|
+
"files": [
|
35
|
+
"dist",
|
36
|
+
"bin",
|
37
|
+
"templates",
|
38
|
+
"README.md",
|
39
|
+
"LICENSE"
|
40
|
+
],
|
89
41
|
"scripts": {
|
90
|
-
"build
|
91
|
-
"build:server": "node build-server.js",
|
92
|
-
"build": "npm run build:server && npm run build:client",
|
93
|
-
"clean": "node -e \"if(require('fs').existsSync('dist')) require('fs').rmSync('dist',{recursive:true})\"",
|
94
|
-
"prepublishOnly": "npm run clean && npm run build",
|
42
|
+
"build": "tsc && vite build",
|
95
43
|
"dev": "vite",
|
96
|
-
"test": "
|
97
|
-
"test:watch": "
|
98
|
-
"
|
44
|
+
"test": "jest",
|
45
|
+
"test:watch": "jest --watch",
|
46
|
+
"test:coverage": "jest --coverage",
|
47
|
+
"lint": "eslint src --ext .ts,.tsx",
|
48
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
49
|
+
"format": "prettier --write src/**/*.{ts,tsx}",
|
50
|
+
"type-check": "tsc --noEmit",
|
51
|
+
"prepublishOnly": "npm run build",
|
52
|
+
"clean": "rimraf dist"
|
99
53
|
},
|
100
54
|
"keywords": [
|
55
|
+
"javascript",
|
101
56
|
"frontend",
|
102
57
|
"framework",
|
103
|
-
"
|
104
|
-
"
|
105
|
-
"
|
106
|
-
"fullstack",
|
107
|
-
"express",
|
108
|
-
"api"
|
58
|
+
"ssr",
|
59
|
+
"reactive",
|
60
|
+
"lightweight"
|
109
61
|
],
|
110
62
|
"author": "Hamroun",
|
111
63
|
"license": "MIT",
|
112
64
|
"repository": {
|
113
65
|
"type": "git",
|
114
|
-
"url": "
|
66
|
+
"url": "https://github.com/hamroun/frontend-hamroun.git"
|
115
67
|
},
|
116
|
-
"
|
117
|
-
"
|
118
|
-
"@types/cors": "^2.8.14",
|
119
|
-
"@types/express": "^4.17.18",
|
120
|
-
"@types/jsonwebtoken": "^9.0.3",
|
121
|
-
"@types/mongodb": "^4.0.7",
|
122
|
-
"@types/node": "^18.16.19",
|
123
|
-
"@types/pg": "^8.10.2",
|
124
|
-
"@types/react": "^19.0.8",
|
125
|
-
"@vitejs/plugin-react": "^4.0.4",
|
126
|
-
"nanospinner": "^1.1.0",
|
127
|
-
"terser": "^5.38.1",
|
128
|
-
"typescript": "^5.0.0",
|
129
|
-
"vite": "^4.4.9",
|
130
|
-
"vite-plugin-dts": "^4.5.0",
|
131
|
-
"vitest": "^0.34.0"
|
68
|
+
"bugs": {
|
69
|
+
"url": "https://github.com/hamroun/frontend-hamroun/issues"
|
132
70
|
},
|
133
|
-
"
|
134
|
-
|
135
|
-
"
|
71
|
+
"homepage": "https://github.com/hamroun/frontend-hamroun#readme",
|
72
|
+
"devDependencies": {
|
73
|
+
"@types/cors": "^2.8.18",
|
74
|
+
"@types/express": "^5.0.2",
|
75
|
+
"@types/jest": "^29.5.5",
|
76
|
+
"@types/jsonwebtoken": "^9.0.9",
|
77
|
+
"@types/node": "^20.6.3",
|
78
|
+
"@types/pg": "^8.15.2",
|
79
|
+
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
80
|
+
"@typescript-eslint/parser": "^6.7.2",
|
81
|
+
"eslint": "^8.49.0",
|
82
|
+
"eslint-config-prettier": "^9.0.0",
|
83
|
+
"eslint-plugin-prettier": "^5.0.0",
|
84
|
+
"jest": "^29.7.0",
|
85
|
+
"prettier": "^3.0.3",
|
86
|
+
"rimraf": "^5.0.1",
|
87
|
+
"terser": "^5.19.4",
|
88
|
+
"ts-jest": "^29.1.1",
|
89
|
+
"typescript": "^5.2.2",
|
90
|
+
"vite": "^5.0.0"
|
136
91
|
},
|
137
92
|
"dependencies": {
|
138
|
-
"bcryptjs": "^
|
93
|
+
"bcryptjs": "^3.0.2",
|
139
94
|
"boxen": "^7.1.1",
|
140
95
|
"chalk": "^5.3.0",
|
141
96
|
"commander": "^11.0.0",
|
142
|
-
"
|
143
|
-
"
|
144
|
-
"figlet": "^1.7.0",
|
97
|
+
"express": "^5.1.0",
|
98
|
+
"figlet": "^1.6.0",
|
145
99
|
"fs-extra": "^11.1.1",
|
146
|
-
"gradient-string": "^
|
147
|
-
"inquirer": "^9.2.
|
100
|
+
"gradient-string": "^2.0.2",
|
101
|
+
"inquirer": "^9.2.11",
|
148
102
|
"jsonwebtoken": "^9.0.2",
|
149
|
-
"mongodb": "^
|
150
|
-
"mysql2": "^3.
|
103
|
+
"mongodb": "^6.16.0",
|
104
|
+
"mysql2": "^3.14.1",
|
151
105
|
"nanospinner": "^1.1.0",
|
152
106
|
"ora": "^7.0.1",
|
153
|
-
"pg": "^8.
|
107
|
+
"pg": "^8.16.0",
|
154
108
|
"terminal-link": "^3.0.0",
|
155
|
-
"
|
156
|
-
"update-notifier": "^6.0.2"
|
109
|
+
"update-notifier": "^7.0.0"
|
157
110
|
},
|
158
111
|
"peerDependencies": {
|
159
112
|
"react": ">=16.8.0",
|
@@ -166,5 +119,9 @@
|
|
166
119
|
"react-dom": {
|
167
120
|
"optional": true
|
168
121
|
}
|
122
|
+
},
|
123
|
+
"engines": {
|
124
|
+
"node": ">=18.0.0",
|
125
|
+
"npm": ">=8.0.0"
|
169
126
|
}
|
170
|
-
}
|
127
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import * as esbuild from 'esbuild';
|
2
|
+
|
3
|
+
await esbuild.build({
|
4
|
+
entryPoints: ['src/main.tsx'],
|
5
|
+
bundle: true,
|
6
|
+
outfile: 'dist/bundle.js',
|
7
|
+
format: 'esm',
|
8
|
+
platform: 'browser',
|
9
|
+
minify: true,
|
10
|
+
sourcemap: true,
|
11
|
+
loader: {
|
12
|
+
'.tsx': 'tsx',
|
13
|
+
'.ts': 'tsx',
|
14
|
+
},
|
15
|
+
jsxFactory: '_jsx',
|
16
|
+
jsxFragment: '_Fragment',
|
17
|
+
banner: {
|
18
|
+
js: `import { jsx as _jsx, Fragment as _Fragment } from 'frontend-hamroun';`,
|
19
|
+
},
|
20
|
+
});
|
21
|
+
|
22
|
+
console.log('Build complete');
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import * as esbuild from 'esbuild';
|
2
|
+
|
3
|
+
const ctx = await esbuild.context({
|
4
|
+
entryPoints: ['src/main.tsx'],
|
5
|
+
bundle: true,
|
6
|
+
outfile: 'dist/bundle.js',
|
7
|
+
format: 'esm',
|
8
|
+
platform: 'browser',
|
9
|
+
sourcemap: true,
|
10
|
+
loader: {
|
11
|
+
'.tsx': 'tsx',
|
12
|
+
'.ts': 'tsx',
|
13
|
+
},
|
14
|
+
jsxFactory: '_jsx',
|
15
|
+
jsxFragment: '_Fragment',
|
16
|
+
banner: {
|
17
|
+
js: `import { jsx as _jsx, Fragment as _Fragment } from 'frontend-hamroun';`,
|
18
|
+
},
|
19
|
+
});
|
20
|
+
|
21
|
+
await ctx.watch();
|
22
|
+
await ctx.serve({
|
23
|
+
servedir: '.',
|
24
|
+
port: 3000,
|
25
|
+
});
|
26
|
+
|
27
|
+
console.log('Development server running on http://localhost:3000');
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import * as esbuild from 'esbuild';
|
2
|
+
|
3
|
+
const isWatch = process.argv.includes('--watch');
|
4
|
+
|
5
|
+
const config = {
|
6
|
+
entryPoints: ['src/main.tsx'],
|
7
|
+
bundle: true,
|
8
|
+
outfile: 'dist/bundle.js',
|
9
|
+
loader: { '.tsx': 'tsx' },
|
10
|
+
jsxFactory: 'createElement',
|
11
|
+
jsxFragment: 'null',
|
12
|
+
platform: 'browser',
|
13
|
+
target: 'es2020',
|
14
|
+
minify: true,
|
15
|
+
inject: ['./src/jsx-shim.ts'],
|
16
|
+
define: {
|
17
|
+
'Fragment': 'null'
|
18
|
+
}
|
19
|
+
};
|
20
|
+
|
21
|
+
if (isWatch) {
|
22
|
+
const ctx = await esbuild.context(config);
|
23
|
+
await ctx.watch();
|
24
|
+
console.log('Watching...');
|
25
|
+
} else {
|
26
|
+
await esbuild.build(config);
|
27
|
+
console.log('Build complete');
|
28
|
+
}
|
@@ -1,28 +1,29 @@
|
|
1
|
-
{
|
2
|
-
"name": "
|
3
|
-
"private": true,
|
4
|
-
"version": "0.0.0",
|
5
|
-
"type": "module",
|
6
|
-
"scripts": {
|
7
|
-
"dev": "vite",
|
8
|
-
"build": "tsc && vite build",
|
9
|
-
"preview": "vite preview",
|
10
|
-
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
11
|
-
"lint:fix": "eslint src --ext ts,tsx --fix"
|
12
|
-
},
|
13
|
-
"dependencies": {
|
14
|
-
"frontend-hamroun": "latest"
|
15
|
-
},
|
16
|
-
"devDependencies": {
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
20
|
-
"@typescript-eslint/parser": "^6.0.0",
|
21
|
-
"
|
22
|
-
"eslint
|
23
|
-
"eslint-plugin-react-
|
24
|
-
"
|
25
|
-
"
|
26
|
-
"
|
27
|
-
|
28
|
-
}
|
1
|
+
{
|
2
|
+
"name": "create",
|
3
|
+
"private": true,
|
4
|
+
"version": "0.0.0",
|
5
|
+
"type": "module",
|
6
|
+
"scripts": {
|
7
|
+
"dev": "vite",
|
8
|
+
"build": "tsc && vite build",
|
9
|
+
"preview": "vite preview",
|
10
|
+
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
11
|
+
"lint:fix": "eslint src --ext ts,tsx --fix"
|
12
|
+
},
|
13
|
+
"dependencies": {
|
14
|
+
"frontend-hamroun": "latest"
|
15
|
+
},
|
16
|
+
"devDependencies": {
|
17
|
+
"@types/express": "^4.17.17",
|
18
|
+
"@types/node": "^20.5.0",
|
19
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
20
|
+
"@typescript-eslint/parser": "^6.0.0",
|
21
|
+
"autoprefixer": "^10.4.16",
|
22
|
+
"eslint": "^8.45.0",
|
23
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
24
|
+
"eslint-plugin-react-refresh": "^0.4.3",
|
25
|
+
"tailwindcss": "^3.4.17",
|
26
|
+
"typescript": "^5.0.0",
|
27
|
+
"vite": "^4.4.9"
|
28
|
+
}
|
29
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { spawn } from 'child_process';
|
2
|
+
import sirv from 'sirv';
|
3
|
+
import http from 'http';
|
4
|
+
|
5
|
+
// Start esbuild in watch mode
|
6
|
+
const esbuild = spawn('node', ['esbuild.config.js', '--watch'], {
|
7
|
+
stdio: 'inherit'
|
8
|
+
});
|
9
|
+
|
10
|
+
// Create simple static server
|
11
|
+
const serve = sirv('.', {
|
12
|
+
dev: true,
|
13
|
+
single: true
|
14
|
+
});
|
15
|
+
|
16
|
+
const server = http.createServer(serve);
|
17
|
+
server.listen(3000);
|
18
|
+
console.log('Server running at http://localhost:3000');
|
19
|
+
|
20
|
+
process.on('SIGTERM', () => {
|
21
|
+
esbuild.kill();
|
22
|
+
server.close();
|
23
|
+
process.exit();
|
24
|
+
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { useState } from 'frontend-hamroun';
|
2
|
+
export function App() {
|
3
|
+
// Initialize with a default state that works on both server and client
|
4
|
+
const [count, setCount] = useState(0);
|
5
|
+
return (<div>
|
6
|
+
<h1>Server-Side Rendered App</h1>
|
7
|
+
<div>
|
8
|
+
<button onClick={() => setCount(count - 1)} data-action="decrement">-</button>
|
9
|
+
<span style={{ margin: '0 10px' }}>{count}</span>
|
10
|
+
<button onClick={() => setCount(count + 1)} data-action="increment">+</button>
|
11
|
+
</div>
|
12
|
+
<script dangerouslySetInnerHTML={{
|
13
|
+
__html: `window.__INITIAL_STATE__ = ${JSON.stringify({ count: 0 })};`
|
14
|
+
}}/>
|
15
|
+
</div>);
|
16
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { useState } from 'frontend-hamroun';
|
2
|
+
|
3
|
+
export function App() {
|
4
|
+
// Initialize with a default state that works on both server and client
|
5
|
+
const [count, setCount] = useState(0);
|
6
|
+
|
7
|
+
return (
|
8
|
+
<div>
|
9
|
+
<h1>Server-Side Rendered App</h1>
|
10
|
+
<div>
|
11
|
+
<button
|
12
|
+
onClick={() => setCount(count - 1)}
|
13
|
+
data-action="decrement"
|
14
|
+
>-</button>
|
15
|
+
<span style={{ margin: '0 10px' }}>{count}</span>
|
16
|
+
<button
|
17
|
+
onClick={() => setCount(count + 1)}
|
18
|
+
data-action="increment"
|
19
|
+
>+</button>
|
20
|
+
</div>
|
21
|
+
<script dangerouslySetInnerHTML={{
|
22
|
+
__html: `window.__INITIAL_STATE__ = ${JSON.stringify({ count: 0 })};`
|
23
|
+
}} />
|
24
|
+
</div>
|
25
|
+
);
|
26
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { useState, useEffect } from 'frontend-hamroun';
|
2
|
+
export function Counter({ initial = 0 }) {
|
3
|
+
const [count, setCount] = useState(initial);
|
4
|
+
useEffect(() => {
|
5
|
+
document.title = `Count: ${count}`;
|
6
|
+
}, [count]);
|
7
|
+
return (<div>
|
8
|
+
<h2>Counter Component</h2>
|
9
|
+
<button onClick={() => setCount(count - 1)}>-</button>
|
10
|
+
<span style={{ margin: '0 10px' }}>{count}</span>
|
11
|
+
<button onClick={() => setCount(count + 1)}>+</button>
|
12
|
+
</div>);
|
13
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { useState, useEffect } from 'frontend-hamroun';
|
2
|
+
|
3
|
+
export function Counter({ initial = 0 }) {
|
4
|
+
const [count, setCount] = useState(initial);
|
5
|
+
|
6
|
+
useEffect(() => {
|
7
|
+
document.title = `Count: ${count}`;
|
8
|
+
}, [count]);
|
9
|
+
|
10
|
+
return (
|
11
|
+
<div>
|
12
|
+
<h2>Counter Component</h2>
|
13
|
+
<button onClick={() => setCount(count - 1)}>-</button>
|
14
|
+
<span style={{ margin: '0 10px' }}>{count}</span>
|
15
|
+
<button onClick={() => setCount(count + 1)}>+</button>
|
16
|
+
</div>
|
17
|
+
);
|
18
|
+
}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import { render, useState, useEffect, useMemo, useRef, useErrorBoundary, createContext, useContext } from 'frontend-hamroun';
|
2
|
+
import './main.css';
|
3
|
+
// Create a theme context
|
4
|
+
const ThemeContext = createContext('light');
|
5
|
+
// Create a component that will throw an error when clicked
|
6
|
+
function BuggyComponent() {
|
7
|
+
const [shouldError, setShouldError] = useState(false);
|
8
|
+
if (shouldError) {
|
9
|
+
throw new Error("Test error from BuggyComponent");
|
10
|
+
}
|
11
|
+
return (<button onClick={() => setShouldError(true)} className="bg-red-600 text-white px-4 py-2 rounded mt-4 hover:bg-red-700">
|
12
|
+
Trigger Error
|
13
|
+
</button>);
|
14
|
+
}
|
15
|
+
function App() {
|
16
|
+
const [count, setCount] = useState(0);
|
17
|
+
const [theme, setTheme] = useState('light');
|
18
|
+
const renderCount = useRef(0);
|
19
|
+
const [error, resetError] = useErrorBoundary();
|
20
|
+
// Demonstrate useEffect
|
21
|
+
useEffect(() => {
|
22
|
+
document.title = `Count: ${count}`;
|
23
|
+
renderCount.current += 1;
|
24
|
+
return () => {
|
25
|
+
console.log('Cleanup effect');
|
26
|
+
};
|
27
|
+
}, [count]);
|
28
|
+
// Demonstrate useMemo
|
29
|
+
const doubled = useMemo(() => count * 2, [count]);
|
30
|
+
if (error) {
|
31
|
+
return (<div className="p-8 max-w-md mx-auto bg-red-50 rounded-lg shadow-lg">
|
32
|
+
<h1 className="text-2xl font-bold text-red-600 mb-4">Something went wrong!</h1>
|
33
|
+
<button onClick={resetError} className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded">
|
34
|
+
Try again
|
35
|
+
</button>
|
36
|
+
</div>);
|
37
|
+
}
|
38
|
+
return (<ThemeContext.Provider value={theme}>
|
39
|
+
<div className={`p-8 max-w-4xl mx-auto rounded-lg shadow-lg transition-colors ${theme === 'dark'
|
40
|
+
? 'bg-gray-800 text-white'
|
41
|
+
: 'bg-white text-gray-900'}`}>
|
42
|
+
<h1 className="text-3xl font-bold mb-6">Welcome to Frontend Hamroun</h1>
|
43
|
+
|
44
|
+
<div className="mb-6">
|
45
|
+
<button onClick={() => setCount(count - 1)} className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded">-</button>
|
46
|
+
<span className="mx-4 text-xl">{count}</span>
|
47
|
+
<button onClick={() => setCount(count + 1)} className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded">+</button>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<p className="mb-2 text-lg">Doubled value: <span className="font-semibold">{doubled}</span></p>
|
51
|
+
<p className="mb-4 text-lg">Render count: <span className="font-semibold">{renderCount.current}</span></p>
|
52
|
+
|
53
|
+
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')} className={`px-4 py-2 rounded mb-8 ${theme === 'dark'
|
54
|
+
? 'bg-yellow-400 text-gray-900 hover:bg-yellow-300'
|
55
|
+
: 'bg-gray-800 text-white hover:bg-gray-700'}`}>
|
56
|
+
Toggle Theme ({theme})
|
57
|
+
</button>
|
58
|
+
|
59
|
+
<div className="mt-8 border-t pt-6">
|
60
|
+
<h2 className="text-2xl font-bold mb-4">Test Error Boundary</h2>
|
61
|
+
<BuggyComponent />
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<div className="mt-8 border-t pt-6">
|
65
|
+
<h2 className="text-2xl font-bold mb-4">Test Context</h2>
|
66
|
+
<ContextConsumer />
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
</ThemeContext.Provider>);
|
70
|
+
}
|
71
|
+
// Component to test context
|
72
|
+
function ContextConsumer() {
|
73
|
+
// Get the full context object for debugging
|
74
|
+
const themeContext = useContext(ThemeContext);
|
75
|
+
console.log('Theme context object:', themeContext);
|
76
|
+
// Access the current theme from the parent component instead
|
77
|
+
// This is a workaround until context is properly implemented
|
78
|
+
return (<div className={`mt-4 p-4 rounded-md border ${themeContext === 'dark' ? 'border-gray-600' : 'border-gray-300'}`}>
|
79
|
+
<p className="mb-2"><strong>Note:</strong> Context API needs a fix in the framework.</p>
|
80
|
+
<p className="mb-1">Context object type: {typeof themeContext}</p>
|
81
|
+
<p className="mb-4">Context object keys: {Object.keys(themeContext).join(', ') || 'none'}</p>
|
82
|
+
|
83
|
+
<button onClick={() => {
|
84
|
+
// Since we can't get the value directly from context,
|
85
|
+
// Let's add a button to demonstrate we can still use the Provider
|
86
|
+
const newTheme = document.body.style.backgroundColor === 'rgb(51, 51, 51)'
|
87
|
+
? 'light' : 'dark';
|
88
|
+
console.log('Manually changing theme to:', newTheme);
|
89
|
+
// This won't work yet, but demonstrates the intent
|
90
|
+
if (ThemeContext) {
|
91
|
+
console.log('Provider exists, would set value to:', newTheme);
|
92
|
+
}
|
93
|
+
}} className="bg-purple-500 hover:bg-purple-600 text-white px-4 py-2 rounded">
|
94
|
+
Check Context Implementation
|
95
|
+
</button>
|
96
|
+
</div>);
|
97
|
+
}
|
98
|
+
render(<App />, document.getElementById('root'));
|