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.
- package/README.md +114 -0
- package/dist/bin/dydl.d.ts +2 -0
- package/dist/bin/dydl.js +17 -0
- package/dist/bin/dydl.js.map +1 -0
- package/dist/src/cli/commands/check.d.ts +10 -0
- package/dist/src/cli/commands/check.js +102 -0
- package/dist/src/cli/commands/check.js.map +1 -0
- package/dist/src/cli/commands/info.d.ts +10 -0
- package/dist/src/cli/commands/info.js +106 -0
- package/dist/src/cli/commands/info.js.map +1 -0
- package/dist/src/cli/commands/list.d.ts +10 -0
- package/dist/src/cli/commands/list.js +85 -0
- package/dist/src/cli/commands/list.js.map +1 -0
- package/dist/src/cli/commands/login.d.ts +10 -0
- package/dist/src/cli/commands/login.js +158 -0
- package/dist/src/cli/commands/login.js.map +1 -0
- package/dist/src/cli/commands/open.d.ts +10 -0
- package/dist/src/cli/commands/open.js +141 -0
- package/dist/src/cli/commands/open.js.map +1 -0
- package/dist/src/cli/commands/video.d.ts +10 -0
- package/dist/src/cli/commands/video.js +209 -0
- package/dist/src/cli/commands/video.js.map +1 -0
- package/dist/src/cli/index.d.ts +15 -0
- package/dist/src/cli/index.js +134 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/progress-display.d.ts +80 -0
- package/dist/src/cli/progress-display.js +225 -0
- package/dist/src/cli/progress-display.js.map +1 -0
- package/dist/src/cli/utils.d.ts +31 -0
- package/dist/src/cli/utils.js +171 -0
- package/dist/src/cli/utils.js.map +1 -0
- package/dist/src/douyin/auth/cookie-path.d.ts +22 -0
- package/dist/src/douyin/auth/cookie-path.js +72 -0
- package/dist/src/douyin/auth/cookie-path.js.map +1 -0
- package/dist/src/douyin/auth/cookie-storage.d.ts +19 -0
- package/dist/src/douyin/auth/cookie-storage.js +65 -0
- package/dist/src/douyin/auth/cookie-storage.js.map +1 -0
- package/dist/src/douyin/auth/errors.d.ts +28 -0
- package/dist/src/douyin/auth/errors.js +49 -0
- package/dist/src/douyin/auth/errors.js.map +1 -0
- package/dist/src/douyin/auth/getDefaultCookiePath.d.ts +24 -0
- package/dist/src/douyin/auth/getDefaultCookiePath.js +90 -0
- package/dist/src/douyin/auth/getDefaultCookiePath.js.map +1 -0
- package/dist/src/douyin/auth/index.d.ts +16 -0
- package/dist/src/douyin/auth/index.js +68 -0
- package/dist/src/douyin/auth/index.js.map +1 -0
- package/dist/src/douyin/auth/isValidCookie.d.ts +18 -0
- package/dist/src/douyin/auth/isValidCookie.js +60 -0
- package/dist/src/douyin/auth/isValidCookie.js.map +1 -0
- package/dist/src/douyin/auth/loadAndValidateCookie.d.ts +17 -0
- package/dist/src/douyin/auth/loadAndValidateCookie.js +45 -0
- package/dist/src/douyin/auth/loadAndValidateCookie.js.map +1 -0
- package/dist/src/douyin/auth/loadCookie.d.ts +17 -0
- package/dist/src/douyin/auth/loadCookie.js +79 -0
- package/dist/src/douyin/auth/loadCookie.js.map +1 -0
- package/dist/src/douyin/auth/login.d.ts +33 -0
- package/dist/src/douyin/auth/login.js +157 -0
- package/dist/src/douyin/auth/login.js.map +1 -0
- package/dist/src/douyin/auth/saveCookie.d.ts +17 -0
- package/dist/src/douyin/auth/saveCookie.js +89 -0
- package/dist/src/douyin/auth/saveCookie.js.map +1 -0
- package/dist/src/douyin/auth/validate.d.ts +11 -0
- package/dist/src/douyin/auth/validate.js +104 -0
- package/dist/src/douyin/auth/validate.js.map +1 -0
- package/dist/src/douyin/browser/manager.d.ts +54 -0
- package/dist/src/douyin/browser/manager.js +344 -0
- package/dist/src/douyin/browser/manager.js.map +1 -0
- package/dist/src/douyin/download/download-manager.d.ts +25 -0
- package/dist/src/douyin/download/download-manager.js +107 -0
- package/dist/src/douyin/download/download-manager.js.map +1 -0
- package/dist/src/douyin/download/error-handler.d.ts +49 -0
- package/dist/src/douyin/download/error-handler.js +160 -0
- package/dist/src/douyin/download/error-handler.js.map +1 -0
- package/dist/src/douyin/download/index.d.ts +39 -0
- package/dist/src/douyin/download/index.js +156 -0
- package/dist/src/douyin/download/index.js.map +1 -0
- package/dist/src/douyin/download/path-formatter.d.ts +42 -0
- package/dist/src/douyin/download/path-formatter.js +107 -0
- package/dist/src/douyin/download/path-formatter.js.map +1 -0
- package/dist/src/douyin/download/video-downloader.d.ts +35 -0
- package/dist/src/douyin/download/video-downloader.js +223 -0
- package/dist/src/douyin/download/video-downloader.js.map +1 -0
- package/dist/src/douyin/index.d.ts +19 -0
- package/dist/src/douyin/index.js +52 -0
- package/dist/src/douyin/index.js.map +1 -0
- package/dist/src/douyin/info/batch-processor.d.ts +15 -0
- package/dist/src/douyin/info/batch-processor.js +65 -0
- package/dist/src/douyin/info/batch-processor.js.map +1 -0
- package/dist/src/douyin/info/browser-manager.d.ts +56 -0
- package/dist/src/douyin/info/browser-manager.js +225 -0
- package/dist/src/douyin/info/browser-manager.js.map +1 -0
- package/dist/src/douyin/info/error-handler.d.ts +36 -0
- package/dist/src/douyin/info/error-handler.js +172 -0
- package/dist/src/douyin/info/error-handler.js.map +1 -0
- package/dist/src/douyin/info/fetch-video-detail.d.ts +14 -0
- package/dist/src/douyin/info/fetch-video-detail.js +247 -0
- package/dist/src/douyin/info/fetch-video-detail.js.map +1 -0
- package/dist/src/douyin/info/index.d.ts +29 -0
- package/dist/src/douyin/info/index.js +85 -0
- package/dist/src/douyin/info/index.js.map +1 -0
- package/dist/src/douyin/info/text-processor.d.ts +15 -0
- package/dist/src/douyin/info/text-processor.js +47 -0
- package/dist/src/douyin/info/text-processor.js.map +1 -0
- package/dist/src/douyin/info/user.d.ts +26 -0
- package/dist/src/douyin/info/user.js +237 -0
- package/dist/src/douyin/info/user.js.map +1 -0
- package/dist/src/douyin/parser/containsDouyinLink.d.ts +18 -0
- package/dist/src/douyin/parser/containsDouyinLink.js +27 -0
- package/dist/src/douyin/parser/containsDouyinLink.js.map +1 -0
- package/dist/src/douyin/parser/extract-links.d.ts +23 -0
- package/dist/src/douyin/parser/extract-links.js +79 -0
- package/dist/src/douyin/parser/extract-links.js.map +1 -0
- package/dist/src/douyin/parser/extractDouyinLinks.d.ts +18 -0
- package/dist/src/douyin/parser/extractDouyinLinks.js +58 -0
- package/dist/src/douyin/parser/extractDouyinLinks.js.map +1 -0
- package/dist/src/douyin/parser/index.d.ts +35 -0
- package/dist/src/douyin/parser/index.js +70 -0
- package/dist/src/douyin/parser/index.js.map +1 -0
- package/dist/src/douyin/parser/link-patterns.d.ts +34 -0
- package/dist/src/douyin/parser/link-patterns.js +121 -0
- package/dist/src/douyin/parser/link-patterns.js.map +1 -0
- package/dist/src/douyin/parser/parse-batch.d.ts +26 -0
- package/dist/src/douyin/parser/parse-batch.js +67 -0
- package/dist/src/douyin/parser/parse-batch.js.map +1 -0
- package/dist/src/douyin/parser/parseDouyinLinks.d.ts +30 -0
- package/dist/src/douyin/parser/parseDouyinLinks.js +164 -0
- package/dist/src/douyin/parser/parseDouyinLinks.js.map +1 -0
- package/dist/src/douyin/parser/resolve-links.d.ts +25 -0
- package/dist/src/douyin/parser/resolve-links.js +131 -0
- package/dist/src/douyin/parser/resolve-links.js.map +1 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.js +72 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types.d.ts +217 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/browser.d.ts +73 -0
- package/dist/src/utils/browser.js +96 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/error.d.ts +160 -0
- package/dist/src/utils/error.js +334 -0
- package/dist/src/utils/error.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +41 -0
- package/dist/src/utils/fetch.js +155 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/file.d.ts +46 -0
- package/dist/src/utils/file.js +189 -0
- package/dist/src/utils/file.js.map +1 -0
- package/dist/src/utils/index.d.ts +11 -0
- package/dist/src/utils/index.js +29 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +161 -0
- package/dist/src/utils/logger.js +286 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/performance.d.ts +98 -0
- package/dist/src/utils/performance.js +292 -0
- package/dist/src/utils/performance.js.map +1 -0
- package/dist/src/utils/retry.d.ts +56 -0
- package/dist/src/utils/retry.js +127 -0
- package/dist/src/utils/retry.js.map +1 -0
- 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
|
+
}
|