bruce-models 5.8.7 → 5.8.8

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.
@@ -111,5 +111,5 @@ __exportStar(require("./environment"), exports);
111
111
  __exportStar(require("./data-source/data-source"), exports);
112
112
  __exportStar(require("./scenario/scenario"), exports);
113
113
  // This is updated with the package.json version on build.
114
- exports.VERSION = "5.8.7";
114
+ exports.VERSION = "5.8.8";
115
115
  //# sourceMappingURL=bruce-models.js.map
@@ -30,20 +30,51 @@ var Uploader;
30
30
  if (!api) {
31
31
  api = environment_1.ENVIRONMENT.Api().GetBruceApi();
32
32
  }
33
- const FILE_PORTION_SIZE = 50000000; // 50MB.
33
+ const getOptimalConcurrency = (fileSize) => {
34
+ // < 50MB
35
+ if (fileSize < 50 * 1024 * 1024) {
36
+ return 2;
37
+ }
38
+ // < 200MB
39
+ if (fileSize < 200 * 1024 * 1024) {
40
+ return 3;
41
+ }
42
+ // >= 200MB
43
+ return 4;
44
+ };
45
+ const concurrentUploads = getOptimalConcurrency(file.size);
46
+ const FILE_PORTION_SIZE = 35000000; // 35MB.
34
47
  let fileSize = file.size;
35
- let fileOffset = 0;
36
- let filePartsCount = fileSize / FILE_PORTION_SIZE;
48
+ let filePartsCount = Math.ceil(fileSize / FILE_PORTION_SIZE);
37
49
  let t = Math.trunc(filePartsCount);
38
50
  filePartsCount = filePartsCount > t ? t + 1 : t;
39
- let filePartIndex = 1;
40
- let uploadToken = object_utils_1.ObjectUtils.UId();
41
- let data;
42
- while (fileOffset < fileSize) {
43
- let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);
44
- let retryCount = 5;
45
- let retryWait = 1000;
51
+ // Uploaded number of bytes so far.
52
+ let uploaded = 0;
53
+ // Part index -> uploaded amount.
54
+ // When the part finishes uploading, we remove from here and add to uploaded.
55
+ let uploadedPending = new Map();
56
+ const updateProgress = () => {
57
+ let total = uploaded;
58
+ uploadedPending.forEach((value) => {
59
+ total += (value || 0);
60
+ });
61
+ const percent = Math.round((total / fileSize) * 100);
62
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
63
+ percent: percent,
64
+ uploaded: false
65
+ });
66
+ };
67
+ const uploadToken = object_utils_1.ObjectUtils.UId();
68
+ const uploadPart = (filePartIndex) => __awaiter(this, void 0, void 0, function* () {
69
+ const fileOffset = filePartIndex * FILE_PORTION_SIZE;
70
+ const partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);
71
+ let retryCount = 3;
72
+ let retryWait = 3000;
73
+ let data = null;
46
74
  while (retryCount > 0) {
75
+ // Reset pending loaded in case this is a retry.
76
+ uploadedPending.set(filePartIndex, 0);
77
+ updateProgress();
47
78
  try {
48
79
  const blob = file.slice(fileOffset, fileOffset + partSize);
49
80
  const partialFile = new File([blob], file.name, { type: file.type });
@@ -51,20 +82,26 @@ var Uploader;
51
82
  formData.append("originalFileName", file.name);
52
83
  formData.append("token", uploadToken);
53
84
  formData.append("count", "" + filePartsCount);
54
- formData.append("part", "" + filePartIndex);
85
+ // Not 0-based.
86
+ formData.append("part", "" + (filePartIndex + 1));
55
87
  formData.append("file", partialFile);
56
88
  const reqParams = api_1.Api.PrepReqParams(req);
57
89
  reqParams.formData = formData;
58
90
  reqParams.onProgress = (progress) => {
59
- const sofar = fileOffset + progress.loaded;
60
- const percent = Math.round((sofar / file.size) * 100);
61
- onProgress === null || onProgress === void 0 ? void 0 : onProgress({
62
- percent: percent,
63
- uploaded: false
64
- });
91
+ const loaded = progress.loaded;
92
+ uploadedPending.set(filePartIndex, loaded);
93
+ updateProgress();
65
94
  };
66
95
  data = yield api.UPLOAD(url, partialFile, reqParams);
67
96
  retryCount = 0;
97
+ uploaded += partSize;
98
+ // Flush the pending upload.
99
+ const pendingLoaded = uploadedPending.get(filePartIndex) || 0;
100
+ uploaded += pendingLoaded;
101
+ uploadedPending.delete(filePartIndex);
102
+ // Call onProgress since we completed a portion.
103
+ // This helps us know progress even when the request callback isn't working properly.
104
+ updateProgress();
68
105
  }
69
106
  catch (up) {
70
107
  retryCount -= 1;
@@ -75,20 +112,34 @@ var Uploader;
75
112
  retryWait = retryWait * 2;
76
113
  }
77
114
  }
78
- fileOffset += partSize;
79
- filePartIndex++;
80
- // Call onProgress since we completed a portion.
81
- // This helps us know progress even when the request callback isn't working properly.
82
- onProgress === null || onProgress === void 0 ? void 0 : onProgress({
83
- percent: Math.round((fileOffset / fileSize) * 100),
84
- uploaded: false
85
- });
115
+ return { index: filePartIndex, data };
116
+ });
117
+ let results = [];
118
+ for (let i = 0; i < filePartsCount; i += concurrentUploads) {
119
+ const uploadPromises = [];
120
+ for (let j = 0; j < concurrentUploads && (i + j) < filePartsCount; j++) {
121
+ uploadPromises.push(uploadPart(i + j));
122
+ }
123
+ const batchResults = yield Promise.all(uploadPromises);
124
+ // Sorting to maintain promise order.
125
+ // Helps determine what the last part was.
126
+ results.push(...batchResults.sort((a, b) => a.index - b.index).map(r => r.data));
86
127
  }
87
128
  onProgress === null || onProgress === void 0 ? void 0 : onProgress({
88
129
  percent: 100,
89
130
  uploaded: true
90
131
  });
91
- return data;
132
+ // Look for the explicitly stated final part.
133
+ const final = results.find(x => x.RemainingParts == 0);
134
+ if (final) {
135
+ return final;
136
+ }
137
+ // Look for the last part.
138
+ else if (results.length) {
139
+ return results[results.length - 1];
140
+ }
141
+ // :(
142
+ return null;
92
143
  });
93
144
  }
94
145
  Uploader.DoMultiPartUpload = DoMultiPartUpload;
@@ -1 +1 @@
1
- {"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../../src/internal/uploader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../../src/internal/uploader.ts"],"names":[],"mappings":"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"}
@@ -93,4 +93,4 @@ export * from "./plugin/plugin";
93
93
  export * from "./environment";
94
94
  export * from "./data-source/data-source";
95
95
  export * from "./scenario/scenario";
96
- export declare const VERSION = "5.8.7";
96
+ export declare const VERSION = "5.8.8";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bruce-models",
3
- "version": "5.8.7",
3
+ "version": "5.8.8",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "main": "dist/bruce-models.umd.js",