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,996 @@
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 { a as isNonEmptyString } from "./primitives-KsFUp3kQ.mjs";
18
+
19
+ //#region src/verbalizer/rules.ts
20
+ /** Irregular verb mappings: base → past → past participle */
21
+ const irregularVerbs = /* @__PURE__ */ Object.freeze([
22
+ [
23
+ "am",
24
+ "was",
25
+ "been"
26
+ ],
27
+ [
28
+ "is",
29
+ "was",
30
+ "been"
31
+ ],
32
+ [
33
+ "are",
34
+ "were",
35
+ "been"
36
+ ],
37
+ [
38
+ "be",
39
+ "were",
40
+ "been"
41
+ ],
42
+ [
43
+ "can",
44
+ "could",
45
+ "been able"
46
+ ],
47
+ [
48
+ "may",
49
+ "might",
50
+ ""
51
+ ],
52
+ [
53
+ "must",
54
+ "had to",
55
+ ""
56
+ ],
57
+ [
58
+ "will",
59
+ "would",
60
+ ""
61
+ ],
62
+ [
63
+ "shall",
64
+ "should",
65
+ ""
66
+ ],
67
+ [
68
+ "arise",
69
+ "arose",
70
+ "arisen"
71
+ ],
72
+ [
73
+ "awake",
74
+ "awoke",
75
+ "awoken"
76
+ ],
77
+ [
78
+ "bear",
79
+ "bore",
80
+ "born"
81
+ ],
82
+ [
83
+ "bear",
84
+ "bore",
85
+ "borne"
86
+ ],
87
+ [
88
+ "beat",
89
+ "beat",
90
+ "beaten"
91
+ ],
92
+ [
93
+ "become",
94
+ "became",
95
+ "become"
96
+ ],
97
+ [
98
+ "begin",
99
+ "began",
100
+ "begun"
101
+ ],
102
+ [
103
+ "bend",
104
+ "bent",
105
+ "bent"
106
+ ],
107
+ [
108
+ "bet",
109
+ "bet",
110
+ "bet"
111
+ ],
112
+ [
113
+ "bind",
114
+ "bound",
115
+ "bound"
116
+ ],
117
+ [
118
+ "bite",
119
+ "bit",
120
+ "bitten"
121
+ ],
122
+ [
123
+ "bleed",
124
+ "bled",
125
+ "bled"
126
+ ],
127
+ [
128
+ "blow",
129
+ "blew",
130
+ "blown"
131
+ ],
132
+ [
133
+ "break",
134
+ "broke",
135
+ "broken"
136
+ ],
137
+ [
138
+ "breed",
139
+ "bred",
140
+ "bred"
141
+ ],
142
+ [
143
+ "bring",
144
+ "brought",
145
+ "brought"
146
+ ],
147
+ [
148
+ "broadcast",
149
+ "broadcast",
150
+ "broadcast"
151
+ ],
152
+ [
153
+ "build",
154
+ "built",
155
+ "built"
156
+ ],
157
+ [
158
+ "burn",
159
+ "burnt",
160
+ "burnt"
161
+ ],
162
+ [
163
+ "burst",
164
+ "burst",
165
+ "burst"
166
+ ],
167
+ [
168
+ "buy",
169
+ "bought",
170
+ "bought"
171
+ ],
172
+ [
173
+ "catch",
174
+ "caught",
175
+ "caught"
176
+ ],
177
+ [
178
+ "choose",
179
+ "chose",
180
+ "chosen"
181
+ ],
182
+ [
183
+ "cling",
184
+ "clung",
185
+ "clung"
186
+ ],
187
+ [
188
+ "come",
189
+ "came",
190
+ "come"
191
+ ],
192
+ [
193
+ "cost",
194
+ "cost",
195
+ "cost"
196
+ ],
197
+ [
198
+ "creep",
199
+ "crept",
200
+ "crept"
201
+ ],
202
+ [
203
+ "cut",
204
+ "cut",
205
+ "cut"
206
+ ],
207
+ [
208
+ "deal",
209
+ "dealt",
210
+ "dealt"
211
+ ],
212
+ [
213
+ "dig",
214
+ "dug",
215
+ "dug"
216
+ ],
217
+ [
218
+ "do",
219
+ "did",
220
+ "done"
221
+ ],
222
+ [
223
+ "draw",
224
+ "drew",
225
+ "drawn"
226
+ ],
227
+ [
228
+ "dream",
229
+ "dreamt",
230
+ "dreamt"
231
+ ],
232
+ [
233
+ "drink",
234
+ "drank",
235
+ "drunk"
236
+ ],
237
+ [
238
+ "drive",
239
+ "drove",
240
+ "driven"
241
+ ],
242
+ [
243
+ "eat",
244
+ "ate",
245
+ "eaten"
246
+ ],
247
+ [
248
+ "fall",
249
+ "fell",
250
+ "fallen"
251
+ ],
252
+ [
253
+ "feed",
254
+ "fed",
255
+ "fed"
256
+ ],
257
+ [
258
+ "feel",
259
+ "felt",
260
+ "felt"
261
+ ],
262
+ [
263
+ "fight",
264
+ "fought",
265
+ "fought"
266
+ ],
267
+ [
268
+ "find",
269
+ "found",
270
+ "found"
271
+ ],
272
+ [
273
+ "fly",
274
+ "flew",
275
+ "flown"
276
+ ],
277
+ [
278
+ "forbid",
279
+ "forbade",
280
+ "forbidden"
281
+ ],
282
+ [
283
+ "forget",
284
+ "forgot",
285
+ "forgotten"
286
+ ],
287
+ [
288
+ "forgive",
289
+ "forgave",
290
+ "forgiven"
291
+ ],
292
+ [
293
+ "freeze",
294
+ "froze",
295
+ "frozen"
296
+ ],
297
+ [
298
+ "get",
299
+ "got",
300
+ "got"
301
+ ],
302
+ [
303
+ "give",
304
+ "gave",
305
+ "given"
306
+ ],
307
+ [
308
+ "go",
309
+ "went",
310
+ "gone"
311
+ ],
312
+ [
313
+ "grind",
314
+ "ground",
315
+ "ground"
316
+ ],
317
+ [
318
+ "grow",
319
+ "grew",
320
+ "grown"
321
+ ],
322
+ [
323
+ "hang",
324
+ "hung",
325
+ "hung"
326
+ ],
327
+ [
328
+ "have",
329
+ "had",
330
+ "had"
331
+ ],
332
+ [
333
+ "hear",
334
+ "heard",
335
+ "heard"
336
+ ],
337
+ [
338
+ "hide",
339
+ "hid",
340
+ "hidden"
341
+ ],
342
+ [
343
+ "hit",
344
+ "hit",
345
+ "hit"
346
+ ],
347
+ [
348
+ "hold",
349
+ "held",
350
+ "held"
351
+ ],
352
+ [
353
+ "hurt",
354
+ "hurt",
355
+ "hurt"
356
+ ],
357
+ [
358
+ "keep",
359
+ "kept",
360
+ "kept"
361
+ ],
362
+ [
363
+ "kneel",
364
+ "knelt",
365
+ "knelt"
366
+ ],
367
+ [
368
+ "know",
369
+ "knew",
370
+ "known"
371
+ ],
372
+ [
373
+ "lay",
374
+ "laid",
375
+ "laid"
376
+ ],
377
+ [
378
+ "lead",
379
+ "led",
380
+ "led"
381
+ ],
382
+ [
383
+ "lean",
384
+ "leant",
385
+ "leant"
386
+ ],
387
+ [
388
+ "learn",
389
+ "learnt",
390
+ "learnt"
391
+ ],
392
+ [
393
+ "leave",
394
+ "left",
395
+ "left"
396
+ ],
397
+ [
398
+ "lend",
399
+ "lent",
400
+ "lent"
401
+ ],
402
+ [
403
+ "lie",
404
+ "lay",
405
+ "lain"
406
+ ],
407
+ [
408
+ "light",
409
+ "lit",
410
+ "lit"
411
+ ],
412
+ [
413
+ "lose",
414
+ "lost",
415
+ "lost"
416
+ ],
417
+ [
418
+ "make",
419
+ "made",
420
+ "made"
421
+ ],
422
+ [
423
+ "mean",
424
+ "meant",
425
+ "meant"
426
+ ],
427
+ [
428
+ "meet",
429
+ "met",
430
+ "met"
431
+ ],
432
+ [
433
+ "mow",
434
+ "mowed",
435
+ "mown"
436
+ ],
437
+ [
438
+ "overtake",
439
+ "overtook",
440
+ "overtaken"
441
+ ],
442
+ [
443
+ "pay",
444
+ "paid",
445
+ "paid"
446
+ ],
447
+ [
448
+ "put",
449
+ "put",
450
+ "put"
451
+ ],
452
+ [
453
+ "read",
454
+ "read",
455
+ "read"
456
+ ],
457
+ [
458
+ "ride",
459
+ "rode",
460
+ "ridden"
461
+ ],
462
+ [
463
+ "ring",
464
+ "rang",
465
+ "rung"
466
+ ],
467
+ [
468
+ "rise",
469
+ "rose",
470
+ "risen"
471
+ ],
472
+ [
473
+ "run",
474
+ "ran",
475
+ "run"
476
+ ],
477
+ [
478
+ "saw",
479
+ "sawed",
480
+ "sawn"
481
+ ],
482
+ [
483
+ "say",
484
+ "said",
485
+ "said"
486
+ ],
487
+ [
488
+ "see",
489
+ "saw",
490
+ "seen"
491
+ ],
492
+ [
493
+ "sell",
494
+ "sold",
495
+ "sold"
496
+ ],
497
+ [
498
+ "send",
499
+ "sent",
500
+ "sent"
501
+ ],
502
+ [
503
+ "set",
504
+ "set",
505
+ "set"
506
+ ],
507
+ [
508
+ "sew",
509
+ "sewed",
510
+ "sewn"
511
+ ],
512
+ [
513
+ "shake",
514
+ "shook",
515
+ "shaken"
516
+ ],
517
+ [
518
+ "shed",
519
+ "shed",
520
+ "shed"
521
+ ],
522
+ [
523
+ "shine",
524
+ "shone",
525
+ "shone"
526
+ ],
527
+ [
528
+ "shoot",
529
+ "shot",
530
+ "shot"
531
+ ],
532
+ [
533
+ "show",
534
+ "showed",
535
+ "shown"
536
+ ],
537
+ [
538
+ "shrink",
539
+ "shrank",
540
+ "shrunk"
541
+ ],
542
+ [
543
+ "shut",
544
+ "shut",
545
+ "shut"
546
+ ],
547
+ [
548
+ "sing",
549
+ "sang",
550
+ "sung"
551
+ ],
552
+ [
553
+ "sink",
554
+ "sank",
555
+ "sunk"
556
+ ],
557
+ [
558
+ "sit",
559
+ "sat",
560
+ "sat"
561
+ ],
562
+ [
563
+ "sleep",
564
+ "slept",
565
+ "slept"
566
+ ],
567
+ [
568
+ "slide",
569
+ "slid",
570
+ "slid"
571
+ ],
572
+ [
573
+ "smell",
574
+ "smelt",
575
+ "smelt"
576
+ ],
577
+ [
578
+ "sow",
579
+ "sowed",
580
+ "sown"
581
+ ],
582
+ [
583
+ "speak",
584
+ "spoke",
585
+ "spoken"
586
+ ],
587
+ [
588
+ "spend",
589
+ "spent",
590
+ "spent"
591
+ ],
592
+ [
593
+ "spin",
594
+ "spun",
595
+ "spun"
596
+ ],
597
+ [
598
+ "spit",
599
+ "spat",
600
+ "spat"
601
+ ],
602
+ [
603
+ "spread",
604
+ "spread",
605
+ "spread"
606
+ ],
607
+ [
608
+ "stand",
609
+ "stood",
610
+ "stood"
611
+ ],
612
+ [
613
+ "steal",
614
+ "stole",
615
+ "stolen"
616
+ ],
617
+ [
618
+ "stick",
619
+ "stuck",
620
+ "stuck"
621
+ ],
622
+ [
623
+ "sting",
624
+ "stung",
625
+ "stung"
626
+ ],
627
+ [
628
+ "stink",
629
+ "stank",
630
+ "stunk"
631
+ ],
632
+ [
633
+ "strike",
634
+ "struck",
635
+ "struck"
636
+ ],
637
+ [
638
+ "swear",
639
+ "swore",
640
+ "sworn"
641
+ ],
642
+ [
643
+ "sweep",
644
+ "swept",
645
+ "swept"
646
+ ],
647
+ [
648
+ "swell",
649
+ "swelled",
650
+ "swollen"
651
+ ],
652
+ [
653
+ "swim",
654
+ "swam",
655
+ "swum"
656
+ ],
657
+ [
658
+ "swing",
659
+ "swung",
660
+ "swung"
661
+ ],
662
+ [
663
+ "take",
664
+ "took",
665
+ "taken"
666
+ ],
667
+ [
668
+ "teach",
669
+ "taught",
670
+ "taught"
671
+ ],
672
+ [
673
+ "tear",
674
+ "tore",
675
+ "torn"
676
+ ],
677
+ [
678
+ "tell",
679
+ "told",
680
+ "told"
681
+ ],
682
+ [
683
+ "think",
684
+ "thought",
685
+ "thought"
686
+ ],
687
+ [
688
+ "throw",
689
+ "threw",
690
+ "thrown"
691
+ ],
692
+ [
693
+ "understand",
694
+ "understood",
695
+ "understood"
696
+ ],
697
+ [
698
+ "wake",
699
+ "woke",
700
+ "woken"
701
+ ],
702
+ [
703
+ "wear",
704
+ "wore",
705
+ "worn"
706
+ ],
707
+ [
708
+ "weep",
709
+ "wept",
710
+ "wept"
711
+ ],
712
+ [
713
+ "win",
714
+ "won",
715
+ "won"
716
+ ],
717
+ [
718
+ "wind",
719
+ "wound",
720
+ "wound"
721
+ ],
722
+ [
723
+ "write",
724
+ "wrote",
725
+ "written"
726
+ ]
727
+ ]);
728
+ /** Past tense conjugation rules with regex and replacements */
729
+ const pastRules = /* @__PURE__ */ Object.freeze([
730
+ [/([aeiou])y$/i, "$1yed"],
731
+ [/e$/i, "ed"],
732
+ [/([aeiou])lf$/i, "$1lved"],
733
+ [/([^aeiou])y$/i, "$1ied"],
734
+ [/([^aeiou])ic$/i, "$1icked"],
735
+ [/([^aeiou])([aeiou])([^aeiou])$/i, "$1$2$3$3ed"],
736
+ [/$/i, "ed"]
737
+ ]);
738
+ /** Past participle conjugation rules with regex and replacements */
739
+ const pastParticipleRules = /* @__PURE__ */ Object.freeze([
740
+ [/([aeiou])y$/i, "$1yed"],
741
+ [/e$/i, "ed"],
742
+ [/([aeiou])lf$/i, "$1lved"],
743
+ [/([^aeiou])y$/i, "$1ied"],
744
+ [/([^aeiou])ic$/i, "$1icked"],
745
+ [/([^aeiou])([aeiou])([^aeiou])$/i, "$1$2$3$3ed"],
746
+ [/$/i, "ed"]
747
+ ]);
748
+ /** Base form recovery rules (reverse of pastRules) */
749
+ const baseRules = Object.freeze([
750
+ [/([aeiou])yed$/i, "$1y"],
751
+ [/^([^aeiouwy])ied$/i, "$1ie"],
752
+ [/ied$/i, "y"],
753
+ [/([aeiou])lved$/i, "$1lf"],
754
+ [/([^aeiou])icked$/i, "$1ic"],
755
+ [/([bcdfghjklmnpqrstvwxyz])\1ed$/i, "$1"],
756
+ [/([aeiou])ked$/i, "$1ke"],
757
+ [/ined$/i, "ine"],
758
+ [/eted$/i, "ete"],
759
+ [/gued$/i, "gue"],
760
+ [/ed$/i, ""]
761
+ ]);
762
+
763
+ //#endregion
764
+ //#region src/verbalizer/Verbalizer.ts
765
+ /**
766
+ * @class Handles English verb conjugation between base, past tense, and past participle forms.
767
+ *
768
+ * - Provides methods to convert verbs between base, past, and past participle forms, check verb forms, and manage custom conjugation rules.
769
+ * - Supports adding custom conjugation rules and irregular verbs.
770
+ * - Automatically handles common irregular verbs like "go" to "went" (past) and "gone" (past participle).
771
+ * - Automatically loads common irregular verbs and conjugation rules.
772
+ * - Preserves case sensitivity of input verbs.
773
+ * - This class is useful for natural language processing tasks, such as chatbots, text analysis, or content generation systems requiring accurate verb conjugation.
774
+ *
775
+ * @remarks
776
+ * For ready to use instance, please refer to {@link https://toolbox.nazmul-nhb.dev/docs/utilities/string/verbalizer verbalizer} instead.
777
+ *
778
+ * @example
779
+ * const myVerbalizer = new Verbalizer();
780
+ * myVerbalizer.toPast('run'); // "ran"
781
+ * myVerbalizer.toParticiple('go'); // "gone"
782
+ * myVerbalizer.toBase('went'); // "go"
783
+ */
784
+ var Verbalizer = class {
785
+ #baseRules = [];
786
+ #pastRules = [];
787
+ #participleRules = [];
788
+ #irregularVerbs = {};
789
+ #reverseIrregular = {};
790
+ /**
791
+ * Initializes `Verbalizer` with default rules and irregular verbs.
792
+ * Automatically loads irregular verbs and conjugation rules for base, past and past participle forms.
793
+ */
794
+ constructor() {
795
+ this.#loadRules();
796
+ }
797
+ #loadRules() {
798
+ irregularVerbs.forEach(([base, past, pastParticiple]) => {
799
+ this.addIrregular(base, past, pastParticiple);
800
+ });
801
+ baseRules.forEach(([rule, replacement]) => {
802
+ this.addBaseRule(rule, replacement);
803
+ });
804
+ pastRules.forEach(([rule, replacement]) => {
805
+ this.addPastRule(rule, replacement);
806
+ });
807
+ pastParticipleRules.forEach(([rule, replacement]) => {
808
+ this.addParticipleRule(rule, replacement);
809
+ });
810
+ }
811
+ /** Restore case order(s) */
812
+ #restoreCase(original, transformed) {
813
+ original = original?.trim();
814
+ if (original === transformed) return transformed;
815
+ if (original === original.toLowerCase()) return transformed.toLowerCase();
816
+ if (original === original.toUpperCase()) return transformed.toUpperCase();
817
+ if (original[0] === original[0].toUpperCase() && original.slice(1) === original.slice(1).toLowerCase()) return transformed.charAt(0).toUpperCase() + transformed.slice(1).toLowerCase();
818
+ let result = "";
819
+ for (let i = 0; i < transformed.length; i++) {
820
+ const origChar = original[i];
821
+ if (origChar && origChar === origChar.toUpperCase() && origChar !== origChar.toLowerCase()) result += transformed[i].toUpperCase();
822
+ else result += transformed[i].toLowerCase();
823
+ }
824
+ return result;
825
+ }
826
+ /** Apply base rule to already trimmed and lowercased verb */
827
+ #applyBaseRule(verb) {
828
+ return this.#applyRules(verb, this.#baseRules);
829
+ }
830
+ /** Apply corresponding rules */
831
+ #applyRules(verb, rules) {
832
+ if (!isNonEmptyString(verb)) return "";
833
+ for (let i = 0; i < rules.length; i++) {
834
+ const [rule, replacement] = rules[i];
835
+ if (rule.test(verb)) return verb.replace(rule, replacement);
836
+ }
837
+ return verb;
838
+ }
839
+ /** Find irregular verb entry */
840
+ #findIrregularEntry(verb) {
841
+ const base = this.#irregularVerbs[verb] ? verb : this.#reverseIrregular[verb];
842
+ return base ? this.#irregularVerbs[base] : void 0;
843
+ }
844
+ /**
845
+ * * Add a new base tense conjugation rule.
846
+ * @param rule Pattern to match past/participle form of verbs.
847
+ * @param replacement Replacement pattern for base tense form.
848
+ * @example
849
+ * verbalizer.addBaseRule(/ied$/i, 'y');
850
+ */
851
+ addBaseRule(rule, replacement) {
852
+ this.#baseRules.push([rule, replacement]);
853
+ }
854
+ /**
855
+ * * Add a new past tense conjugation rule.
856
+ * @param rule Pattern to match base verbs.
857
+ * @param replacement Replacement pattern for past tense form.
858
+ * @example
859
+ * verbalizer.addPastRule(/e$/i, 'ed');
860
+ */
861
+ addPastRule(rule, replacement) {
862
+ this.#pastRules.push([rule, replacement]);
863
+ }
864
+ /**
865
+ * * Add a new past participle conjugation rule.
866
+ * @param rule Pattern to match base verbs.
867
+ * @param replacement Replacement pattern for past participle form.
868
+ * @example
869
+ * verbalizer.addParticipleRule(/e$/i, 'ed');
870
+ */
871
+ addParticipleRule(rule, replacement) {
872
+ this.#participleRules.push([rule, replacement]);
873
+ }
874
+ /**
875
+ * * Add a custom irregular verb.
876
+ * @param base Base form of the verb.
877
+ * @param past Past tense form.
878
+ * @param participle Past participle form.
879
+ * @example
880
+ * verbalizer.addIrregular('swim', 'swam', 'swum');
881
+ */
882
+ addIrregular(base, past, participle) {
883
+ const baseLower = base?.toLowerCase();
884
+ const pastLower = past?.toLowerCase();
885
+ const participleLower = participle?.toLowerCase();
886
+ this.#irregularVerbs[baseLower] = {
887
+ base: baseLower,
888
+ past: pastLower,
889
+ participle: participleLower
890
+ };
891
+ this.#reverseIrregular[pastLower] = baseLower;
892
+ this.#reverseIrregular[participleLower] = baseLower;
893
+ }
894
+ /**
895
+ * * Convert a verb to its past tense form.
896
+ * @param verb Base form of the verb.
897
+ * @returns Past tense form of the verb.
898
+ * @example
899
+ * verbalizer.toPast('walk'); // "walked"
900
+ * verbalizer.toPast('run'); // "ran"
901
+ */
902
+ toPast(verb) {
903
+ if (!isNonEmptyString(verb)) return "";
904
+ const lower = verb?.trim()?.toLowerCase();
905
+ const irregularEntry = this.#findIrregularEntry(lower);
906
+ if (irregularEntry) return this.#restoreCase(verb, irregularEntry.past);
907
+ return this.#restoreCase(verb, this.#applyRules(this.#applyBaseRule(lower), this.#pastRules));
908
+ }
909
+ /**
910
+ * * Convert a verb to its past participle form.
911
+ * @param verb Base form of the verb.
912
+ * @returns Past participle form of the verb.
913
+ * @example
914
+ * verbalizer.toParticiple('walk'); // "walked"
915
+ * verbalizer.toParticiple('go'); // "gone"
916
+ */
917
+ toParticiple(verb) {
918
+ if (!isNonEmptyString(verb)) return "";
919
+ const lower = verb?.trim()?.toLowerCase();
920
+ const irregularEntry = this.#findIrregularEntry(lower);
921
+ if (irregularEntry) return this.#restoreCase(verb, irregularEntry.participle);
922
+ return this.#restoreCase(verb, this.#applyRules(this.#applyBaseRule(lower), this.#participleRules));
923
+ }
924
+ /**
925
+ * * Convert a verb to its base form.
926
+ * @param verb Past or past participle form of the verb.
927
+ * @returns Base form of the verb.
928
+ * @example
929
+ * verbalizer.toBase('went'); // "go"
930
+ * verbalizer.toBase('walked'); // "walk"
931
+ */
932
+ toBase(verb) {
933
+ if (!isNonEmptyString(verb)) return "";
934
+ const lower = verb?.trim()?.toLowerCase();
935
+ const irregularEntry = this.#findIrregularEntry(lower);
936
+ if (irregularEntry) return this.#restoreCase(verb, irregularEntry.base);
937
+ return this.#restoreCase(verb, this.#applyBaseRule(lower));
938
+ }
939
+ /**
940
+ * * Check if a given verb is in its past tense form.
941
+ * @param verb Verb to check.
942
+ * @returns True if the verb is in past tense, otherwise false.
943
+ * @example
944
+ * verbalizer.isPast('ran'); // true
945
+ * verbalizer.isPast('run'); // false
946
+ */
947
+ isPast(verb) {
948
+ if (!isNonEmptyString(verb)) return false;
949
+ const lower = verb?.trim()?.toLowerCase();
950
+ return this.toPast(lower) === lower;
951
+ }
952
+ /**
953
+ * * Check if a given verb is in its past participle form.
954
+ * @param verb Verb to check.
955
+ * @returns True if the verb is in past participle form, otherwise false.
956
+ * @example
957
+ * verbalizer.isParticiple('gone'); // true
958
+ * verbalizer.isParticiple('go'); // false
959
+ */
960
+ isParticiple(verb) {
961
+ if (!isNonEmptyString(verb)) return false;
962
+ const lower = verb?.trim()?.toLowerCase();
963
+ return this.toParticiple(lower) === lower;
964
+ }
965
+ /**
966
+ * * Check if a given verb is in its base form.
967
+ * @param verb Verb to check.
968
+ * @returns True if the verb is in base form, otherwise false.
969
+ * @example
970
+ * verbalizer.isBase('run'); // true
971
+ * verbalizer.isBase('ran'); // false
972
+ */
973
+ isBase(verb) {
974
+ if (!isNonEmptyString(verb)) return false;
975
+ const lower = verb?.trim()?.toLowerCase();
976
+ return this.toBase(lower) === lower;
977
+ }
978
+ };
979
+ /**
980
+ * Default shared instance of {@link https://toolbox.nazmul-nhb.dev/docs/classes/Verbalizer Verbalizer}.
981
+ *
982
+ * - Use this when you don’t need multiple configurations.
983
+ * - It comes preloaded with standard conjugation rules and irregular verbs.
984
+ * -
985
+ *
986
+ * @example
987
+ * import { verbalizer } from 'nhb-toolbox';
988
+ *
989
+ * verbalizer.toPast('run'); // "ran"
990
+ * verbalizer.toParticiple('go'); // "gone"
991
+ * verbalizer.toBase('went'); // "go"
992
+ */
993
+ const verbalizer = new Verbalizer();
994
+
995
+ //#endregion
996
+ export { Verbalizer, verbalizer };