@tarojs/taro-h5 3.5.11 → 3.6.0-alpha.1

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.cjs.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var Taro = require('@tarojs/api');
6
6
  var router = require('@tarojs/router');
7
+ var shared = require('@tarojs/shared');
7
8
  var utils = require('@tarojs/router/dist/utils');
8
9
  var runtime = require('@tarojs/runtime');
9
10
  var base64Js = require('base64-js');
@@ -37,30 +38,38 @@ var jsonpRetry__default = /*#__PURE__*/_interopDefaultLegacy(jsonpRetry);
37
38
 
38
39
  class MethodHandler {
39
40
  constructor({ name, success, fail, complete }) {
41
+ this.isHandlerError = false;
40
42
  this.methodName = name;
41
43
  this.__success = success;
42
44
  this.__fail = fail;
43
45
  this.__complete = complete;
46
+ this.isHandlerError = shared.isFunction(this.__complete) || shared.isFunction(this.__fail);
44
47
  }
45
- success(res = {}, resolve = Promise.resolve.bind(Promise)) {
48
+ success(res = {}, promise = {}) {
46
49
  if (!res.errMsg) {
47
50
  res.errMsg = `${this.methodName}:ok`;
48
51
  }
49
- typeof this.__success === 'function' && this.__success(res);
50
- typeof this.__complete === 'function' && this.__complete(res);
52
+ shared.isFunction(this.__success) && this.__success(res);
53
+ shared.isFunction(this.__complete) && this.__complete(res);
54
+ const { resolve = Promise.resolve.bind(Promise) } = promise;
51
55
  return resolve(res);
52
56
  }
53
- fail(res = {}, reject = Promise.reject.bind(Promise)) {
57
+ fail(res = {}, promise = {}) {
54
58
  if (!res.errMsg) {
55
59
  res.errMsg = `${this.methodName}:fail`;
56
60
  }
57
61
  else {
58
62
  res.errMsg = `${this.methodName}:fail ${res.errMsg}`;
59
63
  }
60
- console.error(res.errMsg);
61
- typeof this.__fail === 'function' && this.__fail(res);
62
- typeof this.__complete === 'function' && this.__complete(res);
63
- return reject(res);
64
+ if (process.env.NODE_ENV !== 'production') {
65
+ console.error(res.errMsg);
66
+ }
67
+ shared.isFunction(this.__fail) && this.__fail(res);
68
+ shared.isFunction(this.__complete) && this.__complete(res);
69
+ const { resolve = Promise.resolve.bind(Promise), reject = Promise.reject.bind(Promise) } = promise;
70
+ return this.isHandlerError
71
+ ? resolve(res)
72
+ : reject(res);
64
73
  }
65
74
  }
66
75
  class CallbackManager {
@@ -104,12 +113,12 @@ class CallbackManager {
104
113
  */
105
114
  this.trigger = (...args) => {
106
115
  this.callbacks.forEach(opt => {
107
- if (typeof opt === 'function') {
116
+ if (shared.isFunction(opt)) {
108
117
  opt(...args);
109
118
  }
110
119
  else {
111
120
  const { callback, ctx } = opt;
112
- typeof callback === 'function' && callback.call(ctx, ...args);
121
+ shared.isFunction(callback) && callback.call(ctx, ...args);
113
122
  }
114
123
  });
115
124
  };
@@ -161,16 +170,12 @@ function debounce(fn, ms = 250, scope) {
161
170
  };
162
171
  }
163
172
 
164
- function isFunction(obj) {
165
- return typeof obj === 'function';
166
- }
167
173
  const VALID_COLOR_REG = /^#[0-9a-fA-F]{6}$/;
168
174
  const isValidColor = (color) => {
169
175
  return VALID_COLOR_REG.test(color);
170
176
  };
171
177
 
172
178
  /* eslint-disable prefer-promise-reject-errors */
173
- const isProd = process.env.NODE_ENV === 'production';
174
179
  function shouldBeObject(target) {
175
180
  if (target && typeof target === 'object')
176
181
  return { flag: true };
@@ -252,7 +257,7 @@ function temporarilyNotSupport(name = '') {
252
257
  type: 'method',
253
258
  category: 'temporarily',
254
259
  });
255
- if (isProd) {
260
+ if (process.env.NODE_ENV === 'production') {
256
261
  console.warn(errMsg);
257
262
  return handle.success({ errMsg });
258
263
  }
@@ -272,7 +277,7 @@ function weixinCorpSupport(name) {
272
277
  type: 'method',
273
278
  category: 'weixin_corp',
274
279
  });
275
- if (isProd) {
280
+ if (process.env.NODE_ENV === 'production') {
276
281
  console.warn(errMsg);
277
282
  return handle.success({ errMsg });
278
283
  }
@@ -292,7 +297,7 @@ function permanentlyNotSupport(name = '') {
292
297
  type: 'method',
293
298
  category: 'permanently',
294
299
  });
295
- if (isProd) {
300
+ if (process.env.NODE_ENV === 'production') {
296
301
  console.warn(errMsg);
297
302
  return handle.success({ errMsg });
298
303
  }
@@ -308,7 +313,7 @@ function processOpenApi({ name, defaultOptions, standardMethod, formatOptions =
308
313
  // @ts-ignore
309
314
  const targetApi = (_a = window === null || window === void 0 ? void 0 : window.wx) === null || _a === void 0 ? void 0 : _a[name];
310
315
  const opts = formatOptions(Object.assign({}, defaultOptions, options));
311
- if (typeof targetApi === 'function') {
316
+ if (shared.isFunction(targetApi)) {
312
317
  return new Promise((resolve, reject) => {
313
318
  ['fail', 'success', 'complete'].forEach(k => {
314
319
  opts[k] = preRef => {
@@ -325,7 +330,7 @@ function processOpenApi({ name, defaultOptions, standardMethod, formatOptions =
325
330
  });
326
331
  });
327
332
  }
328
- else if (typeof standardMethod === 'function') {
333
+ else if (shared.isFunction(standardMethod)) {
329
334
  return standardMethod(opts);
330
335
  }
331
336
  else {
@@ -657,6 +662,8 @@ const getDeviceInfo = () => {
657
662
  const info = {
658
663
  /** 应用二进制接口类型(仅 Android 支持) */
659
664
  abi: '',
665
+ /** 设备二进制接口类型(仅 Android 支持) */
666
+ deviceAbi: '',
660
667
  /** 设备性能等级(仅Android小游戏)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) */
661
668
  benchmarkLevel: -1,
662
669
  /** 设备品牌 */
@@ -666,7 +673,9 @@ const getDeviceInfo = () => {
666
673
  /** 操作系统及版本 */
667
674
  system: md.os(),
668
675
  /** 客户端平台 */
669
- platform: navigator.platform
676
+ platform: navigator.platform,
677
+ /** 设备二进制接口类型(仅 Android 支持) */
678
+ CPUType: '',
670
679
  };
671
680
  return info;
672
681
  };
@@ -1512,7 +1521,7 @@ const setClipboardData = ({ data, success, fail, complete }) => __awaiter(void 0
1512
1521
  * iOS < 10 的系统可能无法使用编程方式访问剪贴板,参考:
1513
1522
  * https://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios/34046084
1514
1523
  */
1515
- if (typeof document.execCommand === 'function') {
1524
+ if (shared.isFunction(document.execCommand)) {
1516
1525
  const textarea = document.createElement('textarea');
1517
1526
  textarea.readOnly = true;
1518
1527
  textarea.value = data;
@@ -1972,9 +1981,9 @@ const getLocationByW3CApi = (options) => {
1972
1981
  /** 调用结果,自动补充 */
1973
1982
  errMsg: ''
1974
1983
  };
1975
- handle.success(result, resolve);
1984
+ handle.success(result, { resolve, reject });
1976
1985
  }, (error) => {
1977
- handle.fail({ errMsg: error.message }, reject);
1986
+ handle.fail({ errMsg: error.message }, { resolve, reject });
1978
1987
  }, positionOptions);
1979
1988
  });
1980
1989
  };
@@ -2072,7 +2081,7 @@ const chooseLocation = ({ success, fail, complete, mapOpts } = {}) => {
2072
2081
  console.warn('chooseLocation api 依赖腾讯地图定位api,需要在 defineConstants 中配置 LOCATION_APIKEY');
2073
2082
  return handle.fail({
2074
2083
  errMsg: 'LOCATION_APIKEY needed'
2075
- }, reject);
2084
+ }, { resolve, reject });
2076
2085
  }
2077
2086
  const onMessage = event => {
2078
2087
  // 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
@@ -2091,14 +2100,14 @@ const chooseLocation = ({ success, fail, complete, mapOpts } = {}) => {
2091
2100
  chooser.remove();
2092
2101
  }, 300);
2093
2102
  if (res) {
2094
- return handle.fail(res, reject);
2103
+ return handle.fail(res, { resolve, reject });
2095
2104
  }
2096
2105
  else {
2097
2106
  if (chooseLocation.latitude && chooseLocation.longitude) {
2098
- return handle.success(chooseLocation, resolve);
2107
+ return handle.success(chooseLocation, { resolve, reject });
2099
2108
  }
2100
2109
  else {
2101
- return handle.fail({}, reject);
2110
+ return handle.fail({}, { resolve, reject });
2102
2111
  }
2103
2112
  }
2104
2113
  }, key, mapOpts);
@@ -2355,12 +2364,12 @@ const getImageInfo = (options) => {
2355
2364
  width: image.naturalWidth,
2356
2365
  height: image.naturalHeight,
2357
2366
  path: getBase64Image(image) || src
2358
- }, resolve);
2367
+ }, { resolve, reject });
2359
2368
  };
2360
2369
  image.onerror = (e) => {
2361
2370
  handle.fail({
2362
2371
  errMsg: e.message
2363
- }, reject);
2372
+ }, { resolve, reject });
2364
2373
  };
2365
2374
  image.src = src;
2366
2375
  });
