bertui 0.2.2 → 0.2.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bertui",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Lightning-fast React dev server powered by Bun and Elysia",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -111,8 +111,7 @@ async function generateRouter(routes, outDir, root) {
111
111
  return ` { path: '${route.route}', component: ${componentName}, type: '${route.type}' }`;
112
112
  }).join(',\n');
113
113
 
114
- const routerComponentCode = `
115
- import { useState, useEffect, createContext, useContext } from 'react';
114
+ const routerComponentCode = `import React, { useState, useEffect, createContext, useContext } from 'react';
116
115
 
117
116
  const RouterContext = createContext(null);
118
117
 
@@ -186,10 +185,10 @@ export function Router({ routes }) {
186
185
 
187
186
  const Component = currentRoute?.component;
188
187
 
189
- return (
190
- <RouterContext.Provider value={routerValue}>
191
- {Component ? <Component params={params} /> : <NotFound />}
192
- </RouterContext.Provider>
188
+ return React.createElement(
189
+ RouterContext.Provider,
190
+ { value: routerValue },
191
+ Component ? React.createElement(Component, { params }) : React.createElement(NotFound, null)
193
192
  );
194
193
  }
195
194
 
@@ -201,29 +200,28 @@ export function Link({ to, children, ...props }) {
201
200
  navigate(to);
202
201
  }
203
202
 
204
- return (
205
- <a href={to} onClick={handleClick} {...props}>
206
- {children}
207
- </a>
208
- );
203
+ return React.createElement('a', { href: to, onClick: handleClick, ...props }, children);
209
204
  }
210
205
 
211
206
  function NotFound() {
212
- return (
213
- <div style={{
214
- display: 'flex',
215
- flexDirection: 'column',
216
- alignItems: 'center',
217
- justifyContent: 'center',
218
- minHeight: '100vh',
219
- fontFamily: 'system-ui'
220
- }}>
221
- <h1 style={{ fontSize: '6rem', margin: 0 }}>404</h1>
222
- <p style={{ fontSize: '1.5rem', color: '#666' }}>Page not found</p>
223
- <a href="/" style={{ color: '#10b981', textDecoration: 'none', fontSize: '1.2rem' }}>
224
- Go home
225
- </a>
226
- </div>
207
+ return React.createElement(
208
+ 'div',
209
+ {
210
+ style: {
211
+ display: 'flex',
212
+ flexDirection: 'column',
213
+ alignItems: 'center',
214
+ justifyContent: 'center',
215
+ minHeight: '100vh',
216
+ fontFamily: 'system-ui'
217
+ }
218
+ },
219
+ React.createElement('h1', { style: { fontSize: '6rem', margin: 0 } }, '404'),
220
+ React.createElement('p', { style: { fontSize: '1.5rem', color: '#666' } }, 'Page not found'),
221
+ React.createElement('a', {
222
+ href: '/',
223
+ style: { color: '#10b981', textDecoration: 'none', fontSize: '1.2rem' }
224
+ }, 'Go home')
227
225
  );
228
226
  }
229
227
 
@@ -288,9 +286,22 @@ async function compileFile(srcPath, outDir, filename, relativePath) {
288
286
 
289
287
  code = fixImports(code);
290
288
 
291
- const transpiler = new Bun.Transpiler({ loader });
289
+ const transpiler = new Bun.Transpiler({
290
+ loader,
291
+ tsconfig: {
292
+ compilerOptions: {
293
+ jsx: 'react',
294
+ jsxFactory: 'React.createElement',
295
+ jsxFragmentFactory: 'React.Fragment'
296
+ }
297
+ }
298
+ });
292
299
  let compiled = await transpiler.transform(code);
293
300
 
301
+ if (!compiled.includes('import React') && (compiled.includes('React.createElement') || compiled.includes('React.Fragment'))) {
302
+ compiled = `import React from 'react';\n${compiled}`;
303
+ }
304
+
294
305
  compiled = fixRelativeImports(compiled);
295
306
 
296
307
  const outFilename = filename.replace(/\.(jsx|tsx|ts)$/, '.js');