frontend-hamroun 1.2.79 → 1.2.80
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 +505 -144
- 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 +298 -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/bun.lock +196 -0
- package/templates/basic-app/dev.js +27 -0
- package/templates/basic-app/docs/rapport_pfe.aux +27 -27
- package/templates/basic-app/docs/rapport_pfe.out +10 -10
- package/templates/basic-app/docs/rapport_pfe.toc +14 -14
- package/templates/basic-app/esbuild.config.js +28 -0
- package/templates/basic-app/index.html +1 -1
- package/templates/{fullstack-app → basic-app}/package-lock.json +4185 -5094
- package/templates/basic-app/package.json +29 -28
- package/templates/basic-app/server.js +24 -0
- package/templates/basic-app/src/App.tsx +26 -0
- package/templates/basic-app/src/client.tsx +11 -0
- package/templates/basic-app/src/components/Counter.tsx +18 -0
- package/templates/basic-app/src/jsx-shim.ts +4 -0
- package/templates/basic-app/src/main.tsx +0 -1
- package/templates/basic-app/src/server.ts +52 -0
- package/templates/basic-app/tsconfig.server.json +11 -0
- package/templates/fullstack-app/build/main.css +874 -874
- package/templates/fullstack-app/build/main.css.map +7 -7
- package/templates/fullstack-app/build/main.js +967 -967
- package/templates/fullstack-app/build/main.js.map +7 -7
- package/templates/fullstack-app/public/styles.css +768 -768
- package/templates/go/example.go +99 -154
- package/templates/go-wasm-app/babel.config.js +2 -8
- package/templates/go-wasm-app/package.json +12 -21
- package/templates/go-wasm-app/public/wasm/wasm_exec.js +561 -561
- package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +39 -39
- package/templates/go-wasm-app/server.js +510 -59
- package/templates/go-wasm-app/src/app.js +2 -22
- package/templates/go-wasm-app/src/wasm/example.go +75 -75
- package/templates/go-wasm-app/vite.config.js +5 -16
- package/templates/ssr-template/server.js +2 -2
- package/templates/ssr-template/vite.config.js +5 -16
- package/dist/Counter.d.ts +0 -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.log +0 -399
- package/templates/complete-app/client.js +0 -58
- package/templates/complete-app/package-lock.json +0 -2536
- package/templates/complete-app/package.json +0 -17
- package/templates/complete-app/pages/about.js +0 -119
- package/templates/complete-app/pages/index.js +0 -157
- package/templates/complete-app/pages/wasm-demo.js +0 -290
- package/templates/complete-app/public/client.js +0 -80
- package/templates/complete-app/public/index.html +0 -47
- package/templates/complete-app/public/styles.css +0 -579
- package/templates/complete-app/readme.md +0 -188
- package/templates/complete-app/server.js +0 -417
- package/templates/complete-app/server.ts +0 -275
- package/templates/complete-app/src/App.tsx +0 -59
- package/templates/complete-app/src/client.ts +0 -61
- package/templates/complete-app/src/client.tsx +0 -18
- package/templates/complete-app/src/pages/index.tsx +0 -51
- package/templates/complete-app/src/server.ts +0 -218
- package/templates/complete-app/tsconfig.json +0 -22
- package/templates/complete-app/tsconfig.server.json +0 -19
- package/templates/complete-app/vite.config.js +0 -57
- package/templates/complete-app/vite.config.ts +0 -30
- 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-lock.json +0 -3732
@@ -1,22 +0,0 @@
|
|
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
|
-
}
|
@@ -1,19 +0,0 @@
|
|
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
|
-
}
|
@@ -1,57 +0,0 @@
|
|
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
|
-
});
|
@@ -1,30 +0,0 @@
|
|
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
|
-
});
|
@@ -1,62 +0,0 @@
|
|
1
|
-
// CommonJS/ESM compatible build configuration
|
2
|
-
const buildConfig = {
|
3
|
-
/**
|
4
|
-
* Determines if we should build for dual module support
|
5
|
-
*/
|
6
|
-
dualModuleSupport: true,
|
7
|
-
|
8
|
-
/**
|
9
|
-
* Entry points for both client and server
|
10
|
-
*/
|
11
|
-
entryPoints: {
|
12
|
-
client: 'src/client.js',
|
13
|
-
server: 'src/server.js'
|
14
|
-
},
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Output formats to generate
|
18
|
-
*/
|
19
|
-
outputFormats: ['esm', 'cjs'],
|
20
|
-
|
21
|
-
/**
|
22
|
-
* Output directory configuration
|
23
|
-
*/
|
24
|
-
output: {
|
25
|
-
dir: 'dist',
|
26
|
-
client: {
|
27
|
-
esm: 'assets/[name].mjs',
|
28
|
-
cjs: 'assets/[name].js'
|
29
|
-
},
|
30
|
-
server: {
|
31
|
-
esm: 'server/[name].mjs',
|
32
|
-
cjs: 'server/[name].js'
|
33
|
-
}
|
34
|
-
},
|
35
|
-
|
36
|
-
/**
|
37
|
-
* WebAssembly configuration
|
38
|
-
*/
|
39
|
-
wasm: {
|
40
|
-
enabled: true,
|
41
|
-
goBinaryPath: 'go',
|
42
|
-
sourceDir: 'src/wasm',
|
43
|
-
outputDir: 'public/wasm',
|
44
|
-
copyGoRuntime: true
|
45
|
-
},
|
46
|
-
|
47
|
-
/**
|
48
|
-
* Additional build options
|
49
|
-
*/
|
50
|
-
options: {
|
51
|
-
minify: process.env.NODE_ENV === 'production',
|
52
|
-
sourcemap: true,
|
53
|
-
target: 'es2020'
|
54
|
-
}
|
55
|
-
};
|
56
|
-
|
57
|
-
// Make it work in both ESM and CommonJS environments
|
58
|
-
if (typeof module !== 'undefined' && module.exports) {
|
59
|
-
module.exports = buildConfig;
|
60
|
-
}
|
61
|
-
|
62
|
-
export default buildConfig;
|
@@ -1,218 +0,0 @@
|
|
1
|
-
// Support both ESM and CommonJS imports
|
2
|
-
const path = require('path');
|
3
|
-
const fs = require('fs');
|
4
|
-
const esbuild = require('esbuild');
|
5
|
-
const { execSync } = require('child_process');
|
6
|
-
const config = require('./build.config.js');
|
7
|
-
|
8
|
-
// Define colors for console output
|
9
|
-
const colors = {
|
10
|
-
reset: "\x1b[0m",
|
11
|
-
bright: "\x1b[1m",
|
12
|
-
dim: "\x1b[2m",
|
13
|
-
underscore: "\x1b[4m",
|
14
|
-
blink: "\x1b[5m",
|
15
|
-
cyan: "\x1b[36m",
|
16
|
-
green: "\x1b[32m",
|
17
|
-
yellow: "\x1b[33m",
|
18
|
-
red: "\x1b[31m"
|
19
|
-
};
|
20
|
-
|
21
|
-
// Helper for formatted console logs
|
22
|
-
function log(message, type = 'info') {
|
23
|
-
const timestamp = new Date().toISOString().split('T')[1].split('.')[0];
|
24
|
-
const prefix = {
|
25
|
-
info: `${colors.bright}${colors.cyan}[INFO]${colors.reset}`,
|
26
|
-
success: `${colors.bright}${colors.green}[SUCCESS]${colors.reset}`,
|
27
|
-
warning: `${colors.bright}${colors.yellow}[WARNING]${colors.reset}`,
|
28
|
-
error: `${colors.bright}${colors.red}[ERROR]${colors.reset}`
|
29
|
-
};
|
30
|
-
|
31
|
-
console.log(`${colors.dim}[${timestamp}]${colors.reset} ${prefix[type] || prefix.info} ${message}`);
|
32
|
-
}
|
33
|
-
|
34
|
-
// Main build function
|
35
|
-
async function build() {
|
36
|
-
try {
|
37
|
-
log(`Starting build process (${process.env.NODE_ENV || 'development'} mode)`);
|
38
|
-
|
39
|
-
// Ensure output directories
|
40
|
-
ensureDir(path.join(__dirname, 'dist'));
|
41
|
-
ensureDir(path.join(__dirname, 'dist/server'));
|
42
|
-
ensureDir(path.join(__dirname, 'dist/assets'));
|
43
|
-
ensureDir(path.join(__dirname, 'public/wasm'));
|
44
|
-
|
45
|
-
// Build the WASM modules if enabled
|
46
|
-
if (config.wasm.enabled) {
|
47
|
-
await buildWasmModules();
|
48
|
-
}
|
49
|
-
|
50
|
-
// Build the client code
|
51
|
-
await buildClient();
|
52
|
-
|
53
|
-
// Build the server code if it exists
|
54
|
-
if (fs.existsSync(path.join(__dirname, config.entryPoints.server))) {
|
55
|
-
await buildServer();
|
56
|
-
}
|
57
|
-
|
58
|
-
log('Build completed successfully', 'success');
|
59
|
-
} catch (error) {
|
60
|
-
log(`Build failed: ${error.message}`, 'error');
|
61
|
-
console.error(error);
|
62
|
-
process.exit(1);
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
// Build WebAssembly modules
|
67
|
-
async function buildWasmModules() {
|
68
|
-
const sourceDir = path.join(__dirname, config.wasm.sourceDir);
|
69
|
-
const outputDir = path.join(__dirname, config.wasm.outputDir);
|
70
|
-
|
71
|
-
if (!fs.existsSync(sourceDir)) {
|
72
|
-
log(`WASM source directory not found: ${sourceDir}`, 'warning');
|
73
|
-
return;
|
74
|
-
}
|
75
|
-
|
76
|
-
log('Building WebAssembly modules...');
|
77
|
-
|
78
|
-
// Get all .go files that need to be compiled
|
79
|
-
const goFiles = fs.readdirSync(sourceDir)
|
80
|
-
.filter(file => file.endsWith('.go'));
|
81
|
-
|
82
|
-
if (goFiles.length === 0) {
|
83
|
-
log('No Go files found to compile', 'warning');
|
84
|
-
return;
|
85
|
-
}
|
86
|
-
|
87
|
-
// Compile each Go file to WASM
|
88
|
-
for (const goFile of goFiles) {
|
89
|
-
const goFilePath = path.join(sourceDir, goFile);
|
90
|
-
const wasmFileName = goFile.replace('.go', '.wasm');
|
91
|
-
const wasmFilePath = path.join(outputDir, wasmFileName);
|
92
|
-
|
93
|
-
log(`Compiling ${goFile} to WebAssembly...`);
|
94
|
-
|
95
|
-
try {
|
96
|
-
// Set environment variables for Go WASM compilation
|
97
|
-
const env = {
|
98
|
-
...process.env,
|
99
|
-
GOOS: 'js',
|
100
|
-
GOARCH: 'wasm'
|
101
|
-
};
|
102
|
-
|
103
|
-
// Compile Go to WASM
|
104
|
-
execSync(`${config.wasm.goBinaryPath} build -o "${wasmFilePath}" "${goFilePath}"`, {
|
105
|
-
env,
|
106
|
-
stdio: 'inherit'
|
107
|
-
});
|
108
|
-
|
109
|
-
log(`Successfully compiled ${goFile} to ${wasmFileName}`, 'success');
|
110
|
-
} catch (error) {
|
111
|
-
log(`Failed to compile ${goFile}: ${error.message}`, 'error');
|
112
|
-
throw error;
|
113
|
-
}
|
114
|
-
}
|
115
|
-
|
116
|
-
// Copy wasm_exec.js from Go installation to public folder
|
117
|
-
if (config.wasm.copyGoRuntime) {
|
118
|
-
try {
|
119
|
-
const goRoot = execSync(`${config.wasm.goBinaryPath} env GOROOT`, { encoding: 'utf8' }).trim();
|
120
|
-
const wasmExecSrc = path.join(goRoot, 'misc', 'wasm', 'wasm_exec.js');
|
121
|
-
const wasmExecDest = path.join(outputDir, 'wasm_exec.js');
|
122
|
-
|
123
|
-
fs.copyFileSync(wasmExecSrc, wasmExecDest);
|
124
|
-
log('Copied wasm_exec.js runtime to public folder', 'success');
|
125
|
-
} catch (error) {
|
126
|
-
log(`Failed to copy wasm_exec.js: ${error.message}`, 'warning');
|
127
|
-
}
|
128
|
-
}
|
129
|
-
}
|
130
|
-
|
131
|
-
// Build client code with esbuild
|
132
|
-
async function buildClient() {
|
133
|
-
const formats = config.dualModuleSupport ? config.outputFormats : ['esm'];
|
134
|
-
|
135
|
-
for (const format of formats) {
|
136
|
-
const outfile = path.join(
|
137
|
-
__dirname,
|
138
|
-
'dist',
|
139
|
-
config.output.client[format].replace('[name]', 'client')
|
140
|
-
);
|
141
|
-
|
142
|
-
log(`Building client bundle (${format})...`);
|
143
|
-
|
144
|
-
await esbuild.build({
|
145
|
-
entryPoints: [path.join(__dirname, config.entryPoints.client)],
|
146
|
-
bundle: true,
|
147
|
-
outfile,
|
148
|
-
format,
|
149
|
-
platform: 'browser',
|
150
|
-
target: config.options.target,
|
151
|
-
minify: config.options.minify,
|
152
|
-
sourcemap: config.options.sourcemap,
|
153
|
-
define: {
|
154
|
-
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
|
155
|
-
'__ESM__': format === 'esm' ? 'true' : 'false'
|
156
|
-
},
|
157
|
-
jsxFactory: 'jsx',
|
158
|
-
jsxFragment: 'Fragment',
|
159
|
-
banner: {
|
160
|
-
js: format === 'esm'
|
161
|
-
? `import { jsx, Fragment } from 'frontend-hamroun/jsx-runtime';`
|
162
|
-
: `const { jsx, Fragment } = require('frontend-hamroun/jsx-runtime');`
|
163
|
-
}
|
164
|
-
});
|
165
|
-
}
|
166
|
-
|
167
|
-
log('Client build completed', 'success');
|
168
|
-
}
|
169
|
-
|
170
|
-
// Build server code with esbuild
|
171
|
-
async function buildServer() {
|
172
|
-
const formats = config.dualModuleSupport ? config.outputFormats : ['cjs'];
|
173
|
-
|
174
|
-
for (const format of formats) {
|
175
|
-
const outfile = path.join(
|
176
|
-
__dirname,
|
177
|
-
'dist',
|
178
|
-
config.output.server[format].replace('[name]', 'server')
|
179
|
-
);
|
180
|
-
|
181
|
-
log(`Building server bundle (${format})...`);
|
182
|
-
|
183
|
-
await esbuild.build({
|
184
|
-
entryPoints: [path.join(__dirname, config.entryPoints.server)],
|
185
|
-
bundle: true,
|
186
|
-
outfile,
|
187
|
-
format,
|
188
|
-
platform: 'node',
|
189
|
-
target: config.options.target,
|
190
|
-
minify: config.options.minify,
|
191
|
-
sourcemap: config.options.sourcemap,
|
192
|
-
external: ['express', 'cors', 'path', 'fs', 'frontend-hamroun', 'frontend-hamroun/*'],
|
193
|
-
define: {
|
194
|
-
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
|
195
|
-
'__ESM__': format === 'esm' ? 'true' : 'false'
|
196
|
-
}
|
197
|
-
});
|
198
|
-
}
|
199
|
-
|
200
|
-
log('Server build completed', 'success');
|
201
|
-
}
|
202
|
-
|
203
|
-
// Utility to ensure directory exists
|
204
|
-
function ensureDir(dir) {
|
205
|
-
if (!fs.existsSync(dir)) {
|
206
|
-
fs.mkdirSync(dir, { recursive: true });
|
207
|
-
}
|
208
|
-
}
|
209
|
-
|
210
|
-
// Execute the build
|
211
|
-
build();
|
212
|
-
|
213
|
-
// Support both CommonJS and ESM
|
214
|
-
if (typeof module !== 'undefined' && module.exports) {
|
215
|
-
module.exports = { build };
|
216
|
-
}
|
217
|
-
|
218
|
-
export { build };
|