@aipanel/core 1.2.8 → 1.2.10

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/es/{logger.d.ts → client/logger.d.ts} +1 -1
  2. package/es/{logger.mjs → client/logger.mjs} +4 -10
  3. package/es/client/storage.d.ts +15 -0
  4. package/es/client/storage.mjs +33 -0
  5. package/es/client/theme.d.ts +15 -0
  6. package/es/client/theme.mjs +11 -0
  7. package/es/client.d.ts +3 -0
  8. package/es/client.mjs +3 -0
  9. package/es/{constants.d.ts → common/constants.d.ts} +34 -6
  10. package/es/{constants.mjs → common/constants.mjs} +31 -8
  11. package/{lib → es/common}/options.d.ts +40 -0
  12. package/{lib → es/common}/types.d.ts +36 -11
  13. package/es/{utils.d.ts → common/utils.d.ts} +26 -3
  14. package/es/{utils.mjs → common/utils.mjs} +42 -1
  15. package/es/index.d.ts +6 -7
  16. package/es/index.mjs +6 -7
  17. package/es/node/diagnostics.d.ts +5 -0
  18. package/es/node/diagnostics.mjs +26 -4
  19. package/es/{file-log-watcher.mjs → node/file-log-watcher.mjs} +1 -1
  20. package/{lib → es/node}/node-logger.d.ts +1 -1
  21. package/es/{node-logger.mjs → node/node-logger.mjs} +4 -17
  22. package/es/node/node-utils.d.ts +69 -0
  23. package/es/node/node-utils.mjs +291 -0
  24. package/es/node.d.ts +6 -6
  25. package/es/node.mjs +6 -6
  26. package/lib/{logger.cjs → client/logger.cjs} +3 -10
  27. package/lib/{logger.d.ts → client/logger.d.ts} +1 -1
  28. package/lib/client/storage.cjs +58 -0
  29. package/lib/client/storage.d.ts +15 -0
  30. package/lib/client/theme.cjs +35 -0
  31. package/lib/client/theme.d.ts +15 -0
  32. package/lib/client.cjs +25 -0
  33. package/lib/client.d.ts +3 -0
  34. package/lib/{constants.cjs → common/constants.cjs} +38 -12
  35. package/lib/{constants.d.ts → common/constants.d.ts} +34 -6
  36. package/{es → lib/common}/options.d.ts +40 -0
  37. package/{es → lib/common}/types.d.ts +36 -11
  38. package/lib/{utils.cjs → common/utils.cjs} +47 -2
  39. package/lib/{utils.d.ts → common/utils.d.ts} +26 -3
  40. package/lib/index.cjs +12 -14
  41. package/lib/index.d.ts +6 -7
  42. package/lib/node/diagnostics.cjs +27 -4
  43. package/lib/node/diagnostics.d.ts +5 -0
  44. package/lib/{file-log-watcher.cjs → node/file-log-watcher.cjs} +1 -1
  45. package/lib/{node-logger.cjs → node/node-logger.cjs} +4 -19
  46. package/{es → lib/node}/node-logger.d.ts +1 -1
  47. package/lib/node/node-utils.cjs +329 -0
  48. package/lib/node/node-utils.d.ts +69 -0
  49. package/lib/node.cjs +12 -12
  50. package/lib/node.d.ts +6 -6
  51. package/package.json +6 -1
  52. package/es/node-utils.d.ts +0 -28
  53. package/es/node-utils.mjs +0 -56
  54. package/lib/node-utils.cjs +0 -93
  55. package/lib/node-utils.d.ts +0 -28
  56. /package/es/{logger-core.d.ts → common/logger-core.d.ts} +0 -0
  57. /package/es/{logger-core.mjs → common/logger-core.mjs} +0 -0
  58. /package/es/{options.mjs → common/options.mjs} +0 -0
  59. /package/es/{provider.d.ts → common/provider.d.ts} +0 -0
  60. /package/es/{provider.mjs → common/provider.mjs} +0 -0
  61. /package/es/{types.mjs → common/types.mjs} +0 -0
  62. /package/es/{file-log-watcher.d.ts → node/file-log-watcher.d.ts} +0 -0
  63. /package/es/{process-logger.d.ts → node/process-logger.d.ts} +0 -0
  64. /package/es/{process-logger.mjs → node/process-logger.mjs} +0 -0
  65. /package/lib/{logger-core.cjs → common/logger-core.cjs} +0 -0
  66. /package/lib/{logger-core.d.ts → common/logger-core.d.ts} +0 -0
  67. /package/lib/{options.cjs → common/options.cjs} +0 -0
  68. /package/lib/{provider.cjs → common/provider.cjs} +0 -0
  69. /package/lib/{provider.d.ts → common/provider.d.ts} +0 -0
  70. /package/lib/{types.cjs → common/types.cjs} +0 -0
  71. /package/lib/{file-log-watcher.d.ts → node/file-log-watcher.d.ts} +0 -0
  72. /package/lib/{process-logger.cjs → node/process-logger.cjs} +0 -0
  73. /package/lib/{process-logger.d.ts → node/process-logger.d.ts} +0 -0
