@cloudbase/utilities 1.8.2 → 1.8.4
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/{cjs/adapters → adapters}/index.js +1 -1
- package/dist/adapters/platforms/web.js +212 -0
- package/dist/constants/common.js +26 -0
- package/dist/constants/errors.js +12 -0
- package/dist/{cjs/constants → constants}/index.js +1 -1
- package/dist/helpers/decorators.js +206 -0
- package/dist/{cjs/helpers → helpers}/index.js +1 -1
- package/dist/{cjs/index.js → index.js} +1 -1
- package/dist/libs/cache.js +338 -0
- package/dist/libs/events.js +108 -0
- package/dist/libs/util.js +223 -0
- package/package.json +5 -6
- package/dist/cjs/adapters/platforms/web.js +0 -212
- package/dist/cjs/constants/common.js +0 -26
- package/dist/cjs/constants/errors.js +0 -12
- package/dist/cjs/helpers/decorators.js +0 -206
- package/dist/cjs/libs/cache.js +0 -338
- package/dist/cjs/libs/events.js +0 -108
- package/dist/cjs/libs/util.js +0 -223
- /package/dist/{cjs/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{cjs/adapters → adapters}/platforms/web.d.ts +0 -0
- /package/dist/{cjs/constants → constants}/common.d.ts +0 -0
- /package/dist/{cjs/constants → constants}/errors.d.ts +0 -0
- /package/dist/{cjs/constants → constants}/index.d.ts +0 -0
- /package/dist/{cjs/helpers → helpers}/decorators.d.ts +0 -0
- /package/dist/{cjs/helpers → helpers}/index.d.ts +0 -0
- /package/dist/{cjs/index.d.ts → index.d.ts} +0 -0
- /package/dist/{cjs/libs → libs}/cache.d.ts +0 -0
- /package/dist/{cjs/libs → libs}/events.d.ts +0 -0
- /package/dist/{cjs/libs → libs}/util.d.ts +0 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
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;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.CloudbaseCache = void 0;
|
|
55
|
+
var adapter_interface_1 = require("@cloudbase/adapter-interface");
|
|
56
|
+
var util_1 = require("./util");
|
|
57
|
+
var constants_1 = require("../constants");
|
|
58
|
+
var TcbCacheObject = (function (_super) {
|
|
59
|
+
__extends(TcbCacheObject, _super);
|
|
60
|
+
function TcbCacheObject(root) {
|
|
61
|
+
var _this = _super.call(this) || this;
|
|
62
|
+
_this._root = root;
|
|
63
|
+
if (!root.tcbCacheObject) {
|
|
64
|
+
root.tcbCacheObject = {};
|
|
65
|
+
}
|
|
66
|
+
return _this;
|
|
67
|
+
}
|
|
68
|
+
TcbCacheObject.prototype.setItem = function (key, value) {
|
|
69
|
+
this._root.tcbCacheObject[key] = value;
|
|
70
|
+
};
|
|
71
|
+
TcbCacheObject.prototype.getItem = function (key) {
|
|
72
|
+
return this._root.tcbCacheObject[key];
|
|
73
|
+
};
|
|
74
|
+
TcbCacheObject.prototype.removeItem = function (key) {
|
|
75
|
+
delete this._root.tcbCacheObject[key];
|
|
76
|
+
};
|
|
77
|
+
TcbCacheObject.prototype.clear = function () {
|
|
78
|
+
delete this._root.tcbCacheObject;
|
|
79
|
+
};
|
|
80
|
+
return TcbCacheObject;
|
|
81
|
+
}(adapter_interface_1.AbstractStorage));
|
|
82
|
+
function createStorage(persistence, adapter) {
|
|
83
|
+
switch (persistence) {
|
|
84
|
+
case 'local':
|
|
85
|
+
if (!adapter.localStorage) {
|
|
86
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_PARAMS, 'localStorage is not supported on current platform');
|
|
87
|
+
return new TcbCacheObject(adapter.root);
|
|
88
|
+
}
|
|
89
|
+
return adapter.localStorage;
|
|
90
|
+
case 'none':
|
|
91
|
+
return new TcbCacheObject(adapter.root);
|
|
92
|
+
case 'session':
|
|
93
|
+
if (!adapter.sessionStorage) {
|
|
94
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_PARAMS, 'sessionStorage is not supported on current platform');
|
|
95
|
+
return new TcbCacheObject(adapter.root);
|
|
96
|
+
}
|
|
97
|
+
return adapter.sessionStorage;
|
|
98
|
+
default:
|
|
99
|
+
if (!adapter.localStorage) {
|
|
100
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_PARAMS, 'localStorage is not supported on current platform');
|
|
101
|
+
return new TcbCacheObject(adapter.root);
|
|
102
|
+
}
|
|
103
|
+
return adapter.localStorage;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
var CloudbaseCache = (function () {
|
|
107
|
+
function CloudbaseCache(config) {
|
|
108
|
+
this.keys = {};
|
|
109
|
+
var persistence = config.persistence, _a = config.platformInfo, platformInfo = _a === void 0 ? {} : _a, _b = config.keys, keys = _b === void 0 ? {} : _b, _c = config.alwaysLocalKeys, alwaysLocalKeys = _c === void 0 ? [] : _c;
|
|
110
|
+
this._platformInfo = platformInfo;
|
|
111
|
+
this._alwaysLocalKeys = alwaysLocalKeys;
|
|
112
|
+
if (!this._storage) {
|
|
113
|
+
this._persistence = platformInfo.adapter.primaryStorage || persistence;
|
|
114
|
+
this._storage = createStorage(this._persistence, platformInfo.adapter);
|
|
115
|
+
this.keys = keys;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
Object.defineProperty(CloudbaseCache.prototype, "mode", {
|
|
119
|
+
get: function () {
|
|
120
|
+
return this._storage.mode || 'sync';
|
|
121
|
+
},
|
|
122
|
+
enumerable: false,
|
|
123
|
+
configurable: true
|
|
124
|
+
});
|
|
125
|
+
Object.defineProperty(CloudbaseCache.prototype, "persistence", {
|
|
126
|
+
get: function () {
|
|
127
|
+
return this._persistence;
|
|
128
|
+
},
|
|
129
|
+
enumerable: false,
|
|
130
|
+
configurable: true
|
|
131
|
+
});
|
|
132
|
+
CloudbaseCache.prototype.updatePersistence = function (persistence) {
|
|
133
|
+
if (this.mode === 'async') {
|
|
134
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use updatePersistenceAsync insteed');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (persistence === this._persistence) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
var isCurrentLocal = this._persistence === 'local';
|
|
141
|
+
this._persistence = persistence;
|
|
142
|
+
var storage = createStorage(persistence, this._platformInfo.adapter);
|
|
143
|
+
for (var key in this.keys) {
|
|
144
|
+
var name_1 = this.keys[key];
|
|
145
|
+
if (isCurrentLocal && this._alwaysLocalKeys.includes(key)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
var val = this._storage.getItem(name_1);
|
|
149
|
+
if (!(0, util_1.isUndefined)(val) && !(0, util_1.isNull)(val)) {
|
|
150
|
+
storage.setItem(name_1, val);
|
|
151
|
+
this._storage.removeItem(name_1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
this._storage = storage;
|
|
155
|
+
};
|
|
156
|
+
CloudbaseCache.prototype.updatePersistenceAsync = function (persistence) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
158
|
+
var isCurrentLocal, storage, _a, _b, _c, _i, key, name_2, val;
|
|
159
|
+
return __generator(this, function (_d) {
|
|
160
|
+
switch (_d.label) {
|
|
161
|
+
case 0:
|
|
162
|
+
if (persistence === this._persistence) {
|
|
163
|
+
return [2];
|
|
164
|
+
}
|
|
165
|
+
isCurrentLocal = this._persistence === 'local';
|
|
166
|
+
this._persistence = persistence;
|
|
167
|
+
storage = createStorage(persistence, this._platformInfo.adapter);
|
|
168
|
+
_a = this.keys;
|
|
169
|
+
_b = [];
|
|
170
|
+
for (_c in _a)
|
|
171
|
+
_b.push(_c);
|
|
172
|
+
_i = 0;
|
|
173
|
+
_d.label = 1;
|
|
174
|
+
case 1:
|
|
175
|
+
if (!(_i < _b.length)) return [3, 5];
|
|
176
|
+
_c = _b[_i];
|
|
177
|
+
if (!(_c in _a)) return [3, 4];
|
|
178
|
+
key = _c;
|
|
179
|
+
name_2 = this.keys[key];
|
|
180
|
+
if (isCurrentLocal && this._alwaysLocalKeys.includes(key)) {
|
|
181
|
+
return [3, 4];
|
|
182
|
+
}
|
|
183
|
+
return [4, this._storage.getItem(name_2)];
|
|
184
|
+
case 2:
|
|
185
|
+
val = _d.sent();
|
|
186
|
+
if (!(!(0, util_1.isUndefined)(val) && !(0, util_1.isNull)(val))) return [3, 4];
|
|
187
|
+
storage.setItem(name_2, val);
|
|
188
|
+
return [4, this._storage.removeItem(name_2)];
|
|
189
|
+
case 3:
|
|
190
|
+
_d.sent();
|
|
191
|
+
_d.label = 4;
|
|
192
|
+
case 4:
|
|
193
|
+
_i++;
|
|
194
|
+
return [3, 1];
|
|
195
|
+
case 5:
|
|
196
|
+
this._storage = storage;
|
|
197
|
+
return [2];
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
CloudbaseCache.prototype.setStore = function (key, value, version) {
|
|
203
|
+
if (this.mode === 'async') {
|
|
204
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use setStoreAsync insteed');
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (!this._storage) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
var val = {
|
|
212
|
+
version: version || 'localCachev1',
|
|
213
|
+
content: value,
|
|
214
|
+
};
|
|
215
|
+
this._storage.setItem(key, JSON.stringify(val));
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
throw new Error(JSON.stringify({
|
|
219
|
+
code: constants_1.ERRORS.OPERATION_FAIL,
|
|
220
|
+
msg: "[".concat((0, constants_1.getSdkName)(), "][").concat(constants_1.ERRORS.OPERATION_FAIL, "]setStore failed"),
|
|
221
|
+
info: e,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
};
|
|
226
|
+
CloudbaseCache.prototype.setStoreAsync = function (key, value, version) {
|
|
227
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
228
|
+
var val, e_1;
|
|
229
|
+
return __generator(this, function (_a) {
|
|
230
|
+
switch (_a.label) {
|
|
231
|
+
case 0:
|
|
232
|
+
if (!this._storage) {
|
|
233
|
+
return [2];
|
|
234
|
+
}
|
|
235
|
+
_a.label = 1;
|
|
236
|
+
case 1:
|
|
237
|
+
_a.trys.push([1, 3, , 4]);
|
|
238
|
+
val = {
|
|
239
|
+
version: version || 'localCachev1',
|
|
240
|
+
content: value,
|
|
241
|
+
};
|
|
242
|
+
return [4, this._storage.setItem(key, JSON.stringify(val))];
|
|
243
|
+
case 2:
|
|
244
|
+
_a.sent();
|
|
245
|
+
return [3, 4];
|
|
246
|
+
case 3:
|
|
247
|
+
e_1 = _a.sent();
|
|
248
|
+
return [2];
|
|
249
|
+
case 4: return [2];
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
};
|
|
254
|
+
CloudbaseCache.prototype.getStore = function (key, version) {
|
|
255
|
+
var _a;
|
|
256
|
+
if (this.mode === 'async') {
|
|
257
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use getStoreAsync insteed');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
try {
|
|
261
|
+
if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
|
|
262
|
+
return process.env.tcb_token;
|
|
263
|
+
}
|
|
264
|
+
if (!this._storage) {
|
|
265
|
+
return '';
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
return '';
|
|
270
|
+
}
|
|
271
|
+
version = version || 'localCachev1';
|
|
272
|
+
var content = this._storage.getItem(key);
|
|
273
|
+
if (!content) {
|
|
274
|
+
return '';
|
|
275
|
+
}
|
|
276
|
+
if (content.indexOf(version) >= 0) {
|
|
277
|
+
var d = JSON.parse(content);
|
|
278
|
+
return d.content;
|
|
279
|
+
}
|
|
280
|
+
return '';
|
|
281
|
+
};
|
|
282
|
+
CloudbaseCache.prototype.getStoreAsync = function (key, version) {
|
|
283
|
+
var _a;
|
|
284
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
285
|
+
var content, d;
|
|
286
|
+
return __generator(this, function (_b) {
|
|
287
|
+
switch (_b.label) {
|
|
288
|
+
case 0:
|
|
289
|
+
try {
|
|
290
|
+
if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
|
|
291
|
+
return [2, process.env.tcb_token];
|
|
292
|
+
}
|
|
293
|
+
if (!this._storage) {
|
|
294
|
+
return [2, ''];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
return [2, ''];
|
|
299
|
+
}
|
|
300
|
+
version = version || 'localCachev1';
|
|
301
|
+
return [4, this._storage.getItem(key)];
|
|
302
|
+
case 1:
|
|
303
|
+
content = _b.sent();
|
|
304
|
+
if (!content) {
|
|
305
|
+
return [2, ''];
|
|
306
|
+
}
|
|
307
|
+
if (content.indexOf(version) >= 0) {
|
|
308
|
+
d = JSON.parse(content);
|
|
309
|
+
return [2, d.content];
|
|
310
|
+
}
|
|
311
|
+
return [2, ''];
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
};
|
|
316
|
+
CloudbaseCache.prototype.removeStore = function (key) {
|
|
317
|
+
if (this.mode === 'async') {
|
|
318
|
+
(0, util_1.printWarn)(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use removeStoreAsync insteed');
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
this._storage.removeItem(key);
|
|
322
|
+
};
|
|
323
|
+
CloudbaseCache.prototype.removeStoreAsync = function (key) {
|
|
324
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
325
|
+
return __generator(this, function (_a) {
|
|
326
|
+
switch (_a.label) {
|
|
327
|
+
case 0: return [4, this._storage.removeItem(key)];
|
|
328
|
+
case 1:
|
|
329
|
+
_a.sent();
|
|
330
|
+
return [2];
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
};
|
|
335
|
+
return CloudbaseCache;
|
|
336
|
+
}());
|
|
337
|
+
exports.CloudbaseCache = CloudbaseCache;
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlicy9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrRUFBc0c7QUFHdEcsK0JBQXdEO0FBQ3hELDBDQUFrRDtBQUtsRDtJQUE2QixrQ0FBZTtJQUUxQyx3QkFBWSxJQUFTO1FBQXJCLFlBQ0UsaUJBQU8sU0FLUjtRQUpDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1NBQzFCOztJQUNILENBQUM7SUFDTSxnQ0FBTyxHQUFkLFVBQWUsR0FBVyxFQUFFLEtBQVU7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFDTSxnQ0FBTyxHQUFkLFVBQWUsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDTSxtQ0FBVSxHQUFqQixVQUFrQixHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNNLDhCQUFLLEdBQVo7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ25DLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFyQkQsQ0FBNkIsbUNBQWUsR0FxQjNDO0FBSUQsU0FBUyxhQUFhLENBQUMsV0FBd0IsRUFBRSxPQUE0QjtJQUMzRSxRQUFRLFdBQVcsRUFBRTtRQUNuQixLQUFLLE9BQU87WUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtn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Q0FBQyxpQkFBaUIsRUFBRSxrRkFBa0YsQ0FBQyxDQUFDO1lBQ3hILE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDWSx5Q0FBZ0IsR0FBN0IsVUFBOEIsR0FBVzs7Ozs0QkFDdkMsV0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQW5DLFNBQW1DLENBQUM7Ozs7O0tBQ3JDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBOUxELElBOExDO0FBOUxZLHdDQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmFnZUludGVyZmFjZSwgQWJzdHJhY3RTdG9yYWdlLCBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ2FjaGUsIElDYWNoZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY2FjaGUnO1xuaW1wb3J0IHsgS1YsIFBlcnNpc3RlbmNlLCBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgaXNOdWxsLCBwcmludFdhcm4gfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgRVJST1JTLCBnZXRTZGtOYW1lIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBwZXJzaXRlbmNlPW5vbmXml7bnmbvlvZXmgIHkv53lrZjlnKjlhoXlrZjkuK1cbiAqL1xuY2xhc3MgVGNiQ2FjaGVPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdFN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb290OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHJvb3Q6IGFueSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gICAgaWYgKCFyb290LnRjYkNhY2hlT2JqZWN0KSB7XG4gICAgICByb290LnRjYkNhY2hlT2JqZWN0ID0ge307XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fcm9vdC50Y2JDYWNoZU9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdC50Y2JDYWNoZU9iamVjdFtrZXldO1xuICB9XG4gIHB1YmxpYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuX3Jvb3QudGNiQ2FjaGVPYmplY3Rba2V5XTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgZGVsZXRlIHRoaXMuX3Jvb3QudGNiQ2FjaGVPYmplY3Q7XG4gIH1cbn1cbi8qKlxuICog5bel5Y6C5Ye95pWwXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UocGVyc2lzdGVuY2U6IFBlcnNpc3RlbmNlLCBhZGFwdGVyOiBTREtBZGFwdGVySW50ZXJmYWNlKTogU3RvcmFnZUludGVyZmFjZSB7XG4gIHN3aXRjaCAocGVyc2lzdGVuY2UpIHtcbiAgICBjYXNlICdsb2NhbCc6XG4gICAgICBpZiAoIWFkYXB0ZXIubG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdsb2NhbFN0b3JhZ2UgaXMgbm90IHN1cHBvcnRlZCBvbiBjdXJyZW50IHBsYXRmb3JtJyk7XG4gICAgICAgIC8vIOS4jeaUr+aMgWxvY2Fsc3RvcmFnZeeahOW5s+WPsOmZjee6p+S4um5vbmVcbiAgICAgICAgcmV0dXJuIG5ldyBUY2JDYWNoZU9iamVjdChhZGFwdGVyLnJvb3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFkYXB0ZXIubG9jYWxTdG9yYWdlO1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIG5ldyBUY2JDYWNoZU9iamVjdChhZGFwdGVyLnJvb3QpO1xuICAgIGNhc2UgJ3Nlc3Npb24nOlxuICAgICAgaWYgKCFhZGFwdGVyLnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdzZXNzaW9uU3RvcmFnZSBpcyBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgcGxhdGZvcm0nKTtcbiAgICAgICAgLy8g5LiN5pSv5oyBbG9jYWxzdG9yYWdl55qE5bmz5Y+w6ZmN57qn5Li6bm9uZVxuICAgICAgICByZXR1cm4gbmV3IFRjYkNhY2hlT2JqZWN0KGFkYXB0ZXIucm9vdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWRhcHRlci5zZXNzaW9uU3RvcmFnZTtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKCFhZGFwdGVyLmxvY2FsU3RvcmFnZSkge1xuICAgICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfUEFSQU1TLCAnbG9jYWxTdG9yYWdlIGlzIG5vdCBzdXBwb3J0ZWQgb24gY3VycmVudCBwbGF0Zm9ybScpO1xuICAgICAgICAvLyDkuI3mlK/mjIFsb2NhbHN0b3JhZ2XnmoTlubPlj7DpmY3nuqfkuLpub25lXG4gICAgICAgIHJldHVybiBuZXcgVGNiQ2FjaGVPYmplY3QoYWRhcHRlci5yb290KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZGFwdGVyLmxvY2FsU3RvcmFnZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRiYXNlQ2FjaGUgaW1wbGVtZW50cyBJQ2xvdWRiYXNlQ2FjaGUge1xuICBwdWJsaWMga2V5czogS1Y8c3RyaW5nPiA9IHt9O1xuXG4gIHByaXZhdGUgX3BlcnNpc3RlbmNlOiBQZXJzaXN0ZW5jZTtcbiAgcHJpdmF0ZSBfcGxhdGZvcm1JbmZvOiBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvO1xuICBwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlSW50ZXJmYWNlO1xuICAvLyDlp4vnu4jlrZjlgqjlnKhsb2NhbHN0b3JhZ2XkuK3nmoRrZXnpm4blkIhcbiAgcHJpdmF0ZSBfYWx3YXlzTG9jYWxLZXlzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElDYWNoZUNvbmZpZykge1xuICAgIGNvbnN0IHsgcGVyc2lzdGVuY2UsIHBsYXRmb3JtSW5mbyA9IHt9LCBrZXlzID0ge30sIGFsd2F5c0xvY2FsS2V5cyA9IFtdIH0gPSBjb25maWc7XG4gICAgdGhpcy5fcGxhdGZvcm1JbmZvID0gcGxhdGZvcm1JbmZvO1xuICAgIHRoaXMuX2Fsd2F5c0xvY2FsS2V5cyA9IGFsd2F5c0xvY2FsS2V5cztcbiAgICBpZiAoIXRoaXMuX3N0b3JhZ2UpIHtcbiAgICAgIHRoaXMuX3BlcnNpc3RlbmNlID0gcGxhdGZvcm1JbmZvLmFkYXB0ZXIucHJpbWFyeVN0b3JhZ2UgfHwgcGVyc2lzdGVuY2U7XG4gICAgICB0aGlzLl9zdG9yYWdlID0gY3JlYXRlU3RvcmFnZSh0aGlzLl9wZXJzaXN0ZW5jZSwgcGxhdGZvcm1JbmZvLmFkYXB0ZXIpO1xuICAgICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBnZXR0ZXIgc3RvcmFnZeaooeW8jy3lkIzmraUv5byC5q2lXG4gICAqL1xuICBnZXQgbW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5tb2RlIHx8ICdzeW5jJztcbiAgfVxuICBnZXQgcGVyc2lzdGVuY2UoKTogUGVyc2lzdGVuY2Uge1xuICAgIHJldHVybiB0aGlzLl9wZXJzaXN0ZW5jZTtcbiAgfVxuICAvKipcbiAgICog5Zyo5LiN5ZCMcGVyc2lzdGVuY2XkuYvpl7Tov4Hnp7vmlbDmja5cbiAgICogQHBhcmFtIHBlcnNpc3RlbmNlXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlUGVyc2lzdGVuY2UocGVyc2lzdGVuY2U6IFBlcnNpc3RlbmNlKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIHVwZGF0ZVBlcnNpc3RlbmNlQXN5bmMgaW5zdGVlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGVyc2lzdGVuY2UgPT09IHRoaXMuX3BlcnNpc3RlbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzQ3VycmVudExvY2FsID0gdGhpcy5fcGVyc2lzdGVuY2UgPT09ICdsb2NhbCc7XG4gICAgdGhpcy5fcGVyc2lzdGVuY2UgPSBwZXJzaXN0ZW5jZTtcbiAgICBjb25zdCBzdG9yYWdlID0gY3JlYXRlU3RvcmFnZShwZXJzaXN0ZW5jZSwgdGhpcy5fcGxhdGZvcm1JbmZvLmFkYXB0ZXIpO1xuICAgIC8vIOWIh+aNonBlcnNpc3RlbmNl6YeN5paw5Yib5bu6c3RvcmFnZeWvueixoVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua2V5cykge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMua2V5c1trZXldO1xuICAgICAgLy8g5aaC5p6c5b2T5YmN5Li6bG9jYWzlubbkuJRrZXnooqvorr7lrprkuLrlp4vnu4jlrZjlgqjlnKhsb2NhbHN0b3JhZ2XkuK3vvIzliJnkuI3ov4Hnp7tcbiAgICAgIGlmIChpc0N1cnJlbnRMb2NhbCAmJiB0aGlzLl9hbHdheXNMb2NhbEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuX3N0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSAmJiAhaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKG5hbWUsIHZhbCk7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc3RvcmFnZSA9IHN0b3JhZ2U7XG4gIH1cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVBlcnNpc3RlbmNlQXN5bmMocGVyc2lzdGVuY2U6IFBlcnNpc3RlbmNlKSB7XG4gICAgaWYgKHBlcnNpc3RlbmNlID09PSB0aGlzLl9wZXJzaXN0ZW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N1cnJlbnRMb2NhbCA9IHRoaXMuX3BlcnNpc3RlbmNlID09PSAnbG9jYWwnO1xuICAgIHRoaXMuX3BlcnNpc3RlbmNlID0gcGVyc2lzdGVuY2U7XG4gICAgY29uc3Qgc3RvcmFnZSA9IGNyZWF0ZVN0b3JhZ2UocGVyc2lzdGVuY2UsIHRoaXMuX3BsYXRmb3JtSW5mby5hZGFwdGVyKTtcbiAgICAvLyDliIfmjaJwZXJzaXN0ZW5jZemHjeaWsOWIm+W7unN0b3JhZ2Xlr7nosaFcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmtleXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmtleXNba2V5XTtcbiAgICAgIC8vIOWmguaenOW9k+WJjeS4umxvY2Fs5bm25LiUa2V56KKr6K6+5a6a5Li65aeL57uI5a2Y5YKo5ZyobG9jYWxzdG9yYWdl5Lit77yM5YiZ5LiN6L+B56e7XG4gICAgICBpZiAoaXNDdXJyZW50TG9jYWwgJiYgdGhpcy5fYWx3YXlzTG9jYWxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWwgPSBhd2FpdCB0aGlzLl9zdG9yYWdlLmdldEl0ZW0obmFtZSk7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkgJiYgIWlzTnVsbCh2YWwpKSB7XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWwpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3N0b3JhZ2UgPSBzdG9yYWdlO1xuICB9XG4gIHB1YmxpYyBzZXRTdG9yZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgdmVyc2lvbj86IGFueSkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBzZXRTdG9yZUFzeW5jIGluc3RlZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zdG9yYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbCA9IHtcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiB8fCAnbG9jYWxDYWNoZXYxJyxcbiAgICAgICAgY29udGVudDogdmFsdWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5fc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29kZTogRVJST1JTLk9QRVJBVElPTl9GQUlMLFxuICAgICAgICBtc2c6IGBbJHtnZXRTZGtOYW1lKCl9XVske0VSUk9SUy5PUEVSQVRJT05fRkFJTH1dc2V0U3RvcmUgZmFpbGVkYCxcbiAgICAgICAgaW5mbzogZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cbiAgcHVibGljIGFzeW5jIHNldFN0b3JlQXN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHZlcnNpb24/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX3N0b3JhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsID0ge1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICdsb2NhbENhY2hldjEnLFxuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLl9zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIHB1YmxpYyBnZXRTdG9yZShrZXk6IHN0cmluZywgdmVyc2lvbj86IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRTdG9yZUFzeW5jIGluc3RlZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIOa1i+ivleeUqOS+i+S9v+eUqFxuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8udGNiX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi50Y2JfdG9rZW47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fc3RvcmFnZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZlcnNpb24gPSB2ZXJzaW9uIHx8ICdsb2NhbENhY2hldjEnO1xuXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuX3N0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmIChjb250ZW50LmluZGV4T2YodmVyc2lvbikgPj0gMCkge1xuICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICByZXR1cm4gZC5jb250ZW50O1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcHVibGljIGFzeW5jIGdldFN0b3JlQXN5bmMoa2V5OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8g5rWL6K+V55So5L6L5L2/55SoXG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52Py50Y2JfdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LnRjYl90b2tlbjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgJ2xvY2FsQ2FjaGV2MSc7XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5fc3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQuaW5kZXhPZih2ZXJzaW9uKSA+PSAwKSB7XG4gICAgICBjb25zdCBkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgIHJldHVybiBkLmNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuICBwdWJsaWMgcmVtb3ZlU3RvcmUoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYXN5bmMnKSB7XG4gICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgcmVtb3ZlU3RvcmVBc3luYyBpbnN0ZWVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3N0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9XG4gIHB1YmxpYyBhc3luYyByZW1vdmVTdG9yZUFzeW5jKGtleTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5fc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.removeEventListener = exports.activateEvent = exports.addEventListener = exports.CloudbaseEventEmitter = exports.IErrorEvent = exports.CloudbaseEvent = void 0;
|
|
28
|
+
var util_1 = require("./util");
|
|
29
|
+
function _addEventListener(name, listener, listeners) {
|
|
30
|
+
listeners[name] = listeners[name] || [];
|
|
31
|
+
listeners[name].push(listener);
|
|
32
|
+
}
|
|
33
|
+
function _removeEventListener(name, listener, listeners) {
|
|
34
|
+
if (listeners === null || listeners === void 0 ? void 0 : listeners[name]) {
|
|
35
|
+
var index = listeners[name].indexOf(listener);
|
|
36
|
+
if (index !== -1) {
|
|
37
|
+
listeners[name].splice(index, 1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
var CloudbaseEvent = (function () {
|
|
42
|
+
function CloudbaseEvent(name, data) {
|
|
43
|
+
this.data = data || null;
|
|
44
|
+
this.name = name;
|
|
45
|
+
}
|
|
46
|
+
return CloudbaseEvent;
|
|
47
|
+
}());
|
|
48
|
+
exports.CloudbaseEvent = CloudbaseEvent;
|
|
49
|
+
var IErrorEvent = (function (_super) {
|
|
50
|
+
__extends(IErrorEvent, _super);
|
|
51
|
+
function IErrorEvent(error, data) {
|
|
52
|
+
var _this = _super.call(this, 'error', { error: error, data: data }) || this;
|
|
53
|
+
_this.error = error;
|
|
54
|
+
return _this;
|
|
55
|
+
}
|
|
56
|
+
return IErrorEvent;
|
|
57
|
+
}(CloudbaseEvent));
|
|
58
|
+
exports.IErrorEvent = IErrorEvent;
|
|
59
|
+
var CloudbaseEventEmitter = (function () {
|
|
60
|
+
function CloudbaseEventEmitter() {
|
|
61
|
+
this._listeners = {};
|
|
62
|
+
}
|
|
63
|
+
CloudbaseEventEmitter.prototype.on = function (name, listener) {
|
|
64
|
+
_addEventListener(name, listener, this._listeners);
|
|
65
|
+
return this;
|
|
66
|
+
};
|
|
67
|
+
CloudbaseEventEmitter.prototype.off = function (name, listener) {
|
|
68
|
+
_removeEventListener(name, listener, this._listeners);
|
|
69
|
+
return this;
|
|
70
|
+
};
|
|
71
|
+
CloudbaseEventEmitter.prototype.fire = function (event, data) {
|
|
72
|
+
if ((0, util_1.isInstanceOf)(event, IErrorEvent)) {
|
|
73
|
+
console.error(event.error);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
var ev = (0, util_1.isString)(event) ? new CloudbaseEvent(event, data || {}) : event;
|
|
77
|
+
var name = ev.name;
|
|
78
|
+
if (this._listens(name)) {
|
|
79
|
+
ev.target = this;
|
|
80
|
+
var handlers = this._listeners[name] ? __spreadArray([], this._listeners[name], true) : [];
|
|
81
|
+
for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {
|
|
82
|
+
var fn = handlers_1[_i];
|
|
83
|
+
fn.call(this, ev);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return this;
|
|
87
|
+
};
|
|
88
|
+
CloudbaseEventEmitter.prototype._listens = function (name) {
|
|
89
|
+
return this._listeners[name] && this._listeners[name].length > 0;
|
|
90
|
+
};
|
|
91
|
+
return CloudbaseEventEmitter;
|
|
92
|
+
}());
|
|
93
|
+
exports.CloudbaseEventEmitter = CloudbaseEventEmitter;
|
|
94
|
+
var eventEmitter = new CloudbaseEventEmitter();
|
|
95
|
+
function addEventListener(event, callback) {
|
|
96
|
+
eventEmitter.on(event, callback);
|
|
97
|
+
}
|
|
98
|
+
exports.addEventListener = addEventListener;
|
|
99
|
+
function activateEvent(event, data) {
|
|
100
|
+
if (data === void 0) { data = {}; }
|
|
101
|
+
eventEmitter.fire(event, data);
|
|
102
|
+
}
|
|
103
|
+
exports.activateEvent = activateEvent;
|
|
104
|
+
function removeEventListener(event, callback) {
|
|
105
|
+
eventEmitter.off(event, callback);
|
|
106
|
+
}
|
|
107
|
+
exports.removeEventListener = removeEventListener;
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYnMvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUFnRDtBQVdoRCxTQUFTLGlCQUFpQixDQUFDLElBQVksRUFBRSxRQUFrQixFQUFFLFNBQW9CO0lBQy9FLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQVFELFNBQVMsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFFBQWtCLEVBQUUsU0FBb0I7SUFDbEYsSUFBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUcsSUFBSSxDQUFDLEVBQUU7UUFDckIsSUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsQztLQUNGO0FBQ0gsQ0FBQztBQVlEO0lBS0Usd0JBQVksSUFBWSxFQUFFLElBQVM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFURCxJQVNDO0FBVFksd0NBQWM7QUFpQjNCO0lBQWlDLCtCQUFjO0lBRTdDLHFCQUFZLEtBQVksRUFBRSxJQUFVO1FBQXBDLFlBQ0Usa0JBQU0sT0FBTyxFQUFFLEVBQUUsS0FBSyxPQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsQ0FBQyxTQUVoQztRQURDLEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztJQUNyQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBTkQsQ0FBaUMsY0FBYyxHQU05QztBQU5ZLGtDQUFXO0FBV3hCO0lBQUE7UUFPbUIsZUFBVSxHQUFjLEVBQUUsQ0FBQztJQThEOUMsQ0FBQztJQXJEUSxrQ0FBRSxHQUFULFVBQVUsSUFBWSxFQUFFLFFBQWtCO1FBQ3hDLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVFNLG1DQUFHLEdBQVYsVUFBVyxJQUFZLEVBQUUsUUFBa0I7UUFDekMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT00sb0NBQUksR0FBWCxVQUFZLEtBQThCLEVBQUUsSUFBVTtRQUVwRCxJQUFJLElBQUEsbUJBQVksRUFBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBRSxLQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFNLEVBQUUsR0FBbUIsSUFBQSxlQUFRLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLEtBQWUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQXVCLENBQUM7UUFFL0csSUFBQSxJQUFJLEdBQUssRUFBRSxLQUFQLENBQVE7UUFFcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRWpCLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBSyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekUsS0FBaUIsVUFBUSxFQUFSLHFCQUFRLEVBQVIsc0JBQVEsRUFBUixJQUFRLEVBQUU7Z0JBQXRCLElBQU0sRUFBRSxpQkFBQTtnQkFDWCxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNuQjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBUU8sd0NBQVEsR0FBaEIsVUFBaUIsSUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDSCw0QkFBQztBQUFELENBQUMsQUFyRUQsSUFxRUM7QUFyRVksc0RBQXFCO0FBd0VsQyxJQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFFakQsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLFFBQWtCO0lBQ2hFLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxLQUFhLEVBQUUsSUFBYztJQUFkLHFCQUFBLEVBQUEsU0FBYztJQUN6RCxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsUUFBa0I7SUFDbkUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELGtEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTdHJpbmcsIGlzSW5zdGFuY2VPZiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBMaXN0ZW5lcnMsIElDbG91ZGJhc2VFdmVudEVtaXR0ZXIgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2V2ZW50cyc7XG5cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVyIC0g5re75Yqg55uR5ZCsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGV2ZW505ZCN56ewXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICogQHBhcmFtIHtMaXN0ZW5lcnN9IGxpc3RlbmVycyAtIOW3suWtmOWTjeW6lOWHveaVsOmbhuWQiFxuICovXG5mdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbiwgbGlzdGVuZXJzOiBMaXN0ZW5lcnMpIHtcbiAgbGlzdGVuZXJzW25hbWVdID0gbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICBsaXN0ZW5lcnNbbmFtZV0ucHVzaChsaXN0ZW5lcik7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb24gX3JlbW92ZUV2ZW50TGlzdGVuZXIgLSDnp7vpmaTnm5HlkKxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0g5ZON5bqU5Ye95pWwXG4gKiBAcGFyYW0ge0xpc3RlbmVyc30gbGlzdGVuZXJzIC0g5bey5a2Y5ZON5bqU5Ye95pWw6ZuG5ZCIXG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uLCBsaXN0ZW5lcnM6IExpc3RlbmVycykge1xuICBpZiAobGlzdGVuZXJzPy5bbmFtZV0pIHtcbiAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVyc1tuYW1lXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBsaXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cbmludGVyZmFjZSBJRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRhcmdldDogYW55O1xuICBkYXRhOiBhbnk7XG59XG4vKipcbiAqIOiHquWumuS5ieS6i+S7tlxuICogQGNsYXNzIENsb3VkYmFzZUV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIOexu+Wei1xuICogQHBhcmFtIHthbnl9IGRhdGEgLSDmlbDmja5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUV2ZW50IGltcGxlbWVudHMgSUV2ZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhcmdldDogYW55O1xuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YSB8fCBudWxsO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cbn1cbi8qKlxuICog6Ieq5a6a5LmJ6ZSZ6K+v5LqL5Lu2XG4gKiBAY2xhc3MgSUVycm9yRXZlbnRcbiAqIEBleHRlbmRzIENsb3VkYmFzZUV2ZW50XG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIOmUmeivr+S/oeaBr+WvueixoVxuICogQHBhcmFtIHthbnl9IGRhdGEgIC0g5pWw5o2uXG4gKi9cbmV4cG9ydCBjbGFzcyBJRXJyb3JFdmVudCBleHRlbmRzIENsb3VkYmFzZUV2ZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9yOiBFcnJvcjtcbiAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yLCBkYXRhPzogYW55KSB7XG4gICAgc3VwZXIoJ2Vycm9yJywgeyBlcnJvciwgZGF0YSB9KTtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBAY2xhc3MgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZGJhc2VFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJQ2xvdWRiYXNlRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZWFkb25seVxuICAgKiBAcHJvcGVydHkge0xpc3RlbmVyc30gX2xpc3RlbmVycyAtIOWTjeW6lOWHveaVsOmbhuWQiFxuICAgKiBAZGVmYXVsdCBge31gXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IExpc3RlbmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBtZXRob2Qgb24gLSDmt7vliqDnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uKTogdGhpcyB7XG4gICAgX2FkZEV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIHRoaXMuX2xpc3RlbmVycyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG1ldGhvZCBvZmYgLSDnp7vpmaTnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9mZihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IHRoaXMge1xuICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCB0aGlzLl9saXN0ZW5lcnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBtZXRob2QgZmlyZSAtIOinpuWPkeS6i+S7tlxuICAgKiBAcGFyYW0ge3N0cmluZ3xDbG91ZGJhc2VFdmVudH0gZXZlbnQgLSBldmVudFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIGZpcmUoZXZlbnQ6IHN0cmluZyB8IENsb3VkYmFzZUV2ZW50LCBkYXRhPzogYW55KTogdGhpcyB7XG4gICAgLy8g5omT5Y2w6ZSZ6K+v5L+h5oGvXG4gICAgaWYgKGlzSW5zdGFuY2VPZihldmVudCwgSUVycm9yRXZlbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChldmVudCBhcyBJRXJyb3JFdmVudCkuZXJyb3IpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgZXY6IENsb3VkYmFzZUV2ZW50ID0gaXNTdHJpbmcoZXZlbnQpID8gbmV3IENsb3VkYmFzZUV2ZW50KGV2ZW50IGFzIHN0cmluZywgZGF0YSB8fCB7fSkgOiBldmVudCBhcyBDbG91ZGJhc2VFdmVudDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0gZXY7XG5cbiAgICBpZiAodGhpcy5fbGlzdGVucyhuYW1lKSkge1xuICAgICAgZXYudGFyZ2V0ID0gdGhpcztcblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gPyBbLi4udGhpcy5fbGlzdGVuZXJzW25hbWVdXSA6IFtdO1xuICAgICAgZm9yIChjb25zdCBmbiBvZiBoYW5kbGVycykge1xuICAgICAgICBmbi5jYWxsKHRoaXMsIGV2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWV0aG9kIF9saXN0ZW5zIC0g5Yik5pat5piv5ZCm55uR5ZCs5LqGbmFtZeS6i+S7tlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGV2ZW505ZCN56ewXG4gICAqIEByZXR1cm4gYGJvb2xlYW5gXG4gICAqL1xuICBwcml2YXRlIF9saXN0ZW5zKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gJiYgdGhpcy5fbGlzdGVuZXJzW25hbWVdLmxlbmd0aCA+IDA7XG4gIH1cbn1cblxuXG5jb25zdCBldmVudEVtaXR0ZXIgPSBuZXcgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBldmVudEVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2YXRlRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YTogYW55ID0ge30pIHtcbiAgZXZlbnRFbWl0dGVyLmZpcmUoZXZlbnQsIGRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgZXZlbnRFbWl0dGVyLm9mZihldmVudCwgY2FsbGJhY2spO1xufVxuIl19
|