@haskou/value-objects 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/dist/src/errors/BaseError.d.ts +8 -0
  2. package/dist/src/errors/BaseError.d.ts.map +1 -0
  3. package/dist/src/errors/BaseError.js +22 -0
  4. package/dist/src/errors/BaseError.js.map +1 -0
  5. package/dist/src/errors/DomainError.d.ts +7 -0
  6. package/dist/src/errors/DomainError.d.ts.map +1 -0
  7. package/dist/src/errors/DomainError.js +15 -0
  8. package/dist/src/errors/DomainError.js.map +1 -0
  9. package/dist/src/errors/InvalidColorError.d.ts +5 -0
  10. package/dist/src/errors/InvalidColorError.d.ts.map +1 -0
  11. package/dist/src/errors/InvalidColorError.js +11 -0
  12. package/dist/src/errors/InvalidColorError.js.map +1 -0
  13. package/dist/src/errors/InvalidDayError.d.ts +5 -0
  14. package/dist/src/errors/InvalidDayError.d.ts.map +1 -0
  15. package/dist/src/errors/InvalidDayError.js +11 -0
  16. package/dist/src/errors/InvalidDayError.js.map +1 -0
  17. package/dist/src/errors/InvalidDayFormatError.d.ts +5 -0
  18. package/dist/src/errors/InvalidDayFormatError.d.ts.map +1 -0
  19. package/dist/src/errors/InvalidDayFormatError.js +11 -0
  20. package/dist/src/errors/InvalidDayFormatError.js.map +1 -0
  21. package/dist/src/errors/InvalidEmailError.d.ts +5 -0
  22. package/dist/src/errors/InvalidEmailError.d.ts.map +1 -0
  23. package/dist/src/errors/InvalidEmailError.js +11 -0
  24. package/dist/src/errors/InvalidEmailError.js.map +1 -0
  25. package/dist/src/errors/InvalidFormatError.d.ts +5 -0
  26. package/dist/src/errors/InvalidFormatError.d.ts.map +1 -0
  27. package/dist/src/errors/InvalidFormatError.js +11 -0
  28. package/dist/src/errors/InvalidFormatError.js.map +1 -0
  29. package/dist/src/errors/InvalidHashError.d.ts +5 -0
  30. package/dist/src/errors/InvalidHashError.d.ts.map +1 -0
  31. package/dist/src/errors/InvalidHashError.js +11 -0
  32. package/dist/src/errors/InvalidHashError.js.map +1 -0
  33. package/dist/src/errors/InvalidHourError.d.ts +5 -0
  34. package/dist/src/errors/InvalidHourError.d.ts.map +1 -0
  35. package/dist/src/errors/InvalidHourError.js +11 -0
  36. package/dist/src/errors/InvalidHourError.js.map +1 -0
  37. package/dist/src/errors/InvalidIntegerError.d.ts +5 -0
  38. package/dist/src/errors/InvalidIntegerError.d.ts.map +1 -0
  39. package/dist/src/errors/InvalidIntegerError.js +11 -0
  40. package/dist/src/errors/InvalidIntegerError.js.map +1 -0
  41. package/dist/src/errors/InvalidLatitudeError.d.ts +5 -0
  42. package/dist/src/errors/InvalidLatitudeError.d.ts.map +1 -0
  43. package/dist/src/errors/InvalidLatitudeError.js +11 -0
  44. package/dist/src/errors/InvalidLatitudeError.js.map +1 -0
  45. package/dist/src/errors/InvalidLengthError.d.ts +5 -0
  46. package/dist/src/errors/InvalidLengthError.d.ts.map +1 -0
  47. package/dist/src/errors/InvalidLengthError.js +11 -0
  48. package/dist/src/errors/InvalidLengthError.js.map +1 -0
  49. package/dist/src/errors/InvalidLongitudeError.d.ts +5 -0
  50. package/dist/src/errors/InvalidLongitudeError.d.ts.map +1 -0
  51. package/dist/src/errors/InvalidLongitudeError.js +11 -0
  52. package/dist/src/errors/InvalidLongitudeError.js.map +1 -0
  53. package/dist/src/errors/InvalidMinutesError.d.ts +5 -0
  54. package/dist/src/errors/InvalidMinutesError.d.ts.map +1 -0
  55. package/dist/src/errors/InvalidMinutesError.js +11 -0
  56. package/dist/src/errors/InvalidMinutesError.js.map +1 -0
  57. package/dist/src/errors/InvalidNumberError.d.ts +5 -0
  58. package/dist/src/errors/InvalidNumberError.d.ts.map +1 -0
  59. package/dist/src/errors/InvalidNumberError.js +11 -0
  60. package/dist/src/errors/InvalidNumberError.js.map +1 -0
  61. package/dist/src/errors/InvalidPositiveNumberError.d.ts +5 -0
  62. package/dist/src/errors/InvalidPositiveNumberError.d.ts.map +1 -0
  63. package/dist/src/errors/InvalidPositiveNumberError.js +11 -0
  64. package/dist/src/errors/InvalidPositiveNumberError.js.map +1 -0
  65. package/dist/src/errors/InvalidStringLengthError.d.ts +5 -0
  66. package/dist/src/errors/InvalidStringLengthError.d.ts.map +1 -0
  67. package/dist/src/errors/InvalidStringLengthError.js +11 -0
  68. package/dist/src/errors/InvalidStringLengthError.js.map +1 -0
  69. package/dist/src/errors/InvalidTimestampIntervalError.d.ts +6 -0
  70. package/dist/src/errors/InvalidTimestampIntervalError.d.ts.map +1 -0
  71. package/dist/src/errors/InvalidTimestampIntervalError.js +11 -0
  72. package/dist/src/errors/InvalidTimestampIntervalError.js.map +1 -0
  73. package/dist/src/errors/InvalidValueError.d.ts +5 -0
  74. package/dist/src/errors/InvalidValueError.d.ts.map +1 -0
  75. package/dist/src/errors/InvalidValueError.js +11 -0
  76. package/dist/src/errors/InvalidValueError.js.map +1 -0
  77. package/dist/src/errors/NullObjectError.d.ts +5 -0
  78. package/dist/src/errors/NullObjectError.d.ts.map +1 -0
  79. package/dist/src/errors/NullObjectError.js +12 -0
  80. package/dist/src/errors/NullObjectError.js.map +1 -0
  81. package/dist/src/errors/ValueNotInEnumError.d.ts +5 -0
  82. package/dist/src/errors/ValueNotInEnumError.d.ts.map +1 -0
  83. package/dist/src/errors/ValueNotInEnumError.js +11 -0
  84. package/dist/src/errors/ValueNotInEnumError.js.map +1 -0
  85. package/{src/errors/index.ts → dist/src/errors/index.d.ts} +1 -0
  86. package/dist/src/errors/index.d.ts.map +1 -0
  87. package/dist/src/errors/index.js +24 -0
  88. package/dist/src/errors/index.js.map +1 -0
  89. package/{src/index.ts → dist/src/index.d.ts} +1 -0
  90. package/dist/src/index.d.ts.map +1 -0
  91. package/dist/src/index.js +9 -0
  92. package/dist/src/index.js.map +1 -0
  93. package/dist/src/interfaces/PrimitiveOf.d.ts +5 -0
  94. package/dist/src/interfaces/PrimitiveOf.d.ts.map +1 -0
  95. package/dist/src/interfaces/PrimitiveOf.js +3 -0
  96. package/dist/src/interfaces/PrimitiveOf.js.map +1 -0
  97. package/dist/src/interfaces/index.d.ts +2 -0
  98. package/dist/src/interfaces/index.d.ts.map +1 -0
  99. package/dist/src/interfaces/index.js +5 -0
  100. package/dist/src/interfaces/index.js.map +1 -0
  101. package/dist/src/patterns/Assert.d.ts +5 -0
  102. package/dist/src/patterns/Assert.d.ts.map +1 -0
  103. package/dist/src/patterns/Assert.js +11 -0
  104. package/dist/src/patterns/Assert.js.map +1 -0
  105. package/dist/src/patterns/index.d.ts +2 -0
  106. package/dist/src/patterns/index.d.ts.map +1 -0
  107. package/dist/src/patterns/index.js +5 -0
  108. package/dist/src/patterns/index.js.map +1 -0
  109. package/{src/types/Nullish.ts → dist/src/types/Nullish.d.ts} +1 -0
  110. package/dist/src/types/Nullish.d.ts.map +1 -0
  111. package/dist/src/types/Nullish.js +3 -0
  112. package/dist/src/types/Nullish.js.map +1 -0
  113. package/{src/types/Primitive.ts → dist/src/types/Primitive.d.ts} +1 -0
  114. package/dist/src/types/Primitive.d.ts.map +1 -0
  115. package/dist/src/types/Primitive.js +3 -0
  116. package/dist/src/types/Primitive.js.map +1 -0
  117. package/{src/types/index.ts → dist/src/types/index.d.ts} +1 -0
  118. package/dist/src/types/index.d.ts.map +1 -0
  119. package/dist/src/types/index.js +6 -0
  120. package/dist/src/types/index.js.map +1 -0
  121. package/dist/src/value-objects/Color.d.ts +19 -0
  122. package/dist/src/value-objects/Color.d.ts.map +1 -0
  123. package/dist/src/value-objects/Color.js +37 -0
  124. package/dist/src/value-objects/Color.js.map +1 -0
  125. package/dist/src/value-objects/Email.d.ts +6 -0
  126. package/dist/src/value-objects/Email.d.ts.map +1 -0
  127. package/dist/src/value-objects/Email.js +21 -0
  128. package/dist/src/value-objects/Email.js.map +1 -0
  129. package/dist/src/value-objects/Enum.d.ts +9 -0
  130. package/dist/src/value-objects/Enum.d.ts.map +1 -0
  131. package/dist/src/value-objects/Enum.js +24 -0
  132. package/dist/src/value-objects/Enum.js.map +1 -0
  133. package/dist/src/value-objects/Integer.d.ts +6 -0
  134. package/dist/src/value-objects/Integer.d.ts.map +1 -0
  135. package/dist/src/value-objects/Integer.js +21 -0
  136. package/dist/src/value-objects/Integer.js.map +1 -0
  137. package/dist/src/value-objects/NullObject.d.ts +8 -0
  138. package/dist/src/value-objects/NullObject.d.ts.map +1 -0
  139. package/dist/src/value-objects/NullObject.js +43 -0
  140. package/dist/src/value-objects/NullObject.js.map +1 -0
  141. package/dist/src/value-objects/NumberValueObject.d.ts +15 -0
  142. package/dist/src/value-objects/NumberValueObject.d.ts.map +1 -0
  143. package/dist/src/value-objects/NumberValueObject.js +48 -0
  144. package/dist/src/value-objects/NumberValueObject.js.map +1 -0
  145. package/dist/src/value-objects/PositiveNumber.d.ts +6 -0
  146. package/dist/src/value-objects/PositiveNumber.d.ts.map +1 -0
  147. package/dist/src/value-objects/PositiveNumber.js +21 -0
  148. package/dist/src/value-objects/PositiveNumber.js.map +1 -0
  149. package/dist/src/value-objects/StringValueObject.d.ts +7 -0
  150. package/dist/src/value-objects/StringValueObject.d.ts.map +1 -0
  151. package/dist/src/value-objects/StringValueObject.js +24 -0
  152. package/dist/src/value-objects/StringValueObject.js.map +1 -0
  153. package/dist/src/value-objects/ValueObject.d.ts +12 -0
  154. package/dist/src/value-objects/ValueObject.d.ts.map +1 -0
  155. package/dist/src/value-objects/ValueObject.js +33 -0
  156. package/dist/src/value-objects/ValueObject.js.map +1 -0
  157. package/dist/src/value-objects/coordinates/Coordinates.d.ts +12 -0
  158. package/dist/src/value-objects/coordinates/Coordinates.d.ts.map +1 -0
  159. package/dist/src/value-objects/coordinates/Coordinates.js +28 -0
  160. package/dist/src/value-objects/coordinates/Coordinates.js.map +1 -0
  161. package/dist/src/value-objects/coordinates/Latitude.d.ts +8 -0
  162. package/dist/src/value-objects/coordinates/Latitude.d.ts.map +1 -0
  163. package/dist/src/value-objects/coordinates/Latitude.js +21 -0
  164. package/dist/src/value-objects/coordinates/Latitude.js.map +1 -0
  165. package/dist/src/value-objects/coordinates/Longitude.d.ts +8 -0
  166. package/dist/src/value-objects/coordinates/Longitude.d.ts.map +1 -0
  167. package/dist/src/value-objects/coordinates/Longitude.js +21 -0
  168. package/dist/src/value-objects/coordinates/Longitude.js.map +1 -0
  169. package/{src/value-objects/coordinates/index.ts → dist/src/value-objects/coordinates/index.d.ts} +1 -0
  170. package/dist/src/value-objects/coordinates/index.d.ts.map +1 -0
  171. package/dist/src/value-objects/coordinates/index.js +7 -0
  172. package/dist/src/value-objects/coordinates/index.js.map +1 -0
  173. package/dist/src/value-objects/hashes/Hash.d.ts +7 -0
  174. package/dist/src/value-objects/hashes/Hash.d.ts.map +1 -0
  175. package/dist/src/value-objects/hashes/Hash.js +19 -0
  176. package/dist/src/value-objects/hashes/Hash.js.map +1 -0
  177. package/dist/src/value-objects/hashes/MD5Hash.d.ts +8 -0
  178. package/dist/src/value-objects/hashes/MD5Hash.d.ts.map +1 -0
  179. package/dist/src/value-objects/hashes/MD5Hash.js +26 -0
  180. package/dist/src/value-objects/hashes/MD5Hash.js.map +1 -0
  181. package/dist/src/value-objects/hashes/SHA256Hash.d.ts +9 -0
  182. package/dist/src/value-objects/hashes/SHA256Hash.d.ts.map +1 -0
  183. package/dist/src/value-objects/hashes/SHA256Hash.js +29 -0
  184. package/dist/src/value-objects/hashes/SHA256Hash.js.map +1 -0
  185. package/dist/src/value-objects/hashes/SHA512Hash.d.ts +9 -0
  186. package/dist/src/value-objects/hashes/SHA512Hash.d.ts.map +1 -0
  187. package/dist/src/value-objects/hashes/SHA512Hash.js +29 -0
  188. package/dist/src/value-objects/hashes/SHA512Hash.js.map +1 -0
  189. package/{src/value-objects/hashes/index.ts → dist/src/value-objects/hashes/index.d.ts} +1 -0
  190. package/dist/src/value-objects/hashes/index.d.ts.map +1 -0
  191. package/dist/src/value-objects/hashes/index.js +8 -0
  192. package/dist/src/value-objects/hashes/index.js.map +1 -0
  193. package/dist/src/value-objects/ids/ShortId.d.ts +10 -0
  194. package/dist/src/value-objects/ids/ShortId.d.ts.map +1 -0
  195. package/dist/src/value-objects/ids/ShortId.js +30 -0
  196. package/dist/src/value-objects/ids/ShortId.js.map +1 -0
  197. package/dist/src/value-objects/ids/UUID.d.ts +10 -0
  198. package/dist/src/value-objects/ids/UUID.d.ts.map +1 -0
  199. package/dist/src/value-objects/ids/UUID.js +29 -0
  200. package/dist/src/value-objects/ids/UUID.js.map +1 -0
  201. package/dist/src/value-objects/ids/index.d.ts +3 -0
  202. package/dist/src/value-objects/ids/index.d.ts.map +1 -0
  203. package/dist/src/value-objects/ids/index.js +6 -0
  204. package/dist/src/value-objects/ids/index.js.map +1 -0
  205. package/{src/value-objects/index.ts → dist/src/value-objects/index.d.ts} +2 -0
  206. package/dist/src/value-objects/index.d.ts.map +1 -0
  207. package/dist/src/value-objects/index.js +16 -0
  208. package/dist/src/value-objects/index.js.map +1 -0
  209. package/dist/src/value-objects/time/CalendarDay.d.ts +25 -0
  210. package/dist/src/value-objects/time/CalendarDay.d.ts.map +1 -0
  211. package/dist/src/value-objects/time/CalendarDay.js +74 -0
  212. package/dist/src/value-objects/time/CalendarDay.js.map +1 -0
  213. package/dist/src/value-objects/time/Day.d.ts +7 -0
  214. package/dist/src/value-objects/time/Day.d.ts.map +1 -0
  215. package/dist/src/value-objects/time/Day.js +18 -0
  216. package/dist/src/value-objects/time/Day.js.map +1 -0
  217. package/dist/src/value-objects/time/DayOfWeek.d.ts +34 -0
  218. package/dist/src/value-objects/time/DayOfWeek.d.ts.map +1 -0
  219. package/dist/src/value-objects/time/DayOfWeek.js +52 -0
  220. package/dist/src/value-objects/time/DayOfWeek.js.map +1 -0
  221. package/dist/src/value-objects/time/Duration.d.ts +23 -0
  222. package/dist/src/value-objects/time/Duration.d.ts.map +1 -0
  223. package/dist/src/value-objects/time/Duration.js +79 -0
  224. package/dist/src/value-objects/time/Duration.js.map +1 -0
  225. package/dist/src/value-objects/time/Hour.d.ts +15 -0
  226. package/dist/src/value-objects/time/Hour.d.ts.map +1 -0
  227. package/dist/src/value-objects/time/Hour.js +81 -0
  228. package/dist/src/value-objects/time/Hour.js.map +1 -0
  229. package/dist/src/value-objects/time/Month.d.ts +18 -0
  230. package/dist/src/value-objects/time/Month.d.ts.map +1 -0
  231. package/dist/src/value-objects/time/Month.js +41 -0
  232. package/dist/src/value-objects/time/Month.js.map +1 -0
  233. package/dist/src/value-objects/time/MonthOfYear.d.ts +17 -0
  234. package/dist/src/value-objects/time/MonthOfYear.d.ts.map +1 -0
  235. package/dist/src/value-objects/time/MonthOfYear.js +45 -0
  236. package/dist/src/value-objects/time/MonthOfYear.js.map +1 -0
  237. package/dist/src/value-objects/time/Timestamp.d.ts +51 -0
  238. package/dist/src/value-objects/time/Timestamp.d.ts.map +1 -0
  239. package/dist/src/value-objects/time/Timestamp.js +156 -0
  240. package/dist/src/value-objects/time/Timestamp.js.map +1 -0
  241. package/dist/src/value-objects/time/TimestampInterval.d.ts +26 -0
  242. package/dist/src/value-objects/time/TimestampInterval.d.ts.map +1 -0
  243. package/dist/src/value-objects/time/TimestampInterval.js +88 -0
  244. package/dist/src/value-objects/time/TimestampInterval.js.map +1 -0
  245. package/dist/src/value-objects/time/Year.d.ts +10 -0
  246. package/dist/src/value-objects/time/Year.d.ts.map +1 -0
  247. package/dist/src/value-objects/time/Year.js +26 -0
  248. package/dist/src/value-objects/time/Year.js.map +1 -0
  249. package/{src/value-objects/time/index.ts → dist/src/value-objects/time/index.d.ts} +1 -0
  250. package/dist/src/value-objects/time/index.d.ts.map +1 -0
  251. package/dist/src/value-objects/time/index.js +14 -0
  252. package/dist/src/value-objects/time/index.js.map +1 -0
  253. package/dist/tests/errors/BaseError.spec.d.ts +2 -0
  254. package/dist/tests/errors/BaseError.spec.d.ts.map +1 -0
  255. package/dist/tests/errors/BaseError.spec.js +54 -0
  256. package/dist/tests/errors/BaseError.spec.js.map +1 -0
  257. package/dist/tests/errors/DomainError.spec.d.ts +2 -0
  258. package/dist/tests/errors/DomainError.spec.d.ts.map +1 -0
  259. package/dist/tests/errors/DomainError.spec.js +47 -0
  260. package/dist/tests/errors/DomainError.spec.js.map +1 -0
  261. package/dist/tests/patterns/Assert.spec.d.ts +2 -0
  262. package/dist/tests/patterns/Assert.spec.d.ts.map +1 -0
  263. package/dist/tests/patterns/Assert.spec.js +27 -0
  264. package/dist/tests/patterns/Assert.spec.js.map +1 -0
  265. package/dist/tests/setup.jest.d.ts +2 -0
  266. package/dist/tests/setup.jest.d.ts.map +1 -0
  267. package/dist/tests/setup.jest.js +6 -0
  268. package/dist/tests/setup.jest.js.map +1 -0
  269. package/dist/tests/value-objects/Color.spec.d.ts +2 -0
  270. package/dist/tests/value-objects/Color.spec.d.ts.map +1 -0
  271. package/dist/tests/value-objects/Color.spec.js +171 -0
  272. package/dist/tests/value-objects/Color.spec.js.map +1 -0
  273. package/dist/tests/value-objects/Email.spec.d.ts +2 -0
  274. package/dist/tests/value-objects/Email.spec.d.ts.map +1 -0
  275. package/dist/tests/value-objects/Email.spec.js +117 -0
  276. package/dist/tests/value-objects/Email.spec.js.map +1 -0
  277. package/dist/tests/value-objects/Enum.spec.d.ts +2 -0
  278. package/dist/tests/value-objects/Enum.spec.d.ts.map +1 -0
  279. package/dist/tests/value-objects/Enum.spec.js +233 -0
  280. package/dist/tests/value-objects/Enum.spec.js.map +1 -0
  281. package/dist/tests/value-objects/Integer.spec.d.ts +2 -0
  282. package/dist/tests/value-objects/Integer.spec.d.ts.map +1 -0
  283. package/dist/tests/value-objects/Integer.spec.js +31 -0
  284. package/dist/tests/value-objects/Integer.spec.js.map +1 -0
  285. package/dist/tests/value-objects/NullObject.spec.d.ts +2 -0
  286. package/dist/tests/value-objects/NullObject.spec.d.ts.map +1 -0
  287. package/dist/tests/value-objects/NullObject.spec.js +48 -0
  288. package/dist/tests/value-objects/NullObject.spec.js.map +1 -0
  289. package/dist/tests/value-objects/NumberValueObject.spec.d.ts +2 -0
  290. package/dist/tests/value-objects/NumberValueObject.spec.d.ts.map +1 -0
  291. package/dist/tests/value-objects/NumberValueObject.spec.js +333 -0
  292. package/dist/tests/value-objects/NumberValueObject.spec.js.map +1 -0
  293. package/dist/tests/value-objects/PositiveNumber.spec.d.ts +2 -0
  294. package/dist/tests/value-objects/PositiveNumber.spec.d.ts.map +1 -0
  295. package/dist/tests/value-objects/PositiveNumber.spec.js +209 -0
  296. package/dist/tests/value-objects/PositiveNumber.spec.js.map +1 -0
  297. package/dist/tests/value-objects/StringValueObject.spec.d.ts +2 -0
  298. package/dist/tests/value-objects/StringValueObject.spec.d.ts.map +1 -0
  299. package/dist/tests/value-objects/StringValueObject.spec.js +104 -0
  300. package/dist/tests/value-objects/StringValueObject.spec.js.map +1 -0
  301. package/dist/tests/value-objects/coordinates/Coordinates.spec.d.ts +2 -0
  302. package/dist/tests/value-objects/coordinates/Coordinates.spec.d.ts.map +1 -0
  303. package/dist/tests/value-objects/coordinates/Coordinates.spec.js +76 -0
  304. package/dist/tests/value-objects/coordinates/Coordinates.spec.js.map +1 -0
  305. package/dist/tests/value-objects/coordinates/Latitude.spec.d.ts +2 -0
  306. package/dist/tests/value-objects/coordinates/Latitude.spec.d.ts.map +1 -0
  307. package/dist/tests/value-objects/coordinates/Latitude.spec.js +23 -0
  308. package/dist/tests/value-objects/coordinates/Latitude.spec.js.map +1 -0
  309. package/dist/tests/value-objects/coordinates/Longitude.spec.d.ts +2 -0
  310. package/dist/tests/value-objects/coordinates/Longitude.spec.d.ts.map +1 -0
  311. package/dist/tests/value-objects/coordinates/Longitude.spec.js +23 -0
  312. package/dist/tests/value-objects/coordinates/Longitude.spec.js.map +1 -0
  313. package/dist/tests/value-objects/hashes/Hashes.spec.d.ts +2 -0
  314. package/dist/tests/value-objects/hashes/Hashes.spec.d.ts.map +1 -0
  315. package/dist/tests/value-objects/hashes/Hashes.spec.js +107 -0
  316. package/dist/tests/value-objects/hashes/Hashes.spec.js.map +1 -0
  317. package/dist/tests/value-objects/hashes/MD5Hash.spec.d.ts +2 -0
  318. package/dist/tests/value-objects/hashes/MD5Hash.spec.d.ts.map +1 -0
  319. package/dist/tests/value-objects/hashes/MD5Hash.spec.js +147 -0
  320. package/dist/tests/value-objects/hashes/MD5Hash.spec.js.map +1 -0
  321. package/dist/tests/value-objects/hashes/SHA256Hash.spec.d.ts +2 -0
  322. package/dist/tests/value-objects/hashes/SHA256Hash.spec.d.ts.map +1 -0
  323. package/dist/tests/value-objects/hashes/SHA256Hash.spec.js +147 -0
  324. package/dist/tests/value-objects/hashes/SHA256Hash.spec.js.map +1 -0
  325. package/dist/tests/value-objects/hashes/SHA512Hash.spec.d.ts +2 -0
  326. package/dist/tests/value-objects/hashes/SHA512Hash.spec.d.ts.map +1 -0
  327. package/dist/tests/value-objects/hashes/SHA512Hash.spec.js +147 -0
  328. package/dist/tests/value-objects/hashes/SHA512Hash.spec.js.map +1 -0
  329. package/dist/tests/value-objects/ids/ShortId.spec.d.ts +2 -0
  330. package/dist/tests/value-objects/ids/ShortId.spec.d.ts.map +1 -0
  331. package/dist/tests/value-objects/ids/ShortId.spec.js +30 -0
  332. package/dist/tests/value-objects/ids/ShortId.spec.js.map +1 -0
  333. package/dist/tests/value-objects/ids/UUID.spec.d.ts +2 -0
  334. package/dist/tests/value-objects/ids/UUID.spec.d.ts.map +1 -0
  335. package/dist/tests/value-objects/ids/UUID.spec.js +30 -0
  336. package/dist/tests/value-objects/ids/UUID.spec.js.map +1 -0
  337. package/dist/tests/value-objects/time/CalendarDay.spec.d.ts +2 -0
  338. package/dist/tests/value-objects/time/CalendarDay.spec.d.ts.map +1 -0
  339. package/dist/tests/value-objects/time/CalendarDay.spec.js +149 -0
  340. package/dist/tests/value-objects/time/CalendarDay.spec.js.map +1 -0
  341. package/dist/tests/value-objects/time/Day.spec.d.ts +2 -0
  342. package/dist/tests/value-objects/time/Day.spec.d.ts.map +1 -0
  343. package/dist/tests/value-objects/time/Day.spec.js +28 -0
  344. package/dist/tests/value-objects/time/Day.spec.js.map +1 -0
  345. package/dist/tests/value-objects/time/DayOfWeek.spec.d.ts +2 -0
  346. package/dist/tests/value-objects/time/DayOfWeek.spec.d.ts.map +1 -0
  347. package/dist/tests/value-objects/time/DayOfWeek.spec.js +44 -0
  348. package/dist/tests/value-objects/time/DayOfWeek.spec.js.map +1 -0
  349. package/dist/tests/value-objects/time/Duration.spec.d.ts +2 -0
  350. package/dist/tests/value-objects/time/Duration.spec.d.ts.map +1 -0
  351. package/dist/tests/value-objects/time/Duration.spec.js +255 -0
  352. package/dist/tests/value-objects/time/Duration.spec.js.map +1 -0
  353. package/dist/tests/value-objects/time/Hour.spec.d.ts +2 -0
  354. package/dist/tests/value-objects/time/Hour.spec.d.ts.map +1 -0
  355. package/dist/tests/value-objects/time/Hour.spec.js +168 -0
  356. package/dist/tests/value-objects/time/Hour.spec.js.map +1 -0
  357. package/dist/tests/value-objects/time/MonthOfYear.spec.d.ts +2 -0
  358. package/dist/tests/value-objects/time/MonthOfYear.spec.d.ts.map +1 -0
  359. package/dist/tests/value-objects/time/MonthOfYear.spec.js +93 -0
  360. package/dist/tests/value-objects/time/MonthOfYear.spec.js.map +1 -0
  361. package/dist/tests/value-objects/time/Timestamp.spec.d.ts +2 -0
  362. package/dist/tests/value-objects/time/Timestamp.spec.d.ts.map +1 -0
  363. package/dist/tests/value-objects/time/Timestamp.spec.js +391 -0
  364. package/dist/tests/value-objects/time/Timestamp.spec.js.map +1 -0
  365. package/dist/tests/value-objects/time/TimestampInterval.spec.d.ts +2 -0
  366. package/dist/tests/value-objects/time/TimestampInterval.spec.d.ts.map +1 -0
  367. package/dist/tests/value-objects/time/TimestampInterval.spec.js +270 -0
  368. package/dist/tests/value-objects/time/TimestampInterval.spec.js.map +1 -0
  369. package/dist/tests/value-objects/time/Year.spec.d.ts +2 -0
  370. package/dist/tests/value-objects/time/Year.spec.d.ts.map +1 -0
  371. package/dist/tests/value-objects/time/Year.spec.js +41 -0
  372. package/dist/tests/value-objects/time/Year.spec.js.map +1 -0
  373. package/package.json +6 -2
  374. package/.editorconfig +0 -15
  375. package/.eslintignore +0 -3
  376. package/.eslintrc.json +0 -218
  377. package/.prettierrc.json +0 -13
  378. package/TECHNICAL_DOCUMENTATION.md +0 -1257
  379. package/jest.config.ts +0 -30
  380. package/src/errors/BaseError.ts +0 -20
  381. package/src/errors/DomainError.ts +0 -12
  382. package/src/errors/InvalidColorError.ts +0 -7
  383. package/src/errors/InvalidDayError.ts +0 -7
  384. package/src/errors/InvalidDayFormatError.ts +0 -7
  385. package/src/errors/InvalidEmailError.ts +0 -7
  386. package/src/errors/InvalidFormatError.ts +0 -7
  387. package/src/errors/InvalidHashError.ts +0 -7
  388. package/src/errors/InvalidHourError.ts +0 -7
  389. package/src/errors/InvalidIntegerError.ts +0 -7
  390. package/src/errors/InvalidLatitudeError.ts +0 -7
  391. package/src/errors/InvalidLengthError.ts +0 -9
  392. package/src/errors/InvalidLongitudeError.ts +0 -7
  393. package/src/errors/InvalidMinutesError.ts +0 -7
  394. package/src/errors/InvalidNumberError.ts +0 -7
  395. package/src/errors/InvalidPositiveNumberError.ts +0 -7
  396. package/src/errors/InvalidStringLengthError.ts +0 -9
  397. package/src/errors/InvalidTimestampIntervalError.ts +0 -10
  398. package/src/errors/InvalidValueError.ts +0 -7
  399. package/src/errors/NullObjectError.ts +0 -8
  400. package/src/errors/ValueNotInEnumError.ts +0 -9
  401. package/src/interfaces/PrimitiveOf.ts +0 -5
  402. package/src/interfaces/index.ts +0 -1
  403. package/src/patterns/Assert.ts +0 -15
  404. package/src/patterns/index.ts +0 -1
  405. package/src/value-objects/Color.ts +0 -39
  406. package/src/value-objects/Email.ts +0 -23
  407. package/src/value-objects/Enum.ts +0 -31
  408. package/src/value-objects/Integer.ts +0 -22
  409. package/src/value-objects/NullObject.ts +0 -60
  410. package/src/value-objects/NumberValueObject.ts +0 -56
  411. package/src/value-objects/PositiveNumber.ts +0 -20
  412. package/src/value-objects/StringValueObject.ts +0 -27
  413. package/src/value-objects/ValueObject.ts +0 -39
  414. package/src/value-objects/coordinates/Coordinates.ts +0 -30
  415. package/src/value-objects/coordinates/Latitude.ts +0 -22
  416. package/src/value-objects/coordinates/Longitude.ts +0 -25
  417. package/src/value-objects/hashes/Hash.ts +0 -19
  418. package/src/value-objects/hashes/MD5Hash.ts +0 -32
  419. package/src/value-objects/hashes/SHA256Hash.ts +0 -38
  420. package/src/value-objects/hashes/SHA512Hash.ts +0 -38
  421. package/src/value-objects/ids/ShortId.ts +0 -34
  422. package/src/value-objects/ids/UUID.ts +0 -34
  423. package/src/value-objects/time/CalendarDay.ts +0 -91
  424. package/src/value-objects/time/Day.ts +0 -17
  425. package/src/value-objects/time/DayOfWeek.ts +0 -60
  426. package/src/value-objects/time/Duration.ts +0 -142
  427. package/src/value-objects/time/Hour.ts +0 -105
  428. package/src/value-objects/time/Month.ts +0 -39
  429. package/src/value-objects/time/MonthOfYear.ts +0 -52
  430. package/src/value-objects/time/Timestamp.ts +0 -208
  431. package/src/value-objects/time/TimestampInterval.ts +0 -122
  432. package/src/value-objects/time/Year.ts +0 -27
  433. package/tests/errors/BaseError.spec.ts +0 -63
  434. package/tests/errors/DomainError.spec.ts +0 -52
  435. package/tests/patterns/Assert.spec.ts +0 -29
  436. package/tests/setup.jest.ts +0 -2
  437. package/tests/value-objects/Color.spec.ts +0 -214
  438. package/tests/value-objects/Email.spec.ts +0 -141
  439. package/tests/value-objects/Enum.spec.ts +0 -293
  440. package/tests/value-objects/Integer.spec.ts +0 -38
  441. package/tests/value-objects/NullObject.spec.ts +0 -55
  442. package/tests/value-objects/NumberValueObject.spec.ts +0 -446
  443. package/tests/value-objects/PositiveNumber.spec.ts +0 -274
  444. package/tests/value-objects/StringValueObject.spec.ts +0 -135
  445. package/tests/value-objects/coordinates/Coordinates.spec.ts +0 -90
  446. package/tests/value-objects/coordinates/Latitude.spec.ts +0 -24
  447. package/tests/value-objects/coordinates/Longitude.spec.ts +0 -24
  448. package/tests/value-objects/hashes/Hashes.spec.ts +0 -139
  449. package/tests/value-objects/hashes/MD5Hash.spec.ts +0 -187
  450. package/tests/value-objects/hashes/SHA256Hash.spec.ts +0 -220
  451. package/tests/value-objects/hashes/SHA512Hash.spec.ts +0 -220
  452. package/tests/value-objects/ids/ShortId.spec.ts +0 -34
  453. package/tests/value-objects/ids/UUID.spec.ts +0 -37
  454. package/tests/value-objects/time/CalendarDay.spec.ts +0 -182
  455. package/tests/value-objects/time/Day.spec.ts +0 -29
  456. package/tests/value-objects/time/DayOfWeek.spec.ts +0 -71
  457. package/tests/value-objects/time/Duration.spec.ts +0 -278
  458. package/tests/value-objects/time/Hour.spec.ts +0 -197
  459. package/tests/value-objects/time/MonthOfYear.spec.ts +0 -111
  460. package/tests/value-objects/time/Timestamp.spec.ts +0 -497
  461. package/tests/value-objects/time/TimestampInterval.spec.ts +0 -383
  462. package/tests/value-objects/time/Year.spec.ts +0 -48
  463. package/tsconfig.jest.json +0 -33
  464. package/tsconfig.json +0 -42
