pixivflow 2.0.41 → 2.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 (50) hide show
  1. package/LICENSE +21 -674
  2. package/README.md +67 -574
  3. package/README_EN.md +71 -1523
  4. package/dist/commands/SchedulerCommand.d.ts.map +1 -1
  5. package/dist/commands/SchedulerCommand.js +5 -1
  6. package/dist/commands/SchedulerCommand.js.map +1 -1
  7. package/dist/download/DownloadManager.d.ts +9 -0
  8. package/dist/download/DownloadManager.d.ts.map +1 -1
  9. package/dist/download/DownloadManager.js +27 -0
  10. package/dist/download/DownloadManager.js.map +1 -1
  11. package/dist/download/pipeline/DownloadPipeline.d.ts +6 -0
  12. package/dist/download/pipeline/DownloadPipeline.d.ts.map +1 -1
  13. package/dist/download/pipeline/DownloadPipeline.js +4 -2
  14. package/dist/download/pipeline/DownloadPipeline.js.map +1 -1
  15. package/dist/package.json +1 -1
  16. package/dist/scheduler/Scheduler.d.ts +17 -4
  17. package/dist/scheduler/Scheduler.d.ts.map +1 -1
  18. package/dist/scheduler/Scheduler.js +58 -20
  19. package/dist/scheduler/Scheduler.js.map +1 -1
  20. package/dist/utils/errors.d.ts +9 -0
  21. package/dist/utils/errors.d.ts.map +1 -1
  22. package/dist/utils/errors.js +17 -1
  23. package/dist/utils/errors.js.map +1 -1
  24. package/dist/webui/package.json +1 -1
  25. package/dist/webui/routes/handlers/download-basic-handlers.d.ts.map +1 -1
  26. package/dist/webui/routes/handlers/download-basic-handlers.js +6 -20
  27. package/dist/webui/routes/handlers/download-basic-handlers.js.map +1 -1
  28. package/dist/webui/routes/handlers/download-url-handlers.d.ts +3 -6
  29. package/dist/webui/routes/handlers/download-url-handlers.d.ts.map +1 -1
  30. package/dist/webui/routes/handlers/download-url-handlers.js +72 -138
  31. package/dist/webui/routes/handlers/download-url-handlers.js.map +1 -1
  32. package/dist/webui/server/server-routes.d.ts.map +1 -1
  33. package/dist/webui/server/server-routes.js +6 -2
  34. package/dist/webui/server/server-routes.js.map +1 -1
  35. package/dist/webui/server/server.d.ts.map +1 -1
  36. package/dist/webui/server/server.js +25 -3
  37. package/dist/webui/server/server.js.map +1 -1
  38. package/dist/webui/services/DownloadTaskManager.d.ts +12 -0
  39. package/dist/webui/services/DownloadTaskManager.d.ts.map +1 -1
  40. package/dist/webui/services/DownloadTaskManager.js +119 -51
  41. package/dist/webui/services/DownloadTaskManager.js.map +1 -1
  42. package/dist/webui/utils/task-serialize.d.ts +31 -0
  43. package/dist/webui/utils/task-serialize.d.ts.map +1 -0
  44. package/dist/webui/utils/task-serialize.js +40 -0
  45. package/dist/webui/utils/task-serialize.js.map +1 -0
  46. package/dist/webui/websocket/DownloadStatus.d.ts +19 -0
  47. package/dist/webui/websocket/DownloadStatus.d.ts.map +1 -0
  48. package/dist/webui/websocket/DownloadStatus.js +61 -0
  49. package/dist/webui/websocket/DownloadStatus.js.map +1 -0
  50. package/package.json +11 -10
