@tarojs/taro-h5 3.7.0-alpha.2 → 3.7.0-alpha.4

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 (292) hide show
  1. package/dist/api/ad/index.js +2 -2
  2. package/dist/api/ad/index.js.map +1 -1
  3. package/dist/api/ai/facial.js +3 -3
  4. package/dist/api/ai/facial.js.map +1 -1
  5. package/dist/api/ai/index.d.ts +3 -2
  6. package/dist/api/ai/index.js +1 -0
  7. package/dist/api/ai/index.js.map +1 -1
  8. package/dist/api/ai/inference.d.ts +3 -0
  9. package/dist/api/ai/inference.js +8 -0
  10. package/dist/api/ai/inference.js.map +1 -0
  11. package/dist/api/ai/visual.js +2 -2
  12. package/dist/api/ai/visual.js.map +1 -1
  13. package/dist/api/alipay/index.js +1 -1
  14. package/dist/api/alipay/index.js.map +1 -1
  15. package/dist/api/base/crypto.js +1 -1
  16. package/dist/api/base/crypto.js.map +1 -1
  17. package/dist/api/base/debug.js +3 -3
  18. package/dist/api/base/debug.js.map +1 -1
  19. package/dist/api/base/index.d.ts +8 -9
  20. package/dist/api/base/index.js +6 -6
  21. package/dist/api/base/index.js.map +1 -1
  22. package/dist/api/base/performance.d.ts +4 -1
  23. package/dist/api/base/performance.js +6 -3
  24. package/dist/api/base/performance.js.map +1 -1
  25. package/dist/api/base/system.d.ts +4 -1
  26. package/dist/api/base/system.js +6 -3
  27. package/dist/api/base/system.js.map +1 -1
  28. package/dist/api/base/update.js +2 -2
  29. package/dist/api/base/update.js.map +1 -1
  30. package/dist/api/base/weapp/app-event.d.ts +13 -11
  31. package/dist/api/base/weapp/app-event.js +84 -14
  32. package/dist/api/base/weapp/app-event.js.map +1 -1
  33. package/dist/api/canvas/CanvasContext.d.ts +2 -1
  34. package/dist/api/canvas/CanvasContext.js.map +1 -1
  35. package/dist/api/canvas/index.d.ts +4 -4
  36. package/dist/api/canvas/index.js +1 -1
  37. package/dist/api/canvas/index.js.map +1 -1
  38. package/dist/api/data-analysis/index.js +4 -4
  39. package/dist/api/data-analysis/index.js.map +1 -1
  40. package/dist/api/device/accelerometer.js +1 -2
  41. package/dist/api/device/accelerometer.js.map +1 -1
  42. package/dist/api/device/accessibility.js +1 -1
  43. package/dist/api/device/accessibility.js.map +1 -1
  44. package/dist/api/device/battery.js +1 -1
  45. package/dist/api/device/battery.js.map +1 -1
  46. package/dist/api/device/bluetooth-ble.js +16 -16
  47. package/dist/api/device/bluetooth-ble.js.map +1 -1
  48. package/dist/api/device/bluetooth-peripheral.js +3 -3
  49. package/dist/api/device/bluetooth-peripheral.js.map +1 -1
  50. package/dist/api/device/bluetooth.js +13 -13
  51. package/dist/api/device/bluetooth.js.map +1 -1
  52. package/dist/api/device/calendar.d.ts +3 -2
  53. package/dist/api/device/calendar.js +142 -3
  54. package/dist/api/device/calendar.js.map +1 -1
  55. package/dist/api/device/compass.js +1 -2
  56. package/dist/api/device/compass.js.map +1 -1
  57. package/dist/api/device/contact.js +2 -2
  58. package/dist/api/device/contact.js.map +1 -1
  59. package/dist/api/device/crypto.js +1 -1
  60. package/dist/api/device/crypto.js.map +1 -1
  61. package/dist/api/device/gyroscope.js +4 -4
  62. package/dist/api/device/gyroscope.js.map +1 -1
  63. package/dist/api/device/iBeacon.js +7 -7
  64. package/dist/api/device/iBeacon.js.map +1 -1
  65. package/dist/api/device/index.d.ts +24 -23
  66. package/dist/api/device/index.js +3 -2
  67. package/dist/api/device/index.js.map +1 -1
  68. package/dist/api/device/keyboard.js +4 -4
  69. package/dist/api/device/keyboard.js.map +1 -1
  70. package/dist/api/device/memory.js +2 -2
  71. package/dist/api/device/memory.js.map +1 -1
  72. package/dist/api/device/motion.js +1 -2
  73. package/dist/api/device/motion.js.map +1 -1
  74. package/dist/api/device/network.js +3 -3
  75. package/dist/api/device/network.js.map +1 -1
  76. package/dist/api/device/nfc.js +7 -7
  77. package/dist/api/device/nfc.js.map +1 -1
  78. package/dist/api/device/scan.js +1 -1
  79. package/dist/api/device/scan.js.map +1 -1
  80. package/dist/api/device/screen.d.ts +4 -1
  81. package/dist/api/device/screen.js +10 -7
  82. package/dist/api/device/screen.js.map +1 -1
  83. package/dist/api/device/sms.d.ts +2 -0
  84. package/dist/api/device/sms.js +7 -0
  85. package/dist/api/device/sms.js.map +1 -0
  86. package/dist/api/device/wifi.d.ts +2 -1
  87. package/dist/api/device/wifi.js +13 -12
  88. package/dist/api/device/wifi.js.map +1 -1
  89. package/dist/api/ext/index.js +2 -2
  90. package/dist/api/ext/index.js.map +1 -1
  91. package/dist/api/files/index.js +8 -8
  92. package/dist/api/files/index.js.map +1 -1
  93. package/dist/api/framework/index.d.ts +1 -1
  94. package/dist/api/index.d.ts +25 -24
  95. package/dist/api/index.js +24 -14
  96. package/dist/api/index.js.map +1 -1
  97. package/dist/api/location/chooseLocation.js +9 -5
  98. package/dist/api/location/chooseLocation.js.map +1 -1
  99. package/dist/api/location/getLocation.js +1 -1
  100. package/dist/api/location/getLocation.js.map +1 -1
  101. package/dist/api/location/index.d.ts +2 -2
  102. package/dist/api/location/index.js +10 -10
  103. package/dist/api/location/index.js.map +1 -1
  104. package/dist/api/media/audio/InnerAudioContext.d.ts +3 -1
  105. package/dist/api/media/audio/InnerAudioContext.js +4 -1
  106. package/dist/api/media/audio/InnerAudioContext.js.map +1 -1
  107. package/dist/api/media/audio/index.js +8 -8
  108. package/dist/api/media/audio/index.js.map +1 -1
  109. package/dist/api/media/background-audio/BackgroundAudioManager.d.ts +1 -1
  110. package/dist/api/media/background-audio/index.d.ts +1 -1
  111. package/dist/api/media/background-audio/index.js +8 -8
  112. package/dist/api/media/background-audio/index.js.map +1 -1
  113. package/dist/api/media/camera.js +1 -1
  114. package/dist/api/media/camera.js.map +1 -1
  115. package/dist/api/media/image/chooseImage.d.ts +1 -0
  116. package/dist/api/media/image/chooseImage.js +28 -71
  117. package/dist/api/media/image/chooseImage.js.map +1 -1
  118. package/dist/api/media/image/index.d.ts +9 -6
  119. package/dist/api/media/image/index.js +8 -7
  120. package/dist/api/media/image/index.js.map +1 -1
  121. package/dist/api/media/image/previewImage.js +5 -5
  122. package/dist/api/media/image/previewImage.js.map +1 -1
  123. package/dist/api/media/image/saveImageToPhotosAlbum.d.ts +3 -0
  124. package/dist/api/media/image/saveImageToPhotosAlbum.js +30 -0
  125. package/dist/api/media/image/saveImageToPhotosAlbum.js.map +1 -0
  126. package/dist/api/media/index.d.ts +12 -12
  127. package/dist/api/media/index.js +3 -3
  128. package/dist/api/media/live.js +2 -2
  129. package/dist/api/media/live.js.map +1 -1
  130. package/dist/api/media/map.js +1 -1
  131. package/dist/api/media/map.js.map +1 -1
  132. package/dist/api/media/media-recorder.js +1 -1
  133. package/dist/api/media/media-recorder.js.map +1 -1
  134. package/dist/api/media/recorder.js +3 -3
  135. package/dist/api/media/recorder.js.map +1 -1
  136. package/dist/api/media/video/chooseMedia.d.ts +6 -0
  137. package/dist/api/media/video/chooseMedia.js +208 -0
  138. package/dist/api/media/video/chooseMedia.js.map +1 -0
  139. package/dist/api/media/video/chooseVideo.d.ts +7 -0
  140. package/dist/api/media/video/chooseVideo.js +44 -0
  141. package/dist/api/media/video/chooseVideo.js.map +1 -0
  142. package/dist/api/media/video/getVideoInfo.d.ts +3 -0
  143. package/dist/api/media/video/getVideoInfo.js +63 -0
  144. package/dist/api/media/video/getVideoInfo.js.map +1 -0
  145. package/dist/api/media/video/index.d.ts +5 -8
  146. package/dist/api/media/video/index.js +8 -67
  147. package/dist/api/media/video/index.js.map +1 -1
  148. package/dist/api/media/video/saveVideoToPhotosAlbum.d.ts +3 -0
  149. package/dist/api/media/video/saveVideoToPhotosAlbum.js +30 -0
  150. package/dist/api/media/video/saveVideoToPhotosAlbum.js.map +1 -0
  151. package/dist/api/media/video-decoder.js +1 -1
  152. package/dist/api/media/video-decoder.js.map +1 -1
  153. package/dist/api/media/video-processing.js +1 -1
  154. package/dist/api/media/video-processing.js.map +1 -1
  155. package/dist/api/media/voip.d.ts +3 -1
  156. package/dist/api/media/voip.js +17 -15
  157. package/dist/api/media/voip.js.map +1 -1
  158. package/dist/api/navigate/index.js +5 -5
  159. package/dist/api/navigate/index.js.map +1 -1
  160. package/dist/api/network/index.d.ts +7 -7
  161. package/dist/api/network/mdns.js +10 -10
  162. package/dist/api/network/mdns.js.map +1 -1
  163. package/dist/api/network/request/index.d.ts +1 -1
  164. package/dist/api/network/request/index.js +23 -18
  165. package/dist/api/network/request/index.js.map +1 -1
  166. package/dist/api/network/tcp.js +1 -1
  167. package/dist/api/network/tcp.js.map +1 -1
  168. package/dist/api/network/udp.js +1 -1
  169. package/dist/api/network/udp.js.map +1 -1
  170. package/dist/api/network/upload.js.map +1 -1
  171. package/dist/api/open-api/account.js +1 -1
  172. package/dist/api/open-api/account.js.map +1 -1
  173. package/dist/api/open-api/address.js +1 -1
  174. package/dist/api/open-api/address.js.map +1 -1
  175. package/dist/api/open-api/authorize.js +2 -2
  176. package/dist/api/open-api/authorize.js.map +1 -1
  177. package/dist/api/open-api/card.js +2 -2
  178. package/dist/api/open-api/card.js.map +1 -1
  179. package/dist/api/open-api/channels-live.d.ts +3 -1
  180. package/dist/api/open-api/channels-live.js +9 -7
  181. package/dist/api/open-api/channels-live.js.map +1 -1
  182. package/dist/api/open-api/customer-service.js +1 -1
  183. package/dist/api/open-api/customer-service.js.map +1 -1
  184. package/dist/api/open-api/device-voip.d.ts +3 -0
  185. package/dist/api/open-api/device-voip.js +8 -0
  186. package/dist/api/open-api/device-voip.js.map +1 -0
  187. package/dist/api/open-api/facial.js +4 -4
  188. package/dist/api/open-api/facial.js.map +1 -1
  189. package/dist/api/open-api/favorites.js +3 -3
  190. package/dist/api/open-api/favorites.js.map +1 -1
  191. package/dist/api/open-api/group.js +1 -1
  192. package/dist/api/open-api/group.js.map +1 -1
  193. package/dist/api/open-api/index.d.ts +19 -18
  194. package/dist/api/open-api/index.js +3 -2
  195. package/dist/api/open-api/index.js.map +1 -1
  196. package/dist/api/open-api/invoice.js +2 -2
  197. package/dist/api/open-api/invoice.js.map +1 -1
  198. package/dist/api/open-api/license-plate.js +1 -1
  199. package/dist/api/open-api/license-plate.js.map +1 -1
  200. package/dist/api/open-api/login.js +3 -3
  201. package/dist/api/open-api/login.js.map +1 -1
  202. package/dist/api/open-api/red-package.js +1 -1
  203. package/dist/api/open-api/red-package.js.map +1 -1
  204. package/dist/api/open-api/settings.js +2 -2
  205. package/dist/api/open-api/settings.js.map +1 -1
  206. package/dist/api/open-api/soter.js +3 -3
  207. package/dist/api/open-api/soter.js.map +1 -1
  208. package/dist/api/open-api/subscribe-message.d.ts +2 -1
  209. package/dist/api/open-api/subscribe-message.js +4 -2
  210. package/dist/api/open-api/subscribe-message.js.map +1 -1
  211. package/dist/api/open-api/user-info.js +2 -2
  212. package/dist/api/open-api/user-info.js.map +1 -1
  213. package/dist/api/open-api/werun.js +2 -2
  214. package/dist/api/open-api/werun.js.map +1 -1
  215. package/dist/api/payment/index.d.ts +2 -1
  216. package/dist/api/payment/index.js +4 -3
  217. package/dist/api/payment/index.js.map +1 -1
  218. package/dist/api/qq/index.d.ts +2 -0
  219. package/dist/api/qq/index.js +7 -0
  220. package/dist/api/qq/index.js.map +1 -0
  221. package/dist/api/share/index.d.ts +10 -0
  222. package/dist/api/share/index.js +21 -11
  223. package/dist/api/share/index.js.map +1 -1
  224. package/dist/api/storage/background-fetch.js +4 -4
  225. package/dist/api/storage/background-fetch.js.map +1 -1
  226. package/dist/api/storage/cache-manager.d.ts +2 -0
  227. package/dist/api/storage/cache-manager.js +7 -0
  228. package/dist/api/storage/cache-manager.js.map +1 -0
  229. package/dist/api/storage/index.d.ts +7 -2
  230. package/dist/api/storage/index.js +8 -3
  231. package/dist/api/storage/index.js.map +1 -1
  232. package/dist/api/swan/index.js +21 -21
  233. package/dist/api/swan/index.js.map +1 -1
  234. package/dist/api/taro.d.ts +7 -2
  235. package/dist/api/taro.js +13 -4
  236. package/dist/api/taro.js.map +1 -1
  237. package/dist/api/ui/background.js +2 -2
  238. package/dist/api/ui/background.js.map +1 -1
  239. package/dist/api/ui/index.d.ts +12 -12
  240. package/dist/api/ui/index.js +1 -1
  241. package/dist/api/ui/interaction/index.d.ts +1 -1
  242. package/dist/api/ui/interaction/index.js +4 -4
  243. package/dist/api/ui/interaction/index.js.map +1 -1
  244. package/dist/api/ui/interaction/modal.js +6 -0
  245. package/dist/api/ui/interaction/modal.js.map +1 -1
  246. package/dist/api/ui/interaction/toast.js +4 -0
  247. package/dist/api/ui/interaction/toast.js.map +1 -1
  248. package/dist/api/ui/menu.js +1 -1
  249. package/dist/api/ui/menu.js.map +1 -1
  250. package/dist/api/ui/navigation-bar/index.js +3 -3
  251. package/dist/api/ui/navigation-bar/index.js.map +1 -1
  252. package/dist/api/ui/scroll/index.js +4 -3
  253. package/dist/api/ui/scroll/index.js.map +1 -1
  254. package/dist/api/ui/sticky.js +1 -1
  255. package/dist/api/ui/sticky.js.map +1 -1
  256. package/dist/api/ui/window.d.ts +2 -1
  257. package/dist/api/ui/window.js +3 -2
  258. package/dist/api/ui/window.js.map +1 -1
  259. package/dist/api/worker/index.js +1 -1
  260. package/dist/api/worker/index.js.map +1 -1
  261. package/dist/api/wxml/IntersectionObserver.d.ts +1 -1
  262. package/dist/api/wxml/IntersectionObserver.js +15 -13
  263. package/dist/api/wxml/IntersectionObserver.js.map +1 -1
  264. package/dist/api/wxml/MediaQueryObserver.d.ts +1 -1
  265. package/dist/api/wxml/MediaQueryObserver.js +1 -2
  266. package/dist/api/wxml/MediaQueryObserver.js.map +1 -1
  267. package/dist/api/wxml/nodesRef.d.ts +1 -1
  268. package/dist/api/wxml/selectorQuery.d.ts +1 -1
  269. package/dist/api/wxml/selectorQuery.js +9 -6
  270. package/dist/api/wxml/selectorQuery.js.map +1 -1
  271. package/dist/index.cjs.d.ts +95 -51
  272. package/dist/index.cjs.js +3226 -2710
  273. package/dist/index.cjs.js.map +1 -1
  274. package/dist/index.d.ts +3 -3
  275. package/dist/index.esm.d.ts +95 -51
  276. package/dist/index.esm.js +2401 -1914
  277. package/dist/index.esm.js.map +1 -1
  278. package/dist/index.js +29 -15
  279. package/dist/index.js.map +1 -1
  280. package/dist/utils/handler.d.ts +13 -26
  281. package/dist/utils/handler.js +4 -16
  282. package/dist/utils/handler.js.map +1 -1
  283. package/dist/utils/helper.d.ts +2 -0
  284. package/dist/utils/helper.js +11 -0
  285. package/dist/utils/helper.js.map +1 -0
  286. package/dist/utils/index.d.ts +7 -6
  287. package/dist/utils/index.js +4 -12
  288. package/dist/utils/index.js.map +1 -1
  289. package/package.json +20 -14
  290. package/dist/utils/lodash.d.ts +0 -3
  291. package/dist/utils/lodash.js +0 -32
  292. package/dist/utils/lodash.js.map +0 -1
