@cloudbase/utilities 2.5.7-beta.0 → 2.5.18-beta.0
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/.eslintignore +2 -0
- package/.eslintrc.js +15 -0
- package/dist/{adapters → cjs/adapters}/index.js +1 -1
- package/dist/cjs/adapters/platforms/web.js +213 -0
- package/dist/cjs/constants/common.js +24 -0
- package/dist/cjs/constants/errors.js +12 -0
- package/dist/{constants → cjs/constants}/index.js +1 -1
- package/dist/cjs/helpers/decorators.js +238 -0
- package/dist/{helpers → cjs/helpers}/index.js +1 -1
- package/dist/{index.js → cjs/index.js} +1 -1
- package/dist/cjs/libs/cache.js +259 -0
- package/dist/cjs/libs/events.js +104 -0
- package/dist/cjs/libs/util.js +221 -0
- package/dist/esm/adapters/index.d.ts +13 -0
- package/dist/esm/adapters/index.js +27 -0
- package/dist/esm/adapters/platforms/web.d.ts +15 -0
- package/dist/esm/adapters/platforms/web.js +209 -0
- package/dist/esm/constants/common.d.ts +6 -0
- package/dist/esm/constants/common.js +17 -0
- package/dist/esm/constants/errors.d.ts +8 -0
- package/dist/esm/constants/errors.js +9 -0
- package/dist/esm/constants/index.d.ts +3 -0
- package/dist/esm/constants/index.js +4 -0
- package/dist/esm/helpers/decorators.d.ts +11 -0
- package/dist/esm/helpers/decorators.js +234 -0
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +2 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/libs/cache.d.ts +17 -0
- package/dist/esm/libs/cache.js +256 -0
- package/dist/esm/libs/events.d.ts +27 -0
- package/dist/esm/libs/events.js +98 -0
- package/dist/esm/libs/util.d.ts +35 -0
- package/dist/esm/libs/util.js +194 -0
- package/package.json +6 -16
- package/src/adapters/index.ts +28 -0
- package/src/adapters/platforms/web.ts +182 -0
- package/src/constants/common.ts +21 -0
- package/src/constants/errors.ts +8 -0
- package/src/constants/index.ts +4 -0
- package/src/global.d.ts +3 -0
- package/src/helpers/decorators.ts +228 -0
- package/src/helpers/index.ts +1 -0
- package/src/index.ts +22 -0
- package/src/libs/cache.ts +192 -0
- package/src/libs/events.ts +154 -0
- package/src/libs/util.ts +216 -0
- package/tsconfig.esm.json +16 -0
- package/tsconfig.json +21 -0
- package/dist/adapters/platforms/web.js +0 -213
- package/dist/constants/common.js +0 -24
- package/dist/constants/errors.js +0 -12
- package/dist/helpers/decorators.js +0 -238
- package/dist/libs/cache.js +0 -259
- package/dist/libs/events.js +0 -104
- package/dist/libs/util.js +0 -221
- /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/{constants → cjs/constants}/index.d.ts +0 -0
- /package/dist/{helpers → cjs/helpers}/decorators.d.ts +0 -0
- /package/dist/{helpers → cjs/helpers}/index.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/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
|
@@ -0,0 +1,259 @@
|
|
|
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
|
+
default:
|
|
91
|
+
if (!adapter.localStorage) {
|
|
92
|
+
util_1.printWarn(constants_1.ERRORS.INVALID_PARAMS, 'localStorage is not supported on current platform');
|
|
93
|
+
return new TcbCacheObject(adapter.root);
|
|
94
|
+
}
|
|
95
|
+
return adapter.localStorage;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
var CloudbaseCache = (function () {
|
|
99
|
+
function CloudbaseCache(config) {
|
|
100
|
+
this.keys = {};
|
|
101
|
+
var persistence = config.persistence, _a = config.platformInfo, platformInfo = _a === void 0 ? {} : _a, _b = config.keys, keys = _b === void 0 ? {} : _b;
|
|
102
|
+
this.platformInfo = platformInfo;
|
|
103
|
+
if (!this.storage) {
|
|
104
|
+
this.persistenceTag = this.platformInfo.adapter.primaryStorage || persistence;
|
|
105
|
+
this.storage = createStorage(this.persistenceTag, this.platformInfo.adapter);
|
|
106
|
+
this.keys = keys;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
Object.defineProperty(CloudbaseCache.prototype, "mode", {
|
|
110
|
+
get: function () {
|
|
111
|
+
return this.storage.mode || 'sync';
|
|
112
|
+
},
|
|
113
|
+
enumerable: false,
|
|
114
|
+
configurable: true
|
|
115
|
+
});
|
|
116
|
+
Object.defineProperty(CloudbaseCache.prototype, "persistence", {
|
|
117
|
+
get: function () {
|
|
118
|
+
return this.persistenceTag;
|
|
119
|
+
},
|
|
120
|
+
enumerable: false,
|
|
121
|
+
configurable: true
|
|
122
|
+
});
|
|
123
|
+
CloudbaseCache.prototype.setStore = function (key, value, version) {
|
|
124
|
+
if (this.mode === 'async') {
|
|
125
|
+
util_1.printWarn(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use setStoreAsync insteed');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!this.storage) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
var val = {
|
|
133
|
+
version: version || 'localCachev1',
|
|
134
|
+
content: value,
|
|
135
|
+
};
|
|
136
|
+
this.storage.setItem(key, JSON.stringify(val));
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
throw new Error(JSON.stringify({
|
|
140
|
+
code: constants_1.ERRORS.OPERATION_FAIL,
|
|
141
|
+
msg: "[" + constants_1.getSdkName() + "][" + constants_1.ERRORS.OPERATION_FAIL + "]setStore failed",
|
|
142
|
+
info: e,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
};
|
|
147
|
+
CloudbaseCache.prototype.setStoreAsync = function (key, value, version) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
149
|
+
var val, e_1;
|
|
150
|
+
return __generator(this, function (_a) {
|
|
151
|
+
switch (_a.label) {
|
|
152
|
+
case 0:
|
|
153
|
+
if (!this.storage) {
|
|
154
|
+
return [2];
|
|
155
|
+
}
|
|
156
|
+
_a.label = 1;
|
|
157
|
+
case 1:
|
|
158
|
+
_a.trys.push([1, 3, , 4]);
|
|
159
|
+
val = {
|
|
160
|
+
version: version || 'localCachev1',
|
|
161
|
+
content: value,
|
|
162
|
+
};
|
|
163
|
+
return [4, this.storage.setItem(key, JSON.stringify(val))];
|
|
164
|
+
case 2:
|
|
165
|
+
_a.sent();
|
|
166
|
+
return [3, 4];
|
|
167
|
+
case 3:
|
|
168
|
+
e_1 = _a.sent();
|
|
169
|
+
return [2];
|
|
170
|
+
case 4: return [2];
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
CloudbaseCache.prototype.getStore = function (key, version) {
|
|
176
|
+
var _a;
|
|
177
|
+
if (this.mode === 'async') {
|
|
178
|
+
util_1.printWarn(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use getStoreAsync insteed');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
|
|
183
|
+
return process.env.tcb_token;
|
|
184
|
+
}
|
|
185
|
+
if (!this.storage) {
|
|
186
|
+
return '';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
return '';
|
|
191
|
+
}
|
|
192
|
+
version = version || 'localCachev1';
|
|
193
|
+
var content = this.storage.getItem(key);
|
|
194
|
+
if (!content) {
|
|
195
|
+
return '';
|
|
196
|
+
}
|
|
197
|
+
if (content.indexOf(version) >= 0) {
|
|
198
|
+
var d = JSON.parse(content);
|
|
199
|
+
return d.content;
|
|
200
|
+
}
|
|
201
|
+
return '';
|
|
202
|
+
};
|
|
203
|
+
CloudbaseCache.prototype.getStoreAsync = function (key, version) {
|
|
204
|
+
var _a;
|
|
205
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
206
|
+
var content, d;
|
|
207
|
+
return __generator(this, function (_b) {
|
|
208
|
+
switch (_b.label) {
|
|
209
|
+
case 0:
|
|
210
|
+
try {
|
|
211
|
+
if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
|
|
212
|
+
return [2, process.env.tcb_token];
|
|
213
|
+
}
|
|
214
|
+
if (!this.storage) {
|
|
215
|
+
return [2, ''];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (e) {
|
|
219
|
+
return [2, ''];
|
|
220
|
+
}
|
|
221
|
+
version = version || 'localCachev1';
|
|
222
|
+
return [4, this.storage.getItem(key)];
|
|
223
|
+
case 1:
|
|
224
|
+
content = _b.sent();
|
|
225
|
+
if (!content) {
|
|
226
|
+
return [2, ''];
|
|
227
|
+
}
|
|
228
|
+
if (content.indexOf(version) >= 0) {
|
|
229
|
+
d = JSON.parse(content);
|
|
230
|
+
return [2, d.content];
|
|
231
|
+
}
|
|
232
|
+
return [2, ''];
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
CloudbaseCache.prototype.removeStore = function (key) {
|
|
238
|
+
if (this.mode === 'async') {
|
|
239
|
+
util_1.printWarn(constants_1.ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use removeStoreAsync insteed');
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
this.storage.removeItem(key);
|
|
243
|
+
};
|
|
244
|
+
CloudbaseCache.prototype.removeStoreAsync = function (key) {
|
|
245
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
246
|
+
return __generator(this, function (_a) {
|
|
247
|
+
switch (_a.label) {
|
|
248
|
+
case 0: return [4, this.storage.removeItem(key)];
|
|
249
|
+
case 1:
|
|
250
|
+
_a.sent();
|
|
251
|
+
return [2];
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
return CloudbaseCache;
|
|
257
|
+
}());
|
|
258
|
+
exports.CloudbaseCache = CloudbaseCache;
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlicy9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0VBQXFHO0FBR3JHLCtCQUFrQztBQUNsQywwQ0FBaUQ7QUFLakQ7SUFBNkIsa0NBQWU7SUFFMUMsd0JBQVksSUFBUztRQUFyQixZQUNFLGlCQUFPLFNBS1I7UUFKQyxLQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtTQUN6Qjs7SUFDSCxDQUFDO0lBQ00sZ0NBQU8sR0FBZCxVQUFlLEdBQVcsRUFBRSxLQUFVO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUN2QyxDQUFDO0lBQ00sZ0NBQU8sR0FBZCxVQUFlLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBQ00sbUNBQVUsR0FBakIsVUFBa0IsR0FBVztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFDTSw4QkFBSyxHQUFaO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQTtJQUNqQyxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBckJELENBQTZCLG1DQUFlLEdBcUIzQztBQUlELFNBQVMsYUFBYSxDQUFDLFdBQXdCLEVBQUUsT0FBNEI7SUFDM0UsUUFBUSxXQUFXLEVBQUU7UUFDbkIsS0FBSyxPQUFPO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7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Ozs0QkFDdkMsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQWxDLFNBQWtDLENBQUE7Ozs7O0tBQ25DO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBeElELElBd0lDO0FBeElZLHdDQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmFnZUludGVyZmFjZSwgQWJzdHJhY3RTdG9yYWdlLCBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IElDbG91ZGJhc2VDYWNoZSwgSUNhY2hlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jYWNoZSdcbmltcG9ydCB7IEtWLCBQZXJzaXN0ZW5jZSwgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBwcmludFdhcm4gfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBFUlJPUlMsIGdldFNka05hbWUgfSBmcm9tICcuLi9jb25zdGFudHMnXG5cbi8qKlxuICogcGVyc2l0ZW5jZT1ub25l5pe255m75b2V5oCB5L+d5a2Y5Zyo5YaF5a2Y5LitXG4gKi9cbmNsYXNzIFRjYkNhY2hlT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RTdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHJvb3Q6IGFueSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgaWYgKCFyb290LnRjYkNhY2hlT2JqZWN0KSB7XG4gICAgICByb290LnRjYkNhY2hlT2JqZWN0ID0ge31cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnJvb3QudGNiQ2FjaGVPYmplY3Rba2V5XSA9IHZhbHVlXG4gIH1cbiAgcHVibGljIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290LnRjYkNhY2hlT2JqZWN0W2tleV1cbiAgfVxuICBwdWJsaWMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLnJvb3QudGNiQ2FjaGVPYmplY3Rba2V5XVxuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBkZWxldGUgdGhpcy5yb290LnRjYkNhY2hlT2JqZWN0XG4gIH1cbn1cbi8qKlxuICog5bel5Y6C5Ye95pWwXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UocGVyc2lzdGVuY2U6IFBlcnNpc3RlbmNlLCBhZGFwdGVyOiBTREtBZGFwdGVySW50ZXJmYWNlKTogU3RvcmFnZUludGVyZmFjZSB7XG4gIHN3aXRjaCAocGVyc2lzdGVuY2UpIHtcbiAgICBjYXNlICdsb2NhbCc6XG4gICAgICBpZiAoIWFkYXB0ZXIubG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdsb2NhbFN0b3JhZ2UgaXMgbm90IHN1cHBvcnRlZCBvbiBjdXJyZW50IHBsYXRmb3JtJylcbiAgICAgICAgLy8g5LiN5pSv5oyBbG9jYWxzdG9yYWdl55qE5bmz5Y+w6ZmN57qn5Li6bm9uZVxuICAgICAgICByZXR1cm4gbmV3IFRjYkNhY2hlT2JqZWN0KGFkYXB0ZXIucm9vdClcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZGFwdGVyLmxvY2FsU3RvcmFnZVxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIG5ldyBUY2JDYWNoZU9iamVjdChhZGFwdGVyLnJvb3QpXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICghYWRhcHRlci5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2xvY2FsU3RvcmFnZSBpcyBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgcGxhdGZvcm0nKVxuICAgICAgICAvLyDkuI3mlK/mjIFsb2NhbHN0b3JhZ2XnmoTlubPlj7DpmY3nuqfkuLpub25lXG4gICAgICAgIHJldHVybiBuZXcgVGNiQ2FjaGVPYmplY3QoYWRhcHRlci5yb290KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFkYXB0ZXIubG9jYWxTdG9yYWdlXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUNhY2hlIGltcGxlbWVudHMgSUNsb3VkYmFzZUNhY2hlIHtcbiAgcHVibGljIGtleXM6IEtWPHN0cmluZz4gPSB7fTtcblxuICBwcml2YXRlIHBlcnNpc3RlbmNlVGFnOiBQZXJzaXN0ZW5jZTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUluZm86IElDbG91ZGJhc2VQbGF0Zm9ybUluZm87XG4gIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZUludGVyZmFjZTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElDYWNoZUNvbmZpZykge1xuICAgIGNvbnN0IHsgcGVyc2lzdGVuY2UsIHBsYXRmb3JtSW5mbyA9IHt9LCBrZXlzID0ge30gfSA9IGNvbmZpZ1xuICAgIHRoaXMucGxhdGZvcm1JbmZvID0gcGxhdGZvcm1JbmZvXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VUYWcgPSB0aGlzLnBsYXRmb3JtSW5mby5hZGFwdGVyLnByaW1hcnlTdG9yYWdlIHx8IHBlcnNpc3RlbmNlXG4gICAgICB0aGlzLnN0b3JhZ2UgPSBjcmVhdGVTdG9yYWdlKHRoaXMucGVyc2lzdGVuY2VUYWcsIHRoaXMucGxhdGZvcm1JbmZvLmFkYXB0ZXIpXG4gICAgICB0aGlzLmtleXMgPSBrZXlzXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAZ2V0dGVyIHN0b3JhZ2XmqKHlvI8t5ZCM5q2lL+W8guatpVxuICAgKi9cbiAgZ2V0IG1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5tb2RlIHx8ICdzeW5jJ1xuICB9XG4gIGdldCBwZXJzaXN0ZW5jZSgpOiBQZXJzaXN0ZW5jZSB7XG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2VUYWdcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdG9yZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgdmVyc2lvbj86IGFueSkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBzZXRTdG9yZUFzeW5jIGluc3RlZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghdGhpcy5zdG9yYWdlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsID0ge1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICdsb2NhbENhY2hldjEnLFxuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb2RlOiBFUlJPUlMuT1BFUkFUSU9OX0ZBSUwsXG4gICAgICAgIG1zZzogYFske2dldFNka05hbWUoKX1dWyR7RVJST1JTLk9QRVJBVElPTl9GQUlMfV1zZXRTdG9yZSBmYWlsZWRgLFxuICAgICAgICBpbmZvOiBlLFxuICAgICAgfSkpXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cbiAgcHVibGljIGFzeW5jIHNldFN0b3JlQXN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHZlcnNpb24/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc3RvcmFnZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbCA9IHtcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiB8fCAnbG9jYWxDYWNoZXYxJyxcbiAgICAgICAgY29udGVudDogdmFsdWUsXG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbCkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cbiAgcHVibGljIGdldFN0b3JlKGtleTogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIGdldFN0b3JlQXN5bmMgaW5zdGVlZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIOa1i+ivleeUqOS+i+S9v+eUqFxuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8udGNiX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi50Y2JfdG9rZW5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgJ2xvY2FsQ2FjaGV2MSdcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAoY29udGVudC5pbmRleE9mKHZlcnNpb24pID49IDApIHtcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgICByZXR1cm4gZC5jb250ZW50XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG4gIHB1YmxpYyBhc3luYyBnZXRTdG9yZUFzeW5jKGtleTogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOa1i+ivleeUqOS+i+S9v+eUqFxuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8udGNiX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi50Y2JfdG9rZW5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgJ2xvY2FsQ2FjaGV2MSdcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAoY29udGVudC5pbmRleE9mKHZlcnNpb24pID49IDApIHtcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgICByZXR1cm4gZC5jb250ZW50XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG4gIHB1YmxpYyByZW1vdmVTdG9yZShrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSByZW1vdmVTdG9yZUFzeW5jIGluc3RlZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlU3RvcmVBc3luYyhrZXk6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
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 customeAddEventListener(name, listener, listeners) {
|
|
26
|
+
listeners[name] = listeners[name] || [];
|
|
27
|
+
listeners[name].push(listener);
|
|
28
|
+
}
|
|
29
|
+
function customRemoveEventListener(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
|
+
customeAddEventListener(name, listener, this.listeners);
|
|
61
|
+
return this;
|
|
62
|
+
};
|
|
63
|
+
CloudbaseEventEmitter.prototype.off = function (name, listener) {
|
|
64
|
+
customRemoveEventListener(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnMvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStDO0FBVy9DLFNBQVMsdUJBQXVCLENBQUMsSUFBWSxFQUFFLFFBQWtCLEVBQUUsU0FBb0I7SUFDckYsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBUUQsU0FBUyx5QkFBeUIsQ0FBQyxJQUFZLEVBQUUsUUFBa0IsRUFBRSxTQUFvQjtJQUN2RixJQUFJLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRyxJQUFJLEdBQUc7UUFDckIsSUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMvQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUNqQztLQUNGO0FBQ0gsQ0FBQztBQVlEO0lBS0Usd0JBQVksSUFBWSxFQUFFLElBQVM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFURCxJQVNDO0FBVFksd0NBQWM7QUFpQjNCO0lBQWlDLCtCQUFjO0lBRTdDLHFCQUFZLEtBQVksRUFBRSxJQUFVO1FBQXBDLFlBQ0Usa0JBQU0sT0FBTyxFQUFFLEVBQUUsS0FBSyxPQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsQ0FBQyxTQUVoQztRQURDLEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBOztJQUNwQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBTkQsQ0FBaUMsY0FBYyxHQU05QztBQU5ZLGtDQUFXO0FBV3hCO0lBQUE7UUFPbUIsY0FBUyxHQUFjLEVBQUUsQ0FBQztJQThEN0MsQ0FBQztJQXJEUSxrQ0FBRSxHQUFULFVBQVUsSUFBWSxFQUFFLFFBQWtCO1FBQ3hDLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQVFNLG1DQUFHLEdBQVYsVUFBVyxJQUFZLEVBQUUsUUFBa0I7UUFDekMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBT00sb0NBQUksR0FBWCxVQUFZLEtBQThCLEVBQUUsSUFBVTtRQUVwRCxJQUFJLG1CQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUUsS0FBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMzQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBTSxFQUFFLEdBQW1CLGVBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsS0FBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBdUIsQ0FBQTtRQUU5RyxJQUFBLElBQUksR0FBSyxFQUFFLEtBQVAsQ0FBTztRQUVuQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7WUFFaEIsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0RSxLQUFpQixVQUFRLEVBQVIscUJBQVEsRUFBUixzQkFBUSxFQUFSLElBQVEsRUFBRTtnQkFBdEIsSUFBTSxFQUFFLGlCQUFBO2dCQUNYLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2FBQ2xCO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFRTyx1Q0FBTyxHQUFmLFVBQWdCLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLEFBckVELElBcUVDO0FBckVZLHNEQUFxQjtBQXdFbEMsSUFBTSxZQUFZLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFBO0FBRWhELFNBQWdCLGdCQUFnQixDQUFDLEtBQWEsRUFBRSxRQUFrQjtJQUNoRSxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRkQsNENBRUM7QUFFRCxTQUFnQixhQUFhLENBQUMsS0FBYSxFQUFFLElBQWM7SUFBZCxxQkFBQSxFQUFBLFNBQWM7SUFDekQsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDaEMsQ0FBQztBQUZELHNDQUVDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYSxFQUFFLFFBQWtCO0lBQ25FLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFGRCxrREFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBpc0luc3RhbmNlT2YgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBMaXN0ZW5lcnMsIElDbG91ZGJhc2VFdmVudEVtaXR0ZXIgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2V2ZW50cydcblxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXIgLSDmt7vliqDnm5HlkKxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0g5ZON5bqU5Ye95pWwXG4gKiBAcGFyYW0ge0xpc3RlbmVyc30gbGlzdGVuZXJzIC0g5bey5a2Y5ZON5bqU5Ye95pWw6ZuG5ZCIXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbWVBZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uLCBsaXN0ZW5lcnM6IExpc3RlbmVycykge1xuICBsaXN0ZW5lcnNbbmFtZV0gPSBsaXN0ZW5lcnNbbmFtZV0gfHwgW11cbiAgbGlzdGVuZXJzW25hbWVdLnB1c2gobGlzdGVuZXIpXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb24gX3JlbW92ZUV2ZW50TGlzdGVuZXIgLSDnp7vpmaTnm5HlkKxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0g5ZON5bqU5Ye95pWwXG4gKiBAcGFyYW0ge0xpc3RlbmVyc30gbGlzdGVuZXJzIC0g5bey5a2Y5ZON5bqU5Ye95pWw6ZuG5ZCIXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbVJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24sIGxpc3RlbmVyczogTGlzdGVuZXJzKSB7XG4gIGlmIChsaXN0ZW5lcnM/LltuYW1lXSkge1xuICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzW25hbWVdLmluZGV4T2YobGlzdGVuZXIpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgbGlzdGVuZXJzW25hbWVdLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cbmludGVyZmFjZSBJRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRhcmdldDogYW55O1xuICBkYXRhOiBhbnk7XG59XG4vKipcbiAqIOiHquWumuS5ieS6i+S7tlxuICogQGNsYXNzIENsb3VkYmFzZUV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIOexu+Wei1xuICogQHBhcmFtIHthbnl9IGRhdGEgLSDmlbDmja5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUV2ZW50IGltcGxlbWVudHMgSUV2ZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhcmdldDogYW55O1xuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YSB8fCBudWxsXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICB9XG59XG4vKipcbiAqIOiHquWumuS5iemUmeivr+S6i+S7tlxuICogQGNsYXNzIElFcnJvckV2ZW50XG4gKiBAZXh0ZW5kcyBDbG91ZGJhc2VFdmVudFxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSDplJnor6/kv6Hmga/lr7nosaFcbiAqIEBwYXJhbSB7YW55fSBkYXRhICAtIOaVsOaNrlxuICovXG5leHBvcnQgY2xhc3MgSUVycm9yRXZlbnQgZXh0ZW5kcyBDbG91ZGJhc2VFdmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcjogRXJyb3I7XG4gIGNvbnN0cnVjdG9yKGVycm9yOiBFcnJvciwgZGF0YT86IGFueSkge1xuICAgIHN1cGVyKCdlcnJvcicsIHsgZXJyb3IsIGRhdGEgfSlcbiAgICB0aGlzLmVycm9yID0gZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIEBjbGFzcyBDbG91ZGJhc2VFdmVudEVtaXR0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElDbG91ZGJhc2VFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJlYWRvbmx5XG4gICAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJzfSBsaXN0ZW5lcnMgLSDlk43lupTlh73mlbDpm4blkIhcbiAgICogQGRlZmF1bHQgYHt9YFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IExpc3RlbmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBtZXRob2Qgb24gLSDmt7vliqDnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uKTogdGhpcyB7XG4gICAgY3VzdG9tZUFkZEV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIHRoaXMubGlzdGVuZXJzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG1ldGhvZCBvZmYgLSDnp7vpmaTnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9mZihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IHRoaXMge1xuICAgIGN1c3RvbVJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIHRoaXMubGlzdGVuZXJzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG1ldGhvZCBmaXJlIC0g6Kem5Y+R5LqL5Lu2XG4gICAqIEBwYXJhbSB7c3RyaW5nfENsb3VkYmFzZUV2ZW50fSBldmVudCAtIGV2ZW50XG4gICAqIEByZXR1cm4gYHRoaXNgXG4gICAqL1xuICBwdWJsaWMgZmlyZShldmVudDogc3RyaW5nIHwgQ2xvdWRiYXNlRXZlbnQsIGRhdGE/OiBhbnkpOiB0aGlzIHtcbiAgICAvLyDmiZPljbDplJnor6/kv6Hmga9cbiAgICBpZiAoaXNJbnN0YW5jZU9mKGV2ZW50LCBJRXJyb3JFdmVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKGV2ZW50IGFzIElFcnJvckV2ZW50KS5lcnJvcilcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgZXY6IENsb3VkYmFzZUV2ZW50ID0gaXNTdHJpbmcoZXZlbnQpID8gbmV3IENsb3VkYmFzZUV2ZW50KGV2ZW50IGFzIHN0cmluZywgZGF0YSB8fCB7fSkgOiBldmVudCBhcyBDbG91ZGJhc2VFdmVudFxuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBldlxuXG4gICAgaWYgKHRoaXMubGlzdGVucyhuYW1lKSkge1xuICAgICAgZXYudGFyZ2V0ID0gdGhpc1xuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVdID8gWy4uLnRoaXMubGlzdGVuZXJzW25hbWVdXSA6IFtdXG4gICAgICBmb3IgKGNvbnN0IGZuIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgIGZuLmNhbGwodGhpcywgZXYpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWV0aG9kIGxpc3RlbnMgLSDliKTmlq3mmK/lkKbnm5HlkKzkuoZuYW1l5LqL5Lu2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAgICogQHJldHVybiBgYm9vbGVhbmBcbiAgICovXG4gIHByaXZhdGUgbGlzdGVucyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnNbbmFtZV0gJiYgdGhpcy5saXN0ZW5lcnNbbmFtZV0ubGVuZ3RoID4gMFxuICB9XG59XG5cblxuY29uc3QgZXZlbnRFbWl0dGVyID0gbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBldmVudEVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aXZhdGVFdmVudChldmVudDogc3RyaW5nLCBkYXRhOiBhbnkgPSB7fSkge1xuICBldmVudEVtaXR0ZXIuZmlyZShldmVudCwgZGF0YSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gIGV2ZW50RW1pdHRlci5vZmYoZXZlbnQsIGNhbGxiYWNrKVxufVxuIl19
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.transformPhone = exports.sleep = exports.printGroupLog = exports.throwError = exports.printInfo = exports.printError = exports.printWarn = exports.execCallback = exports.createPromiseCallback = exports.removeParam = exports.getHash = exports.getQuery = exports.toQueryString = exports.createSign = exports.formatUrl = exports.genSeqId = exports.isFormData = exports.isInstanceOf = exports.isNull = exports.isPalinObject = exports.isUndefined = exports.isString = exports.isArray = void 0;
|
|
7
|
+
var hmac_sha256_1 = __importDefault(require("crypto-js/hmac-sha256"));
|
|
8
|
+
var enc_base64_1 = __importDefault(require("crypto-js/enc-base64"));
|
|
9
|
+
var enc_utf8_1 = __importDefault(require("crypto-js/enc-utf8"));
|
|
10
|
+
var constants_1 = require("../constants");
|
|
11
|
+
function isArray(val) {
|
|
12
|
+
return Object.prototype.toString.call(val) === '[object Array]';
|
|
13
|
+
}
|
|
14
|
+
exports.isArray = isArray;
|
|
15
|
+
function isString(val) {
|
|
16
|
+
return typeof val === 'string';
|
|
17
|
+
}
|
|
18
|
+
exports.isString = isString;
|
|
19
|
+
function isUndefined(val) {
|
|
20
|
+
return typeof val === 'undefined';
|
|
21
|
+
}
|
|
22
|
+
exports.isUndefined = isUndefined;
|
|
23
|
+
function isPalinObject(val) {
|
|
24
|
+
return Object.prototype.toString.call(val) === '[object Object]';
|
|
25
|
+
}
|
|
26
|
+
exports.isPalinObject = isPalinObject;
|
|
27
|
+
function isNull(val) {
|
|
28
|
+
return Object.prototype.toString.call(val) === '[object Null]';
|
|
29
|
+
}
|
|
30
|
+
exports.isNull = isNull;
|
|
31
|
+
function isInstanceOf(instance, construct) {
|
|
32
|
+
return instance instanceof construct;
|
|
33
|
+
}
|
|
34
|
+
exports.isInstanceOf = isInstanceOf;
|
|
35
|
+
function isFormData(val) {
|
|
36
|
+
return Object.prototype.toString.call(val) === '[object FormData]';
|
|
37
|
+
}
|
|
38
|
+
exports.isFormData = isFormData;
|
|
39
|
+
function genSeqId() {
|
|
40
|
+
return Math.random().toString(16)
|
|
41
|
+
.slice(2);
|
|
42
|
+
}
|
|
43
|
+
exports.genSeqId = genSeqId;
|
|
44
|
+
function formatUrl(PROTOCOL, url, query) {
|
|
45
|
+
if (query === void 0) { query = {}; }
|
|
46
|
+
var urlHasQuery = /\?/.test(url);
|
|
47
|
+
var queryString = '';
|
|
48
|
+
Object.keys(query).forEach(function (key) {
|
|
49
|
+
if (queryString === '') {
|
|
50
|
+
!urlHasQuery && (url += '?');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
queryString += '&';
|
|
54
|
+
}
|
|
55
|
+
queryString += key + "=" + encodeURIComponent(query[key]);
|
|
56
|
+
});
|
|
57
|
+
url += queryString;
|
|
58
|
+
if (/^http(s)?:\/\//.test(url)) {
|
|
59
|
+
return url;
|
|
60
|
+
}
|
|
61
|
+
return "" + PROTOCOL + url;
|
|
62
|
+
}
|
|
63
|
+
exports.formatUrl = formatUrl;
|
|
64
|
+
function base64url(source) {
|
|
65
|
+
var encodedSource = enc_base64_1.default.stringify(source);
|
|
66
|
+
encodedSource = encodedSource.replace(/=+$/, '');
|
|
67
|
+
encodedSource = encodedSource.replace(/\+/g, '-');
|
|
68
|
+
encodedSource = encodedSource.replace(/\//g, '_');
|
|
69
|
+
return encodedSource;
|
|
70
|
+
}
|
|
71
|
+
function createSign(payload, secret) {
|
|
72
|
+
var header = {
|
|
73
|
+
alg: 'HS256',
|
|
74
|
+
typ: 'JWT',
|
|
75
|
+
};
|
|
76
|
+
var headerStr = base64url(enc_utf8_1.default.parse(JSON.stringify(header)));
|
|
77
|
+
var payloadStr = base64url(enc_utf8_1.default.parse(JSON.stringify(payload)));
|
|
78
|
+
var token = headerStr + "." + payloadStr;
|
|
79
|
+
var sign = base64url(hmac_sha256_1.default(token, secret));
|
|
80
|
+
return token + "." + sign;
|
|
81
|
+
}
|
|
82
|
+
exports.createSign = createSign;
|
|
83
|
+
function toQueryString(query) {
|
|
84
|
+
if (query === void 0) { query = {}; }
|
|
85
|
+
var queryString = [];
|
|
86
|
+
Object.keys(query).forEach(function (key) {
|
|
87
|
+
queryString.push(key + "=" + encodeURIComponent(query[key]));
|
|
88
|
+
});
|
|
89
|
+
return queryString.join('&');
|
|
90
|
+
}
|
|
91
|
+
exports.toQueryString = toQueryString;
|
|
92
|
+
function getQuery(name, url) {
|
|
93
|
+
if (typeof window === 'undefined') {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
var u = url || window.location.search;
|
|
97
|
+
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
|
98
|
+
var r = u.substr(u.indexOf('?') + 1).match(reg);
|
|
99
|
+
return (r !== null && r !== undefined) ? r[2] : '';
|
|
100
|
+
}
|
|
101
|
+
exports.getQuery = getQuery;
|
|
102
|
+
exports.getHash = function (name) {
|
|
103
|
+
if (typeof window === 'undefined') {
|
|
104
|
+
return '';
|
|
105
|
+
}
|
|
106
|
+
var matches = window.location.hash.match(new RegExp("[#?&/]" + name + "=([^&#]*)"));
|
|
107
|
+
return matches ? matches[1] : '';
|
|
108
|
+
};
|
|
109
|
+
function removeParam(key, sourceURL) {
|
|
110
|
+
var rtn = sourceURL.split('?')[0];
|
|
111
|
+
var param;
|
|
112
|
+
var params = [];
|
|
113
|
+
var queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : '';
|
|
114
|
+
if (queryString !== '') {
|
|
115
|
+
params = queryString.split('&');
|
|
116
|
+
for (var i = params.length - 1; i >= 0; i -= 1) {
|
|
117
|
+
param = params[i].split('=')[0];
|
|
118
|
+
if (param === key) {
|
|
119
|
+
params.splice(i, 1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
rtn = rtn + "?" + params.join('&');
|
|
123
|
+
}
|
|
124
|
+
return rtn;
|
|
125
|
+
}
|
|
126
|
+
exports.removeParam = removeParam;
|
|
127
|
+
function createPromiseCallback() {
|
|
128
|
+
var cb;
|
|
129
|
+
if (!Promise) {
|
|
130
|
+
cb = function () { };
|
|
131
|
+
cb.promise = {};
|
|
132
|
+
var throwPromiseNotDefined = function () {
|
|
133
|
+
throw new Error('Your Node runtime does support ES6 Promises. '
|
|
134
|
+
+ 'Set "global.Promise" to your preferred implementation of promises.');
|
|
135
|
+
};
|
|
136
|
+
Object.defineProperty(cb.promise, 'then', { get: throwPromiseNotDefined });
|
|
137
|
+
Object.defineProperty(cb.promise, 'catch', { get: throwPromiseNotDefined });
|
|
138
|
+
return cb;
|
|
139
|
+
}
|
|
140
|
+
var promise = new Promise(function (resolve, reject) {
|
|
141
|
+
cb = function (err, data) {
|
|
142
|
+
if (err)
|
|
143
|
+
return reject(err);
|
|
144
|
+
return resolve(data);
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
cb.promise = promise;
|
|
148
|
+
return cb;
|
|
149
|
+
}
|
|
150
|
+
exports.createPromiseCallback = createPromiseCallback;
|
|
151
|
+
function execCallback(fn, err, data) {
|
|
152
|
+
if (data === void 0) { data = null; }
|
|
153
|
+
if (fn && typeof fn === 'function') {
|
|
154
|
+
return fn(err, data);
|
|
155
|
+
}
|
|
156
|
+
if (err) {
|
|
157
|
+
throw err;
|
|
158
|
+
}
|
|
159
|
+
return data;
|
|
160
|
+
}
|
|
161
|
+
exports.execCallback = execCallback;
|
|
162
|
+
function printWarn(error, msg) {
|
|
163
|
+
console.warn("[" + constants_1.getSdkName() + "][" + error + "]:" + msg);
|
|
164
|
+
}
|
|
165
|
+
exports.printWarn = printWarn;
|
|
166
|
+
function printError(error, msg) {
|
|
167
|
+
console.error({
|
|
168
|
+
code: error,
|
|
169
|
+
msg: "[" + constants_1.getSdkName() + "][" + error + "]:" + msg,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
exports.printError = printError;
|
|
173
|
+
function printInfo(error, msg) {
|
|
174
|
+
console.log("[" + constants_1.getSdkName() + "][" + error + "]:" + msg);
|
|
175
|
+
}
|
|
176
|
+
exports.printInfo = printInfo;
|
|
177
|
+
function throwError(error, msg) {
|
|
178
|
+
throw new Error(JSON.stringify({
|
|
179
|
+
code: error,
|
|
180
|
+
msg: "[" + constants_1.getSdkName() + "][" + error + "]:" + msg,
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
exports.throwError = throwError;
|
|
184
|
+
function printGroupLog(options) {
|
|
185
|
+
var title = options.title, _a = options.subtitle, subtitle = _a === void 0 ? '' : _a, _b = options.content, content = _b === void 0 ? [] : _b, _c = options.printTrace, printTrace = _c === void 0 ? false : _c, _d = options.collapsed, collapsed = _d === void 0 ? false : _d;
|
|
186
|
+
if (collapsed) {
|
|
187
|
+
console.groupCollapsed(title, subtitle);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
console.group(title, subtitle);
|
|
191
|
+
}
|
|
192
|
+
for (var _i = 0, content_1 = content; _i < content_1.length; _i++) {
|
|
193
|
+
var tip = content_1[_i];
|
|
194
|
+
var type = tip.type, body = tip.body;
|
|
195
|
+
switch (type) {
|
|
196
|
+
case 'info':
|
|
197
|
+
console.log(body);
|
|
198
|
+
break;
|
|
199
|
+
case 'warn':
|
|
200
|
+
console.warn(body);
|
|
201
|
+
break;
|
|
202
|
+
case 'error':
|
|
203
|
+
console.error(body);
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (printTrace) {
|
|
208
|
+
console.trace('stack trace:');
|
|
209
|
+
}
|
|
210
|
+
console.groupEnd();
|
|
211
|
+
}
|
|
212
|
+
exports.printGroupLog = printGroupLog;
|
|
213
|
+
exports.sleep = function (ms) {
|
|
214
|
+
if (ms === void 0) { ms = 0; }
|
|
215
|
+
return new Promise(function (r) { return setTimeout(r, ms); });
|
|
216
|
+
};
|
|
217
|
+
function transformPhone(phoneNumber) {
|
|
218
|
+
return "+86" + phoneNumber;
|
|
219
|
+
}
|
|
220
|
+
exports.transformPhone = transformPhone;
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0VBQXlDO0FBQ3pDLG9FQUF5QztBQUN6QyxnRUFBcUM7QUFFckMsMENBQXlDO0FBRXpDLFNBQWdCLE9BQU8sQ0FBQyxHQUFRO0lBQzlCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGdCQUFnQixDQUFBO0FBQ2pFLENBQUM7QUFGRCwwQkFFQztBQUNELFNBQWdCLFFBQVEsQ0FBQyxHQUFRO0lBQy9CLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFBO0FBQ2hDLENBQUM7QUFGRCw0QkFFQztBQUNELFNBQWdCLFdBQVcsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sT0FBTyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBQ25DLENBQUM7QUFGRCxrQ0FFQztBQUNELFNBQWdCLGFBQWEsQ0FBQyxHQUFRO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGlCQUFpQixDQUFBO0FBQ2xFLENBQUM7QUFGRCxzQ0FFQztBQUNELFNBQWdCLE1BQU0sQ0FBQyxHQUFRO0lBQzdCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGVBQWUsQ0FBQTtBQUNoRSxDQUFDO0FBRkQsd0JBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsUUFBYSxFQUFFLFNBQWM7SUFDeEQsT0FBTyxRQUFRLFlBQVksU0FBUyxDQUFBO0FBQ3RDLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLFVBQVUsQ0FBQyxHQUFRO0lBQ2pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLG1CQUFtQixD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RUFBRTtRQUF0QixJQUFNLEdBQUcsZ0JBQUE7UUFDSixJQUFBLElBQUksR0FBVyxHQUFHLEtBQWQsRUFBRSxJQUFJLEdBQUssR0FBRyxLQUFSLENBQVE7UUFDMUIsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDakIsTUFBSztZQUNQLEtBQUssTUFBTTtnQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNsQixNQUFLO1lBQ1AsS0FBSyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ25CLE1BQUs7U0FDUjtLQUNGO0lBQ0QsSUFBSSxVQUFVLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0tBQzlCO0lBQ0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3BCLENBQUM7QUF6QkQsc0NBeUJDO0FBRVksUUFBQSxLQUFLLEdBQUcsVUFBQyxFQUFNO0lBQU4sbUJBQUEsRUFBQSxNQUFNO0lBQUssT0FBQSxJQUFJLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQWpCLENBQWlCLENBQUM7QUFBbkMsQ0FBbUMsQ0FBQTtBQUVwRSxTQUFnQixjQUFjLENBQUMsV0FBbUI7SUFDaEQsT0FBTyxRQUFNLFdBQWEsQ0FBQTtBQUM1QixDQUFDO0FBRkQsd0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaHMyNTYgZnJvbSAnY3J5cHRvLWpzL2htYWMtc2hhMjU2J1xuaW1wb3J0IGJhc2U2NCBmcm9tICdjcnlwdG8tanMvZW5jLWJhc2U2NCdcbmltcG9ydCB1dGY4IGZyb20gJ2NyeXB0by1qcy9lbmMtdXRmOCdcbmltcG9ydCB7IEtWIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IGdldFNka05hbWUgfSBmcm9tICcuLi9jb25zdGFudHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFsaW5PYmplY3QodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE51bGxdJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VPZihpbnN0YW5jZTogYW55LCBjb25zdHJ1Y3Q6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5zdGFuY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlblNlcUlkKCk6IHN0cmluZyB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KVxuICAgIC5zbGljZSgyKVxufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVybChQUk9UT0NPTDogc3RyaW5nLCB1cmw6IHN0cmluZywgcXVlcnk6IEtWPGFueT4gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybEhhc1F1ZXJ5ID0gL1xcPy8udGVzdCh1cmwpXG4gIGxldCBxdWVyeVN0cmluZyA9ICcnXG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAocXVlcnlTdHJpbmcgPT09ICcnKSB7XG4gICAgICAhdXJsSGFzUXVlcnkgJiYgKHVybCArPSAnPycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9ICcmJ1xuICAgIH1cbiAgICBxdWVyeVN0cmluZyArPSBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5W2tleV0pfWBcbiAgfSlcbiAgdXJsICs9IHF1ZXJ5U3RyaW5nXG4gIGlmICgvXmh0dHAocyk/OlxcL1xcLy8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIHVybFxuICB9XG4gIHJldHVybiBgJHtQUk9UT0NPTH0ke3VybH1gXG59XG5cbmZ1bmN0aW9uIGJhc2U2NHVybChzb3VyY2U6IEtWPGFueT4pOiBzdHJpbmcge1xuICBsZXQgZW5jb2RlZFNvdXJjZSA9IGJhc2U2NC5zdHJpbmdpZnkoc291cmNlKVxuXG4gIGVuY29kZWRTb3VyY2UgPSBlbmNvZGVkU291cmNlLnJlcGxhY2UoLz0rJC8sICcnKVxuICBlbmNvZGVkU291cmNlID0gZW5jb2RlZFNvdXJjZS5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICBlbmNvZGVkU291cmNlID0gZW5jb2RlZFNvdXJjZS5yZXBsYWNlKC9cXC8vZywgJ18nKVxuXG4gIHJldHVybiBlbmNvZGVkU291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWduKHBheWxvYWQ6IEtWPGFueT4sIHNlY3JldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGVhZGVyID0ge1xuICAgIGFsZzogJ0hTMjU2JyxcbiAgICB0eXA6ICdKV1QnLFxuICB9XG4gIGNvbnN0IGhlYWRlclN0ciA9IGJhc2U2NHVybCh1dGY4LnBhcnNlKEpTT04uc3RyaW5naWZ5KGhlYWRlcikpKVxuICBjb25zdCBwYXlsb2FkU3RyID0gYmFzZTY0dXJsKHV0ZjgucGFyc2UoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKVxuXG4gIGNvbnN0IHRva2VuID0gYCR7aGVhZGVyU3RyfS4ke3BheWxvYWRTdHJ9YFxuICBjb25zdCBzaWduID0gYmFzZTY0dXJsKGhzMjU2KHRva2VuLCBzZWNyZXQpKVxuICByZXR1cm4gYCR7dG9rZW59LiR7c2lnbn1gXG59XG5leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhxdWVyeTogS1Y8YW55PiA9IHt9KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gW11cbiAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIHF1ZXJ5U3RyaW5nLnB1c2goYCR7a2V5fT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeVtrZXldKX1gKVxuICB9KVxuICByZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeShuYW1lOiBzdHJpbmcsIHVybD86IHN0cmluZykge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyDlj4LmlbDvvJrlj5jph4/lkI3vvIx1cmzkuLrnqbrliJnooajku47lvZPliY3pobXpnaLnmoR1cmzkuK3lj5ZcbiAgY29uc3QgdSA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uc2VhcmNoXG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYChefCYpJHtuYW1lfT0oW14mXSopKCZ8JClgKVxuICBjb25zdCByID0gdS5zdWJzdHIodS5pbmRleE9mKCc/JykgKyAxKS5tYXRjaChyZWcpXG4gIHJldHVybiAociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQpID8gclsyXSA6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBnZXRIYXNoID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gd2luZG93LmxvY2F0aW9uLmhhc2gubWF0Y2gobmV3IFJlZ0V4cChgWyM/Ji9dJHtuYW1lfT0oW14mI10qKWApKVxuICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiAnJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUGFyYW0oa2V5OiBzdHJpbmcsIHNvdXJjZVVSTDogc3RyaW5nKSB7XG4gIGxldCBydG4gPSBzb3VyY2VVUkwuc3BsaXQoJz8nKVswXVxuICBsZXQgcGFyYW1cbiAgbGV0IHBhcmFtcyA9IFtdXG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gc291cmNlVVJMLmluZGV4T2YoJz8nKSAhPT0gLTEgPyBzb3VyY2VVUkwuc3BsaXQoJz8nKVsxXSA6ICcnXG4gIGlmIChxdWVyeVN0cmluZyAhPT0gJycpIHtcbiAgICBwYXJhbXMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgICBwYXJhbSA9IHBhcmFtc1tpXS5zcGxpdCgnPScpWzBdXG4gICAgICBpZiAocGFyYW0gPT09IGtleSkge1xuICAgICAgICBwYXJhbXMuc3BsaWNlKGksIDEpXG4gICAgICB9XG4gICAgfVxuICAgIHJ0biA9IGAke3J0bn0/JHtwYXJhbXMuam9pbignJicpfWBcbiAgfVxuICByZXR1cm4gcnRuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FsbGJhY2soKSB7XG4gIGxldCBjYjogYW55XG4gIGlmICghUHJvbWlzZSkge1xuICAgIGNiID0gKCkgPT4geyB9XG4gICAgY2IucHJvbWlzZSA9IHt9XG5cbiAgICBjb25zdCB0aHJvd1Byb21pc2VOb3REZWZpbmVkID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIE5vZGUgcnVudGltZSBkb2VzIHN1cHBvcnQgRVM2IFByb21pc2VzLiAnXG4gICAgICAgICsgJ1NldCBcImdsb2JhbC5Qcm9taXNlXCIgdG8geW91ciBwcmVmZXJyZWQgaW1wbGVtZW50YXRpb24gb2YgcHJvbWlzZXMuJylcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2IucHJvbWlzZSwgJ3RoZW4nLCB7IGdldDogdGhyb3dQcm9taXNlTm90RGVmaW5lZCB9KVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYi5wcm9taXNlLCAnY2F0Y2gnLCB7IGdldDogdGhyb3dQcm9taXNlTm90RGVmaW5lZCB9KVxuICAgIHJldHVybiBjYlxuICB9XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjYiA9IChlcnIsIGRhdGEpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSlcbiAgICB9XG4gIH0pXG4gIGNiLnByb21pc2UgPSBwcm9taXNlXG4gIHJldHVybiBjYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY0NhbGxiYWNrKGZuOiBGdW5jdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsIGVycjogYW55LCBkYXRhID0gbnVsbCkge1xuICBpZiAoZm4gJiYgdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZuKGVyciwgZGF0YSlcbiAgfVxuICBpZiAoZXJyKSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50V2FybihlcnJvcjogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICBjb25zb2xlLndhcm4oYFske2dldFNka05hbWUoKX1dWyR7ZXJyb3J9XToke21zZ31gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRFcnJvcihlcnJvcjogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICBjb25zb2xlLmVycm9yKHtcbiAgICBjb2RlOiBlcnJvcixcbiAgICBtc2c6IGBbJHtnZXRTZGtOYW1lKCl9XVske2Vycm9yfV06JHttc2d9YCxcbiAgfSlcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmludEluZm8oZXJyb3I6IHN0cmluZywgbXNnOiBzdHJpbmcpIHtcbiAgY29uc29sZS5sb2coYFske2dldFNka05hbWUoKX1dWyR7ZXJyb3J9XToke21zZ31gKVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3I6IHN0cmluZywgbXNnOiBzdHJpbmcpIHtcbiAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHtcbiAgICBjb2RlOiBlcnJvcixcbiAgICBtc2c6IGBbJHtnZXRTZGtOYW1lKCl9XVske2Vycm9yfV06JHttc2d9YCxcbiAgfSkpXG59XG5cbmludGVyZmFjZSBJUHJpbnRHcm91cExvZ09wdGlvbnMge1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nIHwgb2JqZWN0O1xuICBjb250ZW50OiB7XG4gICAgdHlwZTogJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyxcbiAgICBib2R5OiBzdHJpbmcgfCBFcnJvcjtcbiAgfVtdO1xuICBwcmludFRyYWNlPzogYm9vbGVhbjtcbiAgY29sbGFwc2VkPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmludEdyb3VwTG9nKG9wdGlvbnM6IElQcmludEdyb3VwTG9nT3B0aW9ucykge1xuICBjb25zdCB7IHRpdGxlLCBzdWJ0aXRsZSA9ICcnLCBjb250ZW50ID0gW10sIHByaW50VHJhY2UgPSBmYWxzZSwgY29sbGFwc2VkID0gZmFsc2UgfSA9IG9wdGlvbnNcbiAgaWYgKGNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQodGl0bGUsIHN1YnRpdGxlKVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZ3JvdXAodGl0bGUsIHN1YnRpdGxlKVxuICB9XG4gIGZvciAoY29uc3QgdGlwIG9mIGNvbnRlbnQpIHtcbiAgICBjb25zdCB7IHR5cGUsIGJvZHkgfSA9IHRpcFxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgIGNvbnNvbGUubG9nKGJvZHkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgY29uc29sZS53YXJuKGJvZHkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYm9keSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgaWYgKHByaW50VHJhY2UpIHtcbiAgICBjb25zb2xlLnRyYWNlKCdzdGFjayB0cmFjZTonKVxuICB9XG4gIGNvbnNvbGUuZ3JvdXBFbmQoKVxufVxuXG5leHBvcnQgY29uc3Qgc2xlZXAgPSAobXMgPSAwKSA9PiBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUGhvbmUocGhvbmVOdW1iZXI6IHN0cmluZykge1xuICByZXR1cm4gYCs4NiR7cGhvbmVOdW1iZXJ9YFxufVxuXG4iXX0=
|