Skip to content

Commit 2bb033e

Browse files
authored
Merge pull request #123 from HuolalaTech/feat/mp-sys
Feat/mp sys 小程序系统信息面板
2 parents 4a30970 + 1129d9f commit 2bb033e

File tree

26 files changed

+533
-548
lines changed

26 files changed

+533
-548
lines changed

packages/page-spy-alipay/src/index.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import PageSpy, {
22
setMPSDK,
3-
utilAPI,
43
Client,
54
SocketStoreBase,
5+
platformAPI,
66
} from '@huolala-tech/page-spy-mp-base';
77
import { SpyClient } from '@huolala-tech/page-spy-types';
88

@@ -13,23 +13,23 @@ declare const my: any;
1313
setMPSDK(my);
1414

1515
// alipay toxic storage api...
16-
utilAPI.getStorage = (key: string) => {
16+
platformAPI.getStorageSync = (key: string) => {
1717
const res = my.getStorageSync({ key });
1818
if (res.success) {
1919
return res.data;
2020
}
2121
return undefined;
2222
};
2323

24-
utilAPI.setStorage = (key: string, value: any) => {
24+
platformAPI.setStorageSync = (key: string, value: any) => {
2525
return my.setStorageSync({ key, data: value });
2626
};
2727

28-
utilAPI.removeStorage = (key) => {
28+
platformAPI.removeStorageSync = (key) => {
2929
return my.removeStorageSync({ key });
3030
};
3131

32-
utilAPI.showActionSheet = (params) => {
32+
platformAPI.showActionSheet = (params) => {
3333
return my.showActionSheet({
3434
...params,
3535
items: params.itemList,
@@ -41,16 +41,27 @@ utilAPI.showActionSheet = (params) => {
4141
});
4242
};
4343

44+
// TODO 个人小程序不支持该 api.. 先不管
45+
platformAPI.setClipboardData = (params) => {
46+
return my.setClipboard({
47+
text: params.data,
48+
...params,
49+
});
50+
};
51+
4452
const info = my.getSystemInfoSync();
4553

46-
PageSpy.client = new Client({
47-
sdk: 'mp-alipay',
48-
osType: info.platform.toLowerCase() as SpyClient.OS,
49-
browserType: 'mp-alipay',
50-
osVersion: info.system,
51-
browserVersion: info.version,
52-
sdkVersion: PKG_VERSION,
53-
});
54+
PageSpy.client = new Client(
55+
{
56+
sdk: 'mp-alipay',
57+
osType: info.platform.toLowerCase() as SpyClient.OS,
58+
browserType: 'mp-alipay',
59+
osVersion: info.system,
60+
browserVersion: info.version,
61+
sdkVersion: PKG_VERSION,
62+
},
63+
info,
64+
);
5465

5566
SocketStoreBase.messageFilters.push((data) => {
5667
return data.data;

packages/page-spy-base/src/client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export class Client {
1414
sdk: 'unknown',
1515
sdkVersion: '0.0.0',
1616
},
17+
// the raw info from getSystemInfoSync or similar api, will be sent by system plugin
18+
public rawInfo?: Record<string, any>,
1719
) {}
1820

1921
plugins: string[] = [];

packages/page-spy-mp-base/src/api/index.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import type { SpyMP } from '@huolala-tech/page-spy-types';
22
import { getRandomId } from '@huolala-tech/page-spy-base/dist/utils';
33
import type { Client } from '@huolala-tech/page-spy-base/dist/client';
44

5-
import { getMPSDK, joinQuery, promisifyMPApi } from '../utils';
5+
import { joinQuery, promisifyMPApi } from '../utils';
66
import { Config } from '../config';
7+
import { getMPSDK } from '../helpers/mp-api';
78

89
interface TResponse<T> {
910
code: string;
@@ -52,17 +53,16 @@ export default class Request {
5253
name: encodeURIComponent(device),
5354
});
5455

55-
return promisifyMPApi<{ data: TResponse<TCreateRoom> }>(getMPSDK().request)(
56-
{
57-
url: `${scheme[0]}${this.base}/api/v1/room/create?${query}`,
58-
method: 'POST',
59-
sslVerify: enableSSL !== false,
60-
data: JSON.stringify({
61-
useSecret,
62-
secret,
63-
}),
64-
},
65-
).then(
56+
return promisifyMPApi(getMPSDK().request<TResponse<TCreateRoom>>)({
57+
url: `${scheme[0]}${this.base}/api/v1/room/create?${query}`,
58+
method: 'POST',
59+
// uniapp building android native need this option.
60+
sslVerify: enableSSL !== false,
61+
data: JSON.stringify({
62+
useSecret,
63+
secret,
64+
}),
65+
}).then(
6666
(res) => {
6767
const { name, address } = res.data?.data || {};
6868
const roomUrl = this.getRoomUrl(address);
@@ -74,7 +74,7 @@ export default class Request {
7474
},
7575
(err) => {
7676
/* c8 ignore next */
77-
throw Error(`Request create room failed: ${err.message}`);
77+
throw Error(`Request create room failed: ${err.message || err}`);
7878
},
7979
);
8080
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Wrap the mp api to smooth the platform differences, for internal usage only.
2+
// This api can be modified by mp sdk implementor.
3+
// This api should be passed through PageSpy instance to avoid esm multi-pack.
4+
5+
import { MPSDK } from '../types';
6+
7+
let mpSDK: any;
8+
9+
// the origin mp sdk, used for hacking
10+
let originMPSDK: any;
11+
12+
if (typeof Proxy !== 'undefined') {
13+
mpSDK = new Proxy(
14+
{},
15+
{
16+
get(target, p: string) {
17+
if (platformAPI[p]) {
18+
return platformAPI[p];
19+
}
20+
if (originMPSDK[p]) {
21+
return originMPSDK[p];
22+
} else {
23+
console.error('The mp sdk does not support the api:', p);
24+
}
25+
},
26+
},
27+
);
28+
}
29+
30+
// for API compatibility
31+
// this api can be modified by mp sdk implementor, to smoothy the platform differences.
32+
export const platformAPI: Record<string, any> = {};
33+
export const getMPSDK = () => {
34+
if (!mpSDK) {
35+
throw Error('the mp sdk is not set');
36+
}
37+
return mpSDK as MPSDK;
38+
};
39+
40+
export const getOriginMPSDK = () => originMPSDK as MPSDK;
41+
42+
export const setMPSDK = (SDK: MPSDK) => {
43+
originMPSDK = SDK;
44+
if (typeof Proxy === 'undefined') {
45+
mpSDK = {
46+
...SDK,
47+
...platformAPI,
48+
};
49+
}
50+
};

packages/page-spy-mp-base/src/helpers/socket.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import {
44
SocketWrapper,
55
} from '@huolala-tech/page-spy-base/dist/socket-base';
66
import { ROOM_SESSION_KEY } from '@huolala-tech/page-spy-base/dist/constants';
7-
import { getMPSDK, utilAPI } from '../utils';
87
import {
98
MPSocket,
109
SocketOnCloseHandler,
1110
SocketOnErrorHandler,
1211
SocketOnMessageHandler,
1312
SocketOnOpenHandler,
1413
} from '../types';
14+
import { getMPSDK } from './mp-api';
1515

1616
export class MPSocketWrapper extends SocketWrapper {
1717
public socketInstance: MPSocket | null = null;
@@ -94,7 +94,8 @@ export class MPSocketStore extends SocketStoreBase {
9494
// this is an abstract method of parent class, cannot be static
9595
/* eslint-disable-next-line */
9696
onOffline() {
97-
utilAPI.removeStorage(ROOM_SESSION_KEY);
97+
const mp = getMPSDK();
98+
mp.removeStorageSync(ROOM_SESSION_KEY);
9899
}
99100
}
100101

packages/page-spy-mp-base/src/index.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import Request from './api';
4141
// import './index.less';
4242
// eslint-disable-next-line import/order
4343
import { Config } from './config';
44-
import { getMPSDK, utilAPI } from './utils';
44+
import { getMPSDK } from './helpers/mp-api';
4545

4646
type UpdateConfig = {
4747
title?: string;
@@ -120,7 +120,8 @@ class PageSpy {
120120
updateConfiguration() {
121121
const { messageCapacity, useSecret } = this.config.get();
122122
if (useSecret === true) {
123-
const cache = utilAPI.getStorage(ROOM_SESSION_KEY);
123+
const mp = getMPSDK();
124+
const cache = mp.getStorageSync(ROOM_SESSION_KEY);
124125
const secret = cache?.secret || getAuthSecret();
125126
this.config.set('secret', secret);
126127
psLog.log(`Room Secret: ${secret}`);
@@ -135,7 +136,7 @@ class PageSpy {
135136
async init() {
136137
const mp = getMPSDK();
137138
const config = this.config.get();
138-
const roomCache = utilAPI.getStorage(ROOM_SESSION_KEY);
139+
const roomCache = mp.getStorageSync(ROOM_SESSION_KEY);
139140
if (!roomCache || typeof roomCache !== 'object') {
140141
await this.createNewConnection();
141142
} else {
@@ -207,7 +208,7 @@ class PageSpy {
207208
useSecret,
208209
secret,
209210
};
210-
utilAPI.setStorage(ROOM_SESSION_KEY, roomCache);
211+
getMPSDK().setStorageSync(ROOM_SESSION_KEY, roomCache);
211212
}
212213

213214
triggerPlugins<T extends PageSpyPluginLifecycle>(
@@ -270,17 +271,15 @@ class PageSpy {
270271
{
271272
text: 'PageSpy 房间号:' + this.address.slice(0, 4),
272273
action() {
273-
if (mp.setClipboardData) {
274-
mp.setClipboardData({
275-
data: that.getDebugLink(),
276-
success() {
277-
mp.showToast({
278-
title: '复制成功',
279-
icon: 'success',
280-
});
281-
},
282-
});
283-
}
274+
mp.setClipboardData({
275+
data: that.getDebugLink(),
276+
success() {
277+
mp.showToast({
278+
title: '复制成功',
279+
icon: 'success',
280+
});
281+
},
282+
});
284283
},
285284
},
286285
];
@@ -309,7 +308,7 @@ class PageSpy {
309308
}
310309
});
311310

312-
utilAPI.showActionSheet({
311+
mp.showActionSheet({
313312
itemColor: '#b67cff',
314313
itemList: options.map((o) => o.text),
315314
success(res) {
@@ -386,3 +385,4 @@ export { SocketStoreBase, Client, psLog };
386385
export * from './types';
387386
export * from './utils';
388387
export * from './helpers/socket';
388+
export * from './helpers/mp-api';

packages/page-spy-mp-base/src/plugins/error.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
OnInitParams,
99
} from '@huolala-tech/page-spy-types/index';
1010
import socketStore from '../helpers/socket';
11-
import { getMPSDK } from '../utils';
11+
import { getMPSDK, getOriginMPSDK } from '../helpers/mp-api';
1212

1313
// TODO this plugin should test on multiple platforms
1414
export default class ErrorPlugin implements PageSpyPlugin {
@@ -33,7 +33,7 @@ export default class ErrorPlugin implements PageSpyPlugin {
3333
}
3434

3535
public onReset() {
36-
const mp = getMPSDK();
36+
const mp = getOriginMPSDK();
3737
if (mp.canIUse('offError')) {
3838
mp.offError(this.errorHandler);
3939
}

packages/page-spy-mp-base/src/plugins/network/proxy/request.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import {
88
ReqReadyState,
99
toLowerKeys,
1010
} from '@huolala-tech/page-spy-base/dist/network/common';
11-
import { getMPSDK } from '../../../utils';
1211
import MPNetworkProxyBase from './base';
1312
import { MPNetworkAPI } from '../../../types';
13+
import { getOriginMPSDK } from '../../../helpers/mp-api';
1414

1515
export default class MPWeixinRequestProxy extends MPNetworkProxyBase {
1616
public request: MPNetworkAPI['request'] | null = null;
@@ -22,7 +22,7 @@ export default class MPWeixinRequestProxy extends MPNetworkProxyBase {
2222

2323
public reset() {
2424
if (this.request) {
25-
const mp = getMPSDK();
25+
const mp = getOriginMPSDK();
2626
Object.defineProperty(mp, 'request', {
2727
value: this.request,
2828
configurable: true,
@@ -34,7 +34,7 @@ export default class MPWeixinRequestProxy extends MPNetworkProxyBase {
3434

3535
public initProxyHandler() {
3636
const that = this;
37-
const mp = getMPSDK();
37+
const mp = getOriginMPSDK();
3838
const originRequest = mp.request;
3939

4040
if (!originRequest) {

packages/page-spy-mp-base/src/plugins/storage.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import type {
88
OnInitParams,
99
} from '@huolala-tech/page-spy-types';
1010
import socketStore from '../helpers/socket';
11-
import { getMPSDK, utilAPI } from '../utils';
1211
import type { MPStorageAPI, KVList } from '../types';
12+
import { getMPSDK, getOriginMPSDK } from '../helpers/mp-api';
1313

1414
const descriptor = {
1515
configurable: true,
@@ -58,7 +58,7 @@ export default class StoragePlugin implements PageSpyPlugin {
5858
}
5959

6060
public onReset() {
61-
const mp = getMPSDK();
61+
const mp = getOriginMPSDK();
6262
Object.entries(StoragePlugin.originFunctions).forEach(([key, fn]) => {
6363
Object.defineProperty(mp, key, {
6464
value: fn,
@@ -76,7 +76,7 @@ export default class StoragePlugin implements PageSpyPlugin {
7676
const data = info.keys.map((key) => {
7777
return {
7878
name: key,
79-
value: mpDataStringify(utilAPI.getStorage(key)),
79+
value: mpDataStringify(mp.getStorageSync(key)),
8080
};
8181
});
8282

@@ -103,7 +103,7 @@ export default class StoragePlugin implements PageSpyPlugin {
103103
/* c8 ignore stop */
104104

105105
public initStorageProxy() {
106-
const mp = getMPSDK();
106+
const mp = getOriginMPSDK();
107107
const proxyFunctions = [
108108
'setStorage',
109109
'setStorageSync',
@@ -180,13 +180,12 @@ export default class StoragePlugin implements PageSpyPlugin {
180180
},
181181

182182
removeStorageSync: {
183-
// in alipay, the param is an object actually, but it works.
184-
// TODO: really?
185-
value(keyOrObj: string) {
183+
value(keyOrObj: string | { key: string }) {
186184
try {
187185
const res =
188186
StoragePlugin.originFunctions!.removeStorageSync(keyOrObj);
189-
that.sendRemoveItem(keyOrObj);
187+
const key = typeof keyOrObj === 'string' ? keyOrObj : keyOrObj.key;
188+
that.sendRemoveItem(key);
190189
return res;
191190
/* c8 ignore next 4 */
192191
} catch (e) {

0 commit comments

Comments
 (0)