partial-uploader 0.0.1 → 0.0.3

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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- declare function uploadWithPartialFile(url: string, file: any, chunkSize?: number): Promise<{
2
- isSuccess: boolean;
1
+ declare function uploadWithPartialFile(url: string, file: any, headers?: any, chunkSize?: number): Promise<{
2
+ success: boolean;
3
3
  id: string;
4
4
  message: string;
5
5
  }>;
package/dist/index.js CHANGED
@@ -1,156 +1,165 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.uploadWithPartialFile = void 0;
40
- function uploadWithPartialFile(url, file, chunkSize) {
41
- if (chunkSize === void 0) { chunkSize = 26214400; }
42
- return __awaiter(this, void 0, void 0, function () {
43
- var isSuccess, id, chunks, i, chunk;
44
- return __generator(this, function (_a) {
45
- switch (_a.label) {
46
- case 0: return [4 /*yield*/, delay(50)];
47
- case 1:
48
- _a.sent();
49
- isSuccess = true;
50
- id = generateGuid();
51
- if (!(file.size <= chunkSize)) return [3 /*break*/, 3];
52
- return [4 /*yield*/, upload(url, file, 1, file.size, file.name, id, 1)];
53
- case 2:
54
- isSuccess = _a.sent();
55
- return [3 /*break*/, 9];
56
- case 3:
57
- chunks = splitFileIntoChunks(file, chunkSize);
58
- i = 1;
59
- _a.label = 4;
60
- case 4:
61
- if (!(i < chunks.length + 1)) return [3 /*break*/, 8];
62
- chunk = chunks[i - 1];
63
- if (!chunk)
64
- return [2 /*return*/, { isSuccess: false, id: id, message: "chunk is undefined" }];
65
- return [4 /*yield*/, upload(url, chunk, chunks.length, file.size, file.name, id, i)];
66
- case 5:
67
- isSuccess = _a.sent();
68
- if (!isSuccess)
69
- return [3 /*break*/, 8];
70
- return [4 /*yield*/, delay(550)];
71
- case 6:
72
- _a.sent();
73
- _a.label = 7;
74
- case 7:
75
- i++;
76
- return [3 /*break*/, 4];
77
- case 8:
78
- ;
79
- _a.label = 9;
80
- case 9:
81
- ;
82
- return [2 /*return*/, { isSuccess: isSuccess, id: id, message: "file uploaded successfully" }];
83
- }
84
- });
85
- });
86
- }
87
- exports.uploadWithPartialFile = uploadWithPartialFile;
88
- var upload = function (url, chunk, chunksLength, fileSize, filename, fileGuid, index) { return __awaiter(void 0, void 0, void 0, function () {
89
- var formData, isDone, isSuccess, res;
90
- return __generator(this, function (_a) {
91
- switch (_a.label) {
92
- case 0:
93
- formData = new FormData();
94
- formData.append('file', chunk, "".concat(filename, "_chunk_").concat(index));
95
- formData.append('fileGuid', fileGuid);
96
- isDone = chunksLength === index;
97
- formData.append('isDone', isDone.toString());
98
- formData.append('totalSize', fileSize.toString());
99
- formData.append('totalChunks', chunksLength.toString());
100
- formData.append('filename', filename);
101
- isSuccess = true;
102
- return [4 /*yield*/, uploadSubscribe(url, formData)];
103
- case 1:
104
- res = _a.sent();
105
- if (!(res.status === 406 || res.status === 401)) return [3 /*break*/, 2];
106
- isSuccess = false;
107
- return [3 /*break*/, 5];
108
- case 2: return [4 /*yield*/, delay(500)];
109
- case 3:
110
- _a.sent();
111
- return [4 /*yield*/, uploadSubscribe(url, formData)];
112
- case 4:
113
- res = _a.sent();
114
- if (!res.ok)
115
- isSuccess = false;
116
- _a.label = 5;
117
- case 5:
118
- ;
119
- return [2 /*return*/, isSuccess];
120
- }
121
- });
122
- }); };
123
- var delay = function (ms) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
124
- switch (_a.label) {
125
- case 0: return [4 /*yield*/, new Promise(function (f) { return setTimeout(f, ms); })];
126
- case 1: return [2 /*return*/, _a.sent()];
127
- }
128
- }); }); };
129
- var uploadSubscribe = function (url, formData) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
130
- switch (_a.label) {
131
- case 0: return [4 /*yield*/, fetch(url, { method: 'POST', body: formData })];
132
- case 1: return [2 /*return*/, (_a.sent())];
133
- }
134
- }); }); };
135
- var splitFileIntoChunks = function (file, chunkSize) {
136
- var chunks = [];
137
- var start = 0;
138
- while (start < file.size) {
139
- var end = Math.min(start + chunkSize, file.size);
140
- var chunk = file.slice(start, end);
141
- chunks.push(chunk);
142
- start = end;
143
- }
144
- ;
145
- return chunks;
146
- };
147
- var generateGuid = function () {
148
- var chars = '0123456789abcdef';
149
- var guid = '';
150
- for (var i = 0; i < 40; i++) {
151
- var randomIndex = Math.floor(Math.random() * chars.length);
152
- guid += chars.charAt(randomIndex);
153
- }
154
- ;
155
- return guid;
156
- };
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.uploadWithPartialFile = void 0;
40
+ var uploadWithPartialFile = function (url, file, headers, chunkSize) {
41
+ if (chunkSize === void 0) { chunkSize = 26214400; }
42
+ return __awaiter(void 0, void 0, void 0, function () {
43
+ var id, res, chunks, i, chunk, res;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0: return [4 /*yield*/, delay(50)];
47
+ case 1:
48
+ _a.sent();
49
+ id = generateGuid();
50
+ if (!(file.size <= chunkSize)) return [3 /*break*/, 3];
51
+ return [4 /*yield*/, upload(url, file, 1, file.size, file.name, id, 1, headers)];
52
+ case 2:
53
+ res = _a.sent();
54
+ if (!res)
55
+ return [2 /*return*/, { success: false, id: id, message: "file could not be loaded" }];
56
+ return [3 /*break*/, 9];
57
+ case 3:
58
+ chunks = splitFileIntoChunks(file, chunkSize);
59
+ i = 1;
60
+ _a.label = 4;
61
+ case 4:
62
+ if (!(i < chunks.length + 1)) return [3 /*break*/, 8];
63
+ chunk = chunks[i - 1];
64
+ if (!chunk)
65
+ return [2 /*return*/, { success: false, id: id, message: "chunk is undefined" }];
66
+ return [4 /*yield*/, upload(url, chunks[i - 1], chunks.length, file.size, file.name, id, i, headers)];
67
+ case 5:
68
+ res = _a.sent();
69
+ if (!res)
70
+ return [2 /*return*/, { success: false, id: id, message: "file could not be loaded" }];
71
+ return [4 /*yield*/, delay(550)];
72
+ case 6:
73
+ _a.sent();
74
+ _a.label = 7;
75
+ case 7:
76
+ i++;
77
+ return [3 /*break*/, 4];
78
+ case 8:
79
+ ;
80
+ _a.label = 9;
81
+ case 9:
82
+ ;
83
+ return [2 /*return*/, { success: true, id: id, message: "file uploaded successfully" }];
84
+ }
85
+ });
86
+ });
87
+ };
88
+ exports.uploadWithPartialFile = uploadWithPartialFile;
89
+ var upload = function (url, chunk, chunksLength, fileSize, filename, fileGuid, index, headers) { return __awaiter(void 0, void 0, void 0, function () {
90
+ var formData, isDone;
91
+ return __generator(this, function (_a) {
92
+ formData = new FormData();
93
+ formData.append('file', chunk, "".concat(filename, "_chunk_").concat(index));
94
+ formData.append('fileGuid', fileGuid);
95
+ isDone = chunksLength === index;
96
+ formData.append('isDone', isDone.toString());
97
+ formData.append('totalSize', fileSize.toString());
98
+ formData.append('totalChunks', chunksLength.toString());
99
+ formData.append('filename', filename);
100
+ return [2 /*return*/, getRes(url, formData, headers)];
101
+ });
102
+ }); };
103
+ var getRes = function (url, formData, headers) { return __awaiter(void 0, void 0, void 0, function () {
104
+ var res, e_1, res;
105
+ return __generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0:
108
+ _a.trys.push([0, 2, , 5]);
109
+ return [4 /*yield*/, uploadSubscribe(url, formData, headers)];
110
+ case 1:
111
+ res = _a.sent();
112
+ if (res.status === 406 || res.status === 401)
113
+ return [2 /*return*/, false];
114
+ return [3 /*break*/, 5];
115
+ case 2:
116
+ e_1 = _a.sent();
117
+ return [4 /*yield*/, delay(500)];
118
+ case 3:
119
+ _a.sent();
120
+ return [4 /*yield*/, uploadSubscribe(url, formData, headers)];
121
+ case 4:
122
+ res = _a.sent();
123
+ if (!res.ok)
124
+ return [2 /*return*/, false];
125
+ return [3 /*break*/, 5];
126
+ case 5:
127
+ ;
128
+ return [2 /*return*/, true];
129
+ }
130
+ });
131
+ }); };
132
+ var delay = function (ms) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
133
+ switch (_a.label) {
134
+ case 0: return [4 /*yield*/, new Promise(function (f) { return setTimeout(f, ms); })];
135
+ case 1: return [2 /*return*/, _a.sent()];
136
+ }
137
+ }); }); };
138
+ var uploadSubscribe = function (url, formData, headers) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
139
+ switch (_a.label) {
140
+ case 0: return [4 /*yield*/, fetch(url, { method: 'POST', body: formData, headers: headers ? headers : {} })];
141
+ case 1: return [2 /*return*/, (_a.sent())];
142
+ }
143
+ }); }); };
144
+ var splitFileIntoChunks = function (file, chunkSize) {
145
+ var chunks = [];
146
+ var start = 0;
147
+ while (start < file.size) {
148
+ var end = Math.min(start + chunkSize, file.size);
149
+ var chunk = file.slice(start, end);
150
+ chunks.push(chunk);
151
+ start = end;
152
+ }
153
+ ;
154
+ return chunks;
155
+ };
156
+ var generateGuid = function () {
157
+ var chars = '0123456789abcdef';
158
+ var guid = '';
159
+ for (var i = 0; i < 40; i++) {
160
+ var randomIndex = Math.floor(Math.random() * chars.length);
161
+ guid += chars.charAt(randomIndex);
162
+ }
163
+ ;
164
+ return guid;
165
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "partial-uploader",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",