@hylid/call 3.2.0-alpha.0 → 3.2.0-alpha.10
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/lib/mpCall.d.ts +2 -3
- package/lib/mpWebBridge.d.ts +1 -1
- package/lib/mpWebBridge.js +20 -65
- package/lib/mpWebCall.d.ts +11 -5
- package/lib/mpWebCall.js +101 -108
- package/lib/notFound.js +2 -4
- package/lib/types.d.ts +39 -8
- package/lib/utils.d.ts +30 -0
- package/lib/utils.js +54 -0
- package/lib/webCall.d.ts +3 -3
- package/lib/webCall.js +2 -2
- package/lib/webviewBridge/index.d.ts +26 -0
- package/lib/webviewBridge/index.js +129 -0
- package/lib/webviewBridge/internal/canIUse.d.ts +3 -0
- package/lib/webviewBridge/internal/canIUse.js +4 -0
- package/lib/webviewBridge/internal/getCurrentPages.d.ts +1 -0
- package/lib/webviewBridge/internal/getCurrentPages.js +3 -0
- package/lib/webviewBridge/internal/index.d.ts +18 -0
- package/lib/webviewBridge/internal/index.js +156 -0
- package/lib/webviewBridge/internal/memory.d.ts +10 -0
- package/lib/webviewBridge/internal/memory.js +12 -0
- package/lib/webviewBridge/utils.d.ts +4 -0
- package/lib/webviewBridge/utils.js +205 -0
- package/package.json +3 -3
- package/lib/webviewBridge.d.ts +0 -24
- package/lib/webviewBridge.js +0 -229
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
var __assign = this && this.__assign || function () {
|
|
2
|
+
__assign = Object.assign || function (t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
6
|
+
}
|
|
7
|
+
return t;
|
|
8
|
+
};
|
|
9
|
+
return __assign.apply(this, arguments);
|
|
10
|
+
};
|
|
11
|
+
import { __hy_internal__ } from "./internal";
|
|
12
|
+
import { callbackApi, getApiResult, isAllowed } from "./utils";
|
|
13
|
+
import { createMessage, createError } from "../utils";
|
|
14
|
+
var broadcastTargets = [];
|
|
15
|
+
var WebViewBridge = /** @class */function () {
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param webviewId webview 组件的 id,可传字符串,或者 my.createWebViewContext 创建出的实例
|
|
19
|
+
* @param config Config 配置
|
|
20
|
+
* @param context 页面上下文,传 this 即可。传入后,H5 侧可以使用广播、可以监听页面事件
|
|
21
|
+
*/
|
|
22
|
+
function WebViewBridge(webviewId, config, context) {
|
|
23
|
+
if (config === void 0) {
|
|
24
|
+
config = {};
|
|
25
|
+
}
|
|
26
|
+
var _this = this;
|
|
27
|
+
this.config = {};
|
|
28
|
+
this.MESSAGE_HANDLER = [];
|
|
29
|
+
this.listen = function (data) {
|
|
30
|
+
if (data.detail.source !== 'hylid') return;
|
|
31
|
+
_this.MESSAGE_HANDLER.forEach(function (fn) {
|
|
32
|
+
return fn(data.detail);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
this.jsApiHandler = function (data) {
|
|
36
|
+
var _a;
|
|
37
|
+
if (data.type !== 'apiCall') return;
|
|
38
|
+
var config = data.config,
|
|
39
|
+
api = data.api;
|
|
40
|
+
var type = (config || {}).type;
|
|
41
|
+
// 权限管控不允许调用 JSAPI
|
|
42
|
+
if (!isAllowed(_this.config, api)) {
|
|
43
|
+
return _this.sendMessage(data, createMessage(createError('NOTALLOWED', api), 'fail'));
|
|
44
|
+
}
|
|
45
|
+
var jsapi = ((_a = _this.config.customApi) === null || _a === void 0 ? void 0 : _a[api]) || {
|
|
46
|
+
__hy_internal__: __hy_internal__
|
|
47
|
+
}[api] || my[api];
|
|
48
|
+
if (type === 'callback') {
|
|
49
|
+
callbackApi(jsapi, data, function (result) {
|
|
50
|
+
return _this.sendMessage(data, result);
|
|
51
|
+
});
|
|
52
|
+
} else {
|
|
53
|
+
getApiResult(jsapi, data).then(function (result) {
|
|
54
|
+
_this.sendMessage(data, result);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
this.broadcastHandler = function (data) {
|
|
59
|
+
if (data.type !== 'broadcast') return;
|
|
60
|
+
if (!_this.context) {
|
|
61
|
+
_this.sendMessage(data, createMessage(createError('NOTBIND', 'broadcast'), 'fail'));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
broadcastTargets.forEach(function (target) {
|
|
65
|
+
if (target === _this) return;
|
|
66
|
+
_this.sendMessage(data, createMessage(data.result), target);
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
this.pageEventHandler = function (data) {
|
|
70
|
+
var _a;
|
|
71
|
+
if (data.type !== 'pageEvent') return;
|
|
72
|
+
var event = data.event;
|
|
73
|
+
if (!event) {
|
|
74
|
+
_this.sendMessage(data, createMessage(createError('PARAMS_ERROR'), 'fail'));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!_this.context) {
|
|
78
|
+
_this.sendMessage(data, createMessage(createError('NOTBIND', event), 'fail'));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// 已经监听过了
|
|
82
|
+
if ((_a = _this.context[event]) === null || _a === void 0 ? void 0 : _a._hy_listener_) return;
|
|
83
|
+
_this.bindCtxEvent(event, function (payload) {
|
|
84
|
+
return _this.sendMessage(data, payload);
|
|
85
|
+
});
|
|
86
|
+
_this.context[event]._hy_listener_ = true;
|
|
87
|
+
};
|
|
88
|
+
if (typeof webviewId === 'string') {
|
|
89
|
+
this.webview = my.createWebViewContext(webviewId);
|
|
90
|
+
} else {
|
|
91
|
+
this.webview = webviewId;
|
|
92
|
+
}
|
|
93
|
+
this.config = config;
|
|
94
|
+
this.context = context;
|
|
95
|
+
this.MESSAGE_HANDLER.push(this.jsApiHandler);
|
|
96
|
+
this.MESSAGE_HANDLER.push(this.broadcastHandler);
|
|
97
|
+
this.MESSAGE_HANDLER.push(this.pageEventHandler);
|
|
98
|
+
if (context) {
|
|
99
|
+
broadcastTargets.push(this);
|
|
100
|
+
this.bindCtxEvent('onUnload', function () {
|
|
101
|
+
broadcastTargets = broadcastTargets.filter(function (target) {
|
|
102
|
+
return target !== _this;
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
} else {
|
|
106
|
+
console.info("[hylid-call]: context \u5728\u5C0F\u7A0B\u5E8F\u4FA7\u672A\u4F20\u5165\uFF0Cbroadcast \u529F\u80FD\u3001\u9875\u9762\u76D1\u542C\u5C06\u65E0\u6CD5\u4F7F\u7528");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
WebViewBridge.prototype.bindCtxEvent = function (event, callback) {
|
|
110
|
+
if (!this.context) {
|
|
111
|
+
return callback(createMessage(createError('NOTBIND', event), 'fail'));
|
|
112
|
+
}
|
|
113
|
+
var userEvent = this.context[event];
|
|
114
|
+
this.context[event] = function (opts) {
|
|
115
|
+
if (userEvent) userEvent.bind(this.context)(opts);
|
|
116
|
+
callback(createMessage(opts));
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
WebViewBridge.prototype.sendMessage = function (origin, result, context) {
|
|
120
|
+
if (context === void 0) {
|
|
121
|
+
context = this;
|
|
122
|
+
}
|
|
123
|
+
context.webview.postMessage(__assign(__assign({}, origin), {
|
|
124
|
+
result: result
|
|
125
|
+
}));
|
|
126
|
+
};
|
|
127
|
+
return WebViewBridge;
|
|
128
|
+
}();
|
|
129
|
+
export { WebViewBridge };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function _getCurrentPages(): any[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { _getCurrentPages as getCurrentPages } from './getCurrentPages';
|
|
2
|
+
import { getMemory, removeMemory, setMemory } from './memory';
|
|
3
|
+
import { canIUse } from './canIUse';
|
|
4
|
+
declare const jsapis: {
|
|
5
|
+
getMemory: typeof getMemory;
|
|
6
|
+
setMemory: typeof setMemory;
|
|
7
|
+
removeMemory: typeof removeMemory;
|
|
8
|
+
getCurrentPages: typeof getCurrentPages;
|
|
9
|
+
canIUse: typeof canIUse;
|
|
10
|
+
};
|
|
11
|
+
interface InternalOptions {
|
|
12
|
+
name: keyof typeof jsapis;
|
|
13
|
+
payload: any;
|
|
14
|
+
success(res: any): void;
|
|
15
|
+
fail(e: any): void;
|
|
16
|
+
}
|
|
17
|
+
export declare function __hy_internal__(options: InternalOptions): Promise<void>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) {
|
|
3
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
4
|
+
resolve(value);
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) {
|
|
9
|
+
try {
|
|
10
|
+
step(generator.next(value));
|
|
11
|
+
} catch (e) {
|
|
12
|
+
reject(e);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function rejected(value) {
|
|
16
|
+
try {
|
|
17
|
+
step(generator["throw"](value));
|
|
18
|
+
} catch (e) {
|
|
19
|
+
reject(e);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function step(result) {
|
|
23
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
24
|
+
}
|
|
25
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var __generator = this && this.__generator || function (thisArg, body) {
|
|
29
|
+
var _ = {
|
|
30
|
+
label: 0,
|
|
31
|
+
sent: function sent() {
|
|
32
|
+
if (t[0] & 1) throw t[1];
|
|
33
|
+
return t[1];
|
|
34
|
+
},
|
|
35
|
+
trys: [],
|
|
36
|
+
ops: []
|
|
37
|
+
},
|
|
38
|
+
f,
|
|
39
|
+
y,
|
|
40
|
+
t,
|
|
41
|
+
g;
|
|
42
|
+
return g = {
|
|
43
|
+
next: verb(0),
|
|
44
|
+
"throw": verb(1),
|
|
45
|
+
"return": verb(2)
|
|
46
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
47
|
+
return this;
|
|
48
|
+
}), g;
|
|
49
|
+
function verb(n) {
|
|
50
|
+
return function (v) {
|
|
51
|
+
return step([n, v]);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function step(op) {
|
|
55
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
56
|
+
while (_) try {
|
|
57
|
+
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;
|
|
58
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
59
|
+
switch (op[0]) {
|
|
60
|
+
case 0:
|
|
61
|
+
case 1:
|
|
62
|
+
t = op;
|
|
63
|
+
break;
|
|
64
|
+
case 4:
|
|
65
|
+
_.label++;
|
|
66
|
+
return {
|
|
67
|
+
value: op[1],
|
|
68
|
+
done: false
|
|
69
|
+
};
|
|
70
|
+
case 5:
|
|
71
|
+
_.label++;
|
|
72
|
+
y = op[1];
|
|
73
|
+
op = [0];
|
|
74
|
+
continue;
|
|
75
|
+
case 7:
|
|
76
|
+
op = _.ops.pop();
|
|
77
|
+
_.trys.pop();
|
|
78
|
+
continue;
|
|
79
|
+
default:
|
|
80
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
81
|
+
_ = 0;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
85
|
+
_.label = op[1];
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
89
|
+
_.label = t[1];
|
|
90
|
+
t = op;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
if (t && _.label < t[2]) {
|
|
94
|
+
_.label = t[2];
|
|
95
|
+
_.ops.push(op);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
if (t[2]) _.ops.pop();
|
|
99
|
+
_.trys.pop();
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
op = body.call(thisArg, _);
|
|
103
|
+
} catch (e) {
|
|
104
|
+
op = [6, e];
|
|
105
|
+
y = 0;
|
|
106
|
+
} finally {
|
|
107
|
+
f = t = 0;
|
|
108
|
+
}
|
|
109
|
+
if (op[0] & 5) throw op[1];
|
|
110
|
+
return {
|
|
111
|
+
value: op[0] ? op[1] : void 0,
|
|
112
|
+
done: true
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
import { _getCurrentPages as getCurrentPages } from "./getCurrentPages";
|
|
117
|
+
import { getMemory, removeMemory, setMemory } from "./memory";
|
|
118
|
+
import { canIUse } from "./canIUse";
|
|
119
|
+
import { createError } from "../../utils";
|
|
120
|
+
var jsapis = {
|
|
121
|
+
getMemory: getMemory,
|
|
122
|
+
setMemory: setMemory,
|
|
123
|
+
removeMemory: removeMemory,
|
|
124
|
+
getCurrentPages: getCurrentPages,
|
|
125
|
+
canIUse: canIUse
|
|
126
|
+
};
|
|
127
|
+
export function __hy_internal__(options) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
129
|
+
var _a, success, fail, name, payload, jsapi, res, e_1;
|
|
130
|
+
return __generator(this, function (_b) {
|
|
131
|
+
switch (_b.label) {
|
|
132
|
+
case 0:
|
|
133
|
+
_a = options || {}, success = _a.success, fail = _a.fail, name = _a.name, payload = _a.payload;
|
|
134
|
+
jsapi = jsapis[name];
|
|
135
|
+
if (!jsapi) {
|
|
136
|
+
fail(createError('NOTFOUND', "internal jsapi ".concat(name)));
|
|
137
|
+
return [2 /*return*/];
|
|
138
|
+
}
|
|
139
|
+
_b.label = 1;
|
|
140
|
+
case 1:
|
|
141
|
+
_b.trys.push([1, 3,, 4]);
|
|
142
|
+
return [4 /*yield*/, jsapi(payload)];
|
|
143
|
+
case 2:
|
|
144
|
+
res = _b.sent();
|
|
145
|
+
success(res);
|
|
146
|
+
return [3 /*break*/, 4];
|
|
147
|
+
case 3:
|
|
148
|
+
e_1 = _b.sent();
|
|
149
|
+
fail(e_1);
|
|
150
|
+
return [3 /*break*/, 4];
|
|
151
|
+
case 4:
|
|
152
|
+
return [2 /*return*/];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MpWebJsApiMessage, MpWebMessageResult, WebviewBridgeConfig } from '../types';
|
|
2
|
+
export declare function callbackApi(jsapi: any, data: MpWebJsApiMessage, cb: (msg: MpWebMessageResult) => void): void;
|
|
3
|
+
export declare const getApiResult: (jsapi: any, data: MpWebJsApiMessage) => Promise<MpWebMessageResult>;
|
|
4
|
+
export declare function isAllowed(config: WebviewBridgeConfig, api: string): boolean;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
var __assign = this && this.__assign || function () {
|
|
2
|
+
__assign = Object.assign || function (t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
6
|
+
}
|
|
7
|
+
return t;
|
|
8
|
+
};
|
|
9
|
+
return __assign.apply(this, arguments);
|
|
10
|
+
};
|
|
11
|
+
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) {
|
|
13
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
14
|
+
resolve(value);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
+
function fulfilled(value) {
|
|
19
|
+
try {
|
|
20
|
+
step(generator.next(value));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
reject(e);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function rejected(value) {
|
|
26
|
+
try {
|
|
27
|
+
step(generator["throw"](value));
|
|
28
|
+
} catch (e) {
|
|
29
|
+
reject(e);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function step(result) {
|
|
33
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
34
|
+
}
|
|
35
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
var __generator = this && this.__generator || function (thisArg, body) {
|
|
39
|
+
var _ = {
|
|
40
|
+
label: 0,
|
|
41
|
+
sent: function sent() {
|
|
42
|
+
if (t[0] & 1) throw t[1];
|
|
43
|
+
return t[1];
|
|
44
|
+
},
|
|
45
|
+
trys: [],
|
|
46
|
+
ops: []
|
|
47
|
+
},
|
|
48
|
+
f,
|
|
49
|
+
y,
|
|
50
|
+
t,
|
|
51
|
+
g;
|
|
52
|
+
return g = {
|
|
53
|
+
next: verb(0),
|
|
54
|
+
"throw": verb(1),
|
|
55
|
+
"return": verb(2)
|
|
56
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
57
|
+
return this;
|
|
58
|
+
}), g;
|
|
59
|
+
function verb(n) {
|
|
60
|
+
return function (v) {
|
|
61
|
+
return step([n, v]);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function step(op) {
|
|
65
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
+
while (_) try {
|
|
67
|
+
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;
|
|
68
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
+
switch (op[0]) {
|
|
70
|
+
case 0:
|
|
71
|
+
case 1:
|
|
72
|
+
t = op;
|
|
73
|
+
break;
|
|
74
|
+
case 4:
|
|
75
|
+
_.label++;
|
|
76
|
+
return {
|
|
77
|
+
value: op[1],
|
|
78
|
+
done: false
|
|
79
|
+
};
|
|
80
|
+
case 5:
|
|
81
|
+
_.label++;
|
|
82
|
+
y = op[1];
|
|
83
|
+
op = [0];
|
|
84
|
+
continue;
|
|
85
|
+
case 7:
|
|
86
|
+
op = _.ops.pop();
|
|
87
|
+
_.trys.pop();
|
|
88
|
+
continue;
|
|
89
|
+
default:
|
|
90
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
91
|
+
_ = 0;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
95
|
+
_.label = op[1];
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
99
|
+
_.label = t[1];
|
|
100
|
+
t = op;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
if (t && _.label < t[2]) {
|
|
104
|
+
_.label = t[2];
|
|
105
|
+
_.ops.push(op);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
if (t[2]) _.ops.pop();
|
|
109
|
+
_.trys.pop();
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
op = body.call(thisArg, _);
|
|
113
|
+
} catch (e) {
|
|
114
|
+
op = [6, e];
|
|
115
|
+
y = 0;
|
|
116
|
+
} finally {
|
|
117
|
+
f = t = 0;
|
|
118
|
+
}
|
|
119
|
+
if (op[0] & 5) throw op[1];
|
|
120
|
+
return {
|
|
121
|
+
value: op[0] ? op[1] : void 0,
|
|
122
|
+
done: true
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
import { createMessage, createError } from "../utils";
|
|
127
|
+
function getAttributeApi(apiName, jsapi) {
|
|
128
|
+
// my 上该 api 不存在
|
|
129
|
+
if (typeof jsapi === 'undefined') {
|
|
130
|
+
return createMessage(createError('NOTFOUND', apiName), 'fail');
|
|
131
|
+
}
|
|
132
|
+
return createMessage(jsapi);
|
|
133
|
+
}
|
|
134
|
+
function getSyncApi(apiName, jsapi, options) {
|
|
135
|
+
// 同步场景无该 API
|
|
136
|
+
if (!jsapi) {
|
|
137
|
+
return createMessage(createError('NOTFOUND', apiName), 'fail');
|
|
138
|
+
}
|
|
139
|
+
// 传进来的 API 不是函数
|
|
140
|
+
if (typeof jsapi !== 'function') {
|
|
141
|
+
return createMessage(createError('INVALID', apiName), 'fail');
|
|
142
|
+
}
|
|
143
|
+
return createMessage(jsapi(options));
|
|
144
|
+
}
|
|
145
|
+
function getAsyncApi(apiName, jsapi, _options) {
|
|
146
|
+
return new Promise(function (resolve) {
|
|
147
|
+
var options = __assign(__assign({}, _options), {
|
|
148
|
+
success: function success(res) {
|
|
149
|
+
resolve(createMessage(res));
|
|
150
|
+
},
|
|
151
|
+
fail: function fail(res) {
|
|
152
|
+
resolve(createMessage(res, 'fail'));
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// @ts-ignore
|
|
156
|
+
if (!jsapi) return my.call(api, options);
|
|
157
|
+
if (typeof jsapi !== 'function') {
|
|
158
|
+
return options.fail(createError('INVALID', apiName));
|
|
159
|
+
}
|
|
160
|
+
jsapi(options);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
export function callbackApi(jsapi, data, cb) {
|
|
164
|
+
var api = (data || {}).api;
|
|
165
|
+
// 无该 API
|
|
166
|
+
if (!jsapi) {
|
|
167
|
+
return cb(createMessage(createError('NOTFOUND', api), 'fail'));
|
|
168
|
+
}
|
|
169
|
+
// 传进来的 API 不是函数
|
|
170
|
+
if (typeof jsapi !== 'function') {
|
|
171
|
+
return cb(createMessage(createError('INVALID', api), 'fail'));
|
|
172
|
+
}
|
|
173
|
+
jsapi(function (result) {
|
|
174
|
+
return cb(createMessage(result));
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
export var getApiResult = function getApiResult(jsapi, data) {
|
|
178
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
179
|
+
var api, options, config, _a, type;
|
|
180
|
+
return __generator(this, function (_b) {
|
|
181
|
+
api = data.api, options = data.options, config = data.config;
|
|
182
|
+
_a = (config || {}).type, type = _a === void 0 ? 'async' : _a;
|
|
183
|
+
if (type === 'sync') {
|
|
184
|
+
return [2 /*return*/, getSyncApi(api, jsapi, options)];
|
|
185
|
+
}
|
|
186
|
+
if (type === 'async') {
|
|
187
|
+
return [2 /*return*/, getAsyncApi(api, jsapi, options)];
|
|
188
|
+
}
|
|
189
|
+
if (type === 'attribute') {
|
|
190
|
+
return [2 /*return*/, getAttributeApi(api, jsapi)];
|
|
191
|
+
}
|
|
192
|
+
// 不识别的类型
|
|
193
|
+
return [2 /*return*/, createMessage(createError('INVALID', api), 'fail')];
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
export function isAllowed(config, api) {
|
|
198
|
+
var _a = config || {},
|
|
199
|
+
whitelist = _a.whitelist,
|
|
200
|
+
blacklist = _a.blacklist;
|
|
201
|
+
// 黑白名单校验
|
|
202
|
+
if (whitelist && !whitelist.includes(api)) return false;
|
|
203
|
+
if (blacklist && blacklist.includes(api)) return false;
|
|
204
|
+
return true;
|
|
205
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hylid/call",
|
|
3
|
-
"version": "3.2.0-alpha.
|
|
3
|
+
"version": "3.2.0-alpha.10",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib"
|
|
7
7
|
],
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@hylid/env": "^3.2.0-alpha.
|
|
10
|
-
"@hylid/types": "^3.2.0-alpha.
|
|
9
|
+
"@hylid/env": "^3.2.0-alpha.10",
|
|
10
|
+
"@hylid/types": "^3.2.0-alpha.10"
|
|
11
11
|
},
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public"
|
package/lib/webviewBridge.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/// <reference types="miniprogram" />
|
|
2
|
-
import { MpWebMessage } from './types';
|
|
3
|
-
interface Config {
|
|
4
|
-
whitelist?: string[];
|
|
5
|
-
blacklist?: string[];
|
|
6
|
-
customApi?: CustomApi;
|
|
7
|
-
}
|
|
8
|
-
interface CustomApi {
|
|
9
|
-
[key: string]: (params: {
|
|
10
|
-
success(v: any): void;
|
|
11
|
-
fail(v: any): void;
|
|
12
|
-
}) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare class WebViewBridge {
|
|
15
|
-
webview: WebViewContext;
|
|
16
|
-
config: Config;
|
|
17
|
-
constructor(ctx: WebViewContext, config?: Config);
|
|
18
|
-
listen: (data: {
|
|
19
|
-
detail: MpWebMessage;
|
|
20
|
-
}) => Promise<true | undefined>;
|
|
21
|
-
isAllowed(api: string): boolean;
|
|
22
|
-
handleApi: (data: MpWebMessage) => Promise<unknown>;
|
|
23
|
-
}
|
|
24
|
-
export {};
|