@cloudbase/utilities 2.5.7-beta.0 → 2.5.20-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,98 @@
|
|
|
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 __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
15
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
16
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
17
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
18
|
+
r[k] = a[j];
|
|
19
|
+
return r;
|
|
20
|
+
};
|
|
21
|
+
import { isString, isInstanceOf } from './util';
|
|
22
|
+
function customeAddEventListener(name, listener, listeners) {
|
|
23
|
+
listeners[name] = listeners[name] || [];
|
|
24
|
+
listeners[name].push(listener);
|
|
25
|
+
}
|
|
26
|
+
function customRemoveEventListener(name, listener, listeners) {
|
|
27
|
+
if (listeners === null || listeners === void 0 ? void 0 : listeners[name]) {
|
|
28
|
+
var index = listeners[name].indexOf(listener);
|
|
29
|
+
if (index !== -1) {
|
|
30
|
+
listeners[name].splice(index, 1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
var CloudbaseEvent = (function () {
|
|
35
|
+
function CloudbaseEvent(name, data) {
|
|
36
|
+
this.data = data || null;
|
|
37
|
+
this.name = name;
|
|
38
|
+
}
|
|
39
|
+
return CloudbaseEvent;
|
|
40
|
+
}());
|
|
41
|
+
export { CloudbaseEvent };
|
|
42
|
+
var IErrorEvent = (function (_super) {
|
|
43
|
+
__extends(IErrorEvent, _super);
|
|
44
|
+
function IErrorEvent(error, data) {
|
|
45
|
+
var _this = _super.call(this, 'error', { error: error, data: data }) || this;
|
|
46
|
+
_this.error = error;
|
|
47
|
+
return _this;
|
|
48
|
+
}
|
|
49
|
+
return IErrorEvent;
|
|
50
|
+
}(CloudbaseEvent));
|
|
51
|
+
export { IErrorEvent };
|
|
52
|
+
var CloudbaseEventEmitter = (function () {
|
|
53
|
+
function CloudbaseEventEmitter() {
|
|
54
|
+
this.listeners = {};
|
|
55
|
+
}
|
|
56
|
+
CloudbaseEventEmitter.prototype.on = function (name, listener) {
|
|
57
|
+
customeAddEventListener(name, listener, this.listeners);
|
|
58
|
+
return this;
|
|
59
|
+
};
|
|
60
|
+
CloudbaseEventEmitter.prototype.off = function (name, listener) {
|
|
61
|
+
customRemoveEventListener(name, listener, this.listeners);
|
|
62
|
+
return this;
|
|
63
|
+
};
|
|
64
|
+
CloudbaseEventEmitter.prototype.fire = function (event, data) {
|
|
65
|
+
if (isInstanceOf(event, IErrorEvent)) {
|
|
66
|
+
console.error(event.error);
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
var ev = isString(event) ? new CloudbaseEvent(event, data || {}) : event;
|
|
70
|
+
var name = ev.name;
|
|
71
|
+
if (this.listens(name)) {
|
|
72
|
+
ev.target = this;
|
|
73
|
+
var handlers = this.listeners[name] ? __spreadArrays(this.listeners[name]) : [];
|
|
74
|
+
for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {
|
|
75
|
+
var fn = handlers_1[_i];
|
|
76
|
+
fn.call(this, ev);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return this;
|
|
80
|
+
};
|
|
81
|
+
CloudbaseEventEmitter.prototype.listens = function (name) {
|
|
82
|
+
return this.listeners[name] && this.listeners[name].length > 0;
|
|
83
|
+
};
|
|
84
|
+
return CloudbaseEventEmitter;
|
|
85
|
+
}());
|
|
86
|
+
export { CloudbaseEventEmitter };
|
|
87
|
+
var eventEmitter = new CloudbaseEventEmitter();
|
|
88
|
+
export function addEventListener(event, callback) {
|
|
89
|
+
eventEmitter.on(event, callback);
|
|
90
|
+
}
|
|
91
|
+
export function activateEvent(event, data) {
|
|
92
|
+
if (data === void 0) { data = {}; }
|
|
93
|
+
eventEmitter.fire(event, data);
|
|
94
|
+
}
|
|
95
|
+
export function removeEventListener(event, callback) {
|
|
96
|
+
eventEmitter.off(event, callback);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnMvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFXL0MsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsUUFBa0IsRUFBRSxTQUFvQjtJQUNyRixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUN2QyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFRRCxTQUFTLHlCQUF5QixDQUFDLElBQVksRUFBRSxRQUFrQixFQUFFLFNBQW9CO0lBQ3ZGLElBQUksU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFHLElBQUksR0FBRztRQUNyQixJQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9DLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ2pDO0tBQ0Y7QUFDSCxDQUFDO0FBWUQ7SUFLRSx3QkFBWSxJQUFZLEVBQUUsSUFBUztRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUE7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUNILHFCQUFDO0FBQUQsQ0FBQyxBQVRELElBU0M7O0FBUUQ7SUFBaUMsK0JBQWM7SUFFN0MscUJBQVksS0FBWSxFQUFFLElBQVU7UUFBcEMsWUFDRSxrQkFBTSxPQUFPLEVBQUUsRUFBRSxLQUFLLE9BQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLFNBRWhDO1FBREMsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7O0lBQ3BCLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUFORCxDQUFpQyxjQUFjLEdBTTlDOztBQUtEO0lBQUE7UUFPbUIsY0FBUyxHQUFjLEVBQUUsQ0FBQztJQThEN0MsQ0FBQztJQXJEUSxrQ0FBRSxHQUFULFVBQVUsSUFBWSxFQUFFLFFBQWtCO1FBQ3hDLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQVFNLG1DQUFHLEdBQVYsVUFBVyxJQUFZLEVBQUUsUUFBa0I7UUFDekMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBT00sb0NBQUksR0FBWCxVQUFZLEtBQThCLEVBQUUsSUFBVTtRQUVwRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBRSxLQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzNDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxJQUFNLEVBQUUsR0FBbUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxLQUFlLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUF1QixDQUFBO1FBRTlHLElBQUEsSUFBSSxHQUFLLEVBQUUsS0FBUCxDQUFPO1FBRW5CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUVoQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3RFLEtBQWlCLFVBQVEsRUFBUixxQkFBUSxFQUFSLHNCQUFRLEVBQVIsSUFBUSxFQUFFO2dCQUF0QixJQUFNLEVBQUUsaUJBQUE7Z0JBQ1gsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7YUFDbEI7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQVFPLHVDQUFPLEdBQWYsVUFBZ0IsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFDSCw0QkFBQztBQUFELENBQUMsQUFyRUQsSUFxRUM7O0FBR0QsSUFBTSxZQUFZLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFBO0FBRWhELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsUUFBa0I7SUFDaEUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLElBQWM7SUFBZCxxQkFBQSxFQUFBLFNBQWM7SUFDekQsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsUUFBa0I7SUFDbkUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBpc0luc3RhbmNlT2YgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBMaXN0ZW5lcnMsIElDbG91ZGJhc2VFdmVudEVtaXR0ZXIgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2V2ZW50cydcblxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXIgLSDmt7vliqDnm5HlkKxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0g5ZON5bqU5Ye95pWwXG4gKiBAcGFyYW0ge0xpc3RlbmVyc30gbGlzdGVuZXJzIC0g5bey5a2Y5ZON5bqU5Ye95pWw6ZuG5ZCIXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbWVBZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uLCBsaXN0ZW5lcnM6IExpc3RlbmVycykge1xuICBsaXN0ZW5lcnNbbmFtZV0gPSBsaXN0ZW5lcnNbbmFtZV0gfHwgW11cbiAgbGlzdGVuZXJzW25hbWVdLnB1c2gobGlzdGVuZXIpXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb24gX3JlbW92ZUV2ZW50TGlzdGVuZXIgLSDnp7vpmaTnm5HlkKxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0g5ZON5bqU5Ye95pWwXG4gKiBAcGFyYW0ge0xpc3RlbmVyc30gbGlzdGVuZXJzIC0g5bey5a2Y5ZON5bqU5Ye95pWw6ZuG5ZCIXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbVJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24sIGxpc3RlbmVyczogTGlzdGVuZXJzKSB7XG4gIGlmIChsaXN0ZW5lcnM/LltuYW1lXSkge1xuICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzW25hbWVdLmluZGV4T2YobGlzdGVuZXIpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgbGlzdGVuZXJzW25hbWVdLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cbmludGVyZmFjZSBJRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRhcmdldDogYW55O1xuICBkYXRhOiBhbnk7XG59XG4vKipcbiAqIOiHquWumuS5ieS6i+S7tlxuICogQGNsYXNzIENsb3VkYmFzZUV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIOexu+Wei1xuICogQHBhcmFtIHthbnl9IGRhdGEgLSDmlbDmja5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUV2ZW50IGltcGxlbWVudHMgSUV2ZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHRhcmdldDogYW55O1xuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YSB8fCBudWxsXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICB9XG59XG4vKipcbiAqIOiHquWumuS5iemUmeivr+S6i+S7tlxuICogQGNsYXNzIElFcnJvckV2ZW50XG4gKiBAZXh0ZW5kcyBDbG91ZGJhc2VFdmVudFxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSDplJnor6/kv6Hmga/lr7nosaFcbiAqIEBwYXJhbSB7YW55fSBkYXRhICAtIOaVsOaNrlxuICovXG5leHBvcnQgY2xhc3MgSUVycm9yRXZlbnQgZXh0ZW5kcyBDbG91ZGJhc2VFdmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcjogRXJyb3I7XG4gIGNvbnN0cnVjdG9yKGVycm9yOiBFcnJvciwgZGF0YT86IGFueSkge1xuICAgIHN1cGVyKCdlcnJvcicsIHsgZXJyb3IsIGRhdGEgfSlcbiAgICB0aGlzLmVycm9yID0gZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIEBjbGFzcyBDbG91ZGJhc2VFdmVudEVtaXR0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkYmFzZUV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElDbG91ZGJhc2VFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJlYWRvbmx5XG4gICAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJzfSBsaXN0ZW5lcnMgLSDlk43lupTlh73mlbDpm4blkIhcbiAgICogQGRlZmF1bHQgYHt9YFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IExpc3RlbmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEBtZXRob2Qgb24gLSDmt7vliqDnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uKTogdGhpcyB7XG4gICAgY3VzdG9tZUFkZEV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIHRoaXMubGlzdGVuZXJzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG1ldGhvZCBvZmYgLSDnp7vpmaTnm5HlkKxcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudOWQjeensFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIOWTjeW6lOWHveaVsFxuICAgKiBAcmV0dXJuIGB0aGlzYFxuICAgKi9cbiAgcHVibGljIG9mZihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IHRoaXMge1xuICAgIGN1c3RvbVJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIHRoaXMubGlzdGVuZXJzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLyoqXG4gICAqIEBwdWJsaWNcbiAgICogQG1ldGhvZCBmaXJlIC0g6Kem5Y+R5LqL5Lu2XG4gICAqIEBwYXJhbSB7c3RyaW5nfENsb3VkYmFzZUV2ZW50fSBldmVudCAtIGV2ZW50XG4gICAqIEByZXR1cm4gYHRoaXNgXG4gICAqL1xuICBwdWJsaWMgZmlyZShldmVudDogc3RyaW5nIHwgQ2xvdWRiYXNlRXZlbnQsIGRhdGE/OiBhbnkpOiB0aGlzIHtcbiAgICAvLyDmiZPljbDplJnor6/kv6Hmga9cbiAgICBpZiAoaXNJbnN0YW5jZU9mKGV2ZW50LCBJRXJyb3JFdmVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKGV2ZW50IGFzIElFcnJvckV2ZW50KS5lcnJvcilcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgZXY6IENsb3VkYmFzZUV2ZW50ID0gaXNTdHJpbmcoZXZlbnQpID8gbmV3IENsb3VkYmFzZUV2ZW50KGV2ZW50IGFzIHN0cmluZywgZGF0YSB8fCB7fSkgOiBldmVudCBhcyBDbG91ZGJhc2VFdmVudFxuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBldlxuXG4gICAgaWYgKHRoaXMubGlzdGVucyhuYW1lKSkge1xuICAgICAgZXYudGFyZ2V0ID0gdGhpc1xuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVdID8gWy4uLnRoaXMubGlzdGVuZXJzW25hbWVdXSA6IFtdXG4gICAgICBmb3IgKGNvbnN0IGZuIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgIGZuLmNhbGwodGhpcywgZXYpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWV0aG9kIGxpc3RlbnMgLSDliKTmlq3mmK/lkKbnm5HlkKzkuoZuYW1l5LqL5Lu2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnTlkI3np7BcbiAgICogQHJldHVybiBgYm9vbGVhbmBcbiAgICovXG4gIHByaXZhdGUgbGlzdGVucyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnNbbmFtZV0gJiYgdGhpcy5saXN0ZW5lcnNbbmFtZV0ubGVuZ3RoID4gMFxuICB9XG59XG5cblxuY29uc3QgZXZlbnRFbWl0dGVyID0gbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBldmVudEVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aXZhdGVFdmVudChldmVudDogc3RyaW5nLCBkYXRhOiBhbnkgPSB7fSkge1xuICBldmVudEVtaXR0ZXIuZmlyZShldmVudCwgZGF0YSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gIGV2ZW50RW1pdHRlci5vZmYoZXZlbnQsIGNhbGxiYWNrKVxufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { KV } from '@cloudbase/types';
|
|
2
|
+
export declare function isArray(val: any): boolean;
|
|
3
|
+
export declare function isString(val: any): boolean;
|
|
4
|
+
export declare function isUndefined(val: any): boolean;
|
|
5
|
+
export declare function isPalinObject(val: any): boolean;
|
|
6
|
+
export declare function isNull(val: any): boolean;
|
|
7
|
+
export declare function isInstanceOf(instance: any, construct: any): boolean;
|
|
8
|
+
export declare function isFormData(val: any): boolean;
|
|
9
|
+
export declare function genSeqId(): string;
|
|
10
|
+
export declare function formatUrl(PROTOCOL: string, url: string, query?: KV<any>): string;
|
|
11
|
+
export declare function createSign(payload: KV<any>, secret: string): string;
|
|
12
|
+
export declare function toQueryString(query?: KV<any>): string;
|
|
13
|
+
export declare function getQuery(name: string, url?: string): string | false;
|
|
14
|
+
export declare const getHash: (name: string) => string;
|
|
15
|
+
export declare function removeParam(key: string, sourceURL: string): string;
|
|
16
|
+
export declare function createPromiseCallback(): any;
|
|
17
|
+
export declare function execCallback(fn: Function | null | undefined, err: any, data?: any): any;
|
|
18
|
+
export declare function printWarn(error: string, msg: string): void;
|
|
19
|
+
export declare function printError(error: string, msg: string): void;
|
|
20
|
+
export declare function printInfo(error: string, msg: string): void;
|
|
21
|
+
export declare function throwError(error: string, msg: string): void;
|
|
22
|
+
interface IPrintGroupLogOptions {
|
|
23
|
+
title: string;
|
|
24
|
+
subtitle: string | object;
|
|
25
|
+
content: {
|
|
26
|
+
type: 'info' | 'warn' | 'error';
|
|
27
|
+
body: string | Error;
|
|
28
|
+
}[];
|
|
29
|
+
printTrace?: boolean;
|
|
30
|
+
collapsed?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function printGroupLog(options: IPrintGroupLogOptions): void;
|
|
33
|
+
export declare const sleep: (ms?: number) => Promise<unknown>;
|
|
34
|
+
export declare function transformPhone(phoneNumber: string): string;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import hs256 from 'crypto-js/hmac-sha256';
|
|
2
|
+
import base64 from 'crypto-js/enc-base64';
|
|
3
|
+
import utf8 from 'crypto-js/enc-utf8';
|
|
4
|
+
import { getSdkName } from '../constants';
|
|
5
|
+
export function isArray(val) {
|
|
6
|
+
return Object.prototype.toString.call(val) === '[object Array]';
|
|
7
|
+
}
|
|
8
|
+
export function isString(val) {
|
|
9
|
+
return typeof val === 'string';
|
|
10
|
+
}
|
|
11
|
+
export function isUndefined(val) {
|
|
12
|
+
return typeof val === 'undefined';
|
|
13
|
+
}
|
|
14
|
+
export function isPalinObject(val) {
|
|
15
|
+
return Object.prototype.toString.call(val) === '[object Object]';
|
|
16
|
+
}
|
|
17
|
+
export function isNull(val) {
|
|
18
|
+
return Object.prototype.toString.call(val) === '[object Null]';
|
|
19
|
+
}
|
|
20
|
+
export function isInstanceOf(instance, construct) {
|
|
21
|
+
return instance instanceof construct;
|
|
22
|
+
}
|
|
23
|
+
export function isFormData(val) {
|
|
24
|
+
return Object.prototype.toString.call(val) === '[object FormData]';
|
|
25
|
+
}
|
|
26
|
+
export function genSeqId() {
|
|
27
|
+
return Math.random().toString(16)
|
|
28
|
+
.slice(2);
|
|
29
|
+
}
|
|
30
|
+
export function formatUrl(PROTOCOL, url, query) {
|
|
31
|
+
if (query === void 0) { query = {}; }
|
|
32
|
+
var urlHasQuery = /\?/.test(url);
|
|
33
|
+
var queryString = '';
|
|
34
|
+
Object.keys(query).forEach(function (key) {
|
|
35
|
+
if (queryString === '') {
|
|
36
|
+
!urlHasQuery && (url += '?');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
queryString += '&';
|
|
40
|
+
}
|
|
41
|
+
queryString += key + "=" + encodeURIComponent(query[key]);
|
|
42
|
+
});
|
|
43
|
+
url += queryString;
|
|
44
|
+
if (/^http(s)?:\/\//.test(url)) {
|
|
45
|
+
return url;
|
|
46
|
+
}
|
|
47
|
+
return "" + PROTOCOL + url;
|
|
48
|
+
}
|
|
49
|
+
function base64url(source) {
|
|
50
|
+
var encodedSource = base64.stringify(source);
|
|
51
|
+
encodedSource = encodedSource.replace(/=+$/, '');
|
|
52
|
+
encodedSource = encodedSource.replace(/\+/g, '-');
|
|
53
|
+
encodedSource = encodedSource.replace(/\//g, '_');
|
|
54
|
+
return encodedSource;
|
|
55
|
+
}
|
|
56
|
+
export function createSign(payload, secret) {
|
|
57
|
+
var header = {
|
|
58
|
+
alg: 'HS256',
|
|
59
|
+
typ: 'JWT',
|
|
60
|
+
};
|
|
61
|
+
var headerStr = base64url(utf8.parse(JSON.stringify(header)));
|
|
62
|
+
var payloadStr = base64url(utf8.parse(JSON.stringify(payload)));
|
|
63
|
+
var token = headerStr + "." + payloadStr;
|
|
64
|
+
var sign = base64url(hs256(token, secret));
|
|
65
|
+
return token + "." + sign;
|
|
66
|
+
}
|
|
67
|
+
export function toQueryString(query) {
|
|
68
|
+
if (query === void 0) { query = {}; }
|
|
69
|
+
var queryString = [];
|
|
70
|
+
Object.keys(query).forEach(function (key) {
|
|
71
|
+
queryString.push(key + "=" + encodeURIComponent(query[key]));
|
|
72
|
+
});
|
|
73
|
+
return queryString.join('&');
|
|
74
|
+
}
|
|
75
|
+
export function getQuery(name, url) {
|
|
76
|
+
if (typeof window === 'undefined') {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
var u = url || window.location.search;
|
|
80
|
+
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
|
81
|
+
var r = u.substr(u.indexOf('?') + 1).match(reg);
|
|
82
|
+
return (r !== null && r !== undefined) ? r[2] : '';
|
|
83
|
+
}
|
|
84
|
+
export var getHash = function (name) {
|
|
85
|
+
if (typeof window === 'undefined') {
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
var matches = window.location.hash.match(new RegExp("[#?&/]" + name + "=([^&#]*)"));
|
|
89
|
+
return matches ? matches[1] : '';
|
|
90
|
+
};
|
|
91
|
+
export function removeParam(key, sourceURL) {
|
|
92
|
+
var rtn = sourceURL.split('?')[0];
|
|
93
|
+
var param;
|
|
94
|
+
var params = [];
|
|
95
|
+
var queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : '';
|
|
96
|
+
if (queryString !== '') {
|
|
97
|
+
params = queryString.split('&');
|
|
98
|
+
for (var i = params.length - 1; i >= 0; i -= 1) {
|
|
99
|
+
param = params[i].split('=')[0];
|
|
100
|
+
if (param === key) {
|
|
101
|
+
params.splice(i, 1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
rtn = rtn + "?" + params.join('&');
|
|
105
|
+
}
|
|
106
|
+
return rtn;
|
|
107
|
+
}
|
|
108
|
+
export function createPromiseCallback() {
|
|
109
|
+
var cb;
|
|
110
|
+
if (!Promise) {
|
|
111
|
+
cb = function () { };
|
|
112
|
+
cb.promise = {};
|
|
113
|
+
var throwPromiseNotDefined = function () {
|
|
114
|
+
throw new Error('Your Node runtime does support ES6 Promises. '
|
|
115
|
+
+ 'Set "global.Promise" to your preferred implementation of promises.');
|
|
116
|
+
};
|
|
117
|
+
Object.defineProperty(cb.promise, 'then', { get: throwPromiseNotDefined });
|
|
118
|
+
Object.defineProperty(cb.promise, 'catch', { get: throwPromiseNotDefined });
|
|
119
|
+
return cb;
|
|
120
|
+
}
|
|
121
|
+
var promise = new Promise(function (resolve, reject) {
|
|
122
|
+
cb = function (err, data) {
|
|
123
|
+
if (err)
|
|
124
|
+
return reject(err);
|
|
125
|
+
return resolve(data);
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
cb.promise = promise;
|
|
129
|
+
return cb;
|
|
130
|
+
}
|
|
131
|
+
export function execCallback(fn, err, data) {
|
|
132
|
+
if (data === void 0) { data = null; }
|
|
133
|
+
if (fn && typeof fn === 'function') {
|
|
134
|
+
return fn(err, data);
|
|
135
|
+
}
|
|
136
|
+
if (err) {
|
|
137
|
+
throw err;
|
|
138
|
+
}
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
export function printWarn(error, msg) {
|
|
142
|
+
console.warn("[" + getSdkName() + "][" + error + "]:" + msg);
|
|
143
|
+
}
|
|
144
|
+
export function printError(error, msg) {
|
|
145
|
+
console.error({
|
|
146
|
+
code: error,
|
|
147
|
+
msg: "[" + getSdkName() + "][" + error + "]:" + msg,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
export function printInfo(error, msg) {
|
|
151
|
+
console.log("[" + getSdkName() + "][" + error + "]:" + msg);
|
|
152
|
+
}
|
|
153
|
+
export function throwError(error, msg) {
|
|
154
|
+
throw new Error(JSON.stringify({
|
|
155
|
+
code: error,
|
|
156
|
+
msg: "[" + getSdkName() + "][" + error + "]:" + msg,
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
export function printGroupLog(options) {
|
|
160
|
+
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;
|
|
161
|
+
if (collapsed) {
|
|
162
|
+
console.groupCollapsed(title, subtitle);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.group(title, subtitle);
|
|
166
|
+
}
|
|
167
|
+
for (var _i = 0, content_1 = content; _i < content_1.length; _i++) {
|
|
168
|
+
var tip = content_1[_i];
|
|
169
|
+
var type = tip.type, body = tip.body;
|
|
170
|
+
switch (type) {
|
|
171
|
+
case 'info':
|
|
172
|
+
console.log(body);
|
|
173
|
+
break;
|
|
174
|
+
case 'warn':
|
|
175
|
+
console.warn(body);
|
|
176
|
+
break;
|
|
177
|
+
case 'error':
|
|
178
|
+
console.error(body);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (printTrace) {
|
|
183
|
+
console.trace('stack trace:');
|
|
184
|
+
}
|
|
185
|
+
console.groupEnd();
|
|
186
|
+
}
|
|
187
|
+
export var sleep = function (ms) {
|
|
188
|
+
if (ms === void 0) { ms = 0; }
|
|
189
|
+
return new Promise(function (r) { return setTimeout(r, ms); });
|
|
190
|
+
};
|
|
191
|
+
export function transformPhone(phoneNumber) {
|
|
192
|
+
return "+86" + phoneNumber;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sdUJBQXVCLENBQUE7QUFDekMsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLENBQUE7QUFDekMsT0FBTyxJQUFJLE1BQU0sb0JBQW9CLENBQUE7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVE7SUFDOUIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssZ0JBQWdCLENBQUE7QUFDakUsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBUTtJQUMvQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQTtBQUNoQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sT0FBTyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBQ25DLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVE7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLENBQUE7QUFDbEUsQ0FBQztBQUNELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBUTtJQUM3QixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlLENBQUE7QUFDaEUsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBYSxFQUFFLFNBQWM7SUFDeEQsT0FBTyxRQUFRLFlBQVksU0FBUyxDQUFBO0FBQ3RDLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVE7SUFDakMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFD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LEtBQWQsRUFBRSxJQUFJLEdBQUssR0FBRyxLQUFSLENBQVE7UUFDMUIsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDakIsTUFBSztZQUNQLEtBQUssTUFBTTtnQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNsQixNQUFLO1lBQ1AsS0FBSyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ25CLE1BQUs7U0FDUjtLQUNGO0lBQ0QsSUFBSSxVQUFVLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0tBQzlCO0lBQ0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3BCLENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSxLQUFLLEdBQUcsVUFBQyxFQUFNO0lBQU4sbUJBQUEsRUFBQSxNQUFNO0lBQUssT0FBQSxJQUFJLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQWpCLENBQWlCLENBQUM7QUFBbkMsQ0FBbUMsQ0FBQTtBQUVwRSxNQUFNLFVBQVUsY0FBYyxDQUFDLFdBQW1CO0lBQ2hELE9BQU8sUUFBTSxXQUFhLENBQUE7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoczI1NiBmcm9tICdjcnlwdG8tanMvaG1hYy1zaGEyNTYnXG5pbXBvcnQgYmFzZTY0IGZyb20gJ2NyeXB0by1qcy9lbmMtYmFzZTY0J1xuaW1wb3J0IHV0ZjggZnJvbSAnY3J5cHRvLWpzL2VuYy11dGY4J1xuaW1wb3J0IHsgS1YgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2RrTmFtZSB9IGZyb20gJy4uL2NvbnN0YW50cydcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nXG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXG59XG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnXG59XG5leHBvcnQgZnVuY3Rpb24gaXNQYWxpbk9iamVjdCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsKHZhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgTnVsbF0nXG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKGluc3RhbmNlOiBhbnksIGNvbnN0cnVjdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIGNvbnN0cnVjdFxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybURhdGEodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGb3JtRGF0YV0nXG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuU2VxSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpXG4gICAgLnNsaWNlKDIpXG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VXJsKFBST1RPQ09MOiBzdHJpbmcsIHVybDogc3RyaW5nLCBxdWVyeTogS1Y8YW55PiA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgdXJsSGFzUXVlcnkgPSAvXFw/Ly50ZXN0KHVybClcbiAgbGV0IHF1ZXJ5U3RyaW5nID0gJydcbiAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChxdWVyeVN0cmluZyA9PT0gJycpIHtcbiAgICAgICF1cmxIYXNRdWVyeSAmJiAodXJsICs9ICc/JylcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnXG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nICs9IGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnlba2V5XSl9YFxuICB9KVxuICB1cmwgKz0gcXVlcnlTdHJpbmdcbiAgaWYgKC9eaHR0cChzKT86XFwvXFwvLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gdXJsXG4gIH1cbiAgcmV0dXJuIGAke1BST1RPQ09MfSR7dXJsfWBcbn1cblxuZnVuY3Rpb24gYmFzZTY0dXJsKHNvdXJjZTogS1Y8YW55Pik6IHN0cmluZyB7XG4gIGxldCBlbmNvZGVkU291cmNlID0gYmFzZTY0LnN0cmluZ2lmeShzb3VyY2UpXG5cbiAgZW5jb2RlZFNvdXJjZSA9IGVuY29kZWRTb3VyY2UucmVwbGFjZSgvPSskLywgJycpXG4gIGVuY29kZWRTb3VyY2UgPSBlbmNvZGVkU291cmNlLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gIGVuY29kZWRTb3VyY2UgPSBlbmNvZGVkU291cmNlLnJlcGxhY2UoL1xcLy9nLCAnXycpXG5cbiAgcmV0dXJuIGVuY29kZWRTb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZ24ocGF5bG9hZDogS1Y8YW55Piwgc2VjcmV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZWFkZXIgPSB7XG4gICAgYWxnOiAnSFMyNTYnLFxuICAgIHR5cDogJ0pXVCcsXG4gIH1cbiAgY29uc3QgaGVhZGVyU3RyID0gYmFzZTY0dXJsKHV0ZjgucGFyc2UoSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSkpXG4gIGNvbnN0IHBheWxvYWRTdHIgPSBiYXNlNjR1cmwodXRmOC5wYXJzZShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpXG5cbiAgY29uc3QgdG9rZW4gPSBgJHtoZWFkZXJTdHJ9LiR7cGF5bG9hZFN0cn1gXG4gIGNvbnN0IHNpZ24gPSBiYXNlNjR1cmwoaHMyNTYodG9rZW4sIHNlY3JldCkpXG4gIHJldHVybiBgJHt0b2tlbn0uJHtzaWdufWBcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKHF1ZXJ5OiBLVjxhbnk+ID0ge30pIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBbXVxuICBPYmplY3Qua2V5cyhxdWVyeSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgcXVlcnlTdHJpbmcucHVzaChgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5W2tleV0pfWApXG4gIH0pXG4gIHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5KG5hbWU6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIOWPguaVsO+8muWPmOmHj+WQje+8jHVybOS4uuepuuWImeihqOS7juW9k+WJjemhtemdoueahHVybOS4reWPllxuICBjb25zdCB1ID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2hcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgKF58Jikke25hbWV9PShbXiZdKikoJnwkKWApXG4gIGNvbnN0IHIgPSB1LnN1YnN0cih1LmluZGV4T2YoJz8nKSArIDEpLm1hdGNoKHJlZylcbiAgcmV0dXJuIChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCkgPyByWzJdIDogJydcbn1cblxuZXhwb3J0IGNvbnN0IGdldEhhc2ggPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5tYXRjaChuZXcgUmVnRXhwKGBbIz8mL10ke25hbWV9PShbXiYjXSopYCkpXG4gIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6ICcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQYXJhbShrZXk6IHN0cmluZywgc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgbGV0IHJ0biA9IHNvdXJjZVVSTC5zcGxpdCgnPycpWzBdXG4gIGxldCBwYXJhbVxuICBsZXQgcGFyYW1zID0gW11cbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBzb3VyY2VVUkwuaW5kZXhPZignPycpICE9PSAtMSA/IHNvdXJjZVVSTC5zcGxpdCgnPycpWzFdIDogJydcbiAgaWYgKHF1ZXJ5U3RyaW5nICE9PSAnJykge1xuICAgIHBhcmFtcyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJylcbiAgICBmb3IgKGxldCBpID0gcGFyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgIHBhcmFtID0gcGFyYW1zW2ldLnNwbGl0KCc9JylbMF1cbiAgICAgIGlmIChwYXJhbSA9PT0ga2V5KSB7XG4gICAgICAgIHBhcmFtcy5zcGxpY2UoaSwgMSlcbiAgICAgIH1cbiAgICB9XG4gICAgcnRuID0gYCR7cnRufT8ke3BhcmFtcy5qb2luKCcmJyl9YFxuICB9XG4gIHJldHVybiBydG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb21pc2VDYWxsYmFjaygpIHtcbiAgbGV0IGNiOiBhbnlcbiAgaWYgKCFQcm9taXNlKSB7XG4gICAgY2IgPSAoKSA9PiB7IH1cbiAgICBjYi5wcm9taXNlID0ge31cblxuICAgIGNvbnN0IHRocm93UHJvbWlzZU5vdERlZmluZWQgPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgTm9kZSBydW50aW1lIGRvZXMgc3VwcG9ydCBFUzYgUHJvbWlzZXMuICdcbiAgICAgICAgKyAnU2V0IFwiZ2xvYmFsLlByb21pc2VcIiB0byB5b3VyIHByZWZlcnJlZCBpbXBsZW1lbnRhdGlvbiBvZiBwcm9taXNlcy4nKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYi5wcm9taXNlLCAndGhlbicsIHsgZ2V0OiB0aHJvd1Byb21pc2VOb3REZWZpbmVkIH0pXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNiLnByb21pc2UsICdjYXRjaCcsIHsgZ2V0OiB0aHJvd1Byb21pc2VOb3REZWZpbmVkIH0pXG4gICAgcmV0dXJuIGNiXG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNiID0gKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXR1cm4gcmVzb2x2ZShkYXRhKVxuICAgIH1cbiAgfSlcbiAgY2IucHJvbWlzZSA9IHByb21pc2VcbiAgcmV0dXJuIGNiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjQ2FsbGJhY2soZm46IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCwgZXJyOiBhbnksIGRhdGEgPSBudWxsKSB7XG4gIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZm4oZXJyLCBkYXRhKVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXYXJuKGVycm9yOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGNvbnNvbGUud2FybihgWyR7Z2V0U2RrTmFtZSgpfV1bJHtlcnJvcn1dOiR7bXNnfWApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGNvbnNvbGUuZXJyb3Ioe1xuICAgIGNvZGU6IGVycm9yLFxuICAgIG1zZzogYFske2dldFNka05hbWUoKX1dWyR7ZXJyb3J9XToke21zZ31gLFxuICB9KVxufVxuZXhwb3J0IGZ1bmN0aW9uIHByaW50SW5mbyhlcnJvcjogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICBjb25zb2xlLmxvZyhgWyR7Z2V0U2RrTmFtZSgpfV1bJHtlcnJvcn1dOiR7bXNnfWApXG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvcjogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgIGNvZGU6IGVycm9yLFxuICAgIG1zZzogYFske2dldFNka05hbWUoKX1dWyR7ZXJyb3J9XToke21zZ31gLFxuICB9KSlcbn1cblxuaW50ZXJmYWNlIElQcmludEdyb3VwTG9nT3B0aW9ucyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmcgfCBvYmplY3Q7XG4gIGNvbnRlbnQ6IHtcbiAgICB0eXBlOiAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InLFxuICAgIGJvZHk6IHN0cmluZyB8IEVycm9yO1xuICB9W107XG4gIHByaW50VHJhY2U/OiBib29sZWFuO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByaW50R3JvdXBMb2cob3B0aW9uczogSVByaW50R3JvdXBMb2dPcHRpb25zKSB7XG4gIGNvbnN0IHsgdGl0bGUsIHN1YnRpdGxlID0gJycsIGNvbnRlbnQgPSBbXSwgcHJpbnRUcmFjZSA9IGZhbHNlLCBjb2xsYXBzZWQgPSBmYWxzZSB9ID0gb3B0aW9uc1xuICBpZiAoY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5ncm91cENvbGxhcHNlZCh0aXRsZSwgc3VidGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5ncm91cCh0aXRsZSwgc3VidGl0bGUpXG4gIH1cbiAgZm9yIChjb25zdCB0aXAgb2YgY29udGVudCkge1xuICAgIGNvbnN0IHsgdHlwZSwgYm9keSB9ID0gdGlwXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgY29uc29sZS5sb2coYm9keSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICBjb25zb2xlLndhcm4oYm9keSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY29uc29sZS5lcnJvcihib2R5KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuICBpZiAocHJpbnRUcmFjZSkge1xuICAgIGNvbnNvbGUudHJhY2UoJ3N0YWNrIHRyYWNlOicpXG4gIH1cbiAgY29uc29sZS5ncm91cEVuZCgpXG59XG5cbmV4cG9ydCBjb25zdCBzbGVlcCA9IChtcyA9IDApID0+IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCBtcykpXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1QaG9uZShwaG9uZU51bWJlcjogc3RyaW5nKSB7XG4gIHJldHVybiBgKzg2JHtwaG9uZU51bWJlcn1gXG59XG5cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/utilities",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.20-beta.0",
|
|
4
4
|
"description": "cloudbase javascript sdk utilities",
|
|
5
|
-
"main": "dist/index.js",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist/**"
|
|
9
|
-
],
|
|
10
8
|
"scripts": {
|
|
11
|
-
"tsc": "rm -rf dist/ && tsc -p tsconfig.json",
|
|
9
|
+
"tsc": "rm -rf dist/ && tsc -p tsconfig.json && tsc -p tsconfig.esm.json",
|
|
12
10
|
"lint": "eslint --fix \"./src/**/*.ts\"",
|
|
13
11
|
"build": "npm run lint&& npm run tsc",
|
|
14
12
|
"precommit": "lint-staged"
|
|
@@ -24,17 +22,9 @@
|
|
|
24
22
|
],
|
|
25
23
|
"author": "",
|
|
26
24
|
"license": "Apache-2.0",
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@tencent/eslint-config-tencent": "^1.0.4",
|
|
29
|
-
"@types/node": "^13.13.2",
|
|
30
|
-
"@typescript-eslint/eslint-plugin": "^5.40.0",
|
|
31
|
-
"@typescript-eslint/parser": "^5.40.0",
|
|
32
|
-
"eslint": "^6.8.0",
|
|
33
|
-
"lint-staged": "^13.0.3"
|
|
34
|
-
},
|
|
35
25
|
"dependencies": {
|
|
36
26
|
"@cloudbase/adapter-interface": "^0.4.0",
|
|
37
|
-
"@cloudbase/types": "^2.5.
|
|
27
|
+
"@cloudbase/types": "^2.5.20-beta.0",
|
|
38
28
|
"crypto-js": "3",
|
|
39
29
|
"jwt-decode": "^3.1.2"
|
|
40
30
|
},
|
|
@@ -43,5 +33,5 @@
|
|
|
43
33
|
"eslint --fix"
|
|
44
34
|
]
|
|
45
35
|
},
|
|
46
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "44cfc8c71c4f51a70ce7afeb42c9d904bba7a869"
|
|
47
37
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { CloudbaseAdapter } from '@cloudbase/adapter-interface'
|
|
2
|
+
import * as Web from './platforms/web'
|
|
3
|
+
import { isArray } from '../libs/util'
|
|
4
|
+
|
|
5
|
+
export enum RUNTIME {
|
|
6
|
+
WEB = 'web',
|
|
7
|
+
WX_MP = 'wx_mp' // 微信小程序
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function useAdapters(adapters: CloudbaseAdapter|CloudbaseAdapter[]) {
|
|
11
|
+
const adapterList: CloudbaseAdapter[] = isArray(adapters) ? adapters as CloudbaseAdapter[] : [adapters as CloudbaseAdapter]
|
|
12
|
+
for (const adapter of adapterList) {
|
|
13
|
+
const { isMatch, genAdapter, runtime } = adapter
|
|
14
|
+
if (isMatch()) {
|
|
15
|
+
return {
|
|
16
|
+
adapter: genAdapter(),
|
|
17
|
+
runtime,
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function useDefaultAdapter() {
|
|
24
|
+
return {
|
|
25
|
+
adapter: Web.genAdapter(),
|
|
26
|
+
runtime: RUNTIME.WEB,
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SDKAdapterInterface,
|
|
3
|
+
AbstractSDKRequest,
|
|
4
|
+
IRequestOptions,
|
|
5
|
+
ResponseObject,
|
|
6
|
+
IUploadRequestOptions,
|
|
7
|
+
IRequestConfig,
|
|
8
|
+
IRequestMethod,
|
|
9
|
+
} from '@cloudbase/adapter-interface'
|
|
10
|
+
import { isFormData, formatUrl, toQueryString } from '../../libs/util'
|
|
11
|
+
import { getProtocol } from '../../constants/common'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @class WebRequest
|
|
15
|
+
*/
|
|
16
|
+
class WebRequest extends AbstractSDKRequest {
|
|
17
|
+
// 默认不限超时
|
|
18
|
+
private readonly timeout: number;
|
|
19
|
+
// 超时提示文案
|
|
20
|
+
private readonly timeoutMsg: string;
|
|
21
|
+
// 超时受限请求类型,默认所有请求均受限
|
|
22
|
+
private readonly restrictedMethods: Array<IRequestMethod>;
|
|
23
|
+
constructor(config: IRequestConfig) {
|
|
24
|
+
super()
|
|
25
|
+
const { timeout, timeoutMsg, restrictedMethods } = config
|
|
26
|
+
this.timeout = timeout || 0
|
|
27
|
+
this.timeoutMsg = timeoutMsg || '请求超时'
|
|
28
|
+
this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download']
|
|
29
|
+
}
|
|
30
|
+
public get(options: IRequestOptions): Promise<ResponseObject> {
|
|
31
|
+
return this.request({
|
|
32
|
+
...options,
|
|
33
|
+
method: 'get',
|
|
34
|
+
}, this.restrictedMethods.includes('get'))
|
|
35
|
+
}
|
|
36
|
+
public post(options: IRequestOptions): Promise<ResponseObject> {
|
|
37
|
+
return this.request({
|
|
38
|
+
...options,
|
|
39
|
+
method: 'post',
|
|
40
|
+
}, this.restrictedMethods.includes('post'))
|
|
41
|
+
}
|
|
42
|
+
public put(options: IRequestOptions): Promise<ResponseObject> {
|
|
43
|
+
return this.request({
|
|
44
|
+
...options,
|
|
45
|
+
method: 'put',
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
public upload(options: IUploadRequestOptions): Promise<ResponseObject> {
|
|
49
|
+
const { data, file, name, method, headers = {} } = options
|
|
50
|
+
const reqMethod = { post: 'post', put: 'put' }[method?.toLowerCase()] || 'put'
|
|
51
|
+
// 上传方式为post时,需转换为FormData
|
|
52
|
+
const formData = new FormData()
|
|
53
|
+
if (reqMethod === 'post') {
|
|
54
|
+
Object.keys(data).forEach((key) => {
|
|
55
|
+
formData.append(key, data[key])
|
|
56
|
+
})
|
|
57
|
+
formData.append('key', name)
|
|
58
|
+
formData.append('file', file)
|
|
59
|
+
return this.request({
|
|
60
|
+
...options,
|
|
61
|
+
data: formData,
|
|
62
|
+
method: reqMethod,
|
|
63
|
+
}, this.restrictedMethods.includes('upload'))
|
|
64
|
+
}
|
|
65
|
+
return this.request({
|
|
66
|
+
...options,
|
|
67
|
+
method: 'put',
|
|
68
|
+
headers,
|
|
69
|
+
body: file,
|
|
70
|
+
}, this.restrictedMethods.includes('upload'))
|
|
71
|
+
}
|
|
72
|
+
public async download(options: IRequestOptions): Promise<any> {
|
|
73
|
+
try {
|
|
74
|
+
const { data } = await this.get({
|
|
75
|
+
...options,
|
|
76
|
+
headers: {}, // 下载资源请求不经过service,header清空
|
|
77
|
+
responseType: 'blob',
|
|
78
|
+
})
|
|
79
|
+
const url = window.URL.createObjectURL(new Blob([data]))
|
|
80
|
+
const fileName = decodeURIComponent(new URL(options.url).pathname.split('/').pop() || '')
|
|
81
|
+
const link = document.createElement('a')
|
|
82
|
+
|
|
83
|
+
link.href = url
|
|
84
|
+
link.setAttribute('download', fileName)
|
|
85
|
+
link.style.display = 'none'
|
|
86
|
+
|
|
87
|
+
document.body.appendChild(link)
|
|
88
|
+
link.click()
|
|
89
|
+
// 回收内存
|
|
90
|
+
window.URL.revokeObjectURL(url)
|
|
91
|
+
document.body.removeChild(link)
|
|
92
|
+
} catch (e) { }
|
|
93
|
+
return new Promise((resolve) => {
|
|
94
|
+
resolve({
|
|
95
|
+
statusCode: 200,
|
|
96
|
+
tempFilePath: options.url,
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @param {IRequestOptions} options
|
|
102
|
+
* @param {boolean} enableAbort 是否超时中断请求
|
|
103
|
+
*/
|
|
104
|
+
protected request(options: IRequestOptions, enableAbort = false): Promise<ResponseObject> {
|
|
105
|
+
const method = (String(options.method)).toLowerCase() || 'get'
|
|
106
|
+
return new Promise((resolve) => {
|
|
107
|
+
const { url, headers = {}, data, responseType, withCredentials, body, onUploadProgress } = options
|
|
108
|
+
const realUrl = formatUrl(getProtocol(), url, method === 'get' ? data : {})
|
|
109
|
+
const ajax = new XMLHttpRequest()
|
|
110
|
+
ajax.open(method, realUrl)
|
|
111
|
+
responseType && (ajax.responseType = responseType)
|
|
112
|
+
Object.keys(headers).forEach((key) => {
|
|
113
|
+
ajax.setRequestHeader(key, headers[key])
|
|
114
|
+
})
|
|
115
|
+
let timer
|
|
116
|
+
if (onUploadProgress) {
|
|
117
|
+
ajax.upload.addEventListener('progress', onUploadProgress)
|
|
118
|
+
}
|
|
119
|
+
ajax.onreadystatechange = () => {
|
|
120
|
+
const result: ResponseObject = {}
|
|
121
|
+
if (ajax.readyState === 4) {
|
|
122
|
+
const headers = ajax.getAllResponseHeaders()
|
|
123
|
+
const arr = headers.trim().split(/[\r\n]+/)
|
|
124
|
+
// Create a map of header names to values
|
|
125
|
+
const headerMap = {}
|
|
126
|
+
arr.forEach((line) => {
|
|
127
|
+
const parts = line.split(': ')
|
|
128
|
+
const header = parts.shift().toLowerCase()
|
|
129
|
+
const value = parts.join(': ')
|
|
130
|
+
headerMap[header] = value
|
|
131
|
+
})
|
|
132
|
+
result.header = headerMap
|
|
133
|
+
result.statusCode = ajax.status
|
|
134
|
+
try {
|
|
135
|
+
// 上传post请求返回数据格式为xml,此处容错
|
|
136
|
+
result.data = responseType === 'blob' ? ajax.response : JSON.parse(ajax.responseText)
|
|
137
|
+
} catch (e) {
|
|
138
|
+
result.data = responseType === 'blob' ? ajax.response : ajax.responseText
|
|
139
|
+
}
|
|
140
|
+
clearTimeout(timer)
|
|
141
|
+
resolve(result)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (enableAbort && this.timeout) {
|
|
145
|
+
timer = setTimeout(() => {
|
|
146
|
+
console.warn(this.timeoutMsg)
|
|
147
|
+
ajax.abort()
|
|
148
|
+
}, this.timeout)
|
|
149
|
+
}
|
|
150
|
+
// 处理 payload
|
|
151
|
+
let payload
|
|
152
|
+
if (isFormData(data)) {
|
|
153
|
+
// FormData,不处理
|
|
154
|
+
payload = data
|
|
155
|
+
} else if (headers['content-type'] === 'application/x-www-form-urlencoded') {
|
|
156
|
+
payload = toQueryString(data)
|
|
157
|
+
} else if (body) {
|
|
158
|
+
payload = body
|
|
159
|
+
} else {
|
|
160
|
+
// 其它情况
|
|
161
|
+
payload = data ? JSON.stringify(data) : undefined
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (withCredentials) {
|
|
165
|
+
ajax.withCredentials = true
|
|
166
|
+
}
|
|
167
|
+
ajax.send(payload)
|
|
168
|
+
})
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function genAdapter() {
|
|
173
|
+
const adapter: SDKAdapterInterface = {
|
|
174
|
+
root: window,
|
|
175
|
+
reqClass: WebRequest,
|
|
176
|
+
wsClass: WebSocket,
|
|
177
|
+
localStorage,
|
|
178
|
+
}
|
|
179
|
+
return adapter
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export { genAdapter, WebRequest }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
let sdkName = '@cloudbase/js-sdk'
|
|
2
|
+
export function setSdkName(name: string) {
|
|
3
|
+
sdkName = name
|
|
4
|
+
}
|
|
5
|
+
export function getSdkName() {
|
|
6
|
+
return sdkName
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let PROTOCOL = 'https:'
|
|
10
|
+
|
|
11
|
+
export function setProtocol(protocol: 'http' | 'https') {
|
|
12
|
+
PROTOCOL = protocol
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getProtocol() {
|
|
16
|
+
return PROTOCOL
|
|
17
|
+
}
|
|
18
|
+
// 是否为开发模式
|
|
19
|
+
export const IS_DEBUG_MODE = process.env.NODE_ENV === 'development'
|
|
20
|
+
// 问答社区链接
|
|
21
|
+
export const COMMUNITY_SITE_URL = 'https://support.qq.com/products/148793'
|