@@ -0,0 +1,208 @@
1
+ import { __awaiter } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
2
+ import { getMobileDetect } from '@tarojs/router/dist/utils/navigate';
3
+ import '../../ui/index.js';
4
+ import { shouldBeObject, getParameterError } from '../../../utils/index.js';
5
+ import { MethodHandler } from '../../../utils/handler.js';
6
+ import { showActionSheet } from '../../ui/interaction/index.js';
7
+
8
+ /**
9
+ * 拍摄或从手机相册中选择图片或视频。
10
+ */
11
+ const chooseMedia = function (options, methodName = 'chooseMedia') {
12
+ var _a;
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ // options must be an Object
15
+ const isObject = shouldBeObject(options);
16
+ if (!isObject.flag) {
17
+ const res = { errMsg: `${methodName}:fail ${isObject.msg}` };
18
+ console.error(res.errMsg);
19
+ return Promise.reject(res);
20
+ }
21
+ const { count = 9, mediaId = 'taroChooseMedia', mediaType = ['image', 'video'], sourceType = ['album', 'camera'],
22
+ // sizeType = ['original', 'compressed'], // TODO 考虑通过 ffmpeg 支持压缩
23
+ // maxDuration = 10, // TODO 考虑通过 ffmpeg 剪裁视频
24
+ camera = 'back', success, fail, complete, } = options;
25
+ const handle = new MethodHandler({ name: methodName, success, fail, complete });
26
+ const withImage = mediaType.length < 1 || mediaType.indexOf('image') > -1;
27
+ const withVideo = mediaType.length < 1 || mediaType.indexOf('video') > -1;
28
+ const res = {
29
+ tempFiles: [],
30
+ type: withImage && withVideo ? 'mix' : withImage ? 'image' : 'video',
31
+ };
32
+ if (count && typeof count !== 'number') {
33
+ res.errMsg = getParameterError({
34
+ para: 'count',
35
+ correct: 'Number',
36
+ wrong: count
37
+ });
38
+ return handle.fail(res);
39
+ }
40
+ let el = document.getElementById(mediaId);
41
+ if (!el) {
42
+ el = document.createElement('input');
43
+ el.setAttribute('type', 'file');
44
+ el.setAttribute('id', mediaId);
45
+ el.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
46
+ }
47
+ if (count > 1) {
48
+ el.setAttribute('multiple', 'multiple');
49
+ }
50
+ else {
51
+ el.removeAttribute('multiple');
52
+ }
53
+ // Note: Input 仅在移动端支持 capture 属性,可以使用 getUserMedia 替代(暂不考虑)
54
+ const md = getMobileDetect();
55
+ if (md.mobile()) {
56
+ if (sourceType.length > 1 || sourceType.length < 1) {
57
+ try {
58
+ const { tapIndex } = yield showActionSheet({
59
+ itemList: ['拍摄', '从相册选择'],
60
+ }, methodName);
61
+ sourceType.splice(0, 1, tapIndex === 0 ? 'camera' : 'album');
62
+ }
63
+ catch (e) {
64
+ return handle.fail({
65
+ errMsg: (_a = e.errMsg) === null || _a === void 0 ? void 0 : _a.replace('^.*:fail ', '')
66
+ });
67
+ }
68
+ }
69
+ }
70
+ if (sourceType.includes('camera')) {
71
+ el.setAttribute('capture', camera === 'front' ? 'user' : 'environment');
72
+ }
73
+ else {
74
+ el.removeAttribute('capture');
75
+ }
76
+ if (res.type === 'image') {
77
+ el.setAttribute('accept', 'image/*');
78
+ }
79
+ else if (res.type === 'video') {
80
+ el.setAttribute('accept', 'video/*');
81
+ }
82
+ else {
83
+ el.setAttribute('accept', 'image/*, video/*');
84
+ }
85
+ return new Promise((resolve, reject) => {
86
+ if (!el)
87
+ return;
88
+ document.body.appendChild(el);
89
+ el.onchange = function (e) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const target = e.target;
92
+ if (target) {
93
+ const files = target.files || [];
94
+ const arr = [...files];
95
+ yield Promise.all(arr.map((item) => __awaiter(this, void 0, void 0, function* () {
96
+ var _a;
97
+ try {
98
+ (_a = res.tempFiles) === null || _a === void 0 ? void 0 : _a.push(yield loadMedia(item));
99
+ }
100
+ catch (error) {
101
+ console.error(error);
102
+ }
103
+ })));
104
+ }
105
+ handle.success(res, { resolve, reject });
106
+ target.value = '';
107
+ });
108
+ };
109
+ el.onabort = () => handle.fail({ errMsg: 'abort' }, { resolve, reject });
110
+ el.oncancel = () => handle.fail({ errMsg: 'cancel' }, { resolve, reject });
111
+ el.onerror = e => handle.fail({ errMsg: e.toString() }, { resolve, reject });
112
+ el.click();
113
+ }).finally(() => {
114
+ if (!el)
115
+ return;
116
+ document.body.removeChild(el);
117
+ });
118
+ function loadMedia(file) {
119
+ const dataUrl = URL.createObjectURL(file);
120
+ const res = {
121
+ tempFilePath: dataUrl,
122
+ size: file.size,
123
+ duration: 0,
124
+ height: 0,
125
+ width: 0,
126
+ thumbTempFilePath: '',
127
+ fileType: file.type,
128
+ originalFileObj: file
129
+ };
130
+ if (/^video\//.test(res.fileType)) {
131
+ // Video
132
+ const video = document.createElement('video');
133
+ const reader = new FileReader();
134
+ video.crossOrigin = 'Anonymous';
135
+ video.preload = 'metadata';
136
+ video.src = res.tempFilePath;
137
+ return new Promise((resolve, reject) => {
138
+ // 对齐旧版本实现
139
+ reader.onload = (event) => {
140
+ var _a;
141
+ res.tempFilePath = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
142
+ };
143
+ reader.onerror = e => reject(e);
144
+ reader.readAsDataURL(res.originalFileObj);
145
+ video.onloadedmetadata = () => {
146
+ res.duration = video.duration;
147
+ res.height = video.videoHeight;
148
+ res.width = video.videoWidth;
149
+ };
150
+ video.oncanplay = () => {
151
+ res.thumbTempFilePath = getThumbTempFilePath(video, res.height, res.width, 0.8);
152
+ resolve(res);
153
+ };
154
+ video.onerror = e => reject(e);
155
+ });
156
+ }
157
+ else {
158
+ // Image
159
+ const img = new Image();
160
+ /** 允许图片和 canvas 跨源使用
161
+ * https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image
162
+ */
163
+ img.crossOrigin = 'Anonymous';
164
+ img.src = res.tempFilePath;
165
+ return new Promise((resolve, reject) => {
166
+ if (img.complete) {
167
+ res.height = img.height;
168
+ res.width = img.width;
169
+ res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8);
170
+ resolve(res);
171
+ }
172
+ else {
173
+ img.onload = () => {
174
+ res.height = img.height;
175
+ res.width = img.width;
176
+ res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8);
177
+ resolve(res);
178
+ };
179
+ img.onerror = e => reject(e);
180
+ }
181
+ });
182
+ }
183
+ }
184
+ function getThumbTempFilePath(el, height = 0, width = height, quality = 0.8) {
185
+ const max = 256;
186
+ const canvas = document.createElement('canvas');
187
+ if (height > max || width > max) {
188
+ const radio = height / width;
189
+ if (radio > 1) {
190
+ height = max;
191
+ width = height / radio;
192
+ }
193
+ else {
194
+ width = max;
195
+ height = width * radio;
196
+ }
197
+ }
198
+ canvas.height = height;
199
+ canvas.width = width;
200
+ const ctx = canvas.getContext('2d');
201
+ ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(el, 0, 0, canvas.width, canvas.height);
202
+ return canvas.toDataURL('image/jpeg', quality);
203
+ }
204
+ });
205
+ };
206
+
207
+ export { chooseMedia };
208
+ //# sourceMappingURL=chooseMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseMedia.js","sources":["../../../../src/api/media/video/chooseMedia.ts"],"sourcesContent":["import Taro from '@tarojs/api'\nimport { getMobileDetect } from '@tarojs/router/dist/utils/navigate'\n\nimport { showActionSheet } from '../../../api/ui'\nimport { getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\n/**\n * 拍摄或从手机相册中选择图片或视频。\n */\nexport const chooseMedia = async function (\n options: Taro.chooseMedia.Option,\n methodName = 'chooseMedia',\n): Promise<Taro.chooseMedia.SuccessCallbackResult> {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `${methodName}:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n count = 9,\n mediaId = 'taroChooseMedia',\n mediaType = ['image', 'video'],\n sourceType = ['album', 'camera'],\n // sizeType = ['original', 'compressed'], // TODO 考虑通过 ffmpeg 支持压缩\n // maxDuration = 10, // TODO 考虑通过 ffmpeg 剪裁视频\n camera = 'back',\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: methodName, success, fail, complete })\n const withImage = mediaType.length < 1 || mediaType.indexOf('image') > -1\n const withVideo = mediaType.length < 1 || mediaType.indexOf('video') > -1\n const res: Partial<Taro.chooseMedia.SuccessCallbackResult> = {\n tempFiles: [],\n type: withImage && withVideo ? 'mix' : withImage ? 'image' : 'video',\n }\n\n if (count && typeof count !== 'number') {\n res.errMsg = getParameterError({\n para: 'count',\n correct: 'Number',\n wrong: count\n })\n return handle.fail(res)\n }\n\n let el = document.getElementById(mediaId)\n if (!el) {\n el = document.createElement('input')\n el.setAttribute('type', 'file')\n el.setAttribute('id', mediaId)\n el.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;')\n }\n\n if (count > 1) {\n el.setAttribute('multiple', 'multiple')\n } else {\n el.removeAttribute('multiple')\n }\n\n // Note: Input 仅在移动端支持 capture 属性,可以使用 getUserMedia 替代(暂不考虑)\n const md = getMobileDetect()\n if (md.mobile()) {\n if (sourceType.length > 1 || sourceType.length < 1) {\n try {\n const { tapIndex } = await showActionSheet({\n itemList: ['拍摄', '从相册选择'],\n }, methodName)\n sourceType.splice(0, 1, tapIndex === 0 ? 'camera' : 'album')\n } catch (e) {\n return handle.fail({\n errMsg: e.errMsg?.replace('^.*:fail ', '')\n })\n }\n }\n }\n if (sourceType.includes('camera')) {\n el.setAttribute('capture', camera === 'front' ? 'user' : 'environment')\n } else {\n el.removeAttribute('capture')\n }\n\n if (res.type === 'image') {\n el.setAttribute('accept', 'image/*')\n } else if (res.type === 'video') {\n el.setAttribute('accept', 'video/*')\n } else {\n el.setAttribute('accept', 'image/*, video/*')\n }\n return new Promise<Taro.chooseMedia.SuccessCallbackResult>((resolve, reject) => {\n if (!el) return\n document.body.appendChild(el)\n el.onchange = async function (e) {\n const target = e.target as HTMLInputElement\n if (target) {\n const files = target.files || []\n const arr = [...files]\n await Promise.all(\n arr.map(async item => {\n try {\n res.tempFiles?.push(await loadMedia(item))\n } catch (error) {\n console.error(error)\n }\n })\n )\n }\n handle.success(res, { resolve, reject })\n target.value = ''\n }\n el.onabort = () => handle.fail({ errMsg: 'abort' }, { resolve, reject })\n el.oncancel = () => handle.fail({ errMsg: 'cancel' }, { resolve, reject })\n el.onerror = e => handle.fail({ errMsg: e.toString() }, { resolve, reject })\n el.click()\n }).finally(() => {\n if (!el) return\n document.body.removeChild(el)\n })\n\n function loadMedia (file: File): Promise<Taro.chooseMedia.ChooseMedia> {\n const dataUrl = URL.createObjectURL(file)\n const res = {\n tempFilePath: dataUrl,\n size: file.size,\n duration: 0,\n height: 0,\n width: 0,\n thumbTempFilePath: '',\n fileType: file.type,\n originalFileObj: file\n }\n\n if (/^video\\//.test(res.fileType)) {\n // Video\n const video = document.createElement('video')\n const reader = new FileReader()\n video.crossOrigin = 'Anonymous'\n video.preload = 'metadata'\n video.src = res.tempFilePath\n\n return new Promise((resolve, reject) => {\n // 对齐旧版本实现\n reader.onload = (event) => {\n res.tempFilePath = event.target?.result as string\n }\n reader.onerror = e => reject(e)\n reader.readAsDataURL(res.originalFileObj)\n\n video.onloadedmetadata = () => {\n res.duration = video.duration\n res.height = video.videoHeight\n res.width = video.videoWidth\n }\n video.oncanplay = () => {\n res.thumbTempFilePath = getThumbTempFilePath(video, res.height, res.width, 0.8)\n resolve(res)\n }\n video.onerror = e => reject(e)\n })\n } else {\n // Image\n const img = new Image()\n /** 允许图片和 canvas 跨源使用\n * https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image\n */\n img.crossOrigin = 'Anonymous'\n img.src = res.tempFilePath\n\n return new Promise((resolve, reject) => {\n if (img.complete) {\n res.height = img.height\n res.width = img.width\n res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8)\n resolve(res)\n } else {\n img.onload = () => {\n res.height = img.height\n res.width = img.width\n res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8)\n resolve(res)\n }\n img.onerror = e => reject(e)\n }\n })\n }\n }\n\n function getThumbTempFilePath (el: CanvasImageSource, height = 0, width = height, quality = 0.8) {\n const max = 256\n const canvas = document.createElement('canvas')\n if (height > max || width > max) {\n const radio = height / width\n if (radio > 1) {\n height = max\n width = height / radio\n } else {\n width = max\n height = width * radio\n }\n }\n canvas.height = height\n canvas.width = width\n\n const ctx = canvas.getContext('2d')\n ctx?.drawImage(el, 0, 0, canvas.width, canvas.height)\n return canvas.toDataURL('image/jpeg', quality)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import Taro from '@tarojs/api';
2
+ /**
3
+ * 拍摄视频或从手机相册中选视频。
4
+ * @deprecated 请使用 chooseMedia 接口
5
+ */
6
+ declare const chooseVideo: typeof Taro.chooseVideo;
7
+ export { chooseVideo };
@@ -0,0 +1,44 @@
1
+ import { shouldBeObject } from '../../../utils/index.js';
2
+ import { chooseMedia } from './chooseMedia.js';
3
+
4
+ /**
5
+ * 拍摄视频或从手机相册中选视频。
6
+ * @deprecated 请使用 chooseMedia 接口
7
+ */
8
+ const chooseVideo = (options) => {
9
+ // options must be an Object
10
+ const isObject = shouldBeObject(options);
11
+ if (!isObject.flag) {
12
+ const res = { errMsg: `chooseVideo:fail ${isObject.msg}` };
13
+ console.error(res.errMsg);
14
+ return Promise.reject(res);
15
+ }
16
+ const { sourceType = ['album', 'camera'],
17
+ // TODO 考虑通过 ffmpeg 支持压缩
18
+ // compressed = true,
19
+ maxDuration = 60, camera = 'back', success, fail, complete, } = options;
20
+ function parseRes(res) {
21
+ const { tempFiles = [], errMsg } = res;
22
+ const [video] = tempFiles;
23
+ return Object.assign(Object.assign({}, video), { errMsg });
24
+ }
25
+ return chooseMedia({
26
+ mediaId: 'taroChooseVideo',
27
+ sourceType,
28
+ mediaType: ['video'],
29
+ maxDuration,
30
+ camera,
31
+ success: (res) => {
32
+ const param = parseRes(res);
33
+ success === null || success === void 0 ? void 0 : success(param);
34
+ complete === null || complete === void 0 ? void 0 : complete(param);
35
+ },
36
+ fail: (err) => {
37
+ fail === null || fail === void 0 ? void 0 : fail(err);
38
+ complete === null || complete === void 0 ? void 0 : complete(err);
39
+ },
40
+ }, 'chooseVideo').then(parseRes);
41
+ };
42
+
43
+ export { chooseVideo };
44
+ //# sourceMappingURL=chooseVideo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseVideo.js","sources":["../../../../src/api/media/video/chooseVideo.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { shouldBeObject } from '../../../utils'\nimport { chooseMedia } from './chooseMedia'\n\n/**\n * 拍摄视频或从手机相册中选视频。\n * @deprecated 请使用 chooseMedia 接口\n */\nexport const chooseVideo: typeof Taro.chooseVideo = (options) => {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `chooseVideo:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n sourceType = ['album', 'camera'],\n // TODO 考虑通过 ffmpeg 支持压缩\n // compressed = true,\n maxDuration = 60,\n camera = 'back',\n success,\n fail,\n complete,\n } = options\n\n function parseRes (res: Taro.chooseMedia.SuccessCallbackResult): Taro.chooseVideo.SuccessCallbackResult {\n const { tempFiles = [], errMsg } = res\n const [video] = tempFiles\n return { ...video, errMsg }\n }\n\n return chooseMedia({\n mediaId: 'taroChooseVideo',\n sourceType,\n mediaType: ['video'],\n maxDuration,\n camera,\n success: (res) => {\n const param = parseRes(res)\n success?.(param)\n complete?.(param)\n },\n fail: (err) => {\n fail?.(err)\n complete?.(err)\n },\n }, 'chooseVideo').then(parseRes)\n}\n"],"names":[],"mappings":";;;AAKA;;;AAGG;AACU,MAAA,WAAW,GAA4B,CAAC,OAAO,KAAI;;AAE9D,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAClB,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAoB,iBAAA,EAAA,QAAQ,CAAC,GAAG,CAAE,CAAA,EAAE,CAAA;AAC1D,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3B,KAAA;AAED,IAAA,MAAM,EACJ,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;;;AAGhC,IAAA,WAAW,GAAG,EAAE,EAChB,MAAM,GAAG,MAAM,EACf,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,GAAG,OAAO,CAAA;IAEX,SAAS,QAAQ,CAAE,GAA2C,EAAA;QAC5D,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;AACtC,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;QACzB,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,MAAM,EAAE,CAAA,CAAA;KAC5B;AAED,IAAA,OAAO,WAAW,CAAC;AACjB,QAAA,OAAO,EAAE,iBAAiB;QAC1B,UAAU;QACV,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,WAAW;QACX,MAAM;AACN,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC3B,YAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,KAAK,CAAC,CAAA;AAChB,YAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAG,KAAK,CAAC,CAAA;SAClB;AACD,QAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,YAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAG,GAAG,CAAC,CAAA;AACX,YAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAG,GAAG,CAAC,CAAA;SAChB;AACF,KAAA,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClC;;;;"}
@@ -0,0 +1,3 @@
1
+ import Taro from '@tarojs/api';
2
+ declare const getVideoInfo: typeof Taro.getVideoInfo;
3
+ export { getVideoInfo };
@@ -0,0 +1,63 @@
1
+ import { __awaiter } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
2
+ import 'whatwg-fetch';
3
+ import { shouldBeObject, getParameterError } from '../../../utils/index.js';
4
+ import { MethodHandler } from '../../../utils/handler.js';
5
+
6
+ const getVideoInfo = function (options) {
7
+ return __awaiter(this, void 0, void 0, function* () {
8
+ // options must be an Object
9
+ const isObject = shouldBeObject(options);
10
+ if (!isObject.flag) {
11
+ const res = { errMsg: `getVideoInfo:fail ${isObject.msg}` };
12
+ console.error(res.errMsg);
13
+ return Promise.reject(res);
14
+ }
15
+ const res = {
16
+ orientation: 'up',
17
+ type: '',
18
+ duration: 0,
19
+ size: 0,
20
+ height: 0,
21
+ width: 0,
22
+ fps: 30,
23
+ bitrate: 0,
24
+ };
25
+ const { src, success, fail, complete, } = options;
26
+ const handle = new MethodHandler({ name: 'getVideoInfo', success, fail, complete });
27
+ if (typeof src !== 'string') {
28
+ res.errMsg = getParameterError({
29
+ para: 'src',
30
+ correct: 'String',
31
+ wrong: src
32
+ });
33
+ return handle.fail(res);
34
+ }
35
+ const video = document.createElement('video');
36
+ video.crossOrigin = 'Anonymous';
37
+ video.preload = 'metadata';
38
+ video.src = src;
39
+ return new Promise((resolve, reject) => {
40
+ video.onloadedmetadata = () => {
41
+ res.duration = video.duration;
42
+ res.height = video.videoHeight;
43
+ res.width = video.videoWidth;
44
+ fetch(src)
45
+ .then((e) => __awaiter(this, void 0, void 0, function* () {
46
+ const blob = yield e.blob();
47
+ res.type = blob.type;
48
+ res.size = blob.size;
49
+ res.bitrate = blob.size / video.duration;
50
+ handle.success(res, { resolve, reject });
51
+ }))
52
+ .catch(e => {
53
+ handle.fail({
54
+ errMsg: e.toString()
55
+ }, { resolve, reject });
56
+ });
57
+ };
58
+ });
59
+ });
60
+ };
61
+
62
+ export { getVideoInfo };
63
+ //# sourceMappingURL=getVideoInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVideoInfo.js","sources":["../../../../src/api/media/video/getVideoInfo.ts"],"sourcesContent":["import 'whatwg-fetch'\n\nimport Taro from '@tarojs/api'\n\nimport { getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\nexport const getVideoInfo: typeof Taro.getVideoInfo = async function (options) {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `getVideoInfo:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n const res: Partial<Taro.getVideoInfo.SuccessCallbackResult> = {\n orientation: 'up',\n type: '',\n duration: 0,\n size: 0,\n height: 0,\n width: 0,\n fps: 30,\n bitrate: 0,\n }\n const {\n src,\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: 'getVideoInfo', success, fail, complete })\n\n if (typeof src !== 'string') {\n res.errMsg = getParameterError({\n para: 'src',\n correct: 'String',\n wrong: src\n })\n return handle.fail(res)\n }\n\n const video = document.createElement('video')\n video.crossOrigin = 'Anonymous'\n video.preload = 'metadata'\n video.src = src\n\n return new Promise((resolve, reject) => {\n video.onloadedmetadata = () => {\n res.duration = video.duration\n res.height = video.videoHeight\n res.width = video.videoWidth\n\n fetch(src)\n .then(async e => {\n const blob = await e.blob()\n res.type = blob.type\n res.size = blob.size\n res.bitrate = blob.size / video.duration\n\n handle.success(res, { resolve, reject })\n })\n .catch(e => {\n handle.fail({\n errMsg: e.toString()\n }, { resolve, reject })\n })\n }\n })\n}\n"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
1
  import Taro from '@tarojs/api';