@@ -0,0 +1,329 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var node_utils_exports = {};
29
+ __export(node_utils_exports, {
30
+ checkChromeDevToolsAvailable: () => checkChromeDevToolsAvailable,
31
+ checkCliInstalled: () => checkCliInstalled,
32
+ createPackageRequire: () => createPackageRequire,
33
+ findAvailablePort: () => findAvailablePort,
34
+ findGitRoot: () => findGitRoot,
35
+ getCliVersion: () => getCliVersion,
36
+ isPortAvailable: () => isPortAvailable,
37
+ killOrphanCliProcesses: () => killOrphanCliProcesses,
38
+ resolvePackageDir: () => resolvePackageDir,
39
+ waitForServer: () => waitForServer
40
+ });
41
+ module.exports = __toCommonJS(node_utils_exports);
42
+ var import_node_child_process = require("node:child_process");
43
+ var import_node_module = require("node:module");
44
+ var import_node_fs = __toESM(require("node:fs"));
45
+ var import_node_http = __toESM(require("node:http"));
46
+ var import_node_path = __toESM(require("node:path"));
47
+ var import_constants = require("../common/constants.cjs");
48
+ var import_node_logger = require("./node-logger.cjs");
49
+ const log = (0, import_node_logger.createLogger)("NodeUtils");
50
+ function createPackageRequire(baseDir = process.cwd()) {
51
+ return (0, import_node_module.createRequire)(import_node_path.default.join(baseDir, "package.json"));
52
+ }
53
+ function resolvePackageDir(packageName, baseDir = process.cwd()) {
54
+ const require2 = createPackageRequire(baseDir);
55
+ const entryPath = require2.resolve(packageName);
56
+ return import_node_path.default.dirname(import_node_path.default.dirname(entryPath));
57
+ }
58
+ async function checkChromeDevToolsAvailable(port = import_constants.CHROME_DEVTOOLS_PORT, timeout = import_constants.CHROME_DEVTOOLS_CHECK_TIMEOUT) {
59
+ const net = await import("net");
60
+ return new Promise((resolve) => {
61
+ const socket = new net.Socket();
62
+ const timer = setTimeout(() => {
63
+ socket.destroy();
64
+ resolve(false);
65
+ }, timeout);
66
+ socket.connect(port, "localhost", () => {
67
+ clearTimeout(timer);
68
+ socket.removeAllListeners();
69
+ socket.destroy();
70
+ resolve(true);
71
+ });
72
+ socket.on("error", () => {
73
+ clearTimeout(timer);
74
+ resolve(false);
75
+ });
76
+ });
77
+ }
78
+ async function isPortAvailable(port, hostname) {
79
+ const net = await import("net");
80
+ return new Promise((resolve) => {
81
+ const server = net.createServer();
82
+ server.once("error", () => resolve(false));
83
+ server.once("listening", () => {
84
+ server.close();
85
+ resolve(true);
86
+ });
87
+ server.listen(port, hostname);
88
+ });
89
+ }
90
+ async function findAvailablePort(startPort, hostname, maxTries = 100) {
91
+ for (let port = startPort; port < startPort + maxTries; port++) {
92
+ if (await isPortAvailable(port, hostname)) return port;
93
+ }
94
+ throw new Error(`No available port in range ${startPort}-${startPort + maxTries}`);
95
+ }
96
+ function waitForServer(url, timeout = 1e4, proc) {
97
+ const timer = new import_node_logger.PerformanceTimer("waitForServer", { url, timeout });
98
+ return new Promise((resolve, reject) => {
99
+ const startTime = Date.now();
100
+ let attempts = 0;
101
+ const check = () => {
102
+ attempts++;
103
+ log.debug(`Checking server availability (attempt ${attempts})`, { url });
104
+ if (proc?.exitCode !== null && proc?.exitCode !== void 0) {
105
+ timer.end(`\u2716 Process exited with code ${proc.exitCode}`);
106
+ reject(new Error(`Process exited with code ${proc.exitCode}`));
107
+ return;
108
+ }
109
+ const req = import_node_http.default.get(url, (res) => {
110
+ if (res.statusCode && res.statusCode < 500) {
111
+ timer.end(`\u2713 Server ready after ${attempts} attempts`);
112
+ resolve();
113
+ } else {
114
+ log.debug(`Server returned status ${res.statusCode}, retrying...`);
115
+ retryOrReject();
116
+ }
117
+ });
118
+ req.on("error", (err) => {
119
+ log.debug(`Server check failed: ${err.message}`);
120
+ retryOrReject();
121
+ });
122
+ };
123
+ const retryOrReject = () => {
124
+ const elapsed = Date.now() - startTime;
125
+ if (elapsed < timeout) {
126
+ setTimeout(check, import_constants.SERVER_CHECK_INTERVAL);
127
+ } else {
128
+ timer.end("\u2716 Timeout");
129
+ reject(new Error(`Server not ready after ${timeout}ms (${attempts} attempts)`));
130
+ }
131
+ };
132
+ check();
133
+ });
134
+ }
135
+ function findGitRoot(startDir, maxDepth = 10) {
136
+ const timer = new import_node_logger.PerformanceTimer("findGitRoot", { startDir, maxDepth });
137
+ let currentDir = startDir;
138
+ let depth = 0;
139
+ while (depth < maxDepth) {
140
+ const gitDir = import_node_path.default.join(currentDir, ".git");
141
+ try {
142
+ if (import_node_fs.default.existsSync(gitDir)) {
143
+ timer.end(`\u2713 Found git root at depth ${depth}: ${currentDir}`);
144
+ return currentDir;
145
+ }
146
+ } catch (err) {
147
+ log.debug(`Error checking .git directory at ${currentDir}`, {
148
+ error: err.message
149
+ });
150
+ }
151
+ const parentDir = import_node_path.default.dirname(currentDir);
152
+ if (parentDir === currentDir) {
153
+ log.debug("Reached filesystem root");
154
+ break;
155
+ }
156
+ currentDir = parentDir;
157
+ depth++;
158
+ }
159
+ timer.end(`\u2716 No git root found after ${depth} levels, using start directory`);
160
+ return startDir;
161
+ }
162
+ async function checkCliInstalled(bin) {
163
+ const timer = new import_node_logger.PerformanceTimer(`checkCliInstalled:${bin}`);
164
+ return new Promise((resolve) => {
165
+ const proc = (0, import_node_child_process.spawn)(bin, ["--version"], { stdio: "ignore", shell: true });
166
+ proc.on("close", (code) => {
167
+ const installed = code === 0;
168
+ timer.end(installed ? `\u2713 ${bin} is installed` : `\u2716 ${bin} not found`);
169
+ resolve(installed);
170
+ });
171
+ proc.on("error", (err) => {
172
+ log.debug(`Failed to check ${bin} installation`, { error: err.message });
173
+ timer.end("\u2716 Check failed");
174
+ resolve(false);
175
+ });
176
+ });
177
+ }
178
+ function getCliVersion(bin) {
179
+ return new Promise((resolve) => {
180
+ const proc = (0, import_node_child_process.spawn)(bin, ["--version"], { stdio: "pipe", shell: true });
181
+ let output = "";
182
+ proc.stdout?.on("data", (data) => {
183
+ output += data.toString();
184
+ });
185
+ proc.on("close", (code) => {
186
+ resolve(code === 0 && output.trim() ? output.trim() : null);
187
+ });
188
+ proc.on("error", () => resolve(null));
189
+ });
190
+ }
191
+ function killOrphanCliProcesses(bin, options) {
192
+ const label = options.label ?? bin;
193
+ const timeoutMs = options.timeout ?? 5e3;
194
+ const timer = new import_node_logger.PerformanceTimer(`killOrphanCliProcesses:${label}`);
195
+ log.debug(`Looking for orphan ${label} processes (PPID=1)`);
196
+ return new Promise((resolve) => {
197
+ let settled = false;
198
+ const done = (count) => {
199
+ if (!settled) {
200
+ settled = true;
201
+ resolve(count);
202
+ }
203
+ };
204
+ const timeout = setTimeout(() => {
205
+ log.warn(`Kill orphan ${label} processes timed out, skipping`);
206
+ timer.end("\u26A0 Timeout, skipped");
207
+ done(0);
208
+ }, timeoutMs);
209
+ const wrappedResolve = (count) => {
210
+ clearTimeout(timeout);
211
+ done(count);
212
+ };
213
+ if (process.platform === "win32") {
214
+ killOrphansOnWindows(wrappedResolve, options, label, timer);
215
+ } else {
216
+ killOrphansOnUnix(wrappedResolve, options, label, timer);
217
+ }
218
+ });
219
+ }
220
+ function killOrphansOnWindows(resolve, options, label, timer) {
221
+ log.debug(`Using Windows method to find orphan ${label} processes`);
222
+ const proc = (0, import_node_child_process.spawn)(
223
+ "wmic",
224
+ ["process", "where", `name="${options.winName}"`, "get", "processid,parentprocessid,commandline"],
225
+ { stdio: "pipe" }
226
+ );
227
+ let output = "";
228
+ proc.stdout?.on("data", (data) => {
229
+ output += data.toString();
230
+ });
231
+ proc.on("close", () => {
232
+ const pidsToKill = [];
233
+ output.split("\n").forEach((rawLine) => {
234
+ const line = rawLine.trim();
235
+ if (!line.includes(options.match)) return;
236
+ const parts = line.split(/\s+/);
237
+ if (parts.length >= 3) {
238
+ const ppid = parts[0];
239
+ const pid = parts[1];
240
+ if (ppid === "1" && pid && !Number.isNaN(Number(pid))) pidsToKill.push(pid);
241
+ }
242
+ });
243
+ finishOrphanKillWindows(pidsToKill, resolve, label, timer);
244
+ });
245
+ proc.on("error", (err) => {
246
+ log.debug(`Failed to find orphan ${label} processes`, { error: err.message });
247
+ timer.end("\u2716 Failed to find orphan processes");
248
+ resolve(0);
249
+ });
250
+ }
251
+ function finishOrphanKillWindows(pidsToKill, resolve, label, timer) {
252
+ if (pidsToKill.length === 0) {
253
+ log.debug("No orphan processes found");
254
+ timer.end("No orphan processes found");
255
+ resolve(0);
256
+ return;
257
+ }
258
+ log.debug(`Found ${pidsToKill.length} orphan processes`, { pids: pidsToKill });
259
+ let killedCount = 0;
260
+ let completedCount = 0;
261
+ pidsToKill.forEach((pid) => {
262
+ const killProc = (0, import_node_child_process.spawn)("taskkill", ["/F", "/PID", pid], { stdio: "ignore" });
263
+ killProc.on("close", (code) => {
264
+ completedCount++;
265
+ if (code === 0) killedCount++;
266
+ if (completedCount === pidsToKill.length) {
267
+ timer.end(`\u2713 Killed ${killedCount} orphan ${label} processes`);
268
+ resolve(killedCount);
269
+ }
270
+ });
271
+ });
272
+ }
273
+ function killOrphansOnUnix(resolve, options, label, timer) {
274
+ log.debug(`Using Unix method to find orphan ${label} processes`);
275
+ const proc = (0, import_node_child_process.spawn)("ps", ["-e", "-o", "pid,ppid,args"], { stdio: "pipe" });
276
+ let output = "";
277
+ proc.stdout?.on("data", (data) => {
278
+ output += data.toString();
279
+ });
280
+ proc.on("close", () => {
281
+ const pidsToKill = [];
282
+ output.split("\n").forEach((line) => {
283
+ if (!line.includes(options.match)) return;
284
+ const parts = line.trim().split(/\s+/);
285
+ if (parts.length >= 3) {
286
+ const pid = parts[0];
287
+ const ppid = parts[1];
288
+ if (ppid === "1" && pid && !Number.isNaN(Number(pid))) pidsToKill.push(pid);
289
+ }
290
+ });
291
+ if (pidsToKill.length === 0) {
292
+ log.debug("No orphan processes found");
293
+ timer.end("No orphan processes found");
294
+ resolve(0);
295
+ return;
296
+ }
297
+ log.debug(`Found ${pidsToKill.length} orphan processes`, { pids: pidsToKill });
298
+ const killProc = (0, import_node_child_process.spawn)("kill", ["-9", ...pidsToKill], { stdio: "ignore" });
299
+ killProc.on("close", (code) => {
300
+ const killedCount = code === 0 ? pidsToKill.length : 0;
301
+ timer.end(
302
+ killedCount > 0 ? `\u2713 Killed ${killedCount} orphan ${label} processes` : "\u2716 Failed to kill processes"
303
+ );
304
+ resolve(killedCount);
305
+ });
306
+ killProc.on("error", () => {
307
+ timer.end("\u2716 Failed to kill processes");
308
+ resolve(0);
309
+ });
310
+ });
311
+ proc.on("error", (err) => {
312
+ log.debug(`Failed to find orphan ${label} processes`, { error: err.message });
313
+ timer.end("\u2716 Failed to find orphan processes");
314
+ resolve(0);
315
+ });
316
+ }
317
+ // Annotate the CommonJS export names for ESM import in node:
318
+ 0 && (module.exports = {
319
+ checkChromeDevToolsAvailable,
320
+ checkCliInstalled,
321
+ createPackageRequire,
322
+ findAvailablePort,
323
+ findGitRoot,
324
+ getCliVersion,
325
+ isPortAvailable,
326
+ killOrphanCliProcesses,
327
+ resolvePackageDir,
328
+ waitForServer
329
+ });
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileoverview Node.js 专用工具函数(仅服务端可用)
3
+ */
4
+ /**
5
+ * 创建一个锚定到指定目录(默认 process.cwd())的 require。
6
+ * 跨 ESM/CJS 安全,避免依赖 __dirname / import.meta.url(CJS 打包时会与 Node 内置变量冲突或被置空)。
7
+ */
8
+ export declare function createPackageRequire(baseDir?: string): NodeJS.Require;
9
+ /**
10
+ * 解析 npm 包根目录(跨 ESM/CJS 安全)。
11
+ * @param packageName - 包名,例如 "vite-plugin-aipanel"
12
+ * @param baseDir - 解析基准目录,默认当前工作目录
13
+ */
14
+ export declare function resolvePackageDir(packageName: string, baseDir?: string): string;
15
+ /**
16
+ * 检查 Chrome DevTools 是否可用
17
+ * @param timeout - 超时时间(毫秒),默认 2000ms
18
+ * @returns Chrome DevTools 是否可用
19
+ */
20
+ export declare function checkChromeDevToolsAvailable(port?: number, timeout?: number): Promise<boolean>;
21
+ /**
22
+ * 检查指定端口是否可用
23
+ */
24
+ export declare function isPortAvailable(port: number, hostname?: string): Promise<boolean>;
25
+ /**
26
+ * 从 startPort 开始寻找可用端口
27
+ */
28
+ export declare function findAvailablePort(startPort: number, hostname?: string, maxTries?: number): Promise<number>;
29
+ /**
30
+ * 可等待的进程接口(ResultPromise 等匹配就够)
31
+ */
32
+ export interface WaitableProcess {
33
+ exitCode: number | null | undefined;
34
+ }
35
+ /**
36
+ * 轮询等待服务准备就绪(HTTP 状态码 < 500 即当作 ready);超时或进程退出时 reject
37
+ * @param url - 检查的服务 URL
38
+ * @param timeout - 超时毫秒数
39
+ * @param proc - 可选进程,提前退出时直接失败
40
+ */
41
+ export declare function waitForServer(url: string, timeout?: number, proc?: WaitableProcess): Promise<void>;
42
+ /**
43
+ * 从指定目录往上查找 .git 根目录(找不到时返回起始目录)
44
+ */
45
+ export declare function findGitRoot(startDir: string, maxDepth?: number): string;
46
+ /**
47
+ * 检查某 CLI 是否安装(运行 <bin> --version,退出码 0 即存在)
48
+ */
49
+ export declare function checkCliInstalled(bin: string): Promise<boolean>;
50
+ /**
51
+ * 获取某 CLI 版本号(<bin> --version 的第一行,败路返回 null)
52
+ */
53
+ export declare function getCliVersion(bin: string): Promise<string | null>;
54
+ /** 孤儿进程清理配置(提供商的 check/kill 统一实现) */
55
+ export interface KillOrphanCliOptions {
56
+ /** 进程命令行/参数中需匹配的子串(如 opencode / dsh) */
57
+ match: string;
58
+ /** Windows wmic 按名称查询的进程名(如 opencode.exe / node.exe) */
59
+ winName: string;
60
+ /** 超时毫秒(默认 5000) */
61
+ timeout?: number;
62
+ /** 运行名(仅用于日志,默认等于 match) */
63
+ label?: string;
64
+ }
65
+ /**
66
+ * 清理被 reparent 到 init(PPID=1)的孤儿进程(win: wmic+taskkill;unix: ps+kill)
67
+ * @returns 被成功结束的进程数
68
+ */
69
+ export declare function killOrphanCliProcesses(bin: string, options: KillOrphanCliOptions): Promise<number>;
package/lib/node.cjs CHANGED
@@ -14,20 +14,20 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
15
  var node_exports = {};
