bruce-models 1.8.0 → 1.8.2
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/bruce-models.es5.js +216 -41
- package/dist/bruce-models.es5.js.map +1 -1
- package/dist/bruce-models.umd.js +214 -40
- package/dist/bruce-models.umd.js.map +1 -1
- package/dist/lib/api/abstract-api.js +10 -4
- package/dist/lib/api/abstract-api.js.map +1 -1
- package/dist/lib/bruce-models.js +1 -0
- package/dist/lib/bruce-models.js.map +1 -1
- package/dist/lib/client-file/client-file.js +85 -32
- package/dist/lib/client-file/client-file.js.map +1 -1
- package/dist/lib/internal/uploader.js +77 -0
- package/dist/lib/internal/uploader.js.map +1 -0
- package/dist/lib/tileset/tileset.js +59 -4
- package/dist/lib/tileset/tileset.js.map +1 -1
- package/dist/types/api/api.d.ts +1 -1
- package/dist/types/bruce-models.d.ts +1 -0
- package/dist/types/client-file/client-file.d.ts +11 -2
- package/dist/types/internal/uploader.d.ts +16 -0
- package/dist/types/tileset/tileset.d.ts +5 -2
- package/package.json +1 -1
package/dist/bruce-models.umd.js
CHANGED
|
@@ -669,10 +669,16 @@
|
|
|
669
669
|
if (this.ssidHeader && this.ssid) {
|
|
670
670
|
xhr.setRequestHeader(this.ssidHeader, this.ssid);
|
|
671
671
|
}
|
|
672
|
-
|
|
673
|
-
if (params === null || params === void 0 ? void 0 : params.formData) {
|
|
674
|
-
|
|
675
|
-
|
|
672
|
+
let formData;
|
|
673
|
+
if ((params === null || params === void 0 ? void 0 : params.formData) instanceof FormData) {
|
|
674
|
+
formData = params === null || params === void 0 ? void 0 : params.formData;
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
formData = new FormData();
|
|
678
|
+
if (params.formData) {
|
|
679
|
+
for (const key in params.formData) {
|
|
680
|
+
formData.append(key, params.formData[key]);
|
|
681
|
+
}
|
|
676
682
|
}
|
|
677
683
|
}
|
|
678
684
|
formData.append("file", blob);
|
|
@@ -4596,6 +4602,68 @@
|
|
|
4596
4602
|
EntityAttribute.GetAttribute = GetAttribute;
|
|
4597
4603
|
})(exports.EntityAttribute || (exports.EntityAttribute = {}));
|
|
4598
4604
|
|
|
4605
|
+
(function (Uploader) {
|
|
4606
|
+
Uploader.MIN_LARGE_FILE_SIZE = 100000000; // 100MB.
|
|
4607
|
+
function DoMultiPartUpload(params) {
|
|
4608
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4609
|
+
const { file, api, urlSuffix: url, req, onProgress } = params;
|
|
4610
|
+
const FILE_PORTION_SIZE = 100000000; // 100MB.
|
|
4611
|
+
let fileSize = file.size;
|
|
4612
|
+
let fileOffset = 0;
|
|
4613
|
+
let filePartsCount = fileSize / FILE_PORTION_SIZE;
|
|
4614
|
+
let t = Math.trunc(filePartsCount);
|
|
4615
|
+
filePartsCount = filePartsCount > t ? t + 1 : t;
|
|
4616
|
+
let filePartIndex = 1;
|
|
4617
|
+
let uploadToken = exports.ObjectUtils.UId();
|
|
4618
|
+
let data;
|
|
4619
|
+
while (fileOffset < fileSize) {
|
|
4620
|
+
let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);
|
|
4621
|
+
let retryCount = 5;
|
|
4622
|
+
let retryWait = 1000;
|
|
4623
|
+
while (retryCount > 0) {
|
|
4624
|
+
try {
|
|
4625
|
+
const blob = file.slice(fileOffset, fileOffset + partSize);
|
|
4626
|
+
const formData = new FormData();
|
|
4627
|
+
formData.append("originalFileName", file.name);
|
|
4628
|
+
formData.append("token", uploadToken);
|
|
4629
|
+
formData.append("count", "" + filePartsCount);
|
|
4630
|
+
formData.append("part", "" + filePartIndex);
|
|
4631
|
+
formData.append("file", blob);
|
|
4632
|
+
const reqParams = exports.Api.PrepReqParams(req);
|
|
4633
|
+
reqParams.formData = formData;
|
|
4634
|
+
reqParams.onProgress = (progress) => {
|
|
4635
|
+
const sofar = fileOffset + progress.loaded;
|
|
4636
|
+
const percent = Math.round((sofar / file.size) * 100);
|
|
4637
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4638
|
+
percent: percent,
|
|
4639
|
+
uploaded: false
|
|
4640
|
+
});
|
|
4641
|
+
};
|
|
4642
|
+
data = yield api.UPLOAD(url, blob, reqParams);
|
|
4643
|
+
retryCount = 0;
|
|
4644
|
+
}
|
|
4645
|
+
catch (up) {
|
|
4646
|
+
retryCount -= 1;
|
|
4647
|
+
if (retryCount <= 0) {
|
|
4648
|
+
throw up;
|
|
4649
|
+
}
|
|
4650
|
+
yield new Promise((res) => setTimeout(res, retryWait));
|
|
4651
|
+
retryWait = retryWait * 2;
|
|
4652
|
+
}
|
|
4653
|
+
}
|
|
4654
|
+
fileOffset += partSize;
|
|
4655
|
+
filePartIndex++;
|
|
4656
|
+
}
|
|
4657
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4658
|
+
percent: 100,
|
|
4659
|
+
uploaded: true
|
|
4660
|
+
});
|
|
4661
|
+
return data;
|
|
4662
|
+
});
|
|
4663
|
+
}
|
|
4664
|
+
Uploader.DoMultiPartUpload = DoMultiPartUpload;
|
|
4665
|
+
})(exports.Uploader || (exports.Uploader = {}));
|
|
4666
|
+
|
|
4599
4667
|
(function (ClientFile) {
|
|
4600
4668
|
function GetCacheKey(fileId) {
|
|
4601
4669
|
return `${exports.Api.ECacheKey.ClientFile}${exports.Api.ECacheKey.Id}${fileId}`;
|
|
@@ -4657,33 +4725,67 @@
|
|
|
4657
4725
|
ClientFile.Delete = Delete;
|
|
4658
4726
|
function Upload(params) {
|
|
4659
4727
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4660
|
-
const { api, file, purpose, req } = params;
|
|
4728
|
+
const { api, file, purpose, req, onProgress } = params;
|
|
4661
4729
|
if (!file) {
|
|
4662
4730
|
throw ("File is required.");
|
|
4663
4731
|
}
|
|
4664
|
-
|
|
4665
|
-
if (
|
|
4666
|
-
|
|
4667
|
-
"Purpose": purpose
|
|
4668
|
-
};
|
|
4732
|
+
const size = file === null || file === void 0 ? void 0 : file.size;
|
|
4733
|
+
if (!size) {
|
|
4734
|
+
throw ("You cannot upload a 0byte sized file.");
|
|
4669
4735
|
}
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4736
|
+
let clientFile;
|
|
4737
|
+
if (size > exports.Uploader.MIN_LARGE_FILE_SIZE) {
|
|
4738
|
+
clientFile = yield exports.Uploader.DoMultiPartUpload({
|
|
4739
|
+
api,
|
|
4740
|
+
file,
|
|
4741
|
+
urlSuffix: "fileUpload",
|
|
4742
|
+
req,
|
|
4743
|
+
onProgress
|
|
4744
|
+
});
|
|
4745
|
+
}
|
|
4746
|
+
else {
|
|
4747
|
+
const reqParams = exports.Api.PrepReqParams(Object.assign({}, req));
|
|
4748
|
+
reqParams.onProgress = (progress) => {
|
|
4749
|
+
const percent = Math.round((progress.loaded / file.size) * 100);
|
|
4750
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4751
|
+
percent: percent,
|
|
4752
|
+
uploaded: false
|
|
4677
4753
|
});
|
|
4678
|
-
}
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4754
|
+
};
|
|
4755
|
+
clientFile = yield api.UPLOAD("file/uploadNew", file, req);
|
|
4756
|
+
}
|
|
4757
|
+
if ((clientFile === null || clientFile === void 0 ? void 0 : clientFile.ID) && purpose) {
|
|
4758
|
+
yield UpdatePurpose({
|
|
4759
|
+
api,
|
|
4760
|
+
fileId: clientFile.ID,
|
|
4761
|
+
purpose,
|
|
4762
|
+
req
|
|
4763
|
+
});
|
|
4764
|
+
}
|
|
4765
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4766
|
+
percent: 100,
|
|
4767
|
+
uploaded: true
|
|
4768
|
+
});
|
|
4769
|
+
return {
|
|
4770
|
+
clientFile
|
|
4771
|
+
};
|
|
4684
4772
|
});
|
|
4685
4773
|
}
|
|
4686
4774
|
ClientFile.Upload = Upload;
|
|
4775
|
+
function UpdatePurpose(params) {
|
|
4776
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4777
|
+
let { api, fileId, purpose, req: reqParams } = params;
|
|
4778
|
+
if (!purpose) {
|
|
4779
|
+
purpose = "";
|
|
4780
|
+
}
|
|
4781
|
+
yield api.POST("file/updatepurpose/" + fileId + "/?Purpose=" + purpose, {
|
|
4782
|
+
Purpose: purpose
|
|
4783
|
+
}, exports.Api.PrepReqParams(reqParams));
|
|
4784
|
+
const cacheKey = GetCacheKey(fileId);
|
|
4785
|
+
api.Cache.RemoveByContains(cacheKey);
|
|
4786
|
+
});
|
|
4787
|
+
}
|
|
4788
|
+
ClientFile.UpdatePurpose = UpdatePurpose;
|
|
4687
4789
|
/**
|
|
4688
4790
|
* Uploads a temp file.
|
|
4689
4791
|
* This will return a temp file id which can be used in various endpoints.
|
|
@@ -4692,23 +4794,41 @@
|
|
|
4692
4794
|
*/
|
|
4693
4795
|
function UploadTemp(params) {
|
|
4694
4796
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4695
|
-
const { api, file, req } = params;
|
|
4797
|
+
const { api, file, req, onProgress } = params;
|
|
4696
4798
|
if (!file) {
|
|
4697
4799
|
throw ("File is required.");
|
|
4698
4800
|
}
|
|
4699
|
-
const
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4801
|
+
const size = file === null || file === void 0 ? void 0 : file.size;
|
|
4802
|
+
if (!size) {
|
|
4803
|
+
throw ("You cannot upload a 0byte sized file.");
|
|
4804
|
+
}
|
|
4805
|
+
let tempFile;
|
|
4806
|
+
if (size > exports.Uploader.MIN_LARGE_FILE_SIZE) {
|
|
4807
|
+
tempFile = yield exports.Uploader.DoMultiPartUpload({
|
|
4808
|
+
api,
|
|
4809
|
+
file,
|
|
4810
|
+
urlSuffix: "tempFileUpload",
|
|
4811
|
+
req,
|
|
4812
|
+
onProgress
|
|
4813
|
+
});
|
|
4814
|
+
}
|
|
4815
|
+
else {
|
|
4816
|
+
req.onProgress = (progress) => {
|
|
4817
|
+
const percent = Math.round((progress.loaded / file.size) * 100);
|
|
4818
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4819
|
+
percent: percent,
|
|
4820
|
+
uploaded: false
|
|
4705
4821
|
});
|
|
4706
|
-
}
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
|
|
4822
|
+
};
|
|
4823
|
+
tempFile = yield api.UPLOAD("file/uploadTemp", file, req);
|
|
4824
|
+
}
|
|
4825
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
4826
|
+
percent: 100,
|
|
4827
|
+
uploaded: true
|
|
4828
|
+
});
|
|
4829
|
+
return {
|
|
4830
|
+
tempFileId: tempFile["TempFile.ID"]
|
|
4831
|
+
};
|
|
4712
4832
|
});
|
|
4713
4833
|
}
|
|
4714
4834
|
ClientFile.UploadTemp = UploadTemp;
|
|
@@ -5022,11 +5142,38 @@
|
|
|
5022
5142
|
Tileset.Update = Update;
|
|
5023
5143
|
function UploadFile(params) {
|
|
5024
5144
|
return __awaiter(this, void 0, void 0, function* () {
|
|
5025
|
-
const { api,
|
|
5145
|
+
const { api, file, req, tilesetId, onProgress } = params;
|
|
5026
5146
|
if (!tilesetId || !file) {
|
|
5027
5147
|
throw ("Tileset ID and file are required.");
|
|
5028
5148
|
}
|
|
5029
|
-
|
|
5149
|
+
const size = file === null || file === void 0 ? void 0 : file.size;
|
|
5150
|
+
if (!size) {
|
|
5151
|
+
throw ("You cannot upload a 0byte sized file.");
|
|
5152
|
+
}
|
|
5153
|
+
if (size > exports.Uploader.MIN_LARGE_FILE_SIZE) {
|
|
5154
|
+
yield exports.Uploader.DoMultiPartUpload({
|
|
5155
|
+
api,
|
|
5156
|
+
file,
|
|
5157
|
+
urlSuffix: `tileset/uploadFileEx/${tilesetId}/add`,
|
|
5158
|
+
req,
|
|
5159
|
+
onProgress
|
|
5160
|
+
});
|
|
5161
|
+
}
|
|
5162
|
+
else {
|
|
5163
|
+
req.onProgress = (progress) => {
|
|
5164
|
+
const percent = Math.round((progress.loaded / file.size) * 100);
|
|
5165
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
5166
|
+
percent: percent,
|
|
5167
|
+
uploaded: false
|
|
5168
|
+
});
|
|
5169
|
+
};
|
|
5170
|
+
yield api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, req);
|
|
5171
|
+
}
|
|
5172
|
+
api.Cache.Remove(GetCacheKey(tilesetId, true));
|
|
5173
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
5174
|
+
percent: 100,
|
|
5175
|
+
uploaded: true
|
|
5176
|
+
});
|
|
5030
5177
|
});
|
|
5031
5178
|
}
|
|
5032
5179
|
Tileset.UploadFile = UploadFile;
|
|
@@ -5043,12 +5190,39 @@
|
|
|
5043
5190
|
Tileset.DeleteFile = DeleteFile;
|
|
5044
5191
|
function UploadSrcFile(params) {
|
|
5045
5192
|
return __awaiter(this, void 0, void 0, function* () {
|
|
5046
|
-
const { api,
|
|
5193
|
+
const { api, file, req, tilesetId, onProgress } = params;
|
|
5047
5194
|
if (!tilesetId || !file) {
|
|
5048
5195
|
throw ("Tileset ID and file are required.");
|
|
5049
5196
|
}
|
|
5050
|
-
|
|
5197
|
+
const size = file === null || file === void 0 ? void 0 : file.size;
|
|
5198
|
+
if (!size) {
|
|
5199
|
+
throw ("You cannot upload a 0byte sized file.");
|
|
5200
|
+
}
|
|
5201
|
+
if (size > exports.Uploader.MIN_LARGE_FILE_SIZE) {
|
|
5202
|
+
yield exports.Uploader.DoMultiPartUpload({
|
|
5203
|
+
api,
|
|
5204
|
+
file,
|
|
5205
|
+
urlSuffix: `tileset/uploadFileEx/${tilesetId}/src`,
|
|
5206
|
+
req,
|
|
5207
|
+
onProgress
|
|
5208
|
+
});
|
|
5209
|
+
}
|
|
5210
|
+
else {
|
|
5211
|
+
req.onProgress = (progress) => {
|
|
5212
|
+
const percent = Math.round((progress.loaded / file.size) * 100);
|
|
5213
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
5214
|
+
percent: percent,
|
|
5215
|
+
uploaded: false
|
|
5216
|
+
});
|
|
5217
|
+
};
|
|
5218
|
+
yield api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, req);
|
|
5219
|
+
}
|
|
5051
5220
|
api.Cache.Remove(GetCacheKey(tilesetId, true));
|
|
5221
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
5222
|
+
percent: 100,
|
|
5223
|
+
uploaded: true
|
|
5224
|
+
});
|
|
5225
|
+
return;
|
|
5052
5226
|
});
|
|
5053
5227
|
}
|
|
5054
5228
|
Tileset.UploadSrcFile = UploadSrcFile;
|