@rezi-ui/node 0.1.0-alpha.6 → 0.1.0-alpha.60
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 +26 -6
- package/dist/backend/backendSharedConfig.d.ts +11 -0
- package/dist/backend/backendSharedConfig.d.ts.map +1 -0
- package/dist/backend/backendSharedConfig.js +99 -0
- package/dist/backend/backendSharedConfig.js.map +1 -0
- package/dist/backend/backendSharedDebug.d.ts +4 -0
- package/dist/backend/backendSharedDebug.d.ts.map +1 -0
- package/dist/backend/backendSharedDebug.js +29 -0
- package/dist/backend/backendSharedDebug.js.map +1 -0
- package/dist/backend/backendSharedMarkers.d.ts +10 -0
- package/dist/backend/backendSharedMarkers.d.ts.map +1 -0
- package/dist/backend/backendSharedMarkers.js +50 -0
- package/dist/backend/backendSharedMarkers.js.map +1 -0
- package/dist/backend/emojiWidthPolicy.d.ts +15 -0
- package/dist/backend/emojiWidthPolicy.d.ts.map +1 -0
- package/dist/backend/emojiWidthPolicy.js +229 -0
- package/dist/backend/emojiWidthPolicy.js.map +1 -0
- package/dist/backend/nodeBackend.d.ts +30 -2
- package/dist/backend/nodeBackend.d.ts.map +1 -1
- package/dist/backend/nodeBackend.js +418 -66
- package/dist/backend/nodeBackend.js.map +1 -1
- package/dist/backend/nodeBackendInline.d.ts.map +1 -1
- package/dist/backend/nodeBackendInline.js +131 -55
- package/dist/backend/nodeBackendInline.js.map +1 -1
- package/dist/backend/terminalProfile.d.ts +5 -0
- package/dist/backend/terminalProfile.d.ts.map +1 -0
- package/dist/backend/terminalProfile.js +117 -0
- package/dist/backend/terminalProfile.js.map +1 -0
- package/dist/dev/hotStateReload.d.ts +65 -0
- package/dist/dev/hotStateReload.d.ts.map +1 -0
- package/dist/dev/hotStateReload.js +438 -0
- package/dist/dev/hotStateReload.js.map +1 -0
- package/dist/dev/nodeAppHotReload.d.ts +11 -0
- package/dist/dev/nodeAppHotReload.d.ts.map +1 -0
- package/dist/dev/nodeAppHotReload.js +78 -0
- package/dist/dev/nodeAppHotReload.js.map +1 -0
- package/dist/frameAudit.d.ts +51 -0
- package/dist/frameAudit.d.ts.map +1 -0
- package/dist/frameAudit.js +257 -0
- package/dist/frameAudit.js.map +1 -0
- package/dist/image.d.ts +4 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +43 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +198 -0
- package/dist/index.js.map +1 -1
- package/dist/repro/index.d.ts +3 -0
- package/dist/repro/index.d.ts.map +1 -0
- package/dist/repro/index.js +2 -0
- package/dist/repro/index.js.map +1 -0
- package/dist/repro/recorder.d.ts +30 -0
- package/dist/repro/recorder.d.ts.map +1 -0
- package/dist/repro/recorder.js +321 -0
- package/dist/repro/recorder.js.map +1 -0
- package/dist/streams/tail.d.ts +6 -0
- package/dist/streams/tail.d.ts.map +1 -0
- package/dist/streams/tail.js +113 -0
- package/dist/streams/tail.js.map +1 -0
- package/dist/worker/engineWorker.js +487 -14
- package/dist/worker/engineWorker.js.map +1 -1
- package/dist/worker/protocol.d.ts +3 -0
- package/dist/worker/protocol.d.ts.map +1 -1
- package/dist/worker/testShims/invalidPollBytesNative.d.ts +22 -0
- package/dist/worker/testShims/invalidPollBytesNative.d.ts.map +1 -0
- package/dist/worker/testShims/invalidPollBytesNative.js +65 -0
- package/dist/worker/testShims/invalidPollBytesNative.js.map +1 -0
- package/dist/worker/testShims/limitsExpectNative.d.ts +22 -0
- package/dist/worker/testShims/limitsExpectNative.d.ts.map +1 -0
- package/dist/worker/testShims/limitsExpectNative.js +85 -0
- package/dist/worker/testShims/limitsExpectNative.js.map +1 -0
- package/dist/worker/testShims/limitsNative.d.ts +22 -0
- package/dist/worker/testShims/limitsNative.d.ts.map +1 -0
- package/dist/worker/testShims/limitsNative.js +90 -0
- package/dist/worker/testShims/limitsNative.js.map +1 -0
- package/dist/worker/tickTiming.d.ts +7 -0
- package/dist/worker/tickTiming.d.ts.map +1 -0
- package/dist/worker/tickTiming.js +26 -0
- package/dist/worker/tickTiming.js.map +1 -0
- package/package.json +12 -8
- package/dist/__e2e__/fixtures/terminal-app.d.ts +0 -2
- package/dist/__e2e__/fixtures/terminal-app.d.ts.map +0 -1
- package/dist/__e2e__/fixtures/terminal-app.js +0 -42
- package/dist/__e2e__/fixtures/terminal-app.js.map +0 -1
- package/dist/__e2e__/terminal-render.e2e.test.d.ts +0 -2
- package/dist/__e2e__/terminal-render.e2e.test.d.ts.map +0 -1
- package/dist/__e2e__/terminal-render.e2e.test.js +0 -125
- package/dist/__e2e__/terminal-render.e2e.test.js.map +0 -1
- package/dist/__tests__/worker_integration.test.d.ts +0 -2
- package/dist/__tests__/worker_integration.test.d.ts.map +0 -1
- package/dist/__tests__/worker_integration.test.js +0 -569
- package/dist/__tests__/worker_integration.test.js.map +0 -1
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
import { mkdtempSync, readdirSync, rmSync, statSync, symlinkSync, watch, } from "node:fs";
|
|
2
|
+
import { cp } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
|
+
const DEFAULT_DEBOUNCE_MS = 40;
|
|
7
|
+
const WATCH_REFRESH_DELAY_MS = 50;
|
|
8
|
+
const PRESERVED_SNAPSHOT_REVISIONS = 2;
|
|
9
|
+
const TRACKED_EXTENSIONS = new Set([
|
|
10
|
+
".ts",
|
|
11
|
+
".tsx",
|
|
12
|
+
".mts",
|
|
13
|
+
".cts",
|
|
14
|
+
".js",
|
|
15
|
+
".jsx",
|
|
16
|
+
".mjs",
|
|
17
|
+
".cjs",
|
|
18
|
+
".json",
|
|
19
|
+
]);
|
|
20
|
+
const IGNORED_DIR_NAMES = new Set([
|
|
21
|
+
".git",
|
|
22
|
+
".hg",
|
|
23
|
+
".svn",
|
|
24
|
+
"dist",
|
|
25
|
+
"build",
|
|
26
|
+
"out",
|
|
27
|
+
"coverage",
|
|
28
|
+
"node_modules",
|
|
29
|
+
]);
|
|
30
|
+
function isViewReloadOptions(opts) {
|
|
31
|
+
return "viewModule" in opts;
|
|
32
|
+
}
|
|
33
|
+
function isRoutesReloadOptions(opts) {
|
|
34
|
+
return "routesModule" in opts;
|
|
35
|
+
}
|
|
36
|
+
function toAbsolutePath(input, label) {
|
|
37
|
+
if (input instanceof URL) {
|
|
38
|
+
if (input.protocol !== "file:") {
|
|
39
|
+
throw new Error(`${label} must be a file URL when URL is provided`);
|
|
40
|
+
}
|
|
41
|
+
return resolve(fileURLToPath(input));
|
|
42
|
+
}
|
|
43
|
+
if (typeof input !== "string" || input.trim().length === 0) {
|
|
44
|
+
throw new Error(`${label} must be a non-empty string or file URL`);
|
|
45
|
+
}
|
|
46
|
+
return isAbsolute(input) ? resolve(input) : resolve(process.cwd(), input);
|
|
47
|
+
}
|
|
48
|
+
function ensurePositiveInt(name, value) {
|
|
49
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
50
|
+
throw new Error(`${name} must be a positive integer`);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function isRecord(value) {
|
|
55
|
+
return typeof value === "object" && value !== null;
|
|
56
|
+
}
|
|
57
|
+
function defaultResolveView(moduleNs) {
|
|
58
|
+
if (!isRecord(moduleNs)) {
|
|
59
|
+
throw new Error("HSR module must export a named `view` function or a default function");
|
|
60
|
+
}
|
|
61
|
+
const moduleExports = moduleNs;
|
|
62
|
+
const named = moduleExports.view;
|
|
63
|
+
if (typeof named === "function")
|
|
64
|
+
return named;
|
|
65
|
+
const fallback = moduleExports.default;
|
|
66
|
+
if (typeof fallback === "function")
|
|
67
|
+
return fallback;
|
|
68
|
+
throw new Error("HSR module must export a named `view` function or a default function");
|
|
69
|
+
}
|
|
70
|
+
function coerceRoutesExport(value) {
|
|
71
|
+
if (!Array.isArray(value)) {
|
|
72
|
+
throw new Error("HSR routes module must export a named `routes` array or a default array");
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
function defaultResolveRoutes(moduleNs) {
|
|
77
|
+
if (!isRecord(moduleNs)) {
|
|
78
|
+
throw new Error("HSR routes module must export a named `routes` array or a default array");
|
|
79
|
+
}
|
|
80
|
+
const moduleExports = moduleNs;
|
|
81
|
+
if (moduleExports.routes !== undefined) {
|
|
82
|
+
return coerceRoutesExport(moduleExports.routes);
|
|
83
|
+
}
|
|
84
|
+
if (moduleExports.default !== undefined) {
|
|
85
|
+
return coerceRoutesExport(moduleExports.default);
|
|
86
|
+
}
|
|
87
|
+
throw new Error("HSR routes module must export a named `routes` array or a default array");
|
|
88
|
+
}
|
|
89
|
+
function containsIgnoredDir(absPath) {
|
|
90
|
+
const normalized = absPath.replace(/\\/g, "/");
|
|
91
|
+
for (const part of normalized.split("/")) {
|
|
92
|
+
if (IGNORED_DIR_NAMES.has(part))
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
function shouldTrackPath(absPath) {
|
|
98
|
+
if (containsIgnoredDir(absPath))
|
|
99
|
+
return false;
|
|
100
|
+
const ext = extname(absPath).toLowerCase();
|
|
101
|
+
return TRACKED_EXTENSIONS.has(ext);
|
|
102
|
+
}
|
|
103
|
+
function isWithinOrEqual(root, candidate) {
|
|
104
|
+
const rel = relative(root, candidate);
|
|
105
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
106
|
+
}
|
|
107
|
+
function safeReadDir(dir) {
|
|
108
|
+
try {
|
|
109
|
+
return readdirSync(dir, { withFileTypes: true });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return Object.freeze([]);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function collectWatchDirectories(root) {
|
|
116
|
+
const out = [];
|
|
117
|
+
const stack = [root];
|
|
118
|
+
while (stack.length > 0) {
|
|
119
|
+
const current = stack.pop();
|
|
120
|
+
if (!current)
|
|
121
|
+
continue;
|
|
122
|
+
out.push(current);
|
|
123
|
+
const entries = safeReadDir(current);
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
if (!entry.isDirectory())
|
|
126
|
+
continue;
|
|
127
|
+
if (IGNORED_DIR_NAMES.has(entry.name))
|
|
128
|
+
continue;
|
|
129
|
+
stack.push(join(current, entry.name));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return Object.freeze(out);
|
|
133
|
+
}
|
|
134
|
+
function makeLogSink(log) {
|
|
135
|
+
if (typeof log === "function")
|
|
136
|
+
return log;
|
|
137
|
+
return () => { };
|
|
138
|
+
}
|
|
139
|
+
function toWatchDirectory(pathLike) {
|
|
140
|
+
try {
|
|
141
|
+
return statSync(pathLike).isDirectory() ? pathLike : dirname(pathLike);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return dirname(pathLike);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function findNearestNodeModules(startDir) {
|
|
148
|
+
let current = resolve(startDir);
|
|
149
|
+
while (true) {
|
|
150
|
+
const candidate = join(current, "node_modules");
|
|
151
|
+
try {
|
|
152
|
+
if (statSync(candidate).isDirectory())
|
|
153
|
+
return candidate;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Keep walking up.
|
|
157
|
+
}
|
|
158
|
+
const parent = dirname(current);
|
|
159
|
+
if (parent === current)
|
|
160
|
+
return null;
|
|
161
|
+
current = parent;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function createReloadAdapter(opts) {
|
|
165
|
+
if (isViewReloadOptions(opts)) {
|
|
166
|
+
const resolveView = opts.resolveView ?? (defaultResolveView);
|
|
167
|
+
return Object.freeze({
|
|
168
|
+
entryModule: opts.viewModule,
|
|
169
|
+
targetLabel: "view",
|
|
170
|
+
applyReload: (moduleNs) => {
|
|
171
|
+
const nextView = resolveView(moduleNs);
|
|
172
|
+
opts.app.replaceView(nextView);
|
|
173
|
+
opts.onReload?.(nextView);
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (isRoutesReloadOptions(opts)) {
|
|
178
|
+
const resolveRoutes = opts.resolveRoutes ?? (defaultResolveRoutes);
|
|
179
|
+
return Object.freeze({
|
|
180
|
+
entryModule: opts.routesModule,
|
|
181
|
+
targetLabel: "routes",
|
|
182
|
+
applyReload: (moduleNs) => {
|
|
183
|
+
const nextRoutes = resolveRoutes(moduleNs);
|
|
184
|
+
opts.app.replaceRoutes(nextRoutes);
|
|
185
|
+
opts.onReload?.(nextRoutes);
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
throw new Error("HSR options must provide either `viewModule` or `routesModule`");
|
|
190
|
+
}
|
|
191
|
+
export function createHotStateReload(opts) {
|
|
192
|
+
const reloadAdapter = createReloadAdapter(opts);
|
|
193
|
+
const entryLabel = isViewReloadOptions(opts) ? "viewModule" : "routesModule";
|
|
194
|
+
const entryPath = toAbsolutePath(reloadAdapter.entryModule, entryLabel);
|
|
195
|
+
const moduleRoot = toAbsolutePath(opts.moduleRoot ?? dirname(entryPath), "moduleRoot");
|
|
196
|
+
if (!isWithinOrEqual(moduleRoot, entryPath)) {
|
|
197
|
+
throw new Error(`${entryLabel} must be inside moduleRoot`);
|
|
198
|
+
}
|
|
199
|
+
const watchTargets = new Set([moduleRoot]);
|
|
200
|
+
for (const pathInput of opts.watchPaths ?? []) {
|
|
201
|
+
watchTargets.add(toAbsolutePath(pathInput, "watchPaths[]"));
|
|
202
|
+
}
|
|
203
|
+
const debounceMs = ensurePositiveInt("debounceMs", opts.debounceMs ?? DEFAULT_DEBOUNCE_MS);
|
|
204
|
+
const log = makeLogSink(opts.log);
|
|
205
|
+
const onError = opts.onError;
|
|
206
|
+
const targetLabel = reloadAdapter.targetLabel;
|
|
207
|
+
const hostNodeModulesPath = findNearestNodeModules(moduleRoot);
|
|
208
|
+
let sessionRoot = null;
|
|
209
|
+
const watchers = new Map();
|
|
210
|
+
let running = false;
|
|
211
|
+
let revision = 0;
|
|
212
|
+
let pendingChangePath;
|
|
213
|
+
let debounceTimer = null;
|
|
214
|
+
let refreshTimer = null;
|
|
215
|
+
let reloadChain = Promise.resolve(false);
|
|
216
|
+
function getSessionRoot() {
|
|
217
|
+
if (sessionRoot === null) {
|
|
218
|
+
sessionRoot = mkdtempSync(join(tmpdir(), "rezi-hsr-"));
|
|
219
|
+
}
|
|
220
|
+
return sessionRoot;
|
|
221
|
+
}
|
|
222
|
+
function cleanupSessionRoot() {
|
|
223
|
+
if (sessionRoot === null)
|
|
224
|
+
return;
|
|
225
|
+
rmSync(sessionRoot, { recursive: true, force: true });
|
|
226
|
+
sessionRoot = null;
|
|
227
|
+
}
|
|
228
|
+
function clearDebounce() {
|
|
229
|
+
if (debounceTimer === null)
|
|
230
|
+
return;
|
|
231
|
+
clearTimeout(debounceTimer);
|
|
232
|
+
debounceTimer = null;
|
|
233
|
+
}
|
|
234
|
+
function clearRefresh() {
|
|
235
|
+
if (refreshTimer === null)
|
|
236
|
+
return;
|
|
237
|
+
clearTimeout(refreshTimer);
|
|
238
|
+
refreshTimer = null;
|
|
239
|
+
}
|
|
240
|
+
function closeAllWatchers() {
|
|
241
|
+
for (const watcher of watchers.values()) {
|
|
242
|
+
try {
|
|
243
|
+
watcher.close();
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// ignore watcher close races
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
watchers.clear();
|
|
250
|
+
}
|
|
251
|
+
function emitError(error, context) {
|
|
252
|
+
onError?.(error, context);
|
|
253
|
+
}
|
|
254
|
+
function copyFilter(pathToCheck) {
|
|
255
|
+
return !containsIgnoredDir(pathToCheck);
|
|
256
|
+
}
|
|
257
|
+
async function importLatestModule() {
|
|
258
|
+
const activeSessionRoot = getSessionRoot();
|
|
259
|
+
revision++;
|
|
260
|
+
const revisionDir = join(activeSessionRoot, `rev-${String(revision)}`);
|
|
261
|
+
await cp(moduleRoot, revisionDir, { recursive: true, filter: copyFilter });
|
|
262
|
+
if (hostNodeModulesPath) {
|
|
263
|
+
const snapshotNodeModules = join(revisionDir, "node_modules");
|
|
264
|
+
try {
|
|
265
|
+
symlinkSync(hostNodeModulesPath, snapshotNodeModules, "junction");
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
// Best-effort: if symlink creation fails, reload may still work for relative imports.
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const relEntry = relative(moduleRoot, entryPath);
|
|
272
|
+
const snapshotEntry = join(revisionDir, relEntry);
|
|
273
|
+
const moduleUrl = `${pathToFileURL(snapshotEntry).href}?rezi_hsr_rev=${String(revision)}`;
|
|
274
|
+
const moduleNs = await import(moduleUrl);
|
|
275
|
+
const staleRevision = revision - PRESERVED_SNAPSHOT_REVISIONS;
|
|
276
|
+
if (staleRevision > 0) {
|
|
277
|
+
const staleDir = join(activeSessionRoot, `rev-${String(staleRevision)}`);
|
|
278
|
+
rmSync(staleDir, { recursive: true, force: true });
|
|
279
|
+
}
|
|
280
|
+
return moduleNs;
|
|
281
|
+
}
|
|
282
|
+
function queueReload(phase) {
|
|
283
|
+
const changedPath = pendingChangePath;
|
|
284
|
+
pendingChangePath = undefined;
|
|
285
|
+
const op = reloadChain.then(async () => {
|
|
286
|
+
if (!running)
|
|
287
|
+
return false;
|
|
288
|
+
try {
|
|
289
|
+
const moduleNs = await importLatestModule();
|
|
290
|
+
if (!running)
|
|
291
|
+
return false;
|
|
292
|
+
reloadAdapter.applyReload(moduleNs);
|
|
293
|
+
log({
|
|
294
|
+
level: "info",
|
|
295
|
+
message: phase === "manual"
|
|
296
|
+
? `HSR manual ${targetLabel} reload applied`
|
|
297
|
+
: `HSR file change ${targetLabel} reload applied`,
|
|
298
|
+
...(changedPath === undefined ? {} : { changedPath }),
|
|
299
|
+
});
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
emitError(error, { phase: "reload", ...(changedPath ? { changedPath } : {}) });
|
|
304
|
+
log({
|
|
305
|
+
level: "error",
|
|
306
|
+
message: `HSR reload failed; keeping previous ${targetLabel}`,
|
|
307
|
+
...(changedPath === undefined ? {} : { changedPath }),
|
|
308
|
+
});
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
reloadChain = op.catch(() => false);
|
|
313
|
+
return op;
|
|
314
|
+
}
|
|
315
|
+
function scheduleWatchRefresh() {
|
|
316
|
+
if (!running || refreshTimer !== null)
|
|
317
|
+
return;
|
|
318
|
+
refreshTimer = setTimeout(() => {
|
|
319
|
+
refreshTimer = null;
|
|
320
|
+
refreshWatchers();
|
|
321
|
+
}, WATCH_REFRESH_DELAY_MS);
|
|
322
|
+
}
|
|
323
|
+
function shouldReloadForPath(absPath) {
|
|
324
|
+
if (shouldTrackPath(absPath))
|
|
325
|
+
return true;
|
|
326
|
+
if (isWithinOrEqual(moduleRoot, absPath))
|
|
327
|
+
return true;
|
|
328
|
+
for (const target of watchTargets) {
|
|
329
|
+
if (isWithinOrEqual(target, absPath))
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
function onWatchEvent(watchDir, eventType, filename) {
|
|
335
|
+
if (!running)
|
|
336
|
+
return;
|
|
337
|
+
const changedName = filename === null || filename === undefined
|
|
338
|
+
? null
|
|
339
|
+
: typeof filename === "string"
|
|
340
|
+
? filename
|
|
341
|
+
: filename.toString("utf8");
|
|
342
|
+
const resolvedPath = changedName === null ? watchDir : resolve(watchDir, changedName);
|
|
343
|
+
if (!shouldReloadForPath(resolvedPath))
|
|
344
|
+
return;
|
|
345
|
+
pendingChangePath = resolvedPath;
|
|
346
|
+
clearDebounce();
|
|
347
|
+
debounceTimer = setTimeout(() => {
|
|
348
|
+
debounceTimer = null;
|
|
349
|
+
void queueReload("watch");
|
|
350
|
+
}, debounceMs);
|
|
351
|
+
if (eventType === "rename") {
|
|
352
|
+
scheduleWatchRefresh();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function refreshWatchers() {
|
|
356
|
+
if (!running)
|
|
357
|
+
return;
|
|
358
|
+
const desiredDirs = new Set();
|
|
359
|
+
for (const target of watchTargets) {
|
|
360
|
+
const root = toWatchDirectory(target);
|
|
361
|
+
if (containsIgnoredDir(root))
|
|
362
|
+
continue;
|
|
363
|
+
const dirs = collectWatchDirectories(root);
|
|
364
|
+
for (const dir of dirs) {
|
|
365
|
+
desiredDirs.add(dir);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
for (const watchedDir of watchers.keys()) {
|
|
369
|
+
if (desiredDirs.has(watchedDir))
|
|
370
|
+
continue;
|
|
371
|
+
const watcher = watchers.get(watchedDir);
|
|
372
|
+
watchers.delete(watchedDir);
|
|
373
|
+
try {
|
|
374
|
+
watcher?.close();
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
// ignore watcher close races
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
for (const dir of desiredDirs) {
|
|
381
|
+
if (watchers.has(dir))
|
|
382
|
+
continue;
|
|
383
|
+
try {
|
|
384
|
+
const watcher = watch(dir, { persistent: true }, (eventType, filename) => {
|
|
385
|
+
onWatchEvent(dir, eventType, filename ?? null);
|
|
386
|
+
});
|
|
387
|
+
watcher.on("error", (error) => {
|
|
388
|
+
emitError(error, { phase: "watch", changedPath: dir });
|
|
389
|
+
log({ level: "warn", message: "HSR watcher reported an error", changedPath: dir });
|
|
390
|
+
scheduleWatchRefresh();
|
|
391
|
+
});
|
|
392
|
+
watchers.set(dir, watcher);
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
emitError(error, { phase: "watch", changedPath: dir });
|
|
396
|
+
log({ level: "warn", message: "HSR failed to watch path", changedPath: dir });
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
async function start() {
|
|
401
|
+
if (running)
|
|
402
|
+
return;
|
|
403
|
+
running = true;
|
|
404
|
+
refreshWatchers();
|
|
405
|
+
log({ level: "info", message: "HSR watcher started" });
|
|
406
|
+
}
|
|
407
|
+
async function reloadNow() {
|
|
408
|
+
if (!running)
|
|
409
|
+
return false;
|
|
410
|
+
clearDebounce();
|
|
411
|
+
return queueReload("manual");
|
|
412
|
+
}
|
|
413
|
+
async function stop() {
|
|
414
|
+
if (!running) {
|
|
415
|
+
cleanupSessionRoot();
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
running = false;
|
|
419
|
+
clearDebounce();
|
|
420
|
+
clearRefresh();
|
|
421
|
+
closeAllWatchers();
|
|
422
|
+
try {
|
|
423
|
+
await reloadChain;
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// ignore pending reload failures during shutdown
|
|
427
|
+
}
|
|
428
|
+
cleanupSessionRoot();
|
|
429
|
+
log({ level: "info", message: "HSR watcher stopped" });
|
|
430
|
+
}
|
|
431
|
+
return Object.freeze({
|
|
432
|
+
start,
|
|
433
|
+
reloadNow,
|
|
434
|
+
stop,
|
|
435
|
+
isRunning: () => running,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=hotStateReload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotStateReload.js","sourceRoot":"","sources":["../../src/dev/hotStateReload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { App } from "@rezi-ui/core";
|
|
2
|
+
import { type HotStateReloadController, type HotStateReloadRoutesOptions, type HotStateReloadViewOptions } from "./hotStateReload.js";
|
|
3
|
+
export type NodeAppHotReloadViewOptions<S> = Omit<HotStateReloadViewOptions<S>, "app">;
|
|
4
|
+
export type NodeAppHotReloadRoutesOptions<S> = Omit<HotStateReloadRoutesOptions<S>, "app">;
|
|
5
|
+
export type NodeAppHotReloadOptions<S> = NodeAppHotReloadViewOptions<S> | NodeAppHotReloadRoutesOptions<S>;
|
|
6
|
+
type NodeAppLifecycle<S> = Pick<App<S>, "start" | "stop" | "dispose">;
|
|
7
|
+
type NodeAppHotReloadTargets<S> = Pick<App<S>, "replaceView" | "replaceRoutes">;
|
|
8
|
+
export declare function createNodeAppHotReloadController<S>(app: NodeAppHotReloadTargets<S>, options: NodeAppHotReloadOptions<S>): HotStateReloadController;
|
|
9
|
+
export declare function attachNodeAppHotReloadLifecycle<S>(app: NodeAppLifecycle<S>, controller: HotStateReloadController): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=nodeAppHotReload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeAppHotReload.d.ts","sourceRoot":"","sources":["../../src/dev/nodeAppHotReload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAE/B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,2BAA2B,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACvF,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3F,MAAM,MAAM,uBAAuB,CAAC,CAAC,IACjC,2BAA2B,CAAC,CAAC,CAAC,GAC9B,6BAA6B,CAAC,CAAC,CAAC,CAAC;AAErC,KAAK,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AACtE,KAAK,uBAAuB,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,eAAe,CAAC,CAAC;AAgBhF,wBAAgB,gCAAgC,CAAC,CAAC,EAChD,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAC/B,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAClC,wBAAwB,CAa1B;AAED,wBAAgB,+BAA+B,CAAC,CAAC,EAC/C,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EACxB,UAAU,EAAE,wBAAwB,GACnC,IAAI,CAkDN"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createHotStateReload, } from "./hotStateReload.js";
|
|
2
|
+
function createViewHotReloadApp(app) {
|
|
3
|
+
return {
|
|
4
|
+
replaceView: app.replaceView.bind(app),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function createRoutesHotReloadApp(app) {
|
|
8
|
+
return {
|
|
9
|
+
replaceRoutes: app.replaceRoutes.bind(app),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function createNodeAppHotReloadController(app, options) {
|
|
13
|
+
if ("viewModule" in options) {
|
|
14
|
+
const opts = {
|
|
15
|
+
...options,
|
|
16
|
+
app: createViewHotReloadApp(app),
|
|
17
|
+
};
|
|
18
|
+
return createHotStateReload(opts);
|
|
19
|
+
}
|
|
20
|
+
const opts = {
|
|
21
|
+
...options,
|
|
22
|
+
app: createRoutesHotReloadApp(app),
|
|
23
|
+
};
|
|
24
|
+
return createHotStateReload(opts);
|
|
25
|
+
}
|
|
26
|
+
export function attachNodeAppHotReloadLifecycle(app, controller) {
|
|
27
|
+
const baseStart = app.start.bind(app);
|
|
28
|
+
const baseStop = app.stop.bind(app);
|
|
29
|
+
const baseDispose = app.dispose.bind(app);
|
|
30
|
+
app.start = async () => {
|
|
31
|
+
let startedByLifecycle = false;
|
|
32
|
+
if (!controller.isRunning()) {
|
|
33
|
+
await controller.start();
|
|
34
|
+
startedByLifecycle = true;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await baseStart();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (startedByLifecycle && controller.isRunning()) {
|
|
41
|
+
try {
|
|
42
|
+
await controller.stop();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Preserve app.start() failure as the primary error.
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
app.stop = async () => {
|
|
52
|
+
let failure = null;
|
|
53
|
+
try {
|
|
54
|
+
await baseStop();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
failure = error;
|
|
58
|
+
}
|
|
59
|
+
if (controller.isRunning()) {
|
|
60
|
+
try {
|
|
61
|
+
await controller.stop();
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (failure === null)
|
|
65
|
+
failure = error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (failure !== null)
|
|
69
|
+
throw failure;
|
|
70
|
+
};
|
|
71
|
+
app.dispose = () => {
|
|
72
|
+
if (controller.isRunning()) {
|
|
73
|
+
void controller.stop().catch(() => undefined);
|
|
74
|
+
}
|
|
75
|
+
baseDispose();
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=nodeAppHotReload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeAppHotReload.js","sourceRoot":"","sources":["../../src/dev/nodeAppHotReload.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAW7B,SAAS,sBAAsB,CAAI,GAA+B;IAChE,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,GAA+B;IAE/B,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,GAA+B,EAC/B,OAAmC;IAEnC,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAiC;YACzC,GAAG,OAAO;YACV,GAAG,EAAE,sBAAsB,CAAC,GAAG,CAAC;SACjC,CAAC;QACF,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,GAAmC;QAC3C,GAAG,OAAO;QACV,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC;KACnC,CAAC;IACF,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,GAAwB,EACxB,UAAoC;IAEpC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1C,GAAG,CAAC,KAAK,GAAG,KAAK,IAAmB,EAAE;QACpC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;YAC5B,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YACzB,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,kBAAkB,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,qDAAqD;gBACvD,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,IAAI,GAAG,KAAK,IAAmB,EAAE;QACnC,IAAI,OAAO,GAAY,IAAI,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IAAI,OAAO,KAAK,IAAI;oBAAE,OAAO,GAAG,KAAK,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,IAAI;YAAE,MAAM,OAAO,CAAC;IACtC,CAAC,CAAC;IAEF,GAAG,CAAC,OAAO,GAAG,GAAS,EAAE;QACvB,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3B,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QACD,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/node/src/frameAudit.ts — Optional end-to-end frame audit utilities.
|
|
3
|
+
*
|
|
4
|
+
* Enable with:
|
|
5
|
+
* REZI_FRAME_AUDIT=1
|
|
6
|
+
*
|
|
7
|
+
* Optional:
|
|
8
|
+
* REZI_FRAME_AUDIT_LOG=/tmp/rezi-frame-audit.ndjson
|
|
9
|
+
* REZI_FRAME_AUDIT_NATIVE=1
|
|
10
|
+
* REZI_FRAME_AUDIT_NATIVE_RING=<bytes>
|
|
11
|
+
*
|
|
12
|
+
* Defaults:
|
|
13
|
+
* - When REZI_FRAME_AUDIT=1 and REZI_FRAME_AUDIT_LOG is unset, records are
|
|
14
|
+
* written to /tmp/rezi-frame-audit.ndjson to avoid polluting terminal output.
|
|
15
|
+
*/
|
|
16
|
+
export type DrawlistFingerprint = Readonly<{
|
|
17
|
+
byteLen: number;
|
|
18
|
+
hash32: string;
|
|
19
|
+
prefixHash32: string;
|
|
20
|
+
cmdCount: number | null;
|
|
21
|
+
totalSize: number | null;
|
|
22
|
+
head16: string;
|
|
23
|
+
tail16: string;
|
|
24
|
+
opcodeHistogram: Readonly<Record<string, number>>;
|
|
25
|
+
cmdStreamValid: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
type AuditRecord = Readonly<Record<string, unknown>>;
|
|
28
|
+
declare const FRAME_AUDIT_ENABLED: boolean;
|
|
29
|
+
export { FRAME_AUDIT_ENABLED };
|
|
30
|
+
export declare const FRAME_AUDIT_NATIVE_ENABLED: boolean;
|
|
31
|
+
export declare const FRAME_AUDIT_NATIVE_RING_BYTES: number;
|
|
32
|
+
export declare const ZR_DEBUG_CAT_FRAME = 1;
|
|
33
|
+
export declare const ZR_DEBUG_CAT_DRAWLIST = 3;
|
|
34
|
+
export declare const ZR_DEBUG_CAT_PERF = 6;
|
|
35
|
+
export declare const ZR_DEBUG_CODE_FRAME_BEGIN = 256;
|
|
36
|
+
export declare const ZR_DEBUG_CODE_FRAME_SUBMIT = 257;
|
|
37
|
+
export declare const ZR_DEBUG_CODE_FRAME_PRESENT = 258;
|
|
38
|
+
export declare const ZR_DEBUG_CODE_FRAME_RESIZE = 259;
|
|
39
|
+
export declare const ZR_DEBUG_CODE_DRAWLIST_VALIDATE = 768;
|
|
40
|
+
export declare const ZR_DEBUG_CODE_DRAWLIST_EXECUTE = 769;
|
|
41
|
+
export declare const ZR_DEBUG_CODE_DRAWLIST_CMD = 770;
|
|
42
|
+
export declare const ZR_DEBUG_CODE_PERF_TIMING = 1536;
|
|
43
|
+
export declare const ZR_DEBUG_CODE_PERF_DIFF_PATH = 1537;
|
|
44
|
+
export declare function maybeDumpDrawlistBytes(scope: string, stage: string, frameSeq: number, bytes: Uint8Array): void;
|
|
45
|
+
export declare function drawlistFingerprint(bytes: Uint8Array): DrawlistFingerprint;
|
|
46
|
+
export type FrameAuditLogger = Readonly<{
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
emit: (stage: string, fields?: AuditRecord) => void;
|
|
49
|
+
}>;
|
|
50
|
+
export declare function createFrameAuditLogger(scope: string): FrameAuditLogger;
|
|
51
|
+
//# sourceMappingURL=frameAudit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameAudit.d.ts","sourceRoot":"","sources":["../src/frameAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC,CAAC;AAEH,KAAK,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAiGrD,QAAA,MAAM,mBAAmB,SAAqC,CAAC;AAS/D,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,eAAO,MAAM,0BAA0B,SAC0B,CAAC;AAClE,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAGF,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,yBAAyB,MAAS,CAAC;AAChD,eAAO,MAAM,0BAA0B,MAAS,CAAC;AACjD,eAAO,MAAM,2BAA2B,MAAS,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAS,CAAC;AACjD,eAAO,MAAM,+BAA+B,MAAS,CAAC;AACtD,eAAO,MAAM,8BAA8B,MAAS,CAAC;AACrD,eAAO,MAAM,0BAA0B,MAAS,CAAC;AACjD,eAAO,MAAM,yBAAyB,OAAS,CAAC;AAChD,eAAO,MAAM,4BAA4B,OAAS,CAAC;AAoBnD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,GAChB,IAAI,CAmCN;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,mBAAmB,CAoB1E;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;CACrD,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAqDtE"}
|