diginext-utils 2.0.32 → 2.0.33

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 (398) hide show
  1. package/README.md +162 -162
  2. package/dist/Checker.d.ts +8 -7
  3. package/dist/Checker.js +48 -28
  4. package/dist/Checker.mjs +29 -0
  5. package/dist/EventDispatcher.d.ts +12 -12
  6. package/dist/EventDispatcher.js +72 -47
  7. package/dist/EventDispatcher.mjs +54 -0
  8. package/dist/FileUpload.d.ts +11 -11
  9. package/dist/FileUpload.js +81 -61
  10. package/dist/FileUpload.mjs +62 -0
  11. package/dist/Slug.d.ts +9 -8
  12. package/dist/Slug.js +350 -330
  13. package/dist/Slug.mjs +331 -0
  14. package/dist/Timer-7b0c4e7c.d.ts +11 -0
  15. package/dist/Timer.d.ts +1 -4
  16. package/dist/Timer.js +31 -7
  17. package/dist/Timer.mjs +7 -0
  18. package/dist/Validation.d.ts +5 -4
  19. package/dist/Validation.js +54 -37
  20. package/dist/Validation.mjs +35 -0
  21. package/dist/array-dc599632.d.ts +158 -0
  22. package/dist/array.d.ts +1 -113
  23. package/dist/array.js +246 -266
  24. package/dist/array.mjs +49 -0
  25. package/dist/browser-8d042ffe.d.ts +22 -0
  26. package/dist/camera-1a859d72.d.ts +15 -0
  27. package/dist/chunk-5NTK5JAI.mjs +57 -0
  28. package/dist/chunk-5UEMANWE.mjs +91 -0
  29. package/dist/chunk-5ZOWNKSD.mjs +166 -0
  30. package/dist/chunk-6GNGTFNC.mjs +118 -0
  31. package/dist/chunk-7MK72U4O.mjs +19 -0
  32. package/dist/chunk-7XKT3AQX.mjs +17 -0
  33. package/dist/chunk-7ZCEZM7K.mjs +41 -0
  34. package/dist/chunk-AMBWJGSW.mjs +151 -0
  35. package/dist/chunk-C7S43KGB.mjs +15 -0
  36. package/dist/chunk-CJM7T7ON.mjs +24 -0
  37. package/dist/chunk-CKILLYAP.mjs +16 -0
  38. package/dist/chunk-DX7MUT3M.mjs +51 -0
  39. package/dist/chunk-EGUJQ5VF.mjs +32 -0
  40. package/dist/chunk-ETEIHDWU.mjs +25 -0
  41. package/dist/chunk-FJXSVGL7.mjs +22 -0
  42. package/dist/chunk-GJCAEOND.mjs +20 -0
  43. package/dist/chunk-GNJDIUYM.mjs +40 -0
  44. package/dist/chunk-IA7GINWD.mjs +39 -0
  45. package/dist/chunk-JEI7BOXY.mjs +21 -0
  46. package/dist/chunk-K4KENOE6.mjs +20 -0
  47. package/dist/chunk-KMERW6KS.mjs +34 -0
  48. package/dist/chunk-KPO3RH5G.mjs +27 -0
  49. package/dist/chunk-KWG5LYNK.mjs +100 -0
  50. package/dist/chunk-NUTQDHLQ.mjs +40 -0
  51. package/dist/chunk-O64XUDAH.mjs +35 -0
  52. package/dist/chunk-OYRPWQUA.mjs +257 -0
  53. package/dist/chunk-PNZ4KGXL.mjs +56 -0
  54. package/dist/chunk-QZYX26HT.mjs +24 -0
  55. package/dist/chunk-RDGP2CKM.mjs +195 -0
  56. package/dist/chunk-VFG5VU6S.mjs +12 -0
  57. package/dist/chunk-X3IMFCZG.mjs +23 -0
  58. package/dist/chunk-ZHNGZMRD.mjs +17 -0
  59. package/dist/color.d.ts +23 -22
  60. package/dist/color.js +96 -79
  61. package/dist/color.mjs +78 -0
  62. package/dist/console/enableConsole.d.ts +1 -2
  63. package/dist/console/enableConsole.js +38 -10
  64. package/dist/console/enableConsole.mjs +9 -0
  65. package/dist/console/index.d.ts +2 -11
  66. package/dist/console/index.js +58 -15
  67. package/dist/console/index.mjs +14 -0
  68. package/dist/console/log.d.ts +15 -14
  69. package/dist/console/log.js +74 -44
  70. package/dist/console/log.mjs +19 -0
  71. package/dist/createDir-220e0081.d.ts +13 -0
  72. package/dist/device/browser.d.ts +1 -5
  73. package/dist/device/browser.js +60 -32
  74. package/dist/device/browser.mjs +15 -0
  75. package/dist/device/camera.d.ts +1 -7
  76. package/dist/device/camera.js +184 -166
  77. package/dist/device/camera.mjs +8 -0
  78. package/dist/device/index.d.ts +1 -5
  79. package/dist/device/index.js +201 -216
  80. package/dist/device/index.mjs +15 -0
  81. package/dist/device/os.d.ts +11 -10
  82. package/dist/device/os.js +55 -28
  83. package/dist/device/os.mjs +33 -0
  84. package/dist/enableConsole-ddc24282.d.ts +11 -0
  85. package/dist/file/createDir.d.ts +1 -5
  86. package/dist/file/createDir.js +34 -13
  87. package/dist/file/createDir.mjs +7 -0
  88. package/dist/file/fileMove.d.ts +1 -4
  89. package/dist/file/fileMove.js +49 -29
  90. package/dist/file/fileMove.mjs +7 -0
  91. package/dist/file/findFilesByExt.d.ts +1 -13
  92. package/dist/file/findFilesByExt.js +64 -45
  93. package/dist/file/findFilesByExt.mjs +11 -0
  94. package/dist/file/index.d.ts +10 -8
  95. package/dist/file/index.js +104 -9
  96. package/dist/file/index.mjs +17 -0
  97. package/dist/fileMove-3a09e429.d.ts +13 -0
  98. package/dist/findFilesByExt-753e91d7.d.ts +24 -0
  99. package/dist/images/index.d.ts +2 -2
  100. package/dist/images/index.js +131 -8
  101. package/dist/images/index.mjs +15 -0
  102. package/dist/images/loadImage.d.ts +3 -0
  103. package/dist/images/loadImage.js +42 -0
  104. package/dist/images/loadImage.mjs +21 -0
  105. package/dist/images/resize.d.ts +3 -2
  106. package/dist/images/resize.js +60 -34
  107. package/dist/images/resize.mjs +9 -0
  108. package/dist/images/upload.d.ts +10 -9
  109. package/dist/images/upload.js +130 -25
  110. package/dist/images/upload.mjs +14 -0
  111. package/dist/index-1f738e52.d.ts +22 -0
  112. package/dist/index-22309f0c.d.ts +23 -0
  113. package/dist/index-6ae3c86b.d.ts +63 -0
  114. package/dist/index-c8fffc86.d.ts +90 -0
  115. package/dist/index-d652ed2c.d.ts +26 -0
  116. package/dist/index.d.ts +47 -36
  117. package/dist/index.js +1352 -62
  118. package/dist/index.mjs +87 -0
  119. package/dist/json.d.ts +8 -7
  120. package/dist/json.js +48 -28
  121. package/dist/json.mjs +29 -0
  122. package/dist/math/diffDate.d.ts +6 -5
  123. package/dist/math/diffDate.js +33 -11
  124. package/dist/math/diffDate.mjs +9 -0
  125. package/dist/math/index.d.ts +3 -30
  126. package/dist/math/index.js +159 -92
  127. package/dist/math/index.mjs +34 -0
  128. package/dist/math/positiveNumber.d.ts +3 -2
  129. package/dist/math/positiveNumber.js +53 -14
  130. package/dist/math/positiveNumber.mjs +10 -0
  131. package/dist/name/en.d.ts +5 -4
  132. package/dist/name/en.js +37 -19
  133. package/dist/name/en.mjs +9 -0
  134. package/dist/name/index.d.ts +3 -12
  135. package/dist/name/index.js +87 -12
  136. package/dist/name/index.mjs +20 -0
  137. package/dist/name/vi.d.ts +5 -4
  138. package/dist/name/vi.js +63 -25
  139. package/dist/name/vi.mjs +14 -0
  140. package/{esm/object.d.ts → dist/object-43aaaf92.d.ts} +79 -58
  141. package/dist/object.d.ts +1 -59
  142. package/dist/object.js +96 -71
  143. package/dist/object.mjs +21 -0
  144. package/dist/permission/index.d.ts +8 -7
  145. package/dist/permission/index.js +230 -6
  146. package/dist/permission/index.mjs +15 -0
  147. package/dist/permission/requestCamera.d.ts +1 -5
  148. package/dist/permission/requestCamera.js +49 -38
  149. package/dist/permission/requestCamera.mjs +9 -0
  150. package/dist/permission/requestDeviceOrientationControl.d.ts +1 -2
  151. package/dist/permission/requestDeviceOrientationControl.js +203 -36
  152. package/dist/permission/requestDeviceOrientationControl.mjs +10 -0
  153. package/dist/requestCamera-32b7dfc7.d.ts +14 -0
  154. package/dist/requestDeviceOrientationControl-b6458660.d.ts +11 -0
  155. package/dist/response/index.d.ts +49 -48
  156. package/dist/response/index.js +92 -47
  157. package/dist/response/index.mjs +16 -0
  158. package/dist/string/formatNumber.d.ts +7 -6
  159. package/dist/string/formatNumber.js +53 -12
  160. package/dist/string/formatNumber.mjs +10 -0
  161. package/dist/string/generatePassword.d.ts +10 -9
  162. package/dist/string/generatePassword.js +52 -21
  163. package/dist/string/generatePassword.mjs +10 -0
  164. package/dist/string/generateUUID.d.ts +3 -2
  165. package/dist/string/generateUUID.js +37 -34
  166. package/dist/string/generateUUID.mjs +9 -0
  167. package/dist/string/index.d.ts +6 -65
  168. package/dist/string/index.js +312 -157
  169. package/dist/string/index.mjs +31 -0
  170. package/dist/string/makeDaySlug.d.ts +31 -30
  171. package/dist/string/makeDaySlug.js +43 -19
  172. package/dist/string/makeDaySlug.mjs +9 -0
  173. package/dist/string/random.d.ts +14 -13
  174. package/dist/string/random.js +53 -22
  175. package/dist/string/random.mjs +19 -0
  176. package/dist/string/trimNull.d.ts +3 -2
  177. package/dist/string/trimNull.js +45 -17
  178. package/dist/string/trimNull.mjs +9 -0
  179. package/dist/string/url.d.ts +1 -36
  180. package/dist/string/url.js +115 -97
  181. package/dist/string/url.mjs +22 -0
  182. package/dist/url-60657387.d.ts +57 -0
  183. package/package.json +66 -66
  184. package/src/Checker.ts +29 -29
  185. package/src/EventDispatcher.ts +62 -62
  186. package/src/FileUpload.ts +66 -66
  187. package/src/Slug.ts +365 -365
  188. package/src/Timer.ts +7 -7
  189. package/src/Validation.ts +36 -36
  190. package/src/array.ts +285 -285
  191. package/src/color.ts +87 -87
  192. package/src/console/enableConsole.ts +8 -8
  193. package/src/console/index.ts +17 -17
  194. package/src/console/log.ts +39 -39
  195. package/src/device/browser.ts +29 -29
  196. package/src/device/camera.ts +207 -207
  197. package/src/device/index.ts +230 -230
  198. package/src/device/os.ts +29 -29
  199. package/src/file/createDir.ts +14 -14
  200. package/src/file/fileMove.ts +32 -32
  201. package/src/file/findFilesByExt.ts +46 -46
  202. package/src/file/index.ts +7 -7
  203. package/src/images/index.ts +3 -3
  204. package/src/images/loadImage.ts +16 -0
  205. package/src/images/resize.ts +35 -35
  206. package/src/images/upload.ts +24 -24
  207. package/src/index.ts +39 -39
  208. package/src/json.ts +29 -29
  209. package/src/math/diffDate.ts +10 -10
  210. package/src/math/index.ts +90 -90
  211. package/src/math/positiveNumber.ts +12 -12
  212. package/src/name/en.ts +27 -27
  213. package/src/name/index.ts +8 -8
  214. package/src/name/vi.ts +23 -23
  215. package/src/object.ts +72 -72
  216. package/src/permission/index.ts +6 -6
  217. package/src/permission/requestCamera.ts +43 -43
  218. package/src/permission/requestDeviceOrientationControl.ts +33 -33
  219. package/src/response/index.ts +45 -45
  220. package/src/string/formatNumber.ts +12 -12
  221. package/src/string/generatePassword.ts +18 -18
  222. package/src/string/generateUUID.ts +37 -37
  223. package/src/string/index.ts +180 -180
  224. package/src/string/makeDaySlug.ts +40 -40
  225. package/src/string/random.ts +24 -24
  226. package/src/string/trimNull.ts +16 -16
  227. package/src/string/url.ts +116 -116
  228. package/dist/Checker.js.map +0 -1
  229. package/dist/EventDispatcher.js.map +0 -1
  230. package/dist/FileUpload.js.map +0 -1
  231. package/dist/Slug.js.map +0 -1
  232. package/dist/Timer.js.map +0 -1
  233. package/dist/Validation.js.map +0 -1
  234. package/dist/array.js.map +0 -1
  235. package/dist/color.js.map +0 -1
  236. package/dist/console/enableConsole.js.map +0 -1
  237. package/dist/console/index.js.map +0 -1
  238. package/dist/console/log.js.map +0 -1
  239. package/dist/device/browser.js.map +0 -1
  240. package/dist/device/camera.js.map +0 -1
  241. package/dist/device/index.js.map +0 -1
  242. package/dist/device/os.js.map +0 -1
  243. package/dist/file/createDir.js.map +0 -1
  244. package/dist/file/fileMove.js.map +0 -1
  245. package/dist/file/findFilesByExt.js.map +0 -1
  246. package/dist/file/index.js.map +0 -1
  247. package/dist/images/index.js.map +0 -1
  248. package/dist/images/resize.js.map +0 -1
  249. package/dist/images/upload.js.map +0 -1
  250. package/dist/index.js.map +0 -1
  251. package/dist/json.js.map +0 -1
  252. package/dist/math/diffDate.js.map +0 -1
  253. package/dist/math/index.js.map +0 -1
  254. package/dist/math/positiveNumber.js.map +0 -1
  255. package/dist/name/en.js.map +0 -1
  256. package/dist/name/index.js.map +0 -1
  257. package/dist/name/vi.js.map +0 -1
  258. package/dist/object.js.map +0 -1
  259. package/dist/permission/index.js.map +0 -1
  260. package/dist/permission/requestCamera.js.map +0 -1
  261. package/dist/permission/requestDeviceOrientationControl.js.map +0 -1
  262. package/dist/response/index.js.map +0 -1
  263. package/dist/string/formatNumber.js.map +0 -1
  264. package/dist/string/generatePassword.js.map +0 -1
  265. package/dist/string/generateUUID.js.map +0 -1
  266. package/dist/string/index.js.map +0 -1
  267. package/dist/string/makeDaySlug.js.map +0 -1
  268. package/dist/string/random.js.map +0 -1
  269. package/dist/string/trimNull.js.map +0 -1
  270. package/dist/string/url.js.map +0 -1
  271. package/esm/Checker.d.ts +0 -8
  272. package/esm/Checker.js +0 -28
  273. package/esm/Checker.js.map +0 -1
  274. package/esm/EventDispatcher.d.ts +0 -13
  275. package/esm/EventDispatcher.js +0 -49
  276. package/esm/EventDispatcher.js.map +0 -1
  277. package/esm/FileUpload.d.ts +0 -12
  278. package/esm/FileUpload.js +0 -62
  279. package/esm/FileUpload.js.map +0 -1
  280. package/esm/Slug.d.ts +0 -9
  281. package/esm/Slug.js +0 -330
  282. package/esm/Slug.js.map +0 -1
  283. package/esm/Timer.d.ts +0 -4
  284. package/esm/Timer.js +0 -7
  285. package/esm/Timer.js.map +0 -1
  286. package/esm/Validation.d.ts +0 -5
  287. package/esm/Validation.js +0 -37
  288. package/esm/Validation.js.map +0 -1
  289. package/esm/array.d.ts +0 -113
  290. package/esm/array.js +0 -275
  291. package/esm/array.js.map +0 -1
  292. package/esm/color.d.ts +0 -23
  293. package/esm/color.js +0 -80
  294. package/esm/color.js.map +0 -1
  295. package/esm/console/enableConsole.d.ts +0 -2
  296. package/esm/console/enableConsole.js +0 -7
  297. package/esm/console/enableConsole.js.map +0 -1
  298. package/esm/console/index.d.ts +0 -11
  299. package/esm/console/index.js +0 -13
  300. package/esm/console/index.js.map +0 -1
  301. package/esm/console/log.d.ts +0 -15
  302. package/esm/console/log.js +0 -33
  303. package/esm/console/log.js.map +0 -1
  304. package/esm/device/browser.d.ts +0 -5
  305. package/esm/device/browser.js +0 -30
  306. package/esm/device/browser.js.map +0 -1
  307. package/esm/device/camera.d.ts +0 -7
  308. package/esm/device/camera.js +0 -168
  309. package/esm/device/camera.js.map +0 -1
  310. package/esm/device/index.d.ts +0 -5
  311. package/esm/device/index.js +0 -217
  312. package/esm/device/index.js.map +0 -1
  313. package/esm/device/os.d.ts +0 -11
  314. package/esm/device/os.js +0 -28
  315. package/esm/device/os.js.map +0 -1
  316. package/esm/file/createDir.d.ts +0 -5
  317. package/esm/file/createDir.js +0 -13
  318. package/esm/file/createDir.js.map +0 -1
  319. package/esm/file/fileMove.d.ts +0 -4
  320. package/esm/file/fileMove.js +0 -29
  321. package/esm/file/fileMove.js.map +0 -1
  322. package/esm/file/findFilesByExt.d.ts +0 -13
  323. package/esm/file/findFilesByExt.js +0 -46
  324. package/esm/file/findFilesByExt.js.map +0 -1
  325. package/esm/file/index.d.ts +0 -9
  326. package/esm/file/index.js +0 -6
  327. package/esm/file/index.js.map +0 -1
  328. package/esm/images/index.d.ts +0 -2
  329. package/esm/images/index.js +0 -4
  330. package/esm/images/index.js.map +0 -1
  331. package/esm/images/resize.d.ts +0 -2
  332. package/esm/images/resize.js +0 -31
  333. package/esm/images/resize.js.map +0 -1
  334. package/esm/images/upload.d.ts +0 -10
  335. package/esm/images/upload.js +0 -20
  336. package/esm/images/upload.js.map +0 -1
  337. package/esm/index.d.ts +0 -37
  338. package/esm/index.js +0 -38
  339. package/esm/index.js.map +0 -1
  340. package/esm/json.d.ts +0 -8
  341. package/esm/json.js +0 -28
  342. package/esm/json.js.map +0 -1
  343. package/esm/math/diffDate.d.ts +0 -5
  344. package/esm/math/diffDate.js +0 -10
  345. package/esm/math/diffDate.js.map +0 -1
  346. package/esm/math/index.d.ts +0 -30
  347. package/esm/math/index.js +0 -78
  348. package/esm/math/index.js.map +0 -1
  349. package/esm/math/positiveNumber.d.ts +0 -2
  350. package/esm/math/positiveNumber.js +0 -13
  351. package/esm/math/positiveNumber.js.map +0 -1
  352. package/esm/name/en.d.ts +0 -5
  353. package/esm/name/en.js +0 -22
  354. package/esm/name/en.js.map +0 -1
  355. package/esm/name/index.d.ts +0 -12
  356. package/esm/name/index.js +0 -6
  357. package/esm/name/index.js.map +0 -1
  358. package/esm/name/vi.d.ts +0 -5
  359. package/esm/name/vi.js +0 -24
  360. package/esm/name/vi.js.map +0 -1
  361. package/esm/object.js +0 -70
  362. package/esm/object.js.map +0 -1
  363. package/esm/permission/index.d.ts +0 -8
  364. package/esm/permission/index.js +0 -5
  365. package/esm/permission/index.js.map +0 -1
  366. package/esm/permission/requestCamera.d.ts +0 -5
  367. package/esm/permission/requestCamera.js +0 -39
  368. package/esm/permission/requestCamera.js.map +0 -1
  369. package/esm/permission/requestDeviceOrientationControl.d.ts +0 -2
  370. package/esm/permission/requestDeviceOrientationControl.js +0 -35
  371. package/esm/permission/requestDeviceOrientationControl.js.map +0 -1
  372. package/esm/response/index.d.ts +0 -49
  373. package/esm/response/index.js +0 -46
  374. package/esm/response/index.js.map +0 -1
  375. package/esm/string/formatNumber.d.ts +0 -6
  376. package/esm/string/formatNumber.js +0 -11
  377. package/esm/string/formatNumber.js.map +0 -1
  378. package/esm/string/generatePassword.d.ts +0 -9
  379. package/esm/string/generatePassword.js +0 -20
  380. package/esm/string/generatePassword.js.map +0 -1
  381. package/esm/string/generateUUID.d.ts +0 -2
  382. package/esm/string/generateUUID.js +0 -33
  383. package/esm/string/generateUUID.js.map +0 -1
  384. package/esm/string/index.d.ts +0 -65
  385. package/esm/string/index.js +0 -150
  386. package/esm/string/index.js.map +0 -1
  387. package/esm/string/makeDaySlug.d.ts +0 -31
  388. package/esm/string/makeDaySlug.js +0 -16
  389. package/esm/string/makeDaySlug.js.map +0 -1
  390. package/esm/string/random.d.ts +0 -14
  391. package/esm/string/random.js +0 -20
  392. package/esm/string/random.js.map +0 -1
  393. package/esm/string/trimNull.d.ts +0 -2
  394. package/esm/string/trimNull.js +0 -14
  395. package/esm/string/trimNull.js.map +0 -1
  396. package/esm/string/url.d.ts +0 -36
  397. package/esm/string/url.js +0 -98
  398. package/esm/string/url.js.map +0 -1
