diginext-utils 2.0.5 → 2.0.8

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 (178) hide show
  1. package/dist/Checker.d.ts +0 -1
  2. package/dist/Checker.js +27 -45
  3. package/dist/Checker.js.map +1 -0
  4. package/dist/EventDispatcher.d.ts +1 -3
  5. package/dist/EventDispatcher.js +47 -70
  6. package/dist/EventDispatcher.js.map +1 -0
  7. package/dist/FileUpload.d.ts +0 -1
  8. package/dist/FileUpload.js +61 -79
  9. package/dist/FileUpload.js.map +1 -0
  10. package/dist/Slug.d.ts +0 -1
  11. package/dist/Slug.js +329 -347
  12. package/dist/Slug.js.map +1 -0
  13. package/dist/Timer.d.ts +1 -3
  14. package/dist/Timer.js +8 -32
  15. package/dist/Timer.js.map +1 -0
  16. package/dist/Validation.d.ts +1 -3
  17. package/dist/Validation.js +38 -55
  18. package/dist/Validation.js.map +1 -0
  19. package/dist/array.d.ts +19 -21
  20. package/dist/array.js +264 -242
  21. package/dist/array.js.map +1 -0
  22. package/dist/color.d.ts +7 -9
  23. package/dist/color.js +78 -87
  24. package/dist/color.js.map +1 -0
  25. package/dist/console/enableConsole.d.ts +1 -3
  26. package/dist/console/enableConsole.js +10 -36
  27. package/dist/console/enableConsole.js.map +1 -0
  28. package/dist/console/index.d.ts +3 -5
  29. package/dist/console/index.js +15 -42
  30. package/dist/console/index.js.map +1 -0
  31. package/dist/device/browser.d.ts +5 -7
  32. package/dist/device/browser.js +33 -60
  33. package/dist/device/browser.js.map +1 -0
  34. package/dist/device/camera.d.ts +7 -16
  35. package/dist/device/camera.js +167 -187
  36. package/dist/device/camera.js.map +1 -0
  37. package/dist/device.d.ts +4 -6
  38. package/dist/device.js +210 -190
  39. package/dist/device.js.map +1 -0
  40. package/dist/file/createDir.d.ts +1 -2
  41. package/dist/file/createDir.js +14 -34
  42. package/dist/file/createDir.js.map +1 -0
  43. package/dist/file/fileMove.d.ts +1 -3
  44. package/dist/file/fileMove.js +30 -49
  45. package/dist/file/fileMove.js.map +1 -0
  46. package/dist/file/findFilesByExt.d.ts +0 -1
  47. package/dist/file/findFilesByExt.js +40 -58
  48. package/dist/file/findFilesByExt.js.map +1 -0
  49. package/dist/index.d.ts +16 -12
  50. package/dist/index.js +33 -906
  51. package/dist/index.js.map +1 -0
  52. package/dist/math/diffDate.d.ts +1 -3
  53. package/dist/math/diffDate.js +11 -31
  54. package/dist/math/diffDate.js.map +1 -0
  55. package/dist/math/index.d.ts +8 -10
  56. package/dist/math/index.js +87 -71
  57. package/dist/math/index.js.map +1 -0
  58. package/dist/math/positiveNumber.d.ts +1 -3
  59. package/dist/math/positiveNumber.js +14 -51
  60. package/dist/math/positiveNumber.js.map +1 -0
  61. package/dist/name/en.d.ts +1 -3
  62. package/dist/name/en.js +18 -34
  63. package/dist/name/en.js.map +1 -0
  64. package/dist/name/vi.d.ts +1 -3
  65. package/dist/name/vi.js +24 -60
  66. package/dist/name/vi.js.map +1 -0
  67. package/dist/object.d.ts +9 -11
  68. package/dist/object.js +57 -82
  69. package/dist/object.js.map +1 -0
  70. package/dist/permission/requestCamera.d.ts +2 -3
  71. package/dist/permission/requestCamera.js +38 -47
  72. package/dist/permission/requestCamera.js.map +1 -0
  73. package/dist/permission/requestDeviceOrientationControl.d.ts +0 -1
  74. package/dist/permission/requestDeviceOrientationControl.js +36 -198
  75. package/dist/permission/requestDeviceOrientationControl.js.map +1 -0
  76. package/dist/string/formatNumber.d.ts +1 -3
  77. package/dist/string/formatNumber.js +12 -51
  78. package/dist/string/formatNumber.js.map +1 -0
  79. package/dist/string/generatePassword.d.ts +1 -3
  80. package/dist/string/generatePassword.js +21 -50
  81. package/dist/string/generatePassword.js.map +1 -0
  82. package/dist/string/generateUUID.d.ts +1 -3
  83. package/dist/string/generateUUID.js +34 -35
  84. package/dist/string/generateUUID.js.map +1 -0
  85. package/dist/string/index.d.ts +8 -10
  86. package/dist/string/index.js +119 -127
  87. package/dist/string/index.js.map +1 -0
  88. package/dist/string/random.d.ts +6 -8
  89. package/dist/string/random.js +21 -50
  90. package/dist/string/random.js.map +1 -0
  91. package/dist/string/trimNull.d.ts +1 -3
  92. package/dist/string/trimNull.js +15 -41
  93. package/dist/string/trimNull.js.map +1 -0
  94. package/dist/string/url.d.ts +7 -14
  95. package/dist/string/url.js +93 -108
  96. package/dist/string/url.js.map +1 -0
  97. package/package.json +6 -9
  98. package/src/Checker.ts +27 -0
  99. package/src/EventDispatcher.ts +60 -0
  100. package/src/FileUpload.ts +65 -0
  101. package/src/Slug.ts +364 -0
  102. package/src/Timer.ts +5 -0
  103. package/src/Validation.ts +35 -0
  104. package/src/array.ts +261 -0
  105. package/src/color.ts +89 -0
  106. package/src/console/enableConsole.ts +6 -0
  107. package/src/console/index.ts +11 -0
  108. package/src/device/browser.ts +29 -0
  109. package/src/device/camera.ts +209 -0
  110. package/src/device.ts +223 -0
  111. package/src/file/createDir.ts +14 -0
  112. package/src/file/fileMove.ts +32 -0
  113. package/src/file/findFilesByExt.ts +39 -0
  114. package/src/index.ts +17 -0
  115. package/src/math/diffDate.ts +8 -0
  116. package/src/math/index.ts +88 -0
  117. package/src/math/positiveNumber.ts +10 -0
  118. package/src/name/en.ts +24 -0
  119. package/src/name/vi.ts +21 -0
  120. package/src/object.ts +49 -0
  121. package/src/permission/requestCamera.ts +43 -0
  122. package/src/permission/requestDeviceOrientationControl.ts +33 -0
  123. package/src/string/formatNumber.ts +10 -0
  124. package/src/string/generatePassword.ts +16 -0
  125. package/src/string/generateUUID.ts +35 -0
  126. package/src/string/index.ts +145 -0
  127. package/src/string/random.ts +20 -0
  128. package/src/string/trimNull.ts +11 -0
  129. package/src/string/url.ts +109 -0
  130. package/dist/.DS_Store +0 -0
  131. package/dist/Checker.mjs +0 -26
  132. package/dist/EventDispatcher.mjs +0 -52
  133. package/dist/FileUpload.mjs +0 -60
  134. package/dist/Slug.mjs +0 -328
  135. package/dist/Timer.mjs +0 -7
  136. package/dist/Validation.mjs +0 -34
  137. package/dist/array.mjs +0 -44
  138. package/dist/chunk-2R5DRG2S.mjs +0 -28
  139. package/dist/chunk-3NMJTC44.mjs +0 -146
  140. package/dist/chunk-5AL36RZR.mjs +0 -54
  141. package/dist/chunk-7UXN7I4K.mjs +0 -96
  142. package/dist/chunk-A4YWYLCH.mjs +0 -23
  143. package/dist/chunk-AHFJBIQJ.mjs +0 -10
  144. package/dist/chunk-AKU6F3WT.mjs +0 -11
  145. package/dist/chunk-ALNAD4H7.mjs +0 -10
  146. package/dist/chunk-FOWYH6LL.mjs +0 -38
  147. package/dist/chunk-FTE6FZSH.mjs +0 -24
  148. package/dist/chunk-LXQIKFED.mjs +0 -17
  149. package/dist/chunk-NLQXFCPR.mjs +0 -30
  150. package/dist/chunk-QXFH3X2K.mjs +0 -49
  151. package/dist/chunk-R2BH5I6O.mjs +0 -9
  152. package/dist/chunk-S2U7F2JJ.mjs +0 -207
  153. package/dist/chunk-UKRVCU5M.mjs +0 -171
  154. package/dist/color.mjs +0 -68
  155. package/dist/console/enableConsole.mjs +0 -11
  156. package/dist/console/index.mjs +0 -18
  157. package/dist/device/browser.mjs +0 -39
  158. package/dist/device/camera.mjs +0 -146
  159. package/dist/device.mjs +0 -13
  160. package/dist/file/createDir.mjs +0 -16
  161. package/dist/file/fileMove.mjs +0 -32
  162. package/dist/file/findFilesByExt.mjs +0 -42
  163. package/dist/index.mjs +0 -143
  164. package/dist/math/diffDate.mjs +0 -11
  165. package/dist/math/index.mjs +0 -21
  166. package/dist/math/positiveNumber.mjs +0 -19
  167. package/dist/name/en.mjs +0 -18
  168. package/dist/name/vi.mjs +0 -34
  169. package/dist/object.mjs +0 -17
  170. package/dist/permission/requestCamera.mjs +0 -7
  171. package/dist/permission/requestDeviceOrientationControl.mjs +0 -176
  172. package/dist/string/formatNumber.mjs +0 -13
  173. package/dist/string/generatePassword.mjs +0 -22
  174. package/dist/string/generateUUID.mjs +0 -15
  175. package/dist/string/index.mjs +0 -96
  176. package/dist/string/random.mjs +0 -17
  177. package/dist/string/trimNull.mjs +0 -16
  178. package/dist/string/url.mjs +0 -79