2
- declare const saveVideoToPhotosAlbum: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
3
2
  declare const openVideoEditor: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
4
- declare const getVideoInfo: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
5
3
  /**
6
4
  * 创建 video 上下文 VideoContext 对象。
7
5
  */
8
6
  declare const createVideoContext: typeof Taro.createVideoContext;
9
7
  declare const compressVideo: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
10
- /**
11
- * 拍摄视频或从手机相册中选视频。
12
- */
13
- declare const chooseVideo: typeof Taro.chooseVideo;
14
- declare const chooseMedia: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
15
- export { saveVideoToPhotosAlbum, openVideoEditor, getVideoInfo, createVideoContext, compressVideo, chooseVideo, chooseMedia };
8
+ export * from "./saveVideoToPhotosAlbum.js";
9
+ export { openVideoEditor, createVideoContext, compressVideo };
10
+ export * from "./getVideoInfo.js";
11
+ export * from "./chooseMedia.js";
12
+ export * from "./chooseVideo.js";
@@ -1,10 +1,10 @@
1
- import { temporarilyNotSupport, findDOM, shouldBeObject } from '../../../utils/index.js';
2
- import { MethodHandler } from '../../../utils/handler.js';
1
+ import { temporarilyNotSupport, findDOM } from '../../../utils/index.js';
2
+ export { saveVideoToPhotosAlbum } from './saveVideoToPhotosAlbum.js';
3
+ export { getVideoInfo } from './getVideoInfo.js';
4
+ export { chooseMedia } from './chooseMedia.js';
5
+ export { chooseVideo } from './chooseVideo.js';
3
6
 
