tanmi-dock 0.4.0-beta.1

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/dist/commands/clean.d.ts +10 -0
  4. package/dist/commands/clean.d.ts.map +1 -0
  5. package/dist/commands/clean.js +215 -0
  6. package/dist/commands/clean.js.map +1 -0
  7. package/dist/commands/config.d.ts +10 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +105 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +7 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +127 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/init.d.ts +7 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +153 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/link.d.ts +7 -0
  20. package/dist/commands/link.d.ts.map +1 -0
  21. package/dist/commands/link.js +522 -0
  22. package/dist/commands/link.js.map +1 -0
  23. package/dist/commands/migrate.d.ts +7 -0
  24. package/dist/commands/migrate.d.ts.map +1 -0
  25. package/dist/commands/migrate.js +137 -0
  26. package/dist/commands/migrate.js.map +1 -0
  27. package/dist/commands/projects.d.ts +7 -0
  28. package/dist/commands/projects.d.ts.map +1 -0
  29. package/dist/commands/projects.js +126 -0
  30. package/dist/commands/projects.js.map +1 -0
  31. package/dist/commands/repair.d.ts +7 -0
  32. package/dist/commands/repair.d.ts.map +1 -0
  33. package/dist/commands/repair.js +256 -0
  34. package/dist/commands/repair.js.map +1 -0
  35. package/dist/commands/status.d.ts +7 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +172 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/unlink.d.ts +7 -0
  40. package/dist/commands/unlink.d.ts.map +1 -0
  41. package/dist/commands/unlink.js +104 -0
  42. package/dist/commands/unlink.js.map +1 -0
  43. package/dist/commands/verify.d.ts +7 -0
  44. package/dist/commands/verify.d.ts.map +1 -0
  45. package/dist/commands/verify.js +190 -0
  46. package/dist/commands/verify.js.map +1 -0
  47. package/dist/core/codepac.d.ts +79 -0
  48. package/dist/core/codepac.d.ts.map +1 -0
  49. package/dist/core/codepac.js +188 -0
  50. package/dist/core/codepac.js.map +1 -0
  51. package/dist/core/config.d.ts +70 -0
  52. package/dist/core/config.d.ts.map +1 -0
  53. package/dist/core/config.js +210 -0
  54. package/dist/core/config.js.map +1 -0
  55. package/dist/core/guard.d.ts +18 -0
  56. package/dist/core/guard.d.ts.map +1 -0
  57. package/dist/core/guard.js +82 -0
  58. package/dist/core/guard.js.map +1 -0
  59. package/dist/core/linker.d.ts +76 -0
  60. package/dist/core/linker.d.ts.map +1 -0
  61. package/dist/core/linker.js +263 -0
  62. package/dist/core/linker.js.map +1 -0
  63. package/dist/core/parser.d.ts +43 -0
  64. package/dist/core/parser.d.ts.map +1 -0
  65. package/dist/core/parser.js +133 -0
  66. package/dist/core/parser.js.map +1 -0
  67. package/dist/core/platform.d.ts +100 -0
  68. package/dist/core/platform.d.ts.map +1 -0
  69. package/dist/core/platform.js +193 -0
  70. package/dist/core/platform.js.map +1 -0
  71. package/dist/core/registry.d.ts +181 -0
  72. package/dist/core/registry.d.ts.map +1 -0
  73. package/dist/core/registry.js +443 -0
  74. package/dist/core/registry.js.map +1 -0
  75. package/dist/core/store.d.ts +77 -0
  76. package/dist/core/store.d.ts.map +1 -0
  77. package/dist/core/store.js +226 -0
  78. package/dist/core/store.js.map +1 -0
  79. package/dist/core/transaction.d.ts +106 -0
  80. package/dist/core/transaction.d.ts.map +1 -0
  81. package/dist/core/transaction.js +295 -0
  82. package/dist/core/transaction.js.map +1 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +84 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/types/index.d.ts +174 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +47 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/disk.d.ts +57 -0
  92. package/dist/utils/disk.d.ts.map +1 -0
  93. package/dist/utils/disk.js +313 -0
  94. package/dist/utils/disk.js.map +1 -0
  95. package/dist/utils/exit-codes.d.ts +42 -0
  96. package/dist/utils/exit-codes.d.ts.map +1 -0
  97. package/dist/utils/exit-codes.js +91 -0
  98. package/dist/utils/exit-codes.js.map +1 -0
  99. package/dist/utils/fs-utils.d.ts +44 -0
  100. package/dist/utils/fs-utils.d.ts.map +1 -0
  101. package/dist/utils/fs-utils.js +107 -0
  102. package/dist/utils/fs-utils.js.map +1 -0
  103. package/dist/utils/global-lock.d.ts +28 -0
  104. package/dist/utils/global-lock.d.ts.map +1 -0
  105. package/dist/utils/global-lock.js +89 -0
  106. package/dist/utils/global-lock.js.map +1 -0
  107. package/dist/utils/lock.d.ts +26 -0
  108. package/dist/utils/lock.d.ts.map +1 -0
  109. package/dist/utils/lock.js +68 -0
  110. package/dist/utils/lock.js.map +1 -0
  111. package/dist/utils/logger.d.ts +98 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +190 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/dist/utils/prompt.d.ts +32 -0
  116. package/dist/utils/prompt.d.ts.map +1 -0
  117. package/dist/utils/prompt.js +131 -0
  118. package/dist/utils/prompt.js.map +1 -0
  119. package/package.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk.js","sourceRoot":"","sources":["../../src/utils/disk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * 标准化退出码
