@rezi-ui/node 0.1.0-alpha.3 → 0.1.0-alpha.30

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.
Files changed (73) hide show
  1. package/README.md +26 -6
  2. package/dist/backend/emojiWidthPolicy.d.ts +15 -0
  3. package/dist/backend/emojiWidthPolicy.d.ts.map +1 -0
  4. package/dist/backend/emojiWidthPolicy.js +229 -0
  5. package/dist/backend/emojiWidthPolicy.js.map +1 -0
  6. package/dist/backend/nodeBackend.d.ts +29 -1
  7. package/dist/backend/nodeBackend.d.ts.map +1 -1
  8. package/dist/backend/nodeBackend.js +186 -16
  9. package/dist/backend/nodeBackend.js.map +1 -1
  10. package/dist/backend/nodeBackendInline.d.ts.map +1 -1
  11. package/dist/backend/nodeBackendInline.js +175 -15
  12. package/dist/backend/nodeBackendInline.js.map +1 -1
  13. package/dist/backend/terminalProfile.d.ts +5 -0
  14. package/dist/backend/terminalProfile.d.ts.map +1 -0
  15. package/dist/backend/terminalProfile.js +117 -0
  16. package/dist/backend/terminalProfile.js.map +1 -0
  17. package/dist/dev/hotStateReload.d.ts +65 -0
  18. package/dist/dev/hotStateReload.d.ts.map +1 -0
  19. package/dist/dev/hotStateReload.js +438 -0
  20. package/dist/dev/hotStateReload.js.map +1 -0
  21. package/dist/dev/nodeAppHotReload.d.ts +11 -0
  22. package/dist/dev/nodeAppHotReload.d.ts.map +1 -0
  23. package/dist/dev/nodeAppHotReload.js +78 -0
  24. package/dist/dev/nodeAppHotReload.js.map +1 -0
  25. package/dist/image.d.ts +2 -0
  26. package/dist/image.d.ts.map +1 -0
  27. package/dist/image.js +16 -0
  28. package/dist/image.js.map +1 -0
  29. package/dist/index.d.ts +40 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +181 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/repro/index.d.ts +3 -0
  34. package/dist/repro/index.d.ts.map +1 -0
  35. package/dist/repro/index.js +2 -0
  36. package/dist/repro/index.js.map +1 -0
  37. package/dist/repro/recorder.d.ts +31 -0
  38. package/dist/repro/recorder.d.ts.map +1 -0
  39. package/dist/repro/recorder.js +326 -0
  40. package/dist/repro/recorder.js.map +1 -0
  41. package/dist/streams/tail.d.ts +6 -0
  42. package/dist/streams/tail.d.ts.map +1 -0
  43. package/dist/streams/tail.js +113 -0
  44. package/dist/streams/tail.js.map +1 -0
  45. package/dist/worker/engineWorker.js +28 -0
  46. package/dist/worker/engineWorker.js.map +1 -1
  47. package/dist/worker/protocol.d.ts +3 -0
  48. package/dist/worker/protocol.d.ts.map +1 -1
  49. package/dist/worker/testShims/invalidPollBytesNative.d.ts +22 -0
  50. package/dist/worker/testShims/invalidPollBytesNative.d.ts.map +1 -0
  51. package/dist/worker/testShims/invalidPollBytesNative.js +65 -0
  52. package/dist/worker/testShims/invalidPollBytesNative.js.map +1 -0
  53. package/dist/worker/testShims/limitsExpectNative.d.ts +22 -0
  54. package/dist/worker/testShims/limitsExpectNative.d.ts.map +1 -0
  55. package/dist/worker/testShims/limitsExpectNative.js +85 -0
  56. package/dist/worker/testShims/limitsExpectNative.js.map +1 -0
  57. package/dist/worker/testShims/limitsNative.d.ts +22 -0
  58. package/dist/worker/testShims/limitsNative.d.ts.map +1 -0
  59. package/dist/worker/testShims/limitsNative.js +90 -0
  60. package/dist/worker/testShims/limitsNative.js.map +1 -0
  61. package/package.json +12 -8
  62. package/dist/__e2e__/fixtures/terminal-app.d.ts +0 -2
  63. package/dist/__e2e__/fixtures/terminal-app.d.ts.map +0 -1
  64. package/dist/__e2e__/fixtures/terminal-app.js +0 -42
  65. package/dist/__e2e__/fixtures/terminal-app.js.map +0 -1
  66. package/dist/__e2e__/terminal-render.e2e.test.d.ts +0 -2
  67. package/dist/__e2e__/terminal-render.e2e.test.d.ts.map +0 -1
  68. package/dist/__e2e__/terminal-render.e2e.test.js +0 -125
  69. package/dist/__e2e__/terminal-render.e2e.test.js.map +0 -1
  70. package/dist/__tests__/worker_integration.test.d.ts +0 -2
  71. package/dist/__tests__/worker_integration.test.d.ts.map +0 -1
  72. package/dist/__tests__/worker_integration.test.js +0 -569
  73. package/dist/__tests__/worker_integration.test.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ import { DEFAULT_TERMINAL_PROFILE, terminalProfileFromCaps, } from "@rezi-ui/core";
