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.
- package/dist/cli/commands/dev.d.ts +5 -6
- package/dist/cli/commands/dev.js +159 -156
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/server/broadcastManager.d.ts +18 -20
- package/dist/server/broadcastManager.js +13 -33
- package/dist/server/broadcastManager.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dev.ts —
|
|
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>
|
|
7
|
-
* - serves /src/* with esbuild transform
|
|
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
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* Keep this file linted & typed. Avoids manual react-dom/client hacks.
|
|
12
11
|
*/
|
|
13
12
|
export default function dev(): Promise<void>;
|
package/dist/cli/commands/dev.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
// src/cli/commands/dev.ts
|
|
2
1
|
/**
|
|
3
|
-
* dev.ts —
|
|
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>
|
|
8
|
-
* - serves /src/* with esbuild transform
|
|
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
|
-
*
|
|
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
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
|
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
|
|
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
|
|
60
|
-
pkgJson = JSON.parse(
|
|
67
|
+
const pkgContent = await fs.readFile(pkgJsonPath, 'utf8');
|
|
68
|
+
pkgJson = JSON.parse(pkgContent);
|
|
61
69
|
}
|
|
62
70
|
catch {
|
|
63
|
-
|
|
71
|
+
// ignore parse or read errors gracefully
|
|
64
72
|
}
|
|
65
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
84
|
+
// Try candidates in order: explicit subpath, index, fallback
|
|
85
|
+
const keyCandidates = [];
|
|
78
86
|
if (subPath) {
|
|
79
|
-
|
|
87
|
+
keyCandidates.push(`./${subPath}`, `./${subPath}.js`, `./${subPath}.mjs`);
|
|
80
88
|
}
|
|
81
|
-
|
|
82
|
-
for (const key of
|
|
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
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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)
|
|
108
|
-
|
|
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
|
-
//
|
|
130
|
+
// Try resolved subpath directly (pkg/subpath)
|
|
114
131
|
if (subPath) {
|
|
115
132
|
try {
|
|
116
|
-
|
|
133
|
+
const candidate = require.resolve(`${pkgRoot}/${subPath}`, { paths: [root] });
|
|
134
|
+
return candidate;
|
|
117
135
|
}
|
|
118
136
|
catch {
|
|
119
|
-
//
|
|
120
|
-
const
|
|
137
|
+
// fallback to searching common candidates under package dir
|
|
138
|
+
const candPaths = [
|
|
121
139
|
path.join(pkgDir, subPath),
|
|
122
|
-
path.join(pkgDir,
|
|
123
|
-
path.join(pkgDir,
|
|
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
|
|
145
|
+
for (const c of candPaths) {
|
|
128
146
|
if (await fs.pathExists(c))
|
|
129
147
|
return c;
|
|
130
148
|
}
|
|
131
149
|
}
|
|
132
150
|
}
|
|
133
|
-
//
|
|
134
|
-
const
|
|
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
|
|
140
|
-
if (!
|
|
157
|
+
for (const field of candidateFields) {
|
|
158
|
+
if (!field)
|
|
141
159
|
continue;
|
|
142
|
-
const abs = path.isAbsolute(
|
|
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
|
|
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
|
|
160
|
-
const entry =
|
|
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
|
-
//
|
|
193
|
+
// Select port
|
|
167
194
|
const availablePort = await detectPort(defaultPort);
|
|
168
195
|
const port = availablePort;
|
|
169
196
|
if (availablePort !== defaultPort) {
|
|
170
|
-
const
|
|
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 (!
|
|
203
|
+
if (!response.useNewPort) {
|
|
204
|
+
console.log('🛑 Dev server cancelled.');
|
|
177
205
|
process.exit(0);
|
|
206
|
+
}
|
|
178
207
|
}
|
|
179
|
-
//
|
|
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('⚠️
|
|
221
|
+
console.warn(chalk.yellow('⚠️ automatic install of react-refresh failed; continuing without it.'));
|
|
193
222
|
}
|
|
194
223
|
}
|
|
195
|
-
//
|
|
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(
|
|
233
|
+
const style = document.createElement("style");
|
|
205
234
|
style.textContent = css;
|
|
206
235
|
document.head.appendChild(style);
|
|
207
|
-
|
|
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
|
-
//
|
|
245
|
+
// App + caches
|
|
217
246
|
const app = connect();
|
|
218
247
|
const transformCache = new Map();
|
|
219
|
-
// dependency
|
|
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
|
|
252
|
-
const
|
|
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
|
|
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
|
-
//
|
|
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
|
|
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
|
|
325
|
-
const
|
|
326
|
-
|
|
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
|
-
|
|
361
|
+
// small helper — embed as a string
|
|
362
|
+
return `
|
|
339
363
|
const overlayId = "__rc_error_overlay__";
|
|
340
|
-
(function(){
|
|
341
|
-
const style = document.createElement(
|
|
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
|
|
368
|
-
for(const
|
|
369
|
-
const mapped = await mapStackFrame(
|
|
370
|
-
if(typeof mapped ===
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
448
|
-
found =
|
|
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
|
|
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
|
|
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
|
|
552
|
+
// --- HMR WebSocket server
|
|
528
553
|
const server = http.createServer(app);
|
|
529
554
|
const broadcaster = new BroadcastManager(server);
|
|
530
|
-
//
|
|
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
|
|
542
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
1
|
+
import { WebSocket as NodeWebSocket } from 'ws';
|
|
2
2
|
import http from 'http';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Base broadcast message that plugins may extend.
|
|
5
|
+
* Includes an index signature so plugin-defined keys are allowed.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
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 —
|
|
19
|
-
*
|
|
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
|
|
27
|
+
export declare class BroadcastManager<T extends BroadcastMessage = HMRMessage> {
|
|
28
|
+
private wss;
|
|
23
29
|
private clients;
|
|
24
30
|
constructor(server: http.Server);
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
2
|
-
import { WebSocketServer, WebSocket } from 'ws';
|
|
1
|
+
import { WebSocketServer, WebSocket as NodeWebSocket } from 'ws';
|
|
3
2
|
import chalk from 'chalk';
|
|
4
3
|
/**
|
|
5
|
-
* BroadcastManager —
|
|
6
|
-
*
|
|
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
|
|
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
|
-
|
|
32
|
-
|
|
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 ===
|
|
31
|
+
if (ws.readyState === NodeWebSocket.OPEN) {
|
|
47
32
|
ws.send(JSON.stringify(msg));
|
|
48
33
|
}
|
|
49
34
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
35
|
+
getClientCount() {
|
|
36
|
+
return this.clients.size;
|
|
37
|
+
}
|
|
53
38
|
close() {
|
|
54
|
-
|
|
55
|
-
|
|
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
|
|
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,
|
|
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"}
|