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