3
+ * 兼容 BSD sysexits.h + 自定义扩展
4
+ */
5
+ export declare const EXIT_CODES: {
6
+ readonly SUCCESS: 0;
7
+ readonly GENERAL_ERROR: 1;
8
+ readonly MISUSE: 2;
9
+ readonly NOT_INITIALIZED: 10;
10
+ readonly LOCK_HELD: 11;
11
+ readonly DATAERR: 65;
12
+ readonly NOINPUT: 66;
13
+ readonly NOUSER: 67;
14
+ readonly NOHOST: 68;
15
+ readonly UNAVAILABLE: 69;
16
+ readonly SOFTWARE: 70;
17
+ readonly OSERR: 71;
18
+ readonly OSFILE: 72;
19
+ readonly CANTCREAT: 73;
20
+ readonly IOERR: 74;
21
+ readonly TEMPFAIL: 75;
22
+ readonly PROTOCOL: 76;
23
+ readonly NOPERM: 77;
24
+ readonly CONFIG: 78;
25
+ readonly INTERRUPTED: 130;
26
+ readonly TERMINATED: 143;
27
+ };
28
+ export type ExitCode = (typeof EXIT_CODES)[keyof typeof EXIT_CODES];
29
+ /**
30
+ * 退出码描述
31
+ */
32
+ export declare const EXIT_CODE_DESCRIPTIONS: Record<ExitCode, string>;
33
+ /**
34
+ * 带消息的退出
35
+ */
36
+ export declare function exit(code: ExitCode, message?: string): never;
37
+ /**
38
+ * 根据错误类型获取退出码
39
+ */
40
+ export declare function getExitCodeFromError(err: Error): ExitCode;
41
+ export default EXIT_CODES;
42
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/utils/exit-codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;CA6Bb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAsB3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAM5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,KAAK,GAAG,QAAQ,CAoBzD;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * 标准化退出码
3
+ * 兼容 BSD sysexits.h + 自定义扩展
4
+ */
5
+ export const EXIT_CODES = {
6
+ // 标准退出码
7
+ SUCCESS: 0, // 成功
8
+ GENERAL_ERROR: 1, // 一般错误
9
+ MISUSE: 2, // 命令行参数错误
10
+ // 自定义退出码 (10-63)
11
+ NOT_INITIALIZED: 10, // 未初始化
12
+ LOCK_HELD: 11, // 锁被占用
13
+ // BSD sysexits.h (64-78)
14
+ DATAERR: 65, // 数据格式错误
15
+ NOINPUT: 66, // 输入文件不存在
16
+ NOUSER: 67, // 用户不存在
17
+ NOHOST: 68, // 主机不存在
18
+ UNAVAILABLE: 69, // 服务不可用
19
+ SOFTWARE: 70, // 内部软件错误
20
+ OSERR: 71, // 系统错误
21
+ OSFILE: 72, // 系统文件缺失
22
+ CANTCREAT: 73, // 无法创建文件
23
+ IOERR: 74, // IO 错误
24
+ TEMPFAIL: 75, // 临时失败
25
+ PROTOCOL: 76, // 协议错误
26
+ NOPERM: 77, // 权限不足
27
+ CONFIG: 78, // 配置错误
28
+ // 信号退出码 (128+signal)
29
+ INTERRUPTED: 130, // 被 SIGINT 中断 (128+2)
30
+ TERMINATED: 143, // 被 SIGTERM 终止 (128+15)
31
+ };
32
+ /**
33
+ * 退出码描述
34
+ */
35
+ export const EXIT_CODE_DESCRIPTIONS = {
36
+ [EXIT_CODES.SUCCESS]: '成功',
37
+ [EXIT_CODES.GENERAL_ERROR]: '一般错误',
38
+ [EXIT_CODES.MISUSE]: '命令行参数错误',
39
+ [EXIT_CODES.NOT_INITIALIZED]: '未初始化',
40
+ [EXIT_CODES.LOCK_HELD]: '锁被占用',
41
+ [EXIT_CODES.DATAERR]: '数据格式错误',
42
+ [EXIT_CODES.NOINPUT]: '输入文件不存在',
43
+ [EXIT_CODES.NOUSER]: '用户不存在',
44
+ [EXIT_CODES.NOHOST]: '主机不存在',
45
+ [EXIT_CODES.UNAVAILABLE]: '服务不可用',
46
+ [EXIT_CODES.SOFTWARE]: '内部软件错误',
47
+ [EXIT_CODES.OSERR]: '系统错误',
48
+ [EXIT_CODES.OSFILE]: '系统文件缺失',
49
+ [EXIT_CODES.CANTCREAT]: '无法创建文件',
50
+ [EXIT_CODES.IOERR]: 'IO 错误',
51
+ [EXIT_CODES.TEMPFAIL]: '临时失败',
52
+ [EXIT_CODES.PROTOCOL]: '协议错误',
53
+ [EXIT_CODES.NOPERM]: '权限不足',
54
+ [EXIT_CODES.CONFIG]: '配置错误',
55
+ [EXIT_CODES.INTERRUPTED]: '被中断',
56
+ [EXIT_CODES.TERMINATED]: '被终止',
57
+ };
58
+ /**
59
+ * 带消息的退出
60
+ */
61
+ export function exit(code, message) {
62
+ if (message) {
63
+ const prefix = code === EXIT_CODES.SUCCESS ? '[ok]' : '[err]';
64
+ console.error(`${prefix} ${message}`);
65
+ }
66
+ process.exit(code);
67
+ }
68
+ /**
69
+ * 根据错误类型获取退出码
70
+ */
71
+ export function getExitCodeFromError(err) {
72
+ const message = err.message.toLowerCase();
73
+ if (message.includes('permission') || message.includes('eacces')) {
74
+ return EXIT_CODES.NOPERM;
75
+ }
76
+ if (message.includes('enoent') || message.includes('not found') || message.includes('不存在')) {
77
+ return EXIT_CODES.NOINPUT;
78
+ }
79
+ if (message.includes('config') || message.includes('配置')) {
80
+ return EXIT_CODES.CONFIG;
81
+ }
82
+ if (message.includes('lock') || message.includes('锁')) {
83
+ return EXIT_CODES.LOCK_HELD;
84
+ }
85
+ if (message.includes('初始化') || message.includes('not initialized')) {
86
+ return EXIT_CODES.NOT_INITIALIZED;
87
+ }
88
+ return EXIT_CODES.GENERAL_ERROR;
89
+ }
90
+ export default EXIT_CODES;
91
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/utils/exit-codes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export interface CopyDirOptions {
2
+ /** 是否保留符号链接 (默认 false,复制链接目标内容) */
3
+ preserveSymlinks?: boolean;
4
+ }
5
+ /**
6
+ * 递归复制目录
7
+ * @param src 源目录
8
+ * @param dest 目标目录
9
+ * @param options 复制选项
10
+ */
11
+ export declare function copyDir(src: string, dest: string, options?: CopyDirOptions): Promise<void>;
12
+ /**
13
+ * 带进度回调的目录复制
14
+ * @param src 源目录
15
+ * @param dest 目标目录
16
+ * @param totalSize 预计总大小 (bytes)
17
+ * @param onProgress 进度回调 (copiedBytes, totalBytes) => void
18
+ */
19
+ export declare function copyDirWithProgress(src: string, dest: string, totalSize: number, onProgress?: (copiedBytes: number, totalBytes: number) => void): Promise<void>;
20
+ /**
21
+ * 递归计算目录大小
22
+ * @param dirPath 目录路径
23
+ * @returns 目录大小 (bytes)
24
+ */
25
+ export declare function getDirSize(dirPath: string): Promise<number>;
26
+ /**
27
+ * 确保目录存在
28
+ * @param dirPath 目录路径
29
+ */
30
+ export declare function ensureDir(dirPath: string): Promise<void>;
31
+ /**
32
+ * 安全删除目录
33
+ * @param dirPath 目录路径
34
+ */
35
+ export declare function removeDir(dirPath: string): Promise<void>;
36
+ declare const _default: {
37
+ copyDir: typeof copyDir;
38
+ copyDirWithProgress: typeof copyDirWithProgress;
39
+ getDirSize: typeof getDirSize;
40
+ ensureDir: typeof ensureDir;
41
+ removeDir: typeof removeDir;
42
+ };
43
+ export default _default;
44
+ //# sourceMappingURL=fs-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAC7D,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBjE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;;;;;;;;AAED,wBAME"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 文件系统工具函数
3
+ * 提取自 core/store.ts, core/linker.ts, commands/link.ts, commands/migrate.ts
4
+ */
5
+ import fs from 'fs/promises';
6
+ import path from 'path';
7
+ /**
8
+ * 递归复制目录
9
+ * @param src 源目录
10
+ * @param dest 目标目录
11
+ * @param options 复制选项
12
+ */
13
+ export async function copyDir(src, dest, options = {}) {
14
+ const { preserveSymlinks = false } = options;
15
+ await fs.mkdir(dest, { recursive: true });
16
+ const entries = await fs.readdir(src, { withFileTypes: true });
17
+ for (const entry of entries) {
18
+ const srcPath = path.join(src, entry.name);
19
+ const destPath = path.join(dest, entry.name);
20
+ if (entry.isDirectory()) {
21
+ await copyDir(srcPath, destPath, options);
22
+ }
23
+ else if (preserveSymlinks && entry.isSymbolicLink()) {
24
+ // 保持符号链接
25
+ const linkTarget = await fs.readlink(srcPath);
26
+ await fs.symlink(linkTarget, destPath);
27
+ }
28
+ else {
29
+ await fs.copyFile(srcPath, destPath);
30
+ }
31
+ }
32
+ }
33
+ /**
34
+ * 带进度回调的目录复制
35
+ * @param src 源目录
36
+ * @param dest 目标目录
37
+ * @param totalSize 预计总大小 (bytes)
38
+ * @param onProgress 进度回调 (copiedBytes, totalBytes) => void
39
+ */
40
+ export async function copyDirWithProgress(src, dest, totalSize, onProgress) {
41
+ let copiedBytes = 0;
42
+ async function copyRecursive(srcDir, destDir) {
43
+ await fs.mkdir(destDir, { recursive: true });
44
+ const entries = await fs.readdir(srcDir, { withFileTypes: true });
45
+ for (const entry of entries) {
46
+ const srcPath = path.join(srcDir, entry.name);
47
+ const destPath = path.join(destDir, entry.name);
48
+ if (entry.isDirectory()) {
49
+ await copyRecursive(srcPath, destPath);
50
+ }
51
+ else {
52
+ const stat = await fs.stat(srcPath);
53
+ await fs.copyFile(srcPath, destPath);
54
+ copiedBytes += stat.size;
55
+ onProgress?.(copiedBytes, totalSize);
56
+ }
57
+ }
58
+ }
59
+ await copyRecursive(src, dest);
60
+ }
61
+ /**
62
+ * 递归计算目录大小
63
+ * @param dirPath 目录路径
64
+ * @returns 目录大小 (bytes)
65
+ */
66
+ export async function getDirSize(dirPath) {
67
+ let size = 0;
68
+ try {
69
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
70
+ for (const entry of entries) {
71
+ const fullPath = path.join(dirPath, entry.name);
72
+ if (entry.isDirectory()) {
73
+ size += await getDirSize(fullPath);
74
+ }
75
+ else if (entry.isFile()) {
76
+ const stat = await fs.stat(fullPath);
77
+ size += stat.size;
78
+ }
79
+ }
80
+ }
81
+ catch {
82
+ // 目录不存在或无法访问
83
+ }
84
+ return size;
85
+ }
86
+ /**
87
+ * 确保目录存在
88
+ * @param dirPath 目录路径
89
+ */
90
+ export async function ensureDir(dirPath) {
91
+ await fs.mkdir(dirPath, { recursive: true });
92
+ }
93
+ /**
94
+ * 安全删除目录
95
+ * @param dirPath 目录路径
96
+ */
97
+ export async function removeDir(dirPath) {
98
+ await fs.rm(dirPath, { recursive: true, force: true });
99
+ }
100
+ export default {
101
+ copyDir,
102
+ copyDirWithProgress,
103
+ getDirSize,
104
+ ensureDir,
105
+ removeDir,
106
+ };
107
+ //# sourceMappingURL=fs-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 获取全局锁
3
+ * @returns 是否成功获取锁
4
+ */
5
+ export declare function acquireGlobalLock(): Promise<boolean>;
6
+ /**
7
+ * 释放全局锁
8
+ */
9
+ export declare function releaseGlobalLock(): Promise<void>;
10
+ /**
11
+ * 检查全局锁状态
12
+ */
13
+ export declare function isGlobalLocked(): Promise<boolean>;
14
+ /**
15
+ * 使用全局锁执行操作
16
+ * @param fn 要执行的操作
17
+ * @returns 操作返回值
18
+ * @throws 如果无法获取锁
19
+ */
20
+ export declare function withGlobalLock<T>(fn: () => Promise<T>): Promise<T>;
21
+ declare const _default: {
22
+ acquireGlobalLock: typeof acquireGlobalLock;
23
+ releaseGlobalLock: typeof releaseGlobalLock;
24
+ isGlobalLocked: typeof isGlobalLocked;
25
+ withGlobalLock: typeof withGlobalLock;
26
+ };
27
+ export default _default;
28
+ //# sourceMappingURL=global-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-lock.d.ts","sourceRoot":"","sources":["../../src/utils/global-lock.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiB1D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CASvD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUxE;;;;;;;AAED,wBAKE"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * 全局操作锁
3
+ * 防止多个 tanmi-dock 命令同时执行导致冲突
4
+ */
5
+ import lockfile from 'proper-lockfile';
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { getConfigDir } from '../core/platform.js';
9
+ const LOCK_FILE = 'tanmi-dock.lock';
10
+ let globalLockRelease = null;
11
+ /**
12
+ * 获取锁文件路径
13
+ */
14
+ function getLockPath() {
15
+ return path.join(getConfigDir(), LOCK_FILE);
16
+ }
17
+ /**
18
+ * 获取全局锁
19
+ * @returns 是否成功获取锁
20
+ */
21
+ export async function acquireGlobalLock() {
22
+ const lockPath = getLockPath();
23
+ try {
24
+ // 确保配置目录和锁文件存在
25
+ const dir = path.dirname(lockPath);
26
+ await fs.mkdir(dir, { recursive: true });
27
+ await fs.writeFile(lockPath, '', { flag: 'a' }); // 追加模式,文件存在则不覆盖
28
+ globalLockRelease = await lockfile.lock(lockPath, {
29
+ retries: 0, // 不重试,立即失败
30
+ stale: 60000, // 60秒后锁过期(防止进程异常退出后锁不释放)
31
+ });
32
+ return true;
33
+ }
34
+ catch {
35
+ return false; // 已有其他进程持有锁
36
+ }
37
+ }
38
+ /**
39
+ * 释放全局锁
40
+ */
41
+ export async function releaseGlobalLock() {
42
+ if (globalLockRelease) {
43
+ try {
44
+ await globalLockRelease();
45
+ }
46
+ catch {
47
+ // 忽略释放失败(可能锁已过期)
48
+ }
49
+ globalLockRelease = null;
50
+ }
51
+ }
52
+ /**
53
+ * 检查全局锁状态
54
+ */
55
+ export async function isGlobalLocked() {
56
+ const lockPath = getLockPath();
57
+ try {
58
+ await fs.access(lockPath);
59
+ return await lockfile.check(lockPath);
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ /**
66
+ * 使用全局锁执行操作
67
+ * @param fn 要执行的操作
68
+ * @returns 操作返回值
69
+ * @throws 如果无法获取锁
70
+ */
71
+ export async function withGlobalLock(fn) {
72
+ const acquired = await acquireGlobalLock();
73
+ if (!acquired) {
74
+ throw new Error('另一个 tanmi-dock 命令正在执行,请稍后重试');
75
+ }
76
+ try {
77
+ return await fn();
78
+ }
79
+ finally {
80
+ await releaseGlobalLock();
81
+ }
82
+ }
83
+ export default {
84
+ acquireGlobalLock,
85
+ releaseGlobalLock,
86
+ isGlobalLocked,
87
+ withGlobalLock,
88
+ };
89
+ //# sourceMappingURL=global-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-lock.js","sourceRoot":"","sources":["../../src/utils/global-lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC,IAAI,iBAAiB,GAAiC,IAAI,CAAC;AAE3D;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,eAAe;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB;QAEjE,iBAAiB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChD,OAAO,EAAE,CAAC,EAAE,WAAW;YACvB,KAAK,EAAE,KAAK,EAAE,yBAAyB;SACxC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,YAAY;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,iBAAiB,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,EAAoB;IAC1D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,iBAAiB,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,eAAe;IACb,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,cAAc;CACf,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface LockOptions {
2
+ /** 获取锁失败时的重试次数 (默认 3) */
3
+ retries?: number;
4
+ /** 锁过期时间 ms (默认 10000) */
5
+ stale?: number;
6
+ /** 重试间隔 ms (默认 100) */
7
+ retryWait?: number;
8
+ }
9
+ /**
10
+ * 使用文件锁执行操作
11
+ * @param filePath 要锁定的文件路径
12
+ * @param fn 要执行的操作
13
+ * @param options 锁配置选项
14
+ * @returns 操作返回值
15
+ */
16
+ export declare function withFileLock<T>(filePath: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
17
+ /**
18
+ * 检查文件是否被锁定
19
+ */
20
+ export declare function isLocked(filePath: string): Promise<boolean>;
21
+ declare const _default: {
22
+ withFileLock: typeof withFileLock;
23
+ isLocked: typeof isLocked;
24
+ };
25
+ export default _default;
26
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMjE;;;;;AAgBD,wBAGE"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 文件锁工具
3
+ * 防止多进程并发写入导致数据损坏
4
+ */
5
+ import lockfile from 'proper-lockfile';
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ const DEFAULT_OPTIONS = {
9
+ retries: 3,
10
+ stale: 10000,
11
+ retryWait: 100,
12
+ };
13
+ /**
14
+ * 使用文件锁执行操作
15
+ * @param filePath 要锁定的文件路径
16
+ * @param fn 要执行的操作
17
+ * @param options 锁配置选项
18
+ * @returns 操作返回值
19
+ */
20
+ export async function withFileLock(filePath, fn, options) {
21
+ const opts = { ...DEFAULT_OPTIONS, ...options };
22
+ // 确保文件存在(proper-lockfile 需要文件存在)
23
+ await ensureFileExists(filePath);
24
+ const release = await lockfile.lock(filePath, {
25
+ retries: {
26
+ retries: opts.retries,
27
+ minTimeout: opts.retryWait,
28
+ maxTimeout: opts.retryWait * 2,
29
+ },
30
+ stale: opts.stale,
31
+ });
32
+ try {
33
+ return await fn();
34
+ }
35
+ finally {
36
+ await release();
37
+ }
38
+ }
39
+ /**
40
+ * 检查文件是否被锁定
41
+ */
42
+ export async function isLocked(filePath) {
43
+ try {
44
+ return await lockfile.check(filePath);
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ /**
51
+ * 确保文件存在(锁定需要文件存在)
52
+ */
53
+ async function ensureFileExists(filePath) {
54
+ try {
55
+ await fs.access(filePath);
56
+ }
57
+ catch {
58
+ // 文件不存在,创建空文件
59
+ const dir = path.dirname(filePath);
60
+ await fs.mkdir(dir, { recursive: true });
61
+ await fs.writeFile(filePath, '', 'utf-8');
62
+ }
63
+ }
64
+ export default {
65
+ withFileLock,
66
+ isLocked,
67
+ };
68
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAWxB,MAAM,eAAe,GAA0B;IAC7C,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,GAAG;CACf,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,EAAoB,EACpB,OAAqB;IAErB,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAEhD,iCAAiC;IACjC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC5C,OAAO,EAAE;YACP,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,UAAU,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC;SAC/B;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,eAAe;IACb,YAAY;IACZ,QAAQ;CACT,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * 日志输出工具
3
+ * - 无 emoji,保持简洁
4
+ * - 中文输出
5
+ * - 状态标记:[ok] [warn] [err] [info]
6
+ */
7
+ /**
8
+ * 普通信息
9
+ */
10
+ export declare function info(message: string): void;
11
+ /**
12
+ * 成功信息 - 绿色 [ok]
13
+ */
14
+ export declare function success(message: string): void;
15
+ /**
16
+ * 警告信息 - 黄色 [warn]
17
+ */
18
+ export declare function warn(message: string): void;
19
+ /**
20
+ * 错误信息 - 红色 [err]
21
+ */
22
+ export declare function error(message: string): void;
23
+ /**
24
+ * 调试信息 - 灰色,仅在 DEBUG 环境变量时输出
25
+ */
26
+ export declare function debug(message: string): void;
27
+ /**
28
+ * 详细信息 - 灰色,仅在 VERBOSE 或 DEBUG 环境变量时输出
29
+ */
30
+ export declare function verbose(message: string): void;
31
+ /**
32
+ * 详细 JSON 输出
33
+ */
34
+ export declare function verboseJson(label: string, data: unknown): void;
35
+ /**
36
+ * 检查是否启用 verbose 模式
37
+ */
38
+ export declare function isVerbose(): boolean;
39
+ /**
40
+ * 提示信息 - 蓝色 [info]
41
+ */
42
+ export declare function hint(message: string): void;
43
+ /**
44
+ * 进度显示
45
+ */
46
+ export declare function progress(current: number, total: number, message: string): void;
47
+ /**
48
+ * 进度条显示
49
+ */
50
+ export declare function progressBar(current: number, total: number, width?: number): void;
51
+ /**
52
+ * 树状结构项
53
+ */
54
+ export interface TreeItem {
55
+ label: string;
56
+ children?: TreeItem[];
57
+ warn?: boolean;
58
+ }
59
+ /**
60
+ * 树状结构输出
61
+ */
62
+ export declare function tree(items: TreeItem[], prefix?: string): void;
63
+ /**
64
+ * 简单表格输出
65
+ */
66
+ export declare function table(rows: string[][], padding?: number): void;
67
+ /**
68
+ * 分隔线
69
+ */
70
+ export declare function separator(char?: string, length?: number): void;
71
+ /**
72
+ * 空行
73
+ */
74
+ export declare function blank(): void;
75
+ /**
76
+ * 标题
77
+ */
78
+ export declare function title(text: string): void;
79
+ declare const _default: {
80
+ info: typeof info;
81
+ success: typeof success;
82
+ warn: typeof warn;
83
+ error: typeof error;
84
+ debug: typeof debug;
85
+ verbose: typeof verbose;
86
+ verboseJson: typeof verboseJson;
87
+ isVerbose: typeof isVerbose;
88
+ hint: typeof hint;
89
+ progress: typeof progress;
90
+ progressBar: typeof progressBar;
91
+ tree: typeof tree;
92
+ table: typeof table;
93
+ separator: typeof separator;
94
+ blank: typeof blank;
95
+ title: typeof title;
96
+ };
97
+ export default _default;
98
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,IAAI,CAS5E;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,SAAK,GAAG,IAAI,CAiBzD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,SAAI,GAAG,IAAI,CAgBzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,SAAM,EAAE,MAAM,SAAK,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExC;;;;;;;;;;;;;;;;;;;AAED,wBAiBE"}