@@ -2387,7 +2396,7 @@ const previewImage = (options) => __awaiter(void 0, void 0, void 0, function* ()
2387
2396
  item.appendChild(div);
2388
2397
  // Note: 等待图片加载完后返回,会导致轮播被卡住
2389
2398
  resolve(item);
2390
- if (typeof loadFail === 'function') {
2399
+ if (shared.isFunction(loadFail)) {
2391
2400
  image.addEventListener('error', (err) => {
2392
2401
  loadFail({ errMsg: err.message });
2393
2402
  });
@@ -2492,7 +2501,7 @@ const chooseImage = function (options) {
2492
2501
  el.removeAttribute('capture');
2493
2502
  }
2494
2503
  }
2495
- return new Promise(resolve => {
2504
+ return new Promise((resolve, reject) => {
2496
2505
  const TaroMouseEvents = document.createEvent('MouseEvents');
2497
2506
  TaroMouseEvents.initEvent('click', true, true);
2498
2507
  if (el) {
@@ -2511,7 +2520,7 @@ const chooseImage = function (options) {
2511
2520
  (_a = res.tempFilePaths) === null || _a === void 0 ? void 0 : _a.push(url);
2512
2521
  (_b = res.tempFiles) === null || _b === void 0 ? void 0 : _b.push({ path: url, size: item.size, type: item.type, originalFileObj: item });
2513
2522
  });
2514
- handle.success(res, resolve);
2523
+ handle.success(res, { resolve, reject });
2515
2524
  target.value = '';
2516
2525
  }
2517
2526
  };
@@ -2579,7 +2588,7 @@ const chooseVideo = (options) => {
2579
2588
  inputEl.setAttribute('accept', 'video/*');
2580
2589
  inputEl.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
2581
2590
  document.body.appendChild(inputEl);
2582
- return new Promise(resolve => {
2591
+ return new Promise((resolve, reject) => {
2583
2592
  const TaroMouseEvents = document.createEvent('MouseEvents');
2584
2593
  TaroMouseEvents.initEvent('click', true, true);
2585
2594
  inputEl.dispatchEvent(TaroMouseEvents);
@@ -2600,7 +2609,7 @@ const chooseVideo = (options) => {
2600
2609
  res.size = event.total;
2601
2610
  res.height = videoEl.videoHeight;
2602
2611
  res.width = videoEl.videoHeight;
2603
- return handle.success(res, resolve);
2612
+ return handle.success(res, { resolve, reject });
2604
2613
  };
2605
2614
  };
2606
2615
  if (file) {
@@ -2881,13 +2890,13 @@ function _request(options) {
2881
2890
  .then(data => {
2882
2891
  res.statusCode = 200;
2883
2892
  res.data = data;
2884
- typeof success === 'function' && success(res);
2885
- typeof complete === 'function' && complete(res);
2893
+ shared.isFunction(success) && success(res);
2894
+ shared.isFunction(complete) && complete(res);
2886
2895
  return res;
2887
2896
  })
2888
2897
  .catch(err => {
2889
- typeof fail === 'function' && fail(err);
2890
- typeof complete === 'function' && complete(res);
2898
+ shared.isFunction(fail) && fail(err);
2899
+ shared.isFunction(complete) && complete(res);
2891
2900
  return Promise.reject(err);
2892
2901
  });
2893
2902
  }
@@ -2955,13 +2964,13 @@ function _request(options) {
2955
2964
  })
2956
2965
  .then(data => {
2957
2966
  res.data = data;
2958
- typeof success === 'function' && success(res);
2959
- typeof complete === 'function' && complete(res);
2967
+ shared.isFunction(success) && success(res);
2968
+ shared.isFunction(complete) && complete(res);
2960
2969
  return res;
2961
2970
  })
2962
2971
  .catch(err => {
2963
- typeof fail === 'function' && fail(err);
2964
- typeof complete === 'function' && complete(res);
2972
+ shared.isFunction(fail) && fail(err);
2973
+ shared.isFunction(complete) && complete(res);
2965
2974
  err.statusCode = res.statusCode;
2966
2975
  err.errMsg = err.message;
2967
2976
  return Promise.reject(err);
@@ -3150,14 +3159,14 @@ class SocketTask {
3150
3159
  if (this.readyState !== 1) {
3151
3160
  const res = { errMsg: 'SocketTask.send:fail SocketTask.readState is not OPEN' };
3152
3161
  console.error(res.errMsg);
3153
- typeof fail === 'function' && fail(res);
3154
- typeof complete === 'function' && complete(res);
3162
+ shared.isFunction(fail) && fail(res);
3163
+ shared.isFunction(complete) && complete(res);
3155
3164
  return Promise.reject(res);
3156
3165
  }
3157
3166
  this.ws.send(data);
3158
3167
  const res = { errMsg: 'sendSocketMessage:ok' };
3159
- typeof success === 'function' && success(res);
3160
- typeof complete === 'function' && complete(res);
3168
+ shared.isFunction(success) && success(res);
3169
+ shared.isFunction(complete) && complete(res);
3161
3170
  return Promise.resolve(res);
3162
3171
  }
3163
3172
  close(opts = {}) {
@@ -3169,8 +3178,8 @@ class SocketTask {
3169
3178
  this._destroyWhenClose && this._destroyWhenClose();
3170
3179
  this.ws.close();
3171
3180
  const res = { errMsg: 'closeSocket:ok' };
3172
- typeof success === 'function' && success(res);
3173
- typeof complete === 'function' && complete(res);
3181
+ shared.isFunction(success) && success(res);
3182
+ shared.isFunction(complete) && complete(res);
3174
3183
  return Promise.resolve(res);
3175
3184
  }
3176
3185
  onOpen(func) {
@@ -3228,13 +3237,13 @@ function connectSocket(options) {
3228
3237
  correct: 'String',
3229
3238
  wrong: url
3230
3239
  })
3231
- }, reject);
3240
+ }, { resolve, reject });
3232
3241
  }
3233
3242
  // options.url must be invalid
3234
3243
  if (!url.startsWith('ws://') && !url.startsWith('wss://')) {
3235
3244
  return handle.fail({
3236
3245
  errMsg: `request:fail invalid url "${url}"`
3237
- }, reject);
3246
+ }, { resolve, reject });
3238
3247
  }
3239
3248
  // protocols must be array
3240
3249
  const _protocols = Array.isArray(protocols) ? protocols : null;
@@ -3242,7 +3251,7 @@ function connectSocket(options) {
3242
3251
  if (socketTasks.length > 1) {
3243
3252
  return handle.fail({
3244
3253
  errMsg: '同时最多发起 2 个 socket 请求,更多请参考文档。'
3245
- }, reject);
3254
+ }, { resolve, reject });
3246
3255
  }
3247
3256
  const task = new SocketTask(url, _protocols);
3248
3257
  task._destroyWhenClose = function () {
@@ -4596,8 +4605,8 @@ const startPullDownRefresh = function ({ success, fail, complete } = {}) {
4596
4605
  const handle = new MethodHandler({ name: 'startPullDownRefresh', success, fail, complete });
4597
4606
  return new Promise((resolve, reject) => {
4598
4607
  Taro__default["default"].eventCenter.trigger('__taroStartPullDownRefresh', {
4599
- successHandler: (res = {}) => handle.success(res, resolve),
4600
- errorHandler: (res = {}) => handle.fail(res, reject)
4608
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4609
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4601
4610
  });
4602
4611
  });
4603
4612
  };
@@ -4608,8 +4617,8 @@ const stopPullDownRefresh = function ({ success, fail, complete } = {}) {
4608
4617
  const handle = new MethodHandler({ name: 'stopPullDownRefresh', success, fail, complete });
4609
4618
  return new Promise((resolve, reject) => {
4610
4619
  Taro__default["default"].eventCenter.trigger('__taroStopPullDownRefresh', {
4611
- successHandler: (res = {}) => handle.success(res, resolve),
4612
- errorHandler: (res = {}) => handle.fail(res, reject)
4620
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4621
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4613
4622
  });
4614
4623
  });
4615
4624
  };
@@ -4628,7 +4637,7 @@ const pageScrollTo = ({ scrollTop, selector = '', offsetTop = 0, duration = 300,
4628
4637
  if (scrollTop === undefined && !selector) {
4629
4638
  return handle.fail({
4630
4639
  errMsg: 'scrollTop" 或 "selector" 需要其之一'
4631
- }, reject);
4640
+ }, { resolve, reject });
4632
4641
  }
4633
4642
  const id = (_b = (_a = runtime.Current.page) === null || _a === void 0 ? void 0 : _a.path) === null || _b === void 0 ? void 0 : _b.replace(/([^a-z0-9\u00a0-\uffff_-])/ig, '\\$1');
4634
4643
  const el = (id
@@ -4682,7 +4691,7 @@ const pageScrollTo = ({ scrollTop, selector = '', offsetTop = 0, duration = 300,
4682
4691
  }, FRAME_DURATION);
4683
4692
  }
4684
4693
  else {
4685
- return handle.success({}, resolve);
4694
+ return handle.success({}, { resolve, reject });
4686
4695
  }
4687
4696
  };
4688
4697
  scroll();
@@ -4690,7 +4699,7 @@ const pageScrollTo = ({ scrollTop, selector = '', offsetTop = 0, duration = 300,
4690
4699
  catch (e) {
4691
4700
  return handle.fail({
4692
4701
  errMsg: e.message
4693
- }, reject);
4702
+ }, { resolve, reject });
4694
4703
  }
4695
4704
  });
4696
4705
  };
