@tarojs/taro-h5 3.4.0-beta.0 → 3.4.0-beta.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.
Files changed (175) hide show
  1. package/dist/index.cjs.js +7971 -9468
  2. package/dist/index.js +10767 -0
  3. package/dist/taroApis.js +1 -1
  4. package/package.json +9 -9
  5. package/src/api/ad/index.ts +5 -0
  6. package/src/api/ai/facial.ts +6 -0
  7. package/src/api/ai/index.ts +2 -0
  8. package/src/api/ai/visual.ts +4 -0
  9. package/src/api/alipay/index.ts +4 -0
  10. package/src/api/base/crypto.ts +4 -0
  11. package/src/api/base/debug.ts +5 -0
  12. package/src/api/base/index.ts +23 -0
  13. package/src/api/base/performance.ts +5 -0
  14. package/src/api/base/system/index.ts +2 -0
  15. package/src/api/base/system/info.ts +64 -0
  16. package/src/api/base/system/network.ts +70 -0
  17. package/src/api/base/update.ts +5 -0
  18. package/src/api/base/weapp/app-event.ts +19 -0
  19. package/src/api/base/weapp/life-cycle.ts +5 -0
  20. package/src/api/canvas/CanvasContext.ts +230 -0
  21. package/src/api/canvas/canvasGetImageData.ts +27 -0
  22. package/src/api/canvas/canvasPutImageData.ts +24 -0
  23. package/src/api/canvas/canvasToTempFilePath.ts +24 -0
  24. package/src/api/canvas/createCanvasContext.ts +18 -0
  25. package/src/api/canvas/index.ts +10 -0
  26. package/src/api/cloud/index.ts +27 -0
  27. package/src/api/data-analysis/index.ts +6 -0
  28. package/src/api/device/accelerometer.ts +87 -0
  29. package/src/api/device/accessibility.ts +4 -0
  30. package/src/api/device/battery.ts +5 -0
  31. package/src/api/device/bluetooth-ble.ts +19 -0
  32. package/src/api/device/bluetooth-peripheral.ts +6 -0
  33. package/src/api/device/bluetooth.ts +16 -0
  34. package/src/api/device/calendar.ts +5 -0
  35. package/src/api/device/clipboard.ts +67 -0
  36. package/src/api/device/compass.ts +67 -0
  37. package/src/api/device/contact.ts +5 -0
  38. package/src/api/device/crypto.ts +4 -0
  39. package/src/api/device/gyroscope.ts +7 -0
  40. package/src/api/device/iBeacon.ts +10 -0
  41. package/src/api/device/index.ts +22 -0
  42. package/src/api/device/keyboard.ts +7 -0
  43. package/src/api/device/memory.ts +5 -0
  44. package/src/api/device/motion.ts +85 -0
  45. package/src/api/device/nfc.ts +10 -0
  46. package/src/api/device/phone.ts +30 -0
  47. package/src/api/device/scan.ts +7 -0
  48. package/src/api/device/screen.ts +9 -0
  49. package/src/api/device/vibrate.ts +36 -0
  50. package/src/api/device/wifi.ts +13 -0
  51. package/src/api/ext/index.ts +5 -0
  52. package/src/api/files/index.ts +11 -0
  53. package/src/api/framework/index.ts +10 -0
  54. package/src/api/index.ts +25 -0
  55. package/src/api/location/chooseLocation.ts +106 -0
  56. package/src/api/location/index.ts +19 -0
  57. package/src/api/location/style.css +8 -8
  58. package/src/api/media/audio/index.ts +105 -0
  59. package/src/api/media/background-audio.ts +12 -0
  60. package/src/api/media/camera.ts +4 -0
  61. package/src/api/media/editor.ts +29 -0
  62. package/src/api/media/image/chooseImage.ts +78 -0
  63. package/src/api/media/image/getImageInfo.ts +35 -0
  64. package/src/api/media/image/index.ts +13 -0
  65. package/src/api/media/image/previewImage.ts +101 -0
  66. package/src/api/media/index.ts +13 -0
  67. package/src/api/media/live.ts +5 -0
  68. package/src/api/media/map.ts +4 -0
  69. package/src/api/media/media-recorder.ts +4 -0
  70. package/src/api/media/recorder.ts +6 -0
  71. package/src/api/media/video/index.ts +82 -0
  72. package/src/api/media/video-decoder.ts +4 -0
  73. package/src/api/media/video-processing.ts +4 -0
  74. package/src/api/media/voip.ts +17 -0
  75. package/src/api/navigate/index.ts +7 -0
  76. package/src/api/{fileTransfer/downloadFile.js → network/download.ts} +16 -27
  77. package/src/api/network/index.ts +7 -0
  78. package/src/api/network/mdns.ts +13 -0
  79. package/src/api/{request/index.js → network/request/index.ts} +9 -6
  80. package/src/api/network/tcp.ts +4 -0
  81. package/src/api/network/udp.ts +4 -0
  82. package/src/api/{fileTransfer/uploadFile.js → network/upload.ts} +28 -32
  83. package/src/api/{fileTransfer/utils.js → network/utils.ts} +0 -0
  84. package/src/api/network/websocket/index.ts +88 -0
  85. package/src/api/{webSocket/socketTask.js → network/websocket/socketTask.ts} +17 -7
  86. package/src/api/open-api/account.ts +4 -0
  87. package/src/api/open-api/address.ts +4 -0
  88. package/src/api/open-api/authorize.ts +5 -0
  89. package/src/api/open-api/card.ts +5 -0
  90. package/src/api/open-api/channels-live.ts +9 -0
  91. package/src/api/open-api/customer-service.ts +4 -0
  92. package/src/api/open-api/facial.ts +7 -0
  93. package/src/api/open-api/favorites.ts +5 -0
  94. package/src/api/open-api/group.ts +4 -0
  95. package/src/api/open-api/index.ts +18 -0
  96. package/src/api/open-api/invoice.ts +5 -0
  97. package/src/api/open-api/license-plate.ts +4 -0
  98. package/src/api/open-api/login.ts +6 -0
  99. package/src/api/open-api/red-package.ts +4 -0
  100. package/src/api/open-api/settings.ts +5 -0
  101. package/src/api/open-api/soter.ts +6 -0
  102. package/src/api/open-api/subscribe-message.ts +4 -0
  103. package/src/api/open-api/user-info.ts +5 -0
  104. package/src/api/open-api/werun.ts +5 -0
  105. package/src/api/payment/index.ts +5 -0
  106. package/src/api/route/index.ts +10 -0
  107. package/src/api/share/index.ts +13 -0
  108. package/src/api/storage/background-fetch.ts +7 -0
  109. package/src/api/storage/index.ts +181 -0
  110. package/src/api/swan/index.ts +31 -0
  111. package/src/{taro/index.js → api/taro.ts} +89 -104
  112. package/src/api/{createAnimation/index.js → ui/animation/index.ts} +51 -35
  113. package/src/api/ui/background.ts +5 -0
  114. package/src/api/ui/custom-component.ts +4 -0
  115. package/src/api/ui/fonts.ts +4 -0
  116. package/src/api/ui/index.ts +12 -0
  117. package/src/api/ui/interaction/actionSheet.ts +212 -0
  118. package/src/api/{interactive/index.js → ui/interaction/index.ts} +93 -77
  119. package/src/api/ui/interaction/modal.ts +237 -0
  120. package/src/api/{interactive/toast.js → ui/interaction/toast.ts} +35 -33
  121. package/src/api/ui/menu.ts +4 -0
  122. package/src/api/ui/navigation-bar/index.ts +52 -0
  123. package/src/api/ui/pull-down-refresh.ts +27 -0
  124. package/src/api/ui/scroll/index.ts +85 -0
  125. package/src/api/ui/sticky.ts +4 -0
  126. package/src/api/ui/tab-bar.ts +326 -0
  127. package/src/api/ui/window.ts +37 -0
  128. package/src/api/utils/handler.ts +105 -0
  129. package/src/api/utils/{index.js → index.ts} +36 -115
  130. package/src/api/worker/index.ts +4 -0
  131. package/src/api/wxml/index.ts +9 -0
  132. package/src/api/wxml/nodesRef.ts +49 -0
  133. package/src/api/{createSelectorQuery/index.js → wxml/selectorQuery.ts} +75 -94
  134. package/src/index.ts +6 -0
  135. package/src/types/api.d.ts +4 -0
  136. package/src/types/define.d.ts +2 -0
  137. package/{types → src/types}/index.d.ts +0 -0
  138. package/{types → src/types}/type.ts +1 -1
  139. package/src/api/accelerometer/index.js +0 -105
  140. package/src/api/audio/index.js +0 -137
  141. package/src/api/canvas/canvasGetImageData.js +0 -44
  142. package/src/api/canvas/canvasPutImageData.js +0 -45
  143. package/src/api/canvas/canvasToTempFilePath.js +0 -49
  144. package/src/api/canvas/createCanvasContext.js +0 -340
  145. package/src/api/canvas/index.js +0 -4
  146. package/src/api/clipboard/index.js +0 -113
  147. package/src/api/compass/index.js +0 -99
  148. package/src/api/deviceMotion/index.js +0 -105
  149. package/src/api/fileTransfer/index.js +0 -2
  150. package/src/api/image/chooseImage.js +0 -87
  151. package/src/api/image/getImageInfo.js +0 -74
  152. package/src/api/image/index.js +0 -7
  153. package/src/api/image/previewImage.js +0 -94
  154. package/src/api/index.js +0 -29
  155. package/src/api/interactive/actionSheet.js +0 -214
  156. package/src/api/interactive/modal.js +0 -256
  157. package/src/api/location/chooseLocation.js +0 -143
  158. package/src/api/location/index.js +0 -5
  159. package/src/api/navigationBar/index.js +0 -57
  160. package/src/api/open/index.js +0 -5
  161. package/src/api/others/index.js +0 -43
  162. package/src/api/pullDownRefresh/index.js +0 -51
  163. package/src/api/scroll/index.js +0 -99
  164. package/src/api/storage/index.js +0 -211
  165. package/src/api/system/index.js +0 -9
  166. package/src/api/system/info.js +0 -36
  167. package/src/api/system/network.js +0 -68
  168. package/src/api/tabBar/index.js +0 -402
  169. package/src/api/unsupportedApi/index.js +0 -278
  170. package/src/api/vibrate/index.js +0 -49
  171. package/src/api/video/index.js +0 -87
  172. package/src/api/webSocket/index.js +0 -103
  173. package/src/api/window/index.js +0 -38
  174. package/src/index.cjs.js +0 -11
  175. package/src/index.js +0 -6