4
- // 视频
5
- const saveVideoToPhotosAlbum = temporarilyNotSupport('saveVideoToPhotosAlbum');
6
- const openVideoEditor = temporarilyNotSupport('openVideoEditor');
7
- const getVideoInfo = temporarilyNotSupport('getVideoInfo');
7
+ const openVideoEditor = /* @__PURE__ */ temporarilyNotSupport('openVideoEditor');
8
8
  /**
9
9
  * 创建 video 上下文 VideoContext 对象。
10
10
  */
@@ -13,66 +13,7 @@ const createVideoContext = (id, inst) => {
13
13
  // TODO HTMLVideoElement to VideoContext
14
14
  return el === null || el === void 0 ? void 0 : el.querySelector(`taro-video-core[id=${id}]`);
15
15
  };
16
- const compressVideo = temporarilyNotSupport('compressVideo');
17
- /**
18
- * 拍摄视频或从手机相册中选视频。
19
- */
20
- const chooseVideo = (options) => {
21
- // options must be an Object
22
- const isObject = shouldBeObject(options);
23
- if (!isObject.flag) {
24
- const res = { errMsg: `chooseVideo:fail ${isObject.msg}` };
25
- console.error(res.errMsg);
26
- return Promise.reject(res);
27
- }
28
- const { success, fail, complete } = options;
29
- const handle = new MethodHandler({ name: 'chooseVideo', success, fail, complete });
30
- const res = {
31
- tempFilePath: '',
32
- duration: 0,
33
- size: 0,
34
- height: 0,
35
- width: 0
36
- };
37
- const inputEl = document.createElement('input');
38
- inputEl.setAttribute('type', 'file');
39
- inputEl.setAttribute('multiple', 'multiple');
40
- inputEl.setAttribute('accept', 'video/*');
41
- inputEl.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
42
- document.body.appendChild(inputEl);
43
- return new Promise((resolve, reject) => {
44
- const TaroMouseEvents = document.createEvent('MouseEvents');
45
- TaroMouseEvents.initEvent('click', true, true);
46
- inputEl.dispatchEvent(TaroMouseEvents);
47
- inputEl.onchange = function (e) {
48
- var _a;
49
- const target = e.target;
50
- const file = (_a = target.files) === null || _a === void 0 ? void 0 : _a[0];
51
- const reader = new FileReader();
52
- reader.onload = function (event) {
53
- var _a;
54
- const videoEl = document.createElement('video');
55
- const url = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
56
- videoEl.preload = 'metadata';
57
- videoEl.src = url;
58
- videoEl.onloadedmetadata = () => {
59
- res.tempFilePath = url;
60
- res.duration = videoEl.duration;
61
- res.size = event.total;
62
- res.height = videoEl.videoHeight;
63
- res.width = videoEl.videoHeight;
64
- return handle.success(res, { resolve, reject });
65
- };
66
- };
67
- if (file) {
68
- reader.readAsDataURL(file);
69
- }
70
- };
71
- }).finally(() => {
72
- document.body.removeChild(inputEl);
73
- });
74
- };
75
- const chooseMedia = temporarilyNotSupport('chooseMedia');
16
+ const compressVideo = /* @__PURE__ */ temporarilyNotSupport('compressVideo');
76
17
 