package/src/color.ts ADDED
@@ -0,0 +1,89 @@
1
+ export const random = (hex = false) => {
2
+ return (hex ? "#" : "") + Math.floor(Math.random() * 16777215).toString(16);
3
+ };
4
+
5
+ // This function (pSBC) will take a HEX or RGB web color.
6
+ // pSBC can shade it darker or lighter, or blend it with a second color, and can also pass it right thru but convert from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex).
7
+ // All without you even knowing what color format you are using.
8
+ // Version 4.0 (pref: https://github.com/PimpTrizkit/PJs/wiki/12.-Shade,-Blend-and-Convert-a-Web-Color-(pSBC.js));
9
+
10
+ export const pSBC = (p: any, c0: any, c1?: any, l?: any) => {
11
+ let r,
12
+ g,
13
+ b,
14
+ P,
15
+ f,
16
+ t,
17
+ h,
18
+ i = parseInt,
19
+ m = Math.round,
20
+ a: any = typeof c1 == "string";
21
+ if (typeof p != "number" || p < -1 || p > 1 || typeof c0 != "string" || (c0[0] != "r" && c0[0] != "#") || (c1 && !a))
22
+ return null;
23
+
24
+ const pSBCr = (d: any) => {
25
+ let n = d.length,
26
+ x: { r: number; g: number; b: number; a: number } = { r: 0, g: 0, b: 0, a: 1 };
27
+ if (n > 9) {
28
+ ([r, g, b, a] = d = d.split(",")), (n = d.length);
29
+ if (n < 3 || n > 4) return null;
30
+ (x.r = i(r[3] == "a" ? r.slice(5) : r.slice(4))),
31
+ (x.g = i(g)),
32
+ (x.b = i(b)),
33
+ (x.a = a ? parseFloat(a.toString()) : -1);
34
+ } else {
35
+ if (n == 8 || n == 6 || n < 4) return null;
36
+ if (n < 6) d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (n > 4 ? d[4] + d[4] : "");
37
+ d = i(d.slice(1), 16);
38
+ if (n == 9 || n == 5)
39
+ (x.r = (d >> 24) & 255), (x.g = (d >> 16) & 255), (x.b = (d >> 8) & 255), (x.a = m((d & 255) / 0.255) / 1000);
40
+ else (x.r = d >> 16), (x.g = (d >> 8) & 255), (x.b = d & 255), (x.a = -1);
41
+ }
42
+ return x;
43
+ };
44
+ (h = c0.length > 9),
45
+ (h = a ? (c1.length > 9 ? true : c1 == "c" ? !h : false) : h),
46
+ (f = pSBCr(c0)),
47
+ (P = p < 0),
48
+ (t = c1 && c1 != "c" ? pSBCr(c1) : P ? { r: 0, g: 0, b: 0, a: -1 } : { r: 255, g: 255, b: 255, a: -1 }),
49
+ (p = P ? p * -1 : p),
50
+ (P = 1 - p);
51
+ if (!f || !t || typeof f == "undefined") return null;
52
+ else if (l) (r = m(P * f.r + p * t.r)), (g = m(P * f.g + p * t.g)), (b = m(P * f.b + p * t.b));
53
+ else
54
+ (r = m((P * f.r ** 2 + p * t.r ** 2) ** 0.5)),
55
+ (g = m((P * f.g ** 2 + p * t.g ** 2) ** 0.5)),
56
+ (b = m((P * f.b ** 2 + p * t.b ** 2) ** 0.5));
57
+
58
+ (a = f.a), (t = t.a), (f = a >= 0 || t >= 0), (a = f ? (a < 0 ? t : t < 0 ? a : a * P + t * p) : 0);
59
+
60
+ if (h) return "rgb" + (f ? "a(" : "(") + r + "," + g + "," + b + (f ? "," + m(a * 1000) / 1000 : "") + ")";
61
+ else
62
+ return (
63
+ "#" +
64
+ (4294967296 + r * 16777216 + g * 65536 + b * 256 + (f ? m(a * 255) : 0)).toString(16).slice(1, f ? undefined : -2)
65
+ );
66
+ };
67
+
68
+ export const hexToRgb = (hex: string) => {
69
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
70
+ return result
71
+ ? {
72
+ r: parseInt(result[1], 16),
73
+ g: parseInt(result[2], 16),
74
+ b: parseInt(result[3], 16),
75
+ }
76
+ : null;
77
+ };
78
+
79
+ export const hexDarken = (hex: string, amount: number) => {
80
+ return pSBC(-amount, hex);
81
+ };
82
+
83
+ export const hexLighten = (hex: string, amount: number) => {
84
+ return pSBC(amount, hex);
85
+ };
86
+
87
+ export const RGBToHex = (rgb: string | any) => {
88
+ return pSBC(0, rgb, "c", true);
89
+ };
@@ -0,0 +1,6 @@
1
+ import cloneDeep from "lodash/cloneDeep";
2
+ const _console = cloneDeep(console);
3
+
4
+ export function enableConsole() {
5
+ return _console;
6
+ }
@@ -0,0 +1,11 @@
1
+ export const disableConsole = (params: any) => {
2
+ for (var key in console) {
3
+ (console as any)[key] = function () {};
4
+ }
5
+ };
6
+
7
+ export const removeConsole = disableConsole;
8
+
9
+ export const showCredit = (params: any) => {
10
+ console.log("Developed by Digitop | https://www.wearetopgroup.com/?utm_src=console");
11
+ };
@@ -0,0 +1,29 @@
1
+ export const isPotrait = () => {
2
+ if (typeof window == "undefined") return false;
3
+
4
+ if (!window.orientation) return window.matchMedia("(orientation: portrait)").matches;
5
+ return !(window.orientation === 90 || window.orientation === -90);
6
+ };
7
+
8
+ export const isLandscape = () => {
9
+ return !isPotrait();
10
+ };
11
+
12
+ export const ua = () => {
13
+ if (typeof navigator == "undefined") return null;
14
+ if (typeof window == "undefined") return null;
15
+
16
+ return navigator.userAgent || navigator.vendor || (window as any).opera;
17
+ };
18
+
19
+ export const isFacebookWebview = () => {
20
+ var ua: any = ua();
21
+ if (typeof ua != "undefined") return ua.indexOf("FBAN") > -1 || ua.indexOf("FBAV") > -1;
22
+ };
23
+
24
+ export const isInAppWebview = () => {
25
+ const rules = ["WebView", "(iPhone|iPod|iPad)(?!.*Safari/)", "Android.*(wv|.0.0.0)"];
26
+ const regex = new RegExp(`(${rules.join("|")})`, "ig");
27
+ if (ua()) return Boolean(ua().match(regex));
28
+ return false;
29
+ };
@@ -0,0 +1,209 @@
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");
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(
89
+ `[Camera.js] This device has ${backCameras.length} back camera${backCameras.length > 1 ? "s" : ""}.`
90
+ );
91
+ console.log("[Camera.js] backCameras:", JSON.stringify(backCameras));
92
+
93
+ currentCamera = backCamera;
94
+
95
+ // if (scope.onGotDevices) {
96
+ // scope.onGotDevices(devices);
97
+ // }
98
+
99
+ // Lấy stream của camera sau
100
+ // (Lấy cái cuối cùng trong danh sách trước, thường sẽ là camera chính trên Android)
101
+ getStreamOfCameraId(backCamera.deviceId)
102
+ .then(onStreamReceived)
103
+ .catch((e) => {
104
+ if (backCameras.length > 1) {
105
+ // nếu thiết bị có nhiều hơn 1 camera sau -> thử lấy camera khác
106
+ backCamera = backCameras[backCameras.length - 2];
107
+ getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
108
+ } else if (backCameras.length > 2) {
109
+ // nếu thiết bị có nhiều hơn 2 camera sau -> thử lấy camera khác nữa
110
+ backCamera = backCameras[backCameras.length - 3];
111
+ getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
112
+ } else {
113
+ // nếu thiết bị đéo có camera sau...
114
+ handleError(e);
115
+ }
116
+ });
117
+ } else {
118
+ navigator.mediaDevices.getUserMedia(requestedMediaConstraints).then(onStreamReceived).catch(handleError);
119
+
120
+ // if (scope.onGotDevicesFailed) scope.onGotDevicesFailed();
121
+ }
122
+ }
123
+
124
+ function onStreamReceived(stream: any): void {
125
+ if (inputCameras.length == 0) {
126
+ console.log("[Camera.js] Not found any back cameras, request again?");
127
+ navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
128
+ return;
129
+ }
130
+
131
+ isAllowed = true;
132
+
133
+ playWebcamVideo(stream);
134
+ }
135
+
136
+ function playWebcamVideo(_stream: any) {
137
+ stream = _stream;
138
+
139
+ if ("srcObject" in video) {
140
+ // //alert ('GOT STREAM VIDEO OBJECT');
141
+ video.srcObject = _stream;
142
+ } else {
143
+ // //alert ('GOT STREAM VIDEO SOURCE URL');
144
+ // Avoid using this in new browsers, as it is going away.
145
+ video.src = window.URL.createObjectURL(_stream);
146
+ }
147
+
148
+ // required to tell iOS safari we don't want fullscreen
149
+ video.setAttribute("playsinline", "true");
150
+ video.setAttribute("muted", "true");
151
+ video.setAttribute("autoplay", "true");
152
+ video.muted = true;
153
+ video.autoplay = true;
154
+ video.style.objectFit = "cover";
155
+ video.play();
156
+
157
+ // auto play
158
+ video.addEventListener("canplay", function (e) {
159
+ // //alert ('CAN PLAY');
160
+ });
161
+
162
+ video.addEventListener("canplaythrough", function (e) {
163
+ // //alert ('CAN PLAY THROUGH');
164
+ });
165
+
166
+ video.addEventListener("error", (e) => console.log("[Camera.js] <video> error:", e));
167
+
168
+ video.addEventListener("stalled", function (e) {
169
+ // //alert ('CANNOT GET METADATA');
170
+ isAllowed = false;
171
+ console.log("[Camera.js] <video> stalled:", e);
172
+
173
+ reject();
174
+ });
175
+
176
+ video.addEventListener("loadedmetadata", function (e) {
177
+ if (currentCamera.label.toLowerCase().indexOf("facetime") > -1) {
178
+ video.style.transform = "scaleX(-1)";
179
+ video.style.webkitTransform = "scaleX(-1)";
180
+ }
181
+
182
+ video.play();
183
+
184
+ resolve(video);
185
+ });
186
+ }
187
+
188
+ function getStreamOfCameraId(id: any) {
189
+ const constraints = {
190
+ video: { deviceId: { exact: id } },
191
+ audio: false,
192
+ };
193
+
194
+ return new Promise((resolve, reject) => {
195
+ navigator.mediaDevices.getUserMedia(constraints).then(resolve).catch(reject);
196
+ });
197
+ }
198
+
199
+ function handleError(err: any) {
200
+ console.error(err);
201
+ const errMsg = "[Camera.js] " + err.name + ": " + err.message;
202
+ console.error(errMsg);
203
+
204
+ isAllowed = false;
205
+
206
+ reject();
207
+ }
208
+ });
209
+ }
package/src/device.ts ADDED
@@ -0,0 +1,223 @@
1
+ export const isIos = () => {
2
+ const deviceInfo = checkOS();
3
+ if (deviceInfo) return deviceInfo.os.toLowerCase() == "ios";
4
+ console.log("Can't check OS");
5
+ return null;
6
+ };
7
+
8
+ export const isAndroid = () => {
9
+ const deviceInfo = checkOS();
10
+ if (deviceInfo) return deviceInfo.os.toLowerCase() == "android";
11
+ console.log("Can't check OS");
12
+ return null;
13
+ };
14
+
15
+ export const isMobile = () => {
16
+ if (typeof navigator == "undefined") return null;
17
+
18
+ if (
19
+ navigator.userAgent.match(/Android/i) ||
20
+ navigator.userAgent.match(/webOS/i) ||
21
+ navigator.userAgent.match(/iPhone/i) ||
22
+ navigator.userAgent.match(/iPad/i) ||
23
+ navigator.userAgent.match(/iPod/i) ||
24
+ navigator.userAgent.match(/BlackBerry/i) ||
25
+ navigator.userAgent.match(/Windows Phone/i)
26
+ ) {
27
+ return true;
28
+ } else {
29
+ return false;
30
+ }
31
+ };
32
+
33
+ /**
34
+ *
35
+ * @returns {{
36
+ * screen,
37
+ * browser,
38
+ * browserVersion,
39
+ * browserMajorVersion,
40
+ * mobile,
41
+ * os,
42
+ * osVersion,
43
+ * cookies,
44
+ * flashVersion,
45
+ * }}
46
+ */
47
+ let deviceInfo: any;
48
+ export const checkOS = () => {
49
+ if (typeof window == "undefined") return {};
50
+
51
+ if (typeof deviceInfo == "undefined") {
52
+ var unknown = "-";
53
+
54
+ // screen
55
+ var screenSize = "";
56
+ if (screen.width) {
57
+ var width = screen.width ? screen.width : "";
58
+ var height = screen.height ? screen.height : "";
59
+ screenSize += "" + width + " x " + height;
60
+ }
61
+
62
+ // browser
63
+ var nVer = navigator.appVersion;
64
+ var nAgt = navigator.userAgent;
65
+ var browser = navigator.appName;
66
+ var version = "" + parseFloat(navigator.appVersion);
67
+ var majorVersion = parseInt(navigator.appVersion, 10);
68
+ var nameOffset, verOffset, ix;
69
+
70
+ // Opera
71
+ if ((verOffset = nAgt.indexOf("Opera")) != -1) {
72
+ browser = "Opera";
73
+ version = nAgt.substring(verOffset + 6);
74
+ if ((verOffset = nAgt.indexOf("Version")) != -1) {
75
+ version = nAgt.substring(verOffset + 8);
76
+ }
77
+ }
78
+ // Opera Next
79
+ if ((verOffset = nAgt.indexOf("OPR")) != -1) {
80
+ browser = "Opera";
81
+ version = nAgt.substring(verOffset + 4);
82
+ }
83
+ // Edge
84
+ else if ((verOffset = nAgt.indexOf("Edge")) != -1) {
85
+ browser = "Microsoft Edge";
86
+ version = nAgt.substring(verOffset + 5);
87
+ }
88
+ // MSIE
89
+ else if ((verOffset = nAgt.indexOf("MSIE")) != -1) {
90
+ browser = "Microsoft Internet Explorer";
91
+ version = nAgt.substring(verOffset + 5);
92
+ }
93
+ // Chrome
94
+ else if ((verOffset = nAgt.indexOf("Chrome")) != -1) {
95
+ browser = "Chrome";
96
+ version = nAgt.substring(verOffset + 7);
97
+ }
98
+ // Safari
99
+ else if ((verOffset = nAgt.indexOf("Safari")) != -1) {
100
+ browser = "Safari";
101
+ version = nAgt.substring(verOffset + 7);
102
+ if ((verOffset = nAgt.indexOf("Version")) != -1) {
103
+ version = nAgt.substring(verOffset + 8);
104
+ }
105
+ }
106
+ // Firefox
107
+ else if ((verOffset = nAgt.indexOf("Firefox")) != -1) {
108
+ browser = "Firefox";
109
+ version = nAgt.substring(verOffset + 8);
110
+ }
111
+ // MSIE 11+
112
+ else if (nAgt.indexOf("Trident/") != -1) {
113
+ browser = "Microsoft Internet Explorer";
114
+ version = nAgt.substring(nAgt.indexOf("rv:") + 3);
115
+ }
116
+ // Other browsers
117
+ else if ((nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/"))) {
118
+ browser = nAgt.substring(nameOffset, verOffset);
119
+ version = nAgt.substring(verOffset + 1);
120
+ if (browser.toLowerCase() == browser.toUpperCase()) {
121
+ browser = navigator.appName;
122
+ }
123
+ }
124
+ // trim the version string
125
+ if ((ix = version.indexOf(";")) != -1) version = version.substring(0, ix);
126
+ if ((ix = version.indexOf(" ")) != -1) version = version.substring(0, ix);
127
+ if ((ix = version.indexOf(")")) != -1) version = version.substring(0, ix);
128
+
129
+ majorVersion = parseInt("" + version, 10);
130
+ if (isNaN(majorVersion)) {
131
+ version = "" + parseFloat(navigator.appVersion);
132
+ majorVersion = parseInt(navigator.appVersion, 10);
133
+ }
134
+
135
+ // mobile version
136
+ var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
137
+
138
+ // cookie
139
+ var cookieEnabled = navigator.cookieEnabled ? true : false;
140
+
141
+ if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
142
+ document.cookie = "testcookie";
143
+ cookieEnabled = document.cookie.indexOf("testcookie") != -1 ? true : false;
144
+ }
145
+
146
+ // system
147
+ var os = unknown;
148
+ var clientStrings = [
149
+ { s: "Windows 10", r: /(Windows 10.0|Windows NT 10.0)/ },
150
+ { s: "Windows 8.1", r: /(Windows 8.1|Windows NT 6.3)/ },
151
+ { s: "Windows 8", r: /(Windows 8|Windows NT 6.2)/ },
152
+ { s: "Windows 7", r: /(Windows 7|Windows NT 6.1)/ },
153
+ { s: "Windows Vista", r: /Windows NT 6.0/ },
154
+ { s: "Windows Server 2003", r: /Windows NT 5.2/ },
155
+ { s: "Windows XP", r: /(Windows NT 5.1|Windows XP)/ },
156
+ { s: "Windows 2000", r: /(Windows NT 5.0|Windows 2000)/ },
157
+ { s: "Windows ME", r: /(Win 9x 4.90|Windows ME)/ },
158
+ { s: "Windows 98", r: /(Windows 98|Win98)/ },
159
+ { s: "Windows 95", r: /(Windows 95|Win95|Windows_95)/ },
160
+ { s: "Windows NT 4.0", r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },
161
+ { s: "Windows CE", r: /Windows CE/ },
162
+ { s: "Windows 3.11", r: /Win16/ },
163
+ { s: "Android", r: /Android/ },
164
+ { s: "Open BSD", r: /OpenBSD/ },
165
+ { s: "Sun OS", r: /SunOS/ },
166
+ { s: "Linux", r: /(Linux|X11)/ },
167
+ { s: "iOS", r: /(iPhone|iPad|iPod)/ },
168
+ { s: "Mac OS X", r: /Mac OS X/ },
169
+ { s: "Mac OS", r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
170
+ { s: "QNX", r: /QNX/ },
171
+ { s: "UNIX", r: /UNIX/ },
172
+ { s: "BeOS", r: /BeOS/ },
173
+ { s: "OS/2", r: /OS\/2/ },
174
+ { s: "Search Bot", r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ },
175
+ ];
176
+ for (var id in clientStrings) {
177
+ var cs = clientStrings[id];
178
+ if (cs.r.test(nAgt)) {
179
+ os = cs.s;
180
+ break;
181
+ }
182
+ }
183
+
184
+ var osVersion = unknown;
185
+
186
+ if (/Windows/.test(os)) {
187
+ const _osv = /Windows (.*)/.exec(os) || [];
188
+ osVersion = _osv[1] || "unknown";
189
+ os = "Windows";
190
+ }
191
+
192
+ switch (os) {
193
+ case "Mac OS X":
194
+ const _osvx = /Mac OS X (10[\.\_\d]+)/.exec(nAgt);
195
+ osVersion = _osvx?.[1] || "unknown";
196
+ break;
197
+
198
+ case "Android":
199
+ osVersion = /Android ([\.\_\d]+)/.exec(nAgt)?.[1] || "unknown";
200
+ break;
201
+
202
+ case "iOS":
203
+ const _osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer) || [0, 0, 0];
204
+ osVersion = (_osVersion[1] || 0) + "." + (_osVersion[2] || 0) + "." + (_osVersion[3] || 0);
205
+ break;
206
+ }
207
+
208
+ const _deviceInfo = {
209
+ screen: screenSize,
210
+ browser: browser,
211
+ browserVersion: version,
212
+ browserMajorVersion: majorVersion,
213
+ mobile: mobile,
214
+ os: os,
215
+ osVersion: osVersion,
216
+ cookies: cookieEnabled,
217
+ };
218
+
219
+ deviceInfo = _deviceInfo;
220
+ }
221
+
222
+ return deviceInfo;
223
+ };
@@ -0,0 +1,14 @@
1
+ const fs = require("fs");
2
+
3
+ /**
4
+ * Create new directory
5
+ */
6
+ function createDir(path: string) {
7
+ if (fs.existsSync(path)) {
8
+ console.log("directory already exited !");
9
+ return true;
10
+ }
11
+ fs.mkdirSync(path, { recursive: true });
12
+ }
13
+
14
+ export { createDir };
@@ -0,0 +1,32 @@
1
+ const fs = require("fs");
2
+
3
+ /**
4
+ * Move file to another location.
5
+ */
6
+ export function fileMove(oldPath: string, newPath: string, callback: any) {
7
+ fs.rename(oldPath, newPath, function (err: any) {
8
+ if (err) {
9
+ if (err.code === "EXDEV") {
10
+ copy();
11
+ } else {
12
+ callback(err);
13
+ }
14
+ return;
15
+ }
16
+ callback();
17
+ });
18
+
19
+ function copy() {
20
+ var readStream = fs.createReadStream(oldPath);
21
+ var writeStream = fs.createWriteStream(newPath);
22
+
23
+ readStream.on("error", callback);
24
+ writeStream.on("error", callback);
25
+
26
+ readStream.on("close", function () {
27
+ fs.unlink(oldPath, callback);
28
+ });
29
+
30
+ readStream.pipe(writeStream);
31
+ }
32
+ }
@@ -0,0 +1,39 @@
1
+ var path = require("path");
2
+ var fs = require("fs");
3
+
4
+ /**
5
+ *
6
+ */
7
+ const forEachFileByExt = (base: string, ext: string, cb: (path: string) => {}) => {
8
+ var walk = function (directoryName: string) {
9
+ try {
10
+ fs.readdir(directoryName, function (e: any, files: string[]) {
11
+ if (e) {
12
+ console.log("Error: ", e);
13
+ return;
14
+ }
15
+ files.forEach(function (file: string) {
16
+ var fullPath = path.join(directoryName, file);
17
+ fs.stat(fullPath, function (e: any, f: any) {
18
+ if (e) {
19
+ console.log("Error: ", e);
20
+ return;
21
+ }
22
+ if (f.isDirectory()) {
23
+ walk(fullPath);
24
+ } else {
25
+ if (fullPath.toLowerCase().indexOf(ext.toLowerCase()) > -1) {
26
+ if (cb) cb(fullPath);
27
+ }
28
+ }
29
+ });
30
+ });
31
+ });
32
+ } catch (error) {
33
+ console.log("error", error);
34
+ }
35
+ };
36
+ walk(base);
37
+ };
38
+
39
+ export { forEachFileByExt };
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ export * from "./array";
2
+ export * from "./device";
3
+ export * from "./console";
4
+ export * from "./device/browser";
5
+ export * from "./device/camera";
6
+ export * from "./math";
7
+ export * from "./object";
8
+ export * from "./string";
9
+ export * from "./string/url";
10
+ export * from "./file/createDir";
11
+ export * from "./file/fileMove";
12
+ export * from "./file/findFilesByExt";
13
+
14
+ export * from "./Timer";
15
+ export * from "./permission/requestCamera";
16
+ export * from "./permission/requestDeviceOrientationControl";
17
+ export * from "./console/enableConsole";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Returns amount of different days between 2 dates
3
+ */
4
+ export function diffDate(date1: string, date2: string) {
5
+ date1 = date1 || new Date().toString();
6
+ date2 = date2 || new Date().toString();
7
+ return (new Date(date2).getTime() - new Date(date1).getTime()) / (24 * 60 * 60 * 1000);
8
+ }