frontend-hamroun 1.2.77 → 1.2.79
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/dist/batch/package.json +1 -1
- package/dist/client-router/package.json +1 -1
- package/dist/component/package.json +1 -1
- package/dist/context/package.json +1 -1
- package/dist/event-bus/package.json +1 -1
- package/dist/forms/package.json +1 -1
- package/dist/hooks/package.json +1 -1
- package/dist/index.mjs +1 -0
- package/dist/jsx-runtime/package.json +1 -1
- package/dist/lifecycle-events/package.json +1 -1
- package/dist/package.json +1 -1
- package/dist/render-component/package.json +1 -1
- package/dist/renderer/package.json +1 -1
- package/dist/router/package.json +1 -1
- package/dist/server/package.json +1 -1
- package/dist/server/src/index.js +24 -23
- package/dist/server/src/index.js.map +1 -1
- package/dist/server/src/renderComponent.d.ts +8 -9
- package/dist/server/src/renderComponent.js +10 -5
- package/dist/server/src/renderComponent.js.map +1 -1
- package/dist/server/src/server/index.d.ts +23 -34
- package/dist/server/src/server/index.js +170 -50
- package/dist/server/src/server/index.js.map +1 -1
- package/dist/server/src/server/templates.d.ts +2 -0
- package/dist/server/src/server/templates.js +9 -5
- package/dist/server/src/server/templates.js.map +1 -1
- package/dist/server/src/server/utils.d.ts +1 -1
- package/dist/server/src/server/utils.js +1 -1
- package/dist/server/src/server/utils.js.map +1 -1
- package/dist/server/tsconfig.server.tsbuildinfo +1 -1
- package/dist/server-renderer/package.json +1 -1
- package/dist/store/package.json +1 -1
- package/dist/types/package.json +1 -1
- package/dist/utils/package.json +1 -1
- package/dist/vdom/package.json +1 -1
- package/dist/wasm/package.json +1 -1
- package/package.json +1 -1
- package/templates/complete-app/client.js +58 -0
- package/templates/complete-app/package-lock.json +2536 -0
- package/templates/complete-app/package.json +8 -31
- package/templates/complete-app/pages/about.js +119 -0
- package/templates/complete-app/pages/index.js +157 -0
- package/templates/complete-app/pages/wasm-demo.js +290 -0
- package/templates/complete-app/public/client.js +80 -0
- package/templates/complete-app/public/index.html +47 -0
- package/templates/complete-app/public/styles.css +446 -212
- package/templates/complete-app/readme.md +188 -0
- package/templates/complete-app/server.js +417 -0
- package/templates/complete-app/server.ts +275 -0
- package/templates/complete-app/src/App.tsx +59 -0
- package/templates/complete-app/src/client.ts +61 -0
- package/templates/complete-app/src/client.tsx +18 -0
- package/templates/complete-app/src/pages/index.tsx +51 -0
- package/templates/complete-app/src/server.ts +218 -0
- package/templates/complete-app/tsconfig.json +22 -0
- package/templates/complete-app/tsconfig.server.json +19 -0
- package/templates/complete-app/vite.config.js +57 -0
- package/templates/complete-app/vite.config.ts +30 -0
- package/templates/go/example.go +154 -99
- package/templates/complete-app/build.js +0 -284
- package/templates/complete-app/src/api/index.js +0 -31
- package/templates/complete-app/src/client.js +0 -93
- package/templates/complete-app/src/components/App.js +0 -66
- package/templates/complete-app/src/components/Footer.js +0 -19
- package/templates/complete-app/src/components/Header.js +0 -38
- package/templates/complete-app/src/pages/About.js +0 -59
- package/templates/complete-app/src/pages/Home.js +0 -54
- package/templates/complete-app/src/pages/WasmDemo.js +0 -136
- package/templates/complete-app/src/server.js +0 -186
- package/templates/complete-app/src/wasm/build.bat +0 -16
- package/templates/complete-app/src/wasm/build.sh +0 -16
- package/templates/complete-app/src/wasm/example.go +0 -101
@@ -0,0 +1,80 @@
|
|
1
|
+
import { hydrate, jsx, useState, useEffect, useMemo, useRef, useContext, batchUpdates, createContext } from 'frontend-hamroun';
|
2
|
+
|
3
|
+
// Immediately invoked function to handle hydration
|
4
|
+
(async function() {
|
5
|
+
try {
|
6
|
+
// Get the app container
|
7
|
+
const appRoot = document.getElementById('app');
|
8
|
+
if (!appRoot) {
|
9
|
+
console.error('App root element not found');
|
10
|
+
return;
|
11
|
+
}
|
12
|
+
|
13
|
+
// Get initial data from the server
|
14
|
+
let initialData = {};
|
15
|
+
try {
|
16
|
+
const dataElement = document.getElementById('__APP_DATA__');
|
17
|
+
if (dataElement && dataElement.textContent) {
|
18
|
+
initialData = JSON.parse(dataElement.textContent);
|
19
|
+
console.log('Initial data loaded:', initialData);
|
20
|
+
}
|
21
|
+
} catch (err) {
|
22
|
+
console.error('Error parsing initial data:', err);
|
23
|
+
}
|
24
|
+
|
25
|
+
// Path for component loading
|
26
|
+
const path = initialData.path || window.location.pathname;
|
27
|
+
const normalizedPath = path === '/' ? '/index' : path;
|
28
|
+
|
29
|
+
try {
|
30
|
+
// Import the component for the current path
|
31
|
+
console.log(`Importing component for path: ${normalizedPath}`);
|
32
|
+
// First attempt to load the page component
|
33
|
+
const module = await import(`/pages${normalizedPath}.js`).catch(() =>
|
34
|
+
import(`/pages${normalizedPath}/index.js`));
|
35
|
+
|
36
|
+
if (!module || !module.default) {
|
37
|
+
throw new Error(`No default export found for ${normalizedPath}`);
|
38
|
+
}
|
39
|
+
|
40
|
+
// Get the component
|
41
|
+
const PageComponent = module.default;
|
42
|
+
|
43
|
+
// Use batchUpdates for better performance during hydration
|
44
|
+
batchUpdates(() => {
|
45
|
+
console.log('Hydrating app with props:', initialData);
|
46
|
+
// Hydrate the component
|
47
|
+
hydrate(jsx(PageComponent, initialData), appRoot);
|
48
|
+
console.log('Hydration complete for', normalizedPath);
|
49
|
+
});
|
50
|
+
|
51
|
+
} catch (err) {
|
52
|
+
console.error(`Error loading or hydrating component: ${err.message}`);
|
53
|
+
|
54
|
+
// Fallback to a simple component that shows the error
|
55
|
+
const ErrorComponent = (props) => {
|
56
|
+
const [showDetails, setShowDetails] = useState(false);
|
57
|
+
|
58
|
+
return jsx('div', { className: 'error-container' }, [
|
59
|
+
jsx('h1', {}, 'Error Loading Page'),
|
60
|
+
jsx('p', {}, `Failed to load: ${normalizedPath}`),
|
61
|
+
jsx('button', {
|
62
|
+
onClick: () => setShowDetails(!showDetails),
|
63
|
+
className: 'btn'
|
64
|
+
}, showDetails ? 'Hide Details' : 'Show Details'),
|
65
|
+
showDetails && jsx('pre', { className: 'error-details' },
|
66
|
+
`${err.message}\n${err.stack || ''}`
|
67
|
+
),
|
68
|
+
jsx('a', { href: '/', className: 'button' }, 'Go Home')
|
69
|
+
]);
|
70
|
+
};
|
71
|
+
|
72
|
+
hydrate(jsx(ErrorComponent, initialData), appRoot);
|
73
|
+
}
|
74
|
+
} catch (err) {
|
75
|
+
console.error('Hydration failed:', err);
|
76
|
+
}
|
77
|
+
})();
|
78
|
+
|
79
|
+
// Make jsx globally available
|
80
|
+
window.jsx = jsx;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>Static Fallback</title>
|
7
|
+
<!-- Import Tailwind-like styles for quick styling -->
|
8
|
+
<link href="https://cdn.jsdelivr.net/npm/daisyui@3.7.4/dist/full.css" rel="stylesheet" type="text/css" />
|
9
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
10
|
+
<!-- Client-side script for hydration -->
|
11
|
+
<script type="module" src="/src/client.tsx"></script>
|
12
|
+
<style>
|
13
|
+
body {
|
14
|
+
font-family: sans-serif;
|
15
|
+
max-width: 800px;
|
16
|
+
margin: 0 auto;
|
17
|
+
padding: 2rem;
|
18
|
+
line-height: 1.6;
|
19
|
+
}
|
20
|
+
.warning {
|
21
|
+
background-color: #fff3cd;
|
22
|
+
border: 1px solid #ffecb5;
|
23
|
+
color: #856404;
|
24
|
+
padding: 1rem;
|
25
|
+
border-radius: 4px;
|
26
|
+
margin-bottom: 1rem;
|
27
|
+
}
|
28
|
+
code {
|
29
|
+
background-color: #f5f5f5;
|
30
|
+
padding: 0.2rem 0.4rem;
|
31
|
+
border-radius: 3px;
|
32
|
+
}
|
33
|
+
</style>
|
34
|
+
</head>
|
35
|
+
<body>
|
36
|
+
<!-- App will be rendered here by SSR -->
|
37
|
+
<div id="app">
|
38
|
+
<div class="warning">
|
39
|
+
<h2>STATIC INDEX.HTML FILE</h2>
|
40
|
+
<p>You should NOT be seeing this page if the server is running correctly.</p>
|
41
|
+
<p>This is a static file that should only be used as a fallback when the server is not running.</p>
|
42
|
+
<p>If you're seeing this while running <code>npm run dev</code>, there's likely an issue with the Express route handling.</p>
|
43
|
+
<p>Try clearing your browser cache and refreshing the page.</p>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</body>
|
47
|
+
</html>
|