16
16
  module.exports = __toCommonJS(node_exports);
17
- __reExport(node_exports, require("./constants.cjs"), module.exports);
18
- __reExport(node_exports, require("./logger-core.cjs"), module.exports);
19
- __reExport(node_exports, require("./node-logger.cjs"), module.exports);
20
- __reExport(node_exports, require("./process-logger.cjs"), module.exports);
21
- __reExport(node_exports, require("./file-log-watcher.cjs"), module.exports);
22
- __reExport(node_exports, require("./node-utils.cjs"), module.exports);
17
+ __reExport(node_exports, require("./common/constants.cjs"), module.exports);
18
+ __reExport(node_exports, require("./common/logger-core.cjs"), module.exports);
19
+ __reExport(node_exports, require("./node/node-logger.cjs"), module.exports);
20
+ __reExport(node_exports, require("./node/process-logger.cjs"), module.exports);
21
+ __reExport(node_exports, require("./node/file-log-watcher.cjs"), module.exports);
22
+ __reExport(node_exports, require("./node/node-utils.cjs"), module.exports);
23
23
  __reExport(node_exports, require("./node/diagnostics.cjs"), module.exports);
24
24
  // Annotate the CommonJS export names for ESM import in node:
25
25
  0 && (module.exports = {
26
- ...require("./constants.cjs"),
27
- ...require("./logger-core.cjs"),
28
- ...require("./node-logger.cjs"),
29
- ...require("./process-logger.cjs"),
30
- ...require("./file-log-watcher.cjs"),
31
- ...require("./node-utils.cjs"),
26
+ ...require("./common/constants.cjs"),
27
+ ...require("./common/logger-core.cjs"),
28
+ ...require("./node/node-logger.cjs"),
29
+ ...require("./node/process-logger.cjs"),
30
+ ...require("./node/file-log-watcher.cjs"),
31
+ ...require("./node/node-utils.cjs"),
32
32
  ...require("./node/diagnostics.cjs")
33
33
  });
