diginext-utils 2.1.8 → 2.1.9

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 (46) hide show
  1. package/README.md +162 -162
  2. package/package.json +1 -1
  3. package/src/Checker.ts +29 -29
  4. package/src/EventDispatcher.ts +62 -62
  5. package/src/FileUpload.ts +66 -66
  6. package/src/Slug.ts +365 -365
  7. package/src/Timer.ts +7 -7
  8. package/src/Validation.ts +36 -36
  9. package/src/array.ts +285 -285
  10. package/src/color.ts +87 -87
  11. package/src/console/enableConsole.ts +8 -8
  12. package/src/console/index.ts +17 -17
  13. package/src/console/log.ts +39 -39
  14. package/src/device/browser.ts +29 -29
  15. package/src/device/camera.ts +207 -207
  16. package/src/device/index.ts +230 -230
  17. package/src/device/os.ts +29 -29
  18. package/src/file/createDir.ts +14 -14
  19. package/src/file/fileMove.ts +32 -32
  20. package/src/file/findFilesByExt.ts +46 -46
  21. package/src/file/index.ts +7 -7
  22. package/src/images/index.ts +3 -3
  23. package/src/images/loadImage.ts +16 -16
  24. package/src/images/resize.ts +35 -35
  25. package/src/images/upload.ts +24 -24
  26. package/src/index.ts +39 -39
  27. package/src/json.ts +29 -29
  28. package/src/math/diffDate.ts +10 -10
  29. package/src/math/index.ts +90 -90
  30. package/src/math/positiveNumber.ts +12 -12
  31. package/src/name/en.ts +27 -27
  32. package/src/name/index.ts +8 -8
  33. package/src/name/vi.ts +23 -23
  34. package/src/object.ts +72 -72
  35. package/src/permission/index.ts +6 -6
  36. package/src/permission/requestCamera.ts +43 -43
  37. package/src/permission/requestDeviceOrientationControl.ts +33 -33
  38. package/src/response/index.ts +45 -45
  39. package/src/string/formatNumber.ts +12 -12
  40. package/src/string/generatePassword.ts +18 -18
  41. package/src/string/generateUUID.ts +37 -37
  42. package/src/string/getTextBetweenCharByIndex.ts +20 -20
  43. package/src/string/indexesOf.ts +15 -15
  44. package/src/string/makeDaySlug.ts +40 -40
  45. package/src/string/random.ts +33 -33
  46. package/src/string/trimNull.ts +16 -16
@@ -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
+ }