@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.
Files changed (68) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +15 -0
  3. package/dist/{adapters → cjs/adapters}/index.js +1 -1
  4. package/dist/cjs/adapters/platforms/web.js +213 -0
  5. package/dist/cjs/constants/common.js +24 -0
  6. package/dist/cjs/constants/errors.js +12 -0
  7. package/dist/{constants → cjs/constants}/index.js +1 -1
  8. package/dist/cjs/helpers/decorators.js +238 -0
  9. package/dist/{helpers → cjs/helpers}/index.js +1 -1
  10. package/dist/{index.js → cjs/index.js} +1 -1
  11. package/dist/cjs/libs/cache.js +259 -0
  12. package/dist/cjs/libs/events.js +104 -0
  13. package/dist/cjs/libs/util.js +221 -0
  14. package/dist/esm/adapters/index.d.ts +13 -0
  15. package/dist/esm/adapters/index.js +27 -0
  16. package/dist/esm/adapters/platforms/web.d.ts +15 -0
  17. package/dist/esm/adapters/platforms/web.js +209 -0
  18. package/dist/esm/constants/common.d.ts +6 -0
  19. package/dist/esm/constants/common.js +17 -0
  20. package/dist/esm/constants/errors.d.ts +8 -0
  21. package/dist/esm/constants/errors.js +9 -0
  22. package/dist/esm/constants/index.d.ts +3 -0
  23. package/dist/esm/constants/index.js +4 -0
  24. package/dist/esm/helpers/decorators.d.ts +11 -0
  25. package/dist/esm/helpers/decorators.js +234 -0
  26. package/dist/esm/helpers/index.d.ts +1 -0
  27. package/dist/esm/helpers/index.js +2 -0
  28. package/dist/esm/index.d.ts +11 -0
  29. package/dist/esm/index.js +12 -0
  30. package/dist/esm/libs/cache.d.ts +17 -0
  31. package/dist/esm/libs/cache.js +256 -0
  32. package/dist/esm/libs/events.d.ts +27 -0
  33. package/dist/esm/libs/events.js +98 -0
  34. package/dist/esm/libs/util.d.ts +35 -0
  35. package/dist/esm/libs/util.js +194 -0
  36. package/package.json +6 -16
  37. package/src/adapters/index.ts +28 -0
  38. package/src/adapters/platforms/web.ts +182 -0
  39. package/src/constants/common.ts +21 -0
  40. package/src/constants/errors.ts +8 -0
  41. package/src/constants/index.ts +4 -0
  42. package/src/global.d.ts +3 -0
  43. package/src/helpers/decorators.ts +228 -0
  44. package/src/helpers/index.ts +1 -0
  45. package/src/index.ts +22 -0
  46. package/src/libs/cache.ts +192 -0
  47. package/src/libs/events.ts +154 -0
  48. package/src/libs/util.ts +216 -0
  49. package/tsconfig.esm.json +16 -0
  50. package/tsconfig.json +21 -0
  51. package/dist/adapters/platforms/web.js +0 -213
  52. package/dist/constants/common.js +0 -24
  53. package/dist/constants/errors.js +0 -12
  54. package/dist/helpers/decorators.js +0 -238
  55. package/dist/libs/cache.js +0 -259
  56. package/dist/libs/events.js +0 -104
  57. package/dist/libs/util.js +0 -221
  58. /package/dist/{adapters → cjs/adapters}/index.d.ts +0 -0
  59. /package/dist/{adapters → cjs/adapters}/platforms/web.d.ts +0 -0
  60. /package/dist/{constants → cjs/constants}/common.d.ts +0 -0
  61. /package/dist/{constants → cjs/constants}/errors.d.ts +0 -0
  62. /package/dist/{constants → cjs/constants}/index.d.ts +0 -0
  63. /package/dist/{helpers → cjs/helpers}/decorators.d.ts +0 -0
  64. /package/dist/{helpers → cjs/helpers}/index.d.ts +0 -0
  65. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  66. /package/dist/{libs → cjs/libs}/cache.d.ts +0 -0
  67. /package/dist/{libs → cjs/libs}/events.d.ts +0 -0
  68. /package/dist/{libs → cjs/libs}/util.d.ts +0 -0
