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