frontend-hamroun 1.2.14 → 1.2.16
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/package.json +6 -15
- package/scripts/build-cli.js +177 -85
- package/templates/basic/package.json +3 -5
- package/templates/basic/tsconfig.json +0 -3
- package/templates/basic-app/index.html +6 -6
- package/templates/basic-app/package.json +5 -12
- package/templates/basic-app/src/App.js +105 -0
- package/templates/basic-app/src/main.js +10 -0
- package/templates/basic-app/vite.config.js +22 -0
- package/templates/full-stack/package.json +8 -7
- package/templates/full-stack/tsconfig.json +0 -3
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "frontend-hamroun",
|
3
|
-
"version": "1.2.
|
3
|
+
"version": "1.2.16",
|
4
4
|
"description": "A lightweight frontend and backend framework for building modern web applications",
|
5
5
|
"type": "module",
|
6
6
|
"main": "dist/frontend-hamroun.umd.js",
|
@@ -27,15 +27,9 @@
|
|
27
27
|
"frontend-hamroun": "./bin/cli.mjs"
|
28
28
|
},
|
29
29
|
"scripts": {
|
30
|
-
"dev": "
|
31
|
-
"build": "
|
32
|
-
"
|
33
|
-
"prepublishOnly": "npm run build",
|
34
|
-
"test": "jest",
|
35
|
-
"clean": "rimraf dist bin",
|
36
|
-
"prebuild": "npm run clean",
|
37
|
-
"generate": "node scripts/generate.js",
|
38
|
-
"publish:next": "npm publish --tag next"
|
30
|
+
"dev": "node src/server.js",
|
31
|
+
"build": "tsc && node scripts/build-cli.js",
|
32
|
+
"start": "node dist/server.js"
|
39
33
|
},
|
40
34
|
"keywords": [
|
41
35
|
"frontend",
|
@@ -66,9 +60,7 @@
|
|
66
60
|
"rimraf": "^5.0.5",
|
67
61
|
"terser": "^5.25.0",
|
68
62
|
"ts-jest": "^29.1.1",
|
69
|
-
"typescript": "^5.3.
|
70
|
-
"vite": "^5.0.10",
|
71
|
-
"vite-plugin-dts": "^3.6.4"
|
63
|
+
"typescript": "^5.3.2"
|
72
64
|
},
|
73
65
|
"dependencies": {
|
74
66
|
"bcrypt": "^5.1.1",
|
@@ -78,7 +70,6 @@
|
|
78
70
|
"jsonwebtoken": "^9.0.2",
|
79
71
|
"mongoose": "^8.0.3",
|
80
72
|
"morgan": "^1.10.0",
|
81
|
-
"ts-node": "^10.9.2"
|
82
|
-
"vite-plugin-node-polyfills": "^0.23.0"
|
73
|
+
"ts-node": "^10.9.2"
|
83
74
|
}
|
84
75
|
}
|
package/scripts/build-cli.js
CHANGED
@@ -292,17 +292,16 @@ for (const template of templateList) {
|
|
292
292
|
"version": "0.1.0",
|
293
293
|
"type": "module",
|
294
294
|
"scripts": {
|
295
|
-
"dev": "
|
296
|
-
"build": "
|
297
|
-
"preview": "
|
295
|
+
"dev": "node src/server.js",
|
296
|
+
"build": "node src/build.js",
|
297
|
+
"preview": "node src/preview.js"
|
298
298
|
},
|
299
299
|
"dependencies": {
|
300
300
|
"frontend-hamroun": "latest"
|
301
301
|
},
|
302
302
|
"devDependencies": {
|
303
303
|
"@types/node": "^20.10.0",
|
304
|
-
"typescript": "^5.3.2"
|
305
|
-
"vite": "^5.0.0"
|
304
|
+
"typescript": "^5.3.2"
|
306
305
|
}
|
307
306
|
};
|
308
307
|
|
@@ -401,21 +400,31 @@ export function App() {
|
|
401
400
|
}`
|
402
401
|
);
|
403
402
|
|
404
|
-
// Create
|
403
|
+
// Create build.js
|
405
404
|
fs.writeFileSync(
|
406
|
-
path.join(
|
407
|
-
`import {
|
405
|
+
path.join(srcDir, 'build.js'),
|
406
|
+
`import { execSync } from 'child_process';
|
408
407
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
408
|
+
console.log('Building the app...');
|
409
|
+
try {
|
410
|
+
execSync('tsc', { stdio: 'inherit' });
|
411
|
+
console.log('Build completed successfully.');
|
412
|
+
} catch (error) {
|
413
|
+
console.error('Build failed:', error);
|
414
|
+
}`
|
415
|
+
);
|
416
|
+
|
417
|
+
// Create preview.js
|
418
|
+
fs.writeFileSync(
|
419
|
+
path.join(srcDir, 'preview.js'),
|
420
|
+
`import { execSync } from 'child_process';
|
421
|
+
|
422
|
+
console.log('Starting preview server...');
|
423
|
+
try {
|
424
|
+
execSync('node dist/server.js', { stdio: 'inherit' });
|
425
|
+
} catch (error) {
|
426
|
+
console.error('Failed to start preview server:', error);
|
427
|
+
}`
|
419
428
|
);
|
420
429
|
|
421
430
|
// Create tsconfig files
|
@@ -453,7 +462,7 @@ export default defineConfig({
|
|
453
462
|
"moduleResolution": "bundler",
|
454
463
|
"allowSyntheticDefaultImports": true
|
455
464
|
},
|
456
|
-
"include": ["
|
465
|
+
"include": ["src/build.js", "src/preview.js"]
|
457
466
|
}`
|
458
467
|
);
|
459
468
|
|
@@ -503,18 +512,16 @@ function createBasicTemplate(templateDir) {
|
|
503
512
|
"version": "0.1.0",
|
504
513
|
"type": "module",
|
505
514
|
"scripts": {
|
506
|
-
"dev": "
|
507
|
-
"build": "
|
508
|
-
"preview": "
|
515
|
+
"dev": "node src/server.js",
|
516
|
+
"build": "node src/build.js",
|
517
|
+
"preview": "node src/preview.js"
|
509
518
|
},
|
510
519
|
"dependencies": {
|
511
520
|
"frontend-hamroun": "latest"
|
512
521
|
},
|
513
522
|
"devDependencies": {
|
514
523
|
"@types/node": "^20.10.0",
|
515
|
-
"typescript": "^5.3.2"
|
516
|
-
"vite": "^5.0.0",
|
517
|
-
"vite-plugin-node-polyfills": "^0.21.0"
|
524
|
+
"typescript": "^5.3.2"
|
518
525
|
}
|
519
526
|
};
|
520
527
|
|
@@ -668,27 +675,31 @@ export function App(props) {
|
|
668
675
|
}`
|
669
676
|
);
|
670
677
|
|
671
|
-
// Create
|
678
|
+
// Create build.js
|
672
679
|
fs.writeFileSync(
|
673
|
-
path.join(
|
674
|
-
`import {
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
680
|
+
path.join(srcDir, 'build.js'),
|
681
|
+
`import { execSync } from 'child_process';
|
682
|
+
|
683
|
+
console.log('Building the app...');
|
684
|
+
try {
|
685
|
+
execSync('tsc', { stdio: 'inherit' });
|
686
|
+
console.log('Build completed successfully.');
|
687
|
+
} catch (error) {
|
688
|
+
console.error('Build failed:', error);
|
689
|
+
}`
|
690
|
+
);
|
691
|
+
|
692
|
+
// Create preview.js
|
693
|
+
fs.writeFileSync(
|
694
|
+
path.join(srcDir, 'preview.js'),
|
695
|
+
`import { execSync } from 'child_process';
|
696
|
+
|
697
|
+
console.log('Starting preview server...');
|
698
|
+
try {
|
699
|
+
execSync('node dist/server.js', { stdio: 'inherit' });
|
700
|
+
} catch (error) {
|
701
|
+
console.error('Failed to start preview server:', error);
|
702
|
+
}`
|
692
703
|
);
|
693
704
|
|
694
705
|
// Create tsconfig.json
|
@@ -727,7 +738,7 @@ export default defineConfig({
|
|
727
738
|
"moduleResolution": "bundler",
|
728
739
|
"allowSyntheticDefaultImports": true
|
729
740
|
},
|
730
|
-
"include": ["
|
741
|
+
"include": ["src/build.js", "src/preview.js"]
|
731
742
|
}`
|
732
743
|
);
|
733
744
|
|
@@ -859,25 +870,22 @@ export default {
|
|
859
870
|
function createPureTemplate(templateDir) {
|
860
871
|
console.log(`📝 Creating pure JS template at ${templateDir}`);
|
861
872
|
|
862
|
-
// Create package.json without React dependencies
|
873
|
+
// Create package.json without TypeScript, React or any unnecessary dependencies
|
863
874
|
const packageJson = {
|
864
875
|
"name": "frontend-hamroun-app",
|
865
876
|
"private": true,
|
866
877
|
"version": "0.1.0",
|
867
878
|
"type": "module",
|
868
879
|
"scripts": {
|
869
|
-
"dev": "
|
870
|
-
"build": "
|
871
|
-
"preview": "
|
880
|
+
"dev": "node src/server.js",
|
881
|
+
"build": "node src/build.js",
|
882
|
+
"preview": "node src/preview.js"
|
872
883
|
},
|
873
884
|
"dependencies": {
|
874
885
|
"frontend-hamroun": "latest"
|
875
886
|
},
|
876
887
|
"devDependencies": {
|
877
|
-
"
|
878
|
-
"typescript": "^5.3.2",
|
879
|
-
"vite": "^5.0.0",
|
880
|
-
"vite-plugin-node-polyfills": "^0.21.0"
|
888
|
+
"typescript": "^5.3.2"
|
881
889
|
}
|
882
890
|
};
|
883
891
|
|
@@ -1033,27 +1041,18 @@ export function App() {
|
|
1033
1041
|
}`
|
1034
1042
|
);
|
1035
1043
|
|
1036
|
-
// Create
|
1044
|
+
// Create build.js - No TypeScript, no JSX
|
1037
1045
|
fs.writeFileSync(
|
1038
|
-
path.join(templateDir, '
|
1039
|
-
`import {
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
build:
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
port: 3000,
|
1049
|
-
open: true
|
1050
|
-
},
|
1051
|
-
plugins: [
|
1052
|
-
nodePolyfills({
|
1053
|
-
protocolImports: true,
|
1054
|
-
}),
|
1055
|
-
]
|
1056
|
-
});`
|
1046
|
+
path.join(templateDir, 'src/build.js'),
|
1047
|
+
`import { execSync } from 'child_process';
|
1048
|
+
|
1049
|
+
console.log('Building the app...');
|
1050
|
+
try {
|
1051
|
+
execSync('node src/build.js', { stdio: 'inherit' });
|
1052
|
+
console.log('Build completed successfully.');
|
1053
|
+
} catch (error) {
|
1054
|
+
console.error('Build failed:', error);
|
1055
|
+
}`
|
1057
1056
|
);
|
1058
1057
|
|
1059
1058
|
// Create jsconfig.json instead of tsconfig.json
|
@@ -1078,7 +1077,90 @@ export default defineConfig({
|
|
1078
1077
|
console.log(`✅ Created pure JS template at ${templateDir}`);
|
1079
1078
|
}
|
1080
1079
|
|
1081
|
-
//
|
1080
|
+
// Add a function for full-stack template
|
1081
|
+
function createFullStackTemplate(templateDir) {
|
1082
|
+
// Create the base template first
|
1083
|
+
createPureTemplate(templateDir);
|
1084
|
+
|
1085
|
+
// Update package.json with backend dependencies
|
1086
|
+
const packageJsonPath = path.join(templateDir, 'package.json');
|
1087
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
1088
|
+
|
1089
|
+
// Add backend dependencies
|
1090
|
+
packageJson.dependencies = {
|
1091
|
+
...packageJson.dependencies,
|
1092
|
+
"express": "^4.18.2",
|
1093
|
+
"compression": "^1.7.4",
|
1094
|
+
"helmet": "^7.1.0",
|
1095
|
+
"morgan": "^1.10.0"
|
1096
|
+
};
|
1097
|
+
|
1098
|
+
// Add backend scripts
|
1099
|
+
packageJson.scripts = {
|
1100
|
+
...packageJson.scripts,
|
1101
|
+
"start": "node dist/server.js",
|
1102
|
+
"dev:server": "node --experimental-specifier-resolution=node src/server.js",
|
1103
|
+
"dev:full": "concurrently \"npm run dev\" \"npm run dev:server\""
|
1104
|
+
};
|
1105
|
+
|
1106
|
+
// Add development dependencies for backend
|
1107
|
+
packageJson.devDependencies = {
|
1108
|
+
...packageJson.devDependencies,
|
1109
|
+
"concurrently": "^8.2.2"
|
1110
|
+
};
|
1111
|
+
|
1112
|
+
fs.writeFileSync(
|
1113
|
+
packageJsonPath,
|
1114
|
+
JSON.stringify(packageJson, null, 2)
|
1115
|
+
);
|
1116
|
+
|
1117
|
+
// Create server file
|
1118
|
+
const srcDir = path.join(templateDir, 'src');
|
1119
|
+
fs.writeFileSync(
|
1120
|
+
path.join(srcDir, 'server.js'),
|
1121
|
+
`import express from 'express';
|
1122
|
+
import { fileURLToPath } from 'url';
|
1123
|
+
import { dirname, join } from 'path';
|
1124
|
+
import compression from 'compression';
|
1125
|
+
import morgan from 'morgan';
|
1126
|
+
|
1127
|
+
const __filename = fileURLToPath(import.meta.url);
|
1128
|
+
const __dirname = dirname(__filename);
|
1129
|
+
|
1130
|
+
// Create the Express app
|
1131
|
+
const app = express();
|
1132
|
+
const PORT = process.env.PORT || 3001;
|
1133
|
+
|
1134
|
+
// Apply middleware
|
1135
|
+
app.use(compression());
|
1136
|
+
app.use(morgan('dev'));
|
1137
|
+
app.use(express.json());
|
1138
|
+
|
1139
|
+
// Serve static files in production
|
1140
|
+
if (process.env.NODE_ENV === 'production') {
|
1141
|
+
const distPath = join(__dirname, '..');
|
1142
|
+
app.use(express.static(distPath));
|
1143
|
+
}
|
1144
|
+
|
1145
|
+
// API routes
|
1146
|
+
app.get('/api/hello', (req, res) => {
|
1147
|
+
res.json({
|
1148
|
+
message: 'Hello from Frontend Hamroun API!',
|
1149
|
+
timestamp: new Date().toISOString()
|
1150
|
+
});
|
1151
|
+
});
|
1152
|
+
|
1153
|
+
// Start the server
|
1154
|
+
app.listen(PORT, () => {
|
1155
|
+
console.log(\`Server running on port \${PORT}\`);
|
1156
|
+
});
|
1157
|
+
`
|
1158
|
+
);
|
1159
|
+
|
1160
|
+
console.log(`✅ Created full-stack template with server at ${templateDir}`);
|
1161
|
+
}
|
1162
|
+
|
1163
|
+
// Update how templates are checked and created
|
1082
1164
|
console.log('🔍 Checking template directories...');
|
1083
1165
|
for (const template of templateList) {
|
1084
1166
|
const templateDir = path.join(templatesDir, template);
|
@@ -1088,20 +1170,30 @@ for (const template of templateList) {
|
|
1088
1170
|
console.log(`📁 Creating template directory: ${template}`);
|
1089
1171
|
fs.mkdirSync(templateDir, { recursive: true });
|
1090
1172
|
|
1091
|
-
// Create
|
1092
|
-
|
1173
|
+
// Create appropriate template based on type
|
1174
|
+
if (template === 'full-stack') {
|
1175
|
+
createFullStackTemplate(templateDir);
|
1176
|
+
} else {
|
1177
|
+
createPureTemplate(templateDir);
|
1178
|
+
}
|
1093
1179
|
} else {
|
1094
1180
|
console.log(`✅ Template found: ${template}`);
|
1095
1181
|
|
1096
|
-
// Update
|
1097
|
-
const
|
1098
|
-
if (
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1182
|
+
// Update package.json in existing templates
|
1183
|
+
const packageJsonPath = path.join(templateDir, 'package.json');
|
1184
|
+
if (fs.existsSync(packageJsonPath)) {
|
1185
|
+
try {
|
1186
|
+
console.log(`📦 Updating package.json in ${template}`);
|
1187
|
+
if (template === 'full-stack') {
|
1188
|
+
createFullStackTemplate(templateDir);
|
1189
|
+
} else {
|
1190
|
+
createPureTemplate(templateDir);
|
1191
|
+
}
|
1192
|
+
} catch (error) {
|
1193
|
+
console.error(`❌ Failed to update package.json in ${template}: ${error.message}`);
|
1194
|
+
}
|
1102
1195
|
}
|
1103
1196
|
}
|
1104
1197
|
}
|
1105
1198
|
|
1106
|
-
|
1107
|
-
// ...existing code...
|
1199
|
+
console.log('✅ CLI build process completed');
|
@@ -5,16 +5,14 @@
|
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
7
7
|
"dev": "vite",
|
8
|
-
"build": "
|
8
|
+
"build": "vite build",
|
9
9
|
"preview": "vite preview"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
12
|
"frontend-hamroun": "latest"
|
13
13
|
},
|
14
14
|
"devDependencies": {
|
15
|
-
"
|
16
|
-
"
|
17
|
-
"vite": "^5.0.0",
|
18
|
-
"vite-plugin-node-polyfills": "^0.21.0"
|
15
|
+
"vite": "^5.0.10",
|
16
|
+
"vite-plugin-node-polyfills": "^0.23.0"
|
19
17
|
}
|
20
18
|
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>Frontend Hamroun App</title>
|
7
7
|
</head>
|
8
|
-
<body
|
9
|
-
|
10
|
-
|
8
|
+
<body>
|
9
|
+
<div id="app"></div>
|
10
|
+
<script type="module" src="/src/main.js"></script>
|
11
11
|
</body>
|
12
12
|
</html>
|
@@ -4,21 +4,14 @@
|
|
4
4
|
"version": "0.1.0",
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
7
|
-
"dev": "
|
8
|
-
"build": "tsc
|
9
|
-
"
|
7
|
+
"dev": "node src/server.js",
|
8
|
+
"build": "tsc",
|
9
|
+
"start": "node dist/server.js"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
|
-
"
|
12
|
+
"express": "^4.18.2"
|
13
13
|
},
|
14
14
|
"devDependencies": {
|
15
|
-
"
|
16
|
-
"typescript": "^5.3.2",
|
17
|
-
"vite": "^5.0.0",
|
18
|
-
"vite-plugin-node-polyfills": "^0.21.0"
|
19
|
-
},
|
20
|
-
"overrides": {
|
21
|
-
"react": "npm:@empty-npm-package/react@1.0.0",
|
22
|
-
"react-dom": "npm:@empty-npm-package/react-dom@1.0.0"
|
15
|
+
"typescript": "^5.3.2"
|
23
16
|
}
|
24
17
|
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import { useState, useRef } from 'frontend-hamroun';
|
2
|
+
|
3
|
+
export function App() {
|
4
|
+
const [count, setCount] = useState(0);
|
5
|
+
const renderCount = useRef(0);
|
6
|
+
|
7
|
+
renderCount.current++;
|
8
|
+
|
9
|
+
// Using plain JS objects instead of JSX
|
10
|
+
return {
|
11
|
+
type: 'div',
|
12
|
+
props: {
|
13
|
+
style: {
|
14
|
+
fontFamily: 'Arial, sans-serif',
|
15
|
+
maxWidth: '600px',
|
16
|
+
margin: '0 auto',
|
17
|
+
padding: '2rem'
|
18
|
+
},
|
19
|
+
children: [
|
20
|
+
{
|
21
|
+
type: 'h1',
|
22
|
+
props: {
|
23
|
+
style: { textAlign: 'center' },
|
24
|
+
children: 'Frontend Hamroun App'
|
25
|
+
}
|
26
|
+
},
|
27
|
+
{
|
28
|
+
type: 'p',
|
29
|
+
props: {
|
30
|
+
style: { textAlign: 'center' },
|
31
|
+
children: `Render count: ${renderCount.current}`
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
type: 'div',
|
36
|
+
props: {
|
37
|
+
style: {
|
38
|
+
display: 'flex',
|
39
|
+
flexDirection: 'column',
|
40
|
+
alignItems: 'center',
|
41
|
+
padding: '1rem',
|
42
|
+
border: '1px solid #ccc',
|
43
|
+
borderRadius: '8px'
|
44
|
+
},
|
45
|
+
children: [
|
46
|
+
{
|
47
|
+
type: 'h2',
|
48
|
+
props: {
|
49
|
+
children: 'Counter Example'
|
50
|
+
}
|
51
|
+
},
|
52
|
+
{
|
53
|
+
type: 'p',
|
54
|
+
props: {
|
55
|
+
children: `Count: ${count}`
|
56
|
+
}
|
57
|
+
},
|
58
|
+
{
|
59
|
+
type: 'div',
|
60
|
+
props: {
|
61
|
+
style: {
|
62
|
+
display: 'flex',
|
63
|
+
gap: '8px'
|
64
|
+
},
|
65
|
+
children: [
|
66
|
+
{
|
67
|
+
type: 'button',
|
68
|
+
props: {
|
69
|
+
onClick: () => setCount(count - 1),
|
70
|
+
style: {
|
71
|
+
padding: '8px 16px',
|
72
|
+
backgroundColor: '#ff4d4d',
|
73
|
+
color: 'white',
|
74
|
+
border: 'none',
|
75
|
+
borderRadius: '4px',
|
76
|
+
cursor: 'pointer'
|
77
|
+
},
|
78
|
+
children: 'Decrement'
|
79
|
+
}
|
80
|
+
},
|
81
|
+
{
|
82
|
+
type: 'button',
|
83
|
+
props: {
|
84
|
+
onClick: () => setCount(count + 1),
|
85
|
+
style: {
|
86
|
+
padding: '8px 16px',
|
87
|
+
backgroundColor: '#4d79ff',
|
88
|
+
color: 'white',
|
89
|
+
border: 'none',
|
90
|
+
borderRadius: '4px',
|
91
|
+
cursor: 'pointer'
|
92
|
+
},
|
93
|
+
children: 'Increment'
|
94
|
+
}
|
95
|
+
}
|
96
|
+
]
|
97
|
+
}
|
98
|
+
}
|
99
|
+
]
|
100
|
+
}
|
101
|
+
}
|
102
|
+
]
|
103
|
+
}
|
104
|
+
};
|
105
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { render } from 'frontend-hamroun';
|
2
|
+
import { App } from './App.js';
|
3
|
+
|
4
|
+
document.addEventListener('DOMContentLoaded', () => {
|
5
|
+
const rootElement = document.getElementById('app');
|
6
|
+
if (rootElement) {
|
7
|
+
render(App(), rootElement);
|
8
|
+
console.log('App rendered successfully');
|
9
|
+
}
|
10
|
+
});
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { defineConfig } from 'vite';
|
2
|
+
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
3
|
+
|
4
|
+
export default defineConfig({
|
5
|
+
// No JSX-specific configuration
|
6
|
+
build: {
|
7
|
+
outDir: 'dist',
|
8
|
+
emptyOutDir: true
|
9
|
+
},
|
10
|
+
server: {
|
11
|
+
port: 3000,
|
12
|
+
open: true
|
13
|
+
},
|
14
|
+
optimizeDeps: {
|
15
|
+
include: ['frontend-hamroun']
|
16
|
+
},
|
17
|
+
plugins: [
|
18
|
+
nodePolyfills({
|
19
|
+
protocolImports: true,
|
20
|
+
}),
|
21
|
+
]
|
22
|
+
});
|
@@ -4,17 +4,18 @@
|
|
4
4
|
"version": "0.1.0",
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
7
|
-
"dev": "
|
8
|
-
"build": "tsc
|
9
|
-
"
|
7
|
+
"dev": "node src/server.js",
|
8
|
+
"build": "tsc",
|
9
|
+
"start": "node dist/server.js"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
|
-
"
|
12
|
+
"express": "^4.18.2",
|
13
|
+
"compression": "^1.7.4",
|
14
|
+
"helmet": "^7.1.0",
|
15
|
+
"morgan": "^1.10.0"
|
13
16
|
},
|
14
17
|
"devDependencies": {
|
15
18
|
"@types/node": "^20.10.0",
|
16
|
-
"typescript": "^5.3.2"
|
17
|
-
"vite": "^5.0.0",
|
18
|
-
"vite-plugin-node-polyfills": "^0.21.0"
|
19
|
+
"typescript": "^5.3.2"
|
19
20
|
}
|
20
21
|
}
|