@haskou/value-objects 1.1.1 → 1.1.3

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/{src/value-objects/ids/index.ts → dist/src/value-objects/ids/index.d.ts} +1 -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} +1 -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 +9 -5
  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
package/jest.config.ts DELETED
@@ -1,30 +0,0 @@
1
- import type { Config } from '@jest/types';
2
-
3
- // Sync object
4
- const config: Config.InitialOptions = {
5
- collectCoverageFrom: ['<rootDir>/src/**/*.ts'],
6
- coverageDirectory: '<rootDir>/tests/coverage',
7
- coveragePathIgnorePatterns: ['<rootDir>/node_modules/', 'index.ts'],
8
- coverageReporters: ['html', 'lcov', 'text'],
9
- globals: {
10
- 'ts-jest': {
11
- tsconfig: 'tsconfig.jest.json',
12
- },
13
- },
14
- moduleDirectories: ['node_modules', 'src'],
15
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
16
- moduleNameMapper: {
17
- '^@app/(.*)$': '<rootDir>/src/$1',
18
- },
19
- preset: 'ts-jest',
20
- roots: ['<rootDir>/src/', '<rootDir>/tests/'],
21
- setupFilesAfterEnv: ['<rootDir>/tests/setup.jest.ts'],
22
- testEnvironment: 'node',
23
- testPathIgnorePatterns: ['<rootDir>/node_modules/', 'index.ts'],
24
- transform: {
25
- '^.+\\.ts': 'ts-jest',
26
- },
27
- verbose: true,
28
- };
29
-
30
- export default config;
@@ -1,20 +0,0 @@
1
- export class BaseError extends Error {
2
- private readonly isBaseError = true;
3
- public static isBaseError(error: unknown): boolean {
4
- return !!(error as BaseError).isBaseError;
5
- }
6
-
7
- constructor(message: string, prototype: object = BaseError.prototype) {
8
- super(message);
9
- this.name = this.constructor.name;
10
- Object.setPrototypeOf(this, prototype);
11
- }
12
-
13
- public toString(): string {
14
- return `[${this.name}]: ${this.message}`;
15
- }
16
-
17
- public getStack(): string {
18
- return this.stack || '';
19
- }
20
- }
@@ -1,12 +0,0 @@
1
- import { BaseError } from './BaseError';
2
-
3
- export class DomainError extends BaseError {
4
- protected readonly isDomainError = true;
5
- public static isDomainError(error: unknown): boolean {
6
- return !!(error as DomainError).isDomainError;
7
- }
8
-
9
- constructor(message: string) {
10
- super(message, new.target.prototype);
11
- }
12
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidColorError extends DomainError {
4
- constructor(value: string) {
5
- super(`Invalid color value: ${value}. Must be a valid hex color code.`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidDayError extends DomainError {
4
- constructor(invalidDay: unknown) {
5
- super(`Invalid day ${String(invalidDay)}`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidDayFormatError extends DomainError {
4
- constructor(invalidDate: string) {
5
- super(`Invalid day ${invalidDate}. Expected YYYY-MM-DD. `);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidEmailError extends DomainError {
4
- constructor(value: string) {
5
- super(`Invalid email format: ${value}`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from '../errors/DomainError';
2
-
3
- export class InvalidFormatError extends DomainError {
4
- constructor(value?: string) {
5
- super(`Invalid Format Error with value: '${value}'`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidHashError extends DomainError {
4
- constructor(type: string, value: string) {
5
- super(`Invalid ${type} hash: ${value}`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidHourError extends DomainError {
4
- constructor() {
5
- super(`Invalid hour`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidIntegerError extends DomainError {
4
- constructor(value: number) {
5
- super(`Invalid integer value ${value}`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidLatitudeError extends DomainError {
4
- constructor(value: number) {
5
- super(`Invalid latitude: ${value}. Must be between -90 and 90`);
6
- }
7
- }
@@ -1,9 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidLengthError extends DomainError {
4
- constructor(value: unknown, length: number) {
5
- super(
6
- `Invalid Length Error with value: '${value}' expected length: '${length}'`,
7
- );
8
- }
9
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidLongitudeError extends DomainError {
4
- constructor(value: number) {
5
- super(`Invalid longitude: ${value}. Must be between -180 and 180`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidMinutesError extends DomainError {
4
- constructor() {
5
- super(`Invalid minutes`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidNumberError extends DomainError {
4
- constructor(invalidNumber: unknown) {
5
- super(`Invalid number ${String(invalidNumber)}`);
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidPositiveNumberError extends DomainError {
4
- constructor() {
5
- super(`Value must be greater or equal than 0`);
6
- }
7
- }
@@ -1,9 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidStringLengthError extends DomainError {
4
- constructor(value: string, length: number) {
5
- super(
6
- `String length '${value.length}' exceeds the expected length: '${length}'`,
7
- );
8
- }
9
- }
@@ -1,10 +0,0 @@
1
- import { Timestamp } from '../value-objects/time/Timestamp';
2
- import { DomainError } from './DomainError';
3
-
4
- export class InvalidTimestampIntervalError extends DomainError {
5
- constructor(start: Timestamp, end: Timestamp) {
6
- super(
7
- `Invalid TimestampInterval, start (${start.valueOf()}) must be before the end (${end.valueOf()})`,
8
- );
9
- }
10
- }
@@ -1,7 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class InvalidValueError extends DomainError {
4
- constructor(message: string = 'Invalid Value Error', value?: unknown) {
5
- super(`${message} with value: '${value}'`);
6
- }
7
- }
@@ -1,8 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class NullObjectError extends DomainError {
4
- constructor(message: string) {
5
- super(`[NullObjectError]: ${message} is NullObject`);
6
- Object.setPrototypeOf(this, NullObjectError.prototype);
7
- }
8
- }
@@ -1,9 +0,0 @@
1
- import { DomainError } from './DomainError';
2
-
3
- export class ValueNotInEnumError extends DomainError {
4
- constructor(value: unknown, enumerate: unknown) {
5
- super(
6
- `${Object.values(enumerate as object).join(',')} enum does not include value: ${value}`,
7
- );
8
- }
9
- }
@@ -1,5 +0,0 @@
1
- import { Primitive } from '../types/Primitive';
2
-
3
- export type PrimitiveOf<
4
- T extends { toPrimitives(): Primitive | Record<string, Primitive> },
5
- > = ReturnType<T['toPrimitives']>;
@@ -1 +0,0 @@
1
- export * from './PrimitiveOf';
@@ -1,15 +0,0 @@
1
- import { BaseError } from '../errors/BaseError';
2
- import { DomainError } from '../errors/DomainError';
3
-
4
- export type Errors = Error | BaseError | DomainError | string;
5
-
6
- export function assert(
7
- condition: boolean | unknown | undefined,
8
- error: string | Errors,
9
- ): void {
10
- if (condition) {
11
- return;
12
- }
13
-
14
- throw typeof error === 'string' ? new DomainError(error) : error;
15
- }
@@ -1 +0,0 @@
1
- export * from './Assert';
@@ -1,39 +0,0 @@
1
- import { InvalidColorError } from '../errors/InvalidColorError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { StringValueObject } from './StringValueObject';
5
-
6
- export class Color extends StringValueObject {
7
- public static readonly RED = new Color('#FF0000');
8
- public static readonly GREEN = new Color('#00FF00');
9
- public static readonly BLUE = new Color('#0000FF');
10
- public static readonly BLACK = new Color('#000000');
11
- public static readonly WHITE = new Color('#FFFFFF');
12
- public static readonly YELLOW = new Color('#FFFF00');
13
- public static readonly CYAN = new Color('#00FFFF');
14
- public static readonly MAGENTA = new Color('#FF00FF');
15
- public static readonly ORANGE = new Color('#FFA500');
16
- public static readonly PURPLE = new Color('#800080');
17
- public static readonly PINK = new Color('#FFC0CB');
18
- public static readonly BROWN = new Color('#A52A2A');
19
-
20
- constructor(value: string | StringValueObject) {
21
- super(value?.valueOf());
22
-
23
- if (NullObject.isNullObject(this)) {
24
- return this;
25
- }
26
-
27
- this.ensureIsValidColor();
28
- }
29
-
30
- private ensureIsValidColor(): void {
31
- const hexColorPattern = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;
32
-
33
- assert(hexColorPattern.test(this.value), new InvalidColorError(this.value));
34
- }
35
-
36
- public isEqual(other: Color): boolean {
37
- return this.value.toLowerCase() === other?.toString().toLowerCase();
38
- }
39
- }
@@ -1,23 +0,0 @@
1
- import { InvalidEmailError } from '../errors/InvalidEmailError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { StringValueObject } from './StringValueObject';
5
-
6
- export class Email extends StringValueObject {
7
- constructor(value: string | StringValueObject) {
8
- super(value?.valueOf());
9
-
10
- if (NullObject.isNullObject(this)) {
11
- return this;
12
- }
13
-
14
- this.ensureIsValidEmail(this.value);
15
- }
16
-
17
- private ensureIsValidEmail(value: string): void {
18
- assert(
19
- new RegExp(/^[\w+\-.]+@(?:[\w-]+\.)+[a-zA-Z]{2,13}$/).test(value),
20
- new InvalidEmailError(value),
21
- );
22
- }
23
- }
@@ -1,31 +0,0 @@
1
- import { ValueNotInEnumError } from '../errors/ValueNotInEnumError';
2
- import { assert } from '../patterns/Assert';
3
- import { Primitive } from '../types';
4
- import { NullObject } from './NullObject';
5
- import { ValueObject } from './ValueObject';
6
-
7
- export abstract class Enum<
8
- T extends Primitive = Primitive,
9
- > extends ValueObject<T> {
10
- constructor(protected readonly value: T) {
11
- super(value);
12
-
13
- if (NullObject.isNullObject(this)) {
14
- return this;
15
- }
16
-
17
- this.ensureIsValidValue();
18
- }
19
-
20
- private ensureIsValidValue(): void {
21
- const isValueInEnum = this.getValues().some((enumValue) =>
22
- this.isEqual(enumValue),
23
- );
24
- assert(
25
- isValueInEnum,
26
- new ValueNotInEnumError(this.valueOf(), this.getValues()),
27
- );
28
- }
29
-
30
- public abstract getValues(): T[];
31
- }
@@ -1,22 +0,0 @@
1
- import { InvalidIntegerError } from '../errors/InvalidIntegerError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { NumberValueObject } from './NumberValueObject';
5
-
6
- export class Integer extends NumberValueObject {
7
- constructor(value: number | NumberValueObject) {
8
- super(value?.valueOf());
9
-
10
- if (NullObject.isNullObject(this)) {
11
- return this;
12
- }
13
- this.ensureIsInteger();
14
- }
15
-
16
- private ensureIsInteger(): void {
17
- assert(
18
- this.value.valueOf() % 1 === 0,
19
- new InvalidIntegerError(this.value.valueOf()),
20
- );
21
- }
22
- }
@@ -1,60 +0,0 @@
1
- import { NullObjectError } from '../errors/NullObjectError';
2
-
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- type Constructor<T> = abstract new (...args: any[]) => T;
5
- type NullableObject = Nullable & Record<string, unknown>;
6
- interface Nullable {
7
- isNullObject: boolean;
8
- valueOf(): undefined;
9
- }
10
-
11
- export abstract class NullObject {
12
- private static setFakeProps<T>(
13
- nullObject: NullableObject,
14
- klass: Constructor<T>,
15
- ): void {
16
- const visited = new Set<string>();
17
- let proto = klass.prototype;
18
-
19
- while (proto && proto !== Object.prototype) {
20
- const props = Object.getOwnPropertyNames(proto);
21
-
22
- for (const prop of props) {
23
- if (
24
- prop === 'constructor' ||
25
- prop === 'isNullObject' ||
26
- prop === 'valueOf' ||
27
- visited.has(prop)
28
- ) {
29
- continue;
30
- }
31
-
32
- visited.add(prop);
33
- // eslint-disable-next-line no-param-reassign
34
- nullObject[prop] = () => {
35
- throw new NullObjectError(klass.name);
36
- };
37
- }
38
-
39
- proto = Object.getPrototypeOf(proto);
40
- }
41
-
42
- Object.setPrototypeOf(nullObject, NullObject.prototype);
43
- }
44
-
45
- public static new<T>(klass: Constructor<T>): T {
46
- const nullObject: NullableObject = {
47
- isNullObject: true,
48
- valueOf: () => {
49
- return undefined;
50
- },
51
- };
52
- NullObject.setFakeProps(nullObject, klass);
53
-
54
- return nullObject as T;
55
- }
56
-
57
- public static isNullObject(nullable: unknown): boolean {
58
- return !!(nullable as NullableObject)?.isNullObject;
59
- }
60
- }
@@ -1,56 +0,0 @@
1
- import { InvalidNumberError } from '../errors/InvalidNumberError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { ValueObject } from './ValueObject';
5
-
6
- export class NumberValueObject extends ValueObject<number> {
7
- constructor(value: number | NumberValueObject) {
8
- super(value?.valueOf());
9
-
10
- if (NullObject.isNullObject(this)) {
11
- return this;
12
- }
13
-
14
- assert(this.isValidNumber(this.value), new InvalidNumberError(this.value));
15
- }
16
-
17
- private isValidNumber(value: number): boolean {
18
- return !isNaN(value.valueOf());
19
- }
20
-
21
- public isZero(): boolean {
22
- return this.value === 0;
23
- }
24
-
25
- public isGreaterThan(other: number | NumberValueObject): boolean {
26
- return this.value > other.valueOf();
27
- }
28
-
29
- public isGreaterOrEqualThan(other: number | NumberValueObject): boolean {
30
- return this.value >= other.valueOf();
31
- }
32
-
33
- public isLessThan(other: number | NumberValueObject): boolean {
34
- return this.value < other.valueOf();
35
- }
36
-
37
- public isLessOrEqualThan(other: number | NumberValueObject): boolean {
38
- return this.value <= other.valueOf();
39
- }
40
-
41
- public add(other: number | NumberValueObject): NumberValueObject {
42
- return this.clone(this.value + other.valueOf());
43
- }
44
-
45
- public subtract(other: number | NumberValueObject): NumberValueObject {
46
- return this.clone(this.value - other.valueOf());
47
- }
48
-
49
- public multiply(other: number | NumberValueObject): NumberValueObject {
50
- return this.clone(this.value * other.valueOf());
51
- }
52
-
53
- public divide(other: number | NumberValueObject): NumberValueObject {
54
- return this.clone(this.value / other.valueOf());
55
- }
56
- }
@@ -1,20 +0,0 @@
1
- import { InvalidPositiveNumberError } from '../errors/InvalidPositiveNumberError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { NumberValueObject } from './NumberValueObject';
5
-
6
- export class PositiveNumber extends NumberValueObject {
7
- constructor(value: number | NumberValueObject) {
8
- super(value?.valueOf());
9
-
10
- if (NullObject.isNullObject(this)) {
11
- return this;
12
- }
13
-
14
- this.ensureIsPositive(this.value);
15
- }
16
-
17
- private ensureIsPositive(value: number): void {
18
- assert(value >= 0, new InvalidPositiveNumberError());
19
- }
20
- }
@@ -1,27 +0,0 @@
1
- import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';
2
- import { assert } from '../patterns/Assert';
3
- import { NullObject } from './NullObject';
4
- import { ValueObject } from './ValueObject';
5
-
6
- export class StringValueObject extends ValueObject<string> {
7
- constructor(value: string | StringValueObject, maxLength: number = 512) {
8
- super(value?.valueOf());
9
-
10
- if (NullObject.isNullObject(this)) {
11
- return this;
12
- }
13
-
14
- this.ensureDoesNotExceedsMaxLength(maxLength);
15
- }
16
-
17
- private ensureDoesNotExceedsMaxLength(maxLength: number): void {
18
- assert(
19
- this.value.length <= maxLength,
20
- new InvalidStringLengthError(this.value, maxLength),
21
- );
22
- }
23
-
24
- public isEmpty(): boolean {
25
- return !this.value;
26
- }
27
- }
@@ -1,39 +0,0 @@
1
- import { Primitive, Nullish } from '../types';
2
- import { NullObject } from './NullObject';
3
-
4
- export abstract class ValueObject<T extends Primitive = Primitive> {
5
- protected readonly value!: T;
6
-
7
- constructor(value: T | Nullish) {
8
- if (this.isNullish(value)) {
9
- return NullObject.new(new.target);
10
- }
11
- this.value = value;
12
- }
13
-
14
- private isNullish(value: T | Nullish): value is null | undefined {
15
- return value === null || value === undefined;
16
- }
17
-
18
- protected clone(value: T): this {
19
- return new (this.constructor as new (value: Primitive) => this)(
20
- this.isNullish(value) ? this.value : value,
21
- ) as this;
22
- }
23
-
24
- public isEqual(other: unknown): boolean {
25
- return this.value === other?.valueOf();
26
- }
27
-
28
- public isNotEqual(other: unknown): boolean {
29
- return this.isEqual(other) === false;
30
- }
31
-
32
- public valueOf(): T {
33
- return this.value;
34
- }
35
-
36
- public toString(): string {
37
- return this.value!.toString();
38
- }
39
- }
@@ -1,30 +0,0 @@
1
- import { StringValueObject } from '../StringValueObject';
2
- import { Latitude } from './Latitude';
3
- import { Longitude } from './Longitude';
4
-
5
- export class Coordinates extends StringValueObject {
6
- private latitude: Latitude;
7
- private longitude: Longitude;
8
-
9
- public static fromString(value: string): Coordinates {
10
- const latitude = parseFloat(value.split(',')[0]);
11
- const longitude = parseFloat(value.split(',')[1]);
12
-
13
- return new Coordinates(latitude, longitude);
14
- }
15
-
16
- constructor(latitude: number | Latitude, longitude: number | Longitude) {
17
- super(latitude?.valueOf() + ',' + longitude?.valueOf());
18
-
19
- this.latitude = new Latitude(latitude.valueOf());
20
- this.longitude = new Longitude(longitude.valueOf());
21
- }
22
-
23
- public getLatitude(): Latitude {
24
- return this.latitude;
25
- }
26
-
27
- public getLongitude(): Longitude {
28
- return this.longitude;
29
- }
30
- }
@@ -1,22 +0,0 @@
1
- import { InvalidLatitudeError } from '../../errors/InvalidLatitudeError';
2
- import { assert } from '../../patterns/Assert';
3
- import { NumberValueObject } from '../NumberValueObject';
4
-
5
- export class Latitude extends NumberValueObject {
6
- private static MIN_VALUE = new NumberValueObject(-90);
7
- private static MAX_VALUE = new NumberValueObject(90);
8
-
9
- private static isValid(value: number | NumberValueObject): boolean {
10
- const numberValue = new NumberValueObject(value.valueOf());
11
-
12
- return (
13
- numberValue.isGreaterOrEqualThan(this.MIN_VALUE) &&
14
- numberValue.isLessOrEqualThan(this.MAX_VALUE)
15
- );
16
- }
17
-
18
- constructor(value: number | NumberValueObject) {
19
- super(value.valueOf());
20
- assert(Latitude.isValid(value), new InvalidLatitudeError(value.valueOf()));
21
- }
22
- }