ayiin 2.0.14 → 2.0.16
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/methods/tools.d.ts +66 -11
- package/methods/tools.js +127 -17
- package/package.json +1 -1
package/methods/tools.d.ts
CHANGED
|
@@ -1,24 +1,79 @@
|
|
|
1
1
|
declare class Tools {
|
|
2
2
|
/**
|
|
3
|
-
* Format money
|
|
4
|
-
* @returns {string}
|
|
3
|
+
* Format money ke string sesuai locale
|
|
5
4
|
* @memberof Tools
|
|
6
|
-
* @param {number} amount
|
|
7
|
-
*
|
|
5
|
+
* @param {number} amount - jumlah uang
|
|
6
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
7
|
+
* @param {Intl.NumberFormatOptions} options - default currency IDR
|
|
8
|
+
* @returns {string} string
|
|
9
|
+
*/
|
|
8
10
|
formatMoney: (amount: number, locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions) => string;
|
|
9
11
|
/**
|
|
10
|
-
* Generate
|
|
12
|
+
* Generate unique ID dengan pilihan tipe
|
|
13
|
+
* @param {"number"|"string"|"mixed"} type - tipe ID (angka, string, atau campuran)
|
|
14
|
+
* @param {number} length - panjang ID (default 8)
|
|
15
|
+
* @returns {string} ID unik acak
|
|
16
|
+
*/
|
|
17
|
+
uniqueId: ({ type, length, prefix, }: {
|
|
18
|
+
type?: "number" | "string" | "mixed";
|
|
19
|
+
length?: number;
|
|
20
|
+
prefix?: string;
|
|
21
|
+
}) => string;
|
|
22
|
+
/**
|
|
23
|
+
* Generate UUID v4 sederhana
|
|
11
24
|
* @returns {string}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* */
|
|
15
|
-
randomString: (length: number | string, prefix?: string) => string;
|
|
25
|
+
*/
|
|
26
|
+
randomUuid: () => string;
|
|
16
27
|
/**
|
|
17
28
|
* Pick a random from array
|
|
18
29
|
* @param {T[]} array
|
|
19
30
|
* @memberof Tools
|
|
20
|
-
* @returns {T}
|
|
21
|
-
|
|
31
|
+
* @returns {T} item acak dari array
|
|
32
|
+
*/
|
|
22
33
|
randomItem: <T>(array: T[]) => T | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Ambil beberapa item acak unik dari array
|
|
36
|
+
* @param {T[]} array
|
|
37
|
+
* @param {number} count - jumlah item
|
|
38
|
+
* @returns {T[]} array item acak unik dari array
|
|
39
|
+
*/
|
|
40
|
+
randomMany: <T>(array: T[], count: number) => T[];
|
|
41
|
+
/**
|
|
42
|
+
* Validasi apakah string adalah email
|
|
43
|
+
* @param {string} str
|
|
44
|
+
* @returns {boolean} true jika string adalah email, false jika bukan
|
|
45
|
+
*/
|
|
46
|
+
isEmail: (str: string) => boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Validasi apakah string adalah URL
|
|
49
|
+
* @param {string} str
|
|
50
|
+
* @returns {boolean} true jika string adalah URL, false jika bukan
|
|
51
|
+
*/
|
|
52
|
+
isUrl: (str: string) => boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Format tanggal ke string sesuai locale
|
|
55
|
+
* @param {Date} date
|
|
56
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
57
|
+
* @returns {string} string
|
|
58
|
+
*/
|
|
59
|
+
formatDate: (date: Date, locales?: Intl.LocalesArgument) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Hitung waktu relatif (misalnya "5 menit lalu")
|
|
62
|
+
* @param {Date} date
|
|
63
|
+
* @returns {string} string
|
|
64
|
+
*/
|
|
65
|
+
timeAgo: (date: Date) => string;
|
|
66
|
+
/**
|
|
67
|
+
* Convert string menjadi camelCase
|
|
68
|
+
* @param {string} input - string yang akan diubah
|
|
69
|
+
* @returns {string} camelCase string
|
|
70
|
+
*/
|
|
71
|
+
toCamelCase: (input: string) => string;
|
|
72
|
+
/**
|
|
73
|
+
* Capitalize string (huruf pertama jadi kapital)
|
|
74
|
+
* @param {string} input - string yang akan diubah
|
|
75
|
+
* @returns {string} string dengan huruf pertama kapital
|
|
76
|
+
*/
|
|
77
|
+
capitalize: (input: string) => string;
|
|
23
78
|
}
|
|
24
79
|
export default Tools;
|
package/methods/tools.js
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class Tools {
|
|
4
4
|
/**
|
|
5
|
-
* Format money
|
|
6
|
-
* @returns {string}
|
|
5
|
+
* Format money ke string sesuai locale
|
|
7
6
|
* @memberof Tools
|
|
8
|
-
* @param {number} amount
|
|
9
|
-
*
|
|
7
|
+
* @param {number} amount - jumlah uang
|
|
8
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
9
|
+
* @param {Intl.NumberFormatOptions} options - default currency IDR
|
|
10
|
+
* @returns {string} string
|
|
11
|
+
*/
|
|
10
12
|
formatMoney = (amount, locales = "id-ID", options = {
|
|
11
13
|
style: "currency",
|
|
12
14
|
currency: "IDR",
|
|
@@ -15,27 +17,135 @@ class Tools {
|
|
|
15
17
|
return new Intl.NumberFormat(locales, options).format(amount);
|
|
16
18
|
};
|
|
17
19
|
/**
|
|
18
|
-
* Generate
|
|
19
|
-
* @
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
* Generate unique ID dengan pilihan tipe
|
|
21
|
+
* @param {"number"|"string"|"mixed"} type - tipe ID (angka, string, atau campuran)
|
|
22
|
+
* @param {number} length - panjang ID (default 8)
|
|
23
|
+
* @returns {string} ID unik acak
|
|
24
|
+
*/
|
|
25
|
+
uniqueId = ({ type = "mixed", length = 8, prefix, }) => {
|
|
26
|
+
let chars;
|
|
27
|
+
switch (type) {
|
|
28
|
+
case "number":
|
|
29
|
+
chars = "0123456789";
|
|
30
|
+
break;
|
|
31
|
+
case "string":
|
|
32
|
+
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
33
|
+
break;
|
|
34
|
+
default:
|
|
35
|
+
chars =
|
|
36
|
+
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
28
37
|
}
|
|
29
|
-
|
|
38
|
+
let id = "";
|
|
39
|
+
for (let i = 0; i < length; i++) {
|
|
40
|
+
id += chars[Math.floor(Math.random() * chars.length)];
|
|
41
|
+
}
|
|
42
|
+
return prefix ? prefix + id : id;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Generate UUID v4 sederhana
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
randomUuid = () => {
|
|
49
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
50
|
+
const r = (Math.random() * 16) | 0;
|
|
51
|
+
const v = c === "x" ? r : (r & 0x3) | 0x8;
|
|
52
|
+
return v.toString(16);
|
|
53
|
+
});
|
|
30
54
|
};
|
|
31
55
|
/**
|
|
32
56
|
* Pick a random from array
|
|
33
57
|
* @param {T[]} array
|
|
34
58
|
* @memberof Tools
|
|
35
|
-
* @returns {T}
|
|
36
|
-
|
|
59
|
+
* @returns {T} item acak dari array
|
|
60
|
+
*/
|
|
37
61
|
randomItem = (array) => {
|
|
38
62
|
return array[Math.floor(Math.random() * array.length)];
|
|
39
63
|
};
|
|
64
|
+
/**
|
|
65
|
+
* Ambil beberapa item acak unik dari array
|
|
66
|
+
* @param {T[]} array
|
|
67
|
+
* @param {number} count - jumlah item
|
|
68
|
+
* @returns {T[]} array item acak unik dari array
|
|
69
|
+
*/
|
|
70
|
+
randomMany = (array, count) => {
|
|
71
|
+
const copy = [...array];
|
|
72
|
+
for (let i = copy.length - 1; i > 0; i--) {
|
|
73
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
74
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
75
|
+
}
|
|
76
|
+
return copy.slice(0, count);
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Validasi apakah string adalah email
|
|
80
|
+
* @param {string} str
|
|
81
|
+
* @returns {boolean} true jika string adalah email, false jika bukan
|
|
82
|
+
*/
|
|
83
|
+
isEmail = (str) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str);
|
|
84
|
+
/**
|
|
85
|
+
* Validasi apakah string adalah URL
|
|
86
|
+
* @param {string} str
|
|
87
|
+
* @returns {boolean} true jika string adalah URL, false jika bukan
|
|
88
|
+
*/
|
|
89
|
+
isUrl = (str) => {
|
|
90
|
+
try {
|
|
91
|
+
new URL(str);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Format tanggal ke string sesuai locale
|
|
100
|
+
* @param {Date} date
|
|
101
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
102
|
+
* @returns {string} string
|
|
103
|
+
*/
|
|
104
|
+
formatDate = (date, locales = "id-ID") => new Intl.DateTimeFormat(locales, {
|
|
105
|
+
year: "numeric",
|
|
106
|
+
month: "long",
|
|
107
|
+
day: "numeric",
|
|
108
|
+
hour: "2-digit",
|
|
109
|
+
minute: "2-digit",
|
|
110
|
+
}).format(date);
|
|
111
|
+
/**
|
|
112
|
+
* Hitung waktu relatif (misalnya "5 menit lalu")
|
|
113
|
+
* @param {Date} date
|
|
114
|
+
* @returns {string} string
|
|
115
|
+
*/
|
|
116
|
+
timeAgo = (date) => {
|
|
117
|
+
const diff = Date.now() - date.getTime();
|
|
118
|
+
const seconds = Math.floor(diff / 1000);
|
|
119
|
+
if (seconds < 60)
|
|
120
|
+
return `${seconds} detik lalu`;
|
|
121
|
+
const minutes = Math.floor(seconds / 60);
|
|
122
|
+
if (minutes < 60)
|
|
123
|
+
return `${minutes} menit lalu`;
|
|
124
|
+
const hours = Math.floor(minutes / 60);
|
|
125
|
+
if (hours < 24)
|
|
126
|
+
return `${hours} jam lalu`;
|
|
127
|
+
const days = Math.floor(hours / 24);
|
|
128
|
+
return `${days} hari lalu`;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Convert string menjadi camelCase
|
|
132
|
+
* @param {string} input - string yang akan diubah
|
|
133
|
+
* @returns {string} camelCase string
|
|
134
|
+
*/
|
|
135
|
+
toCamelCase = (input) => {
|
|
136
|
+
return input
|
|
137
|
+
.toLowerCase()
|
|
138
|
+
.replace(/[-_\s]+(.)?/g, (_, chr) => (chr ? chr.toUpperCase() : ""));
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Capitalize string (huruf pertama jadi kapital)
|
|
142
|
+
* @param {string} input - string yang akan diubah
|
|
143
|
+
* @returns {string} string dengan huruf pertama kapital
|
|
144
|
+
*/
|
|
145
|
+
capitalize = (input) => {
|
|
146
|
+
if (!input)
|
|
147
|
+
return "";
|
|
148
|
+
return input.charAt(0).toUpperCase() + input.slice(1);
|
|
149
|
+
};
|
|
40
150
|
}
|
|
41
151
|
exports.default = Tools;
|