@bgord/tools 1.3.24 → 1.4.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 (504) hide show
  1. package/dist/src/age-years.vo.d.ts +11 -0
  2. package/dist/src/age-years.vo.js +6 -0
  3. package/dist/{age.vo.js → src/age.vo.js} +2 -1
  4. package/dist/src/api-key.vo.d.ts +7 -0
  5. package/dist/src/api-key.vo.js +7 -0
  6. package/dist/src/basename.vo.d.ts +12 -0
  7. package/dist/src/basename.vo.js +22 -0
  8. package/dist/src/day-iso-id.vo.d.ts +9 -0
  9. package/dist/{day-iso-id.vo.js → src/day-iso-id.vo.js} +4 -8
  10. package/dist/{day.vo.js → src/day.vo.js} +7 -6
  11. package/dist/src/directory-path-absolute.vo.d.ts +12 -0
  12. package/dist/{directory-path-absolute.vo.js → src/directory-path-absolute.vo.js} +5 -12
  13. package/dist/src/directory-path-relative.vo.d.ts +12 -0
  14. package/dist/{directory-path-relative.vo.js → src/directory-path-relative.vo.js} +5 -12
  15. package/dist/src/distance-value.vo.d.ts +7 -0
  16. package/dist/src/distance-value.vo.js +5 -0
  17. package/dist/{distance.vo.js → src/distance.vo.js} +7 -6
  18. package/dist/src/division-factor.vo.d.ts +7 -0
  19. package/dist/src/division-factor.vo.js +5 -0
  20. package/dist/src/duration-ms.vo.d.ts +6 -0
  21. package/dist/src/duration-ms.vo.js +5 -0
  22. package/dist/{duration.service.js → src/duration.service.js} +2 -1
  23. package/dist/src/email.vo.d.ts +6 -0
  24. package/dist/src/email.vo.js +4 -0
  25. package/dist/{etags.vo.js → src/etags.vo.js} +3 -2
  26. package/dist/src/extension.vo.d.ts +9 -0
  27. package/dist/src/extension.vo.js +15 -0
  28. package/dist/src/feature-flag-value.vo.d.ts +10 -0
  29. package/dist/{feature-flag-value.vo.js → src/feature-flag-value.vo.js} +2 -2
  30. package/dist/src/file-path-absolute-schema.vo.d.ts +17 -0
  31. package/dist/{file-path-absolute-schema.vo.js → src/file-path-absolute-schema.vo.js} +6 -13
  32. package/dist/src/file-path-relative-schema.vo.d.ts +17 -0
  33. package/dist/{file-path-relative-schema.vo.js → src/file-path-relative-schema.vo.js} +6 -13
  34. package/dist/{file-path.vo.js → src/file-path.vo.js} +5 -4
  35. package/dist/src/filename-affix.vo.d.ts +13 -0
  36. package/dist/{filename-affix.vo.js → src/filename-affix.vo.js} +4 -9
  37. package/dist/src/filename-from-string.vo.d.ts +10 -0
  38. package/dist/{filename-from-string.vo.js → src/filename-from-string.vo.js} +5 -8
  39. package/dist/{filename.vo.js → src/filename.vo.js} +8 -7
  40. package/dist/src/height-milimiters.vo.d.ts +7 -0
  41. package/dist/src/height-milimiters.vo.js +8 -0
  42. package/dist/{height.vo.js → src/height.vo.js} +4 -3
  43. package/dist/src/hour-value.vo.d.ts +7 -0
  44. package/dist/src/hour-value.vo.js +5 -0
  45. package/dist/{hour.vo.js → src/hour.vo.js} +3 -2
  46. package/dist/src/iban-schema.vo.d.ts +7 -0
  47. package/dist/src/iban-schema.vo.js +7 -0
  48. package/dist/{iban.vo.js → src/iban.vo.js} +2 -1
  49. package/dist/src/image.vo.d.ts +13 -0
  50. package/dist/src/image.vo.js +10 -0
  51. package/dist/src/integer-non-negative.vo.d.ts +7 -0
  52. package/dist/src/integer-non-negative.vo.js +8 -0
  53. package/dist/src/integer-positive.vo.d.ts +7 -0
  54. package/dist/src/integer-positive.vo.js +5 -0
  55. package/dist/src/integer.vo.d.ts +6 -0
  56. package/dist/src/integer.vo.js +4 -0
  57. package/dist/src/language.vo.d.ts +7 -0
  58. package/dist/{language.vo.js → src/language.vo.js} +2 -2
  59. package/dist/src/mime-value.vo.d.ts +7 -0
  60. package/dist/{mime-value.vo.js → src/mime-value.vo.js} +4 -7
  61. package/dist/{mime.vo.js → src/mime.vo.js} +2 -1
  62. package/dist/src/mimes.js +19 -0
  63. package/dist/src/minute-value.vo.d.ts +7 -0
  64. package/dist/src/minute-value.vo.js +5 -0
  65. package/dist/{minute.vo.js → src/minute.vo.js} +3 -2
  66. package/dist/src/money-amount.vo.d.ts +7 -0
  67. package/dist/src/money-amount.vo.js +5 -0
  68. package/dist/{money.vo.js → src/money.vo.js} +7 -6
  69. package/dist/src/month-iso-id.vo.d.ts +8 -0
  70. package/dist/{month-iso-id.vo.js → src/month-iso-id.vo.js} +5 -9
  71. package/dist/{month.vo.js → src/month.vo.js} +5 -4
  72. package/dist/src/multiplication-factor.vo.d.ts +7 -0
  73. package/dist/src/multiplication-factor.vo.js +8 -0
  74. package/dist/src/object-key.vo.d.ts +11 -0
  75. package/dist/src/object-key.vo.js +19 -0
  76. package/dist/src/package-version-schema.vo.d.ts +8 -0
  77. package/dist/{package-version-schema.vo.js → src/package-version-schema.vo.js} +4 -7
  78. package/dist/{package-version.vo.js → src/package-version.vo.js} +3 -4
  79. package/dist/src/pagination-page.vo.d.ts +6 -0
  80. package/dist/src/pagination-page.vo.js +3 -0
  81. package/dist/src/pagination-skip.vo.d.ts +7 -0
  82. package/dist/src/pagination-skip.vo.js +3 -0
  83. package/dist/src/pagination-take.vo.d.ts +7 -0
  84. package/dist/src/pagination-take.vo.js +3 -0
  85. package/dist/{pagination.service.js → src/pagination.service.js} +8 -7
  86. package/dist/src/quarter-iso-id.vo.d.ts +8 -0
  87. package/dist/src/quarter-iso-id.vo.js +7 -0
  88. package/dist/{quarter.vo.js → src/quarter.vo.js} +3 -2
  89. package/dist/src/reordering-item-position-value.vo.d.ts +6 -0
  90. package/dist/src/reordering-item-position-value.vo.js +3 -0
  91. package/dist/{reordering.service.d.ts → src/reordering.service.d.ts} +9 -9
  92. package/dist/{reordering.service.js → src/reordering.service.js} +7 -7
  93. package/dist/src/revision-value.vo.d.ts +7 -0
  94. package/dist/src/revision-value.vo.js +3 -0
  95. package/dist/{revision.vo.js → src/revision.vo.js} +3 -2
  96. package/dist/{rounding-decimal.strategy.d.ts → src/rounding-decimal.strategy.d.ts} +2 -2
  97. package/dist/src/rounding-decimal.strategy.js +14 -0
  98. package/dist/src/size-bytes.vo.d.ts +6 -0
  99. package/dist/src/size-bytes.vo.js +5 -0
  100. package/dist/{size.vo.js → src/size.vo.js} +5 -4
  101. package/dist/src/time-zone-offset-value.vo.d.ts +8 -0
  102. package/dist/src/time-zone-offset-value.vo.js +13 -0
  103. package/dist/src/timestamp-value.vo.d.ts +6 -0
  104. package/dist/src/timestamp-value.vo.js +5 -0
  105. package/dist/{timestamp.vo.js → src/timestamp.vo.js} +2 -1
  106. package/dist/src/timezone.vo.d.ts +9 -0
  107. package/dist/{timezone.vo.js → src/timezone.vo.js} +7 -10
  108. package/dist/src/url-with-slash.vo.d.ts +6 -0
  109. package/dist/src/url-with-slash.vo.js +5 -0
  110. package/dist/src/url-without-slash.vo.d.ts +6 -0
  111. package/dist/src/url-without-slash.vo.js +5 -0
  112. package/dist/src/week-iso-id.vo.d.ts +8 -0
  113. package/dist/{week-iso-id.vo.js → src/week-iso-id.vo.js} +5 -9
  114. package/dist/{week.vo.js → src/week.vo.js} +5 -4
  115. package/dist/src/weekday-iso-id.vo.d.ts +7 -0
  116. package/dist/src/weekday-iso-id.vo.js +5 -0
  117. package/dist/{weekday.vo.js → src/weekday.vo.js} +9 -8
  118. package/dist/src/weight-grams.vo.d.ts +7 -0
  119. package/dist/src/weight-grams.vo.js +5 -0
  120. package/dist/{weight.vo.js → src/weight.vo.js} +8 -7
  121. package/dist/src/year-iso-id.vo.d.ts +7 -0
  122. package/dist/src/year-iso-id.vo.js +7 -0
  123. package/dist/{year.vo.js → src/year.vo.js} +6 -5
  124. package/dist/tests/age-years.vo.test.d.ts +1 -0
  125. package/dist/tests/age-years.vo.test.js +24 -0
  126. package/dist/tests/age.vo.test.d.ts +1 -0
  127. package/dist/tests/age.vo.test.js +106 -0
  128. package/dist/tests/api-key.vo.test.d.ts +1 -0
  129. package/dist/tests/api-key.vo.test.js +24 -0
  130. package/dist/tests/basename.vo.test.d.ts +1 -0
  131. package/dist/tests/basename.vo.test.js +53 -0
  132. package/dist/tests/batch.test.d.ts +1 -0
  133. package/dist/tests/batch.test.js +24 -0
  134. package/dist/tests/date-calculator.service.test.d.ts +1 -0
  135. package/dist/tests/date-calculator.service.test.js +32 -0
  136. package/dist/tests/date-formatter.service.test.d.ts +1 -0
  137. package/dist/tests/date-formatter.service.test.js +22 -0
  138. package/dist/tests/date-range.vo.test.d.ts +1 -0
  139. package/dist/tests/date-range.vo.test.js +49 -0
  140. package/dist/tests/day-iso-id.vo.test.d.ts +1 -0
  141. package/dist/tests/day-iso-id.vo.test.js +36 -0
  142. package/dist/tests/day.vo.test.d.ts +1 -0
  143. package/dist/tests/day.vo.test.js +68 -0
  144. package/dist/tests/directory-path-absolute.vo.test.d.ts +1 -0
  145. package/dist/tests/directory-path-absolute.vo.test.js +47 -0
  146. package/dist/tests/directory-path-relative.vo.test.d.ts +1 -0
  147. package/dist/tests/directory-path-relative.vo.test.js +44 -0
  148. package/dist/tests/distance-value.vo.test.d.ts +1 -0
  149. package/dist/tests/distance-value.vo.test.js +21 -0
  150. package/dist/tests/distance.vo.test.d.ts +1 -0
  151. package/dist/tests/distance.vo.test.js +74 -0
  152. package/dist/tests/division-factor.vo.test.d.ts +1 -0
  153. package/dist/tests/division-factor.vo.test.js +21 -0
  154. package/dist/tests/dll.service.test.d.ts +1 -0
  155. package/dist/tests/dll.service.test.js +381 -0
  156. package/dist/tests/duration-ms.vo.test.d.ts +1 -0
  157. package/dist/tests/duration-ms.vo.test.js +18 -0
  158. package/dist/tests/duration.service.test.d.ts +1 -0
  159. package/dist/tests/duration.service.test.js +126 -0
  160. package/dist/tests/email-mask.service.test.d.ts +1 -0
  161. package/dist/tests/email-mask.service.test.js +15 -0
  162. package/dist/tests/email.vo.test.d.ts +1 -0
  163. package/dist/tests/email.vo.test.js +17 -0
  164. package/dist/tests/etags.vo.test.d.ts +1 -0
  165. package/dist/tests/etags.vo.test.js +54 -0
  166. package/dist/tests/extension.vo.test.d.ts +1 -0
  167. package/dist/tests/extension.vo.test.js +51 -0
  168. package/dist/tests/feature-flag-value.vo.test.d.ts +1 -0
  169. package/dist/tests/feature-flag-value.vo.test.js +12 -0
  170. package/dist/tests/feature-flag.vo.test.d.ts +1 -0
  171. package/dist/tests/feature-flag.vo.test.js +13 -0
  172. package/dist/tests/file-path-absolute-schema.vo.test.d.ts +1 -0
  173. package/dist/tests/file-path-absolute-schema.vo.test.js +53 -0
  174. package/dist/tests/file-path-relative-schema.vo.test.d.ts +1 -0
  175. package/dist/tests/file-path-relative-schema.vo.test.js +52 -0
  176. package/dist/tests/file-path.vo.test.d.ts +1 -0
  177. package/dist/tests/file-path.vo.test.js +74 -0
  178. package/dist/tests/filename-affix.vo.test.d.ts +1 -0
  179. package/dist/tests/filename-affix.vo.test.js +30 -0
  180. package/dist/tests/filename-from-string.vo.test.d.ts +1 -0
  181. package/dist/tests/filename-from-string.vo.test.js +37 -0
  182. package/dist/tests/filename.vo.test.d.ts +1 -0
  183. package/dist/tests/filename.vo.test.js +93 -0
  184. package/dist/tests/height-milimiters.vo.test.d.ts +1 -0
  185. package/dist/tests/height-milimiters.vo.test.js +21 -0
  186. package/dist/tests/height.vo.test.d.ts +1 -0
  187. package/dist/tests/height.vo.test.js +64 -0
  188. package/dist/tests/hour-value.vo.test.d.ts +1 -0
  189. package/dist/tests/hour-value.vo.test.js +24 -0
  190. package/dist/tests/hour.vo.test.d.ts +1 -0
  191. package/dist/tests/hour.vo.test.js +64 -0
  192. package/dist/tests/iban-mask.service.test.d.ts +1 -0
  193. package/dist/tests/iban-mask.service.test.js +13 -0
  194. package/dist/tests/iban-schema.vo.test.d.ts +1 -0
  195. package/dist/tests/iban-schema.vo.test.js +43 -0
  196. package/dist/tests/iban.vo.test.d.ts +1 -0
  197. package/dist/tests/iban.vo.test.js +46 -0
  198. package/dist/tests/image.vo.test.d.ts +1 -0
  199. package/dist/tests/image.vo.test.js +41 -0
  200. package/dist/tests/integer-non-negative.vo.test.d.ts +1 -0
  201. package/dist/tests/integer-non-negative.vo.test.js +22 -0
  202. package/dist/tests/integer-positive.vo.test.d.ts +1 -0
  203. package/dist/tests/integer-positive.vo.test.js +21 -0
  204. package/dist/tests/integer.vo.test.d.ts +1 -0
  205. package/dist/tests/integer.vo.test.js +21 -0
  206. package/dist/tests/language.vo.test.d.ts +1 -0
  207. package/dist/tests/language.vo.test.js +28 -0
  208. package/dist/tests/linear-regression.service.test.d.ts +1 -0
  209. package/dist/tests/linear-regression.service.test.js +111 -0
  210. package/dist/tests/mean.service.test.d.ts +1 -0
  211. package/dist/tests/mean.service.test.js +23 -0
  212. package/dist/tests/mime-registry-entry.vo.test.d.ts +1 -0
  213. package/dist/tests/mime-registry-entry.vo.test.js +15 -0
  214. package/dist/tests/mime-registry.service.test.d.ts +1 -0
  215. package/dist/tests/mime-registry.service.test.js +45 -0
  216. package/dist/tests/mime-value.vo.test.d.ts +1 -0
  217. package/dist/tests/mime-value.vo.test.js +49 -0
  218. package/dist/tests/mime.vo.test.d.ts +1 -0
  219. package/dist/tests/mime.vo.test.js +53 -0
  220. package/dist/tests/mimes.test.d.ts +1 -0
  221. package/dist/tests/mimes.test.js +28 -0
  222. package/dist/tests/min-max-scaler.service.test.d.ts +1 -0
  223. package/dist/tests/min-max-scaler.service.test.js +116 -0
  224. package/dist/tests/minute-value.vo.test.d.ts +1 -0
  225. package/dist/tests/minute-value.vo.test.js +24 -0
  226. package/dist/tests/minute.vo.test.d.ts +1 -0
  227. package/dist/tests/minute.vo.test.js +64 -0
  228. package/dist/tests/mocks.d.ts +6 -0
  229. package/dist/tests/mocks.js +7 -0
  230. package/dist/tests/money-amount.vo.test.d.ts +1 -0
  231. package/dist/tests/money-amount.vo.test.js +21 -0
  232. package/dist/tests/money.vo.test.d.ts +1 -0
  233. package/dist/tests/money.vo.test.js +90 -0
  234. package/dist/tests/month-iso-id.vo.test.d.ts +1 -0
  235. package/dist/tests/month-iso-id.vo.test.js +36 -0
  236. package/dist/tests/month.vo.test.d.ts +1 -0
  237. package/dist/tests/month.vo.test.js +65 -0
  238. package/dist/tests/multiplication-factor.vo.test.d.ts +1 -0
  239. package/dist/tests/multiplication-factor.vo.test.js +19 -0
  240. package/dist/tests/noop.test.d.ts +1 -0
  241. package/dist/tests/noop.test.js +12 -0
  242. package/dist/tests/object-key.vo.test.d.ts +1 -0
  243. package/dist/tests/object-key.vo.test.js +56 -0
  244. package/dist/tests/outlier-detector.service.test.d.ts +1 -0
  245. package/dist/tests/outlier-detector.service.test.js +35 -0
  246. package/dist/tests/package-version-schema.vo.test.d.ts +1 -0
  247. package/dist/tests/package-version-schema.vo.test.js +32 -0
  248. package/dist/tests/package-version.vo.test.d.ts +1 -0
  249. package/dist/tests/package-version.vo.test.js +138 -0
  250. package/dist/tests/pagination-page.vo.test.d.ts +1 -0
  251. package/dist/tests/pagination-page.vo.test.js +26 -0
  252. package/dist/tests/pagination-skip.vo.test.d.ts +1 -0
  253. package/dist/tests/pagination-skip.vo.test.js +23 -0
  254. package/dist/tests/pagination-take.vo.test.d.ts +1 -0
  255. package/dist/tests/pagination-take.vo.test.js +25 -0
  256. package/dist/tests/pagination.service.test.d.ts +1 -0
  257. package/dist/tests/pagination.service.test.js +92 -0
  258. package/dist/tests/percentage.service.test.d.ts +1 -0
  259. package/dist/tests/percentage.service.test.js +16 -0
  260. package/dist/tests/population-standard-deviation.service.test.d.ts +1 -0
  261. package/dist/tests/population-standard-deviation.service.test.js +20 -0
  262. package/dist/tests/quarter-iso-id.vo.test.d.ts +1 -0
  263. package/dist/tests/quarter-iso-id.vo.test.js +30 -0
  264. package/dist/tests/quarter.vo.test.d.ts +1 -0
  265. package/dist/tests/quarter.vo.test.js +54 -0
  266. package/dist/tests/random.service.test.d.ts +1 -0
  267. package/dist/tests/random.service.test.js +93 -0
  268. package/dist/tests/rate-limiter.service.test.d.ts +1 -0
  269. package/dist/tests/rate-limiter.service.test.js +39 -0
  270. package/dist/tests/relative-date.vo.test.d.ts +1 -0
  271. package/dist/tests/relative-date.vo.test.js +22 -0
  272. package/dist/tests/reordering-item-position-value.vo.test.d.ts +1 -0
  273. package/dist/tests/reordering-item-position-value.vo.test.js +21 -0
  274. package/dist/tests/reordering.service.test.d.ts +1 -0
  275. package/dist/tests/reordering.service.test.js +76 -0
  276. package/dist/tests/repeat.test.d.ts +1 -0
  277. package/dist/tests/repeat.test.js +8 -0
  278. package/dist/tests/revision-value.vo.test.d.ts +1 -0
  279. package/dist/tests/revision-value.vo.test.js +21 -0
  280. package/dist/tests/revision.vo.test.d.ts +1 -0
  281. package/dist/tests/revision.vo.test.js +52 -0
  282. package/dist/tests/rounding-decimal.strategy.test.d.ts +1 -0
  283. package/dist/tests/rounding-decimal.strategy.test.js +17 -0
  284. package/dist/tests/rounding-down.strategy.test.d.ts +1 -0
  285. package/dist/tests/rounding-down.strategy.test.js +9 -0
  286. package/dist/tests/rounding-to-nearest.strategy.test.d.ts +1 -0
  287. package/dist/tests/rounding-to-nearest.strategy.test.js +9 -0
  288. package/dist/tests/rounding-up.strategy.test.d.ts +1 -0
  289. package/dist/tests/rounding-up.strategy.test.js +9 -0
  290. package/dist/tests/size-bytes.vo.test.d.ts +1 -0
  291. package/dist/tests/size-bytes.vo.test.js +21 -0
  292. package/dist/tests/size.vo.test.d.ts +1 -0
  293. package/dist/tests/size.vo.test.js +93 -0
  294. package/dist/tests/slug.service.test.d.ts +1 -0
  295. package/dist/tests/slug.service.test.js +45 -0
  296. package/dist/tests/sum.service.test.d.ts +1 -0
  297. package/dist/tests/sum.service.test.js +22 -0
  298. package/dist/tests/thousands-separator.service.test.d.ts +1 -0
  299. package/dist/tests/thousands-separator.service.test.js +27 -0
  300. package/dist/tests/time-zone-offset-value.test.d.ts +1 -0
  301. package/dist/tests/time-zone-offset-value.test.js +27 -0
  302. package/dist/tests/timestamp-value.vo.test.d.ts +1 -0
  303. package/dist/tests/timestamp-value.vo.test.js +21 -0
  304. package/dist/tests/timestamp.vo.test.d.ts +1 -0
  305. package/dist/tests/timestamp.vo.test.js +73 -0
  306. package/dist/tests/timezone.vo.test.d.ts +1 -0
  307. package/dist/tests/timezone.vo.test.js +29 -0
  308. package/dist/tests/url-with-slash.vo.test.d.ts +1 -0
  309. package/dist/tests/url-with-slash.vo.test.js +24 -0
  310. package/dist/tests/url-without-slash.vo.test.d.ts +1 -0
  311. package/dist/tests/url-without-slash.vo.test.js +25 -0
  312. package/dist/tests/visually-unambiguous-characters-generator.service.test.d.ts +1 -0
  313. package/dist/tests/visually-unambiguous-characters-generator.service.test.js +89 -0
  314. package/dist/tests/week-iso-id.vo.test.d.ts +1 -0
  315. package/dist/tests/week-iso-id.vo.test.js +37 -0
  316. package/dist/tests/week.vo.test.d.ts +1 -0
  317. package/dist/tests/week.vo.test.js +64 -0
  318. package/dist/tests/weekday-iso-id.vo.test.d.ts +1 -0
  319. package/dist/tests/weekday-iso-id.vo.test.js +24 -0
  320. package/dist/tests/weekday.vo.test.d.ts +1 -0
  321. package/dist/tests/weekday.vo.test.js +51 -0
  322. package/dist/tests/weight-grams.vo.test.d.ts +1 -0
  323. package/dist/tests/weight-grams.vo.test.js +21 -0
  324. package/dist/tests/weight.vo.test.d.ts +1 -0
  325. package/dist/tests/weight.vo.test.js +66 -0
  326. package/dist/tests/year-iso-id.vo.test.d.ts +1 -0
  327. package/dist/tests/year-iso-id.vo.test.js +23 -0
  328. package/dist/tests/year.vo.test.d.ts +1 -0
  329. package/dist/tests/year.vo.test.js +79 -0
  330. package/dist/tests/z-score.service.test.d.ts +1 -0
  331. package/dist/tests/z-score.service.test.js +26 -0
  332. package/dist/tsconfig.tsbuildinfo +1 -1
  333. package/package.json +9 -12
  334. package/dist/age-years.vo.d.ts +0 -11
  335. package/dist/age-years.vo.js +0 -11
  336. package/dist/api-key.vo.d.ts +0 -8
  337. package/dist/api-key.vo.js +0 -11
  338. package/dist/basename.vo.d.ts +0 -12
  339. package/dist/basename.vo.js +0 -27
  340. package/dist/day-iso-id.vo.d.ts +0 -9
  341. package/dist/directory-path-absolute.vo.d.ts +0 -12
  342. package/dist/directory-path-relative.vo.d.ts +0 -12
  343. package/dist/distance-value.vo.d.ts +0 -7
  344. package/dist/distance-value.vo.js +0 -9
  345. package/dist/division-factor.vo.d.ts +0 -7
  346. package/dist/division-factor.vo.js +0 -8
  347. package/dist/duration-ms.vo.d.ts +0 -6
  348. package/dist/duration-ms.vo.js +0 -4
  349. package/dist/email.vo.d.ts +0 -6
  350. package/dist/email.vo.js +0 -4
  351. package/dist/extension.vo.d.ts +0 -9
  352. package/dist/extension.vo.js +0 -21
  353. package/dist/feature-flag-value.vo.d.ts +0 -10
  354. package/dist/file-path-absolute-schema.vo.d.ts +0 -14
  355. package/dist/file-path-relative-schema.vo.d.ts +0 -14
  356. package/dist/filename-affix.vo.d.ts +0 -13
  357. package/dist/filename-from-string.vo.d.ts +0 -10
  358. package/dist/height-milimiters.vo.d.ts +0 -7
  359. package/dist/height-milimiters.vo.js +0 -12
  360. package/dist/hour-value.vo.d.ts +0 -7
  361. package/dist/hour-value.vo.js +0 -10
  362. package/dist/iban-schema.vo.d.ts +0 -7
  363. package/dist/iban-schema.vo.js +0 -12
  364. package/dist/image.vo.d.ts +0 -13
  365. package/dist/image.vo.js +0 -20
  366. package/dist/integer-non-negative.vo.d.ts +0 -7
  367. package/dist/integer-non-negative.vo.js +0 -12
  368. package/dist/integer-positive.vo.d.ts +0 -7
  369. package/dist/integer-positive.vo.js +0 -9
  370. package/dist/integer.vo.d.ts +0 -6
  371. package/dist/integer.vo.js +0 -4
  372. package/dist/language.vo.d.ts +0 -7
  373. package/dist/mime-value.vo.d.ts +0 -6
  374. package/dist/mimes.js +0 -18
  375. package/dist/minute-value.vo.d.ts +0 -7
  376. package/dist/minute-value.vo.js +0 -10
  377. package/dist/money-amount.vo.d.ts +0 -7
  378. package/dist/money-amount.vo.js +0 -9
  379. package/dist/month-iso-id.vo.d.ts +0 -8
  380. package/dist/multiplication-factor.vo.d.ts +0 -7
  381. package/dist/multiplication-factor.vo.js +0 -11
  382. package/dist/object-key.vo.d.ts +0 -11
  383. package/dist/object-key.vo.js +0 -24
  384. package/dist/package-version-schema.vo.d.ts +0 -8
  385. package/dist/pagination-page.vo.d.ts +0 -6
  386. package/dist/pagination-page.vo.js +0 -7
  387. package/dist/pagination-skip.vo.d.ts +0 -7
  388. package/dist/pagination-skip.vo.js +0 -6
  389. package/dist/pagination-take.vo.d.ts +0 -7
  390. package/dist/pagination-take.vo.js +0 -6
  391. package/dist/quarter-iso-id.vo.d.ts +0 -7
  392. package/dist/quarter-iso-id.vo.js +0 -11
  393. package/dist/reordering-item-position-value.vo.d.ts +0 -6
  394. package/dist/reordering-item-position-value.vo.js +0 -6
  395. package/dist/revision-value.vo.d.ts +0 -7
  396. package/dist/revision-value.vo.js +0 -6
  397. package/dist/rounding-decimal.strategy.js +0 -19
  398. package/dist/size-bytes.vo.d.ts +0 -6
  399. package/dist/size-bytes.vo.js +0 -9
  400. package/dist/time-zone-offset-value.vo.d.ts +0 -8
  401. package/dist/time-zone-offset-value.vo.js +0 -17
  402. package/dist/timestamp-value.vo.d.ts +0 -6
  403. package/dist/timestamp-value.vo.js +0 -9
  404. package/dist/timezone.vo.d.ts +0 -9
  405. package/dist/url-with-slash.vo.d.ts +0 -6
  406. package/dist/url-with-slash.vo.js +0 -8
  407. package/dist/url-without-slash.vo.d.ts +0 -6
  408. package/dist/url-without-slash.vo.js +0 -8
  409. package/dist/week-iso-id.vo.d.ts +0 -8
  410. package/dist/weekday-iso-id.vo.d.ts +0 -7
  411. package/dist/weekday-iso-id.vo.js +0 -10
  412. package/dist/weight-grams.vo.d.ts +0 -7
  413. package/dist/weight-grams.vo.js +0 -9
  414. package/dist/year-iso-id.vo.d.ts +0 -7
  415. package/dist/year-iso-id.vo.js +0 -10
  416. package/dist/{age.vo.d.ts → src/age.vo.d.ts} +0 -0
  417. package/dist/{batch.d.ts → src/batch.d.ts} +0 -0
  418. package/dist/{batch.js → src/batch.js} +0 -0
  419. package/dist/{date-calculator.service.d.ts → src/date-calculator.service.d.ts} +0 -0
  420. package/dist/{date-calculator.service.js → src/date-calculator.service.js} +0 -0
  421. package/dist/{date-formatter.service.d.ts → src/date-formatter.service.d.ts} +0 -0
  422. package/dist/{date-formatter.service.js → src/date-formatter.service.js} +0 -0
  423. package/dist/{date-range.vo.d.ts → src/date-range.vo.d.ts} +0 -0
  424. package/dist/{date-range.vo.js → src/date-range.vo.js} +0 -0
  425. package/dist/{day.vo.d.ts → src/day.vo.d.ts} +1 -1
  426. /package/dist/{distance.vo.d.ts → src/distance.vo.d.ts} +0 -0
  427. /package/dist/{dll.service.d.ts → src/dll.service.d.ts} +0 -0
  428. /package/dist/{dll.service.js → src/dll.service.js} +0 -0
  429. /package/dist/{duration.service.d.ts → src/duration.service.d.ts} +0 -0
  430. /package/dist/{email-mask.service.d.ts → src/email-mask.service.d.ts} +0 -0
  431. /package/dist/{email-mask.service.js → src/email-mask.service.js} +0 -0
  432. /package/dist/{etags.vo.d.ts → src/etags.vo.d.ts} +0 -0
  433. /package/dist/{feature-flag.vo.d.ts → src/feature-flag.vo.d.ts} +0 -0
  434. /package/dist/{feature-flag.vo.js → src/feature-flag.vo.js} +0 -0
  435. /package/dist/{file-path.vo.d.ts → src/file-path.vo.d.ts} +0 -0
  436. /package/dist/{filename.vo.d.ts → src/filename.vo.d.ts} +0 -0
  437. /package/dist/{height.vo.d.ts → src/height.vo.d.ts} +0 -0
  438. /package/dist/{hour.vo.d.ts → src/hour.vo.d.ts} +0 -0
  439. /package/dist/{iban-mask.service.d.ts → src/iban-mask.service.d.ts} +0 -0
  440. /package/dist/{iban-mask.service.js → src/iban-mask.service.js} +0 -0
  441. /package/dist/{iban.vo.d.ts → src/iban.vo.d.ts} +0 -0
  442. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  443. /package/dist/{index.js → src/index.js} +0 -0
  444. /package/dist/{linear-regression.service.d.ts → src/linear-regression.service.d.ts} +0 -0
  445. /package/dist/{linear-regression.service.js → src/linear-regression.service.js} +0 -0
  446. /package/dist/{mean.service.d.ts → src/mean.service.d.ts} +0 -0
  447. /package/dist/{mean.service.js → src/mean.service.js} +0 -0
  448. /package/dist/{mime-registry-entry.vo.d.ts → src/mime-registry-entry.vo.d.ts} +0 -0
  449. /package/dist/{mime-registry-entry.vo.js → src/mime-registry-entry.vo.js} +0 -0
  450. /package/dist/{mime-registry.service.d.ts → src/mime-registry.service.d.ts} +0 -0
  451. /package/dist/{mime-registry.service.js → src/mime-registry.service.js} +0 -0
  452. /package/dist/{mime.vo.d.ts → src/mime.vo.d.ts} +0 -0
  453. /package/dist/{mimes.d.ts → src/mimes.d.ts} +0 -0
  454. /package/dist/{min-max-scaler.service.d.ts → src/min-max-scaler.service.d.ts} +0 -0
  455. /package/dist/{min-max-scaler.service.js → src/min-max-scaler.service.js} +0 -0
  456. /package/dist/{minute.vo.d.ts → src/minute.vo.d.ts} +0 -0
  457. /package/dist/{money.vo.d.ts → src/money.vo.d.ts} +0 -0
  458. /package/dist/{month.vo.d.ts → src/month.vo.d.ts} +0 -0
  459. /package/dist/{noop.service.d.ts → src/noop.service.d.ts} +0 -0
  460. /package/dist/{noop.service.js → src/noop.service.js} +0 -0
  461. /package/dist/{outlier-detector.service.d.ts → src/outlier-detector.service.d.ts} +0 -0
  462. /package/dist/{outlier-detector.service.js → src/outlier-detector.service.js} +0 -0
  463. /package/dist/{package-version.vo.d.ts → src/package-version.vo.d.ts} +0 -0
  464. /package/dist/{pagination.service.d.ts → src/pagination.service.d.ts} +0 -0
  465. /package/dist/{percentage.service.d.ts → src/percentage.service.d.ts} +0 -0
  466. /package/dist/{percentage.service.js → src/percentage.service.js} +0 -0
  467. /package/dist/{population-standard-deviation.service.d.ts → src/population-standard-deviation.service.d.ts} +0 -0
  468. /package/dist/{population-standard-deviation.service.js → src/population-standard-deviation.service.js} +0 -0
  469. /package/dist/{quarter.vo.d.ts → src/quarter.vo.d.ts} +0 -0
  470. /package/dist/{random.service.d.ts → src/random.service.d.ts} +0 -0
  471. /package/dist/{random.service.js → src/random.service.js} +0 -0
  472. /package/dist/{rate-limiter.service.d.ts → src/rate-limiter.service.d.ts} +0 -0
  473. /package/dist/{rate-limiter.service.js → src/rate-limiter.service.js} +0 -0
  474. /package/dist/{relative-date.vo.d.ts → src/relative-date.vo.d.ts} +0 -0
  475. /package/dist/{relative-date.vo.js → src/relative-date.vo.js} +0 -0
  476. /package/dist/{repeat.d.ts → src/repeat.d.ts} +0 -0
  477. /package/dist/{repeat.js → src/repeat.js} +0 -0
  478. /package/dist/{revision.vo.d.ts → src/revision.vo.d.ts} +0 -0
  479. /package/dist/{rounding-down.strategy.d.ts → src/rounding-down.strategy.d.ts} +0 -0
  480. /package/dist/{rounding-down.strategy.js → src/rounding-down.strategy.js} +0 -0
  481. /package/dist/{rounding-to-nearest.strategy.d.ts → src/rounding-to-nearest.strategy.d.ts} +0 -0
  482. /package/dist/{rounding-to-nearest.strategy.js → src/rounding-to-nearest.strategy.js} +0 -0
  483. /package/dist/{rounding-up.strategy.d.ts → src/rounding-up.strategy.d.ts} +0 -0
  484. /package/dist/{rounding-up.strategy.js → src/rounding-up.strategy.js} +0 -0
  485. /package/dist/{rounding.strategy.d.ts → src/rounding.strategy.d.ts} +0 -0
  486. /package/dist/{rounding.strategy.js → src/rounding.strategy.js} +0 -0
  487. /package/dist/{size.vo.d.ts → src/size.vo.d.ts} +0 -0
  488. /package/dist/{slug.service.d.ts → src/slug.service.d.ts} +0 -0
  489. /package/dist/{slug.service.js → src/slug.service.js} +0 -0
  490. /package/dist/{sum.service.d.ts → src/sum.service.d.ts} +0 -0
  491. /package/dist/{sum.service.js → src/sum.service.js} +0 -0
  492. /package/dist/{thousands-separator.service.d.ts → src/thousands-separator.service.d.ts} +0 -0
  493. /package/dist/{thousands-separator.service.js → src/thousands-separator.service.js} +0 -0
  494. /package/dist/{timestamp.vo.d.ts → src/timestamp.vo.d.ts} +0 -0
  495. /package/dist/{ts-utils.d.ts → src/ts-utils.d.ts} +0 -0
  496. /package/dist/{ts-utils.js → src/ts-utils.js} +0 -0
  497. /package/dist/{visually-unambiguous-characters-generator.service.d.ts → src/visually-unambiguous-characters-generator.service.d.ts} +0 -0
  498. /package/dist/{visually-unambiguous-characters-generator.service.js → src/visually-unambiguous-characters-generator.service.js} +0 -0
  499. /package/dist/{week.vo.d.ts → src/week.vo.d.ts} +0 -0
  500. /package/dist/{weekday.vo.d.ts → src/weekday.vo.d.ts} +0 -0
  501. /package/dist/{weight.vo.d.ts → src/weight.vo.d.ts} +0 -0
  502. /package/dist/{year.vo.d.ts → src/year.vo.d.ts} +0 -0
  503. /package/dist/{z-score.service.d.ts → src/z-score.service.d.ts} +0 -0
  504. /package/dist/{z-score.service.js → src/z-score.service.js} +0 -0
