@chunkflowjs/core 0.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -0
- package/dist/chunk-size-adjuster-interface.d.ts +12 -0
- package/dist/chunk-size-adjuster-interface.d.ts.map +1 -0
- package/dist/chunk-size-adjuster-tcp.d.ts +34 -0
- package/dist/chunk-size-adjuster-tcp.d.ts.map +1 -0
- package/dist/chunk-size-adjuster.d.ts +12 -0
- package/dist/chunk-size-adjuster.d.ts.map +1 -0
- package/dist/index.d.mts +246 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +1988 -0
- package/dist/index.mjs.map +1 -0
- package/dist/plugins.d.ts +51 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/upload-manager.d.ts +71 -0
- package/dist/upload-manager.d.ts.map +1 -0
- package/dist/upload-task.d.ts +66 -0
- package/dist/upload-task.d.ts.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# @chunkflowjs/core
|
|
2
|
+
|
|
3
|
+
Core upload engine for ChunkFlow Upload SDK with state machine, task management, and plugin system.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @chunkflowjs/core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- Upload state machine
|
|
14
|
+
- Task management
|
|
15
|
+
- Dynamic chunk size adjustment
|
|
16
|
+
- Plugin system for extensibility
|
|
17
|
+
- Resumable uploads
|
|
18
|
+
- Concurrent chunk uploads
|
|
19
|
+
- Progress tracking
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Basic Upload
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { UploadManager } from "@chunkflowjs/core";
|
|
27
|
+
|
|
28
|
+
// Create manager with request adapter
|
|
29
|
+
const manager = new UploadManager({
|
|
30
|
+
requestAdapter: myAdapter,
|
|
31
|
+
defaultChunkSize: 1024 * 1024, // 1MB
|
|
32
|
+
defaultConcurrency: 3,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Initialize
|
|
36
|
+
await manager.init();
|
|
37
|
+
|
|
38
|
+
// Create and start upload task
|
|
39
|
+
const task = manager.createTask(file);
|
|
40
|
+
|
|
41
|
+
task.on("progress", ({ progress, speed }) => {
|
|
42
|
+
console.log(`Progress: ${progress}%, Speed: ${speed} bytes/s`);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
task.on("success", ({ fileUrl }) => {
|
|
46
|
+
console.log(`Upload complete: ${fileUrl}`);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
await task.start();
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Using Plugins
|
|
53
|
+
|
|
54
|
+
The plugin system allows you to extend the UploadManager with custom functionality.
|
|
55
|
+
|
|
56
|
+
#### Built-in Plugins
|
|
57
|
+
|
|
58
|
+
##### LoggerPlugin
|
|
59
|
+
|
|
60
|
+
Logs all upload events to the console:
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { UploadManager, LoggerPlugin } from "@chunkflowjs/core";
|
|
64
|
+
|
|
65
|
+
const manager = new UploadManager({ requestAdapter });
|
|
66
|
+
|
|
67
|
+
// Use logger plugin
|
|
68
|
+
manager.use(
|
|
69
|
+
new LoggerPlugin({
|
|
70
|
+
logProgress: true,
|
|
71
|
+
prefix: "[Upload]",
|
|
72
|
+
}),
|
|
73
|
+
);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
##### StatisticsPlugin
|
|
77
|
+
|
|
78
|
+
Tracks upload statistics:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { UploadManager, StatisticsPlugin } from "@chunkflowjs/core";
|
|
82
|
+
|
|
83
|
+
const manager = new UploadManager({ requestAdapter });
|
|
84
|
+
const stats = new StatisticsPlugin();
|
|
85
|
+
|
|
86
|
+
manager.use(stats);
|
|
87
|
+
|
|
88
|
+
// Later, get statistics
|
|
89
|
+
const metrics = stats.getStats();
|
|
90
|
+
console.log(`Success rate: ${metrics.successRate}%`);
|
|
91
|
+
console.log(`Total uploaded: ${metrics.totalBytesUploaded} bytes`);
|
|
92
|
+
console.log(`Average speed: ${metrics.averageSpeed} bytes/s`);
|
|
93
|
+
|
|
94
|
+
// Or get a formatted summary
|
|
95
|
+
console.log(stats.getSummary());
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### Creating Custom Plugins
|
|
99
|
+
|
|
100
|
+
Create your own plugin by implementing the `Plugin` interface:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { Plugin, UploadTask, UploadProgress } from "@chunkflowjs/core";
|
|
104
|
+
|
|
105
|
+
class MyCustomPlugin implements Plugin {
|
|
106
|
+
name = "my-custom-plugin";
|
|
107
|
+
|
|
108
|
+
install(manager: UploadManager): void {
|
|
109
|
+
console.log("Plugin installed");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
onTaskCreated(task: UploadTask): void {
|
|
113
|
+
console.log(`Task created: ${task.id}`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
onTaskProgress(task: UploadTask, progress: UploadProgress): void {
|
|
117
|
+
// Send progress to analytics
|
|
118
|
+
analytics.track("upload_progress", {
|
|
119
|
+
taskId: task.id,
|
|
120
|
+
percentage: progress.percentage,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
onTaskSuccess(task: UploadTask, fileUrl: string): void {
|
|
125
|
+
// Send success event
|
|
126
|
+
analytics.track("upload_success", {
|
|
127
|
+
taskId: task.id,
|
|
128
|
+
fileUrl,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
onTaskError(task: UploadTask, error: Error): void {
|
|
133
|
+
// Send error to monitoring service
|
|
134
|
+
errorMonitoring.captureException(error, {
|
|
135
|
+
taskId: task.id,
|
|
136
|
+
fileName: task.file.name,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Use your custom plugin
|
|
142
|
+
manager.use(new MyCustomPlugin());
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Available Plugin Hooks
|
|
146
|
+
|
|
147
|
+
- `install(manager)` - Called when plugin is registered
|
|
148
|
+
- `onTaskCreated(task)` - Called when a new task is created
|
|
149
|
+
- `onTaskStart(task)` - Called when a task starts uploading
|
|
150
|
+
- `onTaskProgress(task, progress)` - Called on progress updates
|
|
151
|
+
- `onTaskSuccess(task, fileUrl)` - Called when upload completes
|
|
152
|
+
- `onTaskError(task, error)` - Called when an error occurs
|
|
153
|
+
- `onTaskPause(task)` - Called when a task is paused
|
|
154
|
+
- `onTaskResume(task)` - Called when a task is resumed
|
|
155
|
+
- `onTaskCancel(task)` - Called when a task is cancelled
|
|
156
|
+
|
|
157
|
+
All hooks are optional - implement only what you need.
|
|
158
|
+
|
|
159
|
+
### Resumable Uploads
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// Get unfinished uploads
|
|
163
|
+
const unfinished = await manager.getUnfinishedTasksInfo();
|
|
164
|
+
|
|
165
|
+
if (unfinished.length > 0) {
|
|
166
|
+
// User re-selects file
|
|
167
|
+
const file = await selectFile();
|
|
168
|
+
|
|
169
|
+
// Resume upload
|
|
170
|
+
const task = await manager.resumeTask(unfinished[0].taskId, file);
|
|
171
|
+
await task.start();
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## API Reference
|
|
176
|
+
|
|
177
|
+
See the [full API documentation](../../apps/website/docs/api/core.md) for detailed information.
|
|
178
|
+
|
|
179
|
+
## License
|
|
180
|
+
|
|
181
|
+
MIT
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface IChunkSizeAdjuster {
|
|
2
|
+
adjust(uploadTimeMs: number): number;
|
|
3
|
+
getCurrentSize(): number;
|
|
4
|
+
reset(): void;
|
|
5
|
+
}
|
|
6
|
+
export interface BaseChunkSizeAdjusterOptions {
|
|
7
|
+
initialSize: number;
|
|
8
|
+
minSize: number;
|
|
9
|
+
maxSize: number;
|
|
10
|
+
targetTime?: number;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=chunk-size-adjuster-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-size-adjuster-interface.d.ts","sourceRoot":"","sources":["../src/chunk-size-adjuster-interface.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAMjC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAMrC,cAAc,IAAI,MAAM,CAAC;IAKzB,KAAK,IAAI,IAAI,CAAC;CACf;AAKD,MAAM,WAAW,4BAA4B;IAI3C,WAAW,EAAE,MAAM,CAAC;IAIpB,OAAO,EAAE,MAAM,CAAC;IAIhB,OAAO,EAAE,MAAM,CAAC;IAKhB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { IChunkSizeAdjuster, BaseChunkSizeAdjusterOptions } from "./chunk-size-adjuster-interface";
|
|
2
|
+
export interface TCPChunkSizeAdjusterOptions extends BaseChunkSizeAdjusterOptions {
|
|
3
|
+
initialSsthresh?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare enum CongestionState {
|
|
6
|
+
SLOW_START = "slow_start",
|
|
7
|
+
CONGESTION_AVOIDANCE = "congestion_avoidance",
|
|
8
|
+
FAST_RECOVERY = "fast_recovery"
|
|
9
|
+
}
|
|
10
|
+
export declare class TCPChunkSizeAdjuster implements IChunkSizeAdjuster {
|
|
11
|
+
private currentSize;
|
|
12
|
+
private ssthresh;
|
|
13
|
+
private state;
|
|
14
|
+
private readonly options;
|
|
15
|
+
private consecutiveFastUploads;
|
|
16
|
+
private consecutiveSlowUploads;
|
|
17
|
+
constructor(options: TCPChunkSizeAdjusterOptions);
|
|
18
|
+
private validate;
|
|
19
|
+
adjust(uploadTimeMs: number): number;
|
|
20
|
+
private handleFastUpload;
|
|
21
|
+
private handleSlowUpload;
|
|
22
|
+
getCurrentSize(): number;
|
|
23
|
+
getSsthresh(): number;
|
|
24
|
+
getState(): CongestionState;
|
|
25
|
+
reset(): void;
|
|
26
|
+
getStats(): {
|
|
27
|
+
currentSize: number;
|
|
28
|
+
ssthresh: number;
|
|
29
|
+
state: CongestionState;
|
|
30
|
+
consecutiveFastUploads: number;
|
|
31
|
+
consecutiveSlowUploads: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=chunk-size-adjuster-tcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-size-adjuster-tcp.d.ts","sourceRoot":"","sources":["../src/chunk-size-adjuster-tcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC7B,MAAM,iCAAiC,CAAC;AAOzC,MAAM,WAAW,2BAA4B,SAAQ,4BAA4B;IAI/E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;CAChC;AAwBD,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,sBAAsB,CAAa;gBAE/B,OAAO,EAAE,2BAA2B;IAahD,OAAO,CAAC,QAAQ;IAuBhB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAgCpC,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,gBAAgB;IAiBxB,cAAc,IAAI,MAAM;IAOxB,WAAW,IAAI,MAAM;IAOrB,QAAQ,IAAI,eAAe;IAO3B,KAAK,IAAI,IAAI;IAWb,QAAQ;;;;;;;CAST"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IChunkSizeAdjuster, BaseChunkSizeAdjusterOptions } from "./chunk-size-adjuster-interface";
|
|
2
|
+
export interface ChunkSizeAdjusterOptions extends BaseChunkSizeAdjusterOptions {
|
|
3
|
+
}
|
|
4
|
+
export declare class ChunkSizeAdjuster implements IChunkSizeAdjuster {
|
|
5
|
+
private currentSize;
|
|
6
|
+
private readonly options;
|
|
7
|
+
constructor(options: ChunkSizeAdjusterOptions);
|
|
8
|
+
adjust(uploadTimeMs: number): number;
|
|
9
|
+
getCurrentSize(): number;
|
|
10
|
+
reset(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=chunk-size-adjuster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-size-adjuster.d.ts","sourceRoot":"","sources":["../src/chunk-size-adjuster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC7B,MAAM,iCAAiC,CAAC;AAKzC,MAAM,WAAW,wBAAyB,SAAQ,4BAA4B;CAAG;AAoBjF,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAEjD,OAAO,EAAE,wBAAwB;IAgC7C,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAyBpC,cAAc,IAAI,MAAM;IAQxB,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import * as _chunkflowjs_shared0 from "@chunkflowjs/shared";
|
|
2
|
+
import { RequestAdapter, UploadProgress as UploadProgress$1, UploadStatus } from "@chunkflowjs/protocol";
|
|
3
|
+
|
|
4
|
+
//#region src/chunk-size-adjuster-interface.d.ts
|
|
5
|
+
interface IChunkSizeAdjuster {
|
|
6
|
+
adjust(uploadTimeMs: number): number;
|
|
7
|
+
getCurrentSize(): number;
|
|
8
|
+
reset(): void;
|
|
9
|
+
}
|
|
10
|
+
interface BaseChunkSizeAdjusterOptions {
|
|
11
|
+
initialSize: number;
|
|
12
|
+
minSize: number;
|
|
13
|
+
maxSize: number;
|
|
14
|
+
targetTime?: number;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/chunk-size-adjuster.d.ts
|
|
18
|
+
interface ChunkSizeAdjusterOptions extends BaseChunkSizeAdjusterOptions {}
|
|
19
|
+
declare class ChunkSizeAdjuster implements IChunkSizeAdjuster {
|
|
20
|
+
private currentSize;
|
|
21
|
+
private readonly options;
|
|
22
|
+
constructor(options: ChunkSizeAdjusterOptions);
|
|
23
|
+
adjust(uploadTimeMs: number): number;
|
|
24
|
+
getCurrentSize(): number;
|
|
25
|
+
reset(): void;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/chunk-size-adjuster-tcp.d.ts
|
|
29
|
+
interface TCPChunkSizeAdjusterOptions extends BaseChunkSizeAdjusterOptions {
|
|
30
|
+
initialSsthresh?: number;
|
|
31
|
+
}
|
|
32
|
+
declare enum CongestionState {
|
|
33
|
+
SLOW_START = "slow_start",
|
|
34
|
+
CONGESTION_AVOIDANCE = "congestion_avoidance",
|
|
35
|
+
FAST_RECOVERY = "fast_recovery"
|
|
36
|
+
}
|
|
37
|
+
declare class TCPChunkSizeAdjuster implements IChunkSizeAdjuster {
|
|
38
|
+
private currentSize;
|
|
39
|
+
private ssthresh;
|
|
40
|
+
private state;
|
|
41
|
+
private readonly options;
|
|
42
|
+
private consecutiveFastUploads;
|
|
43
|
+
private consecutiveSlowUploads;
|
|
44
|
+
constructor(options: TCPChunkSizeAdjusterOptions);
|
|
45
|
+
private validate;
|
|
46
|
+
adjust(uploadTimeMs: number): number;
|
|
47
|
+
private handleFastUpload;
|
|
48
|
+
private handleSlowUpload;
|
|
49
|
+
getCurrentSize(): number;
|
|
50
|
+
getSsthresh(): number;
|
|
51
|
+
getState(): CongestionState;
|
|
52
|
+
reset(): void;
|
|
53
|
+
getStats(): {
|
|
54
|
+
currentSize: number;
|
|
55
|
+
ssthresh: number;
|
|
56
|
+
state: CongestionState;
|
|
57
|
+
consecutiveFastUploads: number;
|
|
58
|
+
consecutiveSlowUploads: number;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/upload-task.d.ts
|
|
63
|
+
interface UploadProgress {
|
|
64
|
+
uploadedBytes: number;
|
|
65
|
+
totalBytes: number;
|
|
66
|
+
percentage: number;
|
|
67
|
+
speed: number;
|
|
68
|
+
remainingTime: number;
|
|
69
|
+
uploadedChunks: number;
|
|
70
|
+
totalChunks: number;
|
|
71
|
+
}
|
|
72
|
+
interface UploadTaskOptions {
|
|
73
|
+
file: File;
|
|
74
|
+
requestAdapter: RequestAdapter;
|
|
75
|
+
chunkSize?: number;
|
|
76
|
+
concurrency?: number;
|
|
77
|
+
retryCount?: number;
|
|
78
|
+
retryDelay?: number;
|
|
79
|
+
autoStart?: boolean;
|
|
80
|
+
resumeTaskId?: string;
|
|
81
|
+
resumeUploadToken?: string;
|
|
82
|
+
resumeUploadedChunks?: number[];
|
|
83
|
+
chunkSizeStrategy?: "simple" | "tcp-like" | IChunkSizeAdjuster;
|
|
84
|
+
initialSsthresh?: number;
|
|
85
|
+
}
|
|
86
|
+
declare class UploadTask {
|
|
87
|
+
readonly id: string;
|
|
88
|
+
readonly file: File;
|
|
89
|
+
private status;
|
|
90
|
+
private progress;
|
|
91
|
+
private chunks;
|
|
92
|
+
private uploadToken;
|
|
93
|
+
private fileHash;
|
|
94
|
+
private eventBus;
|
|
95
|
+
private concurrencyController;
|
|
96
|
+
private storage;
|
|
97
|
+
private requestAdapter;
|
|
98
|
+
private options;
|
|
99
|
+
private startTime;
|
|
100
|
+
private endTime;
|
|
101
|
+
private chunkSizeAdjuster;
|
|
102
|
+
private shouldCancelUpload;
|
|
103
|
+
constructor(options: UploadTaskOptions);
|
|
104
|
+
private generateTaskId;
|
|
105
|
+
getStatus(): UploadStatus;
|
|
106
|
+
getProgress(): UploadProgress;
|
|
107
|
+
getDuration(): number | null;
|
|
108
|
+
on<K extends keyof _chunkflowjs_shared0.UploadEvents>(event: K, handler: (payload: _chunkflowjs_shared0.UploadEvents[K]) => void): void;
|
|
109
|
+
off<K extends keyof _chunkflowjs_shared0.UploadEvents>(event: K, handler: (payload: _chunkflowjs_shared0.UploadEvents[K]) => void): void;
|
|
110
|
+
private createChunks;
|
|
111
|
+
start(): Promise<void>;
|
|
112
|
+
private startUpload;
|
|
113
|
+
private uploadChunkWithRetry;
|
|
114
|
+
private updateProgress;
|
|
115
|
+
private delay;
|
|
116
|
+
private calculateAndVerifyHash;
|
|
117
|
+
private skipExistingChunks;
|
|
118
|
+
private initializeStorage;
|
|
119
|
+
private persistProgress;
|
|
120
|
+
pause(): void;
|
|
121
|
+
resume(): Promise<void>;
|
|
122
|
+
cancel(): void;
|
|
123
|
+
private cleanupStorage;
|
|
124
|
+
}
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/upload-manager.d.ts
|
|
127
|
+
interface Plugin {
|
|
128
|
+
name: string;
|
|
129
|
+
install?(manager: UploadManager): void;
|
|
130
|
+
onTaskCreated?(task: UploadTask): void;
|
|
131
|
+
onTaskStart?(task: UploadTask): void;
|
|
132
|
+
onTaskProgress?(task: UploadTask, progress: UploadProgress$1): void;
|
|
133
|
+
onTaskSuccess?(task: UploadTask, fileUrl: string): void;
|
|
134
|
+
onTaskError?(task: UploadTask, error: Error): void;
|
|
135
|
+
onTaskPause?(task: UploadTask): void;
|
|
136
|
+
onTaskResume?(task: UploadTask): void;
|
|
137
|
+
onTaskCancel?(task: UploadTask): void;
|
|
138
|
+
}
|
|
139
|
+
interface UploadManagerOptions {
|
|
140
|
+
requestAdapter: RequestAdapter;
|
|
141
|
+
maxConcurrentTasks?: number;
|
|
142
|
+
defaultChunkSize?: number;
|
|
143
|
+
defaultConcurrency?: number;
|
|
144
|
+
autoResumeUnfinished?: boolean;
|
|
145
|
+
}
|
|
146
|
+
declare class UploadManager {
|
|
147
|
+
private tasks;
|
|
148
|
+
private options;
|
|
149
|
+
private storage;
|
|
150
|
+
private initialized;
|
|
151
|
+
private plugins;
|
|
152
|
+
constructor(options: UploadManagerOptions);
|
|
153
|
+
use(plugin: Plugin): void;
|
|
154
|
+
private callPluginHook;
|
|
155
|
+
init(): Promise<void>;
|
|
156
|
+
createTask(file: File, options?: Partial<UploadTaskOptions>): UploadTask;
|
|
157
|
+
private setupTaskPluginHooks;
|
|
158
|
+
getTask(taskId: string): UploadTask | undefined;
|
|
159
|
+
getAllTasks(): UploadTask[];
|
|
160
|
+
deleteTask(taskId: string): Promise<void>;
|
|
161
|
+
private loadUnfinishedTasks;
|
|
162
|
+
getUnfinishedTasksInfo(): Promise<Array<{
|
|
163
|
+
taskId: string;
|
|
164
|
+
fileInfo: {
|
|
165
|
+
name: string;
|
|
166
|
+
size: number;
|
|
167
|
+
type: string;
|
|
168
|
+
lastModified: number;
|
|
169
|
+
};
|
|
170
|
+
uploadedChunks: number[];
|
|
171
|
+
uploadToken: string;
|
|
172
|
+
createdAt: number;
|
|
173
|
+
updatedAt: number;
|
|
174
|
+
}>>;
|
|
175
|
+
resumeTask(taskId: string, file: File, options?: Partial<UploadTaskOptions>): Promise<UploadTask>;
|
|
176
|
+
clearUnfinishedTask(taskId: string): Promise<void>;
|
|
177
|
+
clearAllUnfinishedTasks(): Promise<number>;
|
|
178
|
+
getTaskCount(): number;
|
|
179
|
+
isInitialized(): boolean;
|
|
180
|
+
clearCompletedTasks(): Promise<number>;
|
|
181
|
+
pauseAll(): number;
|
|
182
|
+
resumeAll(): Promise<number>;
|
|
183
|
+
cancelAll(): number;
|
|
184
|
+
getStatistics(): {
|
|
185
|
+
total: number;
|
|
186
|
+
idle: number;
|
|
187
|
+
uploading: number;
|
|
188
|
+
paused: number;
|
|
189
|
+
success: number;
|
|
190
|
+
error: number;
|
|
191
|
+
cancelled: number;
|
|
192
|
+
};
|
|
193
|
+
close(): void;
|
|
194
|
+
}
|
|
195
|
+
//#endregion
|
|
196
|
+
//#region src/plugins.d.ts
|
|
197
|
+
declare class LoggerPlugin implements Plugin {
|
|
198
|
+
name: string;
|
|
199
|
+
private options;
|
|
200
|
+
constructor(options?: Partial<{
|
|
201
|
+
logProgress: boolean;
|
|
202
|
+
logStart: boolean;
|
|
203
|
+
logSuccess: boolean;
|
|
204
|
+
logError: boolean;
|
|
205
|
+
logPause: boolean;
|
|
206
|
+
logResume: boolean;
|
|
207
|
+
logCancel: boolean;
|
|
208
|
+
prefix: string;
|
|
209
|
+
}>);
|
|
210
|
+
private log;
|
|
211
|
+
install(): void;
|
|
212
|
+
onTaskCreated(task: UploadTask): void;
|
|
213
|
+
onTaskStart(task: UploadTask): void;
|
|
214
|
+
onTaskProgress(task: UploadTask, progress: UploadProgress$1): void;
|
|
215
|
+
onTaskSuccess(task: UploadTask, fileUrl: string): void;
|
|
216
|
+
onTaskError(task: UploadTask, error: Error): void;
|
|
217
|
+
onTaskPause(task: UploadTask): void;
|
|
218
|
+
onTaskResume(task: UploadTask): void;
|
|
219
|
+
onTaskCancel(task: UploadTask): void;
|
|
220
|
+
}
|
|
221
|
+
declare class StatisticsPlugin implements Plugin {
|
|
222
|
+
name: string;
|
|
223
|
+
private stats;
|
|
224
|
+
install(): void;
|
|
225
|
+
onTaskCreated(_task: UploadTask): void;
|
|
226
|
+
onTaskStart(task: UploadTask): void;
|
|
227
|
+
onTaskSuccess(task: UploadTask, _fileUrl: string): void;
|
|
228
|
+
onTaskError(task: UploadTask, _error: Error): void;
|
|
229
|
+
onTaskCancel(task: UploadTask): void;
|
|
230
|
+
getStats(): {
|
|
231
|
+
totalFiles: number;
|
|
232
|
+
successCount: number;
|
|
233
|
+
errorCount: number;
|
|
234
|
+
cancelledCount: number;
|
|
235
|
+
totalBytesUploaded: number;
|
|
236
|
+
averageSpeed: number;
|
|
237
|
+
averageUploadTime: number;
|
|
238
|
+
successRate: number;
|
|
239
|
+
errorRate: number;
|
|
240
|
+
};
|
|
241
|
+
reset(): void;
|
|
242
|
+
getSummary(): string;
|
|
243
|
+
}
|
|
244
|
+
//#endregion
|
|
245
|
+
export { BaseChunkSizeAdjusterOptions, ChunkSizeAdjuster, ChunkSizeAdjusterOptions, CongestionState, IChunkSizeAdjuster, LoggerPlugin, Plugin, StatisticsPlugin, TCPChunkSizeAdjuster, TCPChunkSizeAdjusterOptions, UploadManager, UploadManagerOptions, UploadProgress, UploadTask, UploadTaskOptions };
|
|
246
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/chunk-size-adjuster-interface.ts","../src/chunk-size-adjuster.ts","../src/chunk-size-adjuster-tcp.ts","../src/upload-task.ts","../src/upload-manager.ts","../src/plugins.ts"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./chunk-size-adjuster-interface";
|
|
2
|
+
export * from "./chunk-size-adjuster";
|
|
3
|
+
export * from "./chunk-size-adjuster-tcp";
|
|
4
|
+
export * from "./upload-task";
|
|
5
|
+
export * from "./upload-manager";
|
|
6
|
+
export * from "./plugins";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
|