@@ -22,6 +22,18 @@ export declare class DownloadTaskManager {
22
22
  private tasks;
23
23
  private taskLogs;
24
24
  private activeTask;
25
+ /**
26
+ * Change notification so realtime layers (websocket) can push updates
27
+ * without polling REST endpoints.
28
+ */
29
+ private changeListeners;
30
+ private notifyTimer;
31
+ /** Subscribe to coarse-grained change events; returns an unsubscribe fn. */
32
+ subscribe(listener: () => void): () => void;
33
+ /** Test-only isolation hook: wipe in-memory task maps. */
34
+ clearAllForTests?(): void;
35
+ /** Coalesced notification (max ~7/sec) so bursts of per-file progress are cheap. */
36
+ private notifyChange;
25
37
  /**
26
38
  * Start a download task
27
39
  * @param taskId - Unique task identifier
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadTaskManager.d.ts","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,cAAc,CAAC;AAG3E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,UAAU,CAMF;IAEhB;;;;;;OAMG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACxC,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAmKhB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIhD;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAM3B;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAOlC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuBpG;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;IAoB/F;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwCzF;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAQ3D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAOpC;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
1
+ {"version":3,"file":"DownloadTaskManager.d.ts","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,cAAc,CAAC;AAI3E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,UAAU,CAKF;IAEhB;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,WAAW,CAA+B;IAElD,4EAA4E;IACrE,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOlD,0DAA0D;IACnD,gBAAgB,CAAC,IAAI,IAAI;IAKhC,oFAAoF;IACpF,OAAO,CAAC,YAAY;IAcpB;;;;;;OAMG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACxC,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IA8LhB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C7C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIhD;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAM3B;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAOlC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwBpG;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;IAoB/F;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA0CzF;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAQ3D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAOpC;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
@@ -8,10 +8,45 @@ const Database_1 = require("../../storage/Database");
8
8
  const FileService_1 = require("../../download/FileService");
9
9
  const config_1 = require("../../config");
10
10
  const logger_1 = require("../../logger");
11
+ const errors_1 = require("../../utils/errors");
11
12
  class DownloadTaskManager {
12
13
  tasks = new Map();
13
14
  taskLogs = new Map();
14
15
  activeTask = null;
16
+ /**
17
+ * Change notification so realtime layers (websocket) can push updates
18
+ * without polling REST endpoints.
19
+ */
20
+ changeListeners = new Set();
21
+ notifyTimer = null;
22
+ /** Subscribe to coarse-grained change events; returns an unsubscribe fn. */
23
+ subscribe(listener) {
24
+ this.changeListeners.add(listener);
25
+ return () => {
26
+ this.changeListeners.delete(listener);
27
+ };
28
+ }
29
+ /** Test-only isolation hook: wipe in-memory task maps. */
30
+ clearAllForTests() {
31
+ this.tasks.clear();
32
+ this.taskLogs.clear();
33
+ }
34
+ /** Coalesced notification (max ~7/sec) so bursts of per-file progress are cheap. */
35
+ notifyChange() {
36
+ if (this.notifyTimer)
37
+ return;
38
+ this.notifyTimer = setTimeout(() => {
39
+ this.notifyTimer = null;
40
+ for (const listener of this.changeListeners) {
41
+ try {
42
+ listener();
43
+ }
44
+ catch {
45
+ // A failing listener must never affect task execution.
46
+ }
47
+ }
48
+ }, 150);
49
+ }
15
50
  /**
16
51
  * Start a download task
17
52
  * @param taskId - Unique task identifier
@@ -72,7 +107,6 @@ class DownloadTaskManager {
72
107
  const progressCallback = this.getProgressCallback(taskId);
73
108
  downloadManager.setProgressCallback(progressCallback);
74
109
  await downloadManager.initialise();
75
- const abortController = new AbortController();
76
110
  const taskStatus = {
77
111
  taskId,
78
112
  status: 'running',
@@ -82,6 +116,7 @@ class DownloadTaskManager {
82
116
  };
83
117
  this.tasks.set(taskId, taskStatus);
84
118
  this.taskLogs.set(taskId, []);
119
+ this.notifyChange();
85
120
  // Save task history to database
86
121
  try {
87
122
  database.saveTaskHistory(taskId, {
@@ -100,55 +135,86 @@ class DownloadTaskManager {
100
135
  this.addLog(taskId, 'info', '开始执行下载任务...');
101
136
  logger_1.logger.info(`Starting download task ${taskId}`);
102
137
  await downloadManager.runAllTargets();
103
- taskStatus.status = 'completed';
104
- taskStatus.endTime = new Date();
105
- // Update task history in database
106
- try {
107
- database.saveTaskHistory(taskId, {
108
- status: 'completed',
109
- startTime: taskStatus.startTime,
110
- endTime: taskStatus.endTime,
111
- progressCurrent: taskStatus.progress?.current,
112
- progressTotal: taskStatus.progress?.total,
113
- progressMessage: taskStatus.progress?.message,
114
- });
115
- }
116
- catch (error) {
117
- logger_1.logger.warn('Failed to update task history in database', { taskId, error });
138
+ if (taskStatus.status === 'running') {
139
+ taskStatus.status = 'completed';
140
+ taskStatus.endTime = new Date();
141
+ try {
142
+ database.saveTaskHistory(taskId, {
143
+ status: 'completed',
144
+ startTime: taskStatus.startTime,
145
+ endTime: taskStatus.endTime,
146
+ progressCurrent: taskStatus.progress?.current,
147
+ progressTotal: taskStatus.progress?.total,
148
+ progressMessage: taskStatus.progress?.message,
149
+ });
150
+ }
151
+ catch (error) {
152
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error });
153
+ }
154
+ this.addLog(taskId, 'info', '下载任务完成');
155
+ logger_1.logger.info(`Download task ${taskId} completed`);
118
156
  }
119
- this.addLog(taskId, 'info', '下载任务完成');
120
- logger_1.logger.info(`Download task ${taskId} completed`);
121
157
  }
122
158
  catch (error) {
123
- taskStatus.status = 'failed';
124
- const errorMessage = error instanceof Error ? error.message : String(error);
125
- taskStatus.error = errorMessage;
126
- taskStatus.endTime = new Date();
127
- // Update task history in database
128
- try {
129
- database.saveTaskHistory(taskId, {
130
- status: 'failed',
131
- startTime: taskStatus.startTime,
132
- endTime: taskStatus.endTime,
133
- error: errorMessage,
134
- progressCurrent: taskStatus.progress?.current,
135
- progressTotal: taskStatus.progress?.total,
136
- progressMessage: taskStatus.progress?.message,
137
- });
138
- }
139
- catch (dbError) {
140
- logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
159
+ if (taskStatus.status !== 'running' || (0, errors_1.isOperationCancelled)(error)) {
160
+ // User requested a stop (status already set by stopTask) or the run
161
+ // was cancelled cooperatively. Record it without failing the task.
162
+ if (taskStatus.status === 'running') {
163
+ taskStatus.status = 'stopped';
164
+ taskStatus.endTime = new Date();
165
+ }
166
+ try {
167
+ database.saveTaskHistory(taskId, {
168
+ status: taskStatus.status,
169
+ startTime: taskStatus.startTime,
170
+ endTime: taskStatus.endTime,
171
+ error: taskStatus.status === 'stopped' ? 'Task stopped by user' : undefined,
172
+ progressCurrent: taskStatus.progress?.current,
173
+ progressTotal: taskStatus.progress?.total,
174
+ progressMessage: taskStatus.progress?.message,
175
+ });
176
+ }
177
+ catch (dbError) {
178
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
179
+ }
180
+ this.addLog(taskId, 'warn', `任务已终止(${(0, errors_1.isOperationCancelled)(error) ? error.message : '用户停止'})`);
141
181
  }
142
- this.addLog(taskId, 'error', `下载任务失败: ${errorMessage}`);
143
- if (error instanceof Error && error.stack) {
144
- this.addLog(taskId, 'error', `错误堆栈: ${error.stack}`);
182
+ else {
183
+ taskStatus.status = 'failed';
184
+ const errorMessage = error instanceof Error ? error.message : String(error);
185
+ taskStatus.error = errorMessage;
186
+ taskStatus.endTime = new Date();
187
+ try {
188
+ database.saveTaskHistory(taskId, {
189
+ status: 'failed',
190
+ startTime: taskStatus.startTime,
191
+ endTime: taskStatus.endTime,
192
+ error: errorMessage,
193
+ progressCurrent: taskStatus.progress?.current,
194
+ progressTotal: taskStatus.progress?.total,
195
+ progressMessage: taskStatus.progress?.message,
196
+ });
197
+ }
198
+ catch (dbError) {
199
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
200
+ }
201
+ this.addLog(taskId, 'error', `下载任务失败: ${errorMessage}`);
202
+ if (error instanceof Error && error.stack) {
203
+ this.addLog(taskId, 'error', `错误堆栈: ${error.stack}`);
204
+ }
205
+ logger_1.logger.error(`Download task ${taskId} failed`, { error });
206
+ throw error;
145
207
  }
146
- logger_1.logger.error(`Download task ${taskId} failed`, { error });
147
- throw error;
148
208
  }
149
209
  finally {
150
- database.close();
210
+ try {
211
+ database.close();
212
+ }
213
+ catch (closeError) {
214
+ logger_1.logger.warn('Error while closing task database', { taskId, error: closeError });
215
+ }
151
216
  this.activeTask = null;
217
+ this.notifyChange();
152
218
  }
153
219
  })();
154
220
  this.activeTask = {
@@ -156,7 +222,6 @@ class DownloadTaskManager {
156
222
  manager: downloadManager,
157
223
  database,
158
224
  promise,
159
- abortController,
160
225
  };
161
226
  // Don't await - let it run in background
162
227
  promise.catch(() => {
@@ -176,10 +241,9 @@ class DownloadTaskManager {
176
241
  }
177
242
  if (this.activeTask && this.activeTask.taskId === taskId) {
178
243
  const database = this.activeTask.database;
179
- // Update task history in database BEFORE closing
244
+ task.status = 'stopped';
245
+ task.endTime = new Date();
180
246
  try {
181
- task.status = 'stopped';
182
- task.endTime = new Date();
183
247
  database.saveTaskHistory(taskId, {
184
248
  status: 'stopped',
185
249
  startTime: task.startTime,
@@ -193,14 +257,16 @@ class DownloadTaskManager {
193
257
  catch (error) {
194
258
  logger_1.logger.warn('Failed to update task history in database', { taskId, error });
195
259
  }
196
- // Signal abort
197
- this.activeTask.abortController.abort();
198
- // Close database
199
- database.close();
260
+ // Cooperatively cancel the run: the in-flight item finishes, remaining
261
+ // targets/items are skipped, then runAllTargets() throws and the runner
262
+ // finalizes state + closes the database.
263
+ this.activeTask.manager.cancel('stopped by user');
200
264
  this.addLog(taskId, 'warn', '下载任务已停止');
201
- this.activeTask = null;
202
265
  logger_1.logger.info(`Download task ${taskId} stopped`);
203
266
  }
267
+ else {
268
+ throw new Error(`Task ${taskId} is not the active task`);
269
+ }
204
270
  }
205
271
  /**
206
272
  * Get task status
@@ -252,6 +318,7 @@ class DownloadTaskManager {
252
318
  logger_1.logger.debug('Failed to update task progress in database', { taskId });
253
319
  }
254
320
  }
321
+ this.notifyChange();
255
322
  }
256
323
  }
257
324
  /**
@@ -311,6 +378,7 @@ class DownloadTaskManager {
311
378
  logger_1.logger.error(logMessage, { taskId });
312
379
  break;
313
380
  }
381
+ this.notifyChange();
314
382
  }
315
383
  /**
316
384
  * Get logs for a task
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadTaskManager.js","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DownloadTaskManager.js","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":";;;AAAA,oEAAiE;AACjE,yDAAsD;AACtD,uDAAmD;AACnD,qDAAkD;AAClD,4DAAyD;AACzD,yCAA2E;AAC3E,yCAAsC;AACtC,+CAA0D;AAuB1D,MAAa,mBAAmB;IACtB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC7C,UAAU,GAKP,IAAI,CAAC;IAEhB;;;OAGG;IACK,eAAe,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,WAAW,GAA0B,IAAI,CAAC;IAElD,4EAA4E;IACrE,SAAS,CAAC,QAAoB;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC;IAED,0DAA0D;IACnD,gBAAgB;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,oFAAoF;IAC5E,YAAY;QAClB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACH,QAAQ,EAAE,CAAC;gBACb,CAAC;gBAAC,MAAM,CAAC;oBACP,uDAAuD;gBACzD,CAAC;YACH,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACb,MAAc,EACd,QAAiB,EACjB,YAAwC,EACxC,WAAsB;QAEtB,0CAA0C;QAC1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,MAAwB,CAAC;QAE7B,6DAA6D;QAC7D,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,gCAAgC;YAChC,MAAM,UAAU,GAAG,IAAA,mBAAU,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAU,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAE1D,mCAAmC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,WAAW,GAAG,IAAA,mBAAU,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,MAAM,GAAG;gBACP,GAAG,UAAU;gBACb,OAAO,EAAE,UAAU;aACpB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,MAAM,YAAY,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,MAAM,UAAU,GAAG,IAAA,sBAAa,GAAE,CAAC;YACnC,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAED,kCAAkC;QAClC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QAC1C,CAAC;QAED,0CAA0C;QAC1C,IAAI,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAC5C,GAAG,CAAC,QAAQ,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,CAClD,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,OAAQ,CAAC,YAAa,CAAC,CAAC;QAC7D,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnB,oEAAoE;QACpE,MAAM,cAAc,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAa,GAAE,CAAC;QAChG,MAAM,IAAI,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpF,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAExF,wBAAwB;QACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC1D,eAAe,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAEtD,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;QAEnC,MAAM,UAAU,GAAe;YAC7B,MAAM;YACN,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ;YACR,IAAI,EAAE,EAAE;SACT,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,gCAAgC;QAChC,IAAI,CAAC;YACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC/B,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,MAAM,MAAM,CAAC,CAAC;QAElD,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC3C,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;gBAChD,MAAM,eAAe,CAAC,aAAa,EAAE,CAAC;gBAEtC,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACpC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC;oBAChC,UAAU,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;oBAEhC,IAAI,CAAC;wBACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;4BAC/B,MAAM,EAAE,WAAW;4BACnB,SAAS,EAAE,UAAU,CAAC,SAAS;4BAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;4BAC7C,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK;4BACzC,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;yBAC9C,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,eAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC9E,CAAC;oBAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACtC,eAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,YAAY,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,IAAA,6BAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;oBACnE,oEAAoE;oBACpE,mEAAmE;oBACnE,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACpC,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC9B,UAAU,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;oBAClC,CAAC;oBACD,IAAI,CAAC;wBACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;4BAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;4BACzB,SAAS,EAAE,UAAU,CAAC,SAAS;4BAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,KAAK,EAAE,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;4BAC3E,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;4BAC7C,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK;4BACzC,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;yBAC9C,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,eAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBACvF,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,IAAA,6BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChG,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAC7B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,UAAU,CAAC,KAAK,GAAG,YAAY,CAAC;oBAChC,UAAU,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;oBAEhC,IAAI,CAAC;wBACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;4BAC/B,MAAM,EAAE,QAAQ;4BAChB,SAAS,EAAE,UAAU,CAAC,SAAS;4BAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,KAAK,EAAE,YAAY;4BACnB,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;4BAC7C,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK;4BACzC,eAAe,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;yBAC9C,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,eAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBACvF,CAAC;oBAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,YAAY,EAAE,CAAC,CAAC;oBACxD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBACvD,CAAC;oBACD,eAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1D,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBACH,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,eAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBAClF,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,UAAU,GAAG;YAChB,MAAM;YACN,OAAO,EAAE,eAAe;YACxB,QAAQ;YACR,OAAO;SACR,CAAC;QAEF,yCAAyC;QACzC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,mCAAmC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,iBAAiB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAE1C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAE1B,IAAI,CAAC;gBACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;oBAC/B,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,KAAK,EAAE,sBAAsB;oBAC7B,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO;oBACvC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK;oBACnC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO;iBACxC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,uEAAuE;YACvE,wEAAwE;YACxE,yCAAyC;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAElD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACvC,eAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,yBAAyB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CACxD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAc,EAAE,QAA8D;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB,4DAA4D;YAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;wBAC/C,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,eAAe,EAAE,QAAQ,CAAC,OAAO;wBACjC,aAAa,EAAE,QAAQ,CAAC,KAAK;wBAC7B,eAAe,EAAE,QAAQ,CAAC,OAAO;qBAClC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,sEAAsE;oBACtE,eAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAc;QAChC,OAAO,CAAC,OAAe,EAAE,KAAa,EAAE,OAAgB,EAAE,EAAE;YAC1D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAEzD,mDAAmD;YACnD,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,OAAO;gBACxB,CAAC,CAAC,OAAO,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,OAAO,EAAE;gBACzD,CAAC,CAAC,OAAO,OAAO,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC;YAE/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAExC,IAAI,OAAO,EAAE,CAAC;gBACZ,eAAM,CAAC,IAAI,CAAC,IAAI,MAAM,eAAe,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,OAAO,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,IAAI,CAAC,IAAI,MAAM,eAAe,OAAO,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAc,EAAE,KAA0C,EAAE,OAAe;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAiB;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK;YACL,OAAO;SACR,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEhC,mCAAmC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,8DAA8D;QAC9D,MAAM,UAAU,GAAG,SAAS,MAAM,KAAK,OAAO,EAAE,CAAC;QACjD,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,eAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,MAAM;gBACT,eAAM,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,MAAM;gBACT,eAAM,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,OAAO;gBACV,eAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrC,MAAM;QACV,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAc,EAAE,KAAc;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAc;QAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF;AA1bD,kDA0bC;AAED,qBAAqB;AACR,QAAA,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared serialization helpers for task status payloads.
3
+ *
4
+ * Used by both the REST layer (download handlers) and the realtime layer
5
+ * (websocket download stream) so both channels emit identical shapes.
6
+ */
7
+ interface DateIsh {
8
+ startTime: unknown;
9
+ endTime?: unknown;
10
+ logs?: Array<{
11
+ timestamp: unknown;
12
+ }>;
13
+ }
14
+ /**
15
+ * Convert a TaskStatus-like object into a JSON-safe clone:
16
+ * Date instances become ISO strings.
17
+ */
18
+ export declare function serializeTaskStatus<T extends DateIsh>(task: T | null): T | null;
19
+ export interface DownloadStatusSnapshot<T> {
20
+ hasActiveTask: boolean;
21
+ activeTask: T | null;
22
+ allTasks: T[];
23
+ }
24
+ /**
25
+ * Build the realtime snapshot payload from in-memory tasks only.
26
+ * Historical hydration stays the responsibility of the REST endpoint so the
27
+ * push channel never touches the database.
28
+ */
29
+ export declare function buildInMemorySnapshot(activeTask: unknown, allTasks: unknown[]): DownloadStatusSnapshot<unknown>;
30
+ export {};
31
+ //# sourceMappingURL=task-serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-serialize.d.ts","sourceRoot":"","sources":["../../../src/webui/utils/task-serialize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,OAAO;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAW/E;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,OAAO,EAAE,GAClB,sBAAsB,CAAC,OAAO,CAAC,CAMjC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Shared serialization helpers for task status payloads.
4
+ *
5
+ * Used by both the REST layer (download handlers) and the realtime layer
6
+ * (websocket download stream) so both channels emit identical shapes.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.serializeTaskStatus = serializeTaskStatus;
10
+ exports.buildInMemorySnapshot = buildInMemorySnapshot;
11
+ /**
12
+ * Convert a TaskStatus-like object into a JSON-safe clone:
13
+ * Date instances become ISO strings.
14
+ */
15
+ function serializeTaskStatus(task) {
16
+ if (!task)
17
+ return null;
18
+ return {
19
+ ...task,
20
+ startTime: task.startTime instanceof Date ? task.startTime.toISOString() : task.startTime,
21
+ endTime: task.endTime instanceof Date ? task.endTime.toISOString() : task.endTime,
22
+ logs: task.logs?.map((log) => ({
23
+ ...log,
24
+ timestamp: log.timestamp instanceof Date ? log.timestamp.toISOString() : log.timestamp,
25
+ })),
26
+ };
27
+ }
28
+ /**
29
+ * Build the realtime snapshot payload from in-memory tasks only.
30
+ * Historical hydration stays the responsibility of the REST endpoint so the
31
+ * push channel never touches the database.
32
+ */
33
+ function buildInMemorySnapshot(activeTask, allTasks) {
34
+ return {
35
+ hasActiveTask: activeTask !== null && activeTask !== undefined,
36
+ activeTask: serializeTaskStatus(activeTask),
37
+ allTasks: allTasks.slice(0, 10).map((t) => serializeTaskStatus(t)),
38
+ };
39
+ }
40
+ //# sourceMappingURL=task-serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-serialize.js","sourceRoot":"","sources":["../../../src/webui/utils/task-serialize.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,kDAWC;AAaD,sDASC;AArCD;;;GAGG;AACH,SAAgB,mBAAmB,CAAoB,IAAc;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS;QACzF,OAAO,EAAE,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;QACjF,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,GAAG;YACN,SAAS,EAAE,GAAG,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS;SACvF,CAAC,CAAC;KACmB,CAAC;AAC3B,CAAC;AAQD;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,UAAmB,EACnB,QAAmB;IAEnB,OAAO;QACL,aAAa,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;QAC9D,UAAU,EAAE,mBAAmB,CAAC,UAAmB,CAAC;QACpD,QAAQ,EAAG,QAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAU,CAAC,CAAC;KAC3F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Server as SocketServer } from 'socket.io';
2
+ /** Socket.IO event used for download task pushes. */
3
+ export declare const DOWNLOAD_EVENT = "download";
4
+ /**
5
+ * Realtime download task stream.
6
+ *
7
+ * Subscribes once to the task manager's coalesced change notifications and
8
+ * broadcasts a full snapshot (active task + recent in-memory tasks) to every
9
+ * connected client whenever something meaningful happens:
10
+ *
11
+ * - task starts / progress updates / logs append
12
+ * - completion, failure or user stop
13
+ *
14
+ * A slow safety-net interval also re-pushes while clients are connected, so a
15
+ * missed diff can never wedge the UI; hydration of finished history remains
16
+ * the job of GET /api/download/status.
17
+ */
18
+ export declare function setupDownloadStatus(io: SocketServer): void;
19
+ //# sourceMappingURL=DownloadStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadStatus.d.ts","sourceRoot":"","sources":["../../../src/webui/websocket/DownloadStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAKnD,qDAAqD;AACrD,eAAO,MAAM,cAAc,aAAa,CAAC;AAQzC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwC1D"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOWNLOAD_EVENT = void 0;
4
+ exports.setupDownloadStatus = setupDownloadStatus;
5
+ const logger_1 = require("../../logger");
6
+ const DownloadTaskManager_1 = require("../services/DownloadTaskManager");
7
+ const task_serialize_1 = require("../utils/task-serialize");
8
+ /** Socket.IO event used for download task pushes. */
9
+ exports.DOWNLOAD_EVENT = 'download';
10
+ /**
11
+ * Realtime download task stream.
12
+ *
13
+ * Subscribes once to the task manager's coalesced change notifications and
14
+ * broadcasts a full snapshot (active task + recent in-memory tasks) to every
15
+ * connected client whenever something meaningful happens:
16
+ *
17
+ * - task starts / progress updates / logs append
18
+ * - completion, failure or user stop
19
+ *
20
+ * A slow safety-net interval also re-pushes while clients are connected, so a
21
+ * missed diff can never wedge the UI; hydration of finished history remains
22
+ * the job of GET /api/download/status.
23
+ */
24
+ function setupDownloadStatus(io) {
25
+ const LOG_TAIL = 40;
26
+ const buildPayload = () => {
27
+ const active = DownloadTaskManager_1.downloadTaskManager.getActiveTask();
28
+ // Cap inline logs so frequent per-file progress cannot balloon frames;
29
+ // full history stays available via GET /api/download/logs.
30
+ let activeCapped = active;
31
+ if (active && Array.isArray(active.logs) && active.logs.length > LOG_TAIL) {
32
+ activeCapped = { ...active, logs: active.logs.slice(-LOG_TAIL) };
33
+ }
34
+ return {
35
+ kind: 'snapshot',
36
+ status: (0, task_serialize_1.buildInMemorySnapshot)(activeCapped, DownloadTaskManager_1.downloadTaskManager.getAllTasks()),
37
+ timestamp: new Date().toISOString(),
38
+ };
39
+ };
40
+ const pushSnapshot = () => {
41
+ try {
42
+ io.emit(exports.DOWNLOAD_EVENT, buildPayload());
43
+ }
44
+ catch (error) {
45
+ logger_1.logger.error('Failed to broadcast download snapshot', { error });
46
+ }
47
+ };
48
+ // Push on connect so fresh clients render current state instantly.
49
+ io.on('connection', (socket) => {
50
+ socket.emit(exports.DOWNLOAD_EVENT, buildPayload());
51
+ });
52
+ // React to task changes with small debounce handled inside the manager.
53
+ DownloadTaskManager_1.downloadTaskManager.subscribe(pushSnapshot);
54
+ // Safety net: one push per 5s while at least one client is listening.
55
+ setInterval(() => {
56
+ if (io.engine.clientsCount > 0) {
57
+ pushSnapshot();
58
+ }
59
+ }, 5000).unref();
60
+ }
61
+ //# sourceMappingURL=DownloadStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadStatus.js","sourceRoot":"","sources":["../../../src/webui/websocket/DownloadStatus.ts"],"names":[],"mappings":";;;AA4BA,kDAwCC;AAnED,yCAAsC;AACtC,yEAAsE;AACtE,4DAAwF;AAExF,qDAAqD;AACxC,QAAA,cAAc,GAAG,UAAU,CAAC;AAQzC;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CAAC,EAAgB;IAClD,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,MAAM,YAAY,GAAG,GAAoB,EAAE;QACzC,MAAM,MAAM,GAAG,yCAAmB,CAAC,aAAa,EAAE,CAAC;QACnD,uEAAuE;QACvE,2DAA2D;QAC3D,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1E,YAAY,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAA,sCAAqB,EAAC,YAAY,EAAE,yCAAmB,CAAC,WAAW,EAAE,CAAC;YAC9E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,sBAAc,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;IAEF,mEAAmE;IACnE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,sBAAc,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,yCAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAE5C,sEAAsE;IACtE,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/B,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "pixivflow",
3
- "version": "2.0.41",
3
+ "version": "2.1.0",
4
4
  "description": "🎨 智能的 Pixiv 自动化下载工具 - 支持批量下载插画和小说、定时任务、Docker部署 | Intelligent Pixiv Automation Downloader with batch download, scheduler, and Docker support",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/zoidberg-xgd/PixivFlow.git"
7
+ "url": "git+https://github.com/redtidev1918/PixivFlow.git"
8
8
  },