@@ -0,0 +1,74 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { Distance } from "../src/distance.vo";
4
+ import { DistanceValue } from "../src/distance-value.vo";
5
+ import { RoundingDecimalStrategy } from "../src/rounding-decimal.strategy";
6
+ describe("Distance", () => {
7
+ test("happy path", () => {
8
+ expect(Distance.fromMeters(0).get()).toEqual(v.parse(DistanceValue, 0));
9
+ expect(Distance.fromMeters(100).get()).toEqual(v.parse(DistanceValue, 100));
10
+ });
11
+ test("throws on invalid input", () => {
12
+ expect(() => Distance.fromMeters(100.5)).toThrow("distance.value.type");
13
+ });
14
+ test("fromMetersSafe", () => {
15
+ expect(Distance.fromMetersSafe(v.parse(DistanceValue, 1)).get()).toEqual(v.parse(DistanceValue, 1));
16
+ });
17
+ test("fromKilometers", () => {
18
+ expect(Distance.fromKilometers(1).get()).toEqual(v.parse(DistanceValue, 1000));
19
+ expect(Distance.fromKilometers(1.5).get()).toEqual(v.parse(DistanceValue, 1500));
20
+ expect(Distance.fromKilometers(0.123456789).get()).toEqual(v.parse(DistanceValue, 123));
21
+ });
22
+ test("fromKilometers - throws on invalid input", () => {
23
+ expect(() => Distance.fromKilometers(0.123456789, new RoundingDecimalStrategy(5))).toThrow("distance.value.type");
24
+ });
25
+ test("fromMiles", () => {
26
+ expect(Distance.fromMiles(1).get()).toEqual(v.parse(DistanceValue, 1609));
27
+ expect(Distance.fromMiles(1.5).get()).toEqual(v.parse(DistanceValue, 2414));
28
+ expect(Distance.fromMiles(0.123456789).get()).toEqual(v.parse(DistanceValue, 199));
29
+ });
30
+ test("fromMiles - throws on invalid input", () => {
31
+ expect(() => Distance.fromMiles(1, new RoundingDecimalStrategy(1))).toThrow("distance.value.type");
32
+ });
33
+ test("add", () => {
34
+ expect(Distance.fromMeters(100).add(Distance.fromMeters(0)).get()).toEqual(v.parse(DistanceValue, 100));
35
+ expect(Distance.fromMeters(15).add(Distance.fromMeters(10)).get()).toEqual(v.parse(DistanceValue, 25));
36
+ });
37
+ test("subtract - result more than zero", () => {
38
+ expect(Distance.fromMeters(100).subtract(Distance.fromMeters(20)).get()).toEqual(v.parse(DistanceValue, 80));
39
+ });
40
+ test("subtract - result zero", () => {
41
+ expect(Distance.fromMeters(100).subtract(Distance.fromMeters(100)).isZero()).toEqual(true);
42
+ });
43
+ test("subtract - result less than zero", () => {
44
+ expect(() => Distance.fromMeters(100).subtract(Distance.fromMeters(120)).get()).toThrow("distance.subtract.result.less.than.zero");
45
+ });
46
+ test("equals", () => {
47
+ const oneHundred = Distance.fromMeters(100);
48
+ const twoHundred = Distance.fromMeters(200);
49
+ expect(oneHundred.equals(oneHundred)).toEqual(true);
50
+ expect(oneHundred.equals(twoHundred)).toEqual(false);
51
+ });
52
+ test("isLongerThan", () => {
53
+ const oneHundred = Distance.fromMeters(100);
54
+ const twoHundred = Distance.fromMeters(200);
55
+ expect(oneHundred.isLongerThan(oneHundred)).toEqual(false);
56
+ expect(twoHundred.isLongerThan(oneHundred)).toEqual(true);
57
+ });
58
+ test("isShorterThan", () => {
59
+ const oneHundred = Distance.fromMeters(100);
60
+ const twoHundred = Distance.fromMeters(200);
61
+ expect(oneHundred.isShorterThan(oneHundred)).toEqual(false);
62
+ expect(oneHundred.isShorterThan(twoHundred)).toEqual(true);
63
+ });
64
+ test("isZero", () => {
65
+ expect(Distance.fromMeters(0).isZero()).toEqual(true);
66
+ expect(Distance.fromMeters(1).isZero()).toEqual(false);
67
+ });
68
+ test("toString", () => {
69
+ expect(Distance.fromMeters(5).toString()).toEqual("5");
70
+ });
71
+ test("toJSON", () => {
72
+ expect(Distance.fromMeters(5).toJSON()).toEqual(5);
73
+ });
74
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { DivisionFactor } from "../src/division-factor.vo";
4
+ describe("DivisionFactor", () => {
5
+ test("happy path", () => {
6
+ expect(v.safeParse(DivisionFactor, 10).success).toEqual(true);
7
+ expect(v.safeParse(DivisionFactor, 1.5).success).toEqual(true);
8
+ });
9
+ test("rejects non-number - null", () => {
10
+ expect(() => v.parse(DivisionFactor, null)).toThrow("division.factor.type");
11
+ });
12
+ test("rejects non-number - string", () => {
13
+ expect(() => v.parse(DivisionFactor, "123")).toThrow("division.factor.type");
14
+ });
15
+ test("rejects zero", () => {
16
+ expect(() => v.parse(DivisionFactor, 0)).toThrow("division.factor.invalid");
17
+ });
18
+ test("rejects negative numbers", () => {
19
+ expect(() => v.parse(DivisionFactor, -1)).toThrow("division.factor.invalid");
20
+ });
21
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,381 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { DoublyLinkedList, Node } from "../src/dll.service";
3
+ class Token {
4
+ value;
5
+ constructor(value) {
6
+ this.value = value;
7
+ }
8
+ }
9
+ const token = new Token("test");
10
+ describe("DLL", () => {
11
+ test("creates an empty List", () => {
12
+ const dll = new DoublyLinkedList();
13
+ expect(dll.getSize()).toEqual(0);
14
+ expect(dll.getHead()).toEqual(null);
15
+ expect(dll.getTail()).toEqual(null);
16
+ });
17
+ test("isEmpty", () => {
18
+ const dll = new DoublyLinkedList();
19
+ expect(dll.isEmpty()).toEqual(true);
20
+ dll.append(new Node(token));
21
+ expect(dll.isEmpty()).toEqual(false);
22
+ });
23
+ test("appends the first Node", () => {
24
+ const dll = new DoublyLinkedList();
25
+ const node = new Node(token);
26
+ dll.append(node);
27
+ expect(dll.getSize()).toEqual(1);
28
+ expect(dll.getHead()).toEqual(node);
29
+ expect(dll.getTail()).toEqual(node);
30
+ });
31
+ test("appends two Nodes", () => {
32
+ const dll = new DoublyLinkedList();
33
+ const firstNode = new Node(token);
34
+ const secondNode = new Node(token);
35
+ dll.append(firstNode);
36
+ expect(dll.getSize()).toEqual(1);
37
+ expect(dll.getHead()).toEqual(firstNode);
38
+ expect(dll.getTail()).toEqual(firstNode);
39
+ dll.append(secondNode);
40
+ expect(dll.getSize()).toEqual(2);
41
+ expect(dll.getHead()).toEqual(firstNode);
42
+ expect(dll.getTail()).toEqual(secondNode);
43
+ expect(firstNode.backward(1)).toEqual(null);
44
+ expect(firstNode.forward(1)).toEqual(secondNode);
45
+ expect(secondNode.backward(1)).toEqual(firstNode);
46
+ expect(secondNode.forward(1)).toEqual(null);
47
+ });
48
+ test("appends three Nodes", () => {
49
+ const dll = new DoublyLinkedList();
50
+ const firstNode = new Node(token);
51
+ const secondNode = new Node(token);
52
+ const thirdNode = new Node(token);
53
+ dll.append(firstNode);
54
+ expect(dll.getSize()).toEqual(1);
55
+ expect(dll.getHead()).toEqual(firstNode);
56
+ expect(dll.getTail()).toEqual(firstNode);
57
+ dll.append(secondNode);
58
+ expect(dll.getSize()).toEqual(2);
59
+ expect(dll.getHead()).toEqual(firstNode);
60
+ expect(dll.getTail()).toEqual(secondNode);
61
+ expect(firstNode.backward(1)).toEqual(null);
62
+ expect(firstNode.forward(1)).toEqual(secondNode);
63
+ expect(secondNode.backward(1)).toEqual(firstNode);
64
+ expect(secondNode.forward(1)).toEqual(null);
65
+ dll.append(thirdNode);
66
+ expect(dll.getSize()).toEqual(3);
67
+ expect(dll.getHead()).toEqual(firstNode);
68
+ expect(dll.getTail()).toEqual(thirdNode);
69
+ expect(firstNode.backward(1)).toEqual(null);
70
+ expect(firstNode.forward(1)).toEqual(secondNode);
71
+ expect(secondNode.backward(1)).toEqual(firstNode);
72
+ expect(secondNode.forward(1)).toEqual(thirdNode);
73
+ expect(thirdNode.backward(1)).toEqual(secondNode);
74
+ expect(thirdNode.forward(1)).toEqual(null);
75
+ });
76
+ test("appends four Nodes", () => {
77
+ const dll = new DoublyLinkedList();
78
+ const firstNode = new Node(token);
79
+ const secondNode = new Node(token);
80
+ const thirdNode = new Node(token);
81
+ const fourthNode = new Node(token);
82
+ dll.append(firstNode);
83
+ expect(dll.getSize()).toEqual(1);
84
+ expect(dll.getHead()).toEqual(firstNode);
85
+ expect(dll.getTail()).toEqual(firstNode);
86
+ dll.append(secondNode);
87
+ expect(dll.getSize()).toEqual(2);
88
+ expect(dll.getHead()).toEqual(firstNode);
89
+ expect(dll.getTail()).toEqual(secondNode);
90
+ expect(firstNode.backward(1)).toEqual(null);
91
+ expect(firstNode.forward(1)).toEqual(secondNode);
92
+ expect(secondNode.backward(1)).toEqual(firstNode);
93
+ expect(secondNode.forward(1)).toEqual(null);
94
+ dll.append(thirdNode);
95
+ expect(dll.getSize()).toEqual(3);
96
+ expect(dll.getHead()).toEqual(firstNode);
97
+ expect(dll.getTail()).toEqual(thirdNode);
98
+ expect(firstNode.backward(1)).toEqual(null);
99
+ expect(firstNode.forward(1)).toEqual(secondNode);
100
+ expect(secondNode.backward(1)).toEqual(firstNode);
101
+ expect(secondNode.forward(1)).toEqual(thirdNode);
102
+ expect(thirdNode.backward(1)).toEqual(secondNode);
103
+ expect(thirdNode.forward(1)).toEqual(null);
104
+ dll.append(fourthNode);
105
+ expect(dll.getSize()).toEqual(4);
106
+ expect(dll.getHead()).toEqual(firstNode);
107
+ expect(dll.getTail()).toEqual(fourthNode);
108
+ expect(firstNode.backward(1)).toEqual(null);
109
+ expect(firstNode.forward(1)).toEqual(secondNode);
110
+ expect(secondNode.backward(1)).toEqual(firstNode);
111
+ expect(secondNode.forward(1)).toEqual(thirdNode);
112
+ expect(thirdNode.backward(1)).toEqual(secondNode);
113
+ expect(thirdNode.forward(1)).toEqual(fourthNode);
114
+ expect(fourthNode.backward(1)).toEqual(thirdNode);
115
+ expect(fourthNode.forward(1)).toEqual(null);
116
+ });
117
+ test("prepend on empty dll", () => {
118
+ const dll = new DoublyLinkedList();
119
+ const node1 = new Node(token);
120
+ expect(dll.getSize()).toEqual(0);
121
+ expect(dll.getHead()).toEqual(null);
122
+ expect(dll.getTail()).toEqual(null);
123
+ dll.prepend(node1);
124
+ expect(dll.getSize()).toEqual(1);
125
+ expect(dll.getHead()).toEqual(node1);
126
+ expect(dll.getTail()).toEqual(node1);
127
+ });
128
+ test("prepend one node", () => {
129
+ const dll = new DoublyLinkedList();
130
+ const node1 = new Node(token);
131
+ const node2 = new Node(token);
132
+ dll.append(node1);
133
+ expect(dll.getSize()).toEqual(1);
134
+ expect(dll.getHead()).toEqual(node1);
135
+ expect(dll.getTail()).toEqual(node1);
136
+ dll.prepend(node2);
137
+ expect(dll.getSize()).toEqual(2);
138
+ expect(dll.getHead()).toEqual(node2);
139
+ expect(dll.getTail()).toEqual(node1);
140
+ });
141
+ test("prepend two node", () => {
142
+ const dll = new DoublyLinkedList();
143
+ const node1 = new Node(token);
144
+ const node2 = new Node(token);
145
+ const node3 = new Node(token);
146
+ dll.append(node1);
147
+ expect(dll.getSize()).toEqual(1);
148
+ expect(dll.getHead()).toEqual(node1);
149
+ expect(dll.getTail()).toEqual(node1);
150
+ dll.prepend(node2);
151
+ expect(dll.getSize()).toEqual(2);
152
+ expect(dll.getHead()).toEqual(node2);
153
+ expect(dll.getTail()).toEqual(node1);
154
+ dll.prepend(node3);
155
+ expect(dll.getSize()).toEqual(3);
156
+ expect(dll.getHead()).toEqual(node3);
157
+ expect(dll.getHead()?.next).toEqual(node2);
158
+ expect(dll.getHead()?.next?.next).toEqual(node1);
159
+ expect(dll.getTail()).toEqual(node1);
160
+ });
161
+ test("clear", () => {
162
+ const dll = new DoublyLinkedList();
163
+ const node = new Node(token);
164
+ dll.append(node);
165
+ expect(dll.getSize()).toEqual(1);
166
+ expect(dll.getHead()).toEqual(node);
167
+ expect(dll.getTail()).toEqual(node);
168
+ dll.clear();
169
+ expect(dll.getSize()).toEqual(0);
170
+ expect(dll.getHead()).toEqual(null);
171
+ expect(dll.getTail()).toEqual(null);
172
+ });
173
+ test("remove - head", () => {
174
+ const dll = new DoublyLinkedList();
175
+ const node1 = new Node(token);
176
+ const node2 = new Node(token);
177
+ const node3 = new Node(token);
178
+ dll.append(node1);
179
+ dll.append(node2);
180
+ dll.append(node3);
181
+ expect(dll.getSize()).toEqual(3);
182
+ dll.remove(node1);
183
+ expect(dll.getSize()).toEqual(2);
184
+ expect(dll.getHead()).toEqual(node2);
185
+ expect(dll.getHead()?.next).toEqual(node3);
186
+ expect(dll.getTail()).toEqual(node3);
187
+ });
188
+ test("remove - tail", () => {
189
+ const dll = new DoublyLinkedList();
190
+ const node1 = new Node(token);
191
+ const node2 = new Node(token);
192
+ const node3 = new Node(token);
193
+ dll.append(node1);
194
+ dll.append(node2);
195
+ dll.append(node3);
196
+ expect(dll.getSize()).toEqual(3);
197
+ dll.remove(node3);
198
+ expect(dll.getSize()).toEqual(2);
199
+ expect(dll.getHead()).toEqual(node1);
200
+ expect(dll.getHead()?.next).toEqual(node2);
201
+ expect(dll.getTail()).toEqual(node2);
202
+ });
203
+ test("remove - in between", () => {
204
+ const dll = new DoublyLinkedList();
205
+ const node1 = new Node(token);
206
+ const node2 = new Node(token);
207
+ const node3 = new Node(token);
208
+ dll.append(node1);
209
+ dll.append(node2);
210
+ dll.append(node3);
211
+ expect(dll.getSize()).toEqual(3);
212
+ dll.remove(node2);
213
+ expect(dll.getSize()).toEqual(2);
214
+ expect(dll.getHead()).toEqual(node1);
215
+ expect(dll.getHead()?.next).toEqual(node3);
216
+ expect(node3.prev).toEqual(node1);
217
+ expect(dll.getTail()).toEqual(node3);
218
+ });
219
+ test("insertAfter - head", () => {
220
+ const dll = new DoublyLinkedList();
221
+ const node1 = new Node(token);
222
+ const node2 = new Node(token);
223
+ dll.append(node1);
224
+ expect(dll.getSize()).toEqual(1);
225
+ dll.insertAfter(node2, node1);
226
+ expect(dll.getSize()).toEqual(2);
227
+ expect(dll.getHead()).toEqual(node1);
228
+ expect(dll.getTail()).toEqual(node2);
229
+ });
230
+ test("insertAfter - tail", () => {
231
+ const dll = new DoublyLinkedList();
232
+ const node1 = new Node(token);
233
+ const node2 = new Node(token);
234
+ const node3 = new Node(token);
235
+ dll.append(node1);
236
+ dll.append(node2);
237
+ expect(dll.getSize()).toEqual(2);
238
+ dll.insertAfter(node3, node2);
239
+ expect(dll.getSize()).toEqual(3);
240
+ expect(dll.getHead()).toEqual(node1);
241
+ expect(dll.getHead()?.next).toEqual(node2);
242
+ expect(dll.getHead()?.next?.next).toEqual(node3);
243
+ expect(dll.getTail()).toEqual(node3);
244
+ });
245
+ test("insertAfter - node in between", () => {
246
+ const dll = new DoublyLinkedList();
247
+ const node1 = new Node(token);
248
+ const node2 = new Node(token);
249
+ const node3 = new Node(token);
250
+ dll.append(node1);
251
+ dll.append(node2);
252
+ expect(dll.getSize()).toEqual(2);
253
+ dll.insertAfter(node3, node1);
254
+ expect(dll.getSize()).toEqual(3);
255
+ expect(dll.getHead()).toEqual(node1);
256
+ expect(dll.getHead()?.next).toEqual(node3);
257
+ expect(dll.getHead()?.next?.next).toEqual(node2);
258
+ expect(dll.getTail()).toEqual(node2);
259
+ });
260
+ test("insertBefore - head", () => {
261
+ const dll = new DoublyLinkedList();
262
+ const node1 = new Node(token);
263
+ const node2 = new Node(token);
264
+ dll.append(node1);
265
+ expect(dll.getSize()).toEqual(1);
266
+ dll.insertBefore(node2, node1);
267
+ expect(dll.getSize()).toEqual(2);
268
+ expect(dll.getHead()).toEqual(node2);
269
+ expect(dll.getTail()).toEqual(node1);
270
+ });
271
+ test("insertBefore - tail", () => {
272
+ const dll = new DoublyLinkedList();
273
+ const node1 = new Node(token);
274
+ const node2 = new Node(token);
275
+ const node3 = new Node(token);
276
+ dll.append(node1);
277
+ dll.append(node2);
278
+ expect(dll.getSize()).toEqual(2);
279
+ dll.insertBefore(node3, node2);
280
+ expect(dll.getSize()).toEqual(3);
281
+ expect(dll.getHead()).toEqual(node1);
282
+ expect(dll.getHead()?.next).toEqual(node3);
283
+ expect(dll.getHead()?.next?.next).toEqual(node2);
284
+ expect(dll.getTail()).toEqual(node2);
285
+ });
286
+ test("insertBefore - node in between", () => {
287
+ const dll = new DoublyLinkedList();
288
+ const node1 = new Node(token);
289
+ const node2 = new Node(token);
290
+ const node3 = new Node(token);
291
+ dll.append(node1);
292
+ dll.append(node2);
293
+ expect(dll.getSize()).toEqual(2);
294
+ dll.insertBefore(node3, node1);
295
+ expect(dll.getSize()).toEqual(3);
296
+ expect(dll.getHead()).toEqual(node3);
297
+ expect(dll.getHead()?.next).toEqual(node1);
298
+ expect(dll.getHead()?.next?.next).toEqual(node2);
299
+ expect(dll.getTail()).toEqual(node2);
300
+ });
301
+ test("find", () => {
302
+ const dll = new DoublyLinkedList();
303
+ const node1 = new Node(token);
304
+ const node2 = new Node(token);
305
+ const node3 = new Node(token);
306
+ dll.append(node1);
307
+ dll.append(node2);
308
+ dll.append(node3);
309
+ expect(dll.getSize()).toEqual(3);
310
+ expect(dll.find((node) => node === dll.getHead())).toEqual(node1);
311
+ expect(dll.find((node) => node === dll.getTail())).toEqual(node3);
312
+ expect(dll.find((node) => node.data.value === "ok")).toEqual(null);
313
+ });
314
+ test("fromArray", () => {
315
+ const data = [token, token, token];
316
+ const dll = DoublyLinkedList.fromArray(data);
317
+ expect(dll.getSize()).toEqual(3);
318
+ expect(dll.getHead()?.backward(1)).toEqual(null);
319
+ expect(dll.getHead()?.forward(1)).not.toEqual(null);
320
+ expect(dll.getHead()?.forward(2)).not.toEqual(null);
321
+ expect(dll.getHead()?.forward(3)).toEqual(null);
322
+ expect(dll.getTail()?.forward(1)).toEqual(null);
323
+ expect(dll.getTail()?.backward(1)).not.toEqual(null);
324
+ expect(dll.getTail()?.backward(2)).not.toEqual(null);
325
+ expect(dll.getTail()?.backward(3)).toEqual(null);
326
+ });
327
+ test("toArray", () => {
328
+ const data = [token, token, token];
329
+ const dll = DoublyLinkedList.fromArray(data);
330
+ expect(dll.getSize()).toEqual(3);
331
+ expect(dll.toArray().length).toEqual(3);
332
+ expect(dll?.toArray?.()?.[0]?.data).toEqual(data[0]);
333
+ expect(dll?.toArray?.()?.[1]?.data).toEqual(data[1]);
334
+ expect(dll?.toArray?.()?.[2]?.data).toEqual(data[2]);
335
+ });
336
+ test("reverse", () => {
337
+ const token1 = new Token("test1");
338
+ const token2 = new Token("test2");
339
+ const token3 = new Token("test3");
340
+ const token4 = new Token("test4");
341
+ const dll = new DoublyLinkedList();
342
+ const node1 = new Node(token1);
343
+ const node2 = new Node(token2);
344
+ const node3 = new Node(token3);
345
+ const node4 = new Node(token4);
346
+ dll.append(node1);
347
+ dll.append(node2);
348
+ dll.append(node3);
349
+ dll.append(node4);
350
+ expect(dll.getSize()).toEqual(4);
351
+ dll.reverse();
352
+ expect(dll.getSize()).toEqual(4);
353
+ expect(dll.getHead()).toEqual(node4);
354
+ expect(dll.getHead()?.next).toEqual(node3);
355
+ expect(dll.getHead()?.next?.next).toEqual(node2);
356
+ expect(dll.getHead()?.next?.next?.next).toEqual(node1);
357
+ expect(dll.getTail()).toEqual(node1);
358
+ });
359
+ test("Symbol.iterator", () => {
360
+ const dll = new DoublyLinkedList();
361
+ const firstToken = new Token("first");
362
+ const firstNode = new Node(firstToken);
363
+ const secondToken = new Token("second");
364
+ const secondNode = new Node(secondToken);
365
+ const thirdToken = new Token("third");
366
+ const thirdNode = new Node(thirdToken);
367
+ dll.append(firstNode);
368
+ dll.append(secondNode);
369
+ dll.append(thirdNode);
370
+ let index = 0;
371
+ for (const node of dll) {
372
+ if (index === 0)
373
+ expect(node.data).toEqual(firstToken);
374
+ if (index === 1)
375
+ expect(node.data).toEqual(secondToken);
376
+ if (index === 2)
377
+ expect(node.data).toEqual(thirdToken);
378
+ index += 1;
379
+ }
380
+ });
381
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { DurationMs } from "../src/duration-ms.vo";
4
+ describe("DurationMs", () => {
5
+ test("happy path", () => {
6
+ expect(v.safeParse(DurationMs, 0).success).toEqual(true);
7
+ expect(v.safeParse(DurationMs, 10_000).success).toEqual(true);
8
+ });
9
+ test("rejects non-number - null", () => {
10
+ expect(() => v.parse(DurationMs, null)).toThrow("duration.invalid");
11
+ });
12
+ test("rejects non-number - string", () => {
13
+ expect(() => v.parse(DurationMs, "123")).toThrow("duration.invalid");
14
+ });
15
+ test("rejects fractions", () => {
16
+ expect(() => v.parse(DurationMs, 1.5)).toThrow("duration.invalid");
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,126 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { Duration } from "../src/duration.service";
4
+ import { DurationMs } from "../src/duration-ms.vo";
5
+ import { MultiplicationFactor } from "../src/multiplication-factor.vo";
6
+ describe("Duration", () => {
7
+ test("weeks", () => {
8
+ const weeks = Duration.Weeks(2);
9
+ expect(weeks.days).toEqual(14);
10
+ expect(weeks.hours).toEqual(336);
11
+ expect(weeks.minutes).toEqual(20160);
12
+ expect(weeks.seconds).toEqual(1209600);
13
+ expect(weeks.ms).toEqual(v.parse(DurationMs, 1_209_600_000));
14
+ expect(weeks.ns).toEqual(1_209_600_000_000_000);
15
+ });
16
+ test("days", () => {
17
+ const days = Duration.Days(2);
18
+ expect(days.weeks).toEqual(0.29);
19
+ expect(days.days).toEqual(2);
20
+ expect(days.hours).toEqual(48);
21
+ expect(days.minutes).toEqual(2880);
22
+ expect(days.seconds).toEqual(172800);
23
+ expect(days.ms).toEqual(v.parse(DurationMs, 172_800_000));
24
+ expect(days.ns).toEqual(172_800_000_000_000);
25
+ });
26
+ test("hours", () => {
27
+ const hours = Duration.Hours(3);
28
+ expect(hours.weeks).toEqual(0.02);
29
+ expect(hours.days).toEqual(0.13);
30
+ expect(hours.hours).toEqual(3);
31
+ expect(hours.minutes).toEqual(180);
32
+ expect(hours.seconds).toEqual(10_800);
33
+ expect(hours.ms).toEqual(v.parse(DurationMs, 10_800_000));
34
+ expect(hours.ns).toEqual(10_800_000_000_000);
35
+ });
36
+ test("minutes", () => {
37
+ const minutes = Duration.Minutes(30);
38
+ expect(minutes.weeks).toEqual(0);
39
+ expect(minutes.days).toEqual(0.02);
40
+ expect(minutes.hours).toEqual(0.5);
41
+ expect(minutes.minutes).toEqual(30);
42
+ expect(minutes.seconds).toEqual(1_800);
43
+ expect(minutes.ms).toEqual(v.parse(DurationMs, 1_800_000));
44
+ expect(minutes.ns).toEqual(1_800_000_000_000);
45
+ });
46
+ test("seconds", () => {
47
+ const seconds = Duration.Seconds(120);
48
+ expect(seconds.weeks).toEqual(0);
49
+ expect(seconds.days).toEqual(0);
50
+ expect(seconds.hours).toEqual(0.03);
51
+ expect(seconds.minutes).toEqual(2);
52
+ expect(seconds.seconds).toEqual(120);
53
+ expect(seconds.ms).toEqual(v.parse(DurationMs, 120_000));
54
+ expect(seconds.ns).toEqual(120_000_000_000);
55
+ });
56
+ test("ms", () => {
57
+ const ms = Duration.Ms(500);
58
+ expect(ms.weeks).toEqual(0);
59
+ expect(ms.days).toEqual(0);
60
+ expect(ms.hours).toEqual(0);
61
+ expect(ms.minutes).toEqual(0.01);
62
+ expect(ms.seconds).toEqual(0.5);
63
+ expect(ms.ms).toEqual(v.parse(DurationMs, 500));
64
+ expect(ms.ns).toEqual(500_000_000);
65
+ });
66
+ test("ns", () => {
67
+ const ns = Duration.Ns(5_499_999);
68
+ expect(ns.weeks).toEqual(0);
69
+ expect(ns.days).toEqual(0);
70
+ expect(ns.hours).toEqual(0);
71
+ expect(ns.minutes).toEqual(0);
72
+ expect(ns.seconds).toEqual(0.01);
73
+ expect(ns.ms).toEqual(v.parse(DurationMs, 5));
74
+ expect(ns.ns).toEqual(5_000_000);
75
+ });
76
+ test("add/subtract", () => {
77
+ const base = Duration.Seconds(10);
78
+ const added = base.add(Duration.Seconds(5));
79
+ const subtracted = base.subtract(Duration.Seconds(3));
80
+ expect(added.seconds).toEqual(15);
81
+ expect(subtracted.seconds).toEqual(7);
82
+ });
83
+ test("times", () => {
84
+ const base = Duration.Ms(10);
85
+ const factor = v.parse(MultiplicationFactor, 1.5);
86
+ const result = base.times(factor);
87
+ expect(result.ms).toEqual(v.parse(DurationMs, 15));
88
+ });
89
+ test("times - rounding", () => {
90
+ const base = Duration.Ms(7);
91
+ const factor = v.parse(MultiplicationFactor, 1.29);
92
+ const result = base.times(factor);
93
+ expect(result.ms).toEqual(v.parse(DurationMs, 9));
94
+ });
95
+ test("equals", () => {
96
+ const a = Duration.Ms(1_000);
97
+ const b = Duration.Ms(2_000);
98
+ expect(a.equals(a)).toEqual(true);
99
+ expect(a.equals(b)).toEqual(false);
100
+ });
101
+ test("isLongerThan", () => {
102
+ const a = Duration.Ms(2_000);
103
+ const b = Duration.Ms(1_000);
104
+ expect(a.isLongerThan(b)).toEqual(true);
105
+ expect(a.isLongerThan(a)).toEqual(false);
106
+ });
107
+ test("isShorterThan", () => {
108
+ const a = Duration.Ms(1_000);
109
+ const b = Duration.Ms(2_000);
110
+ expect(a.isShorterThan(b)).toEqual(true);
111
+ expect(a.isShorterThan(a)).toEqual(false);
112
+ });
113
+ test("toAbsolute", () => {
114
+ expect(Duration.Ms(1000).toAbsolute()).toEqual(Duration.Ms(1000));
115
+ expect(Duration.Ms(-1000).toAbsolute()).toEqual(Duration.Ms(1000));
116
+ });
117
+ test("MIN", () => {
118
+ expect(Duration.MIN.ms).toEqual(v.parse(DurationMs, 1));
119
+ });
120
+ test("toString", () => {
121
+ expect(Duration.MIN.toString()).toEqual("1");
122
+ });
123
+ test("toJSON", () => {
124
+ expect(Duration.MIN.toJSON()).toEqual(1);
125
+ });
126
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { Email } from "../src/email.vo";
4
+ import { EmailMask } from "../src/email-mask.service";
5
+ describe("EmailMask", () => {
6
+ test("works for 1 char", () => {
7
+ expect(EmailMask.censor(v.parse(Email, "t@example.com"))).toEqual("*@example.com");
8
+ });
9
+ test("works for 2 chars", () => {
10
+ expect(EmailMask.censor(v.parse(Email, "te@example.com"))).toEqual("**@example.com");
11
+ });
12
+ test("works for more than 2 chars", () => {
13
+ expect(EmailMask.censor(v.parse(Email, "testing@example.com"))).toEqual("t*****g@example.com");
14
+ });
15
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import * as v from "valibot";
3
+ import { Email } from "../src/email.vo";
4
+ describe("Email", () => {
5
+ test("happy path", () => {
6
+ expect(v.safeParse(Email, "user@example.com").success).toEqual(true);
7
+ });
8
+ test("rejects empty", () => {
9
+ expect(() => v.parse(Email, "")).toThrow("email.invalid");
10
+ });
11
+ test("rejects non-string - null", () => {
12
+ expect(() => v.parse(Email, null)).toThrow("email.invalid");
13
+ });
14
+ test("rejects non-string - number", () => {
15
+ expect(() => v.parse(Email, 123)).toThrow("email.invalid");
16
+ });
17
+ });
@@ -0,0 +1 @@
1
+ export {};