77
- export { chooseMedia, chooseVideo, compressVideo, createVideoContext, getVideoInfo, openVideoEditor, saveVideoToPhotosAlbum };
18
+ export { compressVideo, createVideoContext, openVideoEditor };
78
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/api/media/video/index.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { findDOM, shouldBeObject, temporarilyNotSupport } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\n// 视频\nexport const saveVideoToPhotosAlbum = temporarilyNotSupport('saveVideoToPhotosAlbum')\nexport const openVideoEditor = temporarilyNotSupport('openVideoEditor')\nexport const getVideoInfo = temporarilyNotSupport('getVideoInfo')\n\n/**\n * 创建 video 上下文 VideoContext 对象。\n */\nexport const createVideoContext: typeof Taro.createVideoContext = (id, inst) => {\n const el = findDOM(inst) as HTMLVideoElement\n // TODO HTMLVideoElement to VideoContext\n return el?.querySelector(`taro-video-core[id=${id}]`) as unknown as Taro.VideoContext\n}\n\nexport const compressVideo = temporarilyNotSupport('compressVideo')\n\n/**\n * 拍摄视频或从手机相册中选视频。\n */\nexport const chooseVideo: typeof Taro.chooseVideo = (options) => {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `chooseVideo:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const { success, fail, complete } = options\n const handle = new MethodHandler<Taro.chooseVideo.SuccessCallbackResult>({ name: 'chooseVideo', success, fail, complete })\n const res: Partial<Taro.chooseVideo.SuccessCallbackResult> = {\n tempFilePath: '',\n duration: 0,\n size: 0,\n height: 0,\n width: 0\n }\n\n const inputEl = document.createElement('input')\n inputEl.setAttribute('type', 'file')\n inputEl.setAttribute('multiple', 'multiple')\n inputEl.setAttribute('accept', 'video/*')\n inputEl.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;')\n document.body.appendChild(inputEl)\n\n return new Promise<Taro.chooseVideo.SuccessCallbackResult>((resolve, reject) => {\n const TaroMouseEvents = document.createEvent('MouseEvents')\n TaroMouseEvents.initEvent('click', true, true)\n inputEl.dispatchEvent(TaroMouseEvents)\n inputEl.onchange = function (e) {\n const target = e.target as HTMLInputElement\n const file = target.files?.[0]\n const reader = new FileReader()\n reader.onload = function (event: ProgressEvent<FileReader>) {\n const videoEl = document.createElement('video')\n const url = event.target?.result as string\n videoEl.preload = 'metadata'\n videoEl.src = url\n videoEl.onloadedmetadata = () => {\n res.tempFilePath = url\n res.duration = videoEl.duration\n res.size = event.total\n res.height = videoEl.videoHeight\n res.width = videoEl.videoHeight\n return handle.success(res, { resolve, reject })\n }\n }\n if (file) {\n reader.readAsDataURL(file)\n }\n }\n }).finally(() => {\n document.body.removeChild(inputEl)\n })\n}\n\nexport const chooseMedia = temporarilyNotSupport('chooseMedia')\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/api/media/video/index.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { findDOM, temporarilyNotSupport } from '../../../utils'\n\n// 视频\nexport * from './saveVideoToPhotosAlbum'\n\nexport const openVideoEditor = /* @__PURE__ */ temporarilyNotSupport('openVideoEditor')\n\nexport * from './getVideoInfo'\n\n/**\n * 创建 video 上下文 VideoContext 对象。\n */\nexport const createVideoContext: typeof Taro.createVideoContext = (id, inst) => {\n const el = findDOM(inst) as HTMLVideoElement\n // TODO HTMLVideoElement to VideoContext\n return el?.querySelector(`taro-video-core[id=${id}]`) as unknown as Taro.VideoContext\n}\n\nexport const compressVideo = /* @__PURE__ */ temporarilyNotSupport('compressVideo')\n\nexport * from './chooseMedia'\nexport * from './chooseVideo'\n"],"names":[],"mappings":";;;;;;AAOa,MAAA,eAAe,mBAAmB,qBAAqB,CAAC,iBAAiB,EAAC;AAIvF;;AAEG;MACU,kBAAkB,GAAmC,CAAC,EAAE,EAAE,IAAI,KAAI;AAC7E,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAqB,CAAA;;AAE5C,IAAA,OAAO,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,aAAa,CAAC,CAAsB,mBAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CAAiC,CAAA;AACvF,EAAC;AAEY,MAAA,aAAa,mBAAmB,qBAAqB,CAAC,eAAe;;;;"}
@@ -0,0 +1,3 @@
1
+ import Taro from '@tarojs/api';
2
+ declare const saveVideoToPhotosAlbum: typeof Taro.saveVideoToPhotosAlbum;
3
+ export { saveVideoToPhotosAlbum };
@@ -0,0 +1,30 @@
1
+ import { shouldBeObject, getParameterError } from '../../../utils/index.js';
2
+ import { MethodHandler } from '../../../utils/handler.js';
3
+ import { createDownload } from '../../../utils/helper.js';
4
+
5
+ const saveVideoToPhotosAlbum = (options) => {
6
+ const methodName = 'saveVideoToPhotosAlbum';
7
+ // options must be an Object
8
+ const isObject = shouldBeObject(options);
9
+ if (!isObject.flag) {
10
+ const res = { errMsg: `${methodName}:fail ${isObject.msg}` };
11
+ console.error(res.errMsg);
12
+ return Promise.reject(res);
13
+ }
14
+ const { filePath, success, fail, complete, } = options;
15
+ const handle = new MethodHandler({ name: methodName, success, fail, complete });
16
+ if (typeof filePath !== 'string') {
17
+ return handle.fail({
18
+ errMsg: getParameterError({
19
+ para: 'filePath',
20
+ correct: 'String',
21
+ wrong: filePath
22
+ })
23
+ });
24
+ }
25
+ createDownload(filePath);
26
+ return handle.success();
27
+ };
28
+
29
+ export { saveVideoToPhotosAlbum };
30
+ //# sourceMappingURL=saveVideoToPhotosAlbum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveVideoToPhotosAlbum.js","sources":["../../../../src/api/media/video/saveVideoToPhotosAlbum.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { createDownload, getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\nexport const saveVideoToPhotosAlbum: typeof Taro.saveVideoToPhotosAlbum = (options) => {\n const methodName = 'saveVideoToPhotosAlbum'\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `${methodName}:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n filePath,\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: methodName, success, fail, complete })\n if (typeof filePath !== 'string') {\n return handle.fail({\n errMsg: getParameterError({\n para: 'filePath',\n correct: 'String',\n wrong: filePath\n })\n })\n }\n\n createDownload(filePath)\n return handle.success()\n}\n"],"names":[],"mappings":";;;;AAKa,MAAA,sBAAsB,GAAuC,CAAC,OAAO,KAAI;IACpF,MAAM,UAAU,GAAG,wBAAwB,CAAA;;AAE3C,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAClB,QAAA,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAA,EAAG,UAAU,CAAA,MAAA,EAAS,QAAQ,CAAC,GAAG,CAAA,CAAE,EAAE,CAAA;AAC5D,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3B,KAAA;IAED,MAAM,EACJ,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,GAAG,OAAO,CAAA;AACX,IAAA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC/E,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC;YACjB,MAAM,EAAE,iBAAiB,CAAC;AACxB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,KAAK,EAAE,QAAQ;aAChB,CAAC;AACH,SAAA,CAAC,CAAA;AACH,KAAA;IAED,cAAc,CAAC,QAAQ,CAAC,CAAA;AACxB,IAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AACzB;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { temporarilyNotSupport } from '../../utils/index.js';
2
2
 
