@round2ai/r2-cli 1.0.1 → 1.0.2

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 (157) hide show
  1. package/dist/api.d.ts +45 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +90 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/auth.d.ts +35 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +240 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/commands/ai/chat.d.ts +9 -0
  10. package/dist/commands/ai/chat.d.ts.map +1 -0
  11. package/dist/commands/ai/chat.js +16 -0
  12. package/dist/commands/ai/chat.js.map +1 -0
  13. package/dist/commands/ai/skills.d.ts +9 -0
  14. package/dist/commands/ai/skills.d.ts.map +1 -0
  15. package/dist/commands/ai/skills.js +16 -0
  16. package/dist/commands/ai/skills.js.map +1 -0
  17. package/dist/commands/auth/login.d.ts +24 -0
  18. package/dist/commands/auth/login.d.ts.map +1 -0
  19. package/dist/commands/auth/login.js +288 -0
  20. package/dist/commands/auth/login.js.map +1 -0
  21. package/dist/commands/auth/logout.d.ts +16 -0
  22. package/dist/commands/auth/logout.d.ts.map +1 -0
  23. package/dist/commands/auth/logout.js +49 -0
  24. package/dist/commands/auth/logout.js.map +1 -0
  25. package/dist/commands/auth/status.d.ts +28 -0
  26. package/dist/commands/auth/status.d.ts.map +1 -0
  27. package/dist/commands/auth/status.js +92 -0
  28. package/dist/commands/auth/status.js.map +1 -0
  29. package/dist/commands/base.d.ts +107 -0
  30. package/dist/commands/base.d.ts.map +1 -0
  31. package/dist/commands/base.js +153 -0
  32. package/dist/commands/base.js.map +1 -0
  33. package/dist/commands/business/pricing.d.ts +9 -0
  34. package/dist/commands/business/pricing.d.ts.map +1 -0
  35. package/dist/commands/business/pricing.js +16 -0
  36. package/dist/commands/business/pricing.js.map +1 -0
  37. package/dist/commands/business/report.d.ts +9 -0
  38. package/dist/commands/business/report.d.ts.map +1 -0
  39. package/dist/commands/business/report.js +16 -0
  40. package/dist/commands/business/report.js.map +1 -0
  41. package/dist/commands/inventory/risk.d.ts +9 -0
  42. package/dist/commands/inventory/risk.d.ts.map +1 -0
  43. package/dist/commands/inventory/risk.js +16 -0
  44. package/dist/commands/inventory/risk.js.map +1 -0
  45. package/dist/config.d.ts +54 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +111 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/index.d.ts +4 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +66 -116
  52. package/dist/index.js.map +1 -1
  53. package/dist/query/executor.d.ts +138 -0
  54. package/dist/query/executor.d.ts.map +1 -0
  55. package/dist/query/executor.js +232 -0
  56. package/dist/query/executor.js.map +1 -0
  57. package/dist/query/types.d.ts +116 -0
  58. package/dist/query/types.d.ts.map +1 -0
  59. package/dist/query/types.js +15 -0
  60. package/dist/query/types.js.map +1 -0
  61. package/dist/query/utils.d.ts +99 -0
  62. package/dist/query/utils.d.ts.map +1 -0
  63. package/dist/query/utils.js +151 -0
  64. package/dist/query/utils.js.map +1 -0
  65. package/dist/services/ServiceContainer.d.ts +110 -0
  66. package/dist/services/ServiceContainer.d.ts.map +1 -0
  67. package/dist/services/ServiceContainer.js +242 -0
  68. package/dist/services/ServiceContainer.js.map +1 -0
  69. package/dist/services/api/client.d.ts +88 -0
  70. package/dist/services/api/client.d.ts.map +1 -0
  71. package/dist/services/api/client.js +188 -0
  72. package/dist/services/api/client.js.map +1 -0
  73. package/dist/services/api/types.d.ts +233 -0
  74. package/dist/services/api/types.d.ts.map +1 -0
  75. package/dist/services/api/types.js +83 -0
  76. package/dist/services/api/types.js.map +1 -0
  77. package/dist/services/auth/provider.d.ts +73 -0
  78. package/dist/services/auth/provider.d.ts.map +1 -0
  79. package/dist/services/auth/provider.js +339 -0
  80. package/dist/services/auth/provider.js.map +1 -0
  81. package/dist/services/auth/session.d.ts +73 -0
  82. package/dist/services/auth/session.d.ts.map +1 -0
  83. package/dist/services/auth/session.js +200 -0
  84. package/dist/services/auth/session.js.map +1 -0
  85. package/dist/services/business/demand.d.ts +70 -0
  86. package/dist/services/business/demand.d.ts.map +1 -0
  87. package/dist/services/business/demand.js +240 -0
  88. package/dist/services/business/demand.js.map +1 -0
  89. package/dist/services/business/fulfillment.d.ts +122 -0
  90. package/dist/services/business/fulfillment.d.ts.map +1 -0
  91. package/dist/services/business/fulfillment.js +267 -0
  92. package/dist/services/business/fulfillment.js.map +1 -0
  93. package/dist/services/business/inventory.d.ts +54 -0
  94. package/dist/services/business/inventory.d.ts.map +1 -0
  95. package/dist/services/business/inventory.js +245 -0
  96. package/dist/services/business/inventory.js.map +1 -0
  97. package/dist/services/business/pricing.d.ts +41 -0
  98. package/dist/services/business/pricing.d.ts.map +1 -0
  99. package/dist/services/business/pricing.js +133 -0
  100. package/dist/services/business/pricing.js.map +1 -0
  101. package/dist/services/business/report.d.ts +74 -0
  102. package/dist/services/business/report.d.ts.map +1 -0
  103. package/dist/services/business/report.js +380 -0
  104. package/dist/services/business/report.js.map +1 -0
  105. package/dist/services/config/manager.d.ts +105 -0
  106. package/dist/services/config/manager.d.ts.map +1 -0
  107. package/dist/services/config/manager.js +324 -0
  108. package/dist/services/config/manager.js.map +1 -0
  109. package/dist/services/config/types.d.ts +128 -0
  110. package/dist/services/config/types.d.ts.map +1 -0
  111. package/dist/services/config/types.js +209 -0
  112. package/dist/services/config/types.js.map +1 -0
  113. package/dist/services/index.d.ts +17 -0
  114. package/dist/services/index.d.ts.map +1 -0
  115. package/dist/services/index.js +44 -0
  116. package/dist/services/index.js.map +1 -0
  117. package/dist/services/storage/index.d.ts +63 -0
  118. package/dist/services/storage/index.d.ts.map +1 -0
  119. package/dist/services/storage/index.js +136 -0
  120. package/dist/services/storage/index.js.map +1 -0
  121. package/dist/types/api.d.ts +58 -0
  122. package/dist/types/api.d.ts.map +1 -0
  123. package/dist/types/api.js +5 -0
  124. package/dist/types/api.js.map +1 -0
  125. package/dist/types/auth.d.ts +59 -0
  126. package/dist/types/auth.d.ts.map +1 -0
  127. package/dist/types/auth.js +11 -0
  128. package/dist/types/auth.js.map +1 -0
  129. package/dist/types/business.d.ts +201 -0
  130. package/dist/types/business.d.ts.map +1 -0
  131. package/dist/types/business.js +5 -0
  132. package/dist/types/business.js.map +1 -0
  133. package/dist/types/command.d.ts +106 -0
  134. package/dist/types/command.d.ts.map +1 -0
  135. package/dist/types/command.js +5 -0
  136. package/dist/types/command.js.map +1 -0
  137. package/dist/types/config.d.ts +66 -0
  138. package/dist/types/config.d.ts.map +1 -0
  139. package/dist/types/config.js +5 -0
  140. package/dist/types/config.js.map +1 -0
  141. package/dist/utils/async.d.ts +79 -0
  142. package/dist/utils/async.d.ts.map +1 -0
  143. package/dist/utils/async.js +179 -0
  144. package/dist/utils/async.js.map +1 -0
  145. package/dist/utils/format.d.ts +90 -0
  146. package/dist/utils/format.d.ts.map +1 -0
  147. package/dist/utils/format.js +227 -0
  148. package/dist/utils/format.js.map +1 -0
  149. package/dist/utils/logger.d.ts +136 -0
  150. package/dist/utils/logger.d.ts.map +1 -0
  151. package/dist/utils/logger.js +249 -0
  152. package/dist/utils/logger.js.map +1 -0
  153. package/dist/utils/validation.d.ts +100 -0
  154. package/dist/utils/validation.d.ts.map +1 -0
  155. package/dist/utils/validation.js +334 -0
  156. package/dist/utils/validation.js.map +1 -0
  157. package/package.json +6 -2
