@tarojs/taro-h5 3.4.0-beta.0 → 3.4.0

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 (306) hide show
  1. package/dist/api/ad/index.js +4 -0
  2. package/dist/api/ai/facial.js +5 -0
  3. package/dist/api/ai/index.js +2 -0
  4. package/dist/api/ai/visual.js +3 -0
  5. package/dist/api/alipay/index.js +3 -0
  6. package/dist/api/base/crypto.js +3 -0
  7. package/dist/api/base/debug.js +4 -0
  8. package/dist/api/base/index.js +17 -0
  9. package/dist/api/base/performance.js +4 -0
  10. package/dist/api/base/system/index.js +2 -0
  11. package/dist/api/base/system/info.js +57 -0
  12. package/dist/api/base/system/network.js +63 -0
  13. package/dist/api/base/update.js +4 -0
  14. package/dist/api/base/weapp/app-event.js +18 -0
  15. package/dist/api/base/weapp/life-cycle.js +4 -0
  16. package/dist/api/canvas/CanvasContext.js +191 -0
  17. package/dist/api/canvas/canvasGetImageData.js +25 -0
  18. package/dist/api/canvas/canvasPutImageData.js +22 -0
  19. package/dist/api/canvas/canvasToTempFilePath.js +22 -0
  20. package/dist/api/canvas/createCanvasContext.js +16 -0
  21. package/dist/api/canvas/index.js +8 -0
  22. package/dist/api/cloud/index.js +17 -0
  23. package/dist/api/data-analysis/index.js +5 -0
  24. package/dist/api/device/accelerometer.js +83 -0
  25. package/dist/api/device/accessibility.js +3 -0
  26. package/dist/api/device/battery.js +4 -0
  27. package/dist/api/device/bluetooth-ble.js +18 -0
  28. package/dist/api/device/bluetooth-peripheral.js +5 -0
  29. package/dist/api/device/bluetooth.js +15 -0
  30. package/dist/api/device/calendar.js +4 -0
  31. package/dist/api/device/clipboard.js +65 -0
  32. package/dist/api/device/compass.js +64 -0
  33. package/dist/api/device/contact.js +4 -0
  34. package/dist/api/device/crypto.js +3 -0
  35. package/dist/api/device/gyroscope.js +6 -0
  36. package/dist/api/device/iBeacon.js +9 -0
  37. package/dist/api/device/index.js +22 -0
  38. package/dist/api/device/keyboard.js +6 -0
  39. package/dist/api/device/memory.js +4 -0
  40. package/dist/api/device/motion.js +81 -0
  41. package/dist/api/device/nfc.js +9 -0
  42. package/dist/api/device/phone.js +24 -0
  43. package/dist/api/device/scan.js +6 -0
  44. package/dist/api/device/screen.js +8 -0
  45. package/dist/api/device/vibrate.js +35 -0
  46. package/dist/api/device/wifi.js +12 -0
  47. package/dist/api/ext/index.js +4 -0
  48. package/dist/api/files/index.js +10 -0
  49. package/dist/api/framework/index.js +7 -0
  50. package/dist/api/index.js +24 -0
  51. package/dist/api/location/chooseLocation.js +93 -0
  52. package/dist/api/location/index.js +13 -0
  53. package/dist/api/location/style.css +79 -0
  54. package/dist/api/media/audio/index.js +88 -0
  55. package/dist/api/media/background-audio.js +11 -0
  56. package/dist/api/media/camera.js +3 -0
  57. package/dist/api/media/editor.js +18 -0
  58. package/dist/api/media/image/chooseImage.js +74 -0
  59. package/dist/api/media/image/getImageInfo.js +31 -0
  60. package/dist/api/media/image/index.js +9 -0
  61. package/dist/api/media/image/previewImage.js +67 -0
  62. package/dist/api/media/index.js +13 -0
  63. package/dist/api/media/live.js +4 -0
  64. package/dist/api/media/map.js +3 -0
  65. package/dist/api/media/media-recorder.js +3 -0
  66. package/dist/api/media/recorder.js +5 -0
  67. package/dist/api/media/video/index.js +74 -0
  68. package/dist/api/media/video-decoder.js +3 -0
  69. package/dist/api/media/video-processing.js +3 -0
  70. package/dist/api/media/voip.js +16 -0
  71. package/dist/api/navigate/index.js +6 -0
  72. package/dist/api/network/download.js +124 -0
  73. package/dist/api/network/index.js +7 -0
  74. package/dist/api/network/mdns.js +12 -0
  75. package/dist/api/network/request/index.js +125 -0
  76. package/dist/api/network/tcp.js +3 -0
  77. package/dist/api/network/udp.js +3 -0
  78. package/dist/api/network/upload.js +151 -0
  79. package/dist/api/network/utils.js +65 -0
  80. package/dist/api/network/websocket/index.js +70 -0
  81. package/dist/api/network/websocket/socketTask.js +63 -0
  82. package/dist/api/open-api/account.js +3 -0
  83. package/dist/api/open-api/address.js +3 -0
  84. package/dist/api/open-api/authorize.js +4 -0
  85. package/dist/api/open-api/card.js +4 -0
  86. package/dist/api/open-api/channels-live.js +8 -0
  87. package/dist/api/open-api/customer-service.js +3 -0
  88. package/dist/api/open-api/facial.js +6 -0
  89. package/dist/api/open-api/favorites.js +4 -0
  90. package/dist/api/open-api/group.js +3 -0
  91. package/dist/api/open-api/index.js +18 -0
  92. package/dist/api/open-api/invoice.js +4 -0
  93. package/dist/api/open-api/license-plate.js +3 -0
  94. package/dist/api/open-api/login.js +5 -0
  95. package/dist/api/open-api/red-package.js +3 -0
  96. package/dist/api/open-api/settings.js +4 -0
  97. package/dist/api/open-api/soter.js +5 -0
  98. package/dist/api/open-api/subscribe-message.js +3 -0
  99. package/dist/api/open-api/user-info.js +4 -0
  100. package/dist/api/open-api/werun.js +4 -0
  101. package/dist/api/payment/index.js +4 -0
  102. package/dist/api/route/index.js +3 -0
  103. package/dist/api/share/index.js +12 -0
  104. package/dist/api/storage/background-fetch.js +6 -0
  105. package/dist/api/storage/index.js +157 -0
  106. package/dist/api/swan/index.js +26 -0
  107. package/dist/api/taro.js +47 -0
  108. package/dist/api/ui/animation/index.js +284 -0
  109. package/dist/api/ui/background.js +4 -0
  110. package/dist/api/ui/custom-component.js +3 -0
  111. package/dist/api/ui/fonts.js +3 -0
  112. package/dist/api/ui/index.js +12 -0
  113. package/dist/api/ui/interaction/actionSheet.js +188 -0
  114. package/dist/api/ui/interaction/index.js +268 -0
  115. package/dist/api/ui/interaction/modal.js +207 -0
  116. package/dist/api/ui/interaction/toast.js +195 -0
  117. package/dist/api/ui/menu.js +3 -0
  118. package/dist/api/ui/navigation-bar/index.js +42 -0
  119. package/dist/api/ui/pull-down-refresh.js +26 -0
  120. package/dist/api/ui/scroll/index.js +83 -0
  121. package/dist/api/ui/sticky.js +3 -0
  122. package/dist/api/ui/tab-bar.js +282 -0
  123. package/dist/api/ui/window.js +31 -0
  124. package/dist/api/utils/handler.js +80 -0
  125. package/dist/api/utils/index.js +148 -0
  126. package/dist/api/worker/index.js +3 -0
  127. package/dist/api/wxml/index.js +6 -0
  128. package/dist/api/wxml/nodesRef.js +42 -0
  129. package/dist/api/wxml/selectorQuery.js +201 -0
  130. package/dist/index.cjs.js +7852 -11638
  131. package/dist/index.js +4 -0
  132. package/dist/taroApis.js +1 -1
  133. package/dist/types/type.js +2 -0
  134. package/package.json +14 -16
  135. package/src/api/ad/index.ts +5 -0
  136. package/src/api/ai/facial.ts +6 -0
  137. package/src/api/ai/index.ts +2 -0
  138. package/src/api/ai/visual.ts +4 -0
  139. package/src/api/alipay/index.ts +4 -0
  140. package/src/api/base/crypto.ts +4 -0
  141. package/src/api/base/debug.ts +5 -0
  142. package/src/api/base/index.ts +23 -0
  143. package/src/api/base/performance.ts +5 -0
  144. package/src/api/base/system/index.ts +2 -0
  145. package/src/api/base/system/info.ts +64 -0
  146. package/src/api/base/system/network.ts +70 -0
  147. package/src/api/base/update.ts +5 -0
  148. package/src/api/base/weapp/app-event.ts +19 -0
  149. package/src/api/base/weapp/life-cycle.ts +5 -0
  150. package/src/api/canvas/CanvasContext.ts +233 -0
  151. package/src/api/canvas/canvasGetImageData.ts +27 -0
  152. package/src/api/canvas/canvasPutImageData.ts +24 -0
  153. package/src/api/canvas/canvasToTempFilePath.ts +24 -0
  154. package/src/api/canvas/createCanvasContext.ts +18 -0
  155. package/src/api/canvas/index.ts +10 -0
  156. package/src/api/cloud/index.ts +27 -0
  157. package/src/api/data-analysis/index.ts +6 -0
  158. package/src/api/device/accelerometer.ts +87 -0
  159. package/src/api/device/accessibility.ts +4 -0
  160. package/src/api/device/battery.ts +5 -0
  161. package/src/api/device/bluetooth-ble.ts +19 -0
  162. package/src/api/device/bluetooth-peripheral.ts +6 -0
  163. package/src/api/device/bluetooth.ts +16 -0
  164. package/src/api/device/calendar.ts +5 -0
  165. package/src/api/device/clipboard.ts +67 -0
  166. package/src/api/device/compass.ts +67 -0
  167. package/src/api/device/contact.ts +5 -0
  168. package/src/api/device/crypto.ts +4 -0
  169. package/src/api/device/gyroscope.ts +7 -0
  170. package/src/api/device/iBeacon.ts +10 -0
  171. package/src/api/device/index.ts +22 -0
  172. package/src/api/device/keyboard.ts +7 -0
  173. package/src/api/device/memory.ts +5 -0
  174. package/src/api/device/motion.ts +85 -0
  175. package/src/api/device/nfc.ts +10 -0
  176. package/src/api/device/phone.ts +30 -0
  177. package/src/api/device/scan.ts +7 -0
  178. package/src/api/device/screen.ts +9 -0
  179. package/src/api/device/vibrate.ts +36 -0
  180. package/src/api/device/wifi.ts +13 -0
  181. package/src/api/ext/index.ts +5 -0
  182. package/src/api/files/index.ts +11 -0
  183. package/src/api/framework/index.ts +10 -0
  184. package/src/api/index.ts +25 -0
  185. package/src/api/location/chooseLocation.ts +106 -0
  186. package/src/api/location/index.ts +19 -0
  187. package/src/api/location/style.css +8 -8
  188. package/src/api/media/audio/index.ts +105 -0
  189. package/src/api/media/background-audio.ts +12 -0
  190. package/src/api/media/camera.ts +4 -0
  191. package/src/api/media/editor.ts +29 -0
  192. package/src/api/media/image/chooseImage.ts +78 -0
  193. package/src/api/media/image/getImageInfo.ts +35 -0
  194. package/src/api/media/image/index.ts +13 -0
  195. package/src/api/media/image/previewImage.ts +80 -0
  196. package/src/api/media/index.ts +13 -0
  197. package/src/api/media/live.ts +5 -0
  198. package/src/api/media/map.ts +4 -0
  199. package/src/api/media/media-recorder.ts +4 -0
  200. package/src/api/media/recorder.ts +6 -0
  201. package/src/api/media/video/index.ts +82 -0
  202. package/src/api/media/video-decoder.ts +4 -0
  203. package/src/api/media/video-processing.ts +4 -0
  204. package/src/api/media/voip.ts +17 -0
  205. package/src/api/navigate/index.ts +7 -0
  206. package/src/api/{fileTransfer/downloadFile.js → network/download.ts} +16 -27
  207. package/src/api/network/index.ts +7 -0
  208. package/src/api/network/mdns.ts +13 -0
  209. package/src/api/{request/index.js → network/request/index.ts} +9 -6
  210. package/src/api/network/tcp.ts +4 -0
  211. package/src/api/network/udp.ts +4 -0
  212. package/src/api/{fileTransfer/uploadFile.js → network/upload.ts} +28 -32
  213. package/src/api/{fileTransfer/utils.js → network/utils.ts} +0 -0
  214. package/src/api/network/websocket/index.ts +88 -0
  215. package/src/api/{webSocket/socketTask.js → network/websocket/socketTask.ts} +17 -7
  216. package/src/api/open-api/account.ts +4 -0
  217. package/src/api/open-api/address.ts +4 -0
  218. package/src/api/open-api/authorize.ts +5 -0
  219. package/src/api/open-api/card.ts +5 -0
  220. package/src/api/open-api/channels-live.ts +9 -0
  221. package/src/api/open-api/customer-service.ts +4 -0
  222. package/src/api/open-api/facial.ts +7 -0
  223. package/src/api/open-api/favorites.ts +5 -0
  224. package/src/api/open-api/group.ts +4 -0
  225. package/src/api/open-api/index.ts +18 -0
  226. package/src/api/open-api/invoice.ts +5 -0
  227. package/src/api/open-api/license-plate.ts +4 -0
  228. package/src/api/open-api/login.ts +6 -0
  229. package/src/api/open-api/red-package.ts +4 -0
  230. package/src/api/open-api/settings.ts +5 -0
  231. package/src/api/open-api/soter.ts +6 -0
  232. package/src/api/open-api/subscribe-message.ts +4 -0
  233. package/src/api/open-api/user-info.ts +5 -0
  234. package/src/api/open-api/werun.ts +5 -0
  235. package/src/api/payment/index.ts +5 -0
  236. package/src/api/route/index.ts +10 -0
  237. package/src/api/share/index.ts +13 -0
  238. package/src/api/storage/background-fetch.ts +7 -0
  239. package/src/api/storage/index.ts +181 -0
  240. package/src/api/swan/index.ts +31 -0
  241. package/src/{taro/index.js → api/taro.ts} +89 -104
  242. package/src/api/{createAnimation/index.js → ui/animation/index.ts} +52 -41
  243. package/src/api/ui/background.ts +5 -0
  244. package/src/api/ui/custom-component.ts +4 -0
  245. package/src/api/ui/fonts.ts +4 -0
  246. package/src/api/ui/index.ts +12 -0
  247. package/src/api/ui/interaction/actionSheet.ts +212 -0
  248. package/src/api/{interactive/index.js → ui/interaction/index.ts} +95 -77
  249. package/src/api/ui/interaction/modal.ts +237 -0
  250. package/src/api/{interactive/toast.js → ui/interaction/toast.ts} +35 -33
  251. package/src/api/ui/menu.ts +4 -0
  252. package/src/api/ui/navigation-bar/index.ts +52 -0
  253. package/src/api/ui/pull-down-refresh.ts +27 -0
  254. package/src/api/ui/scroll/index.ts +85 -0
  255. package/src/api/ui/sticky.ts +4 -0
  256. package/src/api/ui/tab-bar.ts +326 -0
  257. package/src/api/ui/window.ts +37 -0
  258. package/src/api/utils/handler.ts +105 -0
  259. package/src/api/utils/{index.js → index.ts} +36 -115
  260. package/src/api/worker/index.ts +4 -0
  261. package/src/api/wxml/index.ts +9 -0
  262. package/src/api/wxml/nodesRef.ts +56 -0
  263. package/src/api/wxml/selectorQuery.ts +219 -0
  264. package/src/index.ts +6 -0
  265. package/src/types/api.d.ts +4 -0
  266. package/src/types/define.d.ts +2 -0
  267. package/{types → src/types}/index.d.ts +0 -0
  268. package/{types → src/types}/type.ts +1 -1
  269. package/src/api/accelerometer/index.js +0 -105
  270. package/src/api/audio/index.js +0 -137
  271. package/src/api/canvas/canvasGetImageData.js +0 -44
  272. package/src/api/canvas/canvasPutImageData.js +0 -45
  273. package/src/api/canvas/canvasToTempFilePath.js +0 -49
  274. package/src/api/canvas/createCanvasContext.js +0 -340
  275. package/src/api/canvas/index.js +0 -4
  276. package/src/api/clipboard/index.js +0 -113
  277. package/src/api/compass/index.js +0 -99
  278. package/src/api/createSelectorQuery/index.js +0 -193
  279. package/src/api/deviceMotion/index.js +0 -105
  280. package/src/api/fileTransfer/index.js +0 -2
  281. package/src/api/image/chooseImage.js +0 -87
  282. package/src/api/image/getImageInfo.js +0 -74
  283. package/src/api/image/index.js +0 -7
  284. package/src/api/image/previewImage.js +0 -94
  285. package/src/api/index.js +0 -29
  286. package/src/api/interactive/actionSheet.js +0 -214
  287. package/src/api/interactive/modal.js +0 -256
  288. package/src/api/location/chooseLocation.js +0 -143
  289. package/src/api/location/index.js +0 -5
  290. package/src/api/navigationBar/index.js +0 -57
  291. package/src/api/open/index.js +0 -5
  292. package/src/api/others/index.js +0 -43
  293. package/src/api/pullDownRefresh/index.js +0 -51
  294. package/src/api/scroll/index.js +0 -99
  295. package/src/api/storage/index.js +0 -211
  296. package/src/api/system/index.js +0 -9
  297. package/src/api/system/info.js +0 -36
  298. package/src/api/system/network.js +0 -68
  299. package/src/api/tabBar/index.js +0 -402
  300. package/src/api/unsupportedApi/index.js +0 -278
  301. package/src/api/vibrate/index.js +0 -49
  302. package/src/api/video/index.js +0 -87
  303. package/src/api/webSocket/index.js +0 -103
  304. package/src/api/window/index.js +0 -38
  305. package/src/index.cjs.js +0 -11
  306. package/src/index.js +0 -6