@@ -0,0 +1,326 @@
1
+ import Taro, { AppConfig } from '@tarojs/api'
2
+ import { shouldBeObject, getParameterError, isValidColor } from '../utils'
3
+ import { MethodHandler } from '../utils/handler'
4
+
5
+ let tabConf
6
+
7
+ export function initTabBarApis (config: AppConfig = {}) {
8
+ tabConf = config.tabBar
9
+ }
10
+
11
+ /**
12
+ * 显示 tabBar 某一项的右上角的红点
13
+ */
14
+ export const showTabBarRedDot: typeof Taro.showTabBarRedDot = (options) => {
15
+ // options must be an Object
16
+ const isObject = shouldBeObject(options)
17
+ if (!isObject.flag) {
18
+ const res = { errMsg: `showTabBarRedDot:fail ${isObject.msg}` }
19
+ console.error(res.errMsg)
20
+ return Promise.reject(res)
21
+ }
22
+
23
+ const {
24
+ index,
25
+ success,
26
+ fail,
27
+ complete
28
+ } = options
29
+ const handle = new MethodHandler({ name: 'showTabBarRedDot', success, fail, complete })
30
+
31
+ if (typeof index !== 'number') {
32
+ return handle.fail({
33
+ errMsg: getParameterError({
34
+ para: 'index',
35
+ correct: 'Number',
36
+ wrong: index
37
+ })
38
+ })
39
+ }
40
+
41
+ return new Promise((resolve, reject) => {
42
+ Taro.eventCenter.trigger('__taroShowTabBarRedDotHandler', {
43
+ index,
44
+ successHandler: (res = {}) => handle.success(res, resolve as any),
45
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
46
+ })
47
+ })
48
+ }
49
+
50
+ /**
51
+ * 显示 tabBar
52
+ */
53
+ export const showTabBar: typeof Taro.showTabBar = (options = {}) => {
54
+ // options must be an Object
55
+ const isObject = shouldBeObject(options)
56
+ if (!isObject.flag) {
57
+ const res = { errMsg: `showTabBar:fail ${isObject.msg}` }
58
+ console.error(res.errMsg)
59
+ return Promise.reject(res)
60
+ }
61
+
62
+ const { animation, success, fail, complete } = options
63
+ const handle = new MethodHandler({ name: 'showTabBar', success, fail, complete })
64
+
65
+ if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
66
+ return handle.fail({
67
+ errMsg: getParameterError({
68
+ para: 'animation',
69
+ correct: 'Boolean',
70
+ wrong: animation
71
+ })
72
+ })
73
+ }
74
+
75
+ return new Promise((resolve, reject) => {
76
+ Taro.eventCenter.trigger('__taroShowTabBar', {
77
+ animation,
78
+ successHandler: (res = {}) => handle.success(res, resolve as any),
79
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
80
+ })
81
+ })
82
+ }
83
+
84
+ /**
85
+ * 动态设置 tabBar 的整体样式
86
+ */
87
+ export const setTabBarStyle: typeof Taro.setTabBarStyle = (options = {}) => {
88
+ // options must be an Object
89
+ const isObject = shouldBeObject(options)
90
+ if (!isObject.flag) {
91
+ const res = { errMsg: `setTabBarStyle:fail ${isObject.msg}` }
92
+ console.error(res.errMsg)
93
+ return Promise.reject(res)
94
+ }
95
+
96
+ const { color, selectedColor, backgroundColor, borderStyle, success, fail, complete } = options
97
+ const handle = new MethodHandler({ name: 'setTabBarStyle', success, fail, complete })
98
+
99
+ let errMsg
100
+ if (color && !isValidColor(color)) {
101
+ errMsg = 'color'
102
+ } else if (selectedColor && !isValidColor(selectedColor)) {
103
+ errMsg = 'selectedColor'
104
+ } else if (backgroundColor && !isValidColor(backgroundColor)) {
105
+ errMsg = 'backgroundColor'
106
+ } else if (borderStyle && !/^(black|white)$/.test(borderStyle)) {
107
+ errMsg = 'borderStyle'
108
+ }
109
+
110
+ if (errMsg) {
111
+ return handle.fail({ errMsg: `invalid ${errMsg}` })
112
+ }
113
+
114
+ if (!tabConf) {
115
+ return handle.fail()
116
+ }
117
+
118
+ const obj: Taro.setTabBarStyle.Option = {}
119
+ if (color) obj.color = color
120
+ if (selectedColor) obj.selectedColor = selectedColor
121
+ if (backgroundColor) obj.backgroundColor = backgroundColor
122
+ if (borderStyle) obj.borderStyle = borderStyle
123
+
124
+ return new Promise((resolve, reject) => {
125
+ Taro.eventCenter.trigger('__taroSetTabBarStyle', {
126
+ color,
127
+ selectedColor,
128
+ backgroundColor,
129
+ borderStyle,
130
+ successHandler: (res = {}) => handle.success(res, resolve as any),
131
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
132
+ })
133
+ })
134
+ }
135
+
136
+ /**
137
+ * 动态设置 tabBar 某一项的内容
138
+ */
139
+ export const setTabBarItem: typeof Taro.setTabBarItem = (options) => {
140
+ // options must be an Object
141
+ const isObject = shouldBeObject(options)
142
+ if (!isObject.flag) {
143
+ const res = { errMsg: `setTabBarItem:fail ${isObject.msg}` }
144
+ console.error(res.errMsg)
145
+ return Promise.reject(res)
146
+ }
147
+
148
+ const {
149
+ index,
150
+ text,
151
+ iconPath,
152
+ selectedIconPath,
153
+ success,
154
+ fail,
155
+ complete
156
+ } = options
157
+ const handle = new MethodHandler({ name: 'setTabBarItem', success, fail, complete })
158
+
159
+ if (typeof index !== 'number') {
160
+ return handle.fail({
161
+ errMsg: getParameterError({
162
+ para: 'index',
163
+ correct: 'Number',
164
+ wrong: index
165
+ })
166
+ })
167
+ }
168
+
169
+ return new Promise((resolve, reject) => {
170
+ Taro.eventCenter.trigger('__taroSetTabBarItem', {
171
+ index,
172
+ text,
173
+ iconPath,
174
+ selectedIconPath,
175
+ successHandler: (res = {}) => handle.success(res, resolve as any),
176
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
177
+ })
178
+ })
179
+ }
180
+
181
+ /**
182
+ * 为 tabBar 某一项的右上角添加文本
183
+ */
184
+ export const setTabBarBadge: typeof Taro.setTabBarBadge = (options) => {
185
+ // options must be an Object
186
+ const isObject = shouldBeObject(options)
187
+ if (!isObject.flag) {
188
+ const res = { errMsg: `setTabBarBadge:fail ${isObject.msg}` }
189
+ console.error(res.errMsg)
190
+ return Promise.reject(res)
191
+ }
192
+
193
+ const { index, text, success, fail, complete } = options
194
+ const handle = new MethodHandler({ name: 'setTabBarBadge', success, fail, complete })
195
+
196
+ if (typeof index !== 'number') {
197
+ return handle.fail({
198
+ errMsg: getParameterError({
199
+ para: 'index',
200
+ correct: 'Number',
201
+ wrong: index
202
+ })
203
+ })
204
+ }
205
+
206
+ if (typeof text !== 'string') {
207
+ return handle.fail({
208
+ errMsg: getParameterError({
209
+ para: 'text',
210
+ correct: 'String',
211
+ wrong: text
212
+ })
213
+ })
214
+ }
215
+
216
+ return new Promise((resolve, reject) => {
217
+ Taro.eventCenter.trigger('__taroSetTabBarBadge', {
218
+ index,
219
+ text,
220
+ successHandler: (res = {}) => handle.success(res, resolve as any),
221
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
222
+ })
223
+ })
224
+ }
225
+
226
+ /**
227
+ * 移除 tabBar 某一项右上角的文本
228
+ */
229
+ export const removeTabBarBadge: typeof Taro.removeTabBarBadge = (options) => {
230
+ // options must be an Object
231
+ const isObject = shouldBeObject(options)
232
+ if (!isObject.flag) {
233
+ const res = { errMsg: `removeTabBarBadge:fail ${isObject.msg}` }
234
+ console.error(res.errMsg)
235
+ return Promise.reject(res)
236
+ }
237
+
238
+ const { index, success, fail, complete } = options
239
+ const handle = new MethodHandler({ name: 'removeTabBarBadge', success, fail, complete })
240
+
241
+ if (typeof index !== 'number') {
242
+ return handle.fail({
243
+ errMsg: getParameterError({
244
+ para: 'index',
245
+ correct: 'Number',
246
+ wrong: index
247
+ })
248
+ })
249
+ }
250
+
251
+ return new Promise((resolve, reject) => {
252
+ Taro.eventCenter.trigger('__taroRemoveTabBarBadge', {
253
+ index,
254
+ successHandler: (res = {}) => handle.success(res, resolve as any),
255
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
256
+ })
257
+ })
258
+ }
259
+
260
+ /**
261
+ * 隐藏 tabBar 某一项的右上角的红点
262
+ */
263
+ export const hideTabBarRedDot: typeof Taro.hideTabBarRedDot = (options) => {
264
+ // options must be an Object
265
+ const isObject = shouldBeObject(options)
266
+ if (!isObject.flag) {
267
+ const res = { errMsg: `hideTabBarRedDot:fail ${isObject.msg}` }
268
+ console.error(res.errMsg)
269
+ return Promise.reject(res)
270
+ }
271
+
272
+ const { index, success, fail, complete } = options
273
+ const handle = new MethodHandler({ name: 'hideTabBarRedDot', success, fail, complete })
274
+
275
+ if (typeof index !== 'number') {
276
+ return handle.fail({
277
+ errMsg: getParameterError({
278
+ para: 'index',
279
+ correct: 'Number',
280
+ wrong: index
281
+ })
282
+ })
283
+ }
284
+
285
+ return new Promise((resolve, reject) => {
286
+ Taro.eventCenter.trigger('__taroHideTabBarRedDotHandler', {
287
+ index,
288
+ successHandler: (res = {}) => handle.success(res, resolve as any),
289
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
290
+ })
291
+ })
292
+ }
293
+
294
+ /**
295
+ * 隐藏 tabBar
296
+ */
297
+ export const hideTabBar: typeof Taro.hideTabBar = (options = {}) => {
298
+ // options must be an Object
299
+ const isObject = shouldBeObject(options)
300
+ if (!isObject.flag) {
301
+ const res = { errMsg: `hideTabBar:fail ${isObject.msg}` }
302
+ console.error(res.errMsg)
303
+ return Promise.reject(res)
304
+ }
305
+
306
+ const { animation, success, fail, complete } = options
307
+ const handle = new MethodHandler({ name: 'hideTabBar', success, fail, complete })
308
+
309
+ if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
310
+ return handle.fail({
311
+ errMsg: getParameterError({
312
+ para: 'animation',
313
+ correct: 'Boolean',
314
+ wrong: animation
315
+ })
316
+ })
317
+ }
318
+
319
+ return new Promise((resolve, reject) => {
320
+ Taro.eventCenter.trigger('__taroHideTabBar', {
321
+ animation,
322
+ successHandler: (res = {}) => handle.success(res, resolve as any),
323
+ errorHandler: (res = {}) => handle.fail(res, reject as any)
324
+ })
325
+ })
326
+ }
@@ -0,0 +1,37 @@
1
+ import Taro from '@tarojs/api'
2
+ import { temporarilyNotSupport } from '../utils'
3
+ import { CallbackManager } from '../utils/handler'
4
+
5
+ const callbackManager = new CallbackManager()
6
+
7
+ const resizeListener = () => {
8
+ callbackManager.trigger({
9
+ windowWidth: window.screen.width,
10
+ windowHeight: window.screen.height
11
+ })
12
+ }
13
+
14
+ /**
15
+ * 设置窗口大小,该接口仅适用于 PC 平台,使用细则请参见指南
16
+ */
17
+ export const setWindowSize = temporarilyNotSupport('setWindowSize')
18
+
19
+ /**
20
+ * 监听窗口尺寸变化事件
21
+ */
22
+ export const onWindowResize: typeof Taro.onWindowResize = callback => {
23
+ callbackManager.add(callback)
24
+ if (callbackManager.count() === 1) {
25
+ window.addEventListener('resize', resizeListener)
26
+ }
27
+ }
28
+
29
+ /**
30
+ * 取消监听窗口尺寸变化事件
31
+ */
32
+ export const offWindowResize: typeof Taro.offWindowResize = callback => {
33
+ callbackManager.remove(callback)
34
+ if (callbackManager.count() === 0) {
35
+ window.removeEventListener('resize', resizeListener)
36
+ }
37
+ }
@@ -0,0 +1,105 @@
1
+ type TCallback<T = Partial<TaroGeneral.CallbackResult>> = (res: T) => Promise<void> | void
2
+ interface IMethodParam<T = Partial<TaroGeneral.CallbackResult>> {
3
+ name: string
4
+ success?: TCallback<T>
5
+ fail?: TCallback
6
+ complete?: TCallback
7
+ }
8
+
9
+ export class MethodHandler<T = Partial<TaroGeneral.CallbackResult>> {
10
+ methodName: string
11
+
12
+ protected __success?: TCallback<T>
13
+ protected __fail?: TCallback
14
+ protected __complete?: TCallback
15
+
16
+ constructor ({ name, success, fail, complete }: IMethodParam<T>) {
17
+ this.methodName = name
18
+ this.__success = success
19
+ this.__fail = fail
20
+ this.__complete = complete
21
+ }
22
+
23
+ success<U = Record<string, unknown>> (res: Partial<T> & Partial<TaroGeneral.CallbackResult> = {}, resolve = Promise.resolve.bind(Promise)): Promise<T & U & TaroGeneral.CallbackResult> {
24
+ if (!res.errMsg) {
25
+ res.errMsg = `${this.methodName}:ok`
26
+ }
27
+ typeof this.__success === 'function' && this.__success(res as T)
28
+ typeof this.__complete === 'function' && this.__complete(res)
29
+ return resolve(res as Required<T & U & TaroGeneral.CallbackResult>)
30
+ }
31
+
32
+ fail<U = Record<string, unknown>> (res: Partial<T> & Partial<TaroGeneral.CallbackResult> = {}, reject = Promise.reject.bind(Promise)): Promise<T & U & TaroGeneral.CallbackResult> {
33
+ if (!res.errMsg) {
34
+ res.errMsg = `${this.methodName}:fail`
35
+ } else {
36
+ res.errMsg = `${this.methodName}:fail ${res.errMsg}`
37
+ }
38
+ console.error(res.errMsg)
39
+ typeof this.__fail === 'function' && this.__fail(res)
40
+ typeof this.__complete === 'function' && this.__complete(res)
41
+ return reject(res)
42
+ }
43
+ }
44
+
45
+ type TCallbackManagerParam = (...arr: unknown[]) => void
46
+ interface ICallbackManagerOption {
47
+ callback?: TCallbackManagerParam
48
+ ctx?: any
49
+ [key: string]: unknown
50
+ }
51
+ type TCallbackManagerListItem = (TCallbackManagerParam | ICallbackManagerOption)
52
+ type TCallbackManagerList = TCallbackManagerListItem[]
53
+
54
+ export class CallbackManager {
55
+ callbacks: TCallbackManagerList = []
56
+
57
+ /**
58
+ * 添加回调
59
+ * @param {{ callback: function, ctx: any } | function} opt
60
+ */
61
+ add (opt?: TCallbackManagerListItem) {
62
+ if (opt) this.callbacks.push(opt)
63
+ }
64
+
65
+ /**
66
+ * 移除回调
67
+ * @param {{ callback: function, ctx: any } | function} opt
68
+ */
69
+ remove (opt?: TCallbackManagerListItem) {
70
+ if (opt) {
71
+ let pos = -1
72
+ this.callbacks.forEach((callback, k) => {
73
+ if (callback === opt) {
74
+ pos = k
75
+ }
76
+ })
77
+ if (pos > -1) {
78
+ this.callbacks.splice(pos, 1)
79
+ }
80
+ }
81
+ }
82
+
83
+ /**
84
+ * 获取回调函数数量
85
+ * @return {number}
86
+ */
87
+ count () {
88
+ return this.callbacks.length
89
+ }
90
+
91
+ /**
92
+ * 触发回调
93
+ * @param {...any} args 回调的调用参数
94
+ */
95
+ trigger (...args: TCallbackManagerList) {
96
+ this.callbacks.forEach(opt => {
97
+ if (typeof opt === 'function') {
98
+ opt(...args)
99
+ } else {
100
+ const { callback, ctx } = opt
101
+ typeof callback === 'function' && callback.call(ctx, ...args)
102
+ }
103
+ })
104
+ }
105
+ }
@@ -1,10 +1,10 @@
1
1
  /* eslint-disable prefer-promise-reject-errors */