@@ -4727,8 +4736,8 @@ const showTabBarRedDot = (options) => {
4727
4736
  return new Promise((resolve, reject) => {
4728
4737
  Taro__default["default"].eventCenter.trigger('__taroShowTabBarRedDotHandler', {
4729
4738
  index,
4730
- successHandler: (res = {}) => handle.success(res, resolve),
4731
- errorHandler: (res = {}) => handle.fail(res, reject)
4739
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4740
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4732
4741
  });
4733
4742
  });
4734
4743
  };
@@ -4757,8 +4766,8 @@ const showTabBar = (options = {}) => {
4757
4766
  return new Promise((resolve, reject) => {
4758
4767
  Taro__default["default"].eventCenter.trigger('__taroShowTabBar', {
4759
4768
  animation,
4760
- successHandler: (res = {}) => handle.success(res, resolve),
4761
- errorHandler: (res = {}) => handle.fail(res, reject)
4769
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4770
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4762
4771
  });
4763
4772
  });
4764
4773
  };
@@ -4809,8 +4818,8 @@ const setTabBarStyle = (options = {}) => {
4809
4818
  selectedColor,
4810
4819
  backgroundColor,
4811
4820
  borderStyle,
4812
- successHandler: (res = {}) => handle.success(res, resolve),
4813
- errorHandler: (res = {}) => handle.fail(res, reject)
4821
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4822
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4814
4823
  });
