@jxrstudios/jxr 1.2.27 → 1.2.29

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.
@@ -1,453 +0,0 @@
1
- import { readFile, readdir, watch } from "fs/promises";
2
- import path from "path";
3
- import http from "http";
4
- import { JXRRuntime, findOrCreateEntryPoint, EnhancedTranspiler } from "./index.ts";
5
- export class JXRServerManager {
6
- runtime;
7
- transpiler;
8
- server = null;
9
- config;
10
- projectFiles = [];
11
- entryPoint = "src/App.tsx";
12
- watchers = new Map();
13
- debounceTimer = null;
14
- pendingChanges = new Map();
15
- clients = new Set();
16
- constructor(config = {}) {
17
- this.config = {
18
- port: config.port || 3000,
19
- host: config.host || "localhost",
20
- srcDir: config.srcDir || "src",
21
- enableHMR: config.enableHMR !== false,
22
- debounceMs: config.debounceMs || 300,
23
- };
24
- this.runtime = new JXRRuntime();
25
- this.transpiler = new EnhancedTranspiler();
26
- }
27
- async initialize() {
28
- await this.runtime.init();
29
- await this.loadProjectFiles();
30
- this.setupEntryPoint();
31
- if (this.config.enableHMR) {
32
- this.startFileWatching();
33
- }
34
- }
35
- async loadProjectFiles() {
36
- const srcPath = path.resolve(process.cwd(), this.config.srcDir);
37
- this.projectFiles = [];
38
- async function readDirRecursive(dir, base, files, runtime) {
39
- for (const entry of await readdir(dir, { withFileTypes: true })) {
40
- const fullPath = path.join(dir, entry.name);
41
- const relativePath = path.join(base, entry.name);
42
- if (entry.isDirectory()) {
43
- await readDirRecursive(fullPath, relativePath, files, runtime);
44
- }
45
- else if (/\.(tsx?|jsx?|css)$/.test(entry.name)) {
46
- const content = await readFile(fullPath, "utf-8");
47
- const vfsPath = "/" + relativePath.replace(/\\/g, "/");
48
- runtime.vfs.write(vfsPath, content);
49
- files.push({
50
- id: Math.random().toString(36).slice(2),
51
- path: relativePath.replace(/\\/g, "/"),
52
- content,
53
- language: entry.name.endsWith(".tsx") || entry.name.endsWith(".ts") ? "typescript" : "javascript",
54
- createdAt: Date.now(),
55
- updatedAt: Date.now(),
56
- });
57
- }
58
- }
59
- }
60
- try {
61
- await readDirRecursive(srcPath, this.config.srcDir, this.projectFiles, this.runtime);
62
- console.log(`📁 Loaded ${this.projectFiles.length} files into VirtualFS`);
63
- }
64
- catch (err) {
65
- console.error("Error loading files:", err);
66
- }
67
- }
68
- setupEntryPoint() {
69
- const result = findOrCreateEntryPoint(this.projectFiles);
70
- this.entryPoint = result.entryPoint;
71
- // If a new entry was created, add it to VFS
72
- if (result.createdEntry) {
73
- const entryFile = result.files.find(f => f.path === this.entryPoint);
74
- if (entryFile) {
75
- this.runtime.vfs.write("/" + entryFile.path, entryFile.content);
76
- }
77
- }
78
- console.log(`🎯 Entry point: ${this.entryPoint}`);
79
- }
80
- startFileWatching() {
81
- const srcPath = path.resolve(process.cwd(), this.config.srcDir);
82
- const watchDir = async (dir) => {
83
- try {
84
- const watcher = watch(dir, { recursive: true });
85
- this.watchers.set(dir, watcher);
86
- for await (const event of watcher) {
87
- if (event.filename && /\.(tsx?|jsx?|css)$/.test(event.filename)) {
88
- this.handleFileChange(event.filename);
89
- }
90
- }
91
- }
92
- catch (err) {
93
- console.error(`Watch error for ${dir}:`, err);
94
- }
95
- };
96
- watchDir(srcPath);
97
- console.log(`👀 Watching ${this.config.srcDir} for changes...`);
98
- }
99
- handleFileChange(filename) {
100
- const fullPath = path.resolve(process.cwd(), this.config.srcDir, filename);
101
- const relativePath = path.join(this.config.srcDir, filename).replace(/\\/g, "/");
102
- readFile(fullPath, "utf-8")
103
- .then(content => {
104
- const file = {
105
- id: Math.random().toString(36).slice(2),
106
- path: relativePath,
107
- content,
108
- language: filename.endsWith(".tsx") || filename.endsWith(".ts") ? "typescript" : "javascript",
109
- createdAt: Date.now(),
110
- updatedAt: Date.now(),
111
- };
112
- this.pendingChanges.set(relativePath, file);
113
- this.scheduleReload();
114
- })
115
- .catch(err => console.error(`Error reading ${filename}:`, err));
116
- }
117
- scheduleReload() {
118
- if (this.debounceTimer) {
119
- clearTimeout(this.debounceTimer);
120
- }
121
- this.debounceTimer = setTimeout(() => {
122
- this.processPendingChanges();
123
- }, this.config.debounceMs);
124
- }
125
- async processPendingChanges() {
126
- if (this.pendingChanges.size === 0)
127
- return;
128
- console.log(`🔄 Processing ${this.pendingChanges.size} file change(s)...`);
129
- for (const [path, file] of this.pendingChanges) {
130
- this.runtime.vfs.write("/" + path, file.content);
131
- // Update project files array
132
- const existingIndex = this.projectFiles.findIndex(f => f.path === path);
133
- if (existingIndex >= 0) {
134
- this.projectFiles[existingIndex] = file;
135
- }
136
- // Invalidate transpiler cache for this file
137
- this.transpiler.invalidateFile("/" + path);
138
- console.log(` ✓ Updated: ${path}`);
139
- }
140
- this.pendingChanges.clear();
141
- // Notify connected clients
142
- this.broadcastReload();
143
- console.log("🔥 HMR update sent to browser");
144
- }
145
- broadcastReload() {
146
- const message = JSON.stringify({ type: "reload", timestamp: Date.now() });
147
- this.clients.forEach(client => {
148
- client.write(`data: ${message}\n\n`);
149
- });
150
- }
151
- async start() {
152
- this.server = http.createServer(async (req, res) => {
153
- const url = new URL(req.url || "/", `http://${this.config.host}:${this.config.port}`);
154
- // SSE endpoint for HMR
155
- if (url.pathname === "/__hmr" && this.config.enableHMR) {
156
- res.writeHead(200, {
157
- "Content-Type": "text/event-stream",
158
- "Cache-Control": "no-cache",
159
- "Connection": "keep-alive",
160
- "Access-Control-Allow-Origin": "*",
161
- });
162
- this.clients.add(res);
163
- req.on("close", () => {
164
- this.clients.delete(res);
165
- });
166
- // Send initial connection message
167
- res.write(`data: ${JSON.stringify({ type: "connected" })}\n\n`);
168
- return;
169
- }
170
- // Health check
171
- if (url.pathname === "/__health") {
172
- res.writeHead(200, { "Content-Type": "application/json" });
173
- res.end(JSON.stringify({ status: "ok", runtime: "JXR", version: this.runtime.version }));
174
- return;
175
- }
176
- // Serve index.html
177
- if (url.pathname === "/") {
178
- res.writeHead(200, { "Content-Type": "text/html" });
179
- res.end(this.generateHTML());
180
- return;
181
- }
182
- // Serve transformed TSX/TS files (with or without extension)
183
- if (url.pathname.match(/\.(tsx?|jsx?|ts|js)$/) || url.pathname.startsWith('/src/')) {
184
- try {
185
- let vfsPath = url.pathname;
186
- // Try to resolve the file with various extensions
187
- let file = this.runtime.vfs.read(vfsPath);
188
- // If not found and no extension, try adding extensions
189
- if (!file && !vfsPath.match(/\.(tsx?|jsx?|ts|js|css)$/)) {
190
- const extensions = ['.tsx', '.ts', '.jsx', '.js', '.css'];
191
- for (const ext of extensions) {
192
- file = this.runtime.vfs.read(vfsPath + ext);
193
- if (file) {
194
- vfsPath = vfsPath + ext;
195
- break;
196
- }
197
- }
198
- }
199
- if (!file) {
200
- res.writeHead(404, { "Content-Type": "text/plain" });
201
- res.end(`// Module not found: ${url.pathname}`);
202
- return;
203
- }
204
- // Serve CSS files as JavaScript that injects the CSS
205
- if (vfsPath.endsWith('.css')) {
206
- let cssContent = file.content;
207
- // Check for pre-compiled Tailwind CSS first
208
- if (vfsPath === '/src/index.css') {
209
- try {
210
- const fs = await import('fs');
211
- const compiledPath = path.join(process.cwd(), 'src', 'index.compiled.css');
212
- if (fs.existsSync(compiledPath)) {
213
- cssContent = fs.readFileSync(compiledPath, 'utf-8');
214
- console.log(`[JXR] Using pre-compiled Tailwind CSS from index.compiled.css`);
215
- }
216
- else {
217
- // Try to compile on-the-fly
218
- const { execSync } = await import('child_process');
219
- const os = await import('os');
220
- const tmpDir = os.tmpdir();
221
- const inputFile = path.join(tmpDir, `jxr-tailwind-${Date.now()}.css`);
222
- const outputFile = path.join(tmpDir, `jxr-tailwind-${Date.now()}.compiled.css`);
223
- fs.writeFileSync(inputFile, cssContent);
224
- try {
225
- execSync(`npx @tailwindcss/cli -i "${inputFile}" -o "${outputFile}" --minify`, {
226
- timeout: 30000,
227
- stdio: 'pipe'
228
- });
229
- cssContent = fs.readFileSync(outputFile, 'utf-8');
230
- fs.unlinkSync(inputFile);
231
- fs.unlinkSync(outputFile);
232
- console.log(`[JXR] Compiled Tailwind CSS for ${vfsPath}`);
233
- }
234
- catch {
235
- // CDN fallback
236
- const js = `
237
- const tailwindScript = document.createElement('script');
238
- tailwindScript.src = 'https://cdn.tailwindcss.com';
239
- tailwindScript.onload = function() {
240
- const style = document.createElement('style');
241
- style.textContent = \`${file.content.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$/g, '\\$')}\`;
242
- document.head.appendChild(style);
243
- };
244
- document.head.appendChild(tailwindScript);
245
- export default \`${file.content.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$/g, '\\$')}\`;
246
- `;
247
- res.writeHead(200, {
248
- "Content-Type": "application/javascript",
249
- "Cache-Control": "no-cache"
250
- });
251
- res.end(js);
252
- return;
253
- }
254
- }
255
- }
256
- catch (error) {
257
- console.warn(`[JXR] Tailwind handling error: ${error?.message || error}`);
258
- }
259
- }
260
- const escapedCSS = cssContent
261
- .replace(/\\/g, '\\\\')
262
- .replace(/`/g, '\\`')
263
- .replace(/\$/g, '\\$');
264
- const js = `
265
- const style = document.createElement('style');
266
- style.textContent = \`${escapedCSS}\`;
267
- document.head.appendChild(style);
268
- export default \`${escapedCSS}\`;
269
- `;
270
- res.writeHead(200, {
271
- "Content-Type": "application/javascript",
272
- "Cache-Control": "no-cache"
273
- });
274
- res.end(js);
275
- return;
276
- }
277
- // Use EnhancedTranspiler (Babel) for proper JSX transformation
278
- const result = this.transpiler.transpileTypeScript(file.content, vfsPath);
279
- if (result.error) {
280
- console.error(`Transform error for ${url.pathname}:`, result.error);
281
- res.writeHead(500, { "Content-Type": "text/plain" });
282
- res.end(`// Transform error: ${result.error.message}`);
283
- return;
284
- }
285
- res.writeHead(200, {
286
- "Content-Type": "application/javascript",
287
- "Cache-Control": "no-cache"
288
- });
289
- res.end(result.code);
290
- }
291
- catch (err) {
292
- console.error(`Error serving ${url.pathname}:`, err);
293
- res.writeHead(500, { "Content-Type": "text/plain" });
294
- res.end(`// Error: ${err?.message || String(err)}`);
295
- }
296
- return;
297
- }
298
- res.writeHead(404);
299
- res.end("Not found");
300
- });
301
- return new Promise((resolve, reject) => {
302
- this.server.listen(this.config.port, this.config.host, () => {
303
- console.log(`🚀 JXR server running on http://${this.config.host}:${this.config.port}/`);
304
- if (this.config.enableHMR) {
305
- console.log(`🔥 HMR enabled (debounce: ${this.config.debounceMs}ms)`);
306
- }
307
- resolve();
308
- });
309
- this.server.on("error", reject);
310
- });
311
- }
312
- async stop() {
313
- // Stop watchers - we can't easily abort async iterators, but we can clear the map
314
- // The watch() iterator will naturally stop when the process exits
315
- this.watchers.clear();
316
- // Clear any pending timers
317
- if (this.debounceTimer) {
318
- clearTimeout(this.debounceTimer);
319
- this.debounceTimer = null;
320
- }
321
- // Close all SSE connections
322
- this.clients.forEach(client => {
323
- try {
324
- client.end();
325
- }
326
- catch { }
327
- });
328
- this.clients.clear();
329
- // Close server
330
- if (this.server) {
331
- await new Promise((resolve) => {
332
- this.server.close(() => resolve());
333
- });
334
- this.server = null;
335
- }
336
- // Dispose runtime
337
- this.runtime.dispose();
338
- console.log("👋 JXR server stopped");
339
- }
340
- generateHTML() {
341
- const hmrScript = this.config.enableHMR ? `
342
- <script>
343
- // HMR Client
344
- const evtSource = new EventSource('/__hmr');
345
- evtSource.onmessage = (e) => {
346
- const data = JSON.parse(e.data);
347
- if (data.type === 'reload') {
348
- console.log('[JXR] Reloading...');
349
- location.reload();
350
- }
351
- };
352
- evtSource.onerror = () => console.log('[JXR] HMR connection lost');
353
- </script>` : '';
354
- // Import map with react/jsx-runtime for Babel's automatic runtime
355
- // Includes common dependencies used by JXR projects
356
- const importMap = {
357
- "imports": {
358
- "react": "https://esm.sh/react@19.2.4",
359
- "react/jsx-runtime": "https://esm.sh/react@19.2.4/jsx-runtime",
360
- "react/jsx-dev-runtime": "https://esm.sh/react@19.2.4/jsx-dev-runtime",
361
- "react-dom/client": "https://esm.sh/react-dom@19.2.4/client",
362
- "wouter": "https://esm.sh/wouter@3.6.0?external=react",
363
- "lucide-react": "https://esm.sh/lucide-react@0.483.0?external=react",
364
- "sonner": "https://esm.sh/sonner@2.0.1?external=react",
365
- "next-themes": "https://esm.sh/next-themes@0.4.6?external=react",
366
- "@radix-ui/react-dialog": "https://esm.sh/@radix-ui/react-dialog@1.1.6?external=react",
367
- "@radix-ui/react-tooltip": "https://esm.sh/@radix-ui/react-tooltip@1.1.8?external=react",
368
- "@radix-ui/react-slot": "https://esm.sh/@radix-ui/react-slot@1.1.2?external=react",
369
- "@radix-ui/react-primitive": "https://esm.sh/@radix-ui/react-primitive@2.0.2?external=react",
370
- "@radix-ui/react-compose-refs": "https://esm.sh/@radix-ui/react-compose-refs@1.1.1?external=react",
371
- "@radix-ui/react-context": "https://esm.sh/@radix-ui/react-context@1.1.1?external=react",
372
- "@radix-ui/react-use-controllable-state": "https://esm.sh/@radix-ui/react-use-controllable-state@1.1.0?external=react",
373
- "@radix-ui/react-use-escape-keydown": "https://esm.sh/@radix-ui/react-use-escape-keydown@1.1.0?external=react",
374
- "@radix-ui/react-use-layout-effect": "https://esm.sh/@radix-ui/react-use-layout-effect@1.1.0?external=react",
375
- "@radix-ui/react-dismissable-layer": "https://esm.sh/@radix-ui/react-dismissable-layer@1.1.5?external=react",
376
- "@radix-ui/react-focus-guards": "https://esm.sh/@radix-ui/react-focus-guards@1.1.1?external=react",
377
- "@radix-ui/react-focus-scope": "https://esm.sh/@radix-ui/react-focus-scope@1.1.2?external=react",
378
- "@radix-ui/react-portal": "https://esm.sh/@radix-ui/react-portal@1.1.4?external=react",
379
- "@radix-ui/react-presence": "https://esm.sh/@radix-ui/react-presence@1.1.2?external=react",
380
- "@radix-ui/react-id": "https://esm.sh/@radix-ui/react-id@1.1.0?external=react",
381
- "@radix-ui/primitive": "https://esm.sh/@radix-ui/primitive@1.1.1",
382
- "aria-hidden": "https://esm.sh/aria-hidden@1.2.4",
383
- "react-remove-scroll": "https://esm.sh/react-remove-scroll@2.6.3?external=react",
384
- "tslib": "https://esm.sh/tslib@2.8.1",
385
- "get-nonce": "https://esm.sh/get-nonce@1.0.1",
386
- "use-callback-ref": "https://esm.sh/use-callback-ref@1.3.3?external=react",
387
- "use-sidecar": "https://esm.sh/use-sidecar@1.1.3?external=react",
388
- "detect-node-es": "https://esm.sh/detect-node-es@1.1.0",
389
- "copy-to-clipboard": "https://esm.sh/copy-to-clipboard@3.3.3",
390
- "toggle-selection": "https://esm.sh/toggle-selection@1.0.6",
391
- "clsx": "https://esm.sh/clsx@2.1.1",
392
- "tailwind-merge": "https://esm.sh/tailwind-merge@3.0.2",
393
- "class-variance-authority": "https://esm.sh/class-variance-authority@0.7.1",
394
- "framer-motion": "https://esm.sh/framer-motion@12.5.0?external=react,motion-dom",
395
- "motion-dom": "https://esm.sh/motion-dom@12.5.0"
396
- }
397
- };
398
- // Check if we have a main.tsx/bootstrap file - if so, use it directly
399
- // Otherwise use the component entry point pattern
400
- const hasMainFile = this.projectFiles.some(f => f.path === 'src/main.tsx' || f.path === 'src/main.ts' ||
401
- f.path === 'src/index.tsx' || f.path === 'src/index.ts');
402
- if (hasMainFile) {
403
- // Use the bootstrap file pattern (like the react template)
404
- return `<!DOCTYPE html>
405
- <html lang="en">
406
- <head>
407
- <meta charset="UTF-8">
408
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
409
- <title>JXR.js — Edge OS Runtime Framework</title>
410
- <meta name="description" content="JXR.js is the next-generation edge runtime framework for React Native and React. MoQ transport, Web Crypto, Worker pools.">
411
-
412
- <!-- Google Fonts -->
413
- <link rel="preconnect" href="https://fonts.googleapis.com">
414
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
415
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
416
-
417
- <script type="importmap">
418
- ${JSON.stringify(importMap)}
419
- </script>
420
- </head>
421
- <body>
422
- <div id="root"></div>
423
- <script type="module" src="/src/main.tsx"></script>
424
- ${hmrScript}
425
- </body>
426
- </html>`;
427
- }
428
- // Fallback: use component entry point directly
429
- return `<!DOCTYPE html>
430
- <html lang="en">
431
- <head>
432
- <meta charset="UTF-8">
433
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
434
- <title>JXR App</title>
435
- <script type="importmap">
436
- ${JSON.stringify(importMap)}
437
- </script>
438
- </head>
439
- <body>
440
- <div id="root"></div>
441
- <script type="module">
442
- import { createRoot } from 'react-dom/client';
443
- import App from '/${this.entryPoint}';
444
-
445
- const root = createRoot(document.getElementById('root'));
446
- root.render(App());
447
- </script>
448
- ${hmrScript}
449
- </body>
450
- </html>`;
451
- }
452
- }
453
- //# sourceMappingURL=jxr-server-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jxr-server-manager.js","sourceRoot":"","sources":["../src/jxr-server-manager.ts"],"names":[],"mappings":"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"}