diginext-utils 2.0.0 → 2.0.2
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.
- package/dist/Checker.d.ts +6 -0
- package/dist/Checker.js +27 -0
- package/dist/Checker.mjs +25 -0
- package/dist/EventDispatcher.d.ts +13 -0
- package/dist/EventDispatcher.js +51 -0
- package/dist/EventDispatcher.mjs +51 -0
- package/dist/FileUpload.d.ts +12 -0
- package/dist/FileUpload.js +60 -0
- package/dist/FileUpload.mjs +60 -0
- package/dist/Slug.d.ts +5 -0
- package/dist/Slug.js +329 -0
- package/dist/Slug.mjs +327 -0
- package/dist/Timer.d.ts +5 -0
- package/dist/Timer.js +11 -0
- package/dist/Timer.mjs +2 -0
- package/dist/Validation.d.ts +6 -0
- package/dist/Validation.js +33 -0
- package/dist/Validation.mjs +33 -0
- package/dist/array.d.ts +93 -0
- package/dist/array.js +210 -0
- package/dist/array.mjs +3 -0
- package/dist/backend/file/createDir.d.ts +6 -0
- package/dist/backend/file/createDir.js +21 -0
- package/dist/backend/file/createDir.mjs +13 -0
- package/dist/backend/file/fileMove.d.ts +6 -0
- package/dist/backend/file/fileMove.js +37 -0
- package/dist/backend/file/fileMove.mjs +29 -0
- package/dist/backend/file/findFilesByExt.d.ts +6 -0
- package/dist/backend/file/findFilesByExt.js +48 -0
- package/dist/backend/file/findFilesByExt.mjs +40 -0
- package/dist/chunk-5AL36RZR.mjs +47 -0
- package/dist/chunk-7IYY7BKN.mjs +136 -0
- package/dist/chunk-ACLBWYEO.mjs +85 -0
- package/dist/chunk-AHFJBIQJ.mjs +9 -0
- package/dist/chunk-AKU6F3WT.mjs +9 -0
- package/dist/chunk-FOWYH6LL.mjs +32 -0
- package/dist/chunk-FTE6FZSH.mjs +17 -0
- package/dist/chunk-JKYSZLBF.mjs +27 -0
- package/dist/chunk-LXQIKFED.mjs +13 -0
- package/dist/chunk-Q5R25OIS.mjs +185 -0
- package/dist/chunk-R2BH5I6O.mjs +9 -0
- package/dist/chunk-UKRVCU5M.mjs +166 -0
- package/dist/chunk-VFKAZAWF.mjs +40 -0
- package/dist/chunk-VZGV2BTL.mjs +27 -0
- package/dist/chunk-Y4ZTQWPA.mjs +68 -0
- package/dist/color.d.ts +12 -0
- package/dist/color.js +69 -0
- package/dist/color.mjs +62 -0
- package/dist/console/enableConsole.d.ts +3 -0
- package/dist/console/enableConsole.js +15 -0
- package/dist/console/enableConsole.mjs +2 -0
- package/dist/console/index.d.ts +5 -0
- package/dist/console/index.js +19 -0
- package/dist/console/index.mjs +2 -0
- package/dist/device/browser.d.ts +7 -0
- package/dist/device/browser.js +40 -0
- package/dist/device/browser.mjs +2 -0
- package/dist/device/camera.d.ts +16 -0
- package/dist/device/camera.js +164 -0
- package/dist/device/camera.mjs +3 -0
- package/dist/device.d.ts +6 -0
- package/dist/device.js +173 -0
- package/dist/device.mjs +2 -0
- package/dist/index.d.ts +13 -280
- package/dist/index.mjs +14 -820
- package/dist/math/diffDate.d.ts +6 -0
- package/dist/math/diffDate.js +10 -0
- package/dist/math/diffDate.mjs +10 -0
- package/dist/math/positiveNumber.d.ts +3 -0
- package/dist/math/positiveNumber.js +28 -0
- package/dist/math/positiveNumber.mjs +16 -0
- package/dist/math.d.ts +55 -0
- package/dist/math.js +51 -0
- package/dist/math.mjs +2 -0
- package/dist/object.d.ts +25 -0
- package/dist/object.js +56 -0
- package/dist/object.mjs +2 -0
- package/dist/permission/requestCamera.d.ts +6 -0
- package/dist/permission/requestCamera.js +29 -0
- package/dist/permission/requestCamera.mjs +2 -0
- package/dist/permission/requestDeviceOrientationControl.d.ts +3 -0
- package/dist/permission/requestDeviceOrientationControl.js +176 -0
- package/dist/permission/requestDeviceOrientationControl.mjs +3 -0
- package/dist/string/formatNumber.d.ts +7 -0
- package/dist/string/formatNumber.js +28 -0
- package/dist/string/formatNumber.mjs +10 -0
- package/dist/string/generatePassword.d.ts +10 -0
- package/dist/string/generatePassword.js +27 -0
- package/dist/string/generatePassword.mjs +16 -0
- package/dist/string/generateUUID.d.ts +3 -0
- package/dist/string/generateUUID.js +14 -0
- package/dist/string/generateUUID.mjs +14 -0
- package/dist/string/name/en.d.ts +3 -0
- package/dist/string/name/en.js +19 -0
- package/dist/string/name/en.mjs +17 -0
- package/dist/string/name/vi.d.ts +3 -0
- package/dist/string/name/vi.js +37 -0
- package/dist/string/name/vi.mjs +20 -0
- package/dist/string/random.d.ts +11 -0
- package/dist/string/random.js +26 -0
- package/dist/string/random.mjs +2 -0
- package/dist/string/trimNull.d.ts +3 -0
- package/dist/string/trimNull.js +20 -0
- package/dist/string/trimNull.mjs +14 -0
- package/dist/string/url.d.ts +33 -0
- package/dist/string/url.js +89 -0
- package/dist/string/url.mjs +3 -0
- package/dist/string.d.ts +35 -0
- package/dist/string.js +107 -0
- package/dist/string.mjs +3 -0
- package/package.json +2 -5
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { isNull } from './chunk-5AL36RZR.mjs';
|
|
2
|
+
|
|
3
|
+
// src/string/url.ts
|
|
4
|
+
var urlRegex = /(https?:\/\/[^\s]+)/g;
|
|
5
|
+
var addQueryParam = (_url, key, value) => {
|
|
6
|
+
_url += (_url.split("?")[1] ? "&" : "?") + `${key}=${value}`;
|
|
7
|
+
return _url;
|
|
8
|
+
};
|
|
9
|
+
var getUrlParams = (parameter, staticURL, decode = true) => {
|
|
10
|
+
if (typeof window == "undefined")
|
|
11
|
+
return "";
|
|
12
|
+
staticURL = staticURL == void 0 ? window.location.host : staticURL;
|
|
13
|
+
var currLocation = staticURL.length > 0 ? staticURL : window.location.search;
|
|
14
|
+
if (currLocation.split("?").length < 2)
|
|
15
|
+
return "";
|
|
16
|
+
var parArr = currLocation.split("?")[1].split("&"), returnBool = true;
|
|
17
|
+
for (var i = 0; i < parArr.length; i++) {
|
|
18
|
+
var parr = parArr[i].split("=");
|
|
19
|
+
if (parr[0] == parameter) {
|
|
20
|
+
return decode ? decodeURIComponent(parr[1]) : parr[1];
|
|
21
|
+
} else {
|
|
22
|
+
returnBool = false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!returnBool)
|
|
26
|
+
return false;
|
|
27
|
+
};
|
|
28
|
+
var isLink = (str) => {
|
|
29
|
+
return urlRegex.test(str);
|
|
30
|
+
};
|
|
31
|
+
var getFileNameWithoutExtension = (url) => {
|
|
32
|
+
url = decodeURIComponent(url);
|
|
33
|
+
if (url) {
|
|
34
|
+
const m = url.toString().match(/.*\/(.+?)\./);
|
|
35
|
+
if (m && m.length > 1) {
|
|
36
|
+
return m[1];
|
|
37
|
+
}
|
|
38
|
+
if (!isNull(url)) {
|
|
39
|
+
return url.split(".").shift();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return "";
|
|
43
|
+
};
|
|
44
|
+
var getFileNameWithExtension = (url) => {
|
|
45
|
+
url = decodeURIComponent(url);
|
|
46
|
+
if (url) {
|
|
47
|
+
const m = url.toString().match(/.*\/(.*)$/);
|
|
48
|
+
if (m && m.length > 1) {
|
|
49
|
+
return m[1].split("/").pop().split("?")[0];
|
|
50
|
+
}
|
|
51
|
+
if (!isNull(url)) {
|
|
52
|
+
return url;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return "";
|
|
56
|
+
};
|
|
57
|
+
var getFileExtension = (url) => {
|
|
58
|
+
return getFileNameWithExtension(url).split(".").pop();
|
|
59
|
+
};
|
|
60
|
+
var isImage = (url) => {
|
|
61
|
+
const arr = ["png", "jpg", "jpeg", "jpe", "jif", "jfif", "gif", "svg"];
|
|
62
|
+
const index = arr.findIndex((item) => {
|
|
63
|
+
return getFileExtension(url).toLowerCase() == item;
|
|
64
|
+
});
|
|
65
|
+
return index >= 0;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { addQueryParam, getFileExtension, getFileNameWithExtension, getFileNameWithoutExtension, getUrlParams, isImage, isLink };
|
package/dist/color.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const random: (hex?: boolean) => string;
|
|
2
|
+
declare const pSBC: (p: any, c0: any, c1?: any, l?: any) => string;
|
|
3
|
+
declare const hexToRgb: (hex: string) => {
|
|
4
|
+
r: number;
|
|
5
|
+
g: number;
|
|
6
|
+
b: number;
|
|
7
|
+
};
|
|
8
|
+
declare const hexDarken: (hex: string, amount: number) => string;
|
|
9
|
+
declare const hexLighten: (hex: string, amount: number) => string;
|
|
10
|
+
declare const RGBToHex: (rgb: string | any) => string;
|
|
11
|
+
|
|
12
|
+
export { RGBToHex, hexDarken, hexLighten, hexToRgb, pSBC, random };
|
package/dist/color.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/color.ts
|
|
6
|
+
var random = (hex = false) => {
|
|
7
|
+
return (hex ? "#" : "") + Math.floor(Math.random() * 16777215).toString(16);
|
|
8
|
+
};
|
|
9
|
+
var pSBC = (p, c0, c1, l) => {
|
|
10
|
+
let r, g, b, P, f, t, h, i = parseInt, m = Math.round, a = typeof c1 == "string";
|
|
11
|
+
if (typeof p != "number" || p < -1 || p > 1 || typeof c0 != "string" || c0[0] != "r" && c0[0] != "#" || c1 && !a)
|
|
12
|
+
return null;
|
|
13
|
+
const pSBCr = (d) => {
|
|
14
|
+
let n = d.length, x = { r: 0, g: 0, b: 0, a: 1 };
|
|
15
|
+
if (n > 9) {
|
|
16
|
+
[r, g, b, a] = d = d.split(","), n = d.length;
|
|
17
|
+
if (n < 3 || n > 4)
|
|
18
|
+
return null;
|
|
19
|
+
x.r = i(r[3] == "a" ? r.slice(5) : r.slice(4)), x.g = i(g), x.b = i(b), x.a = a ? parseFloat(a.toString()) : -1;
|
|
20
|
+
} else {
|
|
21
|
+
if (n == 8 || n == 6 || n < 4)
|
|
22
|
+
return null;
|
|
23
|
+
if (n < 6)
|
|
24
|
+
d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (n > 4 ? d[4] + d[4] : "");
|
|
25
|
+
d = i(d.slice(1), 16);
|
|
26
|
+
if (n == 9 || n == 5)
|
|
27
|
+
x.r = d >> 24 & 255, x.g = d >> 16 & 255, x.b = d >> 8 & 255, x.a = m((d & 255) / 0.255) / 1e3;
|
|
28
|
+
else
|
|
29
|
+
x.r = d >> 16, x.g = d >> 8 & 255, x.b = d & 255, x.a = -1;
|
|
30
|
+
}
|
|
31
|
+
return x;
|
|
32
|
+
};
|
|
33
|
+
h = c0.length > 9, h = a ? c1.length > 9 ? true : c1 == "c" ? !h : false : h, f = pSBCr(c0), P = p < 0, t = c1 && c1 != "c" ? pSBCr(c1) : P ? { r: 0, g: 0, b: 0, a: -1 } : { r: 255, g: 255, b: 255, a: -1 }, p = P ? p * -1 : p, P = 1 - p;
|
|
34
|
+
if (!f || !t)
|
|
35
|
+
return null;
|
|
36
|
+
if (l)
|
|
37
|
+
r = m(P * f.r + p * t.r), g = m(P * f.g + p * t.g), b = m(P * f.b + p * t.b);
|
|
38
|
+
else
|
|
39
|
+
r = m((P * f.r ** 2 + p * t.r ** 2) ** 0.5), g = m((P * f.g ** 2 + p * t.g ** 2) ** 0.5), b = m((P * f.b ** 2 + p * t.b ** 2) ** 0.5);
|
|
40
|
+
a = f.a, t = t.a, f = a >= 0 || t >= 0, a = f ? a < 0 ? t : t < 0 ? a : a * P + t * p : 0;
|
|
41
|
+
if (h)
|
|
42
|
+
return "rgb" + (f ? "a(" : "(") + r + "," + g + "," + b + (f ? "," + m(a * 1e3) / 1e3 : "") + ")";
|
|
43
|
+
else
|
|
44
|
+
return "#" + (4294967296 + r * 16777216 + g * 65536 + b * 256 + (f ? m(a * 255) : 0)).toString(16).slice(1, f ? void 0 : -2);
|
|
45
|
+
};
|
|
46
|
+
var hexToRgb = (hex) => {
|
|
47
|
+
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
48
|
+
return result ? {
|
|
49
|
+
r: parseInt(result[1], 16),
|
|
50
|
+
g: parseInt(result[2], 16),
|
|
51
|
+
b: parseInt(result[3], 16)
|
|
52
|
+
} : null;
|
|
53
|
+
};
|
|
54
|
+
var hexDarken = (hex, amount) => {
|
|
55
|
+
return pSBC(-amount, hex);
|
|
56
|
+
};
|
|
57
|
+
var hexLighten = (hex, amount) => {
|
|
58
|
+
return pSBC(amount, hex);
|
|
59
|
+
};
|
|
60
|
+
var RGBToHex = (rgb) => {
|
|
61
|
+
return pSBC(0, rgb, "c", true);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.RGBToHex = RGBToHex;
|
|
65
|
+
exports.hexDarken = hexDarken;
|
|
66
|
+
exports.hexLighten = hexLighten;
|
|
67
|
+
exports.hexToRgb = hexToRgb;
|
|
68
|
+
exports.pSBC = pSBC;
|
|
69
|
+
exports.random = random;
|
package/dist/color.mjs
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import './chunk-AKU6F3WT.mjs';
|
|
2
|
+
|
|
3
|
+
// src/color.ts
|
|
4
|
+
var random = (hex = false) => {
|
|
5
|
+
return (hex ? "#" : "") + Math.floor(Math.random() * 16777215).toString(16);
|
|
6
|
+
};
|
|
7
|
+
var pSBC = (p, c0, c1, l) => {
|
|
8
|
+
let r, g, b, P, f, t, h, i = parseInt, m = Math.round, a = typeof c1 == "string";
|
|
9
|
+
if (typeof p != "number" || p < -1 || p > 1 || typeof c0 != "string" || c0[0] != "r" && c0[0] != "#" || c1 && !a)
|
|
10
|
+
return null;
|
|
11
|
+
const pSBCr = (d) => {
|
|
12
|
+
let n = d.length, x = { r: 0, g: 0, b: 0, a: 1 };
|
|
13
|
+
if (n > 9) {
|
|
14
|
+
[r, g, b, a] = d = d.split(","), n = d.length;
|
|
15
|
+
if (n < 3 || n > 4)
|
|
16
|
+
return null;
|
|
17
|
+
x.r = i(r[3] == "a" ? r.slice(5) : r.slice(4)), x.g = i(g), x.b = i(b), x.a = a ? parseFloat(a.toString()) : -1;
|
|
18
|
+
} else {
|
|
19
|
+
if (n == 8 || n == 6 || n < 4)
|
|
20
|
+
return null;
|
|
21
|
+
if (n < 6)
|
|
22
|
+
d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (n > 4 ? d[4] + d[4] : "");
|
|
23
|
+
d = i(d.slice(1), 16);
|
|
24
|
+
if (n == 9 || n == 5)
|
|
25
|
+
x.r = d >> 24 & 255, x.g = d >> 16 & 255, x.b = d >> 8 & 255, x.a = m((d & 255) / 0.255) / 1e3;
|
|
26
|
+
else
|
|
27
|
+
x.r = d >> 16, x.g = d >> 8 & 255, x.b = d & 255, x.a = -1;
|
|
28
|
+
}
|
|
29
|
+
return x;
|
|
30
|
+
};
|
|
31
|
+
h = c0.length > 9, h = a ? c1.length > 9 ? true : c1 == "c" ? !h : false : h, f = pSBCr(c0), P = p < 0, t = c1 && c1 != "c" ? pSBCr(c1) : P ? { r: 0, g: 0, b: 0, a: -1 } : { r: 255, g: 255, b: 255, a: -1 }, p = P ? p * -1 : p, P = 1 - p;
|
|
32
|
+
if (!f || !t)
|
|
33
|
+
return null;
|
|
34
|
+
if (l)
|
|
35
|
+
r = m(P * f.r + p * t.r), g = m(P * f.g + p * t.g), b = m(P * f.b + p * t.b);
|
|
36
|
+
else
|
|
37
|
+
r = m((P * f.r ** 2 + p * t.r ** 2) ** 0.5), g = m((P * f.g ** 2 + p * t.g ** 2) ** 0.5), b = m((P * f.b ** 2 + p * t.b ** 2) ** 0.5);
|
|
38
|
+
a = f.a, t = t.a, f = a >= 0 || t >= 0, a = f ? a < 0 ? t : t < 0 ? a : a * P + t * p : 0;
|
|
39
|
+
if (h)
|
|
40
|
+
return "rgb" + (f ? "a(" : "(") + r + "," + g + "," + b + (f ? "," + m(a * 1e3) / 1e3 : "") + ")";
|
|
41
|
+
else
|
|
42
|
+
return "#" + (4294967296 + r * 16777216 + g * 65536 + b * 256 + (f ? m(a * 255) : 0)).toString(16).slice(1, f ? void 0 : -2);
|
|
43
|
+
};
|
|
44
|
+
var hexToRgb = (hex) => {
|
|
45
|
+
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
46
|
+
return result ? {
|
|
47
|
+
r: parseInt(result[1], 16),
|
|
48
|
+
g: parseInt(result[2], 16),
|
|
49
|
+
b: parseInt(result[3], 16)
|
|
50
|
+
} : null;
|
|
51
|
+
};
|
|
52
|
+
var hexDarken = (hex, amount) => {
|
|
53
|
+
return pSBC(-amount, hex);
|
|
54
|
+
};
|
|
55
|
+
var hexLighten = (hex, amount) => {
|
|
56
|
+
return pSBC(amount, hex);
|
|
57
|
+
};
|
|
58
|
+
var RGBToHex = (rgb) => {
|
|
59
|
+
return pSBC(0, rgb, "c", true);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { RGBToHex, hexDarken, hexLighten, hexToRgb, pSBC, random };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var cloneDeep = require('lodash/cloneDeep');
|
|
4
|
+
|
|
5
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
6
|
+
|
|
7
|
+
var cloneDeep__default = /*#__PURE__*/_interopDefaultLegacy(cloneDeep);
|
|
8
|
+
|
|
9
|
+
// src/console/enableConsole.ts
|
|
10
|
+
var _console = cloneDeep__default["default"](console);
|
|
11
|
+
function enableConsole() {
|
|
12
|
+
return _console;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = enableConsole;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/console/index.ts
|
|
6
|
+
var disableConsole = (params) => {
|
|
7
|
+
for (var key in console) {
|
|
8
|
+
console[key] = function() {
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var removeConsole = disableConsole;
|
|
13
|
+
var showCredit = (params) => {
|
|
14
|
+
console.log("Developed by Digitop | https://www.wearetopgroup.com/?utm_src=console");
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
exports.disableConsole = disableConsole;
|
|
18
|
+
exports.removeConsole = removeConsole;
|
|
19
|
+
exports.showCredit = showCredit;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare const isPotrait: () => boolean;
|
|
2
|
+
declare const isLandscape: () => boolean;
|
|
3
|
+
declare const ua: () => any;
|
|
4
|
+
declare const isFacebookWebview: () => boolean;
|
|
5
|
+
declare const isInAppWebview: () => boolean;
|
|
6
|
+
|
|
7
|
+
export { isFacebookWebview, isInAppWebview, isLandscape, isPotrait, ua };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/device/browser.ts
|
|
6
|
+
var isPotrait = () => {
|
|
7
|
+
if (typeof window == "undefined")
|
|
8
|
+
return false;
|
|
9
|
+
if (!window.orientation)
|
|
10
|
+
return window.matchMedia("(orientation: portrait)").matches;
|
|
11
|
+
return !(window.orientation === 90 || window.orientation === -90);
|
|
12
|
+
};
|
|
13
|
+
var isLandscape = () => {
|
|
14
|
+
return !isPotrait();
|
|
15
|
+
};
|
|
16
|
+
var ua = () => {
|
|
17
|
+
if (typeof navigator == "undefined")
|
|
18
|
+
return null;
|
|
19
|
+
if (typeof window == "undefined")
|
|
20
|
+
return null;
|
|
21
|
+
return navigator.userAgent || navigator.vendor || window.opera;
|
|
22
|
+
};
|
|
23
|
+
var isFacebookWebview = () => {
|
|
24
|
+
var ua2 = ua2();
|
|
25
|
+
if (typeof ua2 != "undefined")
|
|
26
|
+
return ua2.indexOf("FBAN") > -1 || ua2.indexOf("FBAV") > -1;
|
|
27
|
+
};
|
|
28
|
+
var isInAppWebview = () => {
|
|
29
|
+
const rules = ["WebView", "(iPhone|iPod|iPad)(?!.*Safari/)", "Android.*(wv|.0.0.0)"];
|
|
30
|
+
const regex = new RegExp(`(${rules.join("|")})`, "ig");
|
|
31
|
+
if (ua())
|
|
32
|
+
return Boolean(ua().match(regex));
|
|
33
|
+
return false;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.isFacebookWebview = isFacebookWebview;
|
|
37
|
+
exports.isInAppWebview = isInAppWebview;
|
|
38
|
+
exports.isLandscape = isLandscape;
|
|
39
|
+
exports.isPotrait = isPotrait;
|
|
40
|
+
exports.ua = ua;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {{
|
|
4
|
+
* container,
|
|
5
|
+
* facingMode : environment | user,
|
|
6
|
+
* audio : boolean,
|
|
7
|
+
* }} param0
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
declare function getWebcam({ container, facingMode, audio, }: {
|
|
11
|
+
container: any;
|
|
12
|
+
facingMode?: string;
|
|
13
|
+
audio?: boolean;
|
|
14
|
+
}): Promise<unknown>;
|
|
15
|
+
|
|
16
|
+
export { getWebcam };
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/permission/requestCamera.ts
|
|
6
|
+
var requestCamera = ({ audio = true, video = true }) => {
|
|
7
|
+
if (typeof window == "undefined")
|
|
8
|
+
return false;
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
if (navigator.mediaDevices.getUserMedia === void 0) {
|
|
11
|
+
navigator.mediaDevices.getUserMedia = function(constraints) {
|
|
12
|
+
var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
|
|
13
|
+
if (!getUserMedia) {
|
|
14
|
+
return Promise.reject(new Error("getUserMedia is not implemented in this browser"));
|
|
15
|
+
}
|
|
16
|
+
return new Promise(function(resolve2, reject2) {
|
|
17
|
+
getUserMedia.call(navigator, constraints, resolve2, reject2);
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
navigator.mediaDevices.getUserMedia({ audio, video }).then(function(stream) {
|
|
22
|
+
resolve(true);
|
|
23
|
+
}).catch(function(err) {
|
|
24
|
+
console.log(err.name + ": " + err.message);
|
|
25
|
+
resolve(false);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
var requestCamera_default = requestCamera;
|
|
30
|
+
|
|
31
|
+
// src/device/camera.ts
|
|
32
|
+
function getWebcam({
|
|
33
|
+
container,
|
|
34
|
+
facingMode = "environment",
|
|
35
|
+
audio = false
|
|
36
|
+
}) {
|
|
37
|
+
if (typeof window == "undefined")
|
|
38
|
+
return;
|
|
39
|
+
container = container || document.body;
|
|
40
|
+
return new Promise(async (resolve, reject) => {
|
|
41
|
+
const video = document.createElement("video");
|
|
42
|
+
video.style.position = "absolute";
|
|
43
|
+
video.style.top = "0";
|
|
44
|
+
video.style.left = "0";
|
|
45
|
+
video.style.width = "100%";
|
|
46
|
+
video.style.height = "100%";
|
|
47
|
+
container.append(video);
|
|
48
|
+
let inputCameras = [];
|
|
49
|
+
let currentCamera;
|
|
50
|
+
const requestedMediaConstraints = {
|
|
51
|
+
video: {
|
|
52
|
+
facingMode: { exact: facingMode }
|
|
53
|
+
},
|
|
54
|
+
audio
|
|
55
|
+
};
|
|
56
|
+
console.log("[Camera.js] Requesting:", requestedMediaConstraints);
|
|
57
|
+
const res = await requestCamera_default({ audio });
|
|
58
|
+
if (!res) {
|
|
59
|
+
setTimeout(function() {
|
|
60
|
+
handleError({ name: "Error", message: "NotSupported" });
|
|
61
|
+
}, 50);
|
|
62
|
+
}
|
|
63
|
+
navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
|
|
64
|
+
function parseDevices(devices) {
|
|
65
|
+
inputCameras = [];
|
|
66
|
+
let backCameras = [];
|
|
67
|
+
devices.forEach(function(device) {
|
|
68
|
+
if (device.kind == "videoinput" && typeof device.deviceId != "undefined" && device.deviceId != "") {
|
|
69
|
+
inputCameras.push(device);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
console.log("[Camera.js] inputCameras:", inputCameras);
|
|
73
|
+
if (inputCameras.length > 0) {
|
|
74
|
+
let cams = "";
|
|
75
|
+
let backCamera;
|
|
76
|
+
inputCameras.map((cam, index) => {
|
|
77
|
+
cams += `[${cam.deviceId}] ${cam.kind} | ${cam.label}
|
|
78
|
+
`;
|
|
79
|
+
let label = cam.label.toLowerCase();
|
|
80
|
+
if (label.indexOf("back") > -1 || label.indexOf("facetime") > -1) {
|
|
81
|
+
backCamera = cam;
|
|
82
|
+
backCameras.push(backCamera);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
if (backCameras.length > 1) {
|
|
86
|
+
backCamera = backCameras[backCameras.length - 1];
|
|
87
|
+
}
|
|
88
|
+
console.log(`[Camera.js] All input sources:`, cams);
|
|
89
|
+
console.log(`[Camera.js] This device has ${backCameras.length} back camera${backCameras.length > 1 ? "s" : ""}.`);
|
|
90
|
+
console.log("[Camera.js] backCameras:", JSON.stringify(backCameras));
|
|
91
|
+
currentCamera = backCamera;
|
|
92
|
+
getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch((e) => {
|
|
93
|
+
if (backCameras.length > 1) {
|
|
94
|
+
backCamera = backCameras[backCameras.length - 2];
|
|
95
|
+
getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
|
|
96
|
+
} else if (backCameras.length > 2) {
|
|
97
|
+
backCamera = backCameras[backCameras.length - 3];
|
|
98
|
+
getStreamOfCameraId(backCamera.deviceId).then(onStreamReceived).catch(handleError);
|
|
99
|
+
} else {
|
|
100
|
+
handleError(e);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
navigator.mediaDevices.getUserMedia(requestedMediaConstraints).then(onStreamReceived).catch(handleError);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function onStreamReceived(stream2) {
|
|
108
|
+
if (inputCameras.length == 0) {
|
|
109
|
+
console.log("[Camera.js] Not found any back cameras, request again?");
|
|
110
|
+
navigator.mediaDevices.enumerateDevices().then(parseDevices).catch(handleError);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
playWebcamVideo(stream2);
|
|
114
|
+
}
|
|
115
|
+
function playWebcamVideo(_stream) {
|
|
116
|
+
if ("srcObject" in video) {
|
|
117
|
+
video.srcObject = _stream;
|
|
118
|
+
} else {
|
|
119
|
+
video.src = window.URL.createObjectURL(_stream);
|
|
120
|
+
}
|
|
121
|
+
video.setAttribute("playsinline", "true");
|
|
122
|
+
video.setAttribute("muted", "true");
|
|
123
|
+
video.setAttribute("autoplay", "true");
|
|
124
|
+
video.muted = true;
|
|
125
|
+
video.autoplay = true;
|
|
126
|
+
video.style.objectFit = "cover";
|
|
127
|
+
video.play();
|
|
128
|
+
video.addEventListener("canplay", function(e) {
|
|
129
|
+
});
|
|
130
|
+
video.addEventListener("canplaythrough", function(e) {
|
|
131
|
+
});
|
|
132
|
+
video.addEventListener("error", (e) => console.log("[Camera.js] <video> error:", e));
|
|
133
|
+
video.addEventListener("stalled", function(e) {
|
|
134
|
+
console.log("[Camera.js] <video> stalled:", e);
|
|
135
|
+
reject();
|
|
136
|
+
});
|
|
137
|
+
video.addEventListener("loadedmetadata", function(e) {
|
|
138
|
+
if (currentCamera.label.toLowerCase().indexOf("facetime") > -1) {
|
|
139
|
+
video.style.transform = "scaleX(-1)";
|
|
140
|
+
video.style.webkitTransform = "scaleX(-1)";
|
|
141
|
+
}
|
|
142
|
+
video.play();
|
|
143
|
+
resolve(video);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function getStreamOfCameraId(id) {
|
|
147
|
+
const constraints = {
|
|
148
|
+
video: { deviceId: { exact: id } },
|
|
149
|
+
audio: false
|
|
150
|
+
};
|
|
151
|
+
return new Promise((resolve2, reject2) => {
|
|
152
|
+
navigator.mediaDevices.getUserMedia(constraints).then(resolve2).catch(reject2);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function handleError(err) {
|
|
156
|
+
console.error(err);
|
|
157
|
+
const errMsg = "[Camera.js] " + err.name + ": " + err.message;
|
|
158
|
+
console.error(errMsg);
|
|
159
|
+
reject();
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
exports.getWebcam = getWebcam;
|