9
- "homepage": "https://zoidberg-xgd.github.io/PixivFlow/",
9
+ "homepage": "https://redtidev1918.github.io/PixivFlow/",
10
10
  "bugs": {
11
- "url": "https://github.com/zoidberg-xgd/PixivFlow/issues"
11
+ "url": "https://github.com/redtidev1918/PixivFlow/issues"
12
12
  },
13
- "author": "zoidberg-xgd",
14
- "license": "GPL-3.0-or-later",
13
+ "author": "redtidev1918",
14
+ "license": "MIT",
15
15
  "main": "dist/index.js",
16
16
  "bin": {
17
17
  "pixivflow": "dist/index.js"
@@ -97,6 +97,10 @@
97
97
  "kill-port": "^2.0.1",
98
98
  "npm-run-all": "^4.1.5"
99
99
  },
100
+ "overrides": {
101
+ "glob": "^10.3.10",
102
+ "basic-ftp": "^5.2.0"
103
+ },
100
104
  "dependencies": {
101
105
  "axios": "^1.13.2",
102
106
  "better-sqlite3": "^11.10.0",
@@ -111,12 +115,9 @@
111
115
  "undici": "^6.19.8"
112
116
  },
113
117
  "engines": {
114
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || ^23.0.0 || >=24.0.0",
118
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0",
115
119
  "npm": ">=9.0.0"
116
120
  },
117
- "overrides": {
118
- "glob": "^10.3.10"
119
- },
120
121
  "files": [
121
122
  "dist/",
122
123
  "config/standalone.config.example.json",