2
+ function envText(env, key) {
3
+ const value = env[key];
4
+ if (typeof value !== "string")
5
+ return undefined;
6
+ const trimmed = value.trim();
7
+ return trimmed.length > 0 ? trimmed : undefined;
8
+ }
9
+ function envLower(env, key) {
10
+ const value = envText(env, key);
11
+ return value?.toLowerCase();
12
+ }
13
+ function envInt(env, key) {
14
+ const raw = envText(env, key);
15
+ if (!raw)
16
+ return undefined;
17
+ const value = Number.parseInt(raw, 10);
18
+ if (!Number.isFinite(value) || value <= 0)
19
+ return undefined;
20
+ return value;
21
+ }
22
+ function envBool(env, key) {
23
+ const raw = envLower(env, key);
24
+ if (!raw)
25
+ return undefined;
26
+ if (raw === "1" || raw === "true" || raw === "yes" || raw === "on")
27
+ return true;
28
+ if (raw === "0" || raw === "false" || raw === "no" || raw === "off")
29
+ return false;
30
+ return undefined;
31
+ }
32
+ function detectTerminalHints(env) {
33
+ const term = envLower(env, "TERM") ?? "";
34
+ const termProgram = envLower(env, "TERM_PROGRAM");
35
+ const lcTerminal = envLower(env, "LC_TERMINAL");
36
+ const lcTerminalVersion = envText(env, "LC_TERMINAL_VERSION");
37
+ const termProgramVersion = envText(env, "TERM_PROGRAM_VERSION");
38
+ const isKitty = envText(env, "KITTY_WINDOW_ID") !== undefined || term.includes("kitty");
39
+ const isWezTerm = envText(env, "WEZTERM_PANE") !== undefined ||
40
+ envText(env, "WEZTERM_EXECUTABLE") !== undefined ||
41
+ termProgram === "wezterm" ||
42
+ term.includes("wezterm");
43
+ const isIterm2 = envText(env, "ITERM_SESSION_ID") !== undefined ||
44
+ termProgram === "iterm.app" ||
45
+ lcTerminal === "iterm2";
46
+ const isGhostty = envText(env, "GHOSTTY_RESOURCES_DIR") !== undefined ||
47
+ termProgram === "ghostty" ||
48
+ term.includes("ghostty");
49
+ const isWindowsTerminal = envText(env, "WT_SESSION") !== undefined;
50
+ const isXterm = term.includes("xterm");
51
+ const isTmux = envText(env, "TMUX") !== undefined || term.startsWith("tmux");
52
+ let id = "unknown";
53
+ let versionString = "";
54
+ if (isKitty) {
55
+ id = "kitty";
56
+ versionString = envText(env, "KITTY_VERSION") ?? termProgramVersion ?? "";
57
+ }
58
+ else if (isWezTerm) {
59
+ id = "wezterm";
60
+ versionString = envText(env, "WEZTERM_VERSION") ?? termProgramVersion ?? "";
61
+ }
62
+ else if (isIterm2) {
63
+ id = "iterm2";
64
+ versionString = termProgramVersion ?? lcTerminalVersion ?? "";
65
+ }
66
+ else if (isGhostty) {
67
+ id = "ghostty";
68
+ versionString = termProgramVersion ?? "";
69
+ }
70
+ else if (isWindowsTerminal) {
71
+ id = "windows-terminal";
72
+ versionString = envText(env, "WT_VERSION") ?? "";
73
+ }
74
+ else if (isTmux) {
75
+ id = "tmux";
76
+ }
77
+ else if (isXterm) {
78
+ id = "xterm";
79
+ }
80
+ const kittyOverride = envBool(env, "REZI_TERMINAL_SUPPORTS_KITTY");
81
+ const sixelOverride = envBool(env, "REZI_TERMINAL_SUPPORTS_SIXEL");
82
+ const itermOverride = envBool(env, "REZI_TERMINAL_SUPPORTS_ITERM2");
83
+ const osc8Override = envBool(env, "REZI_TERMINAL_SUPPORTS_OSC8");
84
+ const supportsKittyGraphics = kittyOverride ?? (isKitty || isGhostty);
85
+ const supportsSixel = sixelOverride ?? (isWezTerm || term.includes("sixel"));
86
+ const supportsIterm2Images = itermOverride ?? isIterm2;
87
+ const supportsHyperlinks = osc8Override ?? (isKitty || isWezTerm || isGhostty || isIterm2 || isWindowsTerminal || isXterm);
88
+ const cellWidthPx = envInt(env, "REZI_CELL_WIDTH_PX") ?? envInt(env, "ZR_CELL_WIDTH_PX");
89
+ const cellHeightPx = envInt(env, "REZI_CELL_HEIGHT_PX") ?? envInt(env, "ZR_CELL_HEIGHT_PX");
90
+ return Object.freeze({
91
+ id,
92
+ versionString,
93
+ supportsKittyGraphics,
94
+ supportsSixel,
95
+ supportsIterm2Images,
96
+ supportsHyperlinks,
97
+ ...(cellWidthPx === undefined ? {} : { cellWidthPx }),
98
+ ...(cellHeightPx === undefined ? {} : { cellHeightPx }),
99
+ });
100
+ }
101
+ export function terminalProfileFromNodeEnv(caps, env = process.env) {
102
+ const base = terminalProfileFromCaps(caps);
103
+ const hints = detectTerminalHints(env);
104
+ return Object.freeze({
105
+ ...DEFAULT_TERMINAL_PROFILE,
106
+ ...base,
107
+ ...(hints.id ? { id: hints.id } : {}),
108
+ ...(hints.versionString ? { versionString: hints.versionString } : {}),
109
+ ...(hints.cellWidthPx === undefined ? {} : { cellWidthPx: hints.cellWidthPx }),
110
+ ...(hints.cellHeightPx === undefined ? {} : { cellHeightPx: hints.cellHeightPx }),
111
+ supportsKittyGraphics: hints.supportsKittyGraphics ?? base.supportsKittyGraphics,
112
+ supportsSixel: hints.supportsSixel ?? base.supportsSixel,
113
+ supportsIterm2Images: hints.supportsIterm2Images ?? base.supportsIterm2Images,
114
+ supportsHyperlinks: hints.supportsHyperlinks ?? base.supportsHyperlinks,
115
+ });
116
+ }
117
+ //# sourceMappingURL=terminalProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalProfile.js","sourceRoot":"","sources":["../../src/backend/terminalProfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { App, RouteDefinition, ViewFn } from "@rezi-ui/core";
2
+ export type HotStateReloadErrorContext = Readonly<{
3
+ phase: "reload" | "watch";
4
+ changedPath?: string;
5
+ }>;
6
+ export type HotStateReloadLogEvent = Readonly<{
7
+ level: "info" | "warn" | "error";
8
+ message: string;
9
+ changedPath?: string;
10
+ }>;
11
+ export type HotStateReloadController = Readonly<{
12
+ start: () => Promise<void>;
13
+ reloadNow: () => Promise<boolean>;
14
+ stop: () => Promise<void>;
15
+ isRunning: () => boolean;
16
+ }>;
17
+ type HotStateReloadBaseOptions = Readonly<{
18
+ /**
19
+ * Root copied into a versioned snapshot before each reload.
20
+ * Set this to your app `src/` directory so transitive imports are refreshed.
21
+ * Defaults to `dirname(viewModule | routesModule)`.
22
+ */
23
+ moduleRoot?: string | URL;
24
+ /**
25
+ * Additional files/directories to watch for changes.
26
+ * `moduleRoot` is always watched.
27
+ */
28
+ watchPaths?: readonly (string | URL)[];
29
+ /**
30
+ * Debounce window for rapid save bursts.
31
+ */
32
+ debounceMs?: number;
33
+ onError?: (error: unknown, context: HotStateReloadErrorContext) => void;
34
+ log?: (event: HotStateReloadLogEvent) => void;
35
+ }>;
36
+ export type HotStateReloadViewOptions<S> = HotStateReloadBaseOptions & Readonly<{
37
+ app: Pick<App<S>, "replaceView">;
38
+ /**
39
+ * Absolute/relative path (or file URL) to the module that exports the view function.
40
+ */
41
+ viewModule: string | URL;
42
+ /**
43
+ * Resolve a ViewFn from the imported module namespace.
44
+ * Defaults to: named `view` export, then default export.
45
+ */
46
+ resolveView?: (moduleNs: unknown) => ViewFn<S>;
47
+ onReload?: (viewFn: ViewFn<S>) => void;
48
+ }>;
49
+ export type HotStateReloadRoutesOptions<S> = HotStateReloadBaseOptions & Readonly<{
50
+ app: Pick<App<S>, "replaceRoutes">;
51
+ /**
52
+ * Absolute/relative path (or file URL) to the module that exports route definitions.
53
+ */
54
+ routesModule: string | URL;
55
+ /**
56
+ * Resolve route definitions from the imported module namespace.
57
+ * Defaults to: named `routes` export, then default export.
58
+ */
59
+ resolveRoutes?: (moduleNs: unknown) => readonly RouteDefinition<S>[];
60
+ onReload?: (routes: readonly RouteDefinition<S>[]) => void;
61
+ }>;
62
+ export type HotStateReloadOptions<S> = HotStateReloadViewOptions<S> | HotStateReloadRoutesOptions<S>;
63
+ export declare function createHotStateReload<S>(opts: HotStateReloadOptions<S>): HotStateReloadController;
64
+ export {};
65
+ //# sourceMappingURL=hotStateReload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotStateReload.d.ts","sourceRoot":"","sources":["../../src/dev/hotStateReload.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA2BlE,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B,CAAC,CAAC;AAEH,KAAK,yBAAyB,GAAG,QAAQ,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;IACvC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACxE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI,yBAAyB,GAClE,QAAQ,CAAC;IACP,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACjC;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACxC,CAAC,CAAC;AAEL,MAAM,MAAM,2BAA2B,CAAC,CAAC,IAAI,yBAAyB,GACpE,QAAQ,CAAC;IACP,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACnC;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;CAC5D,CAAC,CAAC;AAEL,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAC/B,yBAAyB,CAAC,CAAC,CAAC,GAC5B,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAuLnC,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAgQhG"}
@@ -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