react-client 1.0.37 → 1.0.38

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,13 +1,12 @@
1
1
  /**
2
- * dev.ts — Vite-like dev server for react-client (updated)
2
+ * dev.ts — dev server for react-client
3
3
  *
4
- * - resolves package export fields & subpaths (resolveModuleEntry)
5
4
  * - prebundles deps into .react-client/deps
6
- * - serves /@modules/<dep> (prebundled or on-demand esbuild bundle)
7
- * - serves /src/* with esbuild transform + inline sourcemap
8
- * - serves local overlay runtime at /@runtime/overlay if src/runtime/overlay-runtime.js exists
5
+ * - serves /@modules/<dep>
6
+ * - serves /src/* with esbuild transform & inline sourcemap
9
7
  * - /@source-map returns a snippet for overlay mapping
10
8
  * - HMR broadcast via BroadcastManager (ws)
11
- * - plugin system: onTransform, onHotUpdate, onServe, onServerStart
9
+ *
10
+ * Keep this file linted & typed. Avoids manual react-dom/client hacks.
12
11
  */
13
12
  export default function dev(): Promise<void>;
@@ -1,15 +1,13 @@
1
- // src/cli/commands/dev.ts
2
1
  /**
3
- * dev.ts — Vite-like dev server for react-client (updated)
2
+ * dev.ts — dev server for react-client
4
3
  *
5
- * - resolves package export fields & subpaths (resolveModuleEntry)
6
4
  * - prebundles deps into .react-client/deps
7
- * - serves /@modules/<dep> (prebundled or on-demand esbuild bundle)
8
- * - serves /src/* with esbuild transform + inline sourcemap
9
- * - serves local overlay runtime at /@runtime/overlay if src/runtime/overlay-runtime.js exists
5
+ * - serves /@modules/<dep>
6
+ * - serves /src/* with esbuild transform & inline sourcemap
10
7
  * - /@source-map returns a snippet for overlay mapping
11
8
  * - HMR broadcast via BroadcastManager (ws)
12
- * - plugin system: onTransform, onHotUpdate, onServe, onServerStart
9
+ *
10
+ * Keep this file linted & typed. Avoids manual react-dom/client hacks.
13
11
  */
14
12
  import esbuild from 'esbuild';
15
13
  import connect from 'connect';
@@ -22,27 +20,35 @@ import fs from 'fs-extra';
22
20
  import open from 'open';
23
21
  import chalk from 'chalk';
24
22
  import { execSync } from 'child_process';
25
- import { loadReactClientConfig } from '../../utils/loadConfig.js';
26
23
  import { BroadcastManager } from '../../server/broadcastManager.js';
24
+ import { createRequire } from 'module';
25
+ import { fileURLToPath } from 'url';
26
+ import { dirname, resolve } from 'path';
27
+ const __filename = fileURLToPath(import.meta.url);
28
+ const __dirname = dirname(__filename);
29
+ const loadConfigPath = resolve(__dirname, '../../utils/loadConfig.js');
30
+ const { loadReactClientConfig } = await import(loadConfigPath);
31
+ const require = createRequire(import.meta.url);
27
32
  const RUNTIME_OVERLAY_ROUTE = '/@runtime/overlay';
28
33
  function jsContentType() {
29
34
  return 'application/javascript; charset=utf-8';
30
35
  }
31
36
  /**
32
- * Resolve a package entry robustly:
33
- * - try require.resolve(id)
34
- * - try package.json exports field + subpath resolution
35
- * - fallback to common fields (module/main/browser)
37
+ * Resolve any bare import id robustly:
38
+ * 1. try require.resolve(id)
39
+ * 2. try require.resolve(`${pkg}/${subpath}`)
40
+ * 3. try package.json exports field
41
+ * 4. try common fallback candidates
36
42
  */
