douyin-downloader 0.1.0

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 (161) hide show
  1. package/README.md +114 -0
  2. package/dist/bin/dydl.d.ts +2 -0
  3. package/dist/bin/dydl.js +17 -0
  4. package/dist/bin/dydl.js.map +1 -0
  5. package/dist/src/cli/commands/check.d.ts +10 -0
  6. package/dist/src/cli/commands/check.js +102 -0
  7. package/dist/src/cli/commands/check.js.map +1 -0
  8. package/dist/src/cli/commands/info.d.ts +10 -0
  9. package/dist/src/cli/commands/info.js +106 -0
  10. package/dist/src/cli/commands/info.js.map +1 -0
  11. package/dist/src/cli/commands/list.d.ts +10 -0
  12. package/dist/src/cli/commands/list.js +85 -0
  13. package/dist/src/cli/commands/list.js.map +1 -0
  14. package/dist/src/cli/commands/login.d.ts +10 -0
  15. package/dist/src/cli/commands/login.js +158 -0
  16. package/dist/src/cli/commands/login.js.map +1 -0
  17. package/dist/src/cli/commands/open.d.ts +10 -0
  18. package/dist/src/cli/commands/open.js +141 -0
  19. package/dist/src/cli/commands/open.js.map +1 -0
  20. package/dist/src/cli/commands/video.d.ts +10 -0
  21. package/dist/src/cli/commands/video.js +209 -0
  22. package/dist/src/cli/commands/video.js.map +1 -0
  23. package/dist/src/cli/index.d.ts +15 -0
  24. package/dist/src/cli/index.js +134 -0
  25. package/dist/src/cli/index.js.map +1 -0
  26. package/dist/src/cli/progress-display.d.ts +80 -0
  27. package/dist/src/cli/progress-display.js +225 -0
  28. package/dist/src/cli/progress-display.js.map +1 -0
  29. package/dist/src/cli/utils.d.ts +31 -0
  30. package/dist/src/cli/utils.js +171 -0
  31. package/dist/src/cli/utils.js.map +1 -0
  32. package/dist/src/douyin/auth/cookie-path.d.ts +22 -0
  33. package/dist/src/douyin/auth/cookie-path.js +72 -0
  34. package/dist/src/douyin/auth/cookie-path.js.map +1 -0
  35. package/dist/src/douyin/auth/cookie-storage.d.ts +19 -0
  36. package/dist/src/douyin/auth/cookie-storage.js +65 -0
  37. package/dist/src/douyin/auth/cookie-storage.js.map +1 -0
  38. package/dist/src/douyin/auth/errors.d.ts +28 -0
  39. package/dist/src/douyin/auth/errors.js +49 -0
  40. package/dist/src/douyin/auth/errors.js.map +1 -0
  41. package/dist/src/douyin/auth/getDefaultCookiePath.d.ts +24 -0
  42. package/dist/src/douyin/auth/getDefaultCookiePath.js +90 -0
  43. package/dist/src/douyin/auth/getDefaultCookiePath.js.map +1 -0
  44. package/dist/src/douyin/auth/index.d.ts +16 -0
  45. package/dist/src/douyin/auth/index.js +68 -0
  46. package/dist/src/douyin/auth/index.js.map +1 -0
  47. package/dist/src/douyin/auth/isValidCookie.d.ts +18 -0
  48. package/dist/src/douyin/auth/isValidCookie.js +60 -0
  49. package/dist/src/douyin/auth/isValidCookie.js.map +1 -0
  50. package/dist/src/douyin/auth/loadAndValidateCookie.d.ts +17 -0
  51. package/dist/src/douyin/auth/loadAndValidateCookie.js +45 -0
  52. package/dist/src/douyin/auth/loadAndValidateCookie.js.map +1 -0
  53. package/dist/src/douyin/auth/loadCookie.d.ts +17 -0
  54. package/dist/src/douyin/auth/loadCookie.js +79 -0
  55. package/dist/src/douyin/auth/loadCookie.js.map +1 -0
  56. package/dist/src/douyin/auth/login.d.ts +33 -0
  57. package/dist/src/douyin/auth/login.js +157 -0
  58. package/dist/src/douyin/auth/login.js.map +1 -0
  59. package/dist/src/douyin/auth/saveCookie.d.ts +17 -0
  60. package/dist/src/douyin/auth/saveCookie.js +89 -0
  61. package/dist/src/douyin/auth/saveCookie.js.map +1 -0
  62. package/dist/src/douyin/auth/validate.d.ts +11 -0
  63. package/dist/src/douyin/auth/validate.js +104 -0
  64. package/dist/src/douyin/auth/validate.js.map +1 -0
  65. package/dist/src/douyin/browser/manager.d.ts +54 -0
  66. package/dist/src/douyin/browser/manager.js +344 -0
  67. package/dist/src/douyin/browser/manager.js.map +1 -0
  68. package/dist/src/douyin/download/download-manager.d.ts +25 -0
  69. package/dist/src/douyin/download/download-manager.js +107 -0
  70. package/dist/src/douyin/download/download-manager.js.map +1 -0
  71. package/dist/src/douyin/download/error-handler.d.ts +49 -0
  72. package/dist/src/douyin/download/error-handler.js +160 -0
  73. package/dist/src/douyin/download/error-handler.js.map +1 -0
  74. package/dist/src/douyin/download/index.d.ts +39 -0
  75. package/dist/src/douyin/download/index.js +156 -0
  76. package/dist/src/douyin/download/index.js.map +1 -0
  77. package/dist/src/douyin/download/path-formatter.d.ts +42 -0
  78. package/dist/src/douyin/download/path-formatter.js +107 -0
  79. package/dist/src/douyin/download/path-formatter.js.map +1 -0
  80. package/dist/src/douyin/download/video-downloader.d.ts +35 -0
  81. package/dist/src/douyin/download/video-downloader.js +223 -0
  82. package/dist/src/douyin/download/video-downloader.js.map +1 -0
  83. package/dist/src/douyin/index.d.ts +19 -0
  84. package/dist/src/douyin/index.js +52 -0
  85. package/dist/src/douyin/index.js.map +1 -0
  86. package/dist/src/douyin/info/batch-processor.d.ts +15 -0
  87. package/dist/src/douyin/info/batch-processor.js +65 -0
  88. package/dist/src/douyin/info/batch-processor.js.map +1 -0
  89. package/dist/src/douyin/info/browser-manager.d.ts +56 -0
  90. package/dist/src/douyin/info/browser-manager.js +225 -0
  91. package/dist/src/douyin/info/browser-manager.js.map +1 -0
  92. package/dist/src/douyin/info/error-handler.d.ts +36 -0
  93. package/dist/src/douyin/info/error-handler.js +172 -0
  94. package/dist/src/douyin/info/error-handler.js.map +1 -0
  95. package/dist/src/douyin/info/fetch-video-detail.d.ts +14 -0
  96. package/dist/src/douyin/info/fetch-video-detail.js +247 -0
  97. package/dist/src/douyin/info/fetch-video-detail.js.map +1 -0
  98. package/dist/src/douyin/info/index.d.ts +29 -0
  99. package/dist/src/douyin/info/index.js +85 -0
  100. package/dist/src/douyin/info/index.js.map +1 -0
  101. package/dist/src/douyin/info/text-processor.d.ts +15 -0
  102. package/dist/src/douyin/info/text-processor.js +47 -0
  103. package/dist/src/douyin/info/text-processor.js.map +1 -0
  104. package/dist/src/douyin/info/user.d.ts +26 -0
  105. package/dist/src/douyin/info/user.js +237 -0
  106. package/dist/src/douyin/info/user.js.map +1 -0
  107. package/dist/src/douyin/parser/containsDouyinLink.d.ts +18 -0
  108. package/dist/src/douyin/parser/containsDouyinLink.js +27 -0
  109. package/dist/src/douyin/parser/containsDouyinLink.js.map +1 -0
  110. package/dist/src/douyin/parser/extract-links.d.ts +23 -0
  111. package/dist/src/douyin/parser/extract-links.js +79 -0
  112. package/dist/src/douyin/parser/extract-links.js.map +1 -0
  113. package/dist/src/douyin/parser/extractDouyinLinks.d.ts +18 -0
  114. package/dist/src/douyin/parser/extractDouyinLinks.js +58 -0
  115. package/dist/src/douyin/parser/extractDouyinLinks.js.map +1 -0
  116. package/dist/src/douyin/parser/index.d.ts +35 -0
  117. package/dist/src/douyin/parser/index.js +70 -0
  118. package/dist/src/douyin/parser/index.js.map +1 -0
  119. package/dist/src/douyin/parser/link-patterns.d.ts +34 -0
  120. package/dist/src/douyin/parser/link-patterns.js +121 -0
  121. package/dist/src/douyin/parser/link-patterns.js.map +1 -0
  122. package/dist/src/douyin/parser/parse-batch.d.ts +26 -0
  123. package/dist/src/douyin/parser/parse-batch.js +67 -0
  124. package/dist/src/douyin/parser/parse-batch.js.map +1 -0
  125. package/dist/src/douyin/parser/parseDouyinLinks.d.ts +30 -0
  126. package/dist/src/douyin/parser/parseDouyinLinks.js +164 -0
  127. package/dist/src/douyin/parser/parseDouyinLinks.js.map +1 -0
  128. package/dist/src/douyin/parser/resolve-links.d.ts +25 -0
  129. package/dist/src/douyin/parser/resolve-links.js +131 -0
  130. package/dist/src/douyin/parser/resolve-links.js.map +1 -0
  131. package/dist/src/index.d.ts +16 -0
  132. package/dist/src/index.js +72 -0
  133. package/dist/src/index.js.map +1 -0
  134. package/dist/src/types.d.ts +217 -0
  135. package/dist/src/types.js +6 -0
  136. package/dist/src/types.js.map +1 -0
  137. package/dist/src/utils/browser.d.ts +73 -0
  138. package/dist/src/utils/browser.js +96 -0
  139. package/dist/src/utils/browser.js.map +1 -0
  140. package/dist/src/utils/error.d.ts +160 -0
  141. package/dist/src/utils/error.js +334 -0
  142. package/dist/src/utils/error.js.map +1 -0
  143. package/dist/src/utils/fetch.d.ts +41 -0
  144. package/dist/src/utils/fetch.js +155 -0
  145. package/dist/src/utils/fetch.js.map +1 -0
  146. package/dist/src/utils/file.d.ts +46 -0
  147. package/dist/src/utils/file.js +189 -0
  148. package/dist/src/utils/file.js.map +1 -0
  149. package/dist/src/utils/index.d.ts +11 -0
  150. package/dist/src/utils/index.js +29 -0
  151. package/dist/src/utils/index.js.map +1 -0
  152. package/dist/src/utils/logger.d.ts +161 -0
  153. package/dist/src/utils/logger.js +286 -0
  154. package/dist/src/utils/logger.js.map +1 -0
  155. package/dist/src/utils/performance.d.ts +98 -0
  156. package/dist/src/utils/performance.js +292 -0
  157. package/dist/src/utils/performance.js.map +1 -0
  158. package/dist/src/utils/retry.d.ts +56 -0
  159. package/dist/src/utils/retry.js +127 -0
  160. package/dist/src/utils/retry.js.map +1 -0
  161. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * 通用性能監測工具