@@ -1,207 +1,207 @@
1
- import { requestCamera } from "../permission/requestCamera";
2
-
3
- type GetWebcamParams = {
4
- container?: HTMLElement;
5
- facingMode: string;
6
- audio: boolean;
7
- };
8
-
9
- export function getWebcam(params: GetWebcamParams = { facingMode: "environment", audio: true }) {
10
- if (typeof window == "undefined") return;
11
-
12
- const { container, facingMode = "environment", audio = true } = params;
13
- const _container = container || document.body;
14
-
15
- return new Promise(async (resolve, reject) => {
16
- const video = document.createElement("video") as any;
17
- video.style.position = "absolute";
18
- video.style.top = "0";
19
- video.style.left = "0";
20
- video.style.width = "100%";
21
- video.style.height = "100%";
22
- _container.append(video);
23
-
24
- let inputCameras: any[] = [];
25
- let currentCamera: any;
26
-
27
- const requestedMediaConstraints: MediaStreamConstraints = {
28
- video: {
29
- facingMode: { exact: facingMode },
30
- },
31
- audio,
32
- };
33
-
34
- let stream: any;
35
- let isAllowed = false;
36
-
37
- console.log("[Camera.js] Requesting:", requestedMediaConstraints);
38
- const res = await requestCamera({ audio });
39
- if (!res) {
40
- setTimeout(function () {
41
- handleError({ name: "Error", message: "NotSupported" });
42
- }, 50);
43
- }
44
-
45
- // start requesting media permissions:
46
-
47
- // console.log("[Camera.js] Requesting:", requestedMediaConstraints);
48
-
49
- // if (navigator.mediaDevices.enumerateDevices === undefined) {
50
- // setTimeout(function () {
51
- // handleError({ name: "Error", message: "NotSupported" });
52
- // }, 50);
53
- // } else {
54
- navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
55
- // }
56
-
57
- function parseDevices(devices: MediaDeviceInfo[]) {
58
- inputCameras = [];
59
- let backCameras: any[] = [];
60
-
61
- devices.forEach(function (device) {
62
- if (device.kind == "videoinput" && typeof device.deviceId != "undefined" && device.deviceId != "") {
63
- inputCameras.push(device);
64
- }
65
- });
66
- // //alert (JSON.stringify (devices));
67
- console.log("[Camera.js] inputCameras:", inputCameras);
68
-
69
- if (inputCameras.length > 0) {
70
- let cams = "";
71
- let backCamera: any;
72
-
73
- inputCameras.map((cam, index) => {
74
- cams += `[${cam.deviceId}] ${cam.kind} | ${cam.label}\n`;
75
- // console.log(cam);
76
- let label = cam.label.toLowerCase();
77
- if (label.indexOf("back") > -1 || label.indexOf("facetime") > -1) {
78
- backCamera = cam;
79
- backCameras.push(backCamera);
80
- }
81
- });
82
-
83
- if (backCameras.length > 1) {
84
- backCamera = backCameras[backCameras.length - 1];
85
- }
86
-
87
- console.log(`[Camera.js] All input sources:`, cams);
88
- console.log(`[Camera.js] This device has ${backCameras.length} back camera${backCameras.length > 1 ? "s" : ""}.`);
89
- console.log("[Camera.js] backCameras:", JSON.stringify(backCameras));
90
-
91
- currentCamera = backCamera;
92
-
93
- // if (scope.onGotDevices) {
94
- // scope.onGotDevices(devices);
95
- // }
96
-
97
- // Lấy stream của camera sau
98
- // (Lấy cái cuối cùng trong danh sách trước, thường sẽ là camera chính trên Android)
99
- getStreamOfCameraId(backCamera.deviceId)
100
- .then(onStreamReceived)
101
- .catch((e) => {
102
- if (backCameras.length > 1) {
103
- // nếu thiết bị có nhiều hơn 1 camera sau -> thử lấy camera khác
104
- backCamera = backCameras[backCameras.length - 2];
105
- getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
106
- } else if (backCameras.length > 2) {
107
- // nếu thiết bị có nhiều hơn 2 camera sau -> thử lấy camera khác nữa
108
- backCamera = backCameras[backCameras.length - 3];
109
- getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
110
- } else {
111
- // nếu thiết bị đéo có camera sau...
112
- handleError(e);
113
- }
114
- });
115
- } else {
116
- navigator.mediaDevices.getUserMedia(requestedMediaConstraints).then(onStreamReceived).catch(handleError);
117
-
118
- // if (scope.onGotDevicesFailed) scope.onGotDevicesFailed();
119
- }
120
- }
121
-
122
- function onStreamReceived(stream: any): void {
123
- if (inputCameras.length == 0) {
124
- console.log("[Camera.js] Not found any back cameras, request again?");
125
- navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
126
- return;
127
- }
128
-
129
- isAllowed = true;
130
-
131
- playWebcamVideo(stream);
132
- }
133
-
134
- function playWebcamVideo(_stream: any) {
135
- stream = _stream;
136
-
137
- if ("srcObject" in video) {
138
- // //alert ('GOT STREAM VIDEO OBJECT');
139
- video.srcObject = _stream;
140
- } else {
141
- // //alert ('GOT STREAM VIDEO SOURCE URL');
142
- // Avoid using this in new browsers, as it is going away.
143
- video.src = window.URL.createObjectURL(_stream);
144
- }
145
-
146
- // required to tell iOS safari we don't want fullscreen
147
- video.setAttribute("playsinline", "true");
148
- video.setAttribute("muted", "true");
149
- video.setAttribute("autoplay", "true");
150
- video.muted = true;
151
- video.autoplay = true;
152
- video.style.objectFit = "cover";
153
- video.play();
154
-
155
- // auto play
156
- video.addEventListener("canplay", function (e: any) {
157
- // //alert ('CAN PLAY');
158
- });
159
-
160
- video.addEventListener("canplaythrough", function (e: any) {
161
- // //alert ('CAN PLAY THROUGH');
162
- });
163
-
164
- video.addEventListener("error", (e: any) => console.log("[Camera.js] <video> error:", e));
165
-
166
- video.addEventListener("stalled", function (e: any) {
167
- // //alert ('CANNOT GET METADATA');
168
- isAllowed = false;
169
- console.log("[Camera.js] <video> stalled:", e);
170
-
171
- reject();
172
- });
173
-
174
- video.addEventListener("loadedmetadata", function (e: any) {
175
- if (currentCamera.label.toLowerCase().indexOf("facetime") > -1) {
176
- video.style.transform = "scaleX(-1)";
177
- video.style.webkitTransform = "scaleX(-1)";
178
- }
179
-
180
- video.play();
181
-
182
- resolve(video);
183
- });
184
- }
185
-
186
- function getStreamOfCameraId(id: any) {
187
- const constraints = {
188
- video: { deviceId: { exact: id } },
189
- audio: false,
190
- };
191
-
192
- return new Promise((resolve, reject) => {
193
- navigator.mediaDevices.getUserMedia(constraints).then(resolve).catch(reject);
194
- });
195
- }
196
-
197
- function handleError(err: any) {
198
- console.error(err);
199
- const errMsg = "[Camera.js] " + err.name + ": " + err.message;
200
- console.error(errMsg);
201
-
202
- isAllowed = false;
203
-
204
- reject();
205
- }
206
- });
207
- }
1
+ import { requestCamera } from "../permission/requestCamera";
2
+
3
+ type GetWebcamParams = {
4
+ container?: HTMLElement;
5
+ facingMode: string;
6
+ audio: boolean;
7
+ };
8
+
9
+ export function getWebcam(params: GetWebcamParams = { facingMode: "environment", audio: true }) {
10
+ if (typeof window == "undefined") return;
11
+
12
+ const { container, facingMode = "environment", audio = true } = params;
13
+ const _container = container || document.body;
14
+
15
+ return new Promise(async (resolve, reject) => {
16
+ const video = document.createElement("video") as any;
17
+ video.style.position = "absolute";
18
+ video.style.top = "0";
19
+ video.style.left = "0";
20
+ video.style.width = "100%";
21
+ video.style.height = "100%";
22
+ _container.append(video);
23
+
24
+ let inputCameras: any[] = [];
25
+ let currentCamera: any;
26
+
27
+ const requestedMediaConstraints: MediaStreamConstraints = {
28
+ video: {
29
+ facingMode: { exact: facingMode },
30
+ },
31
+ audio,
32
+ };
33
+
34
+ let stream: any;
35
+ let isAllowed = false;
36
+
37
+ console.log("[Camera.js] Requesting:", requestedMediaConstraints);
38
+ const res = await requestCamera({ audio });
39
+ if (!res) {
40
+ setTimeout(function () {
41
+ handleError({ name: "Error", message: "NotSupported" });
42
+ }, 50);
43
+ }
44
+
45
+ // start requesting media permissions:
46
+
47
+ // console.log("[Camera.js] Requesting:", requestedMediaConstraints);
48
+
49
+ // if (navigator.mediaDevices.enumerateDevices === undefined) {
50
+ // setTimeout(function () {
51
+ // handleError({ name: "Error", message: "NotSupported" });
52
+ // }, 50);
53
+ // } else {
54
+ navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
55
+ // }
56
+
57
+ function parseDevices(devices: MediaDeviceInfo[]) {
58
+ inputCameras = [];
59
+ let backCameras: any[] = [];
60
+
61
+ devices.forEach(function (device) {
62
+ if (device.kind == "videoinput" && typeof device.deviceId != "undefined" && device.deviceId != "") {
63
+ inputCameras.push(device);
64
+ }
65
+ });
66
+ // //alert (JSON.stringify (devices));
67
+ console.log("[Camera.js] inputCameras:", inputCameras);
68
+
69
+ if (inputCameras.length > 0) {
70
+ let cams = "";
71
+ let backCamera: any;
72
+
73
+ inputCameras.map((cam, index) => {
74
+ cams += `[${cam.deviceId}] ${cam.kind} | ${cam.label}\n`;
75
+ // console.log(cam);
76
+ let label = cam.label.toLowerCase();
77
+ if (label.indexOf("back") > -1 || label.indexOf("facetime") > -1) {
78
+ backCamera = cam;
79
+ backCameras.push(backCamera);
80
+ }
81
+ });
82
+
83
+ if (backCameras.length > 1) {
84
+ backCamera = backCameras[backCameras.length - 1];
85
+ }
86
+
87
+ console.log(`[Camera.js] All input sources:`, cams);
88
+ console.log(`[Camera.js] This device has ${backCameras.length} back camera${backCameras.length > 1 ? "s" : ""}.`);
89
+ console.log("[Camera.js] backCameras:", JSON.stringify(backCameras));
90
+
91
+ currentCamera = backCamera;
92
+
93
+ // if (scope.onGotDevices) {
94
+ // scope.onGotDevices(devices);
95
+ // }
96
+
97
+ // Lấy stream của camera sau
98
+ // (Lấy cái cuối cùng trong danh sách trước, thường sẽ là camera chính trên Android)
99
+ getStreamOfCameraId(backCamera.deviceId)
100
+ .then(onStreamReceived)
101
+ .catch((e) => {
102
+ if (backCameras.length > 1) {
103
+ // nếu thiết bị có nhiều hơn 1 camera sau -> thử lấy camera khác
104
+ backCamera = backCameras[backCameras.length - 2];
105
+ getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
106
+ } else if (backCameras.length > 2) {
107
+ // nếu thiết bị có nhiều hơn 2 camera sau -> thử lấy camera khác nữa
108
+ backCamera = backCameras[backCameras.length - 3];
109
+ getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
110
+ } else {
111
+ // nếu thiết bị đéo có camera sau...
112
+ handleError(e);
113
+ }
114
+ });
115
+ } else {
116
+ navigator.mediaDevices.getUserMedia(requestedMediaConstraints).then(onStreamReceived).catch(handleError);
117
+
118
+ // if (scope.onGotDevicesFailed) scope.onGotDevicesFailed();
119
+ }
120
+ }
121
+
122
+ function onStreamReceived(stream: any): void {
123
+ if (inputCameras.length == 0) {
124
+ console.log("[Camera.js] Not found any back cameras, request again?");
125
+ navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
126
+ return;
127
+ }
128
+
129
+ isAllowed = true;
130
+
131
+ playWebcamVideo(stream);
132
+ }
133
+
134
+ function playWebcamVideo(_stream: any) {
135
+ stream = _stream;
136
+
137
+ if ("srcObject" in video) {
138
+ // //alert ('GOT STREAM VIDEO OBJECT');
139
+ video.srcObject = _stream;
140
+ } else {
141
+ // //alert ('GOT STREAM VIDEO SOURCE URL');
142
+ // Avoid using this in new browsers, as it is going away.
143
+ video.src = window.URL.createObjectURL(_stream);
144
+ }
145
+
146
+ // required to tell iOS safari we don't want fullscreen
147
+ video.setAttribute("playsinline", "true");
148
+ video.setAttribute("muted", "true");
149
+ video.setAttribute("autoplay", "true");
150
+ video.muted = true;
151
+ video.autoplay = true;
152
+ video.style.objectFit = "cover";
153
+ video.play();
154
+
155
+ // auto play
156
+ video.addEventListener("canplay", function (e: any) {
157
+ // //alert ('CAN PLAY');
158
+ });
159
+
160
+ video.addEventListener("canplaythrough", function (e: any) {
161
+ // //alert ('CAN PLAY THROUGH');
162
+ });
163
+
164
+ video.addEventListener("error", (e: any) => console.log("[Camera.js] <video> error:", e));
165
+
166
+ video.addEventListener("stalled", function (e: any) {
167
+ // //alert ('CANNOT GET METADATA');
168
+ isAllowed = false;
169
+ console.log("[Camera.js] <video> stalled:", e);
170
+
171
+ reject();
172
+ });
173
+
174
+ video.addEventListener("loadedmetadata", function (e: any) {
175
+ if (currentCamera.label.toLowerCase().indexOf("facetime") > -1) {
176
+ video.style.transform = "scaleX(-1)";
177
+ video.style.webkitTransform = "scaleX(-1)";
178
+ }
179
+
180
+ video.play();
181
+
182
+ resolve(video);
183
+ });
184
+ }
185
+
186
+ function getStreamOfCameraId(id: any) {
187
+ const constraints = {
188
+ video: { deviceId: { exact: id } },
189
+ audio: false,
190
+ };
191
+
192
+ return new Promise((resolve, reject) => {
193
+ navigator.mediaDevices.getUserMedia(constraints).then(resolve).catch(reject);
194
+ });
195
+ }
196
+
197
+ function handleError(err: any) {
198
+ console.error(err);
199
+ const errMsg = "[Camera.js] " + err.name + ": " + err.message;
200
+ console.error(errMsg);
201
+
202
+ isAllowed = false;
203
+
204
+ reject();
205
+ }
206
+ });
207
+ }