@pisell/utils 1.0.19 → 1.0.21

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.
@@ -9,6 +9,7 @@ export declare const signOutUser: () => Promise<void>;
9
9
  export declare const readData: (path: string) => Promise<any>;
10
10
  export declare const writeData: (path: string, data: any) => Promise<void>;
11
11
  export declare const onDataChange: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
12
+ export declare const onDataChanged: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
12
13
  export declare const removeDataListener: (listener: any) => void;
13
14
  declare const _default: {
14
15
  signInUser: (email: string, password: string) => Promise<import("firebase/auth").User>;
@@ -17,5 +18,6 @@ declare const _default: {
17
18
  writeData: (path: string, data: any) => Promise<void>;
18
19
  onDataChange: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
19
20
  removeDataListener: (listener: any) => void;
21
+ onDataChanged: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
20
22
  };
21
23
  export default _default;
@@ -4,7 +4,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
4
4
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
5
  import { initializeApp } from 'firebase/app';
6
6
  import { getAuth, createUserWithEmailAndPassword, signInWithEmailAndPassword, signOut } from 'firebase/auth';
7
- import { getDatabase, ref, set, get, off, onValue } from 'firebase/database';
7
+ import { getDatabase, ref, set, get, off, onValue, onChildChanged } from 'firebase/database';
8
8
  import firebaseConfig from "./config";
9
9
  var isClient = typeof window != 'undefined' && window.document;
10
10
  var firebaseApp = {};
@@ -178,6 +178,15 @@ export var onDataChange = function onDataChange(path, callback) {
178
178
  return listener;
179
179
  };
180
180
 
181
+ // onChildChanged 方法 实现监听变化的key
182
+ export var onDataChanged = function onDataChanged(path, callback) {
183
+ var databaseRef = ref(database, getPath(path));
184
+ var listener = onChildChanged(databaseRef, callback);
185
+
186
+ // 返回实例,用于移除监听器
187
+ return listener;
188
+ };
189
+
181
190
  // 移除监听器
182
191
  export var removeDataListener = function removeDataListener(listener) {
183
192
  off(listener); // 移除监听器
@@ -189,5 +198,6 @@ export default {
189
198
  readData: readData,
190
199
  writeData: writeData,
191
200
  onDataChange: onDataChange,
192
- removeDataListener: removeDataListener
201
+ removeDataListener: removeDataListener,
202
+ onDataChanged: onDataChanged
193
203
  };
package/es/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from "./platform";
6
6
  export * from "./log";
7
7
  export * from "./format";
8
8
  export * from "./escPosPrinter";
9
+ export * from "./jsBridge";
package/es/index.js CHANGED
@@ -6,4 +6,5 @@ export * from "./platform";
6
6
  export * from "./log";
7
7
  export * from "./format";
8
8
  export * from "./escPosPrinter";
9
+ export * from "./jsBridge";
9
10
  // export { default as firebase } from './firebase';
@@ -0,0 +1,106 @@
1
+ declare type LanguageNumber = {
2
+ en: number;
3
+ zh_CN: number;
4
+ zh_HK: number;
5
+ };
6
+ declare type LanguageString = {
7
+ en: string;
8
+ zh_CN: string;
9
+ zh_HK: string;
10
+ } | string;
11
+ /**
12
+ * 打印小票
13
+ */
14
+ declare type WebPrint0 = {
15
+ /**
16
+ * 打印类型
17
+ * 0: 小票
18
+ * 1:ITS备货单/划菜单
19
+ * 2:手环
20
+ */
21
+ type: "0";
22
+ data: {
23
+ /** 订单ID */
24
+ order_id: string;
25
+ };
26
+ /** 打印语言对应的数量 */
27
+ language: LanguageNumber;
28
+ };
29
+ /**
30
+ * 打印ITS备货单/划菜单
31
+ */
32
+ declare type WebPrint1 = {
33
+ /**
34
+ * 打印类型
35
+ * 0: 小票
36
+ * 1:ITS备货单/划菜单
37
+ * 2:手环
38
+ */
39
+ type: "1";
40
+ data: {
41
+ /** 0:备货 1:划单 */
42
+ mode: "0" | "1";
43
+ resource: LanguageString;
44
+ /** 订单备注 */
45
+ order_note: string;
46
+ /** 订单时间或商品下单时间 */
47
+ time: string;
48
+ /** 订单编号 */
49
+ order_number?: string;
50
+ /** 商品 */
51
+ products: {
52
+ /** 商品名称 */
53
+ product_title: LanguageString;
54
+ /** 商品规格 */
55
+ product_option_string: LanguageString;
56
+ /** 商品备注 */
57
+ product_note: string;
58
+ /** 商品数量 */
59
+ product_quantity: number;
60
+ /** 加菜标识 待定 */
61
+ is_append?: boolean;
62
+ /** 退菜标识 待定 */
63
+ is_removed?: boolean;
64
+ }[];
65
+ };
66
+ /** 打印语言对应的数量 */
67
+ language: LanguageNumber;
68
+ };
69
+ declare type WebPrint2 = {
70
+ /**
71
+ * 打印类型
72
+ * 0: 小票
73
+ * 1:ITS备货单/划菜单
74
+ * 2:手环
75
+ */
76
+ type: "2";
77
+ data: {
78
+ /** 0: 普通票 1:成人票 2:免费成人票 */
79
+ type: "0" | "1" | "2";
80
+ /** 发行编码 */
81
+ encoded: string;
82
+ /** 编码 */
83
+ code: string;
84
+ /** 到期时间 */
85
+ expire_date: string;
86
+ areas: {
87
+ /** 区域名字 */
88
+ area_name: string;
89
+ /** 区域代码 */
90
+ area_code: string;
91
+ /** 可用次数 */
92
+ limit_num: number;
93
+ /** 已用次数 */
94
+ used_num: number;
95
+ }[];
96
+ };
97
+ };
98
+ declare type WebPrintParams = WebPrint0 | WebPrint1 | WebPrint2;
99
+ /**
100
+ * webView页面中调用打印机打印
101
+ * 此api暂时只支持native app平台下ios手机
102
+ * @param params
103
+ * @param callback
104
+ */
105
+ export declare function webPrint(params: WebPrintParams, callback: (...arg: any) => void): void;
106
+ export {};
@@ -0,0 +1,18 @@
1
+ import regDeviceApi from "./regDeviceApi";
2
+ /**
3
+ * webView页面中调用打印机打印
4
+ * 此api暂时只支持native app平台下ios手机
5
+ * @param params
6
+ * @param callback
7
+ */
8
+ export function webPrint(params, _callback) {
9
+ regDeviceApi().then(function (jsBridge) {
10
+ jsBridge.callDeviceApi({
11
+ apiName: "webPrint",
12
+ params: params,
13
+ callback: function callback() {
14
+ _callback && _callback.apply(void 0, arguments);
15
+ }
16
+ });
17
+ });
18
+ }
@@ -0,0 +1,15 @@
1
+ type ComposedJSBridge = {
2
+ // eslint-disable-next-line camelcase
3
+ callDeviceApi: (a: {
4
+ apiName: string;
5
+ callback: Functon;
6
+ onError?: (e: any) => void;
7
+ params?: any;
8
+ key_events?: string[];
9
+ }) => void;
10
+ calledByDevice: (a: { apiName: string; callback: Functon }) => void;
11
+ };
12
+
13
+ const regDeviceApi: () => Promise<ComposedJSBridge>;
14
+
15
+ export default regDeviceApi;
@@ -0,0 +1,137 @@
1
+ import { isAndroid, isIos } from "../platform";
2
+ var androidRegStatus = false;
3
+ var iosRegStatus = false;
4
+ var androidBridge;
5
+ var iosBridge;
6
+ var composedBridge;
7
+ function regIosJsBridge(callback) {
8
+ if (window.WebViewJavascriptBridge) {
9
+ callback(window.WebViewJavascriptBridge);
10
+ return;
11
+ }
12
+ if (window.WVJBCallbacks) {
13
+ window.WVJBCallbacks.push(callback);
14
+ return;
15
+ }
16
+ window.WVJBCallbacks = [callback];
17
+ var WVJBIframe = document.createElement('iframe');
18
+ WVJBIframe.style.display = 'none';
19
+ WVJBIframe.src = 'https://__bridge_loaded__';
20
+ document.documentElement && document.documentElement.appendChild(WVJBIframe);
21
+ setTimeout(function () {
22
+ try {
23
+ document.documentElement && document.documentElement.removeChild(WVJBIframe);
24
+ } catch (e) {
25
+ console.log(e);
26
+ }
27
+ }, 0);
28
+ }
29
+ function regAndroidJsBridge(extraInit) {
30
+ if (window._jsBridge) {
31
+ extraInit(window._jsBridge);
32
+ return;
33
+ }
34
+ document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
35
+ var bridge = event.bridge;
36
+ window._jsBridge = bridge;
37
+ if (!bridge) return;
38
+ // 这段代码不能删除
39
+ bridge.init(function (message, responseCallback) {
40
+ if (responseCallback) {
41
+ responseCallback('init responseCallback');
42
+ }
43
+ });
44
+ extraInit(bridge);
45
+ }, false);
46
+ }
47
+
48
+ /**
49
+ * 通用jsBridge
50
+ * @param deviceType
51
+ */
52
+ function getComposedBridge(deviceType) {
53
+ if (composedBridge) {
54
+ return composedBridge;
55
+ }
56
+ composedBridge = {
57
+ // 主动调用设备的方法
58
+ callDeviceApi: function callDeviceApi(_ref) {
59
+ var apiName = _ref.apiName,
60
+ inCb = _ref.callback,
61
+ _ref$params = _ref.params,
62
+ params = _ref$params === void 0 ? {} : _ref$params,
63
+ onError = _ref.onError;
64
+ var callback = function callback(res) {
65
+ var result = res;
66
+ try {
67
+ result = JSON.parse(res);
68
+ } catch (error) {
69
+ console.log("error ".concat(apiName), error);
70
+ }
71
+ if (result.code || result.code === 0) {
72
+ // 强转字符串,兼容安卓的number
73
+ result.code = "".concat(result.code);
74
+ }
75
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
76
+ args[_key - 1] = arguments[_key];
77
+ }
78
+ inCb.apply(void 0, [result].concat(args));
79
+ };
80
+ if (deviceType === 'iphone') {
81
+ iosBridge.callHandler(apiName, params, callback, function (e) {
82
+ console.log(e, '--- 调用ios api报错:', apiName);
83
+ if (onError) {
84
+ onError(e);
85
+ }
86
+ });
87
+ } else if (deviceType === 'android') {
88
+ androidBridge.callHandler(apiName, params, callback, function (e) {
89
+ console.log(e, '--- 调用android api报错:', apiName);
90
+ if (onError) {
91
+ onError(e);
92
+ }
93
+ });
94
+ } else {
95
+ console.log('--- 没获取到js bridge ---');
96
+ }
97
+ },
98
+ // 被设备调用的方法
99
+ calledByDevice: function calledByDevice(_ref2) {
100
+ var apiName = _ref2.apiName,
101
+ callback = _ref2.callback;
102
+ if (deviceType === 'iphone') {
103
+ iosBridge.registerHandler(apiName, callback);
104
+ } else if (deviceType === 'android') {
105
+ androidBridge.registerHandler(apiName, callback);
106
+ }
107
+ }
108
+ };
109
+ return composedBridge;
110
+ }
111
+ export default function regDeviceApi() {
112
+ return new Promise(function (resolve, reject) {
113
+ if (isIos() && !iosRegStatus) {
114
+ regIosJsBridge(function (bridge) {
115
+ iosRegStatus = true;
116
+ iosBridge = bridge;
117
+ var realBridge = getComposedBridge('iphone');
118
+ resolve(realBridge);
119
+ });
120
+ } else if (isIos() && iosRegStatus) {
121
+ var realBridge = getComposedBridge('iphone');
122
+ resolve(realBridge);
123
+ } else if (isAndroid() && !androidRegStatus) {
124
+ regAndroidJsBridge(function (bridge) {
125
+ androidBridge = bridge;
126
+ androidRegStatus = true;
127
+ var realBridge = getComposedBridge('android');
128
+ resolve(realBridge);
129
+ });
130
+ } else if (isAndroid() && androidRegStatus) {
131
+ var _realBridge = getComposedBridge('android');
132
+ resolve(_realBridge);
133
+ } else {
134
+ reject();
135
+ }
136
+ });
137
+ }
@@ -9,6 +9,7 @@ export declare const signOutUser: () => Promise<void>;
9
9
  export declare const readData: (path: string) => Promise<any>;