3
3
  // 视频解码器
4
- const createVideoDecoder = temporarilyNotSupport('createVideoDecoder');
4
+ const createVideoDecoder = /* @__PURE__ */ temporarilyNotSupport('createVideoDecoder');
5
5
 
6
6
  export { createVideoDecoder };
7
7
  //# sourceMappingURL=video-decoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-decoder.js","sources":["../../../src/api/media/video-decoder.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 视频解码器\nexport const createVideoDecoder = temporarilyNotSupport('createVideoDecoder')\n"],"names":[],"mappings":";;AAEA;MACa,kBAAkB,GAAG,qBAAqB,CAAC,oBAAoB;;;;"}
1
+ {"version":3,"file":"video-decoder.js","sources":["../../../src/api/media/video-decoder.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 视频解码器\nexport const createVideoDecoder = /* @__PURE__ */ temporarilyNotSupport('createVideoDecoder')\n"],"names":[],"mappings":";;AAEA;AACa,MAAA,kBAAkB,mBAAmB,qBAAqB,CAAC,oBAAoB;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { temporarilyNotSupport } from '../../utils/index.js';
2
2
 
3
3
  // 音视频合成
4
- const createMediaContainer = temporarilyNotSupport('createMediaContainer');
4
+ const createMediaContainer = /* @__PURE__ */ temporarilyNotSupport('createMediaContainer');
5
5
 
6
6
  export { createMediaContainer };
7
7
  //# sourceMappingURL=video-processing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-processing.js","sources":["../../../src/api/media/video-processing.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 音视频合成\nexport const createMediaContainer = temporarilyNotSupport('createMediaContainer')\n"],"names":[],"mappings":";;AAEA;MACa,oBAAoB,GAAG,qBAAqB,CAAC,sBAAsB;;;;"}
1
+ {"version":3,"file":"video-processing.js","sources":["../../../src/api/media/video-processing.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 音视频合成\nexport const createMediaContainer = /* @__PURE__ */ temporarilyNotSupport('createMediaContainer')\n"],"names":[],"mappings":";;AAEA;AACa,MAAA,oBAAoB,mBAAmB,qBAAqB,CAAC,sBAAsB;;;;"}
@@ -6,10 +6,12 @@ declare const onVoIPChatStateChanged: (option?: {}, ...args: any[]) => Promise<P
6
6
  declare const onVoIPChatSpeakersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
7
7
  declare const onVoIPChatMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
8
8
  declare const onVoIPChatInterrupted: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
9
+ declare const offVoIPChatSpeakersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
9
10
  declare const offVoIPVideoMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
10
11
  declare const offVoIPChatStateChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
11
12
  declare const offVoIPChatMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
12
13
  declare const offVoIPChatInterrupted: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
13
14
  declare const joinVoIPChat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
15
+ declare const join1v1Chat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
14
16
  declare const exitVoIPChat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
15
- export { updateVoIPChatMuteConfig, subscribeVoIPVideoMembers, setEnable1v1Chat, onVoIPVideoMembersChanged, onVoIPChatStateChanged, onVoIPChatSpeakersChanged, onVoIPChatMembersChanged, onVoIPChatInterrupted, offVoIPVideoMembersChanged, offVoIPChatStateChanged, offVoIPChatMembersChanged, offVoIPChatInterrupted, joinVoIPChat, exitVoIPChat };
17
+ export { updateVoIPChatMuteConfig, subscribeVoIPVideoMembers, setEnable1v1Chat, onVoIPVideoMembersChanged, onVoIPChatStateChanged, onVoIPChatSpeakersChanged, onVoIPChatMembersChanged, onVoIPChatInterrupted, offVoIPChatSpeakersChanged, offVoIPVideoMembersChanged, offVoIPChatStateChanged, offVoIPChatMembersChanged, offVoIPChatInterrupted, joinVoIPChat, join1v1Chat, exitVoIPChat };