@jxrstudios/jxr 1.0.4 → 1.0.6
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/README.md +6 -2
- package/bin/jxr.js +114 -76
- package/dist/deployer.d.ts +8 -12
- package/dist/deployer.d.ts.map +1 -1
- package/dist/deployer.js +69 -106
- package/dist/deployer.js.map +1 -1
- package/dist/enhanced-transpiler.d.ts +36 -0
- package/dist/enhanced-transpiler.d.ts.map +1 -0
- package/dist/enhanced-transpiler.js +272 -0
- package/dist/enhanced-transpiler.js.map +1 -0
- package/dist/entry-point-detection.d.ts +22 -0
- package/dist/entry-point-detection.d.ts.map +1 -0
- package/dist/entry-point-detection.js +415 -0
- package/dist/entry-point-detection.js.map +1 -0
- package/dist/index.d.ts +19 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1025 -126
- package/dist/index.js.map +1 -1
- package/dist/jxr-server-manager.d.ts +32 -0
- package/dist/jxr-server-manager.d.ts.map +1 -0
- package/dist/jxr-server-manager.js +353 -0
- package/dist/jxr-server-manager.js.map +1 -0
- package/dist/runtime.d.ts +9 -9
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3 -3
- package/package.json +9 -2
- package/src/deployer.ts +231 -0
- package/src/enhanced-transpiler.ts +331 -0
- package/src/entry-point-detection.ts +470 -0
- package/src/index.ts +63 -0
- package/src/jxr-server-manager.ts +419 -0
- package/src/module-resolver.ts +520 -0
- package/src/moq-transport.ts +267 -0
- package/src/runtime.ts +188 -0
- package/src/web-crypto.ts +279 -0
- package/src/worker-pool.ts +321 -0
- package/zzz_react_template/App.tsx +160 -0
- package/zzz_react_template/index.css +16 -0
- package/zzz_react_template/index.html +12 -0
- package/zzz_react_template/main.tsx +10 -0
- package/zzz_react_template/package.json +25 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import * as Babel from "@babel/standalone";
|
|
2
|
+
export class EnhancedTranspiler {
|
|
3
|
+
transformCache = new Map();
|
|
4
|
+
dependencyGraph = new Map();
|
|
5
|
+
options;
|
|
6
|
+
constructor(options = {}) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
transpileTypeScript(code, filename, options = {}) {
|
|
10
|
+
const mergedOptions = { ...this.options, ...options, filename };
|
|
11
|
+
const cacheKey = `${filename}:${code}:${JSON.stringify(mergedOptions)}`;
|
|
12
|
+
if (mergedOptions.cache !== false && this.transformCache.has(cacheKey)) {
|
|
13
|
+
return { ...this.transformCache.get(cacheKey), cached: true };
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const result = Babel.transform(code, {
|
|
17
|
+
filename,
|
|
18
|
+
presets: [
|
|
19
|
+
["react", { runtime: "automatic" }],
|
|
20
|
+
"typescript",
|
|
21
|
+
...(mergedOptions.presets || [])
|
|
22
|
+
],
|
|
23
|
+
plugins: [
|
|
24
|
+
// Handle import/export transformations - pass filename for context
|
|
25
|
+
this.createImportTransformer(filename),
|
|
26
|
+
...(mergedOptions.plugins || [])
|
|
27
|
+
],
|
|
28
|
+
sourceMaps: true,
|
|
29
|
+
sourceFileName: filename
|
|
30
|
+
});
|
|
31
|
+
const transformed = {
|
|
32
|
+
code: result.code || code,
|
|
33
|
+
map: result.map,
|
|
34
|
+
cached: false
|
|
35
|
+
};
|
|
36
|
+
if (mergedOptions.cache !== false) {
|
|
37
|
+
this.transformCache.set(cacheKey, transformed);
|
|
38
|
+
}
|
|
39
|
+
return transformed;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error("[EnhancedTranspiler] Transpilation error:", error);
|
|
43
|
+
return {
|
|
44
|
+
code,
|
|
45
|
+
error: error,
|
|
46
|
+
cached: false
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
transpileJSX(code, filename, options = {}) {
|
|
51
|
+
const mergedOptions = { ...this.options, ...options, filename };
|
|
52
|
+
const cacheKey = `jsx:${filename}:${code}:${JSON.stringify(mergedOptions)}`;
|
|
53
|
+
if (mergedOptions.cache !== false && this.transformCache.has(cacheKey)) {
|
|
54
|
+
return { ...this.transformCache.get(cacheKey), cached: true };
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const result = Babel.transform(code, {
|
|
58
|
+
filename,
|
|
59
|
+
presets: [
|
|
60
|
+
["react", { runtime: "automatic" }],
|
|
61
|
+
...(mergedOptions.presets || [])
|
|
62
|
+
],
|
|
63
|
+
plugins: mergedOptions.plugins || [],
|
|
64
|
+
sourceMaps: true,
|
|
65
|
+
sourceFileName: filename
|
|
66
|
+
});
|
|
67
|
+
console.log('[v0] Transpiled JSX for', filename);
|
|
68
|
+
console.log('[v0] Output (first 500 chars):', result.code?.substring(0, 500));
|
|
69
|
+
const transformed = {
|
|
70
|
+
code: result.code || code,
|
|
71
|
+
map: result.map,
|
|
72
|
+
cached: false
|
|
73
|
+
};
|
|
74
|
+
if (mergedOptions.cache !== false) {
|
|
75
|
+
this.transformCache.set(cacheKey, transformed);
|
|
76
|
+
}
|
|
77
|
+
return transformed;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error("[EnhancedTranspiler] JSX transformation error:", error);
|
|
81
|
+
return {
|
|
82
|
+
code,
|
|
83
|
+
error: error,
|
|
84
|
+
cached: false
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
createImportTransformer(filename) {
|
|
89
|
+
const self = this;
|
|
90
|
+
return function importTransformer() {
|
|
91
|
+
return {
|
|
92
|
+
visitor: {
|
|
93
|
+
ImportDeclaration(path) {
|
|
94
|
+
const source = path.node.source.value;
|
|
95
|
+
// Skip external packages
|
|
96
|
+
if (!source.startsWith('./') && !source.startsWith('../') && !source.startsWith('@/')) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Rewrite to absolute path that matches import map
|
|
100
|
+
const resolvedPath = self.resolveImportPath(filename, source);
|
|
101
|
+
if (resolvedPath) {
|
|
102
|
+
console.log(`[Transpiler] Rewriting: ${filename} imports "${source}" → "${resolvedPath}"`);
|
|
103
|
+
path.node.source.value = resolvedPath;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
ExportNamedDeclaration(path) {
|
|
107
|
+
if (path.node.source) {
|
|
108
|
+
const source = path.node.source.value;
|
|
109
|
+
// Skip external packages
|
|
110
|
+
if (!source.startsWith('./') && !source.startsWith('../') && !source.startsWith('@/')) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const resolvedPath = self.resolveImportPath(filename, source);
|
|
114
|
+
if (resolvedPath) {
|
|
115
|
+
console.log(`[Transpiler] Rewriting export: ${filename} exports from "${source}" → "${resolvedPath}"`);
|
|
116
|
+
path.node.source.value = resolvedPath;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
ExportAllDeclaration(path) {
|
|
121
|
+
if (path.node.source) {
|
|
122
|
+
const source = path.node.source.value;
|
|
123
|
+
// Skip external packages
|
|
124
|
+
if (!source.startsWith('./') && !source.startsWith('../') && !source.startsWith('@/')) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const resolvedPath = self.resolveImportPath(filename, source);
|
|
128
|
+
if (resolvedPath) {
|
|
129
|
+
console.log(`[Transpiler] Rewriting export all: ${filename} exports from "${source}" → "${resolvedPath}"`);
|
|
130
|
+
path.node.source.value = resolvedPath;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
resolveImportPath(fromFile, importPath) {
|
|
139
|
+
// Normalize fromFile - remove leading slash for consistent resolution
|
|
140
|
+
const normalizedFromFile = fromFile.startsWith('/') ? fromFile.substring(1) : fromFile;
|
|
141
|
+
// Handle @/ alias
|
|
142
|
+
if (importPath.startsWith('@/')) {
|
|
143
|
+
// Convert @/components/Button → /src/components/Button (with leading slash)
|
|
144
|
+
return ('/src/' + importPath.substring(2)).replace(/\.(tsx|ts|jsx|js)$/, '');
|
|
145
|
+
}
|
|
146
|
+
// Handle relative imports
|
|
147
|
+
if (importPath.startsWith('./') || importPath.startsWith('../')) {
|
|
148
|
+
// Calculate absolute path from relative import
|
|
149
|
+
const fromDir = normalizedFromFile.split('/').slice(0, -1);
|
|
150
|
+
const importParts = importPath.split('/');
|
|
151
|
+
let currentPath = [...fromDir];
|
|
152
|
+
for (const part of importParts) {
|
|
153
|
+
if (part === '..') {
|
|
154
|
+
currentPath.pop();
|
|
155
|
+
}
|
|
156
|
+
else if (part !== '.') {
|
|
157
|
+
currentPath.push(part);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Return absolute path with leading slash and without extension
|
|
161
|
+
return '/' + currentPath.join('/').replace(/\.(tsx|ts|jsx|js)$/, '');
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
// Track dependencies for cache invalidation
|
|
166
|
+
trackDependencies(filename, dependencies) {
|
|
167
|
+
this.dependencyGraph.set(filename, new Set(dependencies));
|
|
168
|
+
}
|
|
169
|
+
// Invalidate cache entries that depend on changed files
|
|
170
|
+
invalidateCache(changedFiles) {
|
|
171
|
+
const toInvalidate = new Set();
|
|
172
|
+
// Find all entries that depend on changed files
|
|
173
|
+
for (const [file, deps] of this.dependencyGraph) {
|
|
174
|
+
for (const changedFile of changedFiles) {
|
|
175
|
+
if (deps.has(changedFile)) {
|
|
176
|
+
toInvalidate.add(file);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Invalidate cache entries
|
|
181
|
+
for (const file of toInvalidate) {
|
|
182
|
+
for (const [key] of this.transformCache) {
|
|
183
|
+
if (key.startsWith(`${file}:`)) {
|
|
184
|
+
this.transformCache.delete(key);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Clear all cache
|
|
190
|
+
clearCache() {
|
|
191
|
+
this.transformCache.clear();
|
|
192
|
+
this.dependencyGraph.clear();
|
|
193
|
+
}
|
|
194
|
+
invalidateFile(filename) {
|
|
195
|
+
// Invalidate cache entries for this file
|
|
196
|
+
for (const key of this.transformCache.keys()) {
|
|
197
|
+
if (key.startsWith(filename)) {
|
|
198
|
+
this.transformCache.delete(key);
|
|
199
|
+
console.log('[Transpiler] Invalidated cache for', filename);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Invalidate dependents
|
|
203
|
+
const dependents = this.dependencyGraph.get(filename);
|
|
204
|
+
if (dependents) {
|
|
205
|
+
for (const dependent of dependents) {
|
|
206
|
+
this.invalidateFile(dependent);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Get cache statistics
|
|
211
|
+
getCacheStats() {
|
|
212
|
+
return {
|
|
213
|
+
size: this.transformCache.size,
|
|
214
|
+
hitRate: 0 // Could be implemented with usage tracking
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Extract dependencies from code for tracking
|
|
218
|
+
extractDependencies(code) {
|
|
219
|
+
const dependencies = [];
|
|
220
|
+
try {
|
|
221
|
+
// Simple regex-based dependency extraction for browser compatibility
|
|
222
|
+
// Import statements: import ... from 'module'
|
|
223
|
+
const importRegex = /import\s+(?:[\w\s{},*]*\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
224
|
+
let match;
|
|
225
|
+
while ((match = importRegex.exec(code)) !== null) {
|
|
226
|
+
dependencies.push(match[1]);
|
|
227
|
+
}
|
|
228
|
+
// Export statements: export ... from 'module'
|
|
229
|
+
const exportRegex = /export\s+(?:[\w\s{},*]*\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
230
|
+
while ((match = exportRegex.exec(code)) !== null) {
|
|
231
|
+
dependencies.push(match[1]);
|
|
232
|
+
}
|
|
233
|
+
// Dynamic imports: import('module')
|
|
234
|
+
const dynamicImportRegex = /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
235
|
+
while ((match = dynamicImportRegex.exec(code)) !== null) {
|
|
236
|
+
dependencies.push(match[1]);
|
|
237
|
+
}
|
|
238
|
+
// Require statements: require('module')
|
|
239
|
+
const requireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
240
|
+
while ((match = requireRegex.exec(code)) !== null) {
|
|
241
|
+
dependencies.push(match[1]);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
console.warn('[EnhancedTranspiler] Failed to extract dependencies:', error);
|
|
246
|
+
}
|
|
247
|
+
return [...new Set(dependencies)]; // Remove duplicates
|
|
248
|
+
}
|
|
249
|
+
// Validate transpiled code
|
|
250
|
+
validateTranspiledCode(code) {
|
|
251
|
+
const errors = [];
|
|
252
|
+
try {
|
|
253
|
+
// Basic syntax check
|
|
254
|
+
new Function(code);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
errors.push(`Syntax error: ${error.message}`);
|
|
258
|
+
}
|
|
259
|
+
// Check for common issues
|
|
260
|
+
if (code.includes('undefined') && code.includes('import')) {
|
|
261
|
+
errors.push('Possible import resolution issue detected');
|
|
262
|
+
}
|
|
263
|
+
if (code.includes('require(') && !code.includes('module.exports')) {
|
|
264
|
+
errors.push('CommonJS require() detected in ES module');
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
valid: errors.length === 0,
|
|
268
|
+
errors
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=enhanced-transpiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-transpiler.js","sourceRoot":"","sources":["../src/enhanced-transpiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point detection utility for the preview system
|
|
3
|
+
* Automatically finds or creates appropriate entry points for preview rendering
|
|
4
|
+
*/
|
|
5
|
+
export interface ProjectFile {
|
|
6
|
+
id: string;
|
|
7
|
+
path: string;
|
|
8
|
+
content: string;
|
|
9
|
+
language: string;
|
|
10
|
+
createdAt: number;
|
|
11
|
+
updatedAt: number;
|
|
12
|
+
}
|
|
13
|
+
export interface EntryPointDetection {
|
|
14
|
+
entryPoint: string;
|
|
15
|
+
files: ProjectFile[];
|
|
16
|
+
createdEntry: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Finds or creates an entry point for preview rendering
|
|
20
|
+
*/
|
|
21
|
+
export declare function findOrCreateEntryPoint(files: ProjectFile[]): EntryPointDetection;
|
|
22
|
+
//# sourceMappingURL=entry-point-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-point-detection.d.ts","sourceRoot":"","sources":["../src/entry-point-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;CACtB;AAkCD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,mBAAmB,CA6ChF"}
|