@@ -0,0 +1,234 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { printGroupLog } from '../libs/util';
38
+ import { IS_DEBUG_MODE } from '../constants';
39
+ var isFirefox = false;
40
+ if (typeof navigator !== 'undefined' && navigator.userAgent) {
41
+ isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
42
+ }
43
+ var REG_STACK_DECORATE = isFirefox
44
+ ? /(\.js\/)?__decorate(\$\d+)?<@.*\d$/
45
+ : /(\/\w+\.js\.)?__decorate(\$\d+)?\s*\(.*\)$/;
46
+ var REG_STACK_LINK = /https?:\/\/.+:\d*\/.*\.js:\d+:\d+/;
47
+ export function catchErrorsDecorator(options) {
48
+ var _a = options.mode, mode = _a === void 0 ? 'async' : _a, _b = options.customInfo, customInfo = _b === void 0 ? {} : _b, title = options.title, _c = options.messages, messages = _c === void 0 ? [] : _c;
49
+ return function (target, methodName, descriptor) {
50
+ if (!IS_DEBUG_MODE) {
51
+ return;
52
+ }
53
+ var className = customInfo.className || target.constructor.name;
54
+ var fnName = customInfo.methodName || methodName;
55
+ var fn = descriptor.value;
56
+ var sourceLink = getSourceLink(new Error());
57
+ if (mode === 'sync') {
58
+ descriptor.value = function () {
59
+ var args = [];
60
+ for (var _i = 0; _i < arguments.length; _i++) {
61
+ args[_i] = arguments[_i];
62
+ }
63
+ var innerErr = getRewritedError({
64
+ err: new Error(),
65
+ className: className,
66
+ methodName: fnName,
67
+ sourceLink: sourceLink,
68
+ });
69
+ try {
70
+ return fn.apply(this, args);
71
+ }
72
+ catch (err) {
73
+ var failErr = err;
74
+ var errMsg = err.message, error = err.error, errorDescription = err.error_description;
75
+ var logs = {
76
+ title: title || className + "." + fnName + " failed",
77
+ content: [{
78
+ type: 'error',
79
+ body: err,
80
+ }],
81
+ };
82
+ if (errMsg && /^\{.*\}$/.test(errMsg)) {
83
+ var msg = JSON.parse(errMsg);
84
+ logs.subtitle = errMsg;
85
+ if (msg.code) {
86
+ if (innerErr) {
87
+ innerErr.code = msg.code;
88
+ innerErr.msg = msg.msg;
89
+ }
90
+ else {
91
+ err.code = msg.code;
92
+ err.message = msg.msg;
93
+ }
94
+ failErr = innerErr || err;
95
+ logs.content = messages.map(function (msg) { return ({
96
+ type: 'info',
97
+ body: msg,
98
+ }); });
99
+ }
100
+ }
101
+ if (error && errorDescription) {
102
+ logs.subtitle = errorDescription;
103
+ if (innerErr) {
104
+ innerErr.code = error;
105
+ innerErr.msg = errorDescription;
106
+ }
107
+ else {
108
+ err.code = error;
109
+ err.message = errorDescription;
110
+ }
111
+ failErr = innerErr || err;
112
+ logs.content = messages.map(function (msg) { return ({
113
+ type: 'info',
114
+ body: msg,
115
+ }); });
116
+ }
117
+ printGroupLog(logs);
118
+ throw failErr;
119
+ }
120
+ };
121
+ }
122
+ else {
123
+ descriptor.value = function () {
124
+ var args = [];
125
+ for (var _i = 0; _i < arguments.length; _i++) {
126
+ args[_i] = arguments[_i];
127
+ }
128
+ return __awaiter(this, void 0, void 0, function () {
129
+ var innerErr, err_1, failErr, errMsg, error, errorDescription, logs, msg;
130
+ return __generator(this, function (_a) {
131
+ switch (_a.label) {
132
+ case 0:
133
+ innerErr = getRewritedError({
134
+ err: new Error(),
135
+ className: className,
136
+ methodName: fnName,
137
+ sourceLink: sourceLink,
138
+ });
139
+ _a.label = 1;
140
+ case 1:
141
+ _a.trys.push([1, 3, , 4]);
142
+ return [4, fn.apply(this, args)];
143
+ case 2: return [2, _a.sent()];
144
+ case 3:
145
+ err_1 = _a.sent();
146
+ failErr = err_1;
147
+ errMsg = err_1.message, error = err_1.error, errorDescription = err_1.error_description;
148
+ logs = {
149
+ title: title || className + "." + fnName + " failed",
150
+ content: [{
151
+ type: 'error',
152
+ body: err_1,
153
+ }],
154
+ };
155
+ if (errMsg && /^\{.*\}$/.test(errMsg)) {
156
+ msg = JSON.parse(errMsg);
157
+ logs.subtitle = msg;
158
+ if (msg.code) {
159
+ if (innerErr) {
160
+ innerErr.code = msg.code;
161
+ innerErr.message = msg.msg;
162
+ }
163
+ else {
164
+ err_1.code = msg.code;
165
+ err_1.message = msg.msg;
166
+ }
167
+ failErr = innerErr || err_1;
168
+ logs.content = messages.map(function (msg) { return ({
169
+ type: 'info',
170
+ body: msg,
171
+ }); });
172
+ }
173
+ }
174
+ if (error && errorDescription) {
175
+ logs.subtitle = errorDescription;
176
+ if (innerErr) {
177
+ innerErr.code = error;
178
+ innerErr.msg = errorDescription;
179
+ }
180
+ else {
181
+ err_1.code = error;
182
+ err_1.message = errorDescription;
183
+ }
184
+ failErr = innerErr || err_1;
185
+ logs.content = messages.map(function (msg) { return ({
186
+ type: 'info',
187
+ body: msg,
188
+ }); });
189
+ }
190
+ printGroupLog(logs);
191
+ throw failErr;
192
+ case 4: return [2];
193
+ }
194
+ });
195
+ });
196
+ };
197
+ }
198
+ };
199
+ }
200
+ function getSourceLink(err) {
201
+ var sourceLink = '';
202
+ var outterErrStacks = err.stack.split('\n');
203
+ var indexOfDecorator = outterErrStacks.findIndex(function (str) { return REG_STACK_DECORATE.test(str); });
204
+ if (indexOfDecorator !== -1) {
205
+ var match = REG_STACK_LINK.exec(outterErrStacks[indexOfDecorator + 1] || '');
206
+ sourceLink = match ? match[0] : '';
207
+ }
208
+ return sourceLink;
209
+ }
210
+ function getRewritedError(options) {
211
+ var err = options.err, className = options.className, methodName = options.methodName, sourceLink = options.sourceLink;
212
+ if (!sourceLink) {
213
+ return null;
214
+ }
215
+ var innerErrStack = err.stack.split('\n');
216
+ var REG_STACK_INNER_METHOD = isFirefox
217
+ ? /^catchErrorsDecorator\/<\/descriptor.value@.*\d$/
218
+ : new RegExp(className + "\\.descriptor.value\\s*\\[as\\s" + methodName + "\\]\\s*\\(.*\\)$");
219
+ var REG_STACK_INNER_METHOD_WITHOUT_LINK = isFirefox
220
+ ? /^catchErrorsDecorator\/<\/descriptor.value/
221
+ : new RegExp(className + "\\.descriptor.value\\s*\\[as\\s" + methodName + "\\]");
222
+ var indexOfSource = innerErrStack.findIndex(function (str) { return REG_STACK_INNER_METHOD.test(str); });
223
+ var innerErr;
224
+ if (indexOfSource !== -1) {
225
+ var realErrStack = innerErrStack.filter(function (v, i) { return i > indexOfSource; });
226
+ realErrStack.unshift(innerErrStack[indexOfSource]
227
+ .replace(REG_STACK_INNER_METHOD_WITHOUT_LINK, className + "." + methodName)
228
+ .replace(REG_STACK_LINK, sourceLink));
229
+ innerErr = new Error();
230
+ innerErr.stack = (isFirefox ? '@debugger' : 'Error') + "\n" + realErrStack.join('\n');
231
+ }
232
+ return innerErr;
233
+ }
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXJzL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBWTVDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQTtBQUNyQixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO0lBQzNELFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtDQUMxRDtBQUlELElBQU0sa0JBQWtCLEdBQUcsU0FBUztJQUNsQyxDQUFDLENBQUMsb0NBQW9DO0lBQ3RDLENBQUMsQ0FBQyw0Q0FBNEMsQ0FBQTtBQUNoRCxJQUFNLGNBQWMsR0FBRyxtQ0FBbUMsQ0FBQTtBQUsxRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBcUM7SUFDaEUsSUFBQSxLQUEwRCxPQUFPLEtBQW5ELEVBQWQsSUFBSSxtQkFBRyxPQUFPLEtBQUEsRUFBRSxLQUEwQyxPQUFPLFdBQWxDLEVBQWYsVUFBVSxtQkFBRyxFQUFFLEtBQUEsRUFBRSxLQUFLLEdBQW9CLE9BQU8sTUFBM0IsRUFBRSxLQUFrQixPQUFPLFNBQVosRUFBYixRQUFRLG1CQUFHLEVBQUUsS0FBQSxDQUFZO0lBRXpFLE9BQU8sVUFDTCxNQUFXLEVBQ1gsVUFBa0IsRUFDbEIsVUFBNkM7UUFHN0MsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixPQUFNO1NBQ1A7UUFDRCxJQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFBO1FBQ2pFLElB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QUFNLG1DQUFtQyxHQUFHLFNBQVM7UUFDbkQsQ0FBQyxDQUFDLDRDQUE0QztRQUM5QyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUksU0FBUyx1Q0FBa0MsVUFBVSxRQUFLLENBQUMsQ0FBQTtJQUM3RSxJQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFoQyxDQUFnQyxDQUFDLENBQUE7SUFDdEYsSUFBSSxRQUFlLENBQUE7SUFDbkIsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFFeEIsSUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLEdBQUcsYUFBYSxFQUFqQixDQUFpQixDQUFDLENBQUE7UUFDdEUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQzlDLE9BQU8sQ0FBQyxtQ0FBbUMsRUFBSyxTQUFTLFNBQUksVUFBWSxDQUFDO2FBQzFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN2QyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtRQUN0QixRQUFRLENBQUMsS0FBSyxHQUFHLENBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRyxDQUFBO0tBQ3BGO0lBQ0QsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByaW50R3JvdXBMb2cgfSBmcm9tICcuLi9saWJzL3V0aWwnXG5pbXBvcnQgeyBJU19ERUJVR19NT0RFIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuXG5pbnRlcmZhY2UgSUNhdGNoRXJyb3JzRGVjb3JhdG9yT3B0aW9ucyB7XG4gIG1vZGU/OiAnc3luYycgfCAnYXN5bmMnO1xuICBjdXN0b21JbmZvPzoge1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICBtZXRob2ROYW1lPzogc3RyaW5nO1xuICB9O1xuICB0aXRsZT86IHN0cmluZztcbiAgbWVzc2FnZXM/OiBzdHJpbmdbXTtcbn1cbi8vIGZpcmVmb3jnmoRzdGFja+agvOW8j+S4jmNocm9tZeS4jeWQjFxubGV0IGlzRmlyZWZveCA9IGZhbHNlXG5pZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSAhPT0gLTFcbn1cbi8qKlxuICogZGVjb3JhdGXlnKhzdGFja+S4reS4gOiIrOmDveeJueWumueahOinhOiMg1xuICovXG5jb25zdCBSRUdfU1RBQ0tfREVDT1JBVEUgPSBpc0ZpcmVmb3hcbiAgPyAvKFxcLmpzXFwvKT9fX2RlY29yYXRlKFxcJFxcZCspPzxALipcXGQkL1xuICA6IC8oXFwvXFx3K1xcLmpzXFwuKT9fX2RlY29yYXRlKFxcJFxcZCspP1xccypcXCguKlxcKSQvXG5jb25zdCBSRUdfU1RBQ0tfTElOSyA9IC9odHRwcz86XFwvXFwvLis6XFxkKlxcLy4qXFwuanM6XFxkKzpcXGQrL1xuLyoqXG4gKiBkZWJ1Z+aooeW8j+W8uuWMluaXpeW/l+S/oeaBr1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoRXJyb3JzRGVjb3JhdG9yKG9wdGlvbnM6IElDYXRjaEVycm9yc0RlY29yYXRvck9wdGlvbnMpIHtcbiAgY29uc3QgeyBtb2RlID0gJ2FzeW5jJywgY3VzdG9tSW5mbyA9IHt9LCB0aXRsZSwgbWVzc2FnZXMgPSBbXSB9ID0gb3B0aW9uc1xuXG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgdGFyZ2V0OiBhbnksXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPEZ1bmN0aW9uPlxuICApIHtcbiAgICAvLyDnlJ/kuqfnjq/looPnpoHnlKhcbiAgICBpZiAoIUlTX0RFQlVHX01PREUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBjbGFzc05hbWUgPSBjdXN0b21JbmZvLmNsYXNzTmFtZSB8fCB0YXJnZXQuY29uc3RydWN0b3IubmFtZVxuICAgIGNvbnN0IGZuTmFtZSA9IGN1c3RvbUluZm8ubWV0aG9kTmFtZSB8fCBtZXRob2ROYW1lXG4gICAgY29uc3QgZm4gPSBkZXNjcmlwdG9yLnZhbHVlXG5cbiAgICAvLyDooqtkZWNvcmF0b3Loo4XppbDnmoTmupDnoIFsaW5rXG4gICAgLy8g5ZyoZGVzY3JpcHRvci52YWx1ZeWklumDqOatpOWkhOWIm+W7uueahHN0YWNr5bGC5qyh5Y+v6Kem6L6+5rqQ56CBXG4gICAgLy8g6ICMZGVzY3JpcHRvci52YWx1ZeWGhemDqOacieWPr+iDveeUseS6jnN0YWNr5aSq5rex5peg5rOV6Kem6L6+XG4gICAgY29uc3Qgc291cmNlTGluayA9IGdldFNvdXJjZUxpbmsobmV3IEVycm9yKCkpXG5cbiAgICBpZiAobW9kZSA9PT0gJ3N5bmMnKSB7XG4gICAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIC8vIOatpOWkhOeahHN0YWNr5L2c55So5Li76KaB5piv5Li65LqG6I635Y+W6KKrZGVjb3JhdG9y6KOF6aWw55qE5rqQ56CBY2xhc3PlkoxtZXRob2TlkI3np7BcbiAgICAgICAgY29uc3QgaW5uZXJFcnI6IGFueSA9IGdldFJld3JpdGVkRXJyb3Ioe1xuICAgICAgICAgIGVycjogbmV3IEVycm9yKCksXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG1ldGhvZE5hbWU6IGZuTmFtZSxcbiAgICAgICAgICBzb3VyY2VMaW5rLFxuICAgICAgICB9KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsZXQgZmFpbEVyciA9IGVyclxuICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZTogZXJyTXNnLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yRGVzY3JpcHRpb24gfSA9IGVyclxuICAgICAgICAgIGNvbnN0IGxvZ3M6IGFueSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCBgJHtjbGFzc05hbWV9LiR7Zm5OYW1lfSBmYWlsZWRgLFxuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgYm9keTogZXJyLFxuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOWPqueJueauiuWkhOeQhlNES+S4muWKoemAu+i+keaKm+WHuueahOmUmeivry1KU09OIHN0cmluZ1xuICAgICAgICAgIGlmIChlcnJNc2cgJiYgL15cXHsuKlxcfSQvLnRlc3QoZXJyTXNnKSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gSlNPTi5wYXJzZShlcnJNc2cpXG4gICAgICAgICAgICBsb2dzLnN1YnRpdGxlID0gZXJyTXNnXG4gICAgICAgICAgICBpZiAobXNnLmNvZGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlubmVyRXJyKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJFcnIuY29kZSA9IG1zZy5jb2RlXG4gICAgICAgICAgICAgICAgaW5uZXJFcnIubXNnID0gbXNnLm1zZ1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVyci5jb2RlID0gbXNnLmNvZGVcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IG1zZy5tc2dcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmYWlsRXJyID0gaW5uZXJFcnIgfHwgZXJyXG4gICAgICAgICAgICAgIGxvZ3MuY29udGVudCA9IG1lc3NhZ2VzLm1hcChtc2cgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgICAgYm9keTogbXNnLFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBvYXV0aCDplJnor6/nibnmrorlpITnkIZcbiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3JEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgbG9ncy5zdWJ0aXRsZSA9IGVycm9yRGVzY3JpcHRpb25cbiAgICAgICAgICAgIGlmIChpbm5lckVycikge1xuICAgICAgICAgICAgICBpbm5lckVyci5jb2RlID0gZXJyb3JcbiAgICAgICAgICAgICAgaW5uZXJFcnIubXNnID0gZXJyb3JEZXNjcmlwdGlvblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyLmNvZGUgPSBlcnJvclxuICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IGVycm9yRGVzY3JpcHRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZhaWxFcnIgPSBpbm5lckVyciB8fCBlcnJcbiAgICAgICAgICAgIGxvZ3MuY29udGVudCA9IG1lc3NhZ2VzLm1hcChtc2cgPT4gKHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICBib2R5OiBtc2csXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRHcm91cExvZyhsb2dzKVxuICAgICAgICAgIHRocm93IGZhaWxFcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGlubmVyRXJyOiBhbnkgPSBnZXRSZXdyaXRlZEVycm9yKHtcbiAgICAgICAgICBlcnI6IG5ldyBFcnJvcigpLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBtZXRob2ROYW1lOiBmbk5hbWUsXG4gICAgICAgICAgc291cmNlTGluayxcbiAgICAgICAgfSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsZXQgZmFpbEVyciA9IGVyclxuICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZTogZXJyTXNnLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yRGVzY3JpcHRpb24gfSA9IGVyclxuICAgICAgICAgIGNvbnN0IGxvZ3M6IGFueSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCBgJHtjbGFzc05hbWV9LiR7Zm5OYW1lfSBmYWlsZWRgLFxuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgYm9keTogZXJyLFxuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOWPqueJueauiuWkhOeQhlNES+S4muWKoemAu+i+keaKm+WHuueahOmUmeivry1KU09OIHN0cmluZ1xuICAgICAgICAgIGlmIChlcnJNc2cgJiYgL15cXHsuKlxcfSQvLnRlc3QoZXJyTXNnKSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gSlNPTi5wYXJzZShlcnJNc2cpXG4gICAgICAgICAgICBsb2dzLnN1YnRpdGxlID0gbXNnXG4gICAgICAgICAgICBpZiAobXNnLmNvZGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlubmVyRXJyKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJFcnIuY29kZSA9IG1zZy5jb2RlXG4gICAgICAgICAgICAgICAgaW5uZXJFcnIubWVzc2FnZSA9IG1zZy5tc2dcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnIuY29kZSA9IG1zZy5jb2RlXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBtc2cubXNnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmFpbEVyciA9IGlubmVyRXJyIHx8IGVyclxuICAgICAgICAgICAgICBsb2dzLmNvbnRlbnQgPSBtZXNzYWdlcy5tYXAobXNnID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICAgIGJvZHk6IG1zZyxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gb2F1dGgg6ZSZ6K+v54m55q6K5aSE55CGXG4gICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGxvZ3Muc3VidGl0bGUgPSBlcnJvckRlc2NyaXB0aW9uXG4gICAgICAgICAgICBpZiAoaW5uZXJFcnIpIHtcbiAgICAgICAgICAgICAgaW5uZXJFcnIuY29kZSA9IGVycm9yXG4gICAgICAgICAgICAgIGlubmVyRXJyLm1zZyA9IGVycm9yRGVzY3JpcHRpb25cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVyci5jb2RlID0gZXJyb3JcbiAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnJvckRlc2NyaXB0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmYWlsRXJyID0gaW5uZXJFcnIgfHwgZXJyXG4gICAgICAgICAgICBsb2dzLmNvbnRlbnQgPSBtZXNzYWdlcy5tYXAobXNnID0+ICh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgYm9keTogbXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50R3JvdXBMb2cobG9ncylcbiAgICAgICAgICB0aHJvdyBmYWlsRXJyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiDlnKjljp/lp4vloIbmoIjkuK3mn6Xmib7oo4XppbDlmajmnaHnm67lubbov5Tlm57mupDnoIHpk77mjqVsaW5rXG4gKiBAcGFyYW0gZXJyXG4gKi9cbmZ1bmN0aW9uIGdldFNvdXJjZUxpbmsoZXJyOiBFcnJvcikge1xuICBsZXQgc291cmNlTGluayA9ICcnXG4gIGNvbnN0IG91dHRlckVyclN0YWNrcyA9IGVyci5zdGFjay5zcGxpdCgnXFxuJylcbiAgY29uc3QgaW5kZXhPZkRlY29yYXRvciA9IG91dHRlckVyclN0YWNrcy5maW5kSW5kZXgoc3RyID0+IFJFR19TVEFDS19ERUNPUkFURS50ZXN0KHN0cikpXG5cbiAgaWYgKGluZGV4T2ZEZWNvcmF0b3IgIT09IC0xKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBSRUdfU1RBQ0tfTElOSy5leGVjKG91dHRlckVyclN0YWNrc1tpbmRleE9mRGVjb3JhdG9yICsgMV0gfHwgJycpXG5cbiAgICBzb3VyY2VMaW5rID0gbWF0Y2ggPyBtYXRjaFswXSA6ICcnXG4gIH1cbiAgcmV0dXJuIHNvdXJjZUxpbmtcbn1cblxuLyoqXG4gKiDlnKjljp/lp4vloIbmoIjkuK3mn6Xmib7oo4XppbDlmajmnaHnm67vvIzliZTpmaTlhbblkI7nmoTml6DnlKjloIbmoIjvvIzlubblsIbpk77mjqXmm7/mjaLkuLrmupDnoIFsaW5rXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRSZXdyaXRlZEVycm9yKG9wdGlvbnM6IHtcbiAgZXJyOiBFcnJvcjtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgc291cmNlTGluazogc3RyaW5nO1xufSkge1xuICBjb25zdCB7IGVyciwgY2xhc3NOYW1lLCBtZXRob2ROYW1lLCBzb3VyY2VMaW5rIH0gPSBvcHRpb25zXG4gIC8vIOaJvuS4jeWIsOa6kOeggWxpbmvov5Tlm55udWxs77yM5ZCO57ut6YC76L6R5bCG5omT5Y2w5Y6f5aCG5qCI5L+h5oGvXG4gIGlmICghc291cmNlTGluaykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBpbm5lckVyclN0YWNrID0gZXJyLnN0YWNrLnNwbGl0KCdcXG4nKVxuICBjb25zdCBSRUdfU1RBQ0tfSU5ORVJfTUVUSE9EID0gaXNGaXJlZm94XG4gICAgPyAvXmNhdGNoRXJyb3JzRGVjb3JhdG9yXFwvPFxcL2Rlc2NyaXB0b3IudmFsdWVALipcXGQkL1xuICAgIDogbmV3IFJlZ0V4cChgJHtjbGFzc05hbWV9XFxcXC5kZXNjcmlwdG9yLnZhbHVlXFxcXHMqXFxcXFthc1xcXFxzJHttZXRob2ROYW1lfVxcXFxdXFxcXHMqXFxcXCguKlxcXFwpJGApXG4gIGNvbnN0IFJFR19TVEFDS19JTk5FUl9NRVRIT0RfV0lUSE9VVF9MSU5LID0gaXNGaXJlZm94XG4gICAgPyAvXmNhdGNoRXJyb3JzRGVjb3JhdG9yXFwvPFxcL2Rlc2NyaXB0b3IudmFsdWUvXG4gICAgOiBuZXcgUmVnRXhwKGAke2NsYXNzTmFtZX1cXFxcLmRlc2NyaXB0b3IudmFsdWVcXFxccypcXFxcW2FzXFxcXHMke21ldGhvZE5hbWV9XFxcXF1gKVxuICBjb25zdCBpbmRleE9mU291cmNlID0gaW5uZXJFcnJTdGFjay5maW5kSW5kZXgoc3RyID0+IFJFR19TVEFDS19JTk5FUl9NRVRIT0QudGVzdChzdHIpKVxuICBsZXQgaW5uZXJFcnI6IEVycm9yXG4gIGlmIChpbmRleE9mU291cmNlICE9PSAtMSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCByZWFsRXJyU3RhY2sgPSBpbm5lckVyclN0YWNrLmZpbHRlcigodiwgaSkgPT4gaSA+IGluZGV4T2ZTb3VyY2UpXG4gICAgcmVhbEVyclN0YWNrLnVuc2hpZnQoaW5uZXJFcnJTdGFja1tpbmRleE9mU291cmNlXVxuICAgICAgLnJlcGxhY2UoUkVHX1NUQUNLX0lOTkVSX01FVEhPRF9XSVRIT1VUX0xJTkssIGAke2NsYXNzTmFtZX0uJHttZXRob2ROYW1lfWApXG4gICAgICAucmVwbGFjZShSRUdfU1RBQ0tfTElOSywgc291cmNlTGluaykpXG4gICAgaW5uZXJFcnIgPSBuZXcgRXJyb3IoKVxuICAgIGlubmVyRXJyLnN0YWNrID0gYCR7aXNGaXJlZm94ID8gJ0BkZWJ1Z2dlcicgOiAnRXJyb3InfVxcbiR7cmVhbEVyclN0YWNrLmpvaW4oJ1xcbicpfWBcbiAgfVxuICByZXR1cm4gaW5uZXJFcnJcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from './decorators';
@@ -0,0 +1,2 @@
1
+ export * from './decorators';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycydcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import * as constants from './constants';
2
+ import * as adapters from './adapters';
3
+ import * as cache from './libs/cache';
4
+ import * as events from './libs/events';
5
+ import * as utils from './libs/util';
6
+ import * as helpers from './helpers';
7
+ import jwtDecode from 'jwt-decode';
8
+ declare const jwt: {
9
+ decode: typeof jwtDecode;
10
+ };
11
+ export { constants, adapters, cache, events, utils, helpers, jwt, };
@@ -0,0 +1,12 @@
1
+ import * as constants from './constants';
2
+ import * as adapters from './adapters';
3
+ import * as cache from './libs/cache';
4
+ import * as events from './libs/events';
5
+ import * as utils from './libs/util';
6
+ import * as helpers from './helpers';
7
+ import jwtDecode from 'jwt-decode';
8
+ var jwt = {
9
+ decode: jwtDecode,
10
+ };
11
+ export { constants, adapters, cache, events, utils, helpers, jwt, };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLENBQUE7QUFFcEMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBRWxDLElBQU0sR0FBRyxHQUFHO0lBQ1YsTUFBTSxFQUFFLFNBQVM7Q0FDbEIsQ0FBQTtBQUVELE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sS0FBSyxFQUNMLE9BQU8sRUFDUCxHQUFHLEdBQ0osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCAqIGFzIGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMnXG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tICcuL2xpYnMvY2FjaGUnXG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnLi9saWJzL2V2ZW50cydcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vbGlicy91dGlsJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnXG5cbmltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSdcblxuY29uc3Qgand0ID0ge1xuICBkZWNvZGU6IGp3dERlY29kZSxcbn1cblxuZXhwb3J0IHtcbiAgY29uc3RhbnRzLFxuICBhZGFwdGVycyxcbiAgY2FjaGUsXG4gIGV2ZW50cyxcbiAgdXRpbHMsXG4gIGhlbHBlcnMsXG4gIGp3dCxcbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { ICloudbaseCache, ICacheConfig } from '@cloudbase/types/cache';
2
+ import { KV, Persistence } from '@cloudbase/types';
3
+ export declare class CloudbaseCache implements ICloudbaseCache {
4
+ keys: KV<string>;
5
+ private persistenceTag;
6
+ private platformInfo;
7
+ private storage;
8
+ constructor(config: ICacheConfig);
9
+ get mode(): "async" | "sync";
10
+ get persistence(): Persistence;
11
+ setStore(key: string, value: any, version?: any): void;
12
+ setStoreAsync(key: string, value: any, version?: any): Promise<void>;
13
+ getStore(key: string, version?: string): any;
14
+ getStoreAsync(key: string, version?: string): Promise<any>;
15
+ removeStore(key: string): void;
16
+ removeStoreAsync(key: string): Promise<void>;
17
+ }
@@ -0,0 +1,256 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __generator = (this && this.__generator) || function (thisArg, body) {
24
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
+ function verb(n) { return function (v) { return step([n, v]); }; }
27
+ function step(op) {
28
+ if (f) throw new TypeError("Generator is already executing.");
29
+ while (_) try {
30
+ 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;
31
+ if (y = 0, t) op = [op[0] & 2, t.value];
32
+ switch (op[0]) {
33
+ case 0: case 1: t = op; break;
34
+ case 4: _.label++; return { value: op[1], done: false };
35
+ case 5: _.label++; y = op[1]; op = [0]; continue;
36
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
+ default:
38
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
+ if (t[2]) _.ops.pop();
43
+ _.trys.pop(); continue;
44
+ }
45
+ op = body.call(thisArg, _);
46
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
+ }
49
+ };
50
+ import { AbstractStorage } from '@cloudbase/adapter-interface';
51
+ import { printWarn } from './util';
52
+ import { ERRORS, getSdkName } from '../constants';
53
+ var TcbCacheObject = (function (_super) {
54
+ __extends(TcbCacheObject, _super);
55
+ function TcbCacheObject(root) {
56
+ var _this = _super.call(this) || this;
57
+ _this.root = root;
58
+ if (!root.tcbCacheObject) {
59
+ root.tcbCacheObject = {};
60
+ }
61
+ return _this;
62
+ }
63
+ TcbCacheObject.prototype.setItem = function (key, value) {
64
+ this.root.tcbCacheObject[key] = value;
65
+ };
66
+ TcbCacheObject.prototype.getItem = function (key) {
67
+ return this.root.tcbCacheObject[key];
68
+ };
69
+ TcbCacheObject.prototype.removeItem = function (key) {
70
+ delete this.root.tcbCacheObject[key];
71
+ };
72
+ TcbCacheObject.prototype.clear = function () {
73
+ delete this.root.tcbCacheObject;
74
+ };
75
+ return TcbCacheObject;
76
+ }(AbstractStorage));
77
+ function createStorage(persistence, adapter) {
78
+ switch (persistence) {
79
+ case 'local':
80
+ if (!adapter.localStorage) {
81
+ printWarn(ERRORS.INVALID_PARAMS, 'localStorage is not supported on current platform');
82
+ return new TcbCacheObject(adapter.root);
83
+ }
84
+ return adapter.localStorage;
85
+ case 'none':
86
+ return new TcbCacheObject(adapter.root);
87
+ default:
88
+ if (!adapter.localStorage) {
89
+ printWarn(ERRORS.INVALID_PARAMS, 'localStorage is not supported on current platform');
90
+ return new TcbCacheObject(adapter.root);
91
+ }
92
+ return adapter.localStorage;
93
+ }
94
+ }
95
+ var CloudbaseCache = (function () {
96
+ function CloudbaseCache(config) {
97
+ this.keys = {};
98
+ var persistence = config.persistence, _a = config.platformInfo, platformInfo = _a === void 0 ? {} : _a, _b = config.keys, keys = _b === void 0 ? {} : _b;
99
+ this.platformInfo = platformInfo;
100
+ if (!this.storage) {
101
+ this.persistenceTag = this.platformInfo.adapter.primaryStorage || persistence;
102
+ this.storage = createStorage(this.persistenceTag, this.platformInfo.adapter);
103
+ this.keys = keys;
104
+ }
105
+ }
106
+ Object.defineProperty(CloudbaseCache.prototype, "mode", {
107
+ get: function () {
108
+ return this.storage.mode || 'sync';
109
+ },
110
+ enumerable: false,
111
+ configurable: true
112
+ });
113
+ Object.defineProperty(CloudbaseCache.prototype, "persistence", {
114
+ get: function () {
115
+ return this.persistenceTag;
116
+ },
117
+ enumerable: false,
118
+ configurable: true
119
+ });
120
+ CloudbaseCache.prototype.setStore = function (key, value, version) {
121
+ if (this.mode === 'async') {
122
+ printWarn(ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use setStoreAsync insteed');
123
+ return;
124
+ }
125
+ if (!this.storage) {
126
+ return;
127
+ }
128
+ try {
129
+ var val = {
130
+ version: version || 'localCachev1',
131
+ content: value,
132
+ };
133
+ this.storage.setItem(key, JSON.stringify(val));
134
+ }
135
+ catch (e) {
136
+ throw new Error(JSON.stringify({
137
+ code: ERRORS.OPERATION_FAIL,
138
+ msg: "[" + getSdkName() + "][" + ERRORS.OPERATION_FAIL + "]setStore failed",
139
+ info: e,
140
+ }));
141
+ }
142
+ return;
143
+ };
144
+ CloudbaseCache.prototype.setStoreAsync = function (key, value, version) {
145
+ return __awaiter(this, void 0, void 0, function () {
146
+ var val, e_1;
147
+ return __generator(this, function (_a) {
148
+ switch (_a.label) {
149
+ case 0:
150
+ if (!this.storage) {
151
+ return [2];
152
+ }
153
+ _a.label = 1;
154
+ case 1:
155
+ _a.trys.push([1, 3, , 4]);
156
+ val = {
157
+ version: version || 'localCachev1',
158
+ content: value,
159
+ };
160
+ return [4, this.storage.setItem(key, JSON.stringify(val))];
161
+ case 2:
162
+ _a.sent();
163
+ return [3, 4];
164
+ case 3:
165
+ e_1 = _a.sent();
166
+ return [2];
167
+ case 4: return [2];
168
+ }
169
+ });
170
+ });
171
+ };
172
+ CloudbaseCache.prototype.getStore = function (key, version) {
173
+ var _a;
174
+ if (this.mode === 'async') {
175
+ printWarn(ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use getStoreAsync insteed');
176
+ return;
177
+ }
178
+ try {
179
+ if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
180
+ return process.env.tcb_token;
181
+ }
182
+ if (!this.storage) {
183
+ return '';
184
+ }
185
+ }
186
+ catch (e) {
187
+ return '';
188
+ }
189
+ version = version || 'localCachev1';
190
+ var content = this.storage.getItem(key);
191
+ if (!content) {
192
+ return '';
193
+ }
194
+ if (content.indexOf(version) >= 0) {
195
+ var d = JSON.parse(content);
196
+ return d.content;
197
+ }
198
+ return '';
199
+ };
200
+ CloudbaseCache.prototype.getStoreAsync = function (key, version) {
201
+ var _a;
202
+ return __awaiter(this, void 0, void 0, function () {
203
+ var content, d;
204
+ return __generator(this, function (_b) {
205
+ switch (_b.label) {
206
+ case 0:
207
+ try {
208
+ if (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.tcb_token)) {
209
+ return [2, process.env.tcb_token];
210
+ }
211
+ if (!this.storage) {
212
+ return [2, ''];
213
+ }
214
+ }
215
+ catch (e) {
216
+ return [2, ''];
217
+ }
218
+ version = version || 'localCachev1';
219
+ return [4, this.storage.getItem(key)];
220
+ case 1:
221
+ content = _b.sent();
222
+ if (!content) {
223
+ return [2, ''];
224
+ }
225
+ if (content.indexOf(version) >= 0) {
226
+ d = JSON.parse(content);
227
+ return [2, d.content];
228
+ }
229
+ return [2, ''];
230
+ }
231
+ });
232
+ });
233
+ };
234
+ CloudbaseCache.prototype.removeStore = function (key) {
235
+ if (this.mode === 'async') {
236
+ printWarn(ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use removeStoreAsync insteed');
237
+ return;
238
+ }
239
+ this.storage.removeItem(key);
240
+ };
241
+ CloudbaseCache.prototype.removeStoreAsync = function (key) {
242
+ return __awaiter(this, void 0, void 0, function () {
243
+ return __generator(this, function (_a) {
244
+ switch (_a.label) {
245
+ case 0: return [4, this.storage.removeItem(key)];
246
+ case 1:
247
+ _a.sent();
248
+ return [2];
249
+ }
250
+ });
251
+ });
252
+ };
253
+ return CloudbaseCache;
254
+ }());
255
+ export { CloudbaseCache };
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlicy9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFvQixlQUFlLEVBQXVCLE1BQU0sOEJBQThCLENBQUE7QUFHckcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUtqRDtJQUE2QixrQ0FBZTtJQUUxQyx3QkFBWSxJQUFTO1FBQXJCLFlBQ0UsaUJBQU8sU0FLUjtRQUpDLEtBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1NBQ3pCOztJQUNILENBQUM7SUFDTSxnQ0FBTyxHQUFkLFVBQWUsR0FBVyxFQUFFLEtBQVU7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ3ZDLENBQUM7SUFDTSxnQ0FBTyxHQUFkLFVBQWUsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFDTSxtQ0FBVSxHQUFqQixVQUFrQixHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUNNLDhCQUFLLEdBQVo7UUFDRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFBO0lBQ2pDLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFyQkQsQ0FBNkIsZUFBZSxHQXFCM0M7QUFJRCxTQUFTLGFBQWEs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Q0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFDWSx5Q0FBZ0IsR0FBN0IsVUFBOEIsR0FBVzs7Ozs0QkFDdkMsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQWxDLFNBQWtDLENBQUE7Ozs7O0tBQ25DO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBeElELElBd0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmFnZUludGVyZmFjZSwgQWJzdHJhY3RTdG9yYWdlLCBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IElDbG91ZGJhc2VDYWNoZSwgSUNhY2hlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jYWNoZSdcbmltcG9ydCB7IEtWLCBQZXJzaXN0ZW5jZSwgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBwcmludFdhcm4gfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBFUlJPUlMsIGdldFNka05hbWUgfSBmcm9tICcuLi9jb25zdGFudHMnXG5cbi8qKlxuICogcGVyc2l0ZW5jZT1ub25l5pe255m75b2V5oCB5L+d5a2Y5Zyo5YaF5a2Y5LitXG4gKi9cbmNsYXNzIFRjYkNhY2hlT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RTdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHJvb3Q6IGFueSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgaWYgKCFyb290LnRjYkNhY2hlT2JqZWN0KSB7XG4gICAgICByb290LnRjYkNhY2hlT2JqZWN0ID0ge31cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnJvb3QudGNiQ2FjaGVPYmplY3Rba2V5XSA9IHZhbHVlXG4gIH1cbiAgcHVibGljIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290LnRjYkNhY2hlT2JqZWN0W2tleV1cbiAgfVxuICBwdWJsaWMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLnJvb3QudGNiQ2FjaGVPYmplY3Rba2V5XVxuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBkZWxldGUgdGhpcy5yb290LnRjYkNhY2hlT2JqZWN0XG4gIH1cbn1cbi8qKlxuICog5bel5Y6C5Ye95pWwXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UocGVyc2lzdGVuY2U6IFBlcnNpc3RlbmNlLCBhZGFwdGVyOiBTREtBZGFwdGVySW50ZXJmYWNlKTogU3RvcmFnZUludGVyZmFjZSB7XG4gIHN3aXRjaCAocGVyc2lzdGVuY2UpIHtcbiAgICBjYXNlICdsb2NhbCc6XG4gICAgICBpZiAoIWFkYXB0ZXIubG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdsb2NhbFN0b3JhZ2UgaXMgbm90IHN1cHBvcnRlZCBvbiBjdXJyZW50IHBsYXRmb3JtJylcbiAgICAgICAgLy8g5LiN5pSv5oyBbG9jYWxzdG9yYWdl55qE5bmz5Y+w6ZmN57qn5Li6bm9uZVxuICAgICAgICByZXR1cm4gbmV3IFRjYkNhY2hlT2JqZWN0KGFkYXB0ZXIucm9vdClcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZGFwdGVyLmxvY2FsU3RvcmFnZVxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIG5ldyBUY2JDYWNoZU9iamVjdChhZGFwdGVyLnJvb3QpXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICghYWRhcHRlci5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2xvY2FsU3RvcmFnZSBpcyBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgcGxhdGZvcm0nKVxuICAgICAgICAvLyDkuI3mlK/mjIFsb2NhbHN0b3JhZ2XnmoTlubPlj7DpmY3nuqfkuLpub25lXG4gICAgICAgIHJldHVybiBuZXcgVGNiQ2FjaGVPYmplY3QoYWRhcHRlci5yb290KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFkYXB0ZXIubG9jYWxTdG9yYWdlXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUNhY2hlIGltcGxlbWVudHMgSUNsb3VkYmFzZUNhY2hlIHtcbiAgcHVibGljIGtleXM6IEtWPHN0cmluZz4gPSB7fTtcblxuICBwcml2YXRlIHBlcnNpc3RlbmNlVGFnOiBQZXJzaXN0ZW5jZTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUluZm86IElDbG91ZGJhc2VQbGF0Zm9ybUluZm87XG4gIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZUludGVyZmFjZTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElDYWNoZUNvbmZpZykge1xuICAgIGNvbnN0IHsgcGVyc2lzdGVuY2UsIHBsYXRmb3JtSW5mbyA9IHt9LCBrZXlzID0ge30gfSA9IGNvbmZpZ1xuICAgIHRoaXMucGxhdGZvcm1JbmZvID0gcGxhdGZvcm1JbmZvXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VUYWcgPSB0aGlzLnBsYXRmb3JtSW5mby5hZGFwdGVyLnByaW1hcnlTdG9yYWdlIHx8IHBlcnNpc3RlbmNlXG4gICAgICB0aGlzLnN0b3JhZ2UgPSBjcmVhdGVTdG9yYWdlKHRoaXMucGVyc2lzdGVuY2VUYWcsIHRoaXMucGxhdGZvcm1JbmZvLmFkYXB0ZXIpXG4gICAgICB0aGlzLmtleXMgPSBrZXlzXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAZ2V0dGVyIHN0b3JhZ2XmqKHlvI8t5ZCM5q2lL+W8guatpVxuICAgKi9cbiAgZ2V0IG1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5tb2RlIHx8ICdzeW5jJ1xuICB9XG4gIGdldCBwZXJzaXN0ZW5jZSgpOiBQZXJzaXN0ZW5jZSB7XG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2VUYWdcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdG9yZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgdmVyc2lvbj86IGFueSkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBzZXRTdG9yZUFzeW5jIGluc3RlZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghdGhpcy5zdG9yYWdlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsID0ge1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICdsb2NhbENhY2hldjEnLFxuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb2RlOiBFUlJPUlMuT1BFUkFUSU9OX0ZBSUwsXG4gICAgICAgIG1zZzogYFske2dldFNka05hbWUoKX1dWyR7RVJST1JTLk9QRVJBVElPTl9GQUlMfV1zZXRTdG9yZSBmYWlsZWRgLFxuICAgICAgICBpbmZvOiBlLFxuICAgICAgfSkpXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cbiAgcHVibGljIGFzeW5jIHNldFN0b3JlQXN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHZlcnNpb24/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc3RvcmFnZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbCA9IHtcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiB8fCAnbG9jYWxDYWNoZXYxJyxcbiAgICAgICAgY29udGVudDogdmFsdWUsXG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbCkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cbiAgcHVibGljIGdldFN0b3JlKGtleTogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIGdldFN0b3JlQXN5bmMgaW5zdGVlZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIOa1i+ivleeUqOS+i+S9v+eUqFxuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8udGNiX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi50Y2JfdG9rZW5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgJ2xvY2FsQ2FjaGV2MSdcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAoY29udGVudC5pbmRleE9mKHZlcnNpb24pID49IDApIHtcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgICByZXR1cm4gZC5jb250ZW50XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG4gIHB1YmxpYyBhc3luYyBnZXRTdG9yZUFzeW5jKGtleTogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOa1i+ivleeUqOS+i+S9v+eUqFxuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8udGNiX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi50Y2JfdG9rZW5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgJ2xvY2FsQ2FjaGV2MSdcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAoY29udGVudC5pbmRleE9mKHZlcnNpb24pID49IDApIHtcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgICByZXR1cm4gZC5jb250ZW50XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG4gIHB1YmxpYyByZW1vdmVTdG9yZShrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIHByaW50V2FybihFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSByZW1vdmVTdG9yZUFzeW5jIGluc3RlZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlU3RvcmVBc3luYyhrZXk6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { ICloudbaseEventEmitter } from '@cloudbase/types/events';
2
+ interface IEvent {
3
+ name: string;
4
+ target: any;
5
+ data: any;
6
+ }
7
+ export declare class CloudbaseEvent implements IEvent {
8
+ readonly name: string;
9
+ target: any;
10
+ data: any;
11
+ constructor(name: string, data: any);
12
+ }
13
+ export declare class IErrorEvent extends CloudbaseEvent {
14
+ readonly error: Error;
15
+ constructor(error: Error, data?: any);
16
+ }
17
+ export declare class CloudbaseEventEmitter implements ICloudbaseEventEmitter {
18
+ private readonly listeners;
19
+ on(name: string, listener: Function): this;
20
+ off(name: string, listener: Function): this;
21
+ fire(event: string | CloudbaseEvent, data?: any): this;
22
+ private listens;
23
+ }
24
+ export declare function addEventListener(event: string, callback: Function): void;
25
+ export declare function activateEvent(event: string, data?: any): void;
26
+ export declare function removeEventListener(event: string, callback: Function): void;
27
+ export {};