@@ -0,0 +1,201 @@
1
+ /**
2
+ * 业务领域类型定义
3
+ */
4
+ /**
5
+ * 商品 SKU 信息
6
+ */
7
+ export interface SKU {
8
+ id: string;
9
+ name: string;
10
+ brand: string;
11
+ category: string;
12
+ condition: "A" | "B" | "C" | "D";
13
+ originalPrice?: number;
14
+ currentValue?: number;
15
+ images?: string[];
16
+ description?: string;
17
+ }
18
+ /**
19
+ * 地区信息
20
+ */
21
+ export interface Region {
22
+ code: string;
23
+ name: string;
24
+ level: "national" | "provincial" | "city" | "district";
25
+ }
26
+ /**
27
+ * 市场需求分析结果
28
+ */
29
+ export interface DemandAnalysis {
30
+ sku: SKU;
31
+ region: Region;
32
+ demandLevel: "low" | "medium" | "high";
33
+ gapPercentage: number;
34
+ trend: "rising" | "stable" | "falling";
35
+ lastUpdated: Date;
36
+ }
37
+ /**
38
+ * 价格分析结果
39
+ */
40
+ export interface PricingAnalysis {
41
+ sku: SKU;
42
+ recentTrades: TradeRecord[];
43
+ suggestedBuyPrice: number;
44
+ suggestedSellPrice: number;
45
+ priceRange: {
46
+ min: number;
47
+ max: number;
48
+ avg: number;
49
+ };
50
+ confidence: number;
51
+ }
52
+ /**
53
+ * 交易记录
54
+ */
55
+ export interface TradeRecord {
56
+ id: string;
57
+ skuId: string;
58
+ soldPrice: number;
59
+ soldDate: Date;
60
+ buyerRegion: string;
61
+ condition: "A" | "B" | "C" | "D";
62
+ platform: "online" | "offline" | "secondary";
63
+ }
64
+ /**
65
+ * 库存记录
66
+ */
67
+ export interface InventoryItem {
68
+ id: string;
69
+ sku: SKU;
70
+ warehouseCode: string;
71
+ quantity: number;
72
+ stockInDate: Date;
73
+ daysInStock: number;
74
+ lastMovedDate?: Date;
75
+ riskLevel: "low" | "medium" | "high";
76
+ }
77
+ /**
78
+ * 库存风险分析
79
+ */
80
+ export interface InventoryRisk {
81
+ warehouseCode: string;
82
+ totalItems: number;
83
+ riskBreakdown: {
84
+ stagnant: number;
85
+ depreciating: number;
86
+ overdue: number;
87
+ safe: number;
88
+ };
89
+ recommendations: InventoryRecommendation[];
90
+ }
91
+ /**
92
+ * 库存建议
93
+ */
94
+ export interface InventoryRecommendation {
95
+ type: "clearance" | "price_adjustment" | "transfer" | "hold";
96
+ priority: "high" | "medium" | "low";
97
+ skuId: string;
98
+ reason: string;
99
+ action: string;
100
+ estimatedImpact: string;
101
+ }
102
+ /**
103
+ * 经营报告
104
+ */
105
+ export interface BusinessReport {
106
+ type: "daily" | "weekly" | "monthly";
107
+ period: {
108
+ startDate: Date;
109
+ endDate: Date;
110
+ };
111
+ sales: SalesData;
112
+ profit: ProfitData;
113
+ inventory: InventoryData;
114
+ alerts: Alert[];
115
+ recommendations: Recommendation[];
116
+ }
117
+ /**
118
+ * 销售数据
119
+ */
120
+ export interface SalesData {
121
+ totalRevenue: number;
122
+ totalOrders: number;
123
+ avgOrderValue: number;
124
+ topSellingProducts: ProductSale[];
125
+ revenueByRegion: RegionSales[];
126
+ growthRate: number;
127
+ }
128
+ /**
129
+ * 利润数据
130
+ */
131
+ export interface ProfitData {
132
+ totalProfit: number;
133
+ profitMargin: number;
134
+ avgProfitPerOrder: number;
135
+ profitByCategory: CategoryProfit[];
136
+ }
137
+ /**
138
+ * 库存数据
139
+ */
140
+ export interface InventoryData {
141
+ totalValue: number;
142
+ turnoverRate: number;
143
+ averageDaysInStock: number;
144
+ distributionByCondition: ConditionDistribution[];
145
+ }
146
+ /**
147
+ * 产品销售记录
148
+ */
149
+ export interface ProductSale {
150
+ sku: SKU;
151
+ quantity: number;
152
+ revenue: number;
153
+ profit: number;
154
+ }
155
+ /**
156
+ * 地区销售数据
157
+ */
158
+ export interface RegionSales {
159
+ region: Region;
160
+ revenue: number;
161
+ orders: number;
162
+ growthRate: number;
163
+ }
164
+ /**
165
+ * 类别利润
166
+ */
167
+ export interface CategoryProfit {
168
+ category: string;
169
+ profit: number;
170
+ margin: number;
171
+ }
172
+ /**
173
+ * 成色分布
174
+ */
175
+ export interface ConditionDistribution {
176
+ condition: "A" | "B" | "C" | "D";
177
+ quantity: number;
178
+ value: number;
179
+ percentage: number;
180
+ }
181
+ /**
182
+ * 警报信息
183
+ */
184
+ export interface Alert {
185
+ type: "stagnant" | "overstock" | "price_drop" | "expiring";
186
+ severity: "high" | "medium" | "low";
187
+ message: string;
188
+ skuIds: string[];
189
+ timestamp: Date;
190
+ }
191
+ /**
192
+ * 建议
193
+ */
194
+ export interface Recommendation {
195
+ type: "restock" | "clearance" | "price_optimization" | "supplier_change";
196
+ priority: "high" | "medium" | "low";
197
+ message: string;
198
+ targetSkuIds: string[];
199
+ expectedBenefit: string;
200
+ }
201
+ //# sourceMappingURL=business.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business.d.ts","sourceRoot":"","sources":["../../src/types/business.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 业务领域类型定义
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=business.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business.js","sourceRoot":"","sources":["../../src/types/business.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 命令相关类型定义
3
+ */
4
+ import type { ProgressEvent } from "../query/types.js";
5
+ /**
6
+ * 命令参数接口
7
+ */
8
+ export interface CommandParams {
9
+ [key: string]: unknown;
10
+ }
11
+ /**
12
+ * 命令选项接口
13
+ */
14
+ export interface CommandOptions {
15
+ [key: string]: unknown;
16
+ }
17
+ /**
18
+ * 命令执行结果
19
+ */
20
+ export interface CommandResult<T = unknown> {
21
+ success: boolean;
22
+ data?: T;
23
+ error?: {
24
+ message: string;
25
+ code?: string;
26
+ details?: unknown;
27
+ };
28
+ metadata?: {
29
+ duration?: number;
30
+ progress?: ProgressEvent[];
31
+ };
32
+ }
33
+ /**
34
+ * 命令配置
35
+ */
36
+ export interface CommandConfig {
37
+ name: string;
38
+ description: string;
39
+ aliases?: string[];
40
+ hidden?: boolean;
41
+ allowUnknownOptions?: boolean;
42
+ }
43
+ /**
44
+ * 命令注册器
45
+ */
46
+ export interface CommandRegistry {
47
+ register(command: any): void;
48
+ unregister(name: string): void;
49
+ get(name: string): any | undefined;
50
+ list(): any[];
51
+ execute(name: string, params: CommandParams): Promise<CommandResult>;
52
+ }
53
+ /**
54
+ * 进度报告器
55
+ */
56
+ export interface ProgressReporter {
57
+ start(message: string, total?: number): void;
58
+ update(message: string, current?: number, total?: number): void;
59
+ complete(message: string): void;
60
+ error(message: string): void;
61
+ }
62
+ /**
63
+ * 命令执行上下文
64
+ */
65
+ export interface CommandContext {
66
+ options: CommandOptions;
67
+ reporter: ProgressReporter;
68
+ container: ServiceContainer;
69
+ }
70
+ /**
71
+ * 服务容器接口(待实现)
72
+ */
73
+ export interface ServiceContainer {
74
+ resolve<T>(name: string): T;
75
+ register<T>(name: string, service: T): void;
76
+ has(name: string): boolean;
77
+ }
78
+ /**
79
+ * 输入验证规则
80
+ */
81
+ export interface ValidationRule {
82
+ required?: boolean;
83
+ type?: "string" | "number" | "boolean" | "array" | "object";
84
+ min?: number;
85
+ max?: number;
86
+ pattern?: RegExp;
87
+ message?: string;
88
+ validator?: (value: unknown) => boolean | string;
89
+ }
90
+ /**
91
+ * 验证结果
92
+ */
93
+ export interface ValidationResult {
94
+ isValid: boolean;
95
+ errors?: string[];
96
+ value?: unknown;
97
+ }
98
+ /**
99
+ * 命令参数 schema
100
+ */
101
+ export interface CommandSchema {
102
+ properties: Record<string, ValidationRule>;
103
+ required?: string[];
104
+ additionalProperties?: boolean;
105
+ }
106
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/types/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 命令相关类型定义
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/types/command.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 配置相关类型定义
3
+ */
4
+ /**
5
+ * 应用程序配置
6
+ */
7
+ export interface AppConfig {
8
+ api?: ApiConfig;
9
+ auth?: AuthConfig;
10
+ cache?: CacheConfig;
11
+ logging?: LoggingConfig;
12
+ }
13
+ /**
14
+ * API 配置
15
+ */
16
+ export interface ApiConfig {
17
+ baseUrl?: string;
18
+ timeout?: number;
19
+ retries?: number;
20
+ }
21
+ /**
22
+ * 认证配置
23
+ */
24
+ export interface AuthConfig {
25
+ tokenRefreshThreshold?: number;
26
+ }
27
+ /**
28
+ * 缓存配置
29
+ */
30
+ export interface CacheConfig {
31
+ enabled?: boolean;
32
+ ttl?: number;
33
+ }
34
+ /**
35
+ * 日志配置
36
+ */
37
+ export interface LoggingConfig {
38
+ level?: "debug" | "info" | "warn" | "error";
39
+ format?: "json" | "text";
40
+ }
41
+ /**
42
+ * 用户配置文件
43
+ */
44
+ export interface UserConfig {
45
+ auth?: {
46
+ accessToken?: string;
47
+ refreshToken?: string;
48
+ userId?: string;
49
+ username?: string;
50
+ expiresAt?: number;
51
+ };
52
+ api?: {
53
+ baseUrl?: string;
54
+ };
55
+ }
56
+ /**
57
+ * 配置管理器接口
58
+ */
59
+ export interface IConfigManager {
60
+ readConfig(): Promise<UserConfig>;
61
+ writeConfig(config: UserConfig): Promise<void>;
62
+ updateConfig(updates: Partial<UserConfig>): Promise<UserConfig>;
63
+ get(key: string): Promise<unknown>;
64
+ set(key: string, value: unknown): Promise<void>;
65
+ }
66
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 配置相关类型定义
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 异步工具函数
3
+ */
4
+ /**
5
+ * 延迟函数
6
+ */
7
+ export declare function delay(ms: number): Promise<void>;
8
+ /**
9
+ * 带超时的 Promise
10
+ */
11
+ export declare function timeout<T>(promise: Promise<T>, ms: number, errorMessage?: string): Promise<T>;
12
+ /**
13
+ * 重试执行函数
14
+ */
15
+ export declare function retry<T>(fn: () => Promise<T>, options?: {
16
+ retries?: number;
17
+ delay?: number;
18
+ backoff?: number;
19
+ onError?: (error: Error, attempt: number) => void;
20
+ }): Promise<T>;
21
+ /**
22
+ * 轮询执行直到条件满足或超时
23
+ */
24
+ export declare function poll<T>(checkFn: () => Promise<T>, options?: {
25
+ interval?: number;
26
+ timeout?: number;
27
+ condition?: (result: T) => boolean;
28
+ onPoll?: (attempt: number, result: T) => void;
29
+ }): Promise<T>;
30
+ /**
31
+ * 批量处理函数(并发控制)
32
+ */
33
+ export declare function batchProcess<T, R>(items: T[], processor: (item: T, index: number) => Promise<R>, options?: {
34
+ concurrency?: number;
35
+ delay?: number;
36
+ onProgress?: (processed: number, total: number) => void;
37
+ }): Promise<R[]>;
38
+ /**
39
+ * 异步队列
40
+ */
41
+ export declare class AsyncQueue<T> {
42
+ private processor;
43
+ private concurrency;
44
+ private queue;
45
+ private processing;
46
+ constructor(processor: (item: T) => Promise<void>, concurrency?: number);
47
+ /**
48
+ * 添加项目到队列
49
+ */
50
+ add(item: T): Promise<void>;
51
+ /**
52
+ * 处理队列
53
+ */
54
+ private process;
55
+ }
56
+ /**
57
+ * 取消控制器
58
+ */
59
+ export declare class AbortController {
60
+ private abortController;
61
+ private listeners;
62
+ /**
63
+ * 中断操作
64
+ */
65
+ abort(): void;
66
+ /**
67
+ * 添加取消监听器
68
+ */
69
+ addListener(listener: () => void): void;
70
+ /**
71
+ * 移除取消监听器
72
+ */
73
+ removeListener(listener: () => void): void;
74
+ /**
75
+ * 获取信号
76
+ */
77
+ get signal(): AbortSignal;
78
+ }
79
+ //# sourceMappingURL=async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,MAAM,EACV,YAAY,SAAwB,GACnC,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,GACL,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;CAC1C,GACL,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,CAAC,EACrC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD,GACL,OAAO,CAAC,CAAC,EAAE,CAAC,CAgDd;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC;IAKrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IALrB,OAAO,CAAC,KAAK,CAAqD;IAClE,OAAO,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACrC,WAAW,SAAI;IAKzB;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;YACW,OAAO;CAwBtB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,SAAS,CAA8B;IAE/C;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C;;OAEG;IACH,IAAI,MAAM,IAAI,WAAW,CAExB;CACF"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * 异步工具函数
3
+ */
4
+ /**
5
+ * 延迟函数
6
+ */
7
+ export function delay(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ /**
11
+ * 带超时的 Promise
12
+ */
13
+ export function timeout(promise, ms, errorMessage = "Operation timed out") {
14
+ return Promise.race([
15
+ promise,
16
+ new Promise((_, reject) => {
17
+ setTimeout(() => reject(new Error(errorMessage)), ms);
18
+ }),
19
+ ]);
20
+ }
21
+ /**
22
+ * 重试执行函数
23
+ */
24
+ export async function retry(fn, options = {}) {
25
+ const { retries = 3, delay = 1000, backoff = 2, onError, } = options;
26
+ let lastError;
27
+ let currentDelay = delay;
28
+ for (let attempt = 1; attempt <= retries; attempt++) {
29
+ try {
30
+ return await fn();
31
+ }
32
+ catch (error) {
33
+ lastError = error;
34
+ onError?.(lastError, attempt);
35
+ if (attempt === retries) {
36
+ throw lastError;
37
+ }
38
+ await delay(currentDelay);
39
+ currentDelay *= backoff;
40
+ }
41
+ }
42
+ throw lastError;
43
+ }
44
+ /**
45
+ * 轮询执行直到条件满足或超时
46
+ */
47
+ export async function poll(checkFn, options = {}) {
48
+ const { interval = 5000, timeout = 60000, condition = () => true, onPoll, } = options;
49
+ const startTime = Date.now();
50
+ while (Date.now() - startTime < timeout) {
51
+ const result = await checkFn();
52
+ if (condition(result)) {
53
+ return result;
54
+ }
55
+ onPoll?.(Date.now() - startTime, result);
56
+ await delay(interval);
57
+ }
58
+ throw new Error("Polling timeout");
59
+ }
60
+ /**
61
+ * 批量处理函数(并发控制)
62
+ */
63
+ export async function batchProcess(items, processor, options = {}) {
64
+ const { concurrency = 3, delay = 0, onProgress, } = options;
65
+ const results = [];
66
+ let processed = 0;
67
+ let activePromises = [];
68
+ for (let i = 0; i < items.length; i++) {
69
+ // 如果达到并发限制,等待一个完成
70
+ if (activePromises.length >= concurrency) {
71
+ await Promise.race(activePromises);
72
+ activePromises = activePromises.filter((p) => !p.isFulfilled && !p.isRejected);
73
+ }
74
+ const promise = processor(items[i], i)
75
+ .then((result) => {
76
+ results[i] = result;
77
+ processed++;
78
+ onProgress?.(processed, items.length);
79
+ if (delay > 0) {
80
+ delay(delay);
81
+ }
82
+ })
83
+ .catch((error) => {
84
+ console.error(`Error processing item ${i}:`, error);
85
+ results[i] = error;
86
+ processed++;
87
+ onProgress?.(processed, items.length);
88
+ });
89
+ activePromises.push(promise);
90
+ // 如果添加了延迟,稍等一下
91
+ if (delay > 0) {
92
+ await delay(10);
93
+ }
94
+ }
95
+ // 等待所有处理完成
96
+ await Promise.all(activePromises);
97
+ return results;
98
+ }
99
+ /**
100
+ * 异步队列
101
+ */
102
+ export class AsyncQueue {
103
+ processor;
104
+ concurrency;
105
+ queue;
106
+ processing = false;
107
+ constructor(processor, concurrency = 1) {
108
+ this.processor = processor;
109
+ this.concurrency = concurrency;
110
+ this.queue = [];
111
+ }
112
+ /**
113
+ * 添加项目到队列
114
+ */
115
+ async add(item) {
116
+ return new Promise((resolve) => {
117
+ this.queue.push({ item, resolve });
118
+ this.process();
119
+ });
120
+ }
121
+ /**
122
+ * 处理队列
123
+ */
124
+ async process() {
125
+ if (this.processing || this.queue.length === 0) {
126
+ return;
127
+ }
128
+ this.processing = true;
129
+ const currentBatch = this.queue.splice(0, this.concurrency);
130
+ const promises = currentBatch.map(async ({ item, resolve }) => {
131
+ try {
132
+ await this.processor(item);
133
+ resolve();
134
+ }
135
+ catch (error) {
136
+ console.error("Error processing item:", error);
137
+ resolve();
138
+ }
139
+ });
140
+ await Promise.all(promises);
141
+ this.processing = false;
142
+ // 继续处理队列中的下一批
143
+ this.process();
144
+ }
145
+ }
146
+ /**
147
+ * 取消控制器
148
+ */
149
+ export class AbortController {
150
+ abortController = new globalThis.AbortController();
151
+ listeners = new Set();
152
+ /**
153
+ * 中断操作
154
+ */
155
+ abort() {
156
+ this.abortController.abort();
157
+ this.listeners.forEach((listener) => listener());
158
+ this.listeners.clear();
159
+ }
160
+ /**
161
+ * 添加取消监听器
162
+ */
163
+ addListener(listener) {
164
+ this.listeners.add(listener);
165
+ }
166
+ /**
167
+ * 移除取消监听器
168
+ */
169
+ removeListener(listener) {
170
+ this.listeners.delete(listener);
171
+ }
172
+ /**
173
+ * 获取信号
174
+ */
175
+ get signal() {
176
+ return this.abortController.signal;
177
+ }
178
+ }
179
+ //# sourceMappingURL=async.js.map