partial-uploader 0.0.4 → 0.0.6

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,6 +1,6 @@
1
- declare function uploadWithPartialFile(url: string, file: any, headers?: any, chunkSize?: number): Promise<{
2
- success: boolean;
3
- id: string;
4
- message: string;
5
- }>;
6
- export { uploadWithPartialFile };
1
+ declare const uploadWithPartialFile: (url: string, file: any, headers?: any, chunkSize?: number) => Promise<{
2
+ success: boolean;
3
+ id: string;
4
+ message: string;
5
+ }>;
6
+ export { uploadWithPartialFile };
package/dist/index.js CHANGED
@@ -1,165 +1,92 @@
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
- };
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.uploadWithPartialFile = void 0;
13
+ const uploadWithPartialFile = (url, file, headers, chunkSize = 26214400) => __awaiter(void 0, void 0, void 0, function* () {
14
+ yield delay(50);
15
+ const id = generateGuid();
16
+ if (file.size <= chunkSize) {
17
+ // small file
18
+ let res = yield upload(url, file, 1, file.size, file.name, id, 0, headers);
19
+ if (!res)
20
+ return { success: false, id, message: "file could not be loaded" };
21
+ }
22
+ else {
23
+ // big file
24
+ const chunks = splitFileIntoChunks(file, chunkSize);
25
+ for (let i = 0; i < chunks.length; i++) {
26
+ let chunk = chunks[i];
27
+ if (!chunk)
28
+ return { success: false, id, message: "chunk is undefined" };
29
+ let res = yield upload(url, chunk, chunks.length, file.size, file.name, id, i, headers);
30
+ if (!res)
31
+ return { success: false, id, message: "file could not be loaded" };
32
+ yield delay(550);
33
+ }
34
+ ;
35
+ }
36
+ ;
37
+ return { success: true, id, message: "file uploaded successfully" };
38
+ });
39
+ exports.uploadWithPartialFile = uploadWithPartialFile;
40
+ const upload = (url, chunk, chunksLength, fileSize, filename, fileGuid, index, headers) => __awaiter(void 0, void 0, void 0, function* () {
41
+ let formData = new FormData();
42
+ formData.append('file', chunk, `${filename}_chunk_${index}`);
43
+ formData.append('fileGuid', fileGuid);
44
+ let isDone = chunksLength === index + 1;
45
+ formData.append('isDone', isDone.toString());
46
+ formData.append('totalSize', fileSize.toString());
47
+ formData.append('totalChunks', chunksLength.toString());
48
+ formData.append('filename', filename);
49
+ formData.append('index', index.toString());
50
+ return getRes(url, formData, headers);
51
+ });
52
+ const getRes = (url, formData, headers) => __awaiter(void 0, void 0, void 0, function* () {
53
+ try {
54
+ let res = yield uploadSubscribe(url, formData, headers);
55
+ if (res.status === 406 || res.status === 401)
56
+ return false;
57
+ }
58
+ catch (e) {
59
+ yield delay(500);
60
+ let res = yield uploadSubscribe(url, formData, headers);
61
+ if (!res.ok)
62
+ return false;
63
+ }
64
+ ;
65
+ return true;
66
+ });
67
+ const delay = (ms) => __awaiter(void 0, void 0, void 0, function* () {
68
+ yield new Promise(f => setTimeout(f, ms));
69
+ });
70
+ const uploadSubscribe = (url, formData, headers) => __awaiter(void 0, void 0, void 0, function* () { return (yield fetch(url, { method: 'POST', body: formData, headers: headers ? headers : {} })); });
71
+ const splitFileIntoChunks = (file, chunkSize) => {
72
+ const chunks = [];
73
+ let start = 0;
74
+ while (start < file.size) {
75
+ const end = Math.min(start + chunkSize, file.size);
76
+ const chunk = file.slice(start, end);
77
+ chunks.push(chunk);
78
+ start = end;
79
+ }
80
+ ;
81
+ return chunks;
82
+ };
83
+ const generateGuid = () => {
84
+ var chars = '0123456789abcdef';
85
+ var guid = '';
86
+ for (var i = 0; i < 40; i++) {
87
+ var randomIndex = Math.floor(Math.random() * chars.length);
88
+ guid += chars.charAt(randomIndex);
89
+ }
90
+ ;
91
+ return guid;
92
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "partial-uploader",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",