10
10
  export declare const writeData: (path: string, data: any) => Promise<void>;
11
11
  export declare const onDataChange: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
12
+ export declare const onDataChanged: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
12
13
  export declare const removeDataListener: (listener: any) => void;
13
14
  declare const _default: {
14
15
  signInUser: (email: string, password: string) => Promise<import("firebase/auth").User>;
@@ -17,5 +18,6 @@ declare const _default: {
17
18
  writeData: (path: string, data: any) => Promise<void>;
18
19
  onDataChange: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
19
20
  removeDataListener: (listener: any) => void;
21
+ onDataChanged: (path: string, callback: (snapshot: any) => void) => import("firebase/database").Unsubscribe;
20
22
  };
21
23
  export default _default;
@@ -33,6 +33,7 @@ __export(firebase_exports, {
33
33
  firebaseApp: () => firebaseApp,
34
34
  getPath: () => getPath,
35
35
  onDataChange: () => onDataChange,
36
+ onDataChanged: () => onDataChanged,
36
37
  readData: () => readData,
37
38
  removeDataListener: () => removeDataListener,
38
39
  setAuthStateChangeCallback: () => setAuthStateChangeCallback,
@@ -117,6 +118,11 @@ var onDataChange = (path, callback) => {
117
118
  const listener = (0, import_database.onValue)(databaseRef, callback);
118
119
  return listener;
119
120
  };
121
+ var onDataChanged = (path, callback) => {
122
+ const databaseRef = (0, import_database.ref)(database, getPath(path));
123
+ const listener = (0, import_database.onChildChanged)(databaseRef, callback);
124
+ return listener;
125
+ };
120
126
  var removeDataListener = (listener) => {
121
127
  (0, import_database.off)(listener);
122
128
  };
@@ -126,13 +132,15 @@ var firebase_default = {
126
132
  readData,
127
133
  writeData,
128
134
  onDataChange,
129
- removeDataListener
135
+ removeDataListener,
136
+ onDataChanged
130
137
  };
131
138
  // Annotate the CommonJS export names for ESM import in node:
132
139
  0 && (module.exports = {
133
140
  firebaseApp,
134
141
  getPath,
135
142
  onDataChange,
143
+ onDataChanged,
136
144
  readData,
137
145
  removeDataListener,
138
146
  setAuthStateChangeCallback,
package/lib/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from "./platform";
6
6
  export * from "./log";
7
7
  export * from "./format";
8
8
  export * from "./escPosPrinter";
9
+ export * from "./jsBridge";
package/lib/index.js CHANGED
@@ -24,6 +24,7 @@ __reExport(src_exports, require("./platform"), module.exports);
24
24
  __reExport(src_exports, require("./log"), module.exports);
25
25
  __reExport(src_exports, require("./format"), module.exports);
26
26
  __reExport(src_exports, require("./escPosPrinter"), module.exports);
27
+ __reExport(src_exports, require("./jsBridge"), module.exports);
27
28
  // Annotate the CommonJS export names for ESM import in node:
28
29
  0 && (module.exports = {
29
30
  ...require("./otherUtils"),
@@ -33,5 +34,6 @@ __reExport(src_exports, require("./escPosPrinter"), module.exports);
33
34
  ...require("./platform"),
34
35
  ...require("./log"),
35
36
  ...require("./format"),
36
- ...require("./escPosPrinter")
37
+ ...require("./escPosPrinter"),
38
+ ...require("./jsBridge")
37
39
  });
@@ -0,0 +1,106 @@
1
+ declare type LanguageNumber = {
2
+ en: number;
3
+ zh_CN: number;
4
+ zh_HK: number;
5
+ };
6
+ declare type LanguageString = {
7
+ en: string;
8
+ zh_CN: string;
9
+ zh_HK: string;
10
+ } | string;
11
+ /**
12
+ * 打印小票
13
+ */
14
+ declare type WebPrint0 = {
15
+ /**
16
+ * 打印类型
17
+ * 0: 小票
18
+ * 1:ITS备货单/划菜单
19
+ * 2:手环
20
+ */
21
+ type: "0";
22
+ data: {
23
+ /** 订单ID */
24
+ order_id: string;
25
+ };
26
+ /** 打印语言对应的数量 */
27
+ language: LanguageNumber;
28
+ };
29
+ /**
30
+ * 打印ITS备货单/划菜单
31
+ */
32
+ declare type WebPrint1 = {
33
+ /**
34
+ * 打印类型
35
+ * 0: 小票
36
+ * 1:ITS备货单/划菜单
37
+ * 2:手环
38
+ */
39
+ type: "1";
40
+ data: {
41
+ /** 0:备货 1:划单 */
42
+ mode: "0" | "1";
43
+ resource: LanguageString;
44
+ /** 订单备注 */
45
+ order_note: string;
46
+ /** 订单时间或商品下单时间 */
47
+ time: string;
48
+ /** 订单编号 */
49
+ order_number?: string;
50
+ /** 商品 */
51
+ products: {
52
+ /** 商品名称 */
53
+ product_title: LanguageString;
54
+ /** 商品规格 */
55
+ product_option_string: LanguageString;
56
+ /** 商品备注 */
57
+ product_note: string;
58
+ /** 商品数量 */
59
+ product_quantity: number;
60
+ /** 加菜标识 待定 */
61
+ is_append?: boolean;
62
+ /** 退菜标识 待定 */
63
+ is_removed?: boolean;
64
+ }[];
65
+ };
66
+ /** 打印语言对应的数量 */
67
+ language: LanguageNumber;
68
+ };
69
+ declare type WebPrint2 = {
70
+ /**
71
+ * 打印类型
72
+ * 0: 小票
73
+ * 1:ITS备货单/划菜单
74
+ * 2:手环
75
+ */
76
+ type: "2";
77
+ data: {
78
+ /** 0: 普通票 1:成人票 2:免费成人票 */
79
+ type: "0" | "1" | "2";
80
+ /** 发行编码 */
81
+ encoded: string;
82
+ /** 编码 */
83
+ code: string;
84
+ /** 到期时间 */
85
+ expire_date: string;
86
+ areas: {
87
+ /** 区域名字 */
88
+ area_name: string;
89
+ /** 区域代码 */
90
+ area_code: string;
91
+ /** 可用次数 */
92
+ limit_num: number;
93
+ /** 已用次数 */
94
+ used_num: number;
95
+ }[];
96
+ };
97
+ };
98
+ declare type WebPrintParams = WebPrint0 | WebPrint1 | WebPrint2;
99
+ /**
100
+ * webView页面中调用打印机打印
101
+ * 此api暂时只支持native app平台下ios手机
102
+ * @param params
103
+ * @param callback
104
+ */
105
+ export declare function webPrint(params: WebPrintParams, callback: (...arg: any) => void): void;
106
+ export {};
@@ -0,0 +1,50 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/jsBridge/index.ts
30
+ var jsBridge_exports = {};
31
+ __export(jsBridge_exports, {
32
+ webPrint: () => webPrint
33
+ });
34
+ module.exports = __toCommonJS(jsBridge_exports);
35
+ var import_regDeviceApi = __toESM(require("./regDeviceApi"));
36
+ function webPrint(params, callback) {
37
+ (0, import_regDeviceApi.default)().then((jsBridge) => {
38
+ jsBridge.callDeviceApi({
39
+ apiName: "webPrint",
40
+ params,
41
+ callback: (...arg) => {
42
+ callback && callback(...arg);
43
+ }
44
+ });
45
+ });
46
+ }
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ webPrint
50
+ });
@@ -0,0 +1,15 @@
1
+ type ComposedJSBridge = {
2
+ // eslint-disable-next-line camelcase
3
+ callDeviceApi: (a: {
4
+ apiName: string;
5
+ callback: Functon;
6
+ onError?: (e: any) => void;
7
+ params?: any;
8
+ key_events?: string[];
9
+ }) => void;
10
+ calledByDevice: (a: { apiName: string; callback: Functon }) => void;
11
+ };
12
+
13
+ const regDeviceApi: () => Promise<ComposedJSBridge>;
14
+
15
+ export default regDeviceApi;
@@ -0,0 +1,149 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/jsBridge/regDeviceApi.js
20
+ var regDeviceApi_exports = {};
21
+ __export(regDeviceApi_exports, {
22
+ default: () => regDeviceApi
23
+ });
24
+ module.exports = __toCommonJS(regDeviceApi_exports);
25
+ var import_platform = require("../platform");
26
+ var androidRegStatus = false;
27
+ var iosRegStatus = false;
28
+ var androidBridge;
29
+ var iosBridge;
30
+ var composedBridge;
31
+ function regIosJsBridge(callback) {
32
+ if (window.WebViewJavascriptBridge) {
33
+ callback(window.WebViewJavascriptBridge);
34
+ return;
35
+ }
36
+ if (window.WVJBCallbacks) {
37
+ window.WVJBCallbacks.push(callback);
38
+ return;
39
+ }
40
+ window.WVJBCallbacks = [callback];
41
+ const WVJBIframe = document.createElement("iframe");
42
+ WVJBIframe.style.display = "none";
43
+ WVJBIframe.src = "https://__bridge_loaded__";
44
+ document.documentElement && document.documentElement.appendChild(WVJBIframe);
45
+ setTimeout(() => {
46
+ try {
47
+ document.documentElement && document.documentElement.removeChild(WVJBIframe);
48
+ } catch (e) {
49
+ console.log(e);
50
+ }
51
+ }, 0);
52
+ }
53
+ function regAndroidJsBridge(extraInit) {
54
+ if (window._jsBridge) {
55
+ extraInit(window._jsBridge);
56
+ return;
57
+ }
58
+ document.addEventListener(
59
+ "WebViewJavascriptBridgeReady",
60
+ (event) => {
61
+ const { bridge } = event;
62
+ window._jsBridge = bridge;
63
+ if (!bridge)
64
+ return;
65
+ bridge.init((message, responseCallback) => {
66
+ if (responseCallback) {
67
+ responseCallback("init responseCallback");
68
+ }
69
+ });
70
+ extraInit(bridge);
71
+ },
72
+ false
73
+ );
74
+ }
75
+ function getComposedBridge(deviceType) {
76
+ if (composedBridge) {
77
+ return composedBridge;
78
+ }
79
+ composedBridge = {
80
+ // 主动调用设备的方法
81
+ callDeviceApi: ({ apiName, callback: inCb, params = {}, onError }) => {
82
+ const callback = (res, ...args) => {
83
+ let result = res;
84
+ try {
85
+ result = JSON.parse(res);
86
+ } catch (error) {
87
+ console.log(`error ${apiName}`, error);
88
+ }
89
+ if (result.code || result.code === 0) {
90
+ result.code = `${result.code}`;
91
+ }
92
+ inCb(result, ...args);
93
+ };
94
+ if (deviceType === "iphone") {
95
+ iosBridge.callHandler(apiName, params, callback, (e) => {
96
+ console.log(e, "--- \u8C03\u7528ios api\u62A5\u9519\uFF1A", apiName);
97
+ if (onError) {
98
+ onError(e);
99
+ }
100
+ });
101
+ } else if (deviceType === "android") {
102
+ androidBridge.callHandler(apiName, params, callback, (e) => {
103
+ console.log(e, "--- \u8C03\u7528android api\u62A5\u9519\uFF1A", apiName);
104
+ if (onError) {
105
+ onError(e);
106
+ }
107
+ });
108
+ } else {
109
+ console.log("--- \u6CA1\u83B7\u53D6\u5230js bridge ---");
110
+ }
111
+ },
112
+ // 被设备调用的方法
113
+ calledByDevice: ({ apiName, callback }) => {
114
+ if (deviceType === "iphone") {
115
+ iosBridge.registerHandler(apiName, callback);
116
+ } else if (deviceType === "android") {
117
+ androidBridge.registerHandler(apiName, callback);
118
+ }
119
+ }
120
+ };
121
+ return composedBridge;
122
+ }
123
+ function regDeviceApi() {
124
+ return new Promise((resolve, reject) => {
125
+ if ((0, import_platform.isIos)() && !iosRegStatus) {
126
+ regIosJsBridge((bridge) => {
127
+ iosRegStatus = true;
128
+ iosBridge = bridge;
129
+ const realBridge = getComposedBridge("iphone");
130
+ resolve(realBridge);
131
+ });
132
+ } else if ((0, import_platform.isIos)() && iosRegStatus) {
133
+ const realBridge = getComposedBridge("iphone");
134
+ resolve(realBridge);
135
+ } else if ((0, import_platform.isAndroid)() && !androidRegStatus) {
136
+ regAndroidJsBridge((bridge) => {
137
+ androidBridge = bridge;
138
+ androidRegStatus = true;
139
+ const realBridge = getComposedBridge("android");
140
+ resolve(realBridge);
141
+ });
142
+ } else if ((0, import_platform.isAndroid)() && androidRegStatus) {
143
+ const realBridge = getComposedBridge("android");
144
+ resolve(realBridge);
145
+ } else {
146
+ reject();
147
+ }
148
+ });
149
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/utils",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "sideEffects": false,
5
5
  "main": "./lib/index.js",
6
6
  "module": "./es/index.js",