37
43
  async function resolveModuleEntry(id, root) {
38
- // quick path
44
+ // quick resolution
39
45
  try {
40
46
  return require.resolve(id, { paths: [root] });
41
47
  }
42
48
  catch {
43
49
  // continue
44
50
  }
45
- // split package root and possible subpath
51
+ // split package root and subpath
46
52
  const parts = id.split('/');
47
53
  const pkgRoot = parts[0].startsWith('@') ? parts.slice(0, 2).join('/') : parts[0];
48
54
  const subPath = parts.slice(pkgRoot.startsWith('@') ? 2 : 1).join('/');
@@ -51,100 +57,120 @@ async function resolveModuleEntry(id, root) {
51
57
  pkgJsonPath = require.resolve(`${pkgRoot}/package.json`, { paths: [root] });
52
58
  }
53
59
  catch {
60
+ // No need to keep unused variable 'err'
54
61
  throw new Error(`Package not found: ${pkgRoot}`);
55
62
  }
56
63
  const pkgDir = path.dirname(pkgJsonPath);
64
+ // Explicitly type pkgJson to avoid 'any'
57
65
  let pkgJson = {};
58
66
  try {
59
- const raw = await fs.readFile(pkgJsonPath, 'utf8');
60
- pkgJson = JSON.parse(raw);
67
+ const pkgContent = await fs.readFile(pkgJsonPath, 'utf8');
68
+ pkgJson = JSON.parse(pkgContent);
61
69
  }
62
70
  catch {
63
- /* ignore */
71
+ // ignore parse or read errors gracefully
64
72
  }
65
- // handle "exports"
73
+ // If exports field exists, try to look up subpath (type-safe, supports conditional exports)
66
74
  if (pkgJson.exports) {
67
75
  const exportsField = pkgJson.exports;
76
+ // If exports is a plain string -> it's the entry
68
77
  if (typeof exportsField === 'string') {
69
- if (!subPath) {
70
- const candidate = path.resolve(pkgDir, exportsField);
71
- if (await fs.pathExists(candidate))
72
- return candidate;
73
- }
78
+ if (!subPath)
79
+ return path.resolve(pkgDir, exportsField);
74
80
  }
75
81
  else if (exportsField && typeof exportsField === 'object') {
82
+ // Normalize to a record so we can index it safely
76
83
  const exportsMap = exportsField;
77
- const candidates = [];
84
+ // Try candidates in order: explicit subpath, index, fallback
85
+ const keyCandidates = [];
78
86
  if (subPath) {
79
- candidates.push(`./${subPath}`, `./${subPath}.js`, `./${subPath}.mjs`);
87
+ keyCandidates.push(`./${subPath}`, `./${subPath}.js`, `./${subPath}.mjs`);
80
88
  }
81
- candidates.push('.', './index.js', './index.mjs');
82
- for (const key of candidates) {
89
+ keyCandidates.push('.', './index.js', './index.mjs');
90
+ for (const key of keyCandidates) {
83
91
  if (!(key in exportsMap))
84
92
  continue;
85
93
  const entry = exportsMap[key];
94
+ // entry may be string or object like { import: "...", require: "..." }
86
95
  let target;
87
- if (typeof entry === 'string')
96
+ if (typeof entry === 'string') {
88
97
  target = entry;
98
+ }
89
99
  else if (entry && typeof entry === 'object') {
90
- const obj = entry;
91
- if (typeof obj.import === 'string')
92
- target = obj.import;
93
- else if (typeof obj.default === 'string')
94
- target = obj.default;
100
+ const entryObj = entry;
101
+ // Prefer "import" field for ESM consumers, then "default", then any string-ish value
102
+ if (typeof entryObj.import === 'string')
103
+ target = entryObj.import;
104
+ else if (typeof entryObj.default === 'string')
105
+ target = entryObj.default;
95
106
  else {
96
- for (const k of Object.keys(obj)) {
97
- if (typeof obj[k] === 'string') {
98
- target = obj[k];
107
+ // If the entry object itself is a conditional map (like {"node": "...", "browser": "..."}),
108
+ // attempt to pick any string value present.
109
+ for (const k of Object.keys(entryObj)) {
110
+ if (typeof entryObj[k] === 'string') {
111
+ target = entryObj[k];
99
112
  break;
100
113
  }
101
114
  }
102
115
  }
103
116
  }
104
- if (!target)
117
+ if (!target || typeof target !== 'string')
105
118
  continue;
119
+ // Normalize relative paths in exports (remove leading ./)
106
120
  const normalized = target.replace(/^\.\//, '');
107
- const abs = path.isAbsolute(normalized) ? normalized : path.resolve(pkgDir, normalized);
108
- if (await fs.pathExists(abs))
121
+ const abs = path.isAbsolute(normalized)
122
+ ? normalized
123
+ : path.resolve(pkgDir, normalized);
124
+ if (await fs.pathExists(abs)) {
109
125
  return abs;
126
+ }
110
127
  }
111
128
  }
112
129
  }
113
- // try package subpath resolution
130
+ // Try resolved subpath directly (pkg/subpath)
114
131
  if (subPath) {
115
132
  try {
116
- return require.resolve(`${pkgRoot}/${subPath}`, { paths: [root] });
133
+ const candidate = require.resolve(`${pkgRoot}/${subPath}`, { paths: [root] });
134
+ return candidate;
117
135
  }
118
136
  catch {
119
- // check common candidates under package dir
120
- const cand = [
137
+ // fallback to searching common candidates under package dir
138
+ const candPaths = [
121
139
  path.join(pkgDir, subPath),
122
- path.join(pkgDir, `${subPath}.js`),
123
- path.join(pkgDir, `${subPath}.mjs`),
140
+ path.join(pkgDir, subPath + '.js'),
141
+ path.join(pkgDir, subPath + '.mjs'),
124
142
  path.join(pkgDir, subPath, 'index.js'),
125
143
  path.join(pkgDir, subPath, 'index.mjs'),
126
144
  ];
127
- for (const c of cand) {
145
+ for (const c of candPaths) {
128
146
  if (await fs.pathExists(c))
129
147
  return c;
130
148
  }
131
149
  }
132
150
  }
133
- // check common package fields
134
- const maybeFields = [
151
+ // Try package's main/module/browser fields safely (typed as string)
152
+ const candidateFields = [
135
153
  typeof pkgJson.module === 'string' ? pkgJson.module : undefined,
136
154
  typeof pkgJson.browser === 'string' ? pkgJson.browser : undefined,
137
155
  typeof pkgJson.main === 'string' ? pkgJson.main : undefined,
138
156
  ];
139
- for (const f of maybeFields) {
140
- if (!f)
157
+ for (const field of candidateFields) {
158
+ if (!field)
141
159
  continue;
142
- const abs = path.isAbsolute(f) ? f : path.resolve(pkgDir, f);
160
+ const abs = path.isAbsolute(field) ? field : path.resolve(pkgDir, field);
143
161
  if (await fs.pathExists(abs))
144
162
  return abs;
145
163
  }
146
- throw new Error(`Could not resolve module entry for "${id}"`);
164
+ throw new Error(`Could not resolve module entry for ${id}`);
147
165
  }
166
+ /**
167
+ * Wrap the built module for subpath imports:
168
+ * For requests like "/@modules/react-dom/client" — we bundle the resolved file
169
+ * and return it. If the user requested the package root instead, the resolved
170
+ * bundle is returned directly.
171
+ *
172
+ * No hardcoded special cases.
173
+ */
148
174
  function normalizeCacheKey(id) {
149
175
  return id.replace(/[\\/]/g, '_');
150
176
  }
@@ -153,30 +179,33 @@ export default async function dev() {
153
179
  const userConfig = (await loadReactClientConfig(root));
154
180
  const appRoot = path.resolve(root, userConfig.root || '.');
155
181
  const defaultPort = userConfig.server?.port ?? 2202;
182
+ // cache dir for prebundled deps
156
183
  const cacheDir = path.join(appRoot, '.react-client', 'deps');
157
184
  await fs.ensureDir(cacheDir);
158
- // Detect entry
159
- const possibleEntries = ['src/main.tsx', 'src/main.jsx'].map((p) => path.join(appRoot, p));
160
- const entry = possibleEntries.find((p) => fs.existsSync(p));
185
+ // Detect entry (main.tsx / main.jsx)
186
+ const possible = ['src/main.tsx', 'src/main.jsx'].map((p) => path.join(appRoot, p));
187
+ const entry = possible.find((p) => fs.existsSync(p));
161
188
  if (!entry) {
162
189
  console.error(chalk.red('❌ Entry not found: src/main.tsx or src/main.jsx'));
163
190
  process.exit(1);
164
191
  }
165
192
  const indexHtml = path.join(appRoot, 'index.html');
166
- // Port selection
193
+ // Select port
167
194
  const availablePort = await detectPort(defaultPort);
168
195
  const port = availablePort;
169
196
  if (availablePort !== defaultPort) {
170
- const res = await prompts({
197
+ const response = await prompts({
171
198
  type: 'confirm',
172
199
  name: 'useNewPort',
173
200
  message: `Port ${defaultPort} is occupied. Use ${availablePort} instead?`,
174
201
  initial: true,
175
202
  });
176
- if (!res.useNewPort)
203
+ if (!response.useNewPort) {
204
+ console.log('🛑 Dev server cancelled.');
177
205
  process.exit(0);
206
+ }
178
207
  }
179
- // ensure react-refresh runtime present (templates often import it)
208
+ // Ensure react-refresh runtime available (used by many templates)
180
209
  try {
181
210
  require.resolve('react-refresh/runtime');
182
211
  }
@@ -189,10 +218,10 @@ export default async function dev() {
189
218
  });
190
219
  }
191
220
  catch {
192
- console.warn(chalk.yellow('⚠️ auto-install failed — please install react-refresh manually.'));
221
+ console.warn(chalk.yellow('⚠️ automatic install of react-refresh failed; continuing without it.'));
193
222
  }
194
223
  }
195
- // Core plugin(s)
224
+ // Plugin system (core + user)
196
225
  const corePlugins = [
197
226
  {
198
227
  name: 'css-hmr',
@@ -201,10 +230,10 @@ export default async function dev() {
201
230
  const escaped = JSON.stringify(code);
202
231
  return `
203
232
  const css = ${escaped};
204
- const style = document.createElement('style');
233
+ const style = document.createElement("style");
205
234
  style.textContent = css;
206
235
  document.head.appendChild(style);
207
- if (import.meta.hot) import.meta.hot.accept();
236
+ import.meta.hot?.accept();
208
237
  `;
209
238
  }
210
239
  return code;
@@ -213,10 +242,10 @@ export default async function dev() {
213
242
  ];
214
243
  const userPlugins = Array.isArray(userConfig.plugins) ? userConfig.plugins : [];
215
244
  const plugins = [...corePlugins, ...userPlugins];
216
- // app + caches
245
+ // App + caches
217
246
  const app = connect();
218
247
  const transformCache = new Map();
219
- // dependency analyzer for prebundling
248
+ // Helper: recursively analyze dependency graph for prebundling (bare imports)
220
249
  async function analyzeGraph(file, seen = new Set()) {
221
250
  if (seen.has(file))
222
251
  return seen;
@@ -236,27 +265,30 @@ export default async function dev() {
236
265
  await analyzeGraph(resolved, seen);
237
266
  }
238
267
  catch {
268
+ // bare dependency (node_modules) - track name
239
269
  seen.add(dep);
240
270
  }
241
271
  }
242
272
  }
243
273
  catch {
244
- // ignore
274
+ // ignore unreadable files
245
275
  }
246
276
  return seen;
247
277
  }
278
+ // Prebundle dependencies into cache dir (parallel)
248
279
  async function prebundleDeps(deps) {
249
280
  if (!deps.size)
250
281
  return;
251
- const cached = new Set((await fs.readdir(cacheDir)).map((f) => f.replace(/\.js$/, '')));
252
- const missing = [...deps].filter((d) => !cached.has(d.replace(/\//g, '_')));
282
+ const existingFiles = await fs.readdir(cacheDir);
283
+ const existing = new Set(existingFiles.map((f) => f.replace(/\.js$/, '')));
284
+ const missing = [...deps].filter((d) => !existing.has(d));
253
285
  if (!missing.length)
254
286
  return;
255
287
  console.log(chalk.cyan('📦 Prebundling:'), missing.join(', '));
256
288
  await Promise.all(missing.map(async (dep) => {
257
289
  try {
258
290
  const entryPoint = require.resolve(dep, { paths: [appRoot] });
259
- const outFile = path.join(cacheDir, dep.replace(/\//g, '_') + '.js');
291
+ const outFile = path.join(cacheDir, normalizeCacheKey(dep) + '.js');
260
292
  await esbuild.build({
261
293
  entryPoints: [entryPoint],
262
294
  bundle: true,
@@ -273,10 +305,10 @@ export default async function dev() {
273
305
  }
274
306
  }));
275
307
  }
276
- // initial prebundle
308
+ // Build initial prebundle graph from entry
277
309
  const depsSet = await analyzeGraph(entry);
278
310
  await prebundleDeps(depsSet);
279
- // re-prebundle on package.json change
311
+ // Watch package.json for changes to re-prebundle
280
312
  const pkgPath = path.join(appRoot, 'package.json');
281
313
  if (await fs.pathExists(pkgPath)) {
282
314
  chokidar.watch(pkgPath).on('change', async () => {
@@ -285,7 +317,7 @@ export default async function dev() {
285
317
  await prebundleDeps(newDeps);
286
318
  });
287
319
  }
288
- // --- Serve /@modules/
320
+ // --- Serve /@modules/<dep> (prebundled or on-demand esbuild bundle)
289
321
  app.use((async (req, res, next) => {
290
322
  const url = req.url ?? '';
291
323
  if (!url.startsWith('/@modules/'))
@@ -301,7 +333,7 @@ export default async function dev() {
301
333
  res.setHeader('Content-Type', jsContentType());
302
334
  return res.end(await fs.readFile(cacheFile, 'utf8'));
303
335
  }
304
- // Resolve real entry (handles exports + subpaths)
336
+ // Resolve the actual entry file (handles subpaths & package exports)
305
337
  const entryFile = await resolveModuleEntry(id, appRoot);
306
338
  const result = await esbuild.build({
307
339
  entryPoints: [entryFile],
@@ -312,6 +344,7 @@ export default async function dev() {
312
344
  target: ['es2020'],
313
345
  });
314
346
  const output = result.outputFiles?.[0]?.text ?? '';
347
+ // Write cache and respond
315
348
  await fs.writeFile(cacheFile, output, 'utf8');
316
349
  res.setHeader('Content-Type', jsContentType());
317
350
  res.end(output);
@@ -321,27 +354,19 @@ export default async function dev() {
321
354
  res.end(`// Failed to resolve module ${id}: ${err.message}`);
322
355
  }
323
356
  }));
324
- // --- Serve overlay runtime: prefer local src/runtime/overlay-runtime.js else inline fallback
325
- const localOverlayPath = path.join(appRoot, 'src', 'runtime', 'overlay-runtime.js');
326
- app.use(async (req, res, next) => {
327
- if (req.url !== RUNTIME_OVERLAY_ROUTE)
328
- return next();
329
- try {
330
- if (await fs.pathExists(localOverlayPath)) {
331
- res.setHeader('Content-Type', jsContentType());
332
- return res.end(await fs.readFile(localOverlayPath, 'utf8'));
333
- }
334
- // Inline fallback runtime (minimal)
335
- const inlineRuntime = `
336
- /* Inline overlay fallback (auto-generated) */
357
+ // --- Serve runtime overlay (inline, no external dependencies)
358
+ const OVERLAY_RUNTIME = `
359
+ /* inline overlay runtime - served at ${RUNTIME_OVERLAY_ROUTE} */
337
360
  ${(() => {
338
- return `
361
+ // small helper — embed as a string
362
+ return `
339
363
  const overlayId = "__rc_error_overlay__";
340
- (function(){
341
- const style = document.createElement('style');
364
+ (function(){
365
+ const style = document.createElement("style");
342
366
  style.textContent = \`
343
367
  #\${overlayId}{position:fixed;inset:0;background:rgba(0,0,0,0.9);color:#fff;font-family:Menlo,Consolas,monospace;font-size:14px;z-index:999999;overflow:auto;padding:24px;}
344
368
  #\${overlayId} h2{color:#ff6b6b;margin-bottom:16px;}
369
+ #\${overlayId} pre{background:rgba(255,255,255,0.06);padding:12px;border-radius:6px;overflow:auto;}
345
370
  .frame-file{color:#ffa500;cursor:pointer;font-weight:bold;margin-bottom:4px;}
346
371
  .line-number{opacity:0.6;margin-right:10px;display:inline-block;width:2em;text-align:right;}
347
372
  \`;
@@ -349,61 +374,67 @@ const overlayId = "__rc_error_overlay__";
349
374
  async function mapStackFrame(frame){
350
375
  const m = frame.match(/(\\/src\\/[^\s:]+):(\\d+):(\\d+)/);
351
376
  if(!m) return frame;
352
- const [,file,line] = m;
377
+ const [,file,line,col] = m;
353
378
  try{
354
- const resp = await fetch(\`/@source-map?file=\${file}&line=\${line}\`);
379
+ const resp = await fetch(\`/@source-map?file=\${file}&line=\${line}&column=\${col}\`);
355
380
  if(!resp.ok) return frame;
356
381
  const pos = await resp.json();
357
382
  if(pos.source) return pos;
358
383
  }catch(e){}
359
384
  return frame;
360
385
  }
386
+ function highlightSimple(s){
387
+ return s.replace(/(const|let|var|function|return|import|from|export|class|new|await|async|if|else|for|while|try|catch|throw)/g,'<span style="color:#ffb86c">$1</span>');
388
+ }
361
389
  async function renderOverlay(err){
362
390
  const overlay = document.getElementById(overlayId) || document.body.appendChild(Object.assign(document.createElement("div"),{id:overlayId}));
363
391
  overlay.innerHTML = "";
364
392
  const title = document.createElement("h2");
365
393
  title.textContent = "🔥 " + (err.message || "Error");
366
394
  overlay.appendChild(title);
367
- const frames = (err.stack||"").split("\\n").filter(l=>/src\\//.test(l));
368
- for(const f of frames){
369
- const mapped = await mapStackFrame(f);
370
- if(typeof mapped === 'string') continue;
395
+ const frames = (err.stack||"").split("\\n").filter(l => /src\\//.test(l));
396
+ for(const frame of frames){
397
+ const mapped = await mapStackFrame(frame);
398
+ if(typeof mapped === "string") continue;
399
+ const frameEl = document.createElement("div");
371
400
  const link = document.createElement("div");
372
401
  link.className = "frame-file";
373
402
  link.textContent = \`\${mapped.source||mapped.file}:\${mapped.line}:\${mapped.column}\`;
374
- overlay.appendChild(link);
403
+ link.onclick = ()=>window.open("vscode://file/"+(mapped.source||mapped.file)+":"+mapped.line);
404
+ frameEl.appendChild(link);
375
405
  if(mapped.snippet){
376
406
  const pre = document.createElement("pre");
377
- pre.innerHTML = mapped.snippet;
378
- overlay.appendChild(pre);
407
+ pre.innerHTML = highlightSimple(mapped.snippet);
408
+ frameEl.appendChild(pre);
379
409
  }
410
+ overlay.appendChild(frameEl);
380
411
  }
381
412
  }
382
413
  window.showErrorOverlay = (err)=>renderOverlay(err);
383
414
  window.clearErrorOverlay = ()=>document.getElementById(overlayId)?.remove();
384
- window.addEventListener("error", e=>window.showErrorOverlay?.(e.error||e));
385
- window.addEventListener("unhandledrejection", e=>window.showErrorOverlay?.(e.reason||e));
415
+ window.addEventListener("error", e => window.showErrorOverlay?.(e.error || e));
416
+ window.addEventListener("unhandledrejection", e => window.showErrorOverlay?.(e.reason || e));
386
417
  })();
387
418
  `;
388
- })()}
419
+ })()}
389
420
  `;
421
+ app.use(async (req, res, next) => {
422
+ if (req.url === RUNTIME_OVERLAY_ROUTE) {
390
423
  res.setHeader('Content-Type', jsContentType());
391
- return res.end(inlineRuntime);
392
- }
393
- catch (err) {
394
- res.writeHead(500);
395
- res.end(`// overlay serve error: ${err.message}`);
424
+ return res.end(OVERLAY_RUNTIME);
396
425
  }
426
+ next();
397
427
  });
398
- // --- /@source-map: return snippet around requested line
428
+ // --- minimal /@source-map: return snippet around requested line of original source file
399
429
  app.use((async (req, res, next) => {
400
430
  const url = req.url ?? '';
401
431
  if (!url.startsWith('/@source-map'))
402
432
  return next();
403
433
  try {
404
- const parsed = new URL(url, `http://localhost:${port}`);
434
+ const parsed = new URL(req.url ?? '', `http://localhost:${port}`);
405
435
  const file = parsed.searchParams.get('file') ?? '';
406
- const lineNum = Number(parsed.searchParams.get('line') ?? '0') || 0;
436
+ const lineStr = parsed.searchParams.get('line') ?? '0';
437
+ const lineNum = Number(lineStr) || 0;
407
438
  if (!file) {
408
439
  res.writeHead(400);
409
440
  return res.end('{}');
@@ -440,40 +471,33 @@ const overlayId = "__rc_error_overlay__";
440
471
  if (!url.startsWith('/src/') && !url.endsWith('.css'))
441
472
  return next();
442
473
  const raw = decodeURIComponent((req.url ?? '').split('?')[0]);
443
- const filePathBase = path.join(appRoot, raw.replace(/^\//, ''));
474
+ const filePath = path.join(appRoot, raw.replace(/^\//, ''));
475
+ // Try file extensions if not exact file
444
476
  const exts = ['', '.tsx', '.ts', '.jsx', '.js', '.css'];
445
477
  let found = '';
446
478
  for (const ext of exts) {
447
- if (await fs.pathExists(filePathBase + ext)) {
448
- found = filePathBase + ext;
479
+ if (await fs.pathExists(filePath + ext)) {
480
+ found = filePath + ext;
449
481
  break;
450
482
  }
451
483
  }
452
484
  if (!found)
453
485
  return next();
454
486
  try {
455
- // cached transform
456
- if (transformCache.has(found)) {
457
- res.setHeader('Content-Type', jsContentType());
458
- res.end(transformCache.get(found));
459
- return;
460
- }
461
487
  let code = await fs.readFile(found, 'utf8');
462
- // rewrite bare imports to /@modules/*
488
+ // rewrite bare imports -> /@modules/<dep>
463
489
  code = code
464
490
  .replace(/\bfrom\s+['"]([^'".\/][^'"]*)['"]/g, (_m, dep) => `from "/@modules/${dep}"`)
465
491
  .replace(/\bimport\(['"]([^'".\/][^'"]*)['"]\)/g, (_m, dep) => `import("/@modules/${dep}")`);
466
- // plugin transforms
492
+ // run plugin transforms
467
493
  for (const p of plugins) {
468
494
  if (p.onTransform) {
469
- // allow plugin transform to return string
470
- // eslint-disable-next-line no-await-in-loop
471
495
  const out = await p.onTransform(code, found);
472
496
  if (typeof out === 'string')
473
497
  code = out;
474
498
  }
475
499
  }
476
- // loader
500
+ // choose loader by extension
477
501
  const ext = path.extname(found).toLowerCase();
478
502
  const loader = ext === '.ts' ? 'ts' : ext === '.tsx' ? 'tsx' : ext === '.jsx' ? 'jsx' : 'js';
479
503
  const result = await esbuild.transform(code, {
@@ -491,7 +515,7 @@ const overlayId = "__rc_error_overlay__";
491
515
  res.end(`// transform error: ${e.message}`);
492
516
  }
493
517
  }));
494
- // --- Serve index.html and inject overlay + HMR client (if not already)
518
+ // --- Serve index.html with overlay + HMR client injection
495
519
  app.use((async (req, res, next) => {
496
520
  const url = req.url ?? '';
497
521
  if (url !== '/' && url !== '/index.html')
@@ -502,6 +526,7 @@ const overlayId = "__rc_error_overlay__";
502
526
  }
503
527
  try {
504
528
  let html = await fs.readFile(indexHtml, 'utf8');
529
+ // inject overlay runtime and HMR client if not already present
505
530
  if (!html.includes(RUNTIME_OVERLAY_ROUTE)) {
506
531
  html = html.replace('</body>', `\n<script type="module" src="${RUNTIME_OVERLAY_ROUTE}"></script>\n<script type="module">
507
532
  const ws = new WebSocket("ws://" + location.host);
@@ -524,32 +549,30 @@ const overlayId = "__rc_error_overlay__";
524
549
  res.end(`// html read error: ${err.message}`);
525
550
  }
526
551
  }));
527
- // HMR WebSocket + BroadcastManager
552
+ // --- HMR WebSocket server
528
553
  const server = http.createServer(app);
529
554
  const broadcaster = new BroadcastManager(server);
530
- // Watcher for src plugin onHotUpdate + broadcast update
555
+ // Watch files and trigger plugin onHotUpdate + broadcast HMR message
531
556
  const watcher = chokidar.watch(path.join(appRoot, 'src'), { ignoreInitial: true });
532
557
  watcher.on('change', async (file) => {
533
558
  transformCache.delete(file);
559
+ // plugin hook onHotUpdate optionally
534
560
  for (const p of plugins) {
535
561
  if (p.onHotUpdate) {
536
562
  try {
537
- // plugin receives broadcast helper
538
- // cast to PluginHotUpdateContext (safe wrapper)
539
- // eslint-disable-next-line no-await-in-loop
540
563
  await p.onHotUpdate(file, {
541
- broadcast: (m) => {
542
- broadcaster.broadcast(m);
564
+ // plugin only needs broadcast in most cases
565
+ broadcast: (msg) => {
566
+ broadcaster.broadcast(msg);
543
567
  },
544
568
  });
545
569
  }
546
570
  catch (err) {
547
- // log plugin error but continue
548
- // eslint-disable-next-line no-console
549
571
  console.warn('plugin onHotUpdate error:', err.message);
550
572
  }
551
573
  }
552
574
  }
575
+ // default: broadcast update for changed file
553
576
  broadcaster.broadcast({
554
577
  type: 'update',
555
578
  path: '/' + path.relative(appRoot, file).replace(/\\/g, '/'),
@@ -559,40 +582,20 @@ const overlayId = "__rc_error_overlay__";
559
582
  server.listen(port, async () => {
560
583
  const url = `http://localhost:${port}`;
561
584
  console.log(chalk.cyan.bold('\n🚀 React Client Dev Server'));
562
- console.log(chalk.gray('──────────────────────────────'));
563
585
  console.log(chalk.green(`⚡ Running at: ${url}`));
564
- // open if not explicitly disabled. using safe cast to allow unknown shape of userConfig.server
565
- const shouldOpen = userConfig.server?.open !== false;
566
- if (shouldOpen) {
586
+ if (userConfig.server?.open !== false) {
567
587
  try {
568
588
  await open(url);
569
589
  }
570
590
  catch {
571
- /* ignore */
572
- }
573
- }
574
- const ctx = {
575
- root: appRoot,
576
- outDir: cacheDir,
577
- app,
578
- wss: broadcaster.wss,
579
- httpServer: server,
580
- broadcast: (m) => broadcaster.broadcast(m),
581
- };
582
- // plugin serve/start hooks
583
- for (const p of plugins) {
584
- if (p.onServe) {
585
- await p.onServe(ctx);
586
- }
587
- if (p.onServerStart) {
588
- await p.onServerStart(ctx);
591
+ // ignore open errors
589
592
  }
590
593
  }
591
594
  });
592
595
  // graceful shutdown
593
596
  process.on('SIGINT', async () => {
594
597
  console.log(chalk.red('\n🛑 Shutting down...'));
595
- watcher.close();
598
+ await watcher.close();
596
599
  broadcaster.close();
597
600
  server.close();
598
601
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,19 @@
1
- import { WebSocketServer, WebSocket } from 'ws';
1
+ import { WebSocket as NodeWebSocket } from 'ws';
2
2
  import http from 'http';
3
3
  /**
4
- * Generic broadcast message type used across dev runtime and plugins.
5
- * The index signature allows plugins to attach arbitrary keys.
4
+ * Base broadcast message that plugins may extend.
5
+ * Includes an index signature so plugin-defined keys are allowed.
6
6
  */
7
- export type BroadcastMessage = {
7
+ export interface BroadcastMessage {
8
+ /** At minimum every message must have a type string */
8
9
  type: string;
9
10
  [key: string]: unknown;
10
- };
11
+ }
12
+ /**
13
+ * Core HMR message shape — narrows `type` to known HMR events
14
+ * and adds optional fields. It extends BroadcastMessage so it's
15
+ * assignable to the generic constraint.
16
+ */
11
17
  export interface HMRMessage extends BroadcastMessage {
12
18
  type: 'update' | 'error' | 'reload';
13
19
  path?: string;
@@ -15,23 +21,15 @@ export interface HMRMessage extends BroadcastMessage {
15
21
  stack?: string;
16
22
  }
17
23
  /**
18
- * BroadcastManager — shared WebSocket utility for dev/preview/ssr servers.
19
- * Uses `ws` WebSocket instances (Node) not DOM WebSocket.
24
+ * BroadcastManager — Shared WebSocket utility for dev, preview, and SSR servers.
25
+ * Generic over message type T which defaults to HMRMessage.
20
26
  */
21
- export declare class BroadcastManager {
22
- wss: WebSocketServer;
27
+ export declare class BroadcastManager<T extends BroadcastMessage = HMRMessage> {
28
+ private wss;
23
29
  private clients;
24
30
  constructor(server: http.Server);
25
- /**
26
- * Broadcast a message to all connected clients.
27
- */
28
- broadcast(msg: BroadcastMessage): void;
29
- /**
30
- * Send a message to a single client (ws instance from 'ws').
31
- */
32
- send(ws: WebSocket, msg: BroadcastMessage): void;
33
- /**
34
- * Close all WebSocket connections and server.
35
- */
31
+ broadcast(msg: T): void;
32
+ send(ws: NodeWebSocket, msg: T): void;
33
+ getClientCount(): number;
36
34
  close(): void;
37
35
  }
@@ -1,9 +1,8 @@
1
- // src/server/broadcastManager.ts
2
- import { WebSocketServer, WebSocket } from 'ws';
1
+ import { WebSocketServer, WebSocket as NodeWebSocket } from 'ws';
3
2
  import chalk from 'chalk';
4
3
  /**
5
- * BroadcastManager — shared WebSocket utility for dev/preview/ssr servers.
6
- * Uses `ws` WebSocket instances (Node) not DOM WebSocket.
4
+ * BroadcastManager — Shared WebSocket utility for dev, preview, and SSR servers.
5
+ * Generic over message type T which defaults to HMRMessage.
7
6
  */
8
7
  export class BroadcastManager {
9
8
  wss;
@@ -12,58 +11,39 @@ export class BroadcastManager {
12
11
  this.wss = new WebSocketServer({ server });
13
12
  this.wss.on('connection', (ws) => {
14
13
  this.clients.add(ws);
15
- console.log(chalk.gray('🔌 HMR client connected'));
16
14
  ws.on('close', () => {
17
15
  this.clients.delete(ws);
18
- console.log(chalk.gray('❎ HMR client disconnected'));
19
16
  });
20
17
  ws.on('error', (err) => {
21
- console.error(chalk.red('⚠️ WebSocket error:'), err?.message ?? err);
18
+ console.error(chalk.red('⚠️ WebSocket error:'), err.message);
22
19
  });
23
20
  });
24
21
  }
25
- /**
26
- * Broadcast a message to all connected clients.
27
- */
28
22
  broadcast(msg) {
29
23
  const data = JSON.stringify(msg);
30
24
  for (const client of this.clients) {
31
- // ws.OPEN === 1
32
- if (client.readyState === WebSocket.OPEN) {
33
- try {
34
- client.send(data);
35
- }
36
- catch {
37
- // ignore send errors per-client
38
- }
25
+ if (client.readyState === NodeWebSocket.OPEN) {
26
+ client.send(data);
39
27
  }
40
28
  }
41
29
  }
42
- /**
43
- * Send a message to a single client (ws instance from 'ws').
44
- */
45
30
  send(ws, msg) {
46
- if (ws.readyState === WebSocket.OPEN) {
31
+ if (ws.readyState === NodeWebSocket.OPEN) {
47
32
  ws.send(JSON.stringify(msg));
48
33
  }
49
34
  }
50
- /**
51
- * Close all WebSocket connections and server.
52
- */
35
+ getClientCount() {
36
+ return this.clients.size;
37
+ }
53
38
  close() {
54
- try {
55
- console.log(chalk.red('🛑 Closing WebSocket connections...'));
56
- this.wss.close();
57
- }
58
- catch {
59
- /* ignore */
60
- }
39
+ console.log(chalk.red('🛑 Closing WebSocket connections...'));
40
+ this.wss.close();
61
41
  for (const ws of this.clients) {
62
42
  try {
63
43
  ws.close();
64
44
  }
65
45
  catch {
66
- // ignore per-client close errors
46
+ // ignore
67
47
  }
68
48
  }
69
49
  this.clients.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"broadcastManager.js","sourceRoot":"","sources":["../../src/server/broadcastManager.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEhD,OAAO,KAAK,MAAM,OAAO,CAAC;AAkB1B;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACpB,GAAG,CAAkB;IACpB,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IAE5C,YAAY,MAAmB;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAa,EAAE,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAEnD,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAqB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,gBAAgB;YAChB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,gCAAgC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAa,EAAE,GAAqB;QACvC,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"broadcastManager.js","sourceRoot":"","sources":["../../src/server/broadcastManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,IAAI,CAAC;AAEjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAwB1B;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,GAAG,CAAkB;IACrB,OAAO,GAAuB,IAAI,GAAG,EAAE,CAAC;IAEhD,YAAY,MAAmB;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAiB,EAAE,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAErB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,GAAM;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,UAAU,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,EAAiB,EAAE,GAAM;QAC5B,IAAI,EAAE,CAAC,UAAU,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YACzC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-client",
3
- "version": "1.0.37",
3
+ "version": "1.0.38",
4
4
  "description": "react-client is a lightweight CLI and runtime for building React apps with fast iteration.",
5
5
  "license": "MIT",
6
6
  "author": "Venkatesh Sundaram",