package/lib/node.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export * from "./constants";
2
- export * from "./logger-core";
3
- export * from "./node-logger";
4
- export * from "./process-logger";
5
- export * from "./file-log-watcher";
6
- export * from "./node-utils";
1
+ export * from "./common/constants";
2
+ export * from "./common/logger-core";
3
+ export * from "./node/node-logger";
4
+ export * from "./node/process-logger";
5
+ export * from "./node/file-log-watcher";
6
+ export * from "./node/node-utils";
7
7
  export * from "./node/diagnostics";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aipanel/core",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "lib/index.cjs",
@@ -16,6 +16,11 @@
16
16
  "import": "./es/index.mjs",
17
17
  "require": "./lib/index.cjs"
18
18
  },
19
+ "./client": {
20
+ "types": "./es/client.d.ts",
21
+ "import": "./es/client.mjs",
22
+ "require": "./lib/client.cjs"
23
+ },
19
24
  "./node": {
20
25
  "types": "./es/node.d.ts",
21
26
  "import": "./es/node.mjs",
@@ -1,28 +0,0 @@
1
- /**
2
- * @fileoverview Node.js 专用工具函数(仅服务端可用)
3
- */
4
- /**
5
- * 创建一个锚定到指定目录(默认 process.cwd())的 require。
6
- * 跨 ESM/CJS 安全,避免依赖 __dirname / import.meta.url(CJS 打包时会与 Node 内置变量冲突或被置空)。
7
- */
8
- export declare function createPackageRequire(baseDir?: string): NodeJS.Require;
9
- /**
10
- * 解析 npm 包根目录(跨 ESM/CJS 安全)。
11
- * @param packageName - 包名,例如 "vite-plugin-aipanel"
12
- * @param baseDir - 解析基准目录,默认当前工作目录
13
- */
14
- export declare function resolvePackageDir(packageName: string, baseDir?: string): string;
15
- /**
16
- * 检查 Chrome DevTools 是否可用
17
- * @param timeout - 超时时间(毫秒),默认 2000ms
18
- * @returns Chrome DevTools 是否可用
19
- */
20
- export declare function checkChromeDevToolsAvailable(port?: number, timeout?: number): Promise<boolean>;
21
- /**
22
- * 检查指定端口是否可用
23
- */
24
- export declare function isPortAvailable(port: number, hostname?: string): Promise<boolean>;
25
- /**
26
- * 从 startPort 开始寻找可用端口
27
- */
28
- export declare function findAvailablePort(startPort: number, hostname?: string, maxTries?: number): Promise<number>;
package/es/node-utils.mjs DELETED
@@ -1,56 +0,0 @@
1
- import { createRequire } from "node:module";
2
- import path from "node:path";
3
- import { CHROME_DEVTOOLS_PORT, CHROME_DEVTOOLS_CHECK_TIMEOUT } from "./constants.mjs";
4
- function createPackageRequire(baseDir = process.cwd()) {
5
- return createRequire(path.join(baseDir, "package.json"));
6
- }
7
- function resolvePackageDir(packageName, baseDir = process.cwd()) {
8
- const require2 = createPackageRequire(baseDir);
9
- const entryPath = require2.resolve(packageName);
10
- return path.dirname(path.dirname(entryPath));
11
- }
12
- async function checkChromeDevToolsAvailable(port = CHROME_DEVTOOLS_PORT, timeout = CHROME_DEVTOOLS_CHECK_TIMEOUT) {
13
- const net = await import("net");
14
- return new Promise((resolve) => {
15
- const socket = new net.Socket();
16
- const timer = setTimeout(() => {
17
- socket.destroy();
18
- resolve(false);
19
- }, timeout);
20
- socket.connect(port, "localhost", () => {
21
- clearTimeout(timer);
22
- socket.removeAllListeners();
23
- socket.destroy();
24
- resolve(true);
25
- });
26
- socket.on("error", () => {
27
- clearTimeout(timer);
28
- resolve(false);
29
- });
30
- });
31
- }
32
- async function isPortAvailable(port, hostname) {
33
- const net = await import("net");
34
- return new Promise((resolve) => {
35
- const server = net.createServer();
36
- server.once("error", () => resolve(false));
37
- server.once("listening", () => {
38
- server.close();
39
- resolve(true);
40
- });
41
- server.listen(port, hostname);
42
- });
43
- }
44
- async function findAvailablePort(startPort, hostname, maxTries = 100) {
45
- for (let port = startPort; port < startPort + maxTries; port++) {
46
- if (await isPortAvailable(port, hostname)) return port;
47
- }
48
- throw new Error(`No available port in range ${startPort}-${startPort + maxTries}`);
49
- }
50
- export {
51
- checkChromeDevToolsAvailable,
52
- createPackageRequire,
53
- findAvailablePort,
54
- isPortAvailable,
55
- resolvePackageDir
56
- };
@@ -1,93 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var node_utils_exports = {};
29
- __export(node_utils_exports, {
30
- checkChromeDevToolsAvailable: () => checkChromeDevToolsAvailable,
31
- createPackageRequire: () => createPackageRequire,
32
- findAvailablePort: () => findAvailablePort,
33
- isPortAvailable: () => isPortAvailable,
34
- resolvePackageDir: () => resolvePackageDir
35
- });
36
- module.exports = __toCommonJS(node_utils_exports);
37
- var import_node_module = require("node:module");
38
- var import_node_path = __toESM(require("node:path"));
39
- var import_constants = require("./constants.cjs");
40
- function createPackageRequire(baseDir = process.cwd()) {
41
- return (0, import_node_module.createRequire)(import_node_path.default.join(baseDir, "package.json"));
42
- }
43
- function resolvePackageDir(packageName, baseDir = process.cwd()) {
44
- const require2 = createPackageRequire(baseDir);
45
- const entryPath = require2.resolve(packageName);
46
- return import_node_path.default.dirname(import_node_path.default.dirname(entryPath));
47
- }
48
- async function checkChromeDevToolsAvailable(port = import_constants.CHROME_DEVTOOLS_PORT, timeout = import_constants.CHROME_DEVTOOLS_CHECK_TIMEOUT) {
49
- const net = await import("net");
50
- return new Promise((resolve) => {
51
- const socket = new net.Socket();
52
- const timer = setTimeout(() => {
53
- socket.destroy();
54
- resolve(false);
55
- }, timeout);
56
- socket.connect(port, "localhost", () => {
57
- clearTimeout(timer);
58
- socket.removeAllListeners();
59
- socket.destroy();
60
- resolve(true);
61
- });
62
- socket.on("error", () => {
63
- clearTimeout(timer);
64
- resolve(false);
65
- });
66
- });
67
- }
68
- async function isPortAvailable(port, hostname) {
69
- const net = await import("net");
70
- return new Promise((resolve) => {
71
- const server = net.createServer();
72
- server.once("error", () => resolve(false));
73
- server.once("listening", () => {
74
- server.close();
75
- resolve(true);
76
- });
77
- server.listen(port, hostname);
78
- });
79
- }
80
- async function findAvailablePort(startPort, hostname, maxTries = 100) {
81
- for (let port = startPort; port < startPort + maxTries; port++) {
82
- if (await isPortAvailable(port, hostname)) return port;
83
- }
84
- throw new Error(`No available port in range ${startPort}-${startPort + maxTries}`);
85
- }
86
- // Annotate the CommonJS export names for ESM import in node:
87
- 0 && (module.exports = {
88
- checkChromeDevToolsAvailable,
89
- createPackageRequire,
90
- findAvailablePort,
91
- isPortAvailable,
92
- resolvePackageDir
93
- });
@@ -1,28 +0,0 @@
1
- /**
2
- * @fileoverview Node.js 专用工具函数(仅服务端可用)
3
- */
4
- /**
5
- * 创建一个锚定到指定目录(默认 process.cwd())的 require。
6
- * 跨 ESM/CJS 安全,避免依赖 __dirname / import.meta.url(CJS 打包时会与 Node 内置变量冲突或被置空)。
7
- */
8
- export declare function createPackageRequire(baseDir?: string): NodeJS.Require;
9
- /**
10
- * 解析 npm 包根目录(跨 ESM/CJS 安全)。
11
- * @param packageName - 包名,例如 "vite-plugin-aipanel"
12
- * @param baseDir - 解析基准目录,默认当前工作目录
13
- */
14
- export declare function resolvePackageDir(packageName: string, baseDir?: string): string;
15
- /**
16
- * 检查 Chrome DevTools 是否可用
17
- * @param timeout - 超时时间(毫秒),默认 2000ms
18
- * @returns Chrome DevTools 是否可用
19
- */
20
- export declare function checkChromeDevToolsAvailable(port?: number, timeout?: number): Promise<boolean>;
21
- /**
22
- * 检查指定端口是否可用
23
- */
24
- export declare function isPortAvailable(port: number, hostname?: string): Promise<boolean>;
25
- /**
26
- * 从 startPort 开始寻找可用端口
27
- */
28
- export declare function findAvailablePort(startPort: number, hostname?: string, maxTries?: number): Promise<number>;
File without changes
File without changes