4815
4824
  });
4816
4825
  };
@@ -4842,8 +4851,8 @@ const setTabBarItem = (options) => {
4842
4851
  text,
4843
4852
  iconPath,
4844
4853
  selectedIconPath,
4845
- successHandler: (res = {}) => handle.success(res, resolve),
4846
- errorHandler: (res = {}) => handle.fail(res, reject)
4854
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4855
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4847
4856
  });
4848
4857
  });
4849
4858
  };
@@ -4882,8 +4891,8 @@ const setTabBarBadge = (options) => {
4882
4891
  Taro__default["default"].eventCenter.trigger('__taroSetTabBarBadge', {
4883
4892
  index,
4884
4893
  text,
4885
- successHandler: (res = {}) => handle.success(res, resolve),
4886
- errorHandler: (res = {}) => handle.fail(res, reject)
4894
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4895
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4887
4896
  });
4888
4897
  });
4889
4898
  };
@@ -4912,8 +4921,8 @@ const removeTabBarBadge = (options) => {
4912
4921
  return new Promise((resolve, reject) => {
4913
4922
  Taro__default["default"].eventCenter.trigger('__taroRemoveTabBarBadge', {
4914
4923
  index,
4915
- successHandler: (res = {}) => handle.success(res, resolve),
4916
- errorHandler: (res = {}) => handle.fail(res, reject)
4924
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4925
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4917
4926
  });
4918
4927
  });
4919
4928
  };