@@ -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
- }
@@ -0,0 +1,4 @@
1
+ import { temporarilyNotSupport } from '../utils'
2
+
3
+ // Worker
4
+ export const createWorker = temporarilyNotSupport('createWorker')
@@ -0,0 +1,9 @@
1
+ import Taro from '@tarojs/api'
2
+ import { temporarilyNotSupport } from '../utils'
3
+ import { SelectorQuery } from './selectorQuery'
4
+
5
+ export const createSelectorQuery: typeof Taro.createSelectorQuery = () => {
6
+ return new SelectorQuery()
7
+ }
8
+
9
+ export const createIntersectionObserver = temporarilyNotSupport('createIntersectionObserver')
@@ -0,0 +1,56 @@
1
+ import { SelectorQuery } from './selectorQuery'
2
+
3
+ export class NodesRef implements Taro.NodesRef {
4
+ _component?: TaroGeneral.IAnyObject
5
+ _selector: string
6
+ _selectorQuery: SelectorQuery
7
+ _single: boolean
8
+
9
+ constructor (selector: string, querySelectorQuery: SelectorQuery, single: boolean) {
10
+ this._component = querySelectorQuery._component
11
+ this._selector = selector
12
+ this._selectorQuery = querySelectorQuery
13
+ this._single = single
14
+ }
15
+
16
+ context (cb) {
17
+ const { _selector, _component, _single, _selectorQuery } = this
18
+ _selectorQuery._push(_selector, _component, _single, { context: !0 }, cb)
19
+ return _selectorQuery
20
+ }
21
+
22
+ node (cb) {
23
+ const { _selector, _component, _single, _selectorQuery } = this
24
+ _selectorQuery._push(_selector, _component, _single, { nodeCanvasType: !0, node: !0 }, cb)
25
+ return _selectorQuery
26
+ }
27
+
28
+ boundingClientRect (cb) {
29
+ const { _selector, _component, _single, _selectorQuery } = this
30
+ _selectorQuery._push(_selector, _component, _single, { id: !0, dataset: !0, rect: !0, size: !0 }, cb)
31
+ return _selectorQuery
32
+ }
33
+
34
+ scrollOffset (cb) {
35
+ const { _selector, _component, _single, _selectorQuery } = this
36
+ _selectorQuery._push(_selector, _component, _single, { id: !0, dataset: !0, scrollOffset: !0 }, cb)
37
+ return _selectorQuery
38
+ }
39
+
40
+ fields (fields, cb) {
41
+ const { _selector, _component, _single, _selectorQuery } = this
42
+ const { id, dataset, rect, size, scrollOffset, properties = [], computedStyle = [] } = fields
43
+
44
+ _selectorQuery._push(_selector, _component, _single, {
45
+ id,
46
+ dataset,
47
+ rect,
48
+ size,
49
+ scrollOffset,
50
+ properties,
51
+ computedStyle
52
+ }, cb)
53
+
54
+ return _selectorQuery
55
+ }
56
+ }
@@ -0,0 +1,219 @@
1
+ import Taro from '@tarojs/api'
2
+ import { CanvasContext } from '../canvas/CanvasContext'
3
+ import { findDOM } from '../utils'
4
+ import { NodesRef } from './nodesRef'
5
+
6
+ type TElement = Document | HTMLElement | Element
7
+
8
+ interface ISelectorQueryQueue {
9
+ component: TaroGeneral.IAnyObject
10
+ selector: string
11
+ single: boolean
12
+ fields
13
+ }
14
+
15
+ type TSelectorQueryQueueCallback = (res: ISelectorQueryQueue) => void
16
+
17
+ function filter (fields, dom?: HTMLElement, selector?: string) {
18
+ if (!dom) return null
19
+
20
+ const isViewport = selector === '.taro_page'
21
+ const { id, dataset, rect, size, scrollOffset, properties = [], computedStyle = [], nodeCanvasType, node, context } = fields
22
+ const res: any = {}
23
+
24
+ if (nodeCanvasType && node) {
25
+ const tagName = dom.tagName
26
+ res.node = {
27
+ id: dom.id,
28
+ $taroElement: dom
29
+ }
30
+ if (/^taro-canvas-core/i.test(tagName)) {
31
+ const type = (dom as any).type! || ''
32
+ res.nodeCanvasType = type
33
+ const canvas = dom.getElementsByTagName('canvas')[0]
34
+ if (/^(2d|webgl)/i.test(type) && canvas) {
35
+ res.node = canvas
36
+ } else {
37
+ res.node = null
38
+ }
39
+ } else {
40
+ // TODO https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html
41
+ // if (/^taro-scroll-view-core/i.test(tagName))
42
+ res.nodeCanvasType = ''
43
+ res.node = dom
44
+ }
45
+ return res
46
+ }
47
+ if (context) {
48
+ const tagName = dom.tagName
49
+ if (/^taro-video-core/i.test(tagName)) {
50
+ // TODO HTMLVideoElement to VideoContext
51
+ return { context: dom as unknown as Taro.VideoContext }
52
+ } else if (/^taro-canvas-core/i.test(tagName)) {
53
+ const type = (dom as any).type! || '2d'
54
+ const canvas = dom?.querySelector('canvas') as HTMLCanvasElement
55
+ const ctx = canvas?.getContext(type) as CanvasRenderingContext2D
56
+ return { context: new CanvasContext(canvas, ctx) }
57
+ } else if (/^taro-live-player-core/i.test(tagName)) {
58
+ console.error('暂时不支持通过 NodesRef.context 获取 LivePlayerContext')
59
+ } else if (/^taro-editor-core/i.test(tagName)) {
60
+ console.error('暂时不支持通过 NodesRef.context 获取 EditorContext')
61
+ } else if (/^taro-map-core/i.test(tagName)) {
62
+ console.error('暂时不支持通过 NodesRef.context 获取 MapContext')
63
+ }
64
+ return
65
+ }
66
+ if (id) res.id = dom.id
67
+ if (dataset) res.dataset = Object.assign({}, dom.dataset)
68
+ if (rect || size) {
69
+ const { left, right, top, bottom, width, height } = dom.getBoundingClientRect()
70
+ if (rect) {
71
+ if (!isViewport) {
72
+ res.left = left
73
+ res.right = right
74
+ res.top = top
75
+ res.bottom = bottom
76
+ } else {
77
+ res.left = 0
78
+ res.right = 0
79
+ res.top = 0
80
+ res.bottom = 0
81
+ }
82
+ }
83
+ if (size) {
84
+ if (!isViewport) {
85
+ res.width = width
86
+ res.height = height
87
+ } else {
88
+ res.width = dom.clientWidth
89
+ res.height = dom.clientHeight
90
+ }
91
+ }
92
+ }
93
+ if (scrollOffset) {
94
+ res.scrollLeft = dom.scrollLeft
95
+ res.scrollTop = dom.scrollTop
96
+ }
97
+ if (properties.length) {
98
+ properties.forEach(prop => {
99
+ const attr = dom.getAttribute(prop)
100
+ if (attr) res[prop] = attr
101
+ })
102
+ }
103
+ if (computedStyle.length) {
104
+ const styles = window.getComputedStyle(dom)
105
+ computedStyle.forEach(key => {
106
+ const value = styles.getPropertyValue(key) || styles[key]
107
+ if (value) res[key] = value
108
+ })
109
+ }
110
+
111
+ return res
112
+ }
113
+
114
+ /**
115
+ * WXML节点信息API
116
+ * @return {Object} SelectorQuery 对象实例
117
+ */
118
+ function queryBat (queue: ISelectorQueryQueue[], cb: (...args: any[]) => any): void {
119
+ const result: any[] = []
120
+
121
+ queue.forEach(item => {
122
+ const { selector, single, fields, component } = item
123
+ // selector 的容器节点
124
+ /* eslint-disable */
125
+ const container: TElement = (
126
+ component !== null ?
127
+ (findDOM(component) as HTMLElement || document) :
128
+ document
129
+ )
130
+ /* eslint-enable */
131
+
132
+ // 特殊处理 ---- 选自己
133
+ let selectSelf = false
134
+ if (container !== document) {
135
+ const $nodeList = container.parentNode?.querySelectorAll(selector)
136
+ if ($nodeList) {
137
+ for (let i = 0, len = $nodeList.length; i < len; ++i) {
138
+ if (container === $nodeList[i]) {
139
+ selectSelf = true
140
+ break
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ if (single) {
147
+ const el = selectSelf === true ? container : container.querySelector(selector)
148
+ result.push(filter(fields, el as HTMLElement, selector))
149
+ } else {
150
+ const $children = container.querySelectorAll(selector)
151
+ const children: TElement[] = []
152
+ selectSelf === true && children.push(container)
153
+ for (let i = 0, len = $children.length; i < len; ++i) {
154
+ children.push($children[i])
155
+ }
156
+ result.push(children.map(dom => filter(fields, dom as HTMLElement)))
157
+ }
158
+ })
159
+ cb(result)
160
+ }
161
+
162
+ export class SelectorQuery implements Taro.SelectorQuery {
163
+ _defaultWebviewId: string | null
164
+ _webviewId: string | null
165
+ _queue: ISelectorQueryQueue[]
166
+ _queueCb: (TSelectorQueryQueueCallback | null)[]
167
+ _component?: TaroGeneral.IAnyObject
168
+
169
+ constructor () {
170
+ this._defaultWebviewId = null
171
+ this._webviewId = null
172
+ this._queue = []
173
+ this._queueCb = []
174
+ this._component
175
+ }
176
+
177
+ in (component: TaroGeneral.IAnyObject) {
178
+ this._component = component
179
+ return this
180
+ }
181
+
182
+ select (selector: string) {
183
+ // 小程序里跨自定义组件的后代选择器 '>>>' 在 h5 替换为普通后代选择器 '>'
184
+ if (typeof selector === 'string') selector = selector.replace('>>>', '>')
185
+ return new NodesRef(selector, this, true)
186
+ }
187
+
188
+ selectAll (selector: string) {
189
+ // 小程序里跨自定义组件的后代选择器 '>>>' 在 h5 替换为普通后代选择器 '>'
190
+ if (typeof selector === 'string') selector = selector.replace('>>>', '>')
191
+ return new NodesRef(selector, this, false)
192
+ }
193
+
194
+ selectViewport () {
195
+ return new NodesRef('.taro_page', this, true)
196
+ }
197
+
198
+ exec (cb) {
199
+ queryBat(this._queue, res => {
200
+ const _queueCb = this._queueCb
201
+ res.forEach((item, index) => {
202
+ const cb = _queueCb[index]
203
+ typeof cb === 'function' && cb.call(this, item)
204
+ })
205
+ typeof cb === 'function' && cb.call(this, res)
206
+ })
207
+ return this as unknown as Taro.NodesRef
208
+ }
209
+
210
+ _push (selector: string, component, single, fields, callback: TSelectorQueryQueueCallback | null = null) {
211
+ this._queue.push({
212
+ component,
213
+ selector,
214
+ single,
215
+ fields
216
+ })
217
+ this._queueCb.push(callback)
218
+ }
219
+ }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ import taro from './api/taro'
2
+
3
+ export * from './api/index'
4
+ export * from './api/taro'
5
+
6
+ export default taro
@@ -0,0 +1,4 @@
1
+ declare module '@tarojs/api' {
2
+ import Taro = require("@tarojs/taro")
3
+ export = Taro
4
+ }
@@ -0,0 +1,2 @@
1
+ // NOTE: 允许用户自定义的常量
2
+ declare const LOCATION_APIKEY: string | undefined
File without changes
@@ -1,4 +1,4 @@
1
- import Taro from '@tarojs/taro'
1
+ import Taro from '@tarojs/api'
2
2
 
3
3
  namespace Router {
4
4
  export interface Location {