@colijnit/configurator 1.0.20 → 1.0.21
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/.idea/Configurator.iml +12 -0
- package/.idea/codeStyles/Project.xml +21 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/misc.xml +9 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/angular.json +193 -0
- package/configurator.iml +11 -0
- package/dist/configurator/index.html +14 -0
- package/dist/configurator/main-es2015.js +3129 -0
- package/dist/configurator/main-es2015.js.map +1 -0
- package/dist/configurator/main-es5.js +5482 -0
- package/dist/configurator/main-es5.js.map +1 -0
- package/dist/configurator/polyfills-es2015.js +4520 -0
- package/dist/configurator/polyfills-es2015.js.map +1 -0
- package/dist/configurator/polyfills-es5.js +18375 -0
- package/dist/configurator/polyfills-es5.js.map +1 -0
- package/dist/configurator/runtime-es2015.js +155 -0
- package/dist/configurator/runtime-es2015.js.map +1 -0
- package/dist/configurator/runtime-es5.js +155 -0
- package/dist/configurator/runtime-es5.js.map +1 -0
- package/dist/configurator/styles-es2015.js +450 -0
- package/dist/configurator/styles-es2015.js.map +1 -0
- package/dist/configurator/styles-es5.js +432 -0
- package/dist/configurator/styles-es5.js.map +1 -0
- package/dist/configurator/vendor-es2015.js +155551 -0
- package/dist/configurator/vendor-es2015.js.map +1 -0
- package/dist/configurator/vendor-es5.js +183588 -0
- package/dist/configurator/vendor-es5.js.map +1 -0
- package/ng-package.json +9 -0
- package/package.json +47 -14
- package/src/app/app.component.ts +222 -0
- package/src/app/app.module.ts +34 -0
- package/src/app/builder.ts +480 -0
- package/src/app/components/answers/answer/answer.component.ts +61 -0
- package/src/app/components/answers/answers.component.ts +41 -0
- package/src/app/components/answers/answers.module.ts +26 -0
- package/src/app/components/selections/selections.component.ts +131 -0
- package/src/app/components/selections/selections.module.ts +20 -0
- package/src/app/components/shared/loader/loader.component.scss +33 -0
- package/src/app/components/shared/loader/loader.component.ts +20 -0
- package/src/app/components/shared/shared.module.ts +16 -0
- package/src/app/directives/visibility-observer-master.directive.ts +71 -0
- package/src/app/directives/visibility-observer.directive.ts +74 -0
- package/src/app/services/configurator.service.ts +86 -0
- package/src/app/services/image-cache.service.ts +56 -0
- package/src/app/services/locator.service.ts +6 -0
- package/src/environments/environment.prod.ts +3 -0
- package/src/environments/environment.ts +8 -0
- package/src/helper/variation-helper.ts +220 -0
- package/src/index.html +14 -0
- package/src/main.ts +11 -0
- package/src/model/material.ts +22 -0
- package/src/model/variation-settings.ts +14 -0
- package/src/model/variation.ts +11 -0
- package/src/polyfills.ts +73 -0
- package/{public_api.d.ts → src/public_api.ts} +6 -6
- package/src/style/shared.scss +173 -0
- package/src/style/styles.scss +45 -0
- package/src/tsconfig.app.json +16 -0
- package/src/tsconfig.spec.json +19 -0
- package/src/utils/asset.utils.ts +88 -0
- package/src/utils/file.utils.ts +156 -0
- package/src/utils/file.utils.unit.test.ts +8 -0
- package/src/utils/image.utils.ts +54 -0
- package/src/utils/object.utils.ts +52 -0
- package/src/utils/scene-utils.ts +119 -0
- package/src/utils/threed.utils.ts +219 -0
- package/src/utils/variation-utils.ts +216 -0
- package/tsconfig.json +23 -0
- package/tslint.json +132 -0
- package/app/builder.d.ts +0 -53
- package/app/components/answers/answer/answer.component.d.ts +0 -11
- package/app/components/answers/answers.component.d.ts +0 -8
- package/app/components/answers/answers.module.d.ts +0 -2
- package/app/components/selections/selections.component.d.ts +0 -22
- package/app/components/selections/selections.module.d.ts +0 -2
- package/app/components/shared/loader/loader.component.d.ts +0 -2
- package/app/components/shared/shared.module.d.ts +0 -2
- package/app/directives/visibility-observer-master.directive.d.ts +0 -9
- package/app/directives/visibility-observer.directive.d.ts +0 -13
- package/app/services/configurator.service.d.ts +0 -22
- package/app/services/image-cache.service.d.ts +0 -10
- package/app/services/locator.service.d.ts +0 -4
- package/bundles/colijnit-configurator.umd.js +0 -2745
- package/bundles/colijnit-configurator.umd.js.map +0 -1
- package/bundles/colijnit-configurator.umd.min.js +0 -17
- package/bundles/colijnit-configurator.umd.min.js.map +0 -1
- package/colijnit-configurator.d.ts +0 -10
- package/colijnit-configurator.metadata.json +0 -1
- package/esm2015/app/builder.js +0 -477
- package/esm2015/app/components/answers/answer/answer.component.js +0 -69
- package/esm2015/app/components/answers/answers.component.js +0 -43
- package/esm2015/app/components/answers/answers.module.js +0 -29
- package/esm2015/app/components/selections/selections.component.js +0 -134
- package/esm2015/app/components/selections/selections.module.js +0 -23
- package/esm2015/app/components/shared/loader/loader.component.js +0 -24
- package/esm2015/app/components/shared/shared.module.js +0 -21
- package/esm2015/app/directives/visibility-observer-master.directive.js +0 -51
- package/esm2015/app/directives/visibility-observer.directive.js +0 -57
- package/esm2015/app/services/configurator.service.js +0 -94
- package/esm2015/app/services/image-cache.service.js +0 -66
- package/esm2015/app/services/locator.service.js +0 -10
- package/esm2015/colijnit-configurator.js +0 -11
- package/esm2015/helper/variation-helper.js +0 -216
- package/esm2015/model/material.js +0 -11
- package/esm2015/model/variation-settings.js +0 -6
- package/esm2015/model/variation.js +0 -3
- package/esm2015/public_api.js +0 -7
- package/esm2015/utils/asset.utils.js +0 -74
- package/esm2015/utils/file.utils.js +0 -139
- package/esm2015/utils/image.utils.js +0 -52
- package/esm2015/utils/object.utils.js +0 -49
- package/esm2015/utils/scene-utils.js +0 -94
- package/esm2015/utils/threed.utils.js +0 -222
- package/esm2015/utils/variation-utils.js +0 -224
- package/esm5/app/builder.js +0 -591
- package/esm5/app/components/answers/answer/answer.component.js +0 -64
- package/esm5/app/components/answers/answers.component.js +0 -27
- package/esm5/app/components/answers/answers.module.js +0 -32
- package/esm5/app/components/selections/selections.component.js +0 -104
- package/esm5/app/components/selections/selections.module.js +0 -26
- package/esm5/app/components/shared/loader/loader.component.js +0 -16
- package/esm5/app/components/shared/shared.module.js +0 -24
- package/esm5/app/directives/visibility-observer-master.directive.js +0 -64
- package/esm5/app/directives/visibility-observer.directive.js +0 -59
- package/esm5/app/services/configurator.service.js +0 -160
- package/esm5/app/services/image-cache.service.js +0 -69
- package/esm5/app/services/locator.service.js +0 -13
- package/esm5/colijnit-configurator.js +0 -11
- package/esm5/helper/variation-helper.js +0 -268
- package/esm5/model/material.js +0 -13
- package/esm5/model/variation-settings.js +0 -8
- package/esm5/model/variation.js +0 -7
- package/esm5/public_api.js +0 -7
- package/esm5/utils/asset.utils.js +0 -106
- package/esm5/utils/file.utils.js +0 -151
- package/esm5/utils/image.utils.js +0 -56
- package/esm5/utils/object.utils.js +0 -56
- package/esm5/utils/scene-utils.js +0 -98
- package/esm5/utils/threed.utils.js +0 -279
- package/esm5/utils/variation-utils.js +0 -327
- package/fesm2015/colijnit-configurator.js +0 -2109
- package/fesm2015/colijnit-configurator.js.map +0 -1
- package/fesm5/colijnit-configurator.js +0 -2527
- package/fesm5/colijnit-configurator.js.map +0 -1
- package/helper/variation-helper.d.ts +0 -14
- package/model/material.d.ts +0 -17
- package/model/variation-settings.d.ts +0 -14
- package/model/variation.d.ts +0 -10
- package/utils/asset.utils.d.ts +0 -13
- package/utils/file.utils.d.ts +0 -27
- package/utils/image.utils.d.ts +0 -8
- package/utils/object.utils.d.ts +0 -7
- package/utils/scene-utils.d.ts +0 -7
- package/utils/threed.utils.d.ts +0 -16
- package/utils/variation-utils.d.ts +0 -12
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __generator } from "tslib";
|
|
2
|
-
import * as JSZip from 'jszip';
|
|
3
|
-
import { VariationSettings } from "../model/variation-settings";
|
|
4
|
-
// @dynamic
|
|
5
|
-
var VariationUtils = /** @class */ (function () {
|
|
6
|
-
function VariationUtils() {
|
|
7
|
-
}
|
|
8
|
-
VariationUtils.LoadVariation = function (assetPath, fileName) {
|
|
9
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
10
|
-
var id, file, err_1, mute;
|
|
11
|
-
return __generator(this, function (_a) {
|
|
12
|
-
switch (_a.label) {
|
|
13
|
-
case 0:
|
|
14
|
-
if (!fileName) {
|
|
15
|
-
return [2 /*return*/, null];
|
|
16
|
-
}
|
|
17
|
-
if (fileName.indexOf('ione3d') < 0) {
|
|
18
|
-
fileName = fileName.concat('.ione3d');
|
|
19
|
-
}
|
|
20
|
-
id = fileName.substr(0, fileName.lastIndexOf('.ione3d'));
|
|
21
|
-
_a.label = 1;
|
|
22
|
-
case 1:
|
|
23
|
-
_a.trys.push([1, 4, , 5]);
|
|
24
|
-
if (!assetPath.endsWith('/')) {
|
|
25
|
-
assetPath += '/';
|
|
26
|
-
}
|
|
27
|
-
if (!window.hasOwnProperty('downloadVariation')) {
|
|
28
|
-
console.error('downloadVariation not defined in window global');
|
|
29
|
-
return [2 /*return*/, null];
|
|
30
|
-
}
|
|
31
|
-
return [4 /*yield*/, window.downloadVariation(assetPath.replace('https://cdn1.colijn-it.nl/', '') + "variation/" + fileName)];
|
|
32
|
-
case 2:
|
|
33
|
-
file = _a.sent();
|
|
34
|
-
return [4 /*yield*/, VariationUtils.GetVariationSettingsFromFile(id, file)];
|
|
35
|
-
case 3: return [2 /*return*/, _a.sent()];
|
|
36
|
-
case 4:
|
|
37
|
-
err_1 = _a.sent();
|
|
38
|
-
mute = err_1;
|
|
39
|
-
return [2 /*return*/, null];
|
|
40
|
-
case 5: return [2 /*return*/];
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
// public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {
|
|
46
|
-
// return new Promise((resolve: Function) => {
|
|
47
|
-
// if (!material) {
|
|
48
|
-
// resolve(null);
|
|
49
|
-
// }
|
|
50
|
-
// if (this.MaterialCache.has(material.name)) {
|
|
51
|
-
// resolve(this.MaterialCache.get(material.name).clone());
|
|
52
|
-
// } else {
|
|
53
|
-
// VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {
|
|
54
|
-
// if (settings) {
|
|
55
|
-
// AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {
|
|
56
|
-
// const materialParams: MeshStandardMaterialParameters = {};
|
|
57
|
-
// materialParams.name = material.name;
|
|
58
|
-
// materialParams.map = materialObj.texture;
|
|
59
|
-
// materialParams.normalMap = materialObj.normal;
|
|
60
|
-
// materialParams.aoMap = materialObj.ao;
|
|
61
|
-
// materialParams.roughnessMap = materialObj.roughness;
|
|
62
|
-
// materialParams.metalnessMap = materialObj.metalness;
|
|
63
|
-
// materialParams.roughness = 1;
|
|
64
|
-
// materialParams.metalness = 1;
|
|
65
|
-
// const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);
|
|
66
|
-
// this.MaterialCache.set(material.name, pbrMat);
|
|
67
|
-
// resolve(pbrMat.clone());
|
|
68
|
-
// });
|
|
69
|
-
// } else {
|
|
70
|
-
// resolve(material);
|
|
71
|
-
// }
|
|
72
|
-
// });
|
|
73
|
-
// }
|
|
74
|
-
// });
|
|
75
|
-
// }
|
|
76
|
-
VariationUtils.GetVariationSettingsFromFile = function (id, compressedFile) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
78
|
-
var zipContent, variationSettings, index, indexFile;
|
|
79
|
-
return __generator(this, function (_a) {
|
|
80
|
-
switch (_a.label) {
|
|
81
|
-
case 0:
|
|
82
|
-
if (!compressedFile) {
|
|
83
|
-
return [2 /*return*/, null];
|
|
84
|
-
}
|
|
85
|
-
return [4 /*yield*/, VariationUtils.GetZipContent(compressedFile)];
|
|
86
|
-
case 1:
|
|
87
|
-
zipContent = _a.sent();
|
|
88
|
-
variationSettings = new VariationSettings();
|
|
89
|
-
variationSettings.id = id;
|
|
90
|
-
if (!zipContent.files['index.json']) return [3 /*break*/, 3];
|
|
91
|
-
return [4 /*yield*/, zipContent.files['index.json'].async('string')];
|
|
92
|
-
case 2:
|
|
93
|
-
indexFile = _a.sent();
|
|
94
|
-
index = JSON.parse(indexFile);
|
|
95
|
-
_a.label = 3;
|
|
96
|
-
case 3:
|
|
97
|
-
if (!index) return [3 /*break*/, 5];
|
|
98
|
-
return [4 /*yield*/, VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent)];
|
|
99
|
-
case 4:
|
|
100
|
-
_a.sent();
|
|
101
|
-
return [3 /*break*/, 7];
|
|
102
|
-
case 5: return [4 /*yield*/, VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent)];
|
|
103
|
-
case 6:
|
|
104
|
-
_a.sent();
|
|
105
|
-
_a.label = 7;
|
|
106
|
-
case 7: return [2 /*return*/, variationSettings];
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
VariationUtils.CreateSettingsBasedOnIndex = function (index, variationSettings, zipContent) {
|
|
112
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
113
|
-
var _a, _b, _c, _d, _e, _f;
|
|
114
|
-
return __generator(this, function (_g) {
|
|
115
|
-
switch (_g.label) {
|
|
116
|
-
case 0:
|
|
117
|
-
if (!index.normalFile) return [3 /*break*/, 2];
|
|
118
|
-
_a = variationSettings;
|
|
119
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile)];
|
|
120
|
-
case 1:
|
|
121
|
-
_a.normal = _g.sent();
|
|
122
|
-
variationSettings.normalFilename = index.normalFile;
|
|
123
|
-
_g.label = 2;
|
|
124
|
-
case 2:
|
|
125
|
-
if (!index.aoFile) return [3 /*break*/, 4];
|
|
126
|
-
_b = variationSettings;
|
|
127
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile)];
|
|
128
|
-
case 3:
|
|
129
|
-
_b.ao = _g.sent();
|
|
130
|
-
variationSettings.aoFilename = index.aoFile;
|
|
131
|
-
_g.label = 4;
|
|
132
|
-
case 4:
|
|
133
|
-
if (!index.metalnessFile) return [3 /*break*/, 6];
|
|
134
|
-
_c = variationSettings;
|
|
135
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile)];
|
|
136
|
-
case 5:
|
|
137
|
-
_c.metalness = _g.sent();
|
|
138
|
-
variationSettings.metalnessFilename = index.metalnessFile;
|
|
139
|
-
_g.label = 6;
|
|
140
|
-
case 6:
|
|
141
|
-
if (!index.roughnessFile) return [3 /*break*/, 8];
|
|
142
|
-
_d = variationSettings;
|
|
143
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile)];
|
|
144
|
-
case 7:
|
|
145
|
-
_d.roughness = _g.sent();
|
|
146
|
-
variationSettings.roughnessFilename = index.roughnessFile;
|
|
147
|
-
_g.label = 8;
|
|
148
|
-
case 8:
|
|
149
|
-
if (!index.diffuseFile) return [3 /*break*/, 10];
|
|
150
|
-
_e = variationSettings;
|
|
151
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile)];
|
|
152
|
-
case 9:
|
|
153
|
-
_e.texture = _g.sent();
|
|
154
|
-
variationSettings.textureFilename = index.diffuseFile;
|
|
155
|
-
_g.label = 10;
|
|
156
|
-
case 10:
|
|
157
|
-
_f = variationSettings;
|
|
158
|
-
return [4 /*yield*/, VariationUtils.LoadFileContentFromZip(zipContent.files['repeat.json'], 'repeat.json', false)];
|
|
159
|
-
case 11:
|
|
160
|
-
_f.settings =
|
|
161
|
-
(_g.sent()) || {};
|
|
162
|
-
Object.assign(variationSettings.settings, index.repeat);
|
|
163
|
-
variationSettings.settings.metalness = index.metalness;
|
|
164
|
-
variationSettings.settings.roughness = index.roughness;
|
|
165
|
-
return [2 /*return*/];
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
};
|
|
170
|
-
VariationUtils.CreateSettingsBasedOnFileName = function (variationSettings, zipContent) {
|
|
171
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
172
|
-
var allLoaded, _loop_1, this_1, _a, _b, _i, fileName;
|
|
173
|
-
var _this = this;
|
|
174
|
-
return __generator(this, function (_c) {
|
|
175
|
-
switch (_c.label) {
|
|
176
|
-
case 0:
|
|
177
|
-
allLoaded = [];
|
|
178
|
-
_loop_1 = function (fileName) {
|
|
179
|
-
var file_1;
|
|
180
|
-
return __generator(this, function (_a) {
|
|
181
|
-
switch (_a.label) {
|
|
182
|
-
case 0:
|
|
183
|
-
if (!zipContent.files[fileName]) return [3 /*break*/, 2];
|
|
184
|
-
return [4 /*yield*/, zipContent.files[fileName]];
|
|
185
|
-
case 1:
|
|
186
|
-
file_1 = _a.sent();
|
|
187
|
-
if (file_1.name.toLowerCase().indexOf('normal') > -1 && this_1.FileIsImage(file_1.name)) {
|
|
188
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (normalFile) {
|
|
189
|
-
variationSettings.normal = "data:image/" + _this.GetBase64FileType(file_1.name) + ";base64," + normalFile;
|
|
190
|
-
variationSettings.normalFilename = fileName;
|
|
191
|
-
}));
|
|
192
|
-
}
|
|
193
|
-
else if (file_1.name.toLowerCase().indexOf('ao') > -1 && this_1.FileIsImage(file_1.name)) {
|
|
194
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (aoFile) {
|
|
195
|
-
variationSettings.ao = "data:image/" + _this.GetBase64FileType(file_1.name) + ";base64," + aoFile;
|
|
196
|
-
variationSettings.aoFilename = fileName;
|
|
197
|
-
}));
|
|
198
|
-
}
|
|
199
|
-
else if (file_1.name.toLowerCase().indexOf('metalness') > -1 && this_1.FileIsImage(file_1.name)) {
|
|
200
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (metalnessFile) {
|
|
201
|
-
variationSettings.metalness = "data:image/" + _this.GetBase64FileType(file_1.name) + ";base64," + metalnessFile;
|
|
202
|
-
variationSettings.metalnessFilename = fileName;
|
|
203
|
-
}));
|
|
204
|
-
}
|
|
205
|
-
else if (file_1.name.toLowerCase().indexOf('roughness') > -1 && this_1.FileIsImage(file_1.name)) {
|
|
206
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (roughnessFile) {
|
|
207
|
-
variationSettings.roughness = "data:image/" + _this.GetBase64FileType(file_1.name) + ";base64," + roughnessFile;
|
|
208
|
-
variationSettings.roughnessFilename = fileName;
|
|
209
|
-
}));
|
|
210
|
-
}
|
|
211
|
-
else if (file_1.name.toLowerCase().indexOf('diffuse') > -1 && this_1.FileIsImage(file_1.name)) {
|
|
212
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (diffuseFile) {
|
|
213
|
-
variationSettings.texture = "data:image/" + _this.GetBase64FileType(file_1.name) + ";base64," + diffuseFile;
|
|
214
|
-
variationSettings.textureFilename = fileName;
|
|
215
|
-
}));
|
|
216
|
-
}
|
|
217
|
-
else if (file_1.name.indexOf('.jp') > -1) {
|
|
218
|
-
allLoaded.push(zipContent.files[fileName].async('base64').then(function (textureFile) {
|
|
219
|
-
variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;
|
|
220
|
-
variationSettings.textureFilename = fileName;
|
|
221
|
-
}));
|
|
222
|
-
}
|
|
223
|
-
else if (file_1.name.indexOf('.json') > -1) {
|
|
224
|
-
allLoaded.push(zipContent.files[fileName].async('string').then(function (settingsFile) {
|
|
225
|
-
var settingsFileObj = JSON.parse(settingsFile);
|
|
226
|
-
for (var key in settingsFileObj) {
|
|
227
|
-
if (settingsFileObj[key]) {
|
|
228
|
-
variationSettings.settings[key] = settingsFileObj[key];
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}));
|
|
232
|
-
}
|
|
233
|
-
_a.label = 2;
|
|
234
|
-
case 2: return [2 /*return*/];
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
};
|
|
238
|
-
this_1 = this;
|
|
239
|
-
_a = [];
|
|
240
|
-
for (_b in zipContent.files)
|
|
241
|
-
_a.push(_b);
|
|
242
|
-
_i = 0;
|
|
243
|
-
_c.label = 1;
|
|
244
|
-
case 1:
|
|
245
|
-
if (!(_i < _a.length)) return [3 /*break*/, 4];
|
|
246
|
-
fileName = _a[_i];
|
|
247
|
-
return [5 /*yield**/, _loop_1(fileName)];
|
|
248
|
-
case 2:
|
|
249
|
-
_c.sent();
|
|
250
|
-
_c.label = 3;
|
|
251
|
-
case 3:
|
|
252
|
-
_i++;
|
|
253
|
-
return [3 /*break*/, 1];
|
|
254
|
-
case 4: return [4 /*yield*/, Promise.all(allLoaded)];
|
|
255
|
-
case 5:
|
|
256
|
-
_c.sent();
|
|
257
|
-
return [2 /*return*/];
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
};
|
|
262
|
-
VariationUtils.LoadFileContentFromZip = function (zip, fileName, base64) {
|
|
263
|
-
var _this = this;
|
|
264
|
-
if (base64 === void 0) { base64 = true; }
|
|
265
|
-
return new Promise(function (resolve) {
|
|
266
|
-
if (zip && fileName) {
|
|
267
|
-
zip.async(base64 ? 'base64' : 'string').then(function (fileContent) {
|
|
268
|
-
if (base64) {
|
|
269
|
-
resolve("data:image/" + _this.GetBase64FileType(fileName) + ";base64," + fileContent);
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
resolve(fileContent);
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
resolve(undefined);
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
};
|
|
281
|
-
VariationUtils.FileIsImage = function (fileName) {
|
|
282
|
-
var ext = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();
|
|
283
|
-
switch (ext) {
|
|
284
|
-
case 'jpg':
|
|
285
|
-
case 'jpeg':
|
|
286
|
-
case 'png':
|
|
287
|
-
case 'bmp':
|
|
288
|
-
return true;
|
|
289
|
-
default:
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
VariationUtils.GetBase64FileType = function (fileName) {
|
|
294
|
-
var ext = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();
|
|
295
|
-
switch (ext) {
|
|
296
|
-
case 'jpg':
|
|
297
|
-
case 'jpeg':
|
|
298
|
-
return 'jpeg';
|
|
299
|
-
case 'png':
|
|
300
|
-
return 'png';
|
|
301
|
-
case 'bmp':
|
|
302
|
-
return 'bmp';
|
|
303
|
-
default:
|
|
304
|
-
return 'jpeg';
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
// Get the content
|
|
308
|
-
VariationUtils.GetZipContent = function (file) {
|
|
309
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
310
|
-
var jszip, content;
|
|
311
|
-
return __generator(this, function (_a) {
|
|
312
|
-
switch (_a.label) {
|
|
313
|
-
case 0:
|
|
314
|
-
jszip = new JSZip();
|
|
315
|
-
return [4 /*yield*/, jszip.loadAsync(file)];
|
|
316
|
-
case 1:
|
|
317
|
-
content = _a.sent();
|
|
318
|
-
return [2 /*return*/, content];
|
|
319
|
-
}
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
};
|
|
323
|
-
VariationUtils.MaterialCache = new Map();
|
|
324
|
-
return VariationUtils;
|
|
325
|
-
}());
|
|
326
|
-
export { VariationUtils };
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvbGlqbml0L2NvbmZpZ3VyYXRvci8iLCJzb3VyY2VzIjpbInV0aWxzL3ZhcmlhdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHL0IsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHOUQsV0FBVztBQUNYO0lBQUE7SUFnTkEsQ0FBQztJQTdNcUIsNEJBQWEsR0FBakMsVUFBa0MsU0FBaUIsRUFBRSxRQUFnQjs7Ozs7O3dCQUNuRSxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUNiLHNCQUFPLElBQUksRUFBQzt5QkFDYjt3QkFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNsQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdkM7d0JBQ0ssRUFBRSxHQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7Ozt3QkFFckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQzVCLFNBQVMsSUFBSSxHQUFHLENBQUM7eUJBQ2xCO3dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7NEJBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQzs0QkFDaEUsc0JBQU8sSUFBSSxFQUFDO3lCQUNiO3dCQUNpQixxQkFBTyxNQUFjLENBQUMsaUJBQWlCLENBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLENBQUMsa0JBQWEsUUFBVSxDQUFDLEVBQUE7O3dCQUFsSSxJQUFJLEdBQVEsU0FBc0g7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QUNWLHFCQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUE7O3dCQUFyQyxPQUFPLEdBQUcsU0FBMkI7d0JBQzNDLHNCQUFPLE9BQU8sRUFBQzs7OztLQUNoQjtJQTlNYyw0QkFBYSxHQUE0QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBK01wRixxQkFBQztDQUFBLEFBaE5ELElBZ05DO1NBaE5ZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBKU1ppcCBmcm9tICdqc3ppcCc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gXCIuL2ZpbGUudXRpbHNcIjtcclxuaW1wb3J0IHtWYXJpYXRpb25TZXR0aW5nc30gZnJvbSBcIi4uL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5nc1wiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uVXRpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIE1hdGVyaWFsQ2FjaGU6IE1hcDxzdHJpbmcsIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBMb2FkVmFyaWF0aW9uKGFzc2V0UGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChmaWxlTmFtZS5pbmRleE9mKCdpb25lM2QnKSA8IDApIHtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5jb25jYXQoJy5pb25lM2QnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBmaWxlTmFtZS5zdWJzdHIoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy5pb25lM2QnKSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIWFzc2V0UGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgYXNzZXRQYXRoICs9ICcvJztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZG93bmxvYWRWYXJpYXRpb24nKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Rvd25sb2FkVmFyaWF0aW9uIG5vdCBkZWZpbmVkIGluIHdpbmRvdyBnbG9iYWwnKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmaWxlOiBhbnkgPSBhd2FpdCAod2luZG93IGFzIGFueSkuZG93bmxvYWRWYXJpYXRpb24oYCR7YXNzZXRQYXRoLnJlcGxhY2UoJ2h0dHBzOi8vY2RuMS5jb2xpam4taXQubmwvJywgJycpfXZhcmlhdGlvbi8ke2ZpbGVOYW1lfWApO1xyXG4gICAgICByZXR1cm4gYXdhaXQgVmFyaWF0aW9uVXRpbHMuR2V0VmFyaWF0aW9uU2V0dGluZ3NGcm9tRmlsZShpZCwgZmlsZSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc3QgbXV0ZSA9IGVycjtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIEdldE1hdGVyaWFsRnJvbU5hbWUodmFyaWF0aW9uRm9sZGVyOiBzdHJpbmcsIG1hdGVyaWFsOiBhbnkpOiBQcm9taXNlPE1lc2hTdGFuZGFyZE1hdGVyaWFsPiB7XHJcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgLy8gICAgIGlmICghbWF0ZXJpYWwpIHtcclxuICAvLyAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmICh0aGlzLk1hdGVyaWFsQ2FjaGUuaGFzKG1hdGVyaWFsLm5hbWUpKSB7XHJcbiAgLy8gICAgICAgcmVzb2x2ZSh0aGlzLk1hdGVyaWFsQ2FjaGUuZ2V0KG1hdGVyaWFsLm5hbWUpLmNsb25lKCkpO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIFZhcmlhdGlvblV0aWxzLkxvYWRWYXJpYXRpb24odmFyaWF0aW9uRm9sZGVyLCBtYXRlcmlhbC5uYW1lLCBmYWxzZSkudGhlbigoc2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoc2V0dGluZ3MpIHtcclxuICAvLyAgICAgICAgICAgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldChzZXR0aW5ncykudGhlbigobWF0ZXJpYWxPYmo6IE1hdGVyaWFsKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxQYXJhbXM6IE1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVycyA9IHt9O1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm5hbWUgPSBtYXRlcmlhbC5uYW1lO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1hcCA9IG1hdGVyaWFsT2JqLnRleHR1cmU7XHJcbiAgLy8gICAgICAgICAgICAgbWF0ZXJpYWxQYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWxPYmoubm9ybWFsO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLmFvTWFwID0gbWF0ZXJpYWxPYmouYW87XHJcbiAgLy8gICAgICAgICAgICAgbWF0ZXJpYWxQYXJhbXMucm91Z2huZXNzTWFwID0gbWF0ZXJpYWxPYmoucm91Z2huZXNzO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1ldGFsbmVzc01hcCA9IG1hdGVyaWFsT2JqLm1ldGFsbmVzcztcclxuICAvLyAgICAgICAgICAgICBtYXRlcmlhbFBhcmFtcy5yb3VnaG5lc3MgPSAxO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1ldGFsbmVzcyA9IDE7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgcGJyTWF0OiBNZXNoU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBNZXNoU3RhbmRhcmRNYXRlcmlhbChtYXRlcmlhbFBhcmFtcyk7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5NYXRlcmlhbENhY2hlLnNldChtYXRlcmlhbC5uYW1lLCBwYnJNYXQpO1xyXG4gIC8vICAgICAgICAgICAgIHJlc29sdmUocGJyTWF0LmNsb25lKCkpO1xyXG4gIC8vICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHJlc29sdmUobWF0ZXJpYWwpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIEdldFZhcmlhdGlvblNldHRpbmdzRnJvbUZpbGUoaWQ6IHN0cmluZywgY29tcHJlc3NlZEZpbGU6IGFueSk6IFByb21pc2U8VmFyaWF0aW9uU2V0dGluZ3M+IHtcclxuICAgIGlmICghY29tcHJlc3NlZEZpbGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCB6aXBDb250ZW50ID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuR2V0WmlwQ29udGVudChjb21wcmVzc2VkRmlsZSk7XHJcbiAgICBjb25zdCB2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPSBuZXcgVmFyaWF0aW9uU2V0dGluZ3MoKTtcclxuICAgIGxldCBpbmRleDtcclxuICAgIHZhcmlhdGlvblNldHRpbmdzLmlkID0gaWQ7XHJcblxyXG4gICAgaWYgKHppcENvbnRlbnQuZmlsZXNbJ2luZGV4Lmpzb24nXSkge1xyXG4gICAgICBjb25zdCBpbmRleEZpbGU6IHN0cmluZyA9IGF3YWl0IHppcENvbnRlbnQuZmlsZXNbJ2luZGV4Lmpzb24nXS5hc3luYygnc3RyaW5nJyk7XHJcbiAgICAgIGluZGV4ID0gSlNPTi5wYXJzZShpbmRleEZpbGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4KSB7XHJcbiAgICAgIGF3YWl0IFZhcmlhdGlvblV0aWxzLkNyZWF0ZVNldHRpbmdzQmFzZWRPbkluZGV4KGluZGV4LCB2YXJpYXRpb25TZXR0aW5ncywgemlwQ29udGVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5DcmVhdGVTZXR0aW5nc0Jhc2VkT25GaWxlTmFtZSh2YXJpYXRpb25TZXR0aW5ncywgemlwQ29udGVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFyaWF0aW9uU2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBDcmVhdGVTZXR0aW5nc0Jhc2VkT25JbmRleChpbmRleDogYW55LCB2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MsIHppcENvbnRlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGluZGV4Lm5vcm1hbEZpbGUpIHtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mubm9ybWFsID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4Lm5vcm1hbEZpbGVdLCBpbmRleC5ub3JtYWxGaWxlKTtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mubm9ybWFsRmlsZW5hbWUgPSBpbmRleC5ub3JtYWxGaWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4LmFvRmlsZSkge1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5hbyA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5hb0ZpbGVdLCBpbmRleC5hb0ZpbGUpO1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5hb0ZpbGVuYW1lID0gaW5kZXguYW9GaWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4Lm1ldGFsbmVzc0ZpbGUpIHtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3MubWV0YWxuZXNzID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4Lm1ldGFsbmVzc0ZpbGVdLCBpbmRleC5tZXRhbG5lc3NGaWxlKTtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3MubWV0YWxuZXNzRmlsZW5hbWUgPSBpbmRleC5tZXRhbG5lc3NGaWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4LnJvdWdobmVzc0ZpbGUpIHtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mucm91Z2huZXNzID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4LnJvdWdobmVzc0ZpbGVdLCBpbmRleC5yb3VnaG5lc3NGaWxlKTtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mucm91Z2huZXNzRmlsZW5hbWUgPSBpbmRleC5yb3VnaG5lc3NGaWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4LmRpZmZ1c2VGaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmUgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcENvbnRlbnQuZmlsZXNbaW5kZXguZGlmZnVzZUZpbGVdLCBpbmRleC5kaWZmdXNlRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmVGaWxlbmFtZSA9IGluZGV4LmRpZmZ1c2VGaWxlO1xyXG4gICAgfVxyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3Muc2V0dGluZ3MgPVxyXG4gICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcENvbnRlbnQuZmlsZXNbJ3JlcGVhdC5qc29uJ10sICdyZXBlYXQuanNvbicsIGZhbHNlKSB8fCB7fTtcclxuICAgIE9iamVjdC5hc3NpZ24odmFyaWF0aW9uU2V0dGluZ3Muc2V0dGluZ3MsIGluZGV4LnJlcGVhdCk7XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5ncy5tZXRhbG5lc3MgPSBpbmRleC5tZXRhbG5lc3M7XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5ncy5yb3VnaG5lc3MgPSBpbmRleC5yb3VnaG5lc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBDcmVhdGVTZXR0aW5nc0Jhc2VkT25GaWxlTmFtZSh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MsIHppcENvbnRlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYWxsTG9hZGVkOiBQcm9taXNlPFZhcmlhdGlvblNldHRpbmdzPltdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIGluIHppcENvbnRlbnQuZmlsZXMpIHtcclxuICAgICAgaWYgKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZTogYW55ID0gYXdhaXQgemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV07XHJcbiAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ25vcm1hbCcpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigobm9ybWFsRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLm5vcm1hbCA9IGBkYXRhOmltYWdlLyR7dGhpcy5HZXRCYXNlNjRGaWxlVHlwZShmaWxlLm5hbWUpfTtiYXNlNjQsJHtub3JtYWxGaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLm5vcm1hbEZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhbycpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigoYW9GaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3MuYW8gPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7YW9GaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLmFvRmlsZW5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ21ldGFsbmVzcycpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigobWV0YWxuZXNzRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLm1ldGFsbmVzcyA9IGBkYXRhOmltYWdlLyR7dGhpcy5HZXRCYXNlNjRGaWxlVHlwZShmaWxlLm5hbWUpfTtiYXNlNjQsJHttZXRhbG5lc3NGaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLm1ldGFsbmVzc0ZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdyb3VnaG5lc3MnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKHJvdWdobmVzc0ZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5yb3VnaG5lc3MgPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7cm91Z2huZXNzRmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5yb3VnaG5lc3NGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZGlmZnVzZScpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigoZGlmZnVzZUZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy50ZXh0dXJlID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke2RpZmZ1c2VGaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmVGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLmluZGV4T2YoJy5qcCcpID4gLTEpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKCh0ZXh0dXJlRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmUgPSAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnICsgdGV4dHVyZUZpbGU7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmVGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLmluZGV4T2YoJy5qc29uJykgPiAtMSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ3N0cmluZycpLnRoZW4oKHNldHRpbmdzRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzRmlsZU9iaiA9IEpTT04ucGFyc2Uoc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2V0dGluZ3NGaWxlT2JqKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHNldHRpbmdzRmlsZU9ialtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5nc1trZXldID0gc2V0dGluZ3NGaWxlT2JqW2tleV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChhbGxMb2FkZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXA6IGFueSwgZmlsZU5hbWU6IHN0cmluZywgYmFzZTY0OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICh6aXAgJiYgZmlsZU5hbWUpIHtcclxuICAgICAgICB6aXAuYXN5bmMoYmFzZTY0ID8gJ2Jhc2U2NCcgOiAnc3RyaW5nJykudGhlbigoZmlsZUNvbnRlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhc2U2NCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGBkYXRhOmltYWdlLyR7dGhpcy5HZXRCYXNlNjRGaWxlVHlwZShmaWxlTmFtZSl9O2Jhc2U2NCwke2ZpbGVDb250ZW50fWApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEZpbGVJc0ltYWdlKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGV4dDogc3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxLCBmaWxlTmFtZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGV4dCkge1xyXG4gICAgICBjYXNlICdqcGcnOlxyXG4gICAgICBjYXNlICdqcGVnJzpcclxuICAgICAgY2FzZSAncG5nJzpcclxuICAgICAgY2FzZSAnYm1wJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRCYXNlNjRGaWxlVHlwZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGV4dDogc3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxLCBmaWxlTmFtZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGV4dCkge1xyXG4gICAgICBjYXNlICdqcGcnOlxyXG4gICAgICBjYXNlICdqcGVnJzpcclxuICAgICAgICByZXR1cm4gJ2pwZWcnO1xyXG4gICAgICBjYXNlICdwbmcnOlxyXG4gICAgICAgIHJldHVybiAncG5nJztcclxuICAgICAgY2FzZSAnYm1wJzpcclxuICAgICAgICByZXR1cm4gJ2JtcCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdqcGVnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdldCB0aGUgY29udGVudFxyXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIEdldFppcENvbnRlbnQoZmlsZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBqc3ppcCA9IG5ldyBKU1ppcCgpO1xyXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGpzemlwLmxvYWRBc3luYyhmaWxlKTtcclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxufVxyXG4iXX0=
|