@@ -4942,8 +4951,8 @@ const hideTabBarRedDot = (options) => {
4942
4951
  return new Promise((resolve, reject) => {
4943
4952
  Taro__default["default"].eventCenter.trigger('__taroHideTabBarRedDotHandler', {
4944
4953
  index,
4945
- successHandler: (res = {}) => handle.success(res, resolve),
4946
- errorHandler: (res = {}) => handle.fail(res, reject)
4954
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4955
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4947
4956
  });
4948
4957
  });
4949
4958
  };
@@ -4972,8 +4981,8 @@ const hideTabBar = (options = {}) => {
4972
4981
  return new Promise((resolve, reject) => {
4973
4982
  Taro__default["default"].eventCenter.trigger('__taroHideTabBar', {
4974
4983
  animation,
4975
- successHandler: (res = {}) => handle.success(res, resolve),
4976
- errorHandler: (res = {}) => handle.fail(res, reject)
4984
+ successHandler: (res = {}) => handle.success(res, { resolve, reject }),
4985
+ errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
4977
4986
  });
4978
4987
  });
4979
4988
  };
@@ -5133,7 +5142,7 @@ function generateMediaQueryStr(descriptor) {
5133
5142
  class MediaQueryObserver {
5134
5143
  // 监听页面媒体查询变化情况
5135
5144
  observe(descriptor, callback) {
5136
- if (isFunction(callback)) {
5145
+ if (shared.isFunction(callback)) {
5137
5146
  // 创建媒体查询对象
5138
5147
  this._mediaQueryObserver = window.matchMedia(generateMediaQueryStr(descriptor));
5139
5148
  // 监听器
@@ -5141,7 +5150,7 @@ class MediaQueryObserver {
5141
5150
  callback({ matches: ev.matches });
5142
5151
  };
5143
5152
  callback({ matches: this._mediaQueryObserver.matches });
5144
- // 兼容旧浏览器中MediaQueryList尚未继承于EventTarget导致不存在'addEventListener'
5153
+ // 兼容旧浏览器中 MediaQueryList 尚未继承于 EventTarget 导致不存在 'addEventListener'
5145
5154
  if ('addEventListener' in this._mediaQueryObserver) {
5146
5155
  this._mediaQueryObserver.addEventListener('change', this._listener);
5147
5156
  }
@@ -5153,7 +5162,7 @@ class MediaQueryObserver {
5153
5162
  // 停止监听,销毁媒体查询对象
5154
5163
  disconnect() {
5155
5164
  if (this._mediaQueryObserver && this._listener) {
5156
- // 兼容旧浏览器中MediaQueryList尚未继承于EventTarget导致不存在'removeEventListener'
5165
+ // 兼容旧浏览器中 MediaQueryList 尚未继承于 EventTarget 导致不存在 'removeEventListener'
5157
5166
  if ('removeEventListener' in this._mediaQueryObserver) {
5158
5167
  this._mediaQueryObserver.removeEventListener('change', this._listener);
5159
5168
  }
@@ -5389,9 +5398,9 @@ class SelectorQuery {
5389
5398
  const _queueCb = this._queueCb;
5390
5399
  res.forEach((item, index) => {
5391
5400
  const cb = _queueCb[index];
5392
- typeof cb === 'function' && cb.call(this, item);
5401
+ shared.isFunction(cb) && cb.call(this, item);
5393
5402
  });
5394
- typeof cb === 'function' && cb.call(this, res);
5403
+ shared.isFunction(cb) && cb.call(this, res);
5395
5404
  });
5396
5405
  return this;
5397
5406
  }
@@ -5444,7 +5453,7 @@ const requirePlugin = permanentlyNotSupport('requirePlugin');
5444
5453
  const pxTransform = function (size) {
5445
5454
  const options = taro.config;
5446
5455
  const baseFontSize = options.baseFontSize || 20;
5447
- const designWidth = ((input = 0) => typeof options.designWidth === 'function'
5456
+ const designWidth = ((input = 0) => shared.isFunction(options.designWidth)
5448
5457
  ? options.designWidth(input)
5449
5458
  : options.designWidth);
5450
5459
  const rootValue = (input = 0) => baseFontSize / options.deviceRatio[designWidth(input)] * 2;