2
- import { Current, container, SERVICE_IDENTIFIER } from '@tarojs/runtime'
2
+ import { Current, container, SERVICE_IDENTIFIER, IHooks, TaroElement } from '@tarojs/runtime'
3
3
 
4
- function shouldBeObject (target) {
5
- if (target && typeof target === 'object') return { res: true }
4
+ export function shouldBeObject (target: unknown) {
5
+ if (target && typeof target === 'object') return { flag: true }
6
6
  return {
7
- res: false,
7
+ flag: false,
8
8
  msg: getParameterError({
9
9
  correct: 'Object',
10
10
  wrong: target
@@ -12,8 +12,8 @@ function shouldBeObject (target) {
12
12
  }
13
13
  }
14
14
 
15
- export function findDOM (inst) {
16
- const runtimeHooks = container.get(SERVICE_IDENTIFIER.Hooks)
15
+ export function findDOM (inst): TaroElement | HTMLElement | undefined {
16
+ const runtimeHooks = container.get<IHooks>(SERVICE_IDENTIFIER.Hooks)
17
17
 
18
18
  if (inst) {
19
19
  const find = runtimeHooks.getDOMNode
@@ -23,7 +23,7 @@ export function findDOM (inst) {
23
23
  }
24
24
 
25
25
  const page = Current.page
26
- const path = page.path
26
+ const path = page?.path
27
27
  const msg = '没有找到已经加载了的页面,请在页面加载完成后时候此 API。'
28
28
  if (path == null) {
29
29
  throw new Error(msg)
@@ -37,10 +37,20 @@ export function findDOM (inst) {
37
37
  return el
38
38
  }
39
39
 
40
- function getParameterError ({ name = '', para, correct, wrong }) {
40
+ interface IParameterErrorParam {
41
+ name?: string
42
+ para?: string
43
+ correct?: string
44
+ wrong?: unknown
45
+ }
46
+ export function getParameterError ({ name = '', para, correct, wrong }: IParameterErrorParam) {
41
47
  const parameter = para ? `parameter.${para}` : 'parameter'
42
48
  const errorType = upperCaseFirstLetter(wrong === null ? 'Null' : typeof wrong)
43
- return `${name}:fail parameter error: ${parameter} should be ${correct} instead of ${errorType}`
49
+ if (name) {
50
+ return `${name}:fail parameter error: ${parameter} should be ${correct} instead of ${errorType}`
51
+ } else {
52
+ return `parameter error: ${parameter} should be ${correct} instead of ${errorType}`
53
+ }
44
54
  }
45
55
 
46
56
  function upperCaseFirstLetter (string) {
@@ -49,7 +59,7 @@ function upperCaseFirstLetter (string) {
49
59
  return string
50
60
  }
51
61
 
52
- function inlineStyle (style) {
62
+ export function inlineStyle (style) {
53
63
  let res = ''
54
64
  for (const attr in style) res += `${attr}: ${style[attr]};`
55
65
  if (res.indexOf('display: flex;') >= 0) res += 'display: -webkit-box;display: -webkit-flex;'
@@ -58,32 +68,12 @@ function inlineStyle (style) {
58
68
  return res
59
69
  }
60
70
 
61
- function setTransform (el, val) {
71
+ export function setTransform (el, val) {
62
72
  el.style.webkitTransform = val
63
73
  el.style.transform = val
64
74
  }
65
75
 
66
- function isFunction (obj) {
67
- return typeof obj === 'function'
68
- }
69
-
70
- function successHandler (success, complete) {
71
- return function (res) {
72
- isFunction(success) && success(res)
73
- isFunction(complete) && complete(res)
74
- return Promise.resolve(res)
75
- }
76
- }
77
-
78
- function errorHandler (fail, complete) {
79
- return function (res) {
80
- isFunction(fail) && fail(res)
81
- isFunction(complete) && complete(res)
82
- return Promise.reject(res)
83
- }
84
- }
85
-
86
- function serializeParams (params) {
76
+ export function serializeParams (params) {
87
77
  if (!params) {
88
78
  return ''
89
79
  }
@@ -95,7 +85,7 @@ function serializeParams (params) {
95
85
  .join('&')
96
86
  }
97
87
 
98
- function temporarilyNotSupport (apiName) {
88
+ export function temporarilyNotSupport (apiName) {
99
89
  return () => {
100
90
  const errMsg = `暂时不支持 API ${apiName}`
101
91
  console.error(errMsg)
@@ -105,7 +95,7 @@ function temporarilyNotSupport (apiName) {
105
95
  }
106
96
  }
107
97
 
108
- function weixinCorpSupport (apiName) {
98
+ export function weixinCorpSupport (apiName) {
109
99
  return () => {
110
100
  const errMsg = `h5端仅在微信公众号中支持 API ${apiName}`
111
101
  console.error(errMsg)
@@ -115,7 +105,7 @@ function weixinCorpSupport (apiName) {
115
105
  }
116
106
  }
117
107
 
118
- function permanentlyNotSupport (apiName) {
108
+ export function permanentlyNotSupport (apiName) {
119
109
  return () => {
120
110
  const errMsg = `不支持 API ${apiName}`
121
111
  console.error(errMsg)
@@ -125,69 +115,18 @@ function permanentlyNotSupport (apiName) {
125
115
  }
126
116
  }
127
117
 
128
- const VALID_COLOR_REG = /^#[0-9a-fA-F]{6}$/
129
-
130
- const isValidColor = (color) => {
131
- return VALID_COLOR_REG.test(color)
118
+ export function isFunction (obj) {
119
+ return typeof obj === 'function'
132
120
  }
133
121
 
134
- const createCallbackManager = () => {
135
- const callbacks = []
136
-
137
- /**
138
- * 添加回调
139
- * @param {{ callback: function, ctx: any } | function} opt
140
- */
141
- const add = (opt) => {
142
- callbacks.push(opt)
143
- }
144
-
145
- /**
146
- * 移除回调
147
- * @param {{ callback: function, ctx: any } | function} opt
148
- */
149
- const remove = (opt) => {
150
- let pos = -1
151
- callbacks.forEach((callback, k) => {
152
- if (callback === opt) {
153
- pos = k
154
- }
155
- })
156
- if (pos > -1) {
157
- callbacks.splice(pos, 1)
158
- }
159
- }
160
-
161
- /**
162
- * 获取回调函数数量
163
- * @return {number}
164
- */
165
- const count = () => callbacks.length
166
-
167
- /**
168
- * 触发回调
169
- * @param {...any} args 回调的调用参数
170
- */
171
- const trigger = (...args) => {
172
- callbacks.forEach(opt => {
173
- if (typeof opt === 'function') {
174
- opt(...args)
175
- } else {
176
- const { callback, ctx } = opt
177
- callback.call(ctx, ...args)
178
- }
179
- })
180
- }
122
+ const VALID_COLOR_REG = /^#[0-9a-fA-F]{6}$/
181
123
 
182
- return {
183
- add,
184
- remove,
185
- count,
186
- trigger
187
- }
124
+ export const isValidColor = (color) => {
125
+ return VALID_COLOR_REG.test(color)
188
126
  }
189
127
 
190
- function processOpenapi (apiName, defaultOptions, formatResult = res => res, formatParams = options => options) {
128
+ export function processOpenApi (apiName: string, defaultOptions?: Record<string, unknown>, formatResult = res => res, formatParams = options => options) {
129
+ // @ts-ignore
191
130
  if (!window.wx) {
192
131
  return weixinCorpSupport(apiName)
193
132
  }
@@ -206,6 +145,7 @@ function processOpenapi (apiName, defaultOptions, formatResult = res => res, for
206
145
  }
207
146
  }
208
147
  })
148
+ // @ts-ignore
209
149
  wx[apiName](formatParams(obj))
210
150
  })
211
151
  return p
@@ -214,11 +154,11 @@ function processOpenapi (apiName, defaultOptions, formatResult = res => res, for
214
154
 
215
155
  /**
216
156
  * ease-in-out的函数
217
- * @param {number} t 0-1的数字
157
+ * @param t 0-1的数字
218
158
  */
219
- const easeInOut = t => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1
159
+ export const easeInOut = (t: number) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1
220
160
 
221
- const getTimingFunc = (easeFunc, frameCnt) => {
161
+ export const getTimingFunc = (easeFunc, frameCnt) => {
222
162
  return x => {
223
163
  if (frameCnt <= 1) {
224
164
  return easeFunc(1)
@@ -227,22 +167,3 @@ const getTimingFunc = (easeFunc, frameCnt) => {
227
167
  return easeFunc(t)
228
168
  }
229
169
  }
230
-
231
- export {
232
- shouldBeObject,
233
- getParameterError,
234
- inlineStyle,
235
- setTransform,
236
- successHandler,
237
- errorHandler,
238
- serializeParams,
239
- temporarilyNotSupport,
240
- weixinCorpSupport,
241
- permanentlyNotSupport,
242
- isValidColor,
243
- isFunction,
244
- createCallbackManager,
245
- processOpenapi,
246
- easeInOut,
247
- getTimingFunc
248
- }