@@ -1,214 +0,0 @@
1
- import {
2
- Color,
3
- InvalidColorError,
4
- NullObject,
5
- StringValueObject,
6
- } from '../../src';
7
-
8
- describe('Color', () => {
9
- describe('constructor', () => {
10
- it('should return a NullValueObject when a Nullish is received', () => {
11
- expect(() => new Color(undefined as unknown as string)).not.toThrow();
12
- expect(
13
- NullObject.isNullObject(new Color(undefined as unknown as string)),
14
- ).toBeTrue();
15
- expect(
16
- NullObject.isNullObject(new Color(null as unknown as string)),
17
- ).toBeTrue();
18
- });
19
-
20
- const validColors = [
21
- '#FF0000',
22
- '#00FF00',
23
- '#0000FF',
24
- '#FFFFFF',
25
- '#000000',
26
- '#FFA500',
27
- '#000',
28
- '#FFF',
29
- ];
30
- it.each(validColors)(
31
- 'should create a Color instance for valid hex color codes',
32
- (color) => {
33
- expect(() => new Color(color)).not.toThrow();
34
- },
35
- );
36
-
37
- const invalidColors = [
38
- '#GGGGGG',
39
- '123456',
40
- '#12345',
41
- '#1234567',
42
- 'red',
43
- '123',
44
- '#HHH',
45
- '',
46
- ];
47
- it.each(invalidColors)(
48
- 'should create a Color instance for valid hex color codes',
49
- (color) => {
50
- expect(() => new Color(color)).toThrow(InvalidColorError);
51
- },
52
- );
53
- });
54
-
55
- describe('predefined static colors', () => {
56
- it('should have correct values for predefined colors', () => {
57
- expect(Color.RED).toMatchObject({ value: '#FF0000' });
58
- expect(Color.GREEN).toMatchObject({ value: '#00FF00' });
59
- expect(Color.BLUE).toMatchObject({ value: '#0000FF' });
60
- expect(Color.BLACK).toMatchObject({ value: '#000000' });
61
- expect(Color.WHITE).toMatchObject({ value: '#FFFFFF' });
62
- expect(Color.YELLOW).toMatchObject({ value: '#FFFF00' });
63
- expect(Color.CYAN).toMatchObject({ value: '#00FFFF' });
64
- expect(Color.MAGENTA).toMatchObject({ value: '#FF00FF' });
65
- expect(Color.ORANGE).toMatchObject({ value: '#FFA500' });
66
- expect(Color.PURPLE).toMatchObject({ value: '#800080' });
67
- expect(Color.PINK).toMatchObject({ value: '#FFC0CB' });
68
- expect(Color.BROWN).toMatchObject({ value: '#A52A2A' });
69
- });
70
- });
71
-
72
- describe('equality', () => {
73
- it('should return true for two Color instances with the same value', () => {
74
- const color1 = new Color('#FF0000');
75
- const color2 = new Color('#FF0000');
76
- expect(color1.isEqual(color2)).toBe(true);
77
- });
78
-
79
- it('should return false for two Color instances with different values', () => {
80
- const color1 = new Color('#FF0000');
81
- const color2 = new Color('#00FF00');
82
- expect(color1.isEqual(color2)).toBe(false);
83
- });
84
-
85
- it('should return true for two Color instances with the same value regardless of case', () => {
86
- const color1 = new Color('#FF0000');
87
- const color2 = new Color('#ff0000');
88
- expect(color1.isEqual(color2)).toBe(true);
89
- });
90
-
91
- it('should return false when comparing a Color instance with null', () => {
92
- const color1 = new Color('#FF0000');
93
- expect(color1.isEqual(null as unknown as Color)).toBe(false);
94
- });
95
-
96
- it('should return false when comparing a Color instance with undefined', () => {
97
- const color1 = new Color('#FF0000');
98
- expect(color1.isEqual(undefined as unknown as Color)).toBe(false);
99
- });
100
- });
101
-
102
- describe('inherited methods from StringValueObject', () => {
103
- it('should return the correct string value using toString()', () => {
104
- const color = new Color('#ABCDEF');
105
- expect(color.toString()).toBe('#ABCDEF');
106
- });
107
-
108
- it('should return the correct primitive value using valueOf()', () => {
109
- const color = new Color('#123456');
110
- expect(color.valueOf()).toBe('#123456');
111
- });
112
-
113
- it('should be instance of StringValueObject', () => {
114
- const color = new Color('#FFFFFF');
115
- expect(color instanceof StringValueObject).toBe(true);
116
- });
117
-
118
- it('should be instance of Color', () => {
119
- const color = new Color('#000000');
120
- expect(color instanceof Color).toBe(true);
121
- });
122
-
123
- it('should compare equality using inherited equals() method', () => {
124
- const color1 = new Color('#ABCDEF');
125
- const color2 = new Color('#ABCDEF');
126
- expect(color1.isEqual(color2)).toBe(true);
127
- });
128
-
129
- it('should compare inequality using inherited equals() method', () => {
130
- const color1 = new Color('#ABCDEF');
131
- const color2 = new Color('#123456');
132
- expect(color1.isEqual(color2)).toBe(false);
133
- });
134
- });
135
-
136
- describe('inheritance and StringValueObject behavior', () => {
137
- it('should implement valueOf() method correctly from StringValueObject', () => {
138
- const value = '#ABCDEF';
139
- const color = new Color(value);
140
- expect(color.valueOf()).toBe(value);
141
- });
142
-
143
- it('should implement toString() method correctly from StringValueObject', () => {
144
- const value = '#123456';
145
- const color = new Color(value);
146
- expect(color.toString()).toBe(value);
147
- });
148
-
149
- it('should implement isEmpty() method correctly from StringValueObject', () => {
150
- // Color cannot be empty due to validation, but method should exist
151
- const color = new Color('#FFF');
152
- expect(color.isEmpty()).toBeFalse();
153
- expect(typeof color.isEmpty).toBe('function');
154
- });
155
-
156
- it('should override isEqual() method with case-insensitive comparison', () => {
157
- const color1 = new Color('#FF0000');
158
- const color2 = new Color('#ff0000');
159
- const color3 = new Color('#00FF00');
160
-
161
- expect(color1.isEqual(color2)).toBeTrue();
162
- expect(color1.isEqual(color3)).toBeFalse();
163
- });
164
-
165
- it('should accept StringValueObject in constructor', () => {
166
- const stringValueObject = new StringValueObject('#FFFFFF');
167
- const color = new Color(stringValueObject);
168
- expect(color.toString()).toBe('#FFFFFF');
169
- expect(color.valueOf()).toBe('#FFFFFF');
170
- });
171
-
172
- it('should validate color format when constructed from StringValueObject', () => {
173
- const invalidStringValueObject = new StringValueObject('invalid-color');
174
- expect(() => new Color(invalidStringValueObject)).toThrow(
175
- InvalidColorError,
176
- );
177
- });
178
-
179
- it('should implement clone() method correctly inherited from ValueObject', () => {
180
- const originalValue = '#ABCDEF';
181
- const original = new Color(originalValue);
182
- const cloned = (original as any).clone();
183
-
184
- expect(cloned).toBeInstanceOf(Color);
185
- expect(cloned).toBeInstanceOf(StringValueObject);
186
- expect(cloned.valueOf()).toBe(originalValue);
187
- expect(cloned.toString()).toBe(originalValue);
188
- expect(cloned.isEqual(original)).toBeTrue();
189
- expect(cloned).not.toBe(original); // Different instances
190
- });
191
-
192
- it('should clone static predefined colors correctly', () => {
193
- const originalRed = Color.RED;
194
- const clonedRed = (originalRed as any).clone();
195
-
196
- expect(clonedRed).toBeInstanceOf(Color);
197
- expect(clonedRed.valueOf()).toBe('#FF0000');
198
- expect(clonedRed.isEqual(originalRed)).toBeTrue();
199
- expect(clonedRed).not.toBe(originalRed);
200
- });
201
-
202
- it('should maintain color validation in cloned instances', () => {
203
- const original = new Color('#123ABC');
204
- const cloned = (original as any).clone();
205
-
206
- expect(cloned).toBeInstanceOf(Color);
207
- expect(cloned.valueOf()).toBe('#123ABC');
208
-
209
- // Cloned instance should still be a valid color
210
- expect(() => cloned.toString()).not.toThrow();
211
- expect(cloned.toString()).toBe('#123ABC');
212
- });
213
- });
214
- });
@@ -1,141 +0,0 @@
1
- import { Email, InvalidEmailError, StringValueObject } from '../../src';
2
- import { NullObject } from '../../src/value-objects/NullObject';
3
-
4
- describe('Email', () => {
5
- describe('constructor', () => {
6
- it('should return a NullValueObject when a Nullish is received', () => {
7
- expect(() => new Email(undefined as unknown as string)).not.toThrow();
8
- expect(
9
- NullObject.isNullObject(new Email(undefined as unknown as string)),
10
- ).toBeTrue();
11
- });
12
-
13
- const validEmails = [
14
- 'user@example.com',
15
- 'test.email@domain.org',
16
- 'user+tag@example.co.uk',
17
- 'first.last@subdomain.example.com',
18
- 'user_name@example-domain.com',
19
- 'test123@example.io',
20
- 'admin@company.travel',
21
- 'contact@site.museum',
22
- 'info@domain.photography',
23
- ];
24
-
25
- it.each(validEmails)(
26
- 'should create an Email instance for valid email addresses',
27
- (email) => {
28
- expect(() => new Email(email)).not.toThrow();
29
- expect(new Email(email).toString()).toBe(email);
30
- },
31
- );
32
-
33
- const invalidEmails = [
34
- 'invalid-email',
35
- '@domain.com',
36
- 'user@',
37
- 'user@domain',
38
- 'user.domain.com',
39
- 'user@domain.',
40
- 'user@.com',
41
- 'user@@domain.com',
42
- 'user@domain..com',
43
- 'user name@domain.com',
44
- 'user@domain.c',
45
- 'user@domain.toolongextension',
46
- '',
47
- ];
48
-
49
- it.each(invalidEmails)(
50
- 'should throw InvalidEmailError for invalid email addresses',
51
- (email) => {
52
- expect(() => new Email(email)).toThrow(InvalidEmailError);
53
- },
54
- );
55
-
56
- it('should accept another StringValueObject', () => {
57
- const emailString = new StringValueObject('user@example.com');
58
- const email = new Email(emailString);
59
- expect(email.toString()).toBe('user@example.com');
60
- });
61
-
62
- it('should validate email format when constructed from StringValueObject', () => {
63
- const invalidEmailString = new StringValueObject('invalid-email');
64
- expect(() => new Email(invalidEmailString)).toThrow(InvalidEmailError);
65
- });
66
- });
67
-
68
- describe('inheritance and StringValueObject behavior', () => {
69
- it('should inherit from StringValueObject', () => {
70
- const email = new Email('test@example.com');
71
- expect(email).toBeInstanceOf(Email);
72
- expect(email).toBeInstanceOf(StringValueObject);
73
- expect(email.valueOf).toBeDefined();
74
- expect(email.isEqual).toBeDefined();
75
- expect(email.toString).toBeDefined();
76
- expect(email.isEmpty).toBeDefined();
77
- });
78
-
79
- it('should implement valueOf() method correctly from StringValueObject', () => {
80
- const emailValue = 'admin@company.org';
81
- const email = new Email(emailValue);
82
- expect(email.valueOf()).toBe(emailValue);
83
- });
84
-
85
- it('should implement toString() method correctly from StringValueObject', () => {
86
- const emailValue = 'contact@website.net';
87
- const email = new Email(emailValue);
88
- expect(email.toString()).toBe(emailValue);
89
- });
90
-
91
- it('should implement isEmpty() method correctly from StringValueObject', () => {
92
- // Email cannot be empty due to validation, but method should exist
93
- const email = new Email('user@domain.com');
94
- expect(email.isEmpty()).toBeFalse();
95
- expect(typeof email.isEmpty).toBe('function');
96
- });
97
-
98
- it('should implement isEqual() method correctly', () => {
99
- const emailValue = 'test@example.com';
100
- const email1 = new Email(emailValue);
101
- const email2 = new Email(emailValue);
102
- const email3 = new Email('different@example.com');
103
-
104
- expect(email1.isEqual(email2)).toBeTrue();
105
- expect(email1.isEqual(email3)).toBeFalse();
106
- expect(email1.isEqual(emailValue)).toBeTrue();
107
- expect(email1.isEqual('different@example.com')).toBeFalse();
108
- });
109
-
110
- it('should compare with string values using isEqual', () => {
111
- const email = new Email('hello@world.com');
112
- expect(email.isEqual('hello@world.com')).toBeTrue();
113
- expect(email.isEqual('goodbye@world.com')).toBeFalse();
114
- });
115
-
116
- it('should implement clone() method correctly inherited from ValueObject', () => {
117
- const originalValue = 'clone@test.com';
118
- const original = new Email(originalValue);
119
- const cloned = (original as any).clone();
120
-
121
- expect(cloned).toBeInstanceOf(Email);
122
- expect(cloned).toBeInstanceOf(StringValueObject);
123
- expect(cloned.valueOf()).toBe(originalValue);
124
- expect(cloned.toString()).toBe(originalValue);
125
- expect(cloned.isEqual(original)).toBeTrue();
126
- expect(cloned).not.toBe(original); // Different instances
127
- });
128
-
129
- it('should maintain email validation in cloned instances', () => {
130
- const original = new Email('valid@example.com');
131
- const cloned = (original as any).clone();
132
-
133
- expect(cloned).toBeInstanceOf(Email);
134
- expect(cloned.valueOf()).toBe('valid@example.com');
135
-
136
- // Cloned instance should still be a valid email
137
- expect(() => cloned.toString()).not.toThrow();
138
- expect(cloned.toString()).toBe('valid@example.com');
139
- });
140
- });
141
- });
@@ -1,293 +0,0 @@
1
- import { Enum, NullObject, ValueNotInEnumError } from '../../src';
2
-
3
- class StringEnum extends Enum {
4
- public getValues() {
5
- return ['A', 'B', 'C'];
6
- }
7
- }
8
-
9
- class NumberEnum extends Enum {
10
- public getValues() {
11
- return [1, 2, 3];
12
- }
13
- }
14
-
15
- class MixedEnum extends Enum {
16
- public getValues() {
17
- return ['1', 2];
18
- }
19
- }
20
-
21
- enum StatusEnum {
22
- ACTIVE = 'active',
23
- INACTIVE = 'inactive',
24
- PENDING = 'pending',
25
- }
26
-
27
- class Status extends Enum {
28
- public getValues() {
29
- return Object.values(StatusEnum);
30
- }
31
-
32
- // Static factory methods for convenience
33
- static ACTIVE = () => new Status(StatusEnum.ACTIVE);
34
- static INACTIVE = () => new Status(StatusEnum.INACTIVE);
35
- static PENDING = () => new Status(StatusEnum.PENDING);
36
- }
37
-
38
- describe('Enum', () => {
39
- describe('constructor', () => {
40
- it('should return a Null when a Nullish is received', () => {
41
- expect(
42
- () => new StringEnum(undefined as unknown as string),
43
- ).not.toThrow();
44
- expect(
45
- NullObject.isNullObject(new StringEnum(undefined as unknown as string)),
46
- ).toBeTrue();
47
- expect(
48
- NullObject.isNullObject(new StringEnum(null as unknown as string)),
49
- ).toBeTrue();
50
- });
51
-
52
- it('should accept valid string enum values', () => {
53
- expect(() => new StringEnum('A')).not.toThrow();
54
- expect(() => new StringEnum('B')).not.toThrow();
55
- expect(() => new StringEnum('C')).not.toThrow();
56
-
57
- const enumValue = new StringEnum('A');
58
- expect(enumValue.valueOf()).toBe('A');
59
- expect(enumValue.toString()).toBe('A');
60
- });
61
-
62
- it('should accept valid number enum values', () => {
63
- expect(() => new NumberEnum(1)).not.toThrow();
64
- expect(() => new NumberEnum(2)).not.toThrow();
65
- expect(() => new NumberEnum(3)).not.toThrow();
66
-
67
- const enumValue = new NumberEnum(2);
68
- expect(enumValue.valueOf()).toBe(2);
69
- expect(enumValue.toString()).toBe('2');
70
- });
71
-
72
- it('should accept valid mixed enum values', () => {
73
- expect(() => new MixedEnum('1')).not.toThrow();
74
- expect(() => new MixedEnum(2)).not.toThrow();
75
-
76
- const stringValue = new MixedEnum('1');
77
- const numberValue = new MixedEnum(2);
78
- expect(stringValue.valueOf()).toBe('1');
79
- expect(numberValue.valueOf()).toBe(2);
80
- });
81
-
82
- it('should reject invalid string enum values', () => {
83
- expect(() => new StringEnum('D')).toThrow(ValueNotInEnumError);
84
- expect(() => new StringEnum('X')).toThrow(ValueNotInEnumError);
85
- expect(() => new StringEnum('')).toThrow(ValueNotInEnumError);
86
- });
87
-
88
- it('should reject invalid number enum values', () => {
89
- expect(() => new NumberEnum(0)).toThrow(ValueNotInEnumError);
90
- expect(() => new NumberEnum(4)).toThrow(ValueNotInEnumError);
91
- expect(() => new NumberEnum(-1)).toThrow(ValueNotInEnumError);
92
- });
93
-
94
- it('should reject invalid mixed enum values', () => {
95
- expect(() => new MixedEnum('2')).toThrow(ValueNotInEnumError);
96
- expect(() => new MixedEnum(1)).toThrow(ValueNotInEnumError);
97
- expect(() => new MixedEnum('invalid')).toThrow(ValueNotInEnumError);
98
- });
99
-
100
- it('should work with TypeScript enum values', () => {
101
- expect(() => new Status(StatusEnum.ACTIVE)).not.toThrow();
102
- expect(() => new Status('active')).not.toThrow();
103
- expect(() => new Status('inactive')).not.toThrow();
104
- expect(() => new Status('pending')).not.toThrow();
105
-
106
- const status = new Status(StatusEnum.ACTIVE);
107
- expect(status.valueOf()).toBe('active');
108
- });
109
-
110
- it('should reject invalid TypeScript enum values', () => {
111
- expect(() => new Status('unknown')).toThrow(ValueNotInEnumError);
112
- expect(() => new Status('ACTIVE')).toThrow(ValueNotInEnumError); // Case sensitive
113
- });
114
- });
115
-
116
- describe('inheritance and behavior', () => {
117
- it('should inherit from ', () => {
118
- const enumValue = new StringEnum('A');
119
- expect(enumValue).toBeInstanceOf(StringEnum);
120
- expect(enumValue).toBeInstanceOf(Enum);
121
- expect(enumValue.valueOf).toBeDefined();
122
- expect(enumValue.isEqual).toBeDefined();
123
- expect(enumValue.toString).toBeDefined();
124
- });
125
-
126
- it('should implement valueOf() method correctly', () => {
127
- const stringEnum = new StringEnum('B');
128
- const numberEnum = new NumberEnum(2);
129
-
130
- expect(stringEnum.valueOf()).toBe('B');
131
- expect(numberEnum.valueOf()).toBe(2);
132
- });
133
-
134
- it('should implement toString() method correctly from ', () => {
135
- const stringEnum = new StringEnum('C');
136
- const numberEnum = new NumberEnum(3);
137
-
138
- expect(stringEnum.toString()).toBe('C');
139
- expect(numberEnum.toString()).toBe('3');
140
- });
141
-
142
- it('should implement isEqual() method correctly', () => {
143
- const enum1 = new StringEnum('A');
144
- const enum2 = new StringEnum('A');
145
- const enum3 = new StringEnum('B');
146
-
147
- expect(enum1.isEqual(enum2)).toBeTrue();
148
- expect(enum1.isEqual(enum3)).toBeFalse();
149
- expect(enum1.isEqual('A')).toBeTrue();
150
- expect(enum1.isEqual('B')).toBeFalse();
151
- });
152
-
153
- it('should compare with primitive values using isEqual', () => {
154
- const stringEnum = new StringEnum('A');
155
- const numberEnum = new NumberEnum(1);
156
-
157
- expect(stringEnum.isEqual('A')).toBeTrue();
158
- expect(stringEnum.isEqual('B')).toBeFalse();
159
- expect(numberEnum.isEqual(1)).toBeTrue();
160
- expect(numberEnum.isEqual(2)).toBeFalse();
161
- });
162
-
163
- it('should implement clone() method correctly', () => {
164
- const original = new StringEnum('B');
165
- const cloned = (original as any).clone();
166
-
167
- expect(cloned).toBeInstanceOf(StringEnum);
168
- expect(cloned).toBeInstanceOf(Enum);
169
- expect(cloned.valueOf()).toBe('B');
170
- expect(cloned.toString()).toBe('B');
171
- expect(cloned.isEqual(original)).toBeTrue();
172
- expect(cloned).not.toBe(original); // Different instances
173
- });
174
-
175
- it('should maintain enum validation in cloned instances', () => {
176
- const original = new NumberEnum(3);
177
- const cloned = (original as any).clone();
178
-
179
- expect(cloned).toBeInstanceOf(NumberEnum);
180
- expect(cloned.valueOf()).toBe(3);
181
-
182
- // Cloned instance should still be a valid enum value
183
- expect(() => cloned.toString()).not.toThrow();
184
- expect(cloned.toString()).toBe('3');
185
- });
186
- });
187
-
188
- describe('immutability', () => {
189
- it('should have immutable value property inherited from ', () => {
190
- const enumValue = new StringEnum('A');
191
-
192
- // Verify immutability through value consistency
193
- expect(enumValue.valueOf()).toBe('A');
194
- expect((enumValue as any).value).toBe('A');
195
-
196
- const originalValue = enumValue.valueOf();
197
- expect(originalValue).toBe('A');
198
- });
199
-
200
- it('should return the same value after creation', () => {
201
- const originalValue = 'B';
202
- const enumValue = new StringEnum(originalValue);
203
-
204
- expect(enumValue.valueOf()).toBe(originalValue);
205
- expect(enumValue.toString()).toBe(originalValue);
206
-
207
- // Value should remain the same
208
- expect(enumValue.valueOf()).toBe(originalValue);
209
- });
210
-
211
- it('should create new instances instead of modifying existing ones', () => {
212
- const value1 = 'A';
213
- const value2 = 'C';
214
-
215
- const enum1 = new StringEnum(value1);
216
- const enum2 = new StringEnum(value2);
217
-
218
- expect(enum1.valueOf()).toBe(value1);
219
- expect(enum2.valueOf()).toBe(value2);
220
- expect(enum1.valueOf()).not.toBe(enum2.valueOf());
221
- });
222
-
223
- it('should maintain immutability when cloning', () => {
224
- const original = new NumberEnum(2);
225
- const cloned = (original as any).clone();
226
-
227
- expect(original.valueOf()).toBe(2);
228
- expect(cloned.valueOf()).toBe(2);
229
- expect(original.isEqual(cloned)).toBeTrue();
230
- expect(original).not.toBe(cloned);
231
-
232
- // Both should remain immutable
233
- expect(original.valueOf()).toBe(2);
234
- expect(cloned.valueOf()).toBe(2);
235
- });
236
- });
237
-
238
- describe('enum validation', () => {
239
- it('should validate against the defined enum values', () => {
240
- const stringEnum = new StringEnum('A');
241
- expect(stringEnum.valueOf()).toBe('A');
242
-
243
- // Should be one of ['A', 'B', 'C']
244
- expect(['A', 'B', 'C']).toContain(stringEnum.valueOf());
245
- });
246
-
247
- it('should provide meaningful error messages for invalid values', () => {
248
- expect(() => new StringEnum('D')).toThrow(
249
- /enum does not include value: D/,
250
- );
251
- expect(() => new NumberEnum(4)).toThrow(/enum does not include value: 4/);
252
- });
253
-
254
- it('should be case-sensitive for string enums', () => {
255
- expect(() => new StringEnum('a')).toThrow(ValueNotInEnumError);
256
- expect(() => new Status('ACTIVE')).toThrow(ValueNotInEnumError);
257
- });
258
-
259
- it('should handle type-sensitive validation for mixed enums', () => {
260
- // '1' (string) is valid, but 1 (number) is not
261
- expect(() => new MixedEnum('1')).not.toThrow();
262
- expect(() => new MixedEnum(1)).toThrow(ValueNotInEnumError);
263
-
264
- // 2 (number) is valid, but '2' (string) is not
265
- expect(() => new MixedEnum(2)).not.toThrow();
266
- expect(() => new MixedEnum('2')).toThrow(ValueNotInEnumError);
267
- });
268
- });
269
-
270
- describe('static factory methods', () => {
271
- it('should work with static factory methods for convenience', () => {
272
- const activeStatus = Status.ACTIVE();
273
- const inactiveStatus = Status.INACTIVE();
274
- const pendingStatus = Status.PENDING();
275
-
276
- expect(activeStatus.valueOf()).toBe('active');
277
- expect(inactiveStatus.valueOf()).toBe('inactive');
278
- expect(pendingStatus.valueOf()).toBe('pending');
279
-
280
- expect(activeStatus).toBeInstanceOf(Status);
281
- expect(inactiveStatus).toBeInstanceOf(Status);
282
- expect(pendingStatus).toBeInstanceOf(Status);
283
- });
284
-
285
- it('should maintain equality with factory methods', () => {
286
- const status1 = Status.ACTIVE();
287
- const status2 = new Status('active');
288
-
289
- expect(status1.isEqual(status2)).toBeTrue();
290
- expect(status1.valueOf()).toBe(status2.valueOf());
291
- });
292
- });
293
- });
@@ -1,38 +0,0 @@
1
- import { Integer, InvalidIntegerError, InvalidNumberError } from '../../src';
2
-
3
- describe('Integer', () => {
4
- it('should create an Integer for a valid integer', () => {
5
- const value = 42;
6
- const integer = new Integer(value);
7
-
8
- expect(integer).toMatchObject({ value });
9
- });
10
-
11
- it('should throw InvalidIntegerError for a non-integer value', () => {
12
- const value = 42.5;
13
-
14
- expect(() => new Integer(value)).toThrow(InvalidIntegerError);
15
- expect(() => new Integer(value)).toThrow(`Invalid integer value ${value}`);
16
- });
17
-
18
- it('should throw InvalidNumberError for NaN', () => {
19
- const value = NaN;
20
-
21
- expect(() => new Integer(value)).toThrow(InvalidNumberError);
22
- expect(() => new Integer(value)).toThrow(`Invalid number ${value}`);
23
- });
24
-
25
- it('should throw InvalidIntegerError for Infinity', () => {
26
- const value = Infinity;
27
-
28
- expect(() => new Integer(value)).toThrow(InvalidIntegerError);
29
- expect(() => new Integer(value)).toThrow(`Invalid integer value ${value}`);
30
- });
31
-
32
- it('should throw InvalidIntegerError for -Infinity', () => {
33
- const value = -Infinity;
34
-
35
- expect(() => new Integer(value)).toThrow(InvalidIntegerError);
36
- expect(() => new Integer(value)).toThrow(`Invalid integer value ${value}`);
37
- });
38
- });