toolbox-x 1.0.0

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 (190) hide show
  1. package/LICENSE +201 -0
  2. package/dist/Color-B3mgF9Dh.d.cts +486 -0
  3. package/dist/Color-D38Xrw65.d.mts +486 -0
  4. package/dist/Stylog-Df7eq3-j.d.cts +519 -0
  5. package/dist/Stylog-jvlLcMQq.d.mts +519 -0
  6. package/dist/array-DvW0zIu6.d.mts +130 -0
  7. package/dist/array-rUnEVisO.d.cts +130 -0
  8. package/dist/basics-D_eSv0cu.cjs +132 -0
  9. package/dist/basics-Dp_aEK81.mjs +115 -0
  10. package/dist/basics-WEYWlnRO.d.cts +95 -0
  11. package/dist/basics-uBSfkBEI.d.mts +95 -0
  12. package/dist/case-BWIt8Ash.mjs +449 -0
  13. package/dist/case-C-S-b5YP.d.cts +327 -0
  14. package/dist/case-CS8Ii3A7.cjs +526 -0
  15. package/dist/case-CybASFPD.d.mts +327 -0
  16. package/dist/change-case.cjs +32 -0
  17. package/dist/change-case.d.cts +18 -0
  18. package/dist/change-case.d.mts +18 -0
  19. package/dist/change-case.mjs +19 -0
  20. package/dist/colors.cjs +574 -0
  21. package/dist/colors.d.cts +355 -0
  22. package/dist/colors.d.mts +355 -0
  23. package/dist/colors.mjs +547 -0
  24. package/dist/constants-2gAw23_7.mjs +144 -0
  25. package/dist/constants-B34K0QPi.d.cts +21 -0
  26. package/dist/constants-BIBDKY1u.cjs +924 -0
  27. package/dist/constants-BWT-810U.cjs +158 -0
  28. package/dist/constants-BwbHnXlM.mjs +662 -0
  29. package/dist/constants-BxN9l5el.cjs +74 -0
  30. package/dist/constants-CLS_bgKD.d.mts +847 -0
  31. package/dist/constants-D73iFu8g.mjs +171 -0
  32. package/dist/constants-DAfRxaa8.mjs +62 -0
  33. package/dist/constants-DQYeCjlx.cjs +207 -0
  34. package/dist/constants-Deeie-iH.d.mts +21 -0
  35. package/dist/constants-DpTG9RP6.d.mts +29 -0
  36. package/dist/constants-DqwnkJ_d.cjs +740 -0
  37. package/dist/constants-DvRUY_FY.cjs +150 -0
  38. package/dist/constants-VcRtQu0K.d.cts +29 -0
  39. package/dist/constants-X5hm1UtB.mjs +912 -0
  40. package/dist/constants-eNd-iYsV.mjs +134 -0
  41. package/dist/constants-qm8FafmD.d.cts +847 -0
  42. package/dist/constants.cjs +415 -0
  43. package/dist/constants.d.cts +184 -0
  44. package/dist/constants.d.mts +184 -0
  45. package/dist/constants.mjs +378 -0
  46. package/dist/convert-BOCgUv2D.cjs +252 -0
  47. package/dist/convert-Bn4jFomQ.mjs +169 -0
  48. package/dist/convert-BrzlG-m_.cjs +475 -0
  49. package/dist/convert-DhaUoPVU.mjs +368 -0
  50. package/dist/converter-1P90_RcP.d.mts +402 -0
  51. package/dist/converter-CmkcAppi.d.cts +402 -0
  52. package/dist/converter.cjs +780 -0
  53. package/dist/converter.d.cts +29 -0
  54. package/dist/converter.d.mts +29 -0
  55. package/dist/converter.mjs +771 -0
  56. package/dist/countries-CIpmtEzV.cjs +1469 -0
  57. package/dist/countries-Cy0xiqS3.mjs +1463 -0
  58. package/dist/css-colors-Bx947Ng3.d.cts +179 -0
  59. package/dist/css-colors-CXCDqQbG.cjs +186 -0
  60. package/dist/css-colors-CXTp1vvy.d.mts +179 -0
  61. package/dist/css-colors-DfUW3nTR.mjs +180 -0
  62. package/dist/date.cjs +332 -0
  63. package/dist/date.d.cts +213 -0
  64. package/dist/date.d.mts +213 -0
  65. package/dist/date.mjs +298 -0
  66. package/dist/dom.cjs +461 -0
  67. package/dist/dom.d.cts +228 -0
  68. package/dist/dom.d.mts +228 -0
  69. package/dist/dom.mjs +429 -0
  70. package/dist/form-BMFVGUrN.d.mts +118 -0
  71. package/dist/form-DRFbryvK.d.cts +118 -0
  72. package/dist/guards-3kaUX66g.mjs +157 -0
  73. package/dist/guards-C8gkvIHb.cjs +240 -0
  74. package/dist/guards-DdyU4h4o.mjs +110 -0
  75. package/dist/guards-Efhp1mNy.cjs +151 -0
  76. package/dist/guards.cjs +172 -0
  77. package/dist/guards.d.cts +399 -0
  78. package/dist/guards.d.mts +399 -0
  79. package/dist/guards.mjs +75 -0
  80. package/dist/hash-B6JPEyAz.d.mts +131 -0
  81. package/dist/hash-NTpeKYB_.d.cts +131 -0
  82. package/dist/hash.cjs +2126 -0
  83. package/dist/hash.d.cts +1239 -0
  84. package/dist/hash.d.mts +1239 -0
  85. package/dist/hash.mjs +2095 -0
  86. package/dist/http-status-BAZdtr7-.d.mts +65 -0
  87. package/dist/http-status-U_3MtoGb.d.cts +65 -0
  88. package/dist/http-status.cjs +173 -0
  89. package/dist/http-status.d.cts +142 -0
  90. package/dist/http-status.d.mts +142 -0
  91. package/dist/http-status.mjs +171 -0
  92. package/dist/index.cjs +2551 -0
  93. package/dist/index.d.cts +1493 -0
  94. package/dist/index.d.mts +1493 -0
  95. package/dist/index.mjs +2357 -0
  96. package/dist/object-B0TV3eHx.d.mts +8052 -0
  97. package/dist/object-Blq0Amdv.d.cts +8052 -0
  98. package/dist/objectify-CDs0Fbr1.mjs +417 -0
  99. package/dist/objectify-DIJ-OBmo.cjs +524 -0
  100. package/dist/paginator.cjs +245 -0
  101. package/dist/paginator.d.cts +144 -0
  102. package/dist/paginator.d.mts +144 -0
  103. package/dist/paginator.mjs +243 -0
  104. package/dist/parse-2ubxXZRp.cjs +211 -0
  105. package/dist/parse-N7g942uy.mjs +164 -0
  106. package/dist/pluralizer-BjMIc6uT.d.mts +42 -0
  107. package/dist/pluralizer-Cb6ZmrDl.d.cts +42 -0
  108. package/dist/pluralizer.cjs +678 -0
  109. package/dist/pluralizer.d.cts +152 -0
  110. package/dist/pluralizer.d.mts +152 -0
  111. package/dist/pluralizer.mjs +676 -0
  112. package/dist/primitives-B26uZolQ.cjs +228 -0
  113. package/dist/primitives-KsFUp3kQ.mjs +144 -0
  114. package/dist/specials-D48_IZbd.d.mts +108 -0
  115. package/dist/specials-DzLr1ZgU.cjs +477 -0
  116. package/dist/specials-LVONlKbQ.d.cts +108 -0
  117. package/dist/specials-uhDuRg8H.mjs +292 -0
  118. package/dist/string-CBAbxaG1.d.mts +258 -0
  119. package/dist/string-CsNsm_65.d.cts +258 -0
  120. package/dist/stylog.cjs +621 -0
  121. package/dist/stylog.d.cts +49 -0
  122. package/dist/stylog.d.mts +49 -0
  123. package/dist/stylog.mjs +614 -0
  124. package/dist/timezone-B2OYK6Fh.mjs +5589 -0
  125. package/dist/timezone-Beh9IGpw.cjs +5625 -0
  126. package/dist/types/array.cjs +16 -0
  127. package/dist/types/array.d.cts +18 -0
  128. package/dist/types/array.d.mts +18 -0
  129. package/dist/types/array.mjs +17 -0
  130. package/dist/types/colors.cjs +16 -0
  131. package/dist/types/colors.d.cts +18 -0
  132. package/dist/types/colors.d.mts +18 -0
  133. package/dist/types/colors.mjs +17 -0
  134. package/dist/types/converter.cjs +16 -0
  135. package/dist/types/converter.d.cts +18 -0
  136. package/dist/types/converter.d.mts +18 -0
  137. package/dist/types/converter.mjs +17 -0
  138. package/dist/types/form.cjs +16 -0
  139. package/dist/types/form.d.cts +18 -0
  140. package/dist/types/form.d.mts +18 -0
  141. package/dist/types/form.mjs +17 -0
  142. package/dist/types/hash.cjs +16 -0
  143. package/dist/types/hash.d.cts +18 -0
  144. package/dist/types/hash.d.mts +18 -0
  145. package/dist/types/hash.mjs +17 -0
  146. package/dist/types/http-status.cjs +16 -0
  147. package/dist/types/http-status.d.cts +18 -0
  148. package/dist/types/http-status.d.mts +18 -0
  149. package/dist/types/http-status.mjs +17 -0
  150. package/dist/types/index.cjs +16 -0
  151. package/dist/types/index.d.cts +18 -0
  152. package/dist/types/index.d.mts +18 -0
  153. package/dist/types/index.mjs +17 -0
  154. package/dist/types/number.cjs +16 -0
  155. package/dist/types/number.d.cts +18 -0
  156. package/dist/types/number.d.mts +18 -0
  157. package/dist/types/number.mjs +17 -0
  158. package/dist/types/object.cjs +16 -0
  159. package/dist/types/object.d.cts +18 -0
  160. package/dist/types/object.d.mts +18 -0
  161. package/dist/types/object.mjs +17 -0
  162. package/dist/types/pluralizer.cjs +16 -0
  163. package/dist/types/pluralizer.d.cts +18 -0
  164. package/dist/types/pluralizer.d.mts +18 -0
  165. package/dist/types/pluralizer.mjs +17 -0
  166. package/dist/types/string.cjs +16 -0
  167. package/dist/types/string.d.cts +18 -0
  168. package/dist/types/string.d.mts +18 -0
  169. package/dist/types/string.mjs +17 -0
  170. package/dist/types/stylog.cjs +16 -0
  171. package/dist/types/stylog.d.cts +18 -0
  172. package/dist/types/stylog.d.mts +18 -0
  173. package/dist/types/stylog.mjs +17 -0
  174. package/dist/types/utils.cjs +16 -0
  175. package/dist/types/utils.d.cts +18 -0
  176. package/dist/types/utils.d.mts +18 -0
  177. package/dist/types/utils.mjs +17 -0
  178. package/dist/types/verbalizer.cjs +16 -0
  179. package/dist/types/verbalizer.d.cts +30 -0
  180. package/dist/types/verbalizer.d.mts +30 -0
  181. package/dist/types/verbalizer.mjs +17 -0
  182. package/dist/utilities-CLUmdQeV.cjs +140 -0
  183. package/dist/utilities-m5yFKqLd.mjs +105 -0
  184. package/dist/utils-ClW9LA6f.mjs +449 -0
  185. package/dist/utils-DLFRgXUC.cjs +568 -0
  186. package/dist/verbalizer.cjs +998 -0
  187. package/dist/verbalizer.d.cts +148 -0
  188. package/dist/verbalizer.d.mts +148 -0
  189. package/dist/verbalizer.mjs +996 -0
  190. package/package.json +249 -0
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Copyright 2026 - present Nazmul Hassan
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const require_primitives = require('./primitives-B26uZolQ.cjs');
18
+ const require_utilities = require('./utilities-CLUmdQeV.cjs');
19
+ const require_basics = require('./basics-D_eSv0cu.cjs');
20
+
21
+ //#region src/number/guards.ts
22
+ /**
23
+ * * Check if a number is even or not.
24
+ *
25
+ * @param input The number or numeric string to check.
26
+ * @returns Boolean: `true` if even and `false` if not even.
27
+ */
28
+ const isEven = (input) => {
29
+ const parsed = require_utilities.normalizeNumber(input);
30
+ if (require_primitives.isUndefined(parsed)) return false;
31
+ return parsed % 2 === 0;
32
+ };
33
+ /**
34
+ * * Checks if a number is odd or not.
35
+ *
36
+ * @param input The number or numeric string to check.
37
+ * @returns Boolean: `true` if odd and `false` if not odd.
38
+ */
39
+ const isOdd = (input) => {
40
+ const parsed = require_utilities.normalizeNumber(input);
41
+ if (require_primitives.isUndefined(parsed)) return false;
42
+ return parsed % 2 !== 0;
43
+ };
44
+ /**
45
+ * * Checks if a number is a multiple of another number.
46
+ *
47
+ * @param input - The number to check.
48
+ * @param multipleOf - The number to check against.
49
+ * @returns `true` if `input` is a multiple of `multipleOf`, otherwise `false`.
50
+ */
51
+ const isMultiple = (input, multipleOf) => {
52
+ return input % multipleOf === 0;
53
+ };
54
+ /**
55
+ * * Checks if a number is a perfect square.
56
+ *
57
+ * @param num The number to check.
58
+ * @returns `true` if the number is a perfect square, otherwise `false`.
59
+ */
60
+ function isPerfectSquare(num) {
61
+ return Number.isInteger(Math.sqrt(num));
62
+ }
63
+ /**
64
+ * * Checks if a number is part of the Fibonacci sequence.
65
+ *
66
+ * @param num The number to check.
67
+ * @returns `true` if the number is a Fibonacci number, otherwise `false`.
68
+ */
69
+ function isFibonacci(num) {
70
+ return isPerfectSquare(5 * num * num + 4) || isPerfectSquare(5 * num * num - 4);
71
+ }
72
+ /**
73
+ * * Checks whether any input is not a finite number.
74
+ *
75
+ * @param numbers - The list of numbers to validate.
76
+ * @returns `true` if any input is not finite.
77
+ */
78
+ function areInvalidNumbers(...numbers) {
79
+ return numbers?.some((n) => !Number.isFinite(n));
80
+ }
81
+
82
+ //#endregion
83
+ //#region src/string/convert.ts
84
+ /**
85
+ * * Replaces all occurrences of a string or pattern in the given input string.
86
+ *
87
+ * - If `find` is a string, it is converted into a global regular expression (`/find/g`).
88
+ * - If `find` is a `RegExp`, the global (`g`) flag is ensured.
89
+ * - Trims the input before performing replacements.
90
+ *
91
+ * @param input - The string in which replacements should be performed.
92
+ * @param find - The substring or regex pattern to search for.
93
+ * @param replace - The string to replace matches with.
94
+ * @returns The modified/refined string with replacements applied.
95
+ */
96
+ const replaceAllInString = (input, find, replace) => {
97
+ const trimmedString = require_basics.trimString(input);
98
+ const regex = require_primitives.isString(find) ? new RegExp(find, "g") : new RegExp(find, find?.flags.includes("g") ? find?.flags : find?.flags + "g");
99
+ return trimmedString?.replace(regex, replace);
100
+ };
101
+ /**
102
+ * * Converts a string into a URL-friendly slug.
103
+ * @param input - The string to be converted.
104
+ * @returns The slugified string.
105
+ */
106
+ const slugifyString = (input) => {
107
+ return require_basics.trimString(normalizeString(input))?.toLowerCase()?.replace(/[^a-z0-9]+/g, "-")?.replace(/^-+|-+$/g, "");
108
+ };
109
+ /**
110
+ * * Masks part of a string for privacy.
111
+ * @param input - The string to mask.
112
+ * @param options - Options for masking a string.
113
+ * @returns The masked string.
114
+ */
115
+ const maskString = (input, options) => {
116
+ const { start = 1, end = 1, maskCharacter: maskChar = "*" } = options || {};
117
+ const trimmedString = require_basics.trimString(input);
118
+ if (trimmedString?.length <= start + end) return maskChar?.repeat(trimmedString?.length);
119
+ return trimmedString.slice(0, start) + maskChar?.repeat(trimmedString?.length - start - end) + (end > 0 ? trimmedString.slice(-end) : "");
120
+ };
121
+ /**
122
+ * * Reverses a given string.
123
+ * @param input - The string to reverse.
124
+ * @returns The reversed string.
125
+ */
126
+ const reverseString = (input) => {
127
+ return require_basics.trimString(input)?.split("")?.reverse()?.join("");
128
+ };
129
+ /**
130
+ * * Normalizes a string by removing diacritics (accents).
131
+ * @param str The input string.
132
+ * @returns The normalized string.
133
+ */
134
+ function normalizeString(str) {
135
+ return str?.normalize("NFD")?.replace(/[\u0300-\u036f]/g, "");
136
+ }
137
+ /**
138
+ * * Extracts all email addresses from a string.
139
+ * @param str The input string.
140
+ * @returns An array of extracted email addresses.
141
+ */
142
+ function extractEmails(str) {
143
+ return str?.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g) || [];
144
+ }
145
+ /**
146
+ * * Extracts all URLs from a string.
147
+ * @param str The input string.
148
+ * @returns An array of extracted URLs.
149
+ */
150
+ function extractURLs(str) {
151
+ return str?.match(/https?:\/\/[^\s/$.?#].[^\s]*/g) || [];
152
+ }
153
+ /**
154
+ * * Returns a grammatically correct unit string, optionally prefixed with the number.
155
+ *
156
+ * @remarks For complex and versatile pluralization, please refer to {@link https://toolbox.nazmul-nhb.dev/docs/utilities/string/pluralizer pluralizer} or {@link https://toolbox.nazmul-nhb.dev/docs/classes/Pluralizer Pluralizer Class} instead.
157
+ *
158
+ * @param count The numeric value to determine singular or plural.
159
+ * @param unit The unit name (e.g., "day", "hour").
160
+ * @param withNumber Whether to prefix the count before the unit. Defaults to `true`.
161
+ * @returns Formatted unit string like `"1 day"`, `"2 months"`, or `"hour"`.
162
+ */
163
+ function formatUnitWithPlural(count, unit, withNumber = true) {
164
+ const pluralized = Math.abs(count) === 1 ? unit : `${unit}s`;
165
+ return withNumber ? `${count} ${pluralized}` : pluralized;
166
+ }
167
+
168
+ //#endregion
169
+ Object.defineProperty(exports, 'areInvalidNumbers', {
170
+ enumerable: true,
171
+ get: function () {
172
+ return areInvalidNumbers;
173
+ }
174
+ });
175
+ Object.defineProperty(exports, 'extractEmails', {
176
+ enumerable: true,
177
+ get: function () {
178
+ return extractEmails;
179
+ }
180
+ });
181
+ Object.defineProperty(exports, 'extractURLs', {
182
+ enumerable: true,
183
+ get: function () {
184
+ return extractURLs;
185
+ }
186
+ });
187
+ Object.defineProperty(exports, 'formatUnitWithPlural', {
188
+ enumerable: true,
189
+ get: function () {
190
+ return formatUnitWithPlural;
191
+ }
192
+ });
193
+ Object.defineProperty(exports, 'isEven', {
194
+ enumerable: true,
195
+ get: function () {
196
+ return isEven;
197
+ }
198
+ });
199
+ Object.defineProperty(exports, 'isFibonacci', {
200
+ enumerable: true,
201
+ get: function () {
202
+ return isFibonacci;
203
+ }
204
+ });
205
+ Object.defineProperty(exports, 'isMultiple', {
206
+ enumerable: true,
207
+ get: function () {
208
+ return isMultiple;
209
+ }
210
+ });
211
+ Object.defineProperty(exports, 'isOdd', {
212
+ enumerable: true,
213
+ get: function () {
214
+ return isOdd;
215
+ }
216
+ });
217
+ Object.defineProperty(exports, 'isPerfectSquare', {
218
+ enumerable: true,
219
+ get: function () {
220
+ return isPerfectSquare;
221
+ }
222
+ });
223
+ Object.defineProperty(exports, 'maskString', {
224
+ enumerable: true,
225
+ get: function () {
226
+ return maskString;
227
+ }
228
+ });
229
+ Object.defineProperty(exports, 'normalizeString', {
230
+ enumerable: true,
231
+ get: function () {
232
+ return normalizeString;
233
+ }
234
+ });
235
+ Object.defineProperty(exports, 'replaceAllInString', {
236
+ enumerable: true,
237
+ get: function () {
238
+ return replaceAllInString;
239
+ }
240
+ });
241
+ Object.defineProperty(exports, 'reverseString', {
242
+ enumerable: true,
243
+ get: function () {
244
+ return reverseString;
245
+ }
246
+ });
247
+ Object.defineProperty(exports, 'slugifyString', {
248
+ enumerable: true,
249
+ get: function () {
250
+ return slugifyString;
251
+ }
252
+ });
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Copyright 2026 - present Nazmul Hassan
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { d as isString, m as isUndefined } from "./primitives-KsFUp3kQ.mjs";
18
+ import { a as normalizeNumber } from "./utilities-m5yFKqLd.mjs";
19
+ import { n as trimString } from "./basics-Dp_aEK81.mjs";
20
+
21
+ //#region src/number/guards.ts
22
+ /**
23
+ * * Check if a number is even or not.
24
+ *
25
+ * @param input The number or numeric string to check.
26
+ * @returns Boolean: `true` if even and `false` if not even.
27
+ */
28
+ const isEven = (input) => {
29
+ const parsed = normalizeNumber(input);
30
+ if (isUndefined(parsed)) return false;
31
+ return parsed % 2 === 0;
32
+ };
33
+ /**
34
+ * * Checks if a number is odd or not.
35
+ *
36
+ * @param input The number or numeric string to check.
37
+ * @returns Boolean: `true` if odd and `false` if not odd.
38
+ */
39
+ const isOdd = (input) => {
40
+ const parsed = normalizeNumber(input);
41
+ if (isUndefined(parsed)) return false;
42
+ return parsed % 2 !== 0;
43
+ };
44
+ /**
45
+ * * Checks if a number is a multiple of another number.
46
+ *
47
+ * @param input - The number to check.
48
+ * @param multipleOf - The number to check against.
49
+ * @returns `true` if `input` is a multiple of `multipleOf`, otherwise `false`.
50
+ */
51
+ const isMultiple = (input, multipleOf) => {
52
+ return input % multipleOf === 0;
53
+ };
54
+ /**
55
+ * * Checks if a number is a perfect square.
56
+ *
57
+ * @param num The number to check.
58
+ * @returns `true` if the number is a perfect square, otherwise `false`.
59
+ */
60
+ function isPerfectSquare(num) {
61
+ return Number.isInteger(Math.sqrt(num));
62
+ }
63
+ /**
64
+ * * Checks if a number is part of the Fibonacci sequence.
65
+ *
66
+ * @param num The number to check.
67
+ * @returns `true` if the number is a Fibonacci number, otherwise `false`.
68
+ */
69
+ function isFibonacci(num) {
70
+ return isPerfectSquare(5 * num * num + 4) || isPerfectSquare(5 * num * num - 4);
71
+ }
72
+ /**
73
+ * * Checks whether any input is not a finite number.
74
+ *
75
+ * @param numbers - The list of numbers to validate.
76
+ * @returns `true` if any input is not finite.
77
+ */
78
+ function areInvalidNumbers(...numbers) {
79
+ return numbers?.some((n) => !Number.isFinite(n));
80
+ }
81
+
82
+ //#endregion
83
+ //#region src/string/convert.ts
84
+ /**
85
+ * * Replaces all occurrences of a string or pattern in the given input string.
86
+ *
87
+ * - If `find` is a string, it is converted into a global regular expression (`/find/g`).
88
+ * - If `find` is a `RegExp`, the global (`g`) flag is ensured.
89
+ * - Trims the input before performing replacements.
90
+ *
91
+ * @param input - The string in which replacements should be performed.
92
+ * @param find - The substring or regex pattern to search for.
93
+ * @param replace - The string to replace matches with.
94
+ * @returns The modified/refined string with replacements applied.
95
+ */
96
+ const replaceAllInString = (input, find, replace) => {
97
+ const trimmedString = trimString(input);
98
+ const regex = isString(find) ? new RegExp(find, "g") : new RegExp(find, find?.flags.includes("g") ? find?.flags : find?.flags + "g");
99
+ return trimmedString?.replace(regex, replace);
100
+ };
101
+ /**
102
+ * * Converts a string into a URL-friendly slug.
103
+ * @param input - The string to be converted.
104
+ * @returns The slugified string.
105
+ */
106
+ const slugifyString = (input) => {
107
+ return trimString(normalizeString(input))?.toLowerCase()?.replace(/[^a-z0-9]+/g, "-")?.replace(/^-+|-+$/g, "");
108
+ };
109
+ /**
110
+ * * Masks part of a string for privacy.
111
+ * @param input - The string to mask.
112
+ * @param options - Options for masking a string.
113
+ * @returns The masked string.
114
+ */
115
+ const maskString = (input, options) => {
116
+ const { start = 1, end = 1, maskCharacter: maskChar = "*" } = options || {};
117
+ const trimmedString = trimString(input);
118
+ if (trimmedString?.length <= start + end) return maskChar?.repeat(trimmedString?.length);
119
+ return trimmedString.slice(0, start) + maskChar?.repeat(trimmedString?.length - start - end) + (end > 0 ? trimmedString.slice(-end) : "");
120
+ };
121
+ /**
122
+ * * Reverses a given string.
123
+ * @param input - The string to reverse.
124
+ * @returns The reversed string.
125
+ */
126
+ const reverseString = (input) => {
127
+ return trimString(input)?.split("")?.reverse()?.join("");
128
+ };
129
+ /**
130
+ * * Normalizes a string by removing diacritics (accents).
131
+ * @param str The input string.
132
+ * @returns The normalized string.
133
+ */
134
+ function normalizeString(str) {
135
+ return str?.normalize("NFD")?.replace(/[\u0300-\u036f]/g, "");
136
+ }
137
+ /**
138
+ * * Extracts all email addresses from a string.
139
+ * @param str The input string.
140
+ * @returns An array of extracted email addresses.
141
+ */
142
+ function extractEmails(str) {
143
+ return str?.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g) || [];
144
+ }
145
+ /**
146
+ * * Extracts all URLs from a string.
147
+ * @param str The input string.
148
+ * @returns An array of extracted URLs.
149
+ */
150
+ function extractURLs(str) {
151
+ return str?.match(/https?:\/\/[^\s/$.?#].[^\s]*/g) || [];
152
+ }
153
+ /**
154
+ * * Returns a grammatically correct unit string, optionally prefixed with the number.
155
+ *
156
+ * @remarks For complex and versatile pluralization, please refer to {@link https://toolbox.nazmul-nhb.dev/docs/utilities/string/pluralizer pluralizer} or {@link https://toolbox.nazmul-nhb.dev/docs/classes/Pluralizer Pluralizer Class} instead.
157
+ *
158
+ * @param count The numeric value to determine singular or plural.
159
+ * @param unit The unit name (e.g., "day", "hour").
160
+ * @param withNumber Whether to prefix the count before the unit. Defaults to `true`.
161
+ * @returns Formatted unit string like `"1 day"`, `"2 months"`, or `"hour"`.
162
+ */
163
+ function formatUnitWithPlural(count, unit, withNumber = true) {
164
+ const pluralized = Math.abs(count) === 1 ? unit : `${unit}s`;
165
+ return withNumber ? `${count} ${pluralized}` : pluralized;
166
+ }
167
+
168
+ //#endregion
169
+ export { normalizeString as a, slugifyString as c, isFibonacci as d, isMultiple as f, maskString as i, areInvalidNumbers as l, isPerfectSquare as m, extractURLs as n, replaceAllInString as o, isOdd as p, formatUnitWithPlural as r, reverseString as s, extractEmails as t, isEven as u };