minip-bridge 1.0.10 → 1.0.12
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/dist/index.d.mts +18 -2
- package/dist/index.mjs +34 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/bridge/index.ts +66 -10
package/dist/index.d.mts
CHANGED
|
@@ -191,14 +191,30 @@ declare function scanQRCode(): Promise<MResponseWithData<string | undefined | nu
|
|
|
191
191
|
declare function getDeviceInfo(): Promise<MResponseWithData<DeviceInfo>>;
|
|
192
192
|
declare function getDeviceInfoSync(): MResponseWithData<DeviceInfo>;
|
|
193
193
|
|
|
194
|
-
interface
|
|
194
|
+
interface WebKitCallable {
|
|
195
195
|
postMessage: (data: string) => Promise<string>;
|
|
196
196
|
}
|
|
197
|
+
interface WebView2Callable {
|
|
198
|
+
callNative: (data: string) => Promise<string>;
|
|
199
|
+
}
|
|
200
|
+
interface WebView2SyncCallable {
|
|
201
|
+
callNativeSync: (data: string) => string;
|
|
202
|
+
}
|
|
197
203
|
declare global {
|
|
198
204
|
interface Window {
|
|
199
205
|
webkit?: {
|
|
200
206
|
messageHandlers?: {
|
|
201
|
-
MinipNativeInteraction?:
|
|
207
|
+
MinipNativeInteraction?: WebKitCallable;
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
chrome?: {
|
|
211
|
+
webview?: {
|
|
212
|
+
hostObjects?: {
|
|
213
|
+
sync?: {
|
|
214
|
+
MinipNativeInteraction?: WebView2SyncCallable;
|
|
215
|
+
};
|
|
216
|
+
MinipNativeInteraction?: WebView2Callable;
|
|
217
|
+
};
|
|
202
218
|
};
|
|
203
219
|
};
|
|
204
220
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -7,7 +7,7 @@ var MResponseStatusCode = /* @__PURE__ */ ((MResponseStatusCode2) => {
|
|
|
7
7
|
|
|
8
8
|
// src/bridge/index.ts
|
|
9
9
|
var jsBridge;
|
|
10
|
-
if (window.webkit
|
|
10
|
+
if (window.webkit?.messageHandlers?.MinipNativeInteraction) {
|
|
11
11
|
const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;
|
|
12
12
|
jsBridge = {
|
|
13
13
|
callNative(req) {
|
|
@@ -39,6 +39,39 @@ if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandl
|
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
+
} else if (window.chrome?.webview?.hostObjects?.MinipNativeInteraction && window.chrome.webview.hostObjects.sync?.MinipNativeInteraction) {
|
|
43
|
+
const asyncObj = window.chrome?.webview?.hostObjects?.MinipNativeInteraction;
|
|
44
|
+
const syncObj = window.chrome?.webview?.hostObjects?.sync?.MinipNativeInteraction;
|
|
45
|
+
jsBridge = {
|
|
46
|
+
callNative(req) {
|
|
47
|
+
return asyncObj.callNative(JSON.stringify(req)).then((res) => JSON.parse(res)).then((res) => {
|
|
48
|
+
if (res.code === 0 /* SUCCESS */) {
|
|
49
|
+
res.isSuccess = () => true;
|
|
50
|
+
const hashData = res.data !== null && res.data !== void 0;
|
|
51
|
+
res.hasData = () => hashData;
|
|
52
|
+
return res;
|
|
53
|
+
} else {
|
|
54
|
+
throw new Error(res.msg ?? "Unknown error, res: ");
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
callNativeSync(req) {
|
|
59
|
+
const res = syncObj.callNativeSync(JSON.stringify(req));
|
|
60
|
+
if (res) {
|
|
61
|
+
const r = JSON.parse(res);
|
|
62
|
+
r.isSuccess = () => true;
|
|
63
|
+
const hashData = r.data !== null && r.data !== void 0;
|
|
64
|
+
r.hasData = () => hashData;
|
|
65
|
+
return r;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
code: 7 /* FAILED */,
|
|
69
|
+
msg: "Unknown error",
|
|
70
|
+
isSuccess: () => false,
|
|
71
|
+
hasData: () => false
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
};
|
|
42
75
|
} else {
|
|
43
76
|
jsBridge = {
|
|
44
77
|
callNative() {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model/response/index.ts","../src/bridge/index.ts","../src/api/route.ts","../src/api/app.ts","../src/api/ui.ts","../src/api/kvstorage.ts","../src/api/device.ts"],"sourcesContent":["export enum MResponseStatusCode {\r\n SUCCESS = 0,\r\n FAILED = 7,\r\n}\r\n\r\nexport interface MResponse {\r\n /**\r\n * Integer, 0 for succeeded, other for failed.\r\n * Auto reject in promise when failed.\r\n */\r\n code: MResponseStatusCode;\r\n /**\r\n * Error msg or other info.\r\n */\r\n msg?: string;\r\n\r\n isSuccess(): boolean;\r\n}\r\n\r\nexport interface MResponseWithData<T> extends MResponse {\r\n data: T;\r\n hasData(): boolean;\r\n}\r\n","import { MResponseStatusCode } from \"../model\";\r\nimport { MRequest } from \"../model/request\";\r\n\r\ninterface Callable {\r\n postMessage: (data: string) => Promise<string>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n webkit?: {\r\n messageHandlers?: {\r\n MinipNativeInteraction?: Callable;\r\n };\r\n };\r\n }\r\n}\r\n\r\nlet jsBridge: {\r\n callNative: <T>(req?: MRequest<T>) => Promise<any>;\r\n callNativeSync: <T>(req?: MRequest<T>) => any;\r\n};\r\n\r\n// iOS\r\nif (\r\n window.webkit &&\r\n window.webkit.messageHandlers &&\r\n window.webkit.messageHandlers.MinipNativeInteraction\r\n) {\r\n const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;\r\n jsBridge = {\r\n callNative(req) {\r\n return _callNative\r\n .postMessage(JSON.stringify(req))\r\n .then((res) => JSON.parse(res))\r\n .then((res) => {\r\n if (res.code === MResponseStatusCode.SUCCESS) {\r\n res.isSuccess = () => true;\r\n const hashData = res.data !== null && res.data !== undefined;\r\n res.hasData = () => hashData;\r\n return res;\r\n } else {\r\n throw new Error(res.msg ?? \"Unknown error, res: \");\r\n }\r\n });\r\n },\r\n callNativeSync(req) {\r\n const res = prompt(JSON.stringify(req));\r\n if (res) {\r\n const r = JSON.parse(res);\r\n r.isSuccess = () => true;\r\n const hashData = r.data !== null && r.data !== undefined;\r\n r.hasData = () => hashData;\r\n return r;\r\n }\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Unknown error\",\r\n isSuccess: () => false,\r\n hasData: () => false,\r\n };\r\n },\r\n };\r\n} else {\r\n // error\r\n jsBridge = {\r\n callNative() {\r\n return new Promise((_, reject) => {\r\n reject(\"Cannot find JavaScript Bridge!!!\");\r\n });\r\n },\r\n callNativeSync() {\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Cannot find JavaScript Bridge!!!\",\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport default jsBridge;\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse } from \"../model\";\r\n\r\nexport function navigateTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function navigateBack(delta: number = 1): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateBack\",\r\n data: {\r\n delta,\r\n },\r\n });\r\n}\r\n\r\nexport function redirectTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"redirectTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function openWebsite(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openWebsite\",\r\n data: { url },\r\n });\r\n}\r\n\r\nexport function openSettings(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openSettings\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { AppInfo, MResponse, MResponseWithData } from \"../model\";\r\n\r\nexport function closeApp(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"closeApp\",\r\n });\r\n}\r\n\r\nexport function showAppDetail(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showAppDetail\",\r\n });\r\n}\r\n\r\nexport function installApp(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"installApp\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function getInstalledAppList(): Promise<MResponseWithData<AppInfo[]>> {\r\n return jsBridge.callNative({\r\n api: \"getInstalledAppList\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport {\r\n AlertConfig,\r\n DateAndTimePickerConfig,\r\n MResponse,\r\n MResponseWithData,\r\n MultipleColumnsPickerConfig,\r\n ShowHUDRequest,\r\n SingleColumnPickerConfig,\r\n} from \"../model\";\r\n\r\n// navigation bar\r\n\r\nexport function setNavigationBarTitle(title: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarTitle\",\r\n data: {\r\n title,\r\n },\r\n });\r\n}\r\n\r\nexport function setNavigationBarColor(config: {\r\n foregroundColor: string;\r\n backgroundColor: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarColor\",\r\n data: config,\r\n });\r\n}\r\n\r\n// pulldown refresh\r\n\r\nexport function enablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"enablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function disablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"disablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function onPullDownRefresh(callback: (e: Event) => any) {\r\n window.addEventListener(\"pulldownrefresh\", callback);\r\n}\r\n\r\nexport function startPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"startPullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function stopPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"stopPullDownRefresh\",\r\n });\r\n}\r\n\r\n// HUD\r\n\r\nexport function showHUD(req: ShowHUDRequest): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showHUD\",\r\n data: req,\r\n });\r\n}\r\n\r\nexport function hideHUD(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"hideHUD\",\r\n });\r\n}\r\n\r\n// alert\r\nexport function showAlert(\r\n config: AlertConfig,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"showAlert\",\r\n data: config,\r\n });\r\n}\r\n\r\n// media\r\nexport function previewImage(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewImage\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function previewVideo(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewVideo\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\n// picker\r\nexport function showPicker(\r\n type: \"singleColumn\",\r\n data: SingleColumnPickerConfig,\r\n): Promise<MResponseWithData<number | null | undefined>>;\r\nexport function showPicker(\r\n type: \"multipleColumns\",\r\n data: MultipleColumnsPickerConfig,\r\n): Promise<MResponseWithData<number[] | null | undefined>>;\r\nexport function showPicker(\r\n type: \"date\" | \"time\",\r\n data: DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<string | null | undefined>>;\r\n\r\nexport function showPicker(\r\n type: \"singleColumn\" | \"multipleColumns\" | \"date\" | \"time\",\r\n data:\r\n | SingleColumnPickerConfig\r\n | MultipleColumnsPickerConfig\r\n | DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<number | number[] | string | null | undefined>> {\r\n let res;\r\n if (\r\n (type === \"time\" || type === \"date\") &&\r\n !(data as DateAndTimePickerConfig).dateFormat\r\n ) {\r\n res = jsBridge.callNative({\r\n api: \"showPicker\",\r\n data: {\r\n type,\r\n data: {\r\n ...data,\r\n dateFormat: type === \"date\" ? \"yyyy-MM-dd\" : \"HH:mm:ss\",\r\n },\r\n },\r\n });\r\n } else {\r\n res = jsBridge.callNative({\r\n api: \"showPicker\",\r\n data: { type, data },\r\n });\r\n }\r\n return res;\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n// async methods\r\n\r\nexport function getKVStorage(key: string): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorage(key: string, value: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setKVStorage\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorage(key: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"deleteKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorage(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"clearKVStorage\",\r\n });\r\n}\r\n\r\n// sync methods\r\n\r\nexport function getKVStorageSync(key: string): MResponseWithData<string> {\r\n return jsBridge.callNativeSync({\r\n api: \"getKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorageSync(key: string, value: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"setKVStorageSync\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorageSync(key: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"deleteKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorageSync(): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"clearKVStorageSync\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\nimport { DeviceInfo } from \"../model/deviceinfo\";\r\n\r\n/**\r\n *\r\n * @param type medium as default\r\n */\r\nexport function vibrate(\r\n type?: \"light\" | \"medium\" | \"heavy\",\r\n): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"vibrate\",\r\n data: {\r\n type: type ?? \"medium\",\r\n },\r\n });\r\n}\r\n\r\nexport function getClipboardData(): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getClipboardData\",\r\n });\r\n}\r\n\r\nexport function setClipboardData(\r\n data: string,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"setClipboardData\",\r\n data: {\r\n data,\r\n },\r\n });\r\n}\r\n\r\nexport function scanQRCode(): Promise<\r\n MResponseWithData<string | undefined | null>\r\n> {\r\n return jsBridge.callNative({ api: \"scanQRCode\" });\r\n}\r\n\r\nexport function getDeviceInfo(): Promise<MResponseWithData<DeviceInfo>> {\r\n return jsBridge.callNative({ api: \"getDeviceInfo\" });\r\n}\r\n\r\nexport function getDeviceInfoSync(): MResponseWithData<DeviceInfo> {\r\n return jsBridge.callNativeSync({ api: \"getDeviceInfoSync\" });\r\n}\r\n"],"mappings":"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","names":["MResponseStatusCode"]}
|
|
1
|
+
{"version":3,"sources":["../src/model/response/index.ts","../src/bridge/index.ts","../src/api/route.ts","../src/api/app.ts","../src/api/ui.ts","../src/api/kvstorage.ts","../src/api/device.ts"],"sourcesContent":["export enum MResponseStatusCode {\r\n SUCCESS = 0,\r\n FAILED = 7,\r\n}\r\n\r\nexport interface MResponse {\r\n /**\r\n * Integer, 0 for succeeded, other for failed.\r\n * Auto reject in promise when failed.\r\n */\r\n code: MResponseStatusCode;\r\n /**\r\n * Error msg or other info.\r\n */\r\n msg?: string;\r\n\r\n isSuccess(): boolean;\r\n}\r\n\r\nexport interface MResponseWithData<T> extends MResponse {\r\n data: T;\r\n hasData(): boolean;\r\n}\r\n","import { MResponseStatusCode } from \"../model\";\r\nimport { MRequest } from \"../model/request\";\r\n\r\ninterface WebKitCallable {\r\n postMessage: (data: string) => Promise<string>;\r\n}\r\n\r\ninterface WebView2Callable {\r\n callNative: (data: string) => Promise<string>;\r\n}\r\n\r\ninterface WebView2SyncCallable {\r\n callNativeSync: (data: string) => string;\r\n}\r\ndeclare global {\r\n interface Window {\r\n webkit?: {\r\n messageHandlers?: {\r\n MinipNativeInteraction?: WebKitCallable;\r\n };\r\n };\r\n chrome?: {\r\n webview?: {\r\n hostObjects?: {\r\n sync?: {\r\n MinipNativeInteraction?: WebView2SyncCallable;\r\n };\r\n MinipNativeInteraction?: WebView2Callable;\r\n };\r\n };\r\n };\r\n }\r\n}\r\n\r\nlet jsBridge: {\r\n callNative: <T>(req?: MRequest<T>) => Promise<any>;\r\n callNativeSync: <T>(req?: MRequest<T>) => any;\r\n};\r\n\r\n// apple webkit\r\nif (window.webkit?.messageHandlers?.MinipNativeInteraction) {\r\n const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;\r\n jsBridge = {\r\n callNative(req) {\r\n return _callNative\r\n .postMessage(JSON.stringify(req))\r\n .then((res) => JSON.parse(res))\r\n .then((res) => {\r\n if (res.code === MResponseStatusCode.SUCCESS) {\r\n res.isSuccess = () => true;\r\n const hashData = res.data !== null && res.data !== undefined;\r\n res.hasData = () => hashData;\r\n return res;\r\n } else {\r\n throw new Error(res.msg ?? \"Unknown error, res: \");\r\n }\r\n });\r\n },\r\n callNativeSync(req) {\r\n const res = prompt(JSON.stringify(req));\r\n if (res) {\r\n const r = JSON.parse(res);\r\n r.isSuccess = () => true;\r\n const hashData = r.data !== null && r.data !== undefined;\r\n r.hasData = () => hashData;\r\n return r;\r\n }\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Unknown error\",\r\n isSuccess: () => false,\r\n hasData: () => false,\r\n };\r\n },\r\n };\r\n}\r\n// windows webview2\r\nelse if (\r\n window.chrome?.webview?.hostObjects?.MinipNativeInteraction &&\r\n window.chrome.webview.hostObjects.sync?.MinipNativeInteraction\r\n) {\r\n const asyncObj = window.chrome?.webview?.hostObjects?.MinipNativeInteraction;\r\n const syncObj =\r\n window.chrome?.webview?.hostObjects?.sync?.MinipNativeInteraction;\r\n jsBridge = {\r\n callNative(req) {\r\n return asyncObj\r\n .callNative(JSON.stringify(req))\r\n .then((res) => JSON.parse(res))\r\n .then((res) => {\r\n if (res.code === MResponseStatusCode.SUCCESS) {\r\n res.isSuccess = () => true;\r\n const hashData = res.data !== null && res.data !== undefined;\r\n res.hasData = () => hashData;\r\n return res;\r\n } else {\r\n throw new Error(res.msg ?? \"Unknown error, res: \");\r\n }\r\n });\r\n },\r\n callNativeSync(req) {\r\n const res = syncObj.callNativeSync(JSON.stringify(req));\r\n if (res) {\r\n const r = JSON.parse(res);\r\n r.isSuccess = () => true;\r\n const hashData = r.data !== null && r.data !== undefined;\r\n r.hasData = () => hashData;\r\n return r;\r\n }\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Unknown error\",\r\n isSuccess: () => false,\r\n hasData: () => false,\r\n };\r\n },\r\n };\r\n}\r\n// error\r\nelse {\r\n jsBridge = {\r\n callNative() {\r\n return new Promise((_, reject) => {\r\n reject(\"Cannot find JavaScript Bridge!!!\");\r\n });\r\n },\r\n callNativeSync() {\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Cannot find JavaScript Bridge!!!\",\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport default jsBridge;\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse } from \"../model\";\r\n\r\nexport function navigateTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function navigateBack(delta: number = 1): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateBack\",\r\n data: {\r\n delta,\r\n },\r\n });\r\n}\r\n\r\nexport function redirectTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"redirectTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function openWebsite(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openWebsite\",\r\n data: { url },\r\n });\r\n}\r\n\r\nexport function openSettings(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openSettings\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { AppInfo, MResponse, MResponseWithData } from \"../model\";\r\n\r\nexport function closeApp(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"closeApp\",\r\n });\r\n}\r\n\r\nexport function showAppDetail(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showAppDetail\",\r\n });\r\n}\r\n\r\nexport function installApp(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"installApp\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function getInstalledAppList(): Promise<MResponseWithData<AppInfo[]>> {\r\n return jsBridge.callNative({\r\n api: \"getInstalledAppList\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport {\r\n AlertConfig,\r\n DateAndTimePickerConfig,\r\n MResponse,\r\n MResponseWithData,\r\n MultipleColumnsPickerConfig,\r\n ShowHUDRequest,\r\n SingleColumnPickerConfig,\r\n} from \"../model\";\r\n\r\n// navigation bar\r\n\r\nexport function setNavigationBarTitle(title: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarTitle\",\r\n data: {\r\n title,\r\n },\r\n });\r\n}\r\n\r\nexport function setNavigationBarColor(config: {\r\n foregroundColor: string;\r\n backgroundColor: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarColor\",\r\n data: config,\r\n });\r\n}\r\n\r\n// pulldown refresh\r\n\r\nexport function enablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"enablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function disablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"disablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function onPullDownRefresh(callback: (e: Event) => any) {\r\n window.addEventListener(\"pulldownrefresh\", callback);\r\n}\r\n\r\nexport function startPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"startPullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function stopPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"stopPullDownRefresh\",\r\n });\r\n}\r\n\r\n// HUD\r\n\r\nexport function showHUD(req: ShowHUDRequest): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showHUD\",\r\n data: req,\r\n });\r\n}\r\n\r\nexport function hideHUD(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"hideHUD\",\r\n });\r\n}\r\n\r\n// alert\r\nexport function showAlert(\r\n config: AlertConfig,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"showAlert\",\r\n data: config,\r\n });\r\n}\r\n\r\n// media\r\nexport function previewImage(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewImage\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function previewVideo(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewVideo\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\n// picker\r\nexport function showPicker(\r\n type: \"singleColumn\",\r\n data: SingleColumnPickerConfig,\r\n): Promise<MResponseWithData<number | null | undefined>>;\r\nexport function showPicker(\r\n type: \"multipleColumns\",\r\n data: MultipleColumnsPickerConfig,\r\n): Promise<MResponseWithData<number[] | null | undefined>>;\r\nexport function showPicker(\r\n type: \"date\" | \"time\",\r\n data: DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<string | null | undefined>>;\r\n\r\nexport function showPicker(\r\n type: \"singleColumn\" | \"multipleColumns\" | \"date\" | \"time\",\r\n data:\r\n | SingleColumnPickerConfig\r\n | MultipleColumnsPickerConfig\r\n | DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<number | number[] | string | null | undefined>> {\r\n let res;\r\n if (\r\n (type === \"time\" || type === \"date\") &&\r\n !(data as DateAndTimePickerConfig).dateFormat\r\n ) {\r\n res = jsBridge.callNative({\r\n api: \"showPicker\",\r\n data: {\r\n type,\r\n data: {\r\n ...data,\r\n dateFormat: type === \"date\" ? \"yyyy-MM-dd\" : \"HH:mm:ss\",\r\n },\r\n },\r\n });\r\n } else {\r\n res = jsBridge.callNative({\r\n api: \"showPicker\",\r\n data: { type, data },\r\n });\r\n }\r\n return res;\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n// async methods\r\n\r\nexport function getKVStorage(key: string): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorage(key: string, value: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setKVStorage\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorage(key: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"deleteKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorage(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"clearKVStorage\",\r\n });\r\n}\r\n\r\n// sync methods\r\n\r\nexport function getKVStorageSync(key: string): MResponseWithData<string> {\r\n return jsBridge.callNativeSync({\r\n api: \"getKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorageSync(key: string, value: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"setKVStorageSync\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorageSync(key: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"deleteKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorageSync(): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"clearKVStorageSync\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\nimport { DeviceInfo } from \"../model/deviceinfo\";\r\n\r\n/**\r\n *\r\n * @param type medium as default\r\n */\r\nexport function vibrate(\r\n type?: \"light\" | \"medium\" | \"heavy\",\r\n): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"vibrate\",\r\n data: {\r\n type: type ?? \"medium\",\r\n },\r\n });\r\n}\r\n\r\nexport function getClipboardData(): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getClipboardData\",\r\n });\r\n}\r\n\r\nexport function setClipboardData(\r\n data: string,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"setClipboardData\",\r\n data: {\r\n data,\r\n },\r\n });\r\n}\r\n\r\nexport function scanQRCode(): Promise<\r\n MResponseWithData<string | undefined | null>\r\n> {\r\n return jsBridge.callNative({ api: \"scanQRCode\" });\r\n}\r\n\r\nexport function getDeviceInfo(): Promise<MResponseWithData<DeviceInfo>> {\r\n return jsBridge.callNative({ api: \"getDeviceInfo\" });\r\n}\r\n\r\nexport function getDeviceInfoSync(): MResponseWithData<DeviceInfo> {\r\n return jsBridge.callNativeSync({ api: \"getDeviceInfoSync\" });\r\n}\r\n"],"mappings":"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","names":["MResponseStatusCode"]}
|
package/package.json
CHANGED
package/src/bridge/index.ts
CHANGED
|
@@ -1,15 +1,32 @@
|
|
|
1
1
|
import { MResponseStatusCode } from "../model";
|
|
2
2
|
import { MRequest } from "../model/request";
|
|
3
3
|
|
|
4
|
-
interface
|
|
4
|
+
interface WebKitCallable {
|
|
5
5
|
postMessage: (data: string) => Promise<string>;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
interface WebView2Callable {
|
|
9
|
+
callNative: (data: string) => Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface WebView2SyncCallable {
|
|
13
|
+
callNativeSync: (data: string) => string;
|
|
14
|
+
}
|
|
8
15
|
declare global {
|
|
9
16
|
interface Window {
|
|
10
17
|
webkit?: {
|
|
11
18
|
messageHandlers?: {
|
|
12
|
-
MinipNativeInteraction?:
|
|
19
|
+
MinipNativeInteraction?: WebKitCallable;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
chrome?: {
|
|
23
|
+
webview?: {
|
|
24
|
+
hostObjects?: {
|
|
25
|
+
sync?: {
|
|
26
|
+
MinipNativeInteraction?: WebView2SyncCallable;
|
|
27
|
+
};
|
|
28
|
+
MinipNativeInteraction?: WebView2Callable;
|
|
29
|
+
};
|
|
13
30
|
};
|
|
14
31
|
};
|
|
15
32
|
}
|
|
@@ -20,12 +37,8 @@ let jsBridge: {
|
|
|
20
37
|
callNativeSync: <T>(req?: MRequest<T>) => any;
|
|
21
38
|
};
|
|
22
39
|
|
|
23
|
-
//
|
|
24
|
-
if (
|
|
25
|
-
window.webkit &&
|
|
26
|
-
window.webkit.messageHandlers &&
|
|
27
|
-
window.webkit.messageHandlers.MinipNativeInteraction
|
|
28
|
-
) {
|
|
40
|
+
// apple webkit
|
|
41
|
+
if (window.webkit?.messageHandlers?.MinipNativeInteraction) {
|
|
29
42
|
const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;
|
|
30
43
|
jsBridge = {
|
|
31
44
|
callNative(req) {
|
|
@@ -60,8 +73,51 @@ if (
|
|
|
60
73
|
};
|
|
61
74
|
},
|
|
62
75
|
};
|
|
63
|
-
}
|
|
64
|
-
|
|
76
|
+
}
|
|
77
|
+
// windows webview2
|
|
78
|
+
else if (
|
|
79
|
+
window.chrome?.webview?.hostObjects?.MinipNativeInteraction &&
|
|
80
|
+
window.chrome.webview.hostObjects.sync?.MinipNativeInteraction
|
|
81
|
+
) {
|
|
82
|
+
const asyncObj = window.chrome?.webview?.hostObjects?.MinipNativeInteraction;
|
|
83
|
+
const syncObj =
|
|
84
|
+
window.chrome?.webview?.hostObjects?.sync?.MinipNativeInteraction;
|
|
85
|
+
jsBridge = {
|
|
86
|
+
callNative(req) {
|
|
87
|
+
return asyncObj
|
|
88
|
+
.callNative(JSON.stringify(req))
|
|
89
|
+
.then((res) => JSON.parse(res))
|
|
90
|
+
.then((res) => {
|
|
91
|
+
if (res.code === MResponseStatusCode.SUCCESS) {
|
|
92
|
+
res.isSuccess = () => true;
|
|
93
|
+
const hashData = res.data !== null && res.data !== undefined;
|
|
94
|
+
res.hasData = () => hashData;
|
|
95
|
+
return res;
|
|
96
|
+
} else {
|
|
97
|
+
throw new Error(res.msg ?? "Unknown error, res: ");
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
callNativeSync(req) {
|
|
102
|
+
const res = syncObj.callNativeSync(JSON.stringify(req));
|
|
103
|
+
if (res) {
|
|
104
|
+
const r = JSON.parse(res);
|
|
105
|
+
r.isSuccess = () => true;
|
|
106
|
+
const hashData = r.data !== null && r.data !== undefined;
|
|
107
|
+
r.hasData = () => hashData;
|
|
108
|
+
return r;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
code: MResponseStatusCode.FAILED,
|
|
112
|
+
msg: "Unknown error",
|
|
113
|
+
isSuccess: () => false,
|
|
114
|
+
hasData: () => false,
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// error
|
|
120
|
+
else {
|
|
65
121
|
jsBridge = {
|
|
66
122
|
callNative() {
|
|
67
123
|
return new Promise((_, reject) => {
|