3
+ * 提供高級性能監測和分析功能
4
+ */
5
+ /**
6
+ * 性能監測器接口
7
+ */
8
+ export interface PerformanceMonitor {
9
+ mark(name: string): void;
10
+ measure(name: string, startMark: string, endMark: string): number;
11
+ getMeasurements(): Record<string, number>;
12
+ finalize(): Record<string, number>;
13
+ }
14
+ /**
15
+ * 性能監測選項
16
+ */
17
+ export interface PerformanceMonitorOptions {
18
+ name: string;
19
+ autoLog?: boolean;
20
+ logResults?: boolean;
21
+ keepHistory?: boolean;
22
+ maxHistoryLength?: number;
23
+ }
24
+ /**
25
+ * 性能監測器實現
26
+ * 用於測量和分析代碼執行性能
27
+ */
28
+ export declare class PerformanceMonitor {
29
+ private startTime;
30
+ private active;
31
+ private markers;
32
+ private measurements;
33
+ private history;
34
+ private readonly options;
35
+ /**
36
+ * 創建性能監測器
37
+ * @param options 性能監測選項
38
+ */
39
+ constructor(options: PerformanceMonitorOptions);
40
+ /**
41
+ * 獲取性能歷史記錄
42
+ * @returns 性能歷史記錄
43
+ */
44
+ getHistory(): Array<{
45
+ name: string;
46
+ duration: number;
47
+ timestamp: number;
48
+ }>;
49
+ /**
50
+ * 監測異步函數執行性能
51
+ * @param name 操作名稱
52
+ * @param fn 要監測的異步函數
53
+ * @returns Promise 解析為函數返回值和性能數據
54
+ */
55
+ static monitor<T>(name: string, fn: () => Promise<T>, options?: Partial<PerformanceMonitorOptions>): Promise<{
56
+ result: T;
57
+ performance: Record<string, number>;
58
+ }>;
59
+ /**
60
+ * 創建性能監測裝飾器
61
+ * 用於裝飾類方法並監測其性能
62
+ * @param options 性能監測選項
63
+ * @returns 方法裝飾器
64
+ */
65
+ static monitorMethod(options?: Partial<PerformanceMonitorOptions>): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
66
+ }
67
+ /**
68
+ * 全局性能監測器工廠
69
+ */
70
+ export declare class PerformanceMonitorFactory {
71
+ private static monitors;
72
+ /**
73
+ * 創建或獲取性能監測器
74
+ * @param name 監測器名稱
75
+ * @param options 性能監測選項
76
+ * @returns 性能監測器實例
77
+ */
78
+ static getMonitor(name: string, options?: Partial<Omit<PerformanceMonitorOptions, 'name'>>): PerformanceMonitor;
79
+ /**
80
+ * 結束所有活躍的監測器
81
+ * @returns 所有監測器的結果
82
+ */
83
+ static finalizeAll(): Record<string, Record<string, number>>;
84
+ }
85
+ /**
86
+ * 監測函數執行時間的簡單工具
87
+ * @param name 操作名稱
88
+ * @param fn 要監測的函數
89
+ * @returns 函數返回值
90
+ */
91
+ export declare function time<T>(name: string, fn: () => T): T;
92
+ /**
93
+ * 監測異步函數執行時間的簡單工具
94
+ * @param name 操作名稱
95
+ * @param fn 要監測的異步函數
96
+ * @returns Promise 解析為函數返回值
97
+ */
98
+ export declare function timeAsync<T>(name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ /**
3
+ * 通用性能監測工具
4
+ * 提供高級性能監測和分析功能
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PerformanceMonitorFactory = exports.PerformanceMonitor = void 0;
8
+ exports.time = time;
9
+ exports.timeAsync = timeAsync;
10
+ const logger_1 = require("./logger"); // Use the utils logger
11
+ const perf_hooks_1 = require("perf_hooks"); // Use Node.js's performance API
12
+ /**
13
+ * 性能監測器實現
14
+ * 用於測量和分析代碼執行性能
15
+ */
16
+ class PerformanceMonitor {
17
+ startTime;
18
+ active = true;
19
+ markers = new Map();
20
+ measurements = new Map();
21
+ history = [];
22
+ options;
23
+ /**
24
+ * 創建性能監測器
25
+ * @param options 性能監測選項
26
+ */
27
+ constructor(options) {
28
+ this.options = {
29
+ name: options.name,
30
+ autoLog: options.autoLog ?? false,
31
+ logResults: options.logResults ?? true,
32
+ keepHistory: options.keepHistory ?? false,
33
+ maxHistoryLength: options.maxHistoryLength ?? 100
34
+ };
35
+ this.startTime = perf_hooks_1.performance.now();
36
+ this.markers.set('start', this.startTime);
37
+ if (this.options.autoLog) {
38
+ logger_1.utilsLogger.debug(`[性能監測] ${this.options.name}: 開始監測`);
39
+ }
40
+ }
41
+ /**
42
+ * 設置標記點
43
+ * @param name 標記名稱
44
+ */
45
+ mark(name) {
46
+ if (!this.active) {
47
+ logger_1.utilsLogger.warn(`[性能監測] ${this.options.name}: 嘗試在已結束的監測器上設置標記 ${name}`);
48
+ return;
49
+ }
50
+ const time = perf_hooks_1.performance.now();
51
+ this.markers.set(name, time);
52
+ if (this.options.autoLog) {
53
+ const elapsed = time - this.startTime;
54
+ logger_1.utilsLogger.debug(`[性能監測] ${this.options.name}: 標記 ${name} 設置於 +${elapsed.toFixed(2)}ms`);
55
+ }
56
+ }
57
+ /**
58
+ * 測量兩個標記點之間的耗時
59
+ * @param name 測量名稱
60
+ * @param startMark 開始標記名稱
61
+ * @param endMark 結束標記名稱
62
+ * @returns 測量結果(毫秒)
63
+ */
64
+ measure(name, startMark, endMark) {
65
+ if (!this.markers.has(startMark) || !this.markers.has(endMark)) {
66
+ logger_1.utilsLogger.warn(`[性能監測] ${this.options.name}: 無法測量 ${startMark} 到 ${endMark},缺少標記點`);
67
+ return -1;
68
+ }
69
+ const startTime = this.markers.get(startMark);
70
+ const endTime = this.markers.get(endMark);
71
+ const duration = endTime - startTime;
72
+ this.measurements.set(name, duration);
73
+ if (this.options.keepHistory) {
74
+ this.history.push({
75
+ name,
76
+ duration,
77
+ timestamp: Date.now()
78
+ });
79
+ // 保持歷史記錄在限制範圍內
80
+ if (this.history.length > this.options.maxHistoryLength) {
81
+ this.history.shift();
82
+ }
83
+ }
84
+ if (this.options.autoLog) {
85
+ logger_1.utilsLogger.debug(`[性能監測] ${this.options.name}: ${name} 耗時 ${duration.toFixed(2)}ms`);
86
+ }
87
+ return duration;
88
+ }
89
+ /**
90
+ * 獲取所有測量結果
91
+ * @returns 測量結果記錄
92
+ */
93
+ getMeasurements() {
94
+ return Object.fromEntries(this.measurements);
95
+ }
96
+ /**
97
+ * 獲取性能歷史記錄
98
+ * @returns 性能歷史記錄
99
+ */
100
+ getHistory() {
101
+ return [...this.history];
102
+ }
103
+ /**
104
+ * 結束監測並返回結果
105
+ * @returns 完整測量結果
106
+ */
107
+ finalize() {
108
+ if (!this.active) {
109
+ logger_1.utilsLogger.warn(`[性能監測] ${this.options.name}: 嘗試結束已經結束的監測器`);
110
+ return this.getMeasurements();
111
+ }
112
+ // 設置結束標記
113
+ this.mark('end');
114
+ // 計算總耗時
115
+ const totalDuration = this.markers.get('end') - this.startTime;
116
+ const results = {
117
+ total: totalDuration,
118
+ ...this.getMeasurements()
119
+ };
120
+ // 計算各階段耗時
121
+ let lastTime = this.startTime;
122
+ Array.from(this.markers.entries())
123
+ .filter(([name]) => name !== 'start' && name !== 'end')
124
+ .sort((a, b) => a[1] - b[1])
125
+ .forEach(([marker, time]) => {
126
+ results[`time_to_${marker}`] = time - this.startTime;
127
+ // Calculate time since last marker, handle potential NaN if lastTime is somehow invalid
128
+ results[`time_in_${marker}`] = Number.isFinite(lastTime) ? time - lastTime : 0;
129
+ lastTime = time;
130
+ });
131
+ // 標記監測器已結束
132
+ this.active = false;
133
+ // 記錄結果
134
+ if (this.options.logResults) {
135
+ logger_1.utilsLogger.info(`[性能監測] ${this.options.name}: 完成,總耗時 ${totalDuration.toFixed(2)}ms`, { performance: results });
136
+ }
137
+ return results;
138
+ }
139
+ /**
140
+ * 監測異步函數執行性能
141
+ * @param name 操作名稱
142
+ * @param fn 要監測的異步函數
143
+ * @returns Promise 解析為函數返回值和性能數據
144
+ */
145
+ static async monitor(name, fn, options) {
146
+ const monitor = new PerformanceMonitor({
147
+ name,
148
+ ...options
149
+ });
150
+ try {
151
+ monitor.mark('functionStart');
152
+ const result = await fn();
153
+ monitor.mark('functionEnd');
154
+ monitor.measure('functionExecution', 'functionStart', 'functionEnd');
155
+ return {
156
+ result,
157
+ performance: monitor.finalize()
158
+ };
159
+ }
160
+ catch (error) {
161
+ monitor.mark('functionError');
162
+ monitor.measure('timeToError', 'functionStart', 'functionError');
163
+ const performance = monitor.finalize();
164
+ // 重新拋出錯誤,附加性能數據
165
+ if (error instanceof Error) {
166
+ error.performance = performance;
167
+ }
168
+ throw error;
169
+ }
170
+ }
171
+ /**
172
+ * 創建性能監測裝飾器
173
+ * 用於裝飾類方法並監測其性能
174
+ * @param options 性能監測選項
175
+ * @returns 方法裝飾器
176
+ */
177
+ static monitorMethod(options = {}) {
178
+ return function (target, propertyKey, descriptor) {
179
+ const originalMethod = descriptor.value;
180
+ descriptor.value = function (...args) {
181
+ const methodName = options.name || `${target.constructor.name}.${propertyKey}`;
182
+ const monitor = new PerformanceMonitor({
183
+ name: methodName,
184
+ ...options
185
+ });
186
+ try {
187
+ const result = originalMethod.apply(this, args);
188
+ // 處理異步方法 (Promise)
189
+ if (result instanceof Promise) {
190
+ return result
191
+ .then(value => {
192
+ monitor.mark('resolved');
193
+ monitor.finalize();
194
+ return value;
195
+ })
196
+ .catch(error => {
197
+ monitor.mark('rejected');
198
+ monitor.finalize();
199
+ throw error;
200
+ });
201
+ }
202
+ // 處理同步方法
203
+ monitor.finalize();
204
+ return result;
205
+ }
206
+ catch (error) {
207
+ monitor.mark('error');
208
+ monitor.finalize();
209
+ throw error;
210
+ }
211
+ };
212
+ return descriptor;
213
+ };
214
+ }
215
+ }
216
+ exports.PerformanceMonitor = PerformanceMonitor;
217
+ /**
218
+ * 全局性能監測器工廠
219
+ */
220
+ class PerformanceMonitorFactory {
221
+ static monitors = new Map();
222
+ /**
223
+ * 創建或獲取性能監測器
224
+ * @param name 監測器名稱
225
+ * @param options 性能監測選項
226
+ * @returns 性能監測器實例
227
+ */
228
+ static getMonitor(name, options = {}) {
229
+ if (!this.monitors.has(name)) {
230
+ this.monitors.set(name, new PerformanceMonitor({
231
+ name,
232
+ ...options
233
+ }));
234
+ }
235
+ return this.monitors.get(name);
236
+ }
237
+ /**
238
+ * 結束所有活躍的監測器
239
+ * @returns 所有監測器的結果
240
+ */
241
+ static finalizeAll() {
242
+ const results = {};
243
+ this.monitors.forEach((monitor, name) => {
244
+ results[name] = monitor.finalize();
245
+ });
246
+ // 清空監測器列表
247
+ this.monitors.clear();
248
+ return results;
249
+ }
250
+ }
251
+ exports.PerformanceMonitorFactory = PerformanceMonitorFactory;
252
+ /**
253
+ * 監測函數執行時間的簡單工具
254
+ * @param name 操作名稱
255
+ * @param fn 要監測的函數
256
+ * @returns 函數返回值
257
+ */
258
+ function time(name, fn) {
259
+ const start = perf_hooks_1.performance.now();
260
+ try {
261
+ const result = fn();
262
+ const end = perf_hooks_1.performance.now();
263
+ logger_1.utilsLogger.debug(`[時間] ${name}: ${(end - start).toFixed(2)}ms`);
264
+ return result;
265
+ }
266
+ catch (error) {
267
+ const end = perf_hooks_1.performance.now();
268
+ logger_1.utilsLogger.debug(`[時間] ${name} (錯誤): ${(end - start).toFixed(2)}ms`);
269
+ throw error;
270
+ }
271
+ }
272
+ /**
273
+ * 監測異步函數執行時間的簡單工具
274
+ * @param name 操作名稱
275
+ * @param fn 要監測的異步函數
276
+ * @returns Promise 解析為函數返回值
277
+ */
278
+ async function timeAsync(name, fn) {
279
+ const start = perf_hooks_1.performance.now();
280
+ try {
281
+ const result = await fn();
282
+ const end = perf_hooks_1.performance.now();
283
+ logger_1.utilsLogger.debug(`[時間] ${name}: ${(end - start).toFixed(2)}ms`);
284
+ return result;
285
+ }
286
+ catch (error) {
287
+ const end = perf_hooks_1.performance.now();
288
+ logger_1.utilsLogger.debug(`[時間] ${name} (錯誤): ${(end - start).toFixed(2)}ms`);
289
+ throw error;
290
+ }
291
+ }
292
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../src/utils/performance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 通用重試與並發控制工具
3
+ * 使用 @supercharge/promise-pool 實現並發控制和重試機制
4
+ */
5
+ /**
6
+ * 重試選項接口
7
+ */
8
+ export interface RetryOptions {
9
+ retries?: number;
10
+ minDelay?: number;
11
+ maxDelay?: number;
12
+ factor?: number;
13
+ /**
14
+ * 重試前的回調函數
15
+ * @param error 導致重試的錯誤
16
+ * @param attempt 即將進行的嘗試次數 (從 1 開始)
17
+ */
18
+ onRetry?: (error: Error, attempt: number) => void;
19
+ /**
20
+ * 判斷錯誤是否應該觸發重試的函數
21
+ * @param error 錯誤對象
22
+ * @returns boolean 是否應該重試
23
+ */
24
+ shouldRetry?: (error: Error) => boolean;
25
+ }
26
+ /**
27
+ * 帶重試機制的函數執行器
28
+ * @param fn 要執行的異步函數
29
+ * @param options 重試選項
30
+ * @returns Promise<T> 函數執行結果
31
+ */
32
+ export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
33
+ /**
34
+ * 並發處理選項接口
35
+ */
36
+ export interface ProcessBatchOptions extends RetryOptions {
37
+ concurrency?: number;
38
+ /**
39
+ * 批處理進度回調
40
+ * @param completed 已完成的任務數
41
+ * @param total 總任務數
42
+ * @param errors 錯誤列表 (如果有的話)
43
+ */
44
+ onProgress?: (completed: number, total: number, errors: Error[]) => void;
45
+ }
46
+ /**
47
+ * 並發執行任務列表,帶重試機制
48
+ * @param items 要處理的項目數組
49
+ * @param fn 處理每個項目的異步函數
50
+ * @param options 執行選項,包括並行數和重試選項
51
+ * @returns Promise<{ results: R[], errors: Error[] }> 包含成功結果和錯誤的對象
52
+ */
53
+ export declare function processBatch<T, R>(items: T[], fn: (item: T, index: number) => Promise<R>, options?: ProcessBatchOptions): Promise<{
54
+ results: R[];
55
+ errors: Error[];
56
+ }>;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * 通用重試與並發控制工具
4
+ * 使用 @supercharge/promise-pool 實現並發控制和重試機制
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.withRetry = withRetry;
8
+ exports.processBatch = processBatch;
9
+ const promise_pool_1 = require("@supercharge/promise-pool");
10
+ const logger_1 = require("./logger"); // Use the utils logger
11
+ const fetch_1 = require("./fetch"); // Import delay from shared fetch utils
12
+ /**
13
+ * 默認重試選項
14
+ */
15
+ const DEFAULT_RETRY_OPTIONS = {
16
+ retries: 3,
17
+ minDelay: 1000,
18
+ maxDelay: 30000,
19
+ factor: 2,
20
+ onRetry: (error, attempt) => logger_1.utilsLogger.debug(`重試 #${attempt},原因: ${error.message}`),
21
+ shouldRetry: (error) => true // 默認重試所有錯誤
22
+ };
23
+ /**
24
+ * 計算重試延遲時間 (帶指數退避和抖動)
25
+ * @param attempt 當前嘗試次數(從 1 開始)
26
+ * @param options 重試選項
27
+ * @returns 延遲時間(毫秒)
28
+ */
29
+ function calculateDelay(attempt, options) {
30
+ const { minDelay, maxDelay, factor } = options;
31
+ // 指數退避: minDelay * (factor ^ (attempt - 1))
32
+ let delay = minDelay * Math.pow(factor, attempt - 1);
33
+ // 添加一些隨機性 (抖動) 以避免 "雷暴" 效應
34
+ delay = delay * (0.8 + Math.random() * 0.4);
35
+ // 限制在最大延遲時間內
36
+ return Math.min(delay, maxDelay);
37
+ }
38
+ /**
39
+ * 帶重試機制的函數執行器
40
+ * @param fn 要執行的異步函數
41
+ * @param options 重試選項
42
+ * @returns Promise<T> 函數執行結果
43
+ */
44
+ async function withRetry(fn, options = {}) {
45
+ const mergedOptions = { ...DEFAULT_RETRY_OPTIONS, ...options };
46
+ const { retries, onRetry, shouldRetry } = mergedOptions;
47
+ let attempt = 0;
48
+ let lastError = new Error("Unknown error during retry");
49
+ while (attempt <= retries) {
50
+ try {
51
+ // 執行函數
52
+ return await fn();
53
+ }
54
+ catch (error) {
55
+ // 轉換為 Error 對象
56
+ lastError = error instanceof Error ? error : new Error(String(error));
57
+ attempt++; // Increment attempt count here
58
+ // 檢查是否應該重試
59
+ if (!shouldRetry(lastError)) {
60
+ logger_1.utilsLogger.warn(`錯誤不可重試: ${lastError.message}`);
61
+ throw lastError;
62
+ }
63
+ // 如果已達到最大重試次數,拋出錯誤
64
+ if (attempt > retries) {
65
+ logger_1.utilsLogger.error(`函數執行失敗,已達到最大重試次數 (${retries}): ${lastError.message}`);
66
+ throw lastError;
67
+ }
68
+ // 調用重試回調 (傳遞的是下一次嘗試的序號)
69
+ onRetry(lastError, attempt);
70
+ // 計算延遲時間
71
+ const delayTime = calculateDelay(attempt, mergedOptions);
72
+ logger_1.utilsLogger.debug(`等待 ${delayTime.toFixed(0)}ms 後重試...`);
73
+ // 等待後重試
74
+ await (0, fetch_1.delay)(delayTime);
75
+ // attempt is already incremented for the next loop iteration
76
+ }
77
+ }
78
+ // 理論上不應該執行到這裡
79
+ throw lastError;
80
+ }
81
+ /**
82
+ * 並發執行任務列表,帶重試機制
83
+ * @param items 要處理的項目數組
84
+ * @param fn 處理每個項目的異步函數
85
+ * @param options 執行選項,包括並行數和重試選項
86
+ * @returns Promise<{ results: R[], errors: Error[] }> 包含成功結果和錯誤的對象
87
+ */
88
+ async function processBatch(items, fn, options = {}) {
89
+ const { concurrency = 3, retries = 3, minDelay = 1000, maxDelay = 30000, factor = 2, onRetry = DEFAULT_RETRY_OPTIONS.onRetry, shouldRetry = DEFAULT_RETRY_OPTIONS.shouldRetry, onProgress } = options;
90
+ let completed = 0;
91
+ const total = items.length;
92
+ const allErrors = [];
93
+ logger_1.utilsLogger.info(`開始並行處理 ${total} 個任務,並行數: ${concurrency}, 重試次數: ${retries}`);
94
+ const { results, errors } = await promise_pool_1.PromisePool
95
+ .withConcurrency(concurrency)
96
+ .for(items)
97
+ .handleError(async (error, item, pool) => {
98
+ // PromisePool 的錯誤處理器
99
+ const err = error instanceof Error ? error : new Error(String(error));
100
+ allErrors.push(err); // 收集錯誤
101
+ logger_1.utilsLogger.error(`處理項目失敗 (PromisePool): ${err.message}`, err);
102
+ // 可以選擇停止池: pool.stop()
103
+ })
104
+ .process(async (item, index) => {
105
+ const result = await withRetry(() => fn(item, index), { retries, minDelay, maxDelay, factor, onRetry, shouldRetry });
106
+ completed++;
107
+ if (onProgress) {
108
+ // 提供實時進度,包括當前錯誤列表
109
+ onProgress(completed, total, allErrors);
110
+ }
111
+ return result;
112
+ });
113
+ // PromisePool 的 errors 數組可能包含由 handleError 捕獲的錯誤
114
+ // 我們已經在 allErrors 中收集了 withRetry 拋出的最終錯誤
115
+ const finalErrors = allErrors.concat(errors); // 合併兩者以防萬一
116
+ if (finalErrors.length > 0) {
117
+ logger_1.utilsLogger.warn(`處理完成,${finalErrors.length}/${total} 個任務最終失敗`);
118
+ // Optionally log details of each error
119
+ // finalErrors.forEach((err, i) => logger.debug(`失敗 #${i + 1}: ${err.message}`));
120
+ }
121
+ else {
122
+ logger_1.utilsLogger.info(`成功處理所有 ${total} 個任務`);
123
+ }
124
+ // results 數組只包含成功完成的任務的結果
125
+ return { results: results, errors: finalErrors };
126
+ }
127
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "douyin-downloader",
3
+ "version": "0.1.0",
4
+ "description": "抖音影片解析與下載套件",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "dydl": "dist/bin/dydl.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc && chmod +x ./dist/bin/dydl.js",
12
+ "prepublishOnly": "npm run build",
13
+ "version": "npm run format && git add -A src",
14
+ "postversion": "git push && git push --tags",
15
+ "start": "node dist/bin/dydl.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "LICENSE",
20
+ "README.md"
21
+ ],
22
+ "keywords": [
23
+ "douyin",
24
+ "video",
25
+ "downloader",
26
+ "parser",
27
+ "抖音",
28
+ "影片",
29
+ "下載",
30
+ "解析"
31
+ ],
32
+ "author": "",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/gkctou/douyin-downloader.git"
37
+ },
38
+ "engines": {
39
+ "node": ">=20.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/fs-extra": "^11.0.4",
43
+ "@types/node": "^22.14.0",
44
+ "eslint": "^8.57.1",
45
+ "jest": "^29.7.0",
46
+ "prettier": "^3.5.3",
47
+ "typescript": "^5.8.2"
48
+ },
49
+ "dependencies": {
50
+ "@supercharge/promise-pool": "^3.2.0",
51
+ "chalk": "^5.4.1",
52
+ "commander": "^13.1.0",
53
+ "env-paths": "^3.0.0",
54
+ "fs-extra": "^11.3.0",
55
+ "ora": "^8.2.0",
56
+ "puppeteer": "^22.15.0",
57
+ "puppeteer-extra": "^3.3.6",
58
+ "puppeteer-extra-plugin-stealth": "^2.11.2",
59
+ "sanitize-filename": "^1.6.3"
60
+ }
61
+ }