@duplojs/utils 1.4.57 → 1.4.59

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 (319) hide show
  1. package/dist/array/group.cjs +11 -11
  2. package/dist/array/group.d.ts +1 -1
  3. package/dist/array/group.mjs +11 -11
  4. package/dist/clean/constraint/base.d.ts +6 -4
  5. package/dist/clean/constraint/defaultConstraint/index.d.ts +1 -0
  6. package/dist/clean/constraint/defaultConstraint/number.d.ts +6 -6
  7. package/dist/clean/constraint/defaultConstraint/string.d.ts +4 -4
  8. package/dist/clean/constraint/defaultConstraint/time.cjs +19 -0
  9. package/dist/clean/constraint/defaultConstraint/time.d.ts +61 -0
  10. package/dist/clean/constraint/defaultConstraint/time.mjs +16 -0
  11. package/dist/clean/constraint/set.d.ts +6 -4
  12. package/dist/clean/entity.d.ts +2 -1
  13. package/dist/clean/index.cjs +3 -0
  14. package/dist/clean/index.mjs +1 -0
  15. package/dist/clean/newType.d.ts +7 -5
  16. package/dist/clean/primitive/base.d.ts +25 -34
  17. package/dist/clean/primitive/operations/date/dateAddTime.d.ts +7 -11
  18. package/dist/clean/primitive/operations/date/dateGreaterThan.d.ts +9 -7
  19. package/dist/clean/primitive/operations/date/dateLessThan.d.ts +9 -7
  20. package/dist/clean/primitive/operations/date/dateMax.d.ts +3 -10
  21. package/dist/clean/primitive/operations/date/dateMin.d.ts +3 -10
  22. package/dist/clean/primitive/operations/date/dateSubtractTime.d.ts +7 -11
  23. package/dist/clean/primitive/operations/equal.cjs +1 -1
  24. package/dist/clean/primitive/operations/equal.d.ts +3 -3
  25. package/dist/clean/primitive/operations/equal.mjs +1 -1
  26. package/dist/clean/primitive/operations/sort.d.ts +8 -10
  27. package/dist/clean/primitive/operations/time/timeGreaterThan.d.ts +11 -9
  28. package/dist/clean/primitive/operations/time/timeLessThan.d.ts +11 -9
  29. package/dist/clean/primitive/operations/time/timeMax.cjs +2 -2
  30. package/dist/clean/primitive/operations/time/timeMax.d.ts +10 -17
  31. package/dist/clean/primitive/operations/time/timeMax.mjs +2 -2
  32. package/dist/clean/primitive/operations/time/timeMin.cjs +3 -3
  33. package/dist/clean/primitive/operations/time/timeMin.d.ts +10 -17
  34. package/dist/clean/primitive/operations/time/timeMin.mjs +3 -3
  35. package/dist/clean/unwrapEntity.cjs +13 -3
  36. package/dist/clean/unwrapEntity.d.ts +57 -5
  37. package/dist/clean/unwrapEntity.mjs +13 -3
  38. package/dist/common/index.d.ts +3 -4
  39. package/dist/common/kind.d.ts +1 -0
  40. package/dist/common/path.cjs +13 -13
  41. package/dist/common/path.d.ts +17 -11
  42. package/dist/common/path.mjs +13 -13
  43. package/dist/common/toRegExp.cjs +19 -0
  44. package/dist/common/toRegExp.d.ts +31 -0
  45. package/dist/common/toRegExp.mjs +17 -0
  46. package/dist/common/transformer.cjs +45 -0
  47. package/dist/common/transformer.d.ts +61 -0
  48. package/dist/common/transformer.mjs +40 -0
  49. package/dist/common/types/DeepReadonly.d.ts +1 -1
  50. package/dist/common/types/toLargeEnsemble.d.ts +2 -2
  51. package/dist/dataParser/error.cjs +4 -2
  52. package/dist/dataParser/error.d.ts +4 -2
  53. package/dist/dataParser/error.mjs +4 -2
  54. package/dist/dataParser/extended/date.d.ts +9 -4
  55. package/dist/dataParser/extended/time.d.ts +28 -12
  56. package/dist/dataParser/identifier.d.ts +20 -8
  57. package/dist/dataParser/parsers/date.cjs +16 -12
  58. package/dist/dataParser/parsers/date.d.ts +15 -9
  59. package/dist/dataParser/parsers/date.mjs +16 -12
  60. package/dist/dataParser/parsers/time/checkers/max.cjs +3 -0
  61. package/dist/dataParser/parsers/time/checkers/max.d.ts +28 -0
  62. package/dist/dataParser/parsers/time/checkers/max.mjs +3 -0
  63. package/dist/dataParser/parsers/time/checkers/min.cjs +3 -0
  64. package/dist/dataParser/parsers/time/checkers/min.d.ts +28 -0
  65. package/dist/dataParser/parsers/time/checkers/min.mjs +3 -0
  66. package/dist/dataParser/parsers/time/index.cjs +14 -10
  67. package/dist/dataParser/parsers/time/index.d.ts +15 -9
  68. package/dist/dataParser/parsers/time/index.mjs +14 -10
  69. package/dist/date/applyTimezone.cjs +4 -4
  70. package/dist/date/applyTimezone.d.ts +18 -16
  71. package/dist/date/applyTimezone.mjs +2 -2
  72. package/dist/date/closestTo.cjs +6 -2
  73. package/dist/date/closestTo.d.ts +15 -15
  74. package/dist/date/closestTo.mjs +6 -2
  75. package/dist/date/constants.cjs +4 -4
  76. package/dist/date/constants.d.ts +2 -2
  77. package/dist/date/constants.mjs +3 -3
  78. package/dist/date/create.cjs +20 -10
  79. package/dist/date/create.d.ts +24 -38
  80. package/dist/date/create.mjs +21 -11
  81. package/dist/date/createOrThrow.d.ts +18 -20
  82. package/dist/date/createTime.cjs +16 -7
  83. package/dist/date/createTime.d.ts +19 -18
  84. package/dist/date/createTime.mjs +17 -8
  85. package/dist/date/createTimeOrThrow.d.ts +17 -20
  86. package/dist/date/each.cjs +6 -4
  87. package/dist/date/each.d.ts +21 -19
  88. package/dist/date/each.mjs +6 -4
  89. package/dist/date/format.d.ts +17 -15
  90. package/dist/date/formatTime.d.ts +17 -16
  91. package/dist/date/getTimezoneOffset.cjs +6 -3
  92. package/dist/date/getTimezoneOffset.d.ts +17 -18
  93. package/dist/date/getTimezoneOffset.mjs +6 -3
  94. package/dist/date/getters/getDayOfMonth.cjs +3 -3
  95. package/dist/date/getters/getDayOfMonth.d.ts +20 -14
  96. package/dist/date/getters/getDayOfMonth.mjs +3 -3
  97. package/dist/date/getters/getDayOfWeek.cjs +3 -3
  98. package/dist/date/getters/getDayOfWeek.d.ts +15 -12
  99. package/dist/date/getters/getDayOfWeek.mjs +3 -3
  100. package/dist/date/getters/getDayOfYear.cjs +6 -6
  101. package/dist/date/getters/getDayOfYear.d.ts +21 -13
  102. package/dist/date/getters/getDayOfYear.mjs +6 -6
  103. package/dist/date/getters/getFirstDayOfMonth.cjs +2 -3
  104. package/dist/date/getters/getFirstDayOfMonth.d.ts +16 -10
  105. package/dist/date/getters/getFirstDayOfMonth.mjs +2 -3
  106. package/dist/date/getters/getFirstDayOfWeek.cjs +2 -3
  107. package/dist/date/getters/getFirstDayOfWeek.d.ts +17 -10
  108. package/dist/date/getters/getFirstDayOfWeek.mjs +2 -3
  109. package/dist/date/getters/getHour.cjs +3 -3
  110. package/dist/date/getters/getHour.d.ts +16 -14
  111. package/dist/date/getters/getHour.mjs +3 -3
  112. package/dist/date/getters/getLastDayOfMonth.cjs +2 -3
  113. package/dist/date/getters/getLastDayOfMonth.d.ts +16 -10
  114. package/dist/date/getters/getLastDayOfMonth.mjs +2 -3
  115. package/dist/date/getters/getLastDayOfWeek.cjs +2 -3
  116. package/dist/date/getters/getLastDayOfWeek.d.ts +17 -10
  117. package/dist/date/getters/getLastDayOfWeek.mjs +2 -3
  118. package/dist/date/getters/getMilliseconds.cjs +2 -2
  119. package/dist/date/getters/getMilliseconds.d.ts +11 -9
  120. package/dist/date/getters/getMilliseconds.mjs +2 -2
  121. package/dist/date/getters/getMinute.cjs +3 -3
  122. package/dist/date/getters/getMinute.d.ts +17 -15
  123. package/dist/date/getters/getMinute.mjs +3 -3
  124. package/dist/date/getters/getMonth.cjs +3 -3
  125. package/dist/date/getters/getMonth.d.ts +20 -15
  126. package/dist/date/getters/getMonth.mjs +3 -3
  127. package/dist/date/getters/getSecond.cjs +3 -3
  128. package/dist/date/getters/getSecond.d.ts +17 -15
  129. package/dist/date/getters/getSecond.mjs +3 -3
  130. package/dist/date/getters/getWeekOfYear.cjs +12 -11
  131. package/dist/date/getters/getWeekOfYear.d.ts +17 -11
  132. package/dist/date/getters/getWeekOfYear.mjs +12 -11
  133. package/dist/date/getters/getYear.cjs +3 -3
  134. package/dist/date/getters/getYear.d.ts +16 -15
  135. package/dist/date/getters/getYear.mjs +3 -3
  136. package/dist/date/index.cjs +12 -6
  137. package/dist/date/index.d.ts +5 -2
  138. package/dist/date/index.mjs +6 -3
  139. package/dist/date/is.cjs +3 -8
  140. package/dist/date/is.d.ts +9 -14
  141. package/dist/date/is.mjs +3 -8
  142. package/dist/date/isSafeTimeValue.d.ts +9 -13
  143. package/dist/date/isSafeTimestamp.d.ts +7 -16
  144. package/dist/date/isSerializedTheDate.cjs +20 -0
  145. package/dist/date/isSerializedTheDate.d.ts +31 -0
  146. package/dist/date/isSerializedTheDate.mjs +18 -0
  147. package/dist/date/isSerializedTheTime.cjs +20 -0
  148. package/dist/date/isSerializedTheTime.d.ts +31 -0
  149. package/dist/date/isSerializedTheTime.mjs +18 -0
  150. package/dist/date/isTime.cjs +3 -8
  151. package/dist/date/isTime.d.ts +7 -14
  152. package/dist/date/isTime.mjs +3 -8
  153. package/dist/date/kind.cjs +9 -0
  154. package/dist/date/kind.d.ts +1 -0
  155. package/dist/date/kind.mjs +7 -0
  156. package/dist/date/makeSafeTimeValue.d.ts +12 -11
  157. package/dist/date/makeSafeTimestamp.d.ts +12 -11
  158. package/dist/date/max.cjs +2 -2
  159. package/dist/date/max.d.ts +13 -13
  160. package/dist/date/max.mjs +2 -2
  161. package/dist/date/maxTime.cjs +2 -2
  162. package/dist/date/maxTime.d.ts +13 -21
  163. package/dist/date/maxTime.mjs +2 -2
  164. package/dist/date/min.cjs +2 -2
  165. package/dist/date/min.d.ts +13 -13
  166. package/dist/date/min.mjs +2 -2
  167. package/dist/date/minTime.cjs +2 -2
  168. package/dist/date/minTime.d.ts +13 -21
  169. package/dist/date/minTime.mjs +2 -2
  170. package/dist/date/now.cjs +3 -1
  171. package/dist/date/now.d.ts +9 -7
  172. package/dist/date/now.mjs +3 -1
  173. package/dist/date/operators/addDays.cjs +3 -5
  174. package/dist/date/operators/addDays.d.ts +14 -11
  175. package/dist/date/operators/addDays.mjs +3 -5
  176. package/dist/date/operators/addHours.cjs +3 -5
  177. package/dist/date/operators/addHours.d.ts +14 -11
  178. package/dist/date/operators/addHours.mjs +3 -5
  179. package/dist/date/operators/addMilliseconds.cjs +3 -5
  180. package/dist/date/operators/addMilliseconds.d.ts +14 -11
  181. package/dist/date/operators/addMilliseconds.mjs +3 -5
  182. package/dist/date/operators/addMinutes.cjs +3 -5
  183. package/dist/date/operators/addMinutes.d.ts +14 -11
  184. package/dist/date/operators/addMinutes.mjs +3 -5
  185. package/dist/date/operators/addMonths.cjs +2 -2
  186. package/dist/date/operators/addMonths.d.ts +13 -13
  187. package/dist/date/operators/addMonths.mjs +2 -2
  188. package/dist/date/operators/addSeconds.cjs +3 -5
  189. package/dist/date/operators/addSeconds.d.ts +14 -11
  190. package/dist/date/operators/addSeconds.mjs +3 -5
  191. package/dist/date/operators/addTime.cjs +13 -6
  192. package/dist/date/operators/addTime.d.ts +20 -18
  193. package/dist/date/operators/addTime.mjs +13 -6
  194. package/dist/date/operators/addWeeks.cjs +6 -5
  195. package/dist/date/operators/addWeeks.d.ts +14 -11
  196. package/dist/date/operators/addWeeks.mjs +6 -5
  197. package/dist/date/operators/addYears.cjs +2 -2
  198. package/dist/date/operators/addYears.d.ts +13 -13
  199. package/dist/date/operators/addYears.mjs +2 -2
  200. package/dist/date/operators/between.d.ts +11 -11
  201. package/dist/date/operators/betweenThan.d.ts +11 -11
  202. package/dist/date/operators/betweenThanTime.d.ts +18 -22
  203. package/dist/date/operators/betweenTime.d.ts +17 -21
  204. package/dist/date/operators/greater.d.ts +12 -9
  205. package/dist/date/operators/greaterThan.d.ts +14 -11
  206. package/dist/date/operators/greaterThanTime.d.ts +17 -21
  207. package/dist/date/operators/greaterTime.d.ts +16 -20
  208. package/dist/date/operators/less.d.ts +12 -9
  209. package/dist/date/operators/lessThan.d.ts +13 -10
  210. package/dist/date/operators/lessThanTime.d.ts +17 -21
  211. package/dist/date/operators/lessTime.d.ts +16 -20
  212. package/dist/date/operators/subtractDays.cjs +3 -5
  213. package/dist/date/operators/subtractDays.d.ts +14 -11
  214. package/dist/date/operators/subtractDays.mjs +3 -5
  215. package/dist/date/operators/subtractHours.cjs +3 -5
  216. package/dist/date/operators/subtractHours.d.ts +14 -11
  217. package/dist/date/operators/subtractHours.mjs +3 -5
  218. package/dist/date/operators/subtractMilliseconds.cjs +3 -5
  219. package/dist/date/operators/subtractMilliseconds.d.ts +14 -11
  220. package/dist/date/operators/subtractMilliseconds.mjs +3 -5
  221. package/dist/date/operators/subtractMinutes.cjs +3 -5
  222. package/dist/date/operators/subtractMinutes.d.ts +14 -11
  223. package/dist/date/operators/subtractMinutes.mjs +3 -5
  224. package/dist/date/operators/subtractMonths.cjs +2 -2
  225. package/dist/date/operators/subtractMonths.d.ts +17 -11
  226. package/dist/date/operators/subtractMonths.mjs +2 -2
  227. package/dist/date/operators/subtractSeconds.cjs +3 -5
  228. package/dist/date/operators/subtractSeconds.d.ts +14 -11
  229. package/dist/date/operators/subtractSeconds.mjs +3 -5
  230. package/dist/date/operators/subtractTime.cjs +13 -6
  231. package/dist/date/operators/subtractTime.d.ts +20 -18
  232. package/dist/date/operators/subtractTime.mjs +13 -6
  233. package/dist/date/operators/subtractWeeks.cjs +3 -5
  234. package/dist/date/operators/subtractWeeks.d.ts +14 -11
  235. package/dist/date/operators/subtractWeeks.mjs +3 -5
  236. package/dist/date/operators/subtractYears.cjs +2 -2
  237. package/dist/date/operators/subtractYears.d.ts +17 -11
  238. package/dist/date/operators/subtractYears.mjs +2 -2
  239. package/dist/date/round.cjs +2 -2
  240. package/dist/date/round.d.ts +11 -14
  241. package/dist/date/round.mjs +2 -2
  242. package/dist/date/serialize.cjs +14 -0
  243. package/dist/date/serialize.d.ts +41 -0
  244. package/dist/date/serialize.mjs +12 -0
  245. package/dist/date/sort.cjs +2 -2
  246. package/dist/date/sort.d.ts +16 -15
  247. package/dist/date/sort.mjs +2 -2
  248. package/dist/date/sortTimes.cjs +2 -2
  249. package/dist/date/sortTimes.d.ts +15 -21
  250. package/dist/date/sortTimes.mjs +2 -2
  251. package/dist/date/theDate.cjs +124 -0
  252. package/dist/date/theDate.d.ts +114 -0
  253. package/dist/date/theDate.mjs +122 -0
  254. package/dist/date/theTime.cjs +36 -0
  255. package/dist/date/theTime.d.ts +53 -0
  256. package/dist/date/theTime.mjs +34 -0
  257. package/dist/date/timezone.cjs +3 -0
  258. package/dist/date/timezone.d.ts +27 -0
  259. package/dist/date/timezone.mjs +3 -0
  260. package/dist/date/toISOString.cjs +5 -2
  261. package/dist/date/toISOString.d.ts +12 -10
  262. package/dist/date/toISOString.mjs +5 -2
  263. package/dist/date/toNative.cjs +4 -0
  264. package/dist/date/toNative.d.ts +12 -10
  265. package/dist/date/toNative.mjs +4 -0
  266. package/dist/date/toTimeValue.cjs +6 -2
  267. package/dist/date/toTimeValue.d.ts +14 -12
  268. package/dist/date/toTimeValue.mjs +6 -2
  269. package/dist/date/toTimestamp.cjs +5 -3
  270. package/dist/date/toTimestamp.d.ts +11 -9
  271. package/dist/date/toTimestamp.mjs +6 -4
  272. package/dist/date/today.cjs +3 -1
  273. package/dist/date/today.d.ts +14 -7
  274. package/dist/date/today.mjs +3 -1
  275. package/dist/date/tomorrow.cjs +2 -1
  276. package/dist/date/tomorrow.d.ts +12 -7
  277. package/dist/date/tomorrow.mjs +2 -1
  278. package/dist/date/types/index.d.ts +2 -2
  279. package/dist/date/types/serializedTheDate.d.ts +1 -0
  280. package/dist/date/types/serializedTheTime.d.ts +42 -0
  281. package/dist/date/types/spoolingDate.d.ts +2 -1
  282. package/dist/date/yesterday.cjs +2 -1
  283. package/dist/date/yesterday.d.ts +12 -7
  284. package/dist/date/yesterday.mjs +2 -1
  285. package/dist/generator/asyncGroup.cjs +31 -0
  286. package/dist/generator/asyncGroup.d.ts +39 -0
  287. package/dist/generator/asyncGroup.mjs +29 -0
  288. package/dist/generator/group.cjs +39 -0
  289. package/dist/generator/group.d.ts +101 -0
  290. package/dist/generator/group.mjs +36 -0
  291. package/dist/generator/index.cjs +5 -0
  292. package/dist/generator/index.d.ts +3 -0
  293. package/dist/generator/index.mjs +2 -0
  294. package/dist/index.cjs +7 -6
  295. package/dist/index.mjs +2 -3
  296. package/dist/metadata.json +94 -40
  297. package/dist/object/entries.cjs +7 -2
  298. package/dist/object/entries.mjs +7 -2
  299. package/dist/object/keys.cjs +7 -2
  300. package/dist/object/keys.d.ts +1 -1
  301. package/dist/object/keys.mjs +7 -2
  302. package/package.json +1 -1
  303. package/dist/common/toJSON.cjs +0 -37
  304. package/dist/common/toJSON.d.ts +0 -44
  305. package/dist/common/toJSON.mjs +0 -35
  306. package/dist/common/toString.cjs +0 -10
  307. package/dist/common/toString.d.ts +0 -17
  308. package/dist/common/toString.mjs +0 -8
  309. package/dist/common/toTransform.cjs +0 -37
  310. package/dist/common/toTransform.d.ts +0 -50
  311. package/dist/common/toTransform.mjs +0 -35
  312. package/dist/date/createTheDate.cjs +0 -13
  313. package/dist/date/createTheDate.d.ts +0 -28
  314. package/dist/date/createTheDate.mjs +0 -11
  315. package/dist/date/createTheTime.cjs +0 -13
  316. package/dist/date/createTheTime.d.ts +0 -25
  317. package/dist/date/createTheTime.mjs +0 -11
  318. package/dist/date/types/theDate.d.ts +0 -11
  319. package/dist/date/types/theTime.d.ts +0 -10
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var createOrThrow = require('./createOrThrow.cjs');
4
3
  var getTimezoneOffset = require('./getTimezoneOffset.cjs');
5
4
  var toTimestamp = require('./toTimestamp.cjs');
5
+ var theDate = require('./theDate.cjs');
6
6
 
7
7
  function applyTimezone(...args) {
8
8
  if (args.length === 1) {
9
9
  const [timeZone] = args;
10
10
  return (theDate) => applyTimezone(theDate, timeZone);
11
11
  }
12
- const [theDate, timeZone] = args;
13
- const timestamp = toTimestamp.toTimestamp(theDate);
14
- return createOrThrow.createOrThrow(timestamp - getTimezoneOffset.getTimezoneOffset(theDate, timeZone));
12
+ const [theDate$1, timeZone] = args;
13
+ const timestamp = toTimestamp.toTimestamp(theDate$1);
14
+ return theDate.TheDate.new(timestamp - getTimezoneOffset.getTimezoneOffset(theDate$1, timeZone));
15
15
  }
16
16
 
17
17
  exports.applyTimezone = applyTimezone;
@@ -1,33 +1,35 @@
1
- import { type Timezone } from "./timezone";
2
- import { type TheDate } from "./types";
1
+ import type { Timezone } from "./timezone";
2
+ import { TheDate } from "./theDate";
3
+ import type { SerializedTheDate } from "./types";
3
4
  /**
4
- * Applies a timezone to a date.
5
+ * Applies a timezone offset to a date and returns the shifted `TheDate`.
5
6
  *
6
7
  * **Supported call styles:**
7
- * - Classic: `applyTimezone(timeZone)` → returns a value
8
- * - Curried: `applyTimezone(theDate, timeZone)` → returns a function waiting for the input
8
+ * - Classic: `applyTimezone(input, timeZone)` → `TheDate`
9
+ * - Curried: `applyTimezone(timeZone)` → `(input) => TheDate`
9
10
  *
10
- * The input value is not mutated.
11
+ * `input` accepts `TheDate` or `SerializedTheDate`.
11
12
  *
12
13
  * ```ts
13
- * const theDate = D.createOrThrow(1704067200000);
14
- * const shiftedDate = D.applyTimezone(theDate, "America/New_York");
15
- * // shiftedDate: "date1704085200000+"
14
+ * const input = D.create("2024-01-01", {
15
+ * hour: "00",
16
+ * });
16
17
  *
17
- * pipe(
18
- * theDate,
19
- * D.applyTimezone("America/New_York"),
20
- * ); // shiftedDate: "date1704085200000+"
18
+ * const shifted = D.applyTimezone(input, "America/New_York");
19
+ * // shifted: TheDate
21
20
  *
21
+ * pipe(
22
+ * input,
23
+ * D.applyTimezone("Europe/Paris"),
22
24
  * ```
23
25
  *
24
26
  * @remarks
25
- * - Applies the timezone offset to shift the date.
27
+ * - This is a timestamp shift based on the target timezone offset.
26
28
  *
27
29
  * @see https://utils.duplojs.dev/en/v1/api/date/applyTimezone
28
30
  *
29
31
  * @namespace D
30
32
  *
31
33
  */
32
- export declare function applyTimezone(timeZone: Timezone): (theDate: TheDate) => TheDate;
33
- export declare function applyTimezone(theDate: TheDate, timeZone: Timezone): TheDate;
34
+ export declare function applyTimezone(timeZone: Timezone): (input: TheDate | SerializedTheDate) => TheDate;
35
+ export declare function applyTimezone(input: TheDate | SerializedTheDate, timeZone: Timezone): TheDate;
@@ -1,6 +1,6 @@
1
- import { createOrThrow } from './createOrThrow.mjs';
2
1
  import { getTimezoneOffset } from './getTimezoneOffset.mjs';
3
2
  import { toTimestamp } from './toTimestamp.mjs';
3
+ import { TheDate } from './theDate.mjs';
4
4
 
5
5
  function applyTimezone(...args) {
6
6
  if (args.length === 1) {
@@ -9,7 +9,7 @@ function applyTimezone(...args) {
9
9
  }
10
10
  const [theDate, timeZone] = args;
11
11
  const timestamp = toTimestamp(theDate);
12
- return createOrThrow(timestamp - getTimezoneOffset(theDate, timeZone));
12
+ return TheDate.new(timestamp - getTimezoneOffset(theDate, timeZone));
13
13
  }
14
14
 
15
15
  export { applyTimezone };
@@ -1,9 +1,10 @@
1
1
  'use strict';
2
2
 
3
+ var theDate = require('./theDate.cjs');
3
4
  var toTimestamp = require('./toTimestamp.cjs');
4
5
 
5
6
  function closestTo(...args) {
6
- if (typeof args[0] === "string") {
7
+ if (typeof args[0] === "string" || args[0] instanceof theDate.TheDate) {
7
8
  const [target, params] = args;
8
9
  return (input) => closestTo(input, target, params);
9
10
  }
@@ -23,7 +24,10 @@ function closestTo(...args) {
23
24
  const distance = Math.abs(valueTimestamp - targetTimestamp);
24
25
  if (distance < smallestDiff) {
25
26
  smallestDiff = distance;
26
- closest = value;
27
+ if (value instanceof theDate.TheDate) {
28
+ closest = value;
29
+ }
30
+ closest = theDate.TheDate.new(valueTimestamp);
27
31
  }
28
32
  }
29
33
  return closest;
@@ -1,15 +1,14 @@
1
- import type { TheDate } from "./types";
1
+ import { TheDate } from "./theDate";
2
+ import type { SerializedTheDate } from "./types";
2
3
  interface ClosestToParams {
3
4
  tieBreaker?: "favorPast" | "favorFuture";
4
5
  }
5
6
  /**
6
- * Finds the closest date to a target.
7
+ * Finds the closest date from an iterable relative to a target date.
7
8
  *
8
9
  * **Supported call styles:**
9
- * - Classic: `closestTo(input, target, params?)` → returns a value
10
- * - Curried: `closestTo(target, params?)` → returns a function waiting for the input
11
- *
12
- * The input value is not mutated.
10
+ * - Classic: `closestTo(input, target, params?)` → `TheDate | undefined`
11
+ * - Curried: `closestTo(target, params?)` → `(input) => TheDate | undefined`
13
12
  *
14
13
  * ```ts
15
14
  * const inputs = [
@@ -19,24 +18,25 @@ interface ClosestToParams {
19
18
  * ] as const;
20
19
  *
21
20
  * const target = D.create("2024-06-15");
22
- * const result = D.closestTo(inputs, target);
23
- * // result: "date1717996800000+" (10 June 2024)
21
+ * const nearest = D.closestTo(inputs, target);
22
+ * // nearest: TheDate | undefined
24
23
  *
25
- * pipe(
26
- * inputs,
27
- * D.closestTo(target),
28
- * ); // result: "date1717996800000+" (10 June 2024)
24
+ * const nearestPast = D.closestTo(inputs, target, {
25
+ * tieBreaker: "favorPast",
26
+ * });
27
+ * // nearestPast: TheDate | undefined
29
28
  *
30
29
  * ```
31
30
  *
32
31
  * @remarks
33
- * - `tieBreaker` can be "favorPast" or "favorFuture" to resolve equidistant dates.
32
+ * - `tieBreaker: "favorPast"` ignores future candidates.
33
+ * - `tieBreaker: "favorFuture"` ignores past candidates.
34
34
  *
35
35
  * @see https://utils.duplojs.dev/en/v1/api/date/closestTo
36
36
  *
37
37
  * @namespace D
38
38
  *
39
39
  */
40
- export declare function closestTo<GenericIterable extends Iterable<TheDate>>(target: TheDate, params?: ClosestToParams): (input: GenericIterable) => TheDate | undefined;
41
- export declare function closestTo<GenericIterable extends Iterable<TheDate>>(input: GenericIterable, target: TheDate, params?: ClosestToParams): TheDate | undefined;
40
+ export declare function closestTo<GenericIterable extends Iterable<TheDate | SerializedTheDate>>(target: TheDate | SerializedTheDate, params?: ClosestToParams): (input: GenericIterable) => TheDate | undefined;
41
+ export declare function closestTo<GenericIterable extends Iterable<TheDate | SerializedTheDate>>(input: GenericIterable, target: TheDate | SerializedTheDate, params?: ClosestToParams): TheDate | undefined;
42
42
  export {};
@@ -1,7 +1,8 @@
1
+ import { TheDate } from './theDate.mjs';
1
2
  import { toTimestamp } from './toTimestamp.mjs';
2
3
 
3
4
  function closestTo(...args) {
4
- if (typeof args[0] === "string") {
5
+ if (typeof args[0] === "string" || args[0] instanceof TheDate) {
5
6
  const [target, params] = args;
6
7
  return (input) => closestTo(input, target, params);
7
8
  }
@@ -21,7 +22,10 @@ function closestTo(...args) {
21
22
  const distance = Math.abs(valueTimestamp - targetTimestamp);
22
23
  if (distance < smallestDiff) {
23
24
  smallestDiff = distance;
24
- closest = value;
25
+ if (value instanceof TheDate) {
26
+ closest = value;
27
+ }
28
+ closest = TheDate.new(valueTimestamp);
25
29
  }
26
30
  }
27
31
  return closest;
@@ -14,9 +14,9 @@ const monthsInOneYear = 12;
14
14
  const minutesInOneHour = 60;
15
15
  const secondsInOneMinute = 60;
16
16
  const hoursInOneDay = 24;
17
- const theDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
17
+ const serializeTheDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
18
18
  const isoDateRegex = /^(?<year>-?[0-9]{4})-(?<month>[0-9]{2})-(?<date>[0-9]{2})(?:T(?<hour>[0-9]{2}):(?<minute>[0-9]{2}):(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
19
- const theTimeRegex = /^time-?(?<value>\d{1,16})(?<sign>[+-])$/;
19
+ const serializeTheTimeRegex = /^time-?(?<value>\d{1,16})(?<sign>[+-])$/;
20
20
  const isoTimeRegex = /^(?<sign>[+-])?(?<hour>[0-9]{2}):(?<minute>[0-9]{2})(?::(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
21
21
 
22
22
  exports.daysInOneWeek = daysInOneWeek;
@@ -35,5 +35,5 @@ exports.minTimestamp = minTimestamp;
35
35
  exports.minutesInOneHour = minutesInOneHour;
36
36
  exports.monthsInOneYear = monthsInOneYear;
37
37
  exports.secondsInOneMinute = secondsInOneMinute;
38
- exports.theDateRegex = theDateRegex;
39
- exports.theTimeRegex = theTimeRegex;
38
+ exports.serializeTheDateRegex = serializeTheDateRegex;
39
+ exports.serializeTheTimeRegex = serializeTheTimeRegex;
@@ -12,7 +12,7 @@ export declare const monthsInOneYear = 12;
12
12
  export declare const minutesInOneHour = 60;
13
13
  export declare const secondsInOneMinute = 60;
14
14
  export declare const hoursInOneDay = 24;
15
- export declare const theDateRegex: RegExp;
15
+ export declare const serializeTheDateRegex: RegExp;
16
16
  export declare const isoDateRegex: RegExp;
17
- export declare const theTimeRegex: RegExp;
17
+ export declare const serializeTheTimeRegex: RegExp;
18
18
  export declare const isoTimeRegex: RegExp;
@@ -12,9 +12,9 @@ const monthsInOneYear = 12;
12
12
  const minutesInOneHour = 60;
13
13
  const secondsInOneMinute = 60;
14
14
  const hoursInOneDay = 24;
15
- const theDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
15
+ const serializeTheDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
16
16
  const isoDateRegex = /^(?<year>-?[0-9]{4})-(?<month>[0-9]{2})-(?<date>[0-9]{2})(?:T(?<hour>[0-9]{2}):(?<minute>[0-9]{2}):(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
17
- const theTimeRegex = /^time-?(?<value>\d{1,16})(?<sign>[+-])$/;
17
+ const serializeTheTimeRegex = /^time-?(?<value>\d{1,16})(?<sign>[+-])$/;
18
18
  const isoTimeRegex = /^(?<sign>[+-])?(?<hour>[0-9]{2}):(?<minute>[0-9]{2})(?::(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
19
19
 
20
- export { daysInOneWeek, hoursInOneDay, isoDateRegex, isoTimeRegex, maxTimeValue, maxTimestamp, millisecondInOneHour, millisecondInOneMinute, millisecondInOneWeek, millisecondsInOneDay, millisecondsInOneSecond, minTimeValue, minTimestamp, minutesInOneHour, monthsInOneYear, secondsInOneMinute, theDateRegex, theTimeRegex };
20
+ export { daysInOneWeek, hoursInOneDay, isoDateRegex, isoTimeRegex, maxTimeValue, maxTimestamp, millisecondInOneHour, millisecondInOneMinute, millisecondInOneWeek, millisecondsInOneDay, millisecondsInOneSecond, minTimeValue, minTimestamp, minutesInOneHour, monthsInOneYear, secondsInOneMinute, serializeTheDateRegex, serializeTheTimeRegex };
@@ -5,7 +5,7 @@ var isSafeTimestamp = require('./isSafeTimestamp.cjs');
5
5
  var applyTimezone = require('./applyTimezone.cjs');
6
6
  var is = require('./is.cjs');
7
7
  var toNative = require('./toNative.cjs');
8
- var createTheDate = require('./createTheDate.cjs');
8
+ var theDate = require('./theDate.cjs');
9
9
  var create$1 = require('../either/right/create.cjs');
10
10
  var is$1 = require('../either/left/is.cjs');
11
11
  var create$2 = require('../either/left/create.cjs');
@@ -21,28 +21,38 @@ function create(input, params) {
21
21
  if (input instanceof Date) {
22
22
  return createFromTimestamp(input.getTime());
23
23
  }
24
- if (typeof input === "string" && is.is(input)) {
25
- return create$1.right("date-created", input);
24
+ const serializeTheDateMatch = typeof input === "string" && input.match(constants.serializeTheDateRegex);
25
+ if (serializeTheDateMatch) {
26
+ const { value, sign } = serializeTheDateMatch.groups;
27
+ return createFromTimestamp(Number(sign === "-"
28
+ ? `-${value}`
29
+ : value));
26
30
  }
27
31
  const safeDateMatch = typeof input === "string" && input.match(safeDateRegex);
28
32
  if (safeDateMatch) {
29
33
  const { year, monthWithDay } = safeDateMatch.groups;
30
34
  const date = new Date(`0000-${monthWithDay}T${params?.hour ?? "00"}:${params?.minute ?? "00"}:${params?.second ?? "00"}.${params?.millisecond ?? "000"}Z`);
31
35
  date.setUTCFullYear(Number(year));
32
- const timestamp = date.getTime();
33
- return `date${Math.abs(timestamp)}${timestamp < 0 ? "-" : "+"}`;
36
+ return theDate.TheDate.new(date.getTime());
34
37
  }
35
38
  if (typeof input === "object") {
36
39
  let inputValueResult = undefined;
37
- if (input.value instanceof Date) {
40
+ const serializeTheDateMatch = typeof input.value === "string" && input.value.match(constants.serializeTheDateRegex);
41
+ if (serializeTheDateMatch) {
42
+ const { value, sign } = serializeTheDateMatch.groups;
43
+ inputValueResult = createFromTimestamp(Number(sign === "-"
44
+ ? `-${value}`
45
+ : value));
46
+ }
47
+ else if (is.is(input.value)) {
48
+ inputValueResult = create$1.right("date-created", input.value);
49
+ }
50
+ else if (input.value instanceof Date) {
38
51
  inputValueResult = createFromTimestamp(input.value.getTime());
39
52
  }
40
53
  else if (typeof input.value === "number") {
41
54
  inputValueResult = createFromTimestamp(input.value);
42
55
  }
43
- else if (is.is(input.value)) {
44
- inputValueResult = create$1.right("date-created", input.value);
45
- }
46
56
  else {
47
57
  const isoDateMatch = input.value.match(constants.isoDateRegex);
48
58
  if (isoDateMatch) {
@@ -77,7 +87,7 @@ function createFromTimestamp(input) {
77
87
  if (!isSafeTimestamp.isSafeTimestamp(input)) {
78
88
  return create$2.left("date-created-error", null);
79
89
  }
80
- return create$1.right("date-created", createTheDate.createTheDate(input));
90
+ return create$1.right("date-created", theDate.TheDate.new(input));
81
91
  }
82
92
 
83
93
  exports.create = create;
@@ -1,7 +1,9 @@
1
- import type { Hour, IsLeapYear, IsSafeYear, Millisecond, Minute, Second, TheDate, MonthWithDay, SpoolingDate } from "./types";
1
+ import type { Hour, IsLeapYear, IsSafeYear, Millisecond, Minute, Second, MonthWithDay, SpoolingDate } from "./types";
2
2
  import * as DEither from "../either";
3
3
  import type * as DString from "../string";
4
4
  import { type And, type IsEqual, type Not, type IsExtends } from "../common";
5
+ import { TheDate } from "./theDate";
6
+ import type { SerializedTheDate } from "./types/serializedTheDate";
5
7
  export type MayBe = DEither.Right<"date-created", TheDate> | DEither.Left<"date-created-error", null>;
6
8
  type SafeDate = `${number}-${MonthWithDay}`;
7
9
  declare const SymbolForbiddenDate: unique symbol;
@@ -22,58 +24,42 @@ interface SafeDateParams {
22
24
  millisecond?: Millisecond;
23
25
  }
24
26
  /**
25
- * Creates a TheDate from various inputs.
27
+ * Creates a `TheDate` from date-like inputs.
26
28
  *
27
- * Signature: `create(input)` → returns a value
29
+ * Signature: `create(input, params?)` → `TheDate | MaybeEither<TheDate>`
28
30
  *
29
- * The input value is not mutated.
31
+ * The return type depends on the overload:
32
+ * - Safe literal date strings (`YYYY-MM-DD`) return `TheDate` directly.
33
+ * - Runtime inputs (`number`, `Date`, `SerializedTheDate`, `SpoolingDate`, other strings) return `Either`.
30
34
  *
31
35
  * ```ts
32
- * // Either<"date-created", TheDate>
33
- * const mayBeDateFromNativeDate = D.create(
34
- * new Date("2024-06-20T12:00:00Z"),
35
- * );
36
+ * const direct = D.create("2024-02-29", {
37
+ * hour: "10",
38
+ * minute: "30",
39
+ * });
40
+ * // direct: TheDate
36
41
  *
37
- * // Either<"date-created", TheDate>
38
- * const mayBeDateFromTimestamp = D.create(
39
- * 1_700_000_000_000,
40
- * );
41
- *
42
- * // "date1709183400000+"
43
- * const dateFromSafeFormat = D.create(
44
- * "2024-02-29",
45
- * {
46
- * hour: "10",
47
- * minute: "30",
48
- * },
49
- * );
50
- *
51
- * const dateWrongLeapYear = D.create(
52
- * // @ts-expect-error Safe with leap year.
53
- * "2023-02-29",
54
- * );
55
- *
56
- * const dateWrongRangeYear = D.create(
57
- * // @ts-expect-error Safe against dates that fall outside the supported date range.
58
- * "-596126-12-30",
59
- * );
60
- *
61
- * pipe(
62
- * "2024-02-29",
63
- * D.create,
64
- * ); // "date1709183400000+"
42
+ * const mayBeFromTimestamp = D.create(1_700_000_000_000);
43
+ * // mayBeFromTimestamp: Either.Right<"date-created", TheDate> | DEither.Left<"date-created-error", null>
65
44
  *
45
+ * const mayBeFromSpooling = D.create({
46
+ * value: "2024-06-20T12:00:00Z",
47
+ * timezone: "Europe/Paris",
48
+ * });
49
+ * // mayBeFromSpooling: Either<"date-created", TheDate>
66
50
  * ```
67
51
  *
68
52
  * @remarks
69
- * - Returns an Either tagged "date-created" or "date-created-error" for invalid inputs.
53
+ * - Use this API when you want a non-throwing creation flow.
54
+ * - For throwing behavior, use `createOrThrow`.
70
55
  *
71
56
  * @see https://utils.duplojs.dev/en/v1/api/date/create
57
+ * @see https://utils.duplojs.dev/en/v1/api/date/createOrThrow
72
58
  *
73
59
  * @namespace D
74
60
  *
75
61
  */
76
- export declare function create<GenericInput extends TheDate | Date | number>(input: GenericInput): MayBe;
62
+ export declare function create<GenericInput extends TheDate | Date | number | SerializedTheDate>(input: GenericInput): MayBe;
77
63
  export declare function create<GenericInput extends SpoolingDate>(input: GenericInput): MayBe;
78
64
  export declare function create<GenericInput extends SafeDate>(input: GenericInput & ForbiddenDate<GenericInput>, params?: SafeDateParams): TheDate;
79
65
  export {};
@@ -1,9 +1,9 @@
1
- import { isoDateRegex } from './constants.mjs';
1
+ import { serializeTheDateRegex, isoDateRegex } from './constants.mjs';
2
2
  import { isSafeTimestamp } from './isSafeTimestamp.mjs';
3
3
  import { applyTimezone } from './applyTimezone.mjs';
4
4
  import { is } from './is.mjs';
5
5
  import { toNative } from './toNative.mjs';
6
- import { createTheDate } from './createTheDate.mjs';
6
+ import { TheDate } from './theDate.mjs';
7
7
  import { right } from '../either/right/create.mjs';
8
8
  import { isLeft } from '../either/left/is.mjs';
9
9
  import { left } from '../either/left/create.mjs';
@@ -19,28 +19,38 @@ function create(input, params) {
19
19
  if (input instanceof Date) {
20
20
  return createFromTimestamp(input.getTime());
21
21
  }
22
- if (typeof input === "string" && is(input)) {
23
- return right("date-created", input);
22
+ const serializeTheDateMatch = typeof input === "string" && input.match(serializeTheDateRegex);
23
+ if (serializeTheDateMatch) {
24
+ const { value, sign } = serializeTheDateMatch.groups;
25
+ return createFromTimestamp(Number(sign === "-"
26
+ ? `-${value}`
27
+ : value));
24
28
  }
25
29
  const safeDateMatch = typeof input === "string" && input.match(safeDateRegex);
26
30
  if (safeDateMatch) {
27
31
  const { year, monthWithDay } = safeDateMatch.groups;
28
32
  const date = new Date(`0000-${monthWithDay}T${params?.hour ?? "00"}:${params?.minute ?? "00"}:${params?.second ?? "00"}.${params?.millisecond ?? "000"}Z`);
29
33
  date.setUTCFullYear(Number(year));
30
- const timestamp = date.getTime();
31
- return `date${Math.abs(timestamp)}${timestamp < 0 ? "-" : "+"}`;
34
+ return TheDate.new(date.getTime());
32
35
  }
33
36
  if (typeof input === "object") {
34
37
  let inputValueResult = undefined;
35
- if (input.value instanceof Date) {
38
+ const serializeTheDateMatch = typeof input.value === "string" && input.value.match(serializeTheDateRegex);
39
+ if (serializeTheDateMatch) {
40
+ const { value, sign } = serializeTheDateMatch.groups;
41
+ inputValueResult = createFromTimestamp(Number(sign === "-"
42
+ ? `-${value}`
43
+ : value));
44
+ }
45
+ else if (is(input.value)) {
46
+ inputValueResult = right("date-created", input.value);
47
+ }
48
+ else if (input.value instanceof Date) {
36
49
  inputValueResult = createFromTimestamp(input.value.getTime());
37
50
  }
38
51
  else if (typeof input.value === "number") {
39
52
  inputValueResult = createFromTimestamp(input.value);
40
53
  }
41
- else if (is(input.value)) {
42
- inputValueResult = right("date-created", input.value);
43
- }
44
54
  else {
45
55
  const isoDateMatch = input.value.match(isoDateRegex);
46
56
  if (isoDateMatch) {
@@ -75,7 +85,7 @@ function createFromTimestamp(input) {
75
85
  if (!isSafeTimestamp(input)) {
76
86
  return left("date-created-error", null);
77
87
  }
78
- return right("date-created", createTheDate(input));
88
+ return right("date-created", TheDate.new(input));
79
89
  }
80
90
 
81
91
  export { create };
@@ -1,46 +1,44 @@
1
- import type { TheDate, SpoolingDate } from "./types";
1
+ import type { SerializedTheDate, SpoolingDate } from "./types";
2
+ import type { TheDate } from "./theDate";
2
3
  declare const CreateTheDateError_base: new (params: {
3
4
  "@DuplojsUtilsError/create-the-date-error"?: unknown;
4
5
  }, parentParams: readonly [message?: string | undefined, options?: ErrorOptions | undefined]) => Error & import("../common").Kind<import("../common").KindDefinition<"create-the-date-error", unknown>, unknown> & import("../common").Kind<import("../common").KindDefinition<"@DuplojsUtilsError/create-the-date-error", unknown>, unknown>;
5
6
  export declare class CreateTheDateError extends CreateTheDateError_base {
6
- input: string | Date | number | SpoolingDate;
7
- constructor(input: string | Date | number | SpoolingDate);
7
+ input: string | Date | number | SpoolingDate | TheDate;
8
+ constructor(input: string | Date | number | SpoolingDate | TheDate);
8
9
  }
9
10
  /**
10
- * Creates a TheDate or throws on invalid input.
11
+ * Creates a `TheDate` and throws when input cannot be parsed or normalized.
11
12
  *
12
- * Signature: `createOrThrow(input)` → returns a value
13
+ * Signature: `createOrThrow(input)` → `TheDate`
13
14
  *
14
- * The input value is not mutated.
15
+ * `input` accepts the same runtime shapes as `create` (`Date`, `number`, `SerializedTheDate`, `SpoolingDate`, strings).
15
16
  *
16
17
  * ```ts
17
- * const input = 1_700_000_000_000;
18
- * const result = D.createOrThrow(input);
19
- * // result: "date1700000000000+"
18
+ * const fromTimestamp = D.createOrThrow(1_700_000_000_000);
19
+ * // fromTimestamp: TheDate
20
20
  *
21
- * const input2 = result;
22
- * const result2 = D.createOrThrow(input2);
23
- * // result2: "date1700000000000+"
21
+ * const fromSerialized = D.createOrThrow("date1700000000000+");
22
+ * // fromSerialized: TheDate
24
23
  *
25
- * const input3 = new Date("2024-06-20T12:00:00Z");
26
- * const result3 = D.createOrThrow(input3);
27
- * // result3: "date1718884800000+"
24
+ * const fromDate = D.createOrThrow(new Date("2024-06-20T12:00:00Z"));
25
+ * // fromDate: TheDate
28
26
  *
29
27
  * pipe(
30
- * input,
28
+ * fromTimestamp,
31
29
  * (value) => D.createOrThrow(value),
32
- * ); // result: "date1700000000000+"
33
- *
30
+ * ); // TheDate
34
31
  * ```
35
32
  *
36
33
  * @remarks
37
- * - Throws when the input cannot be converted to TheDate.
34
+ * - Throws `CreateTheDateError` on invalid input.
38
35
  *
39
36
  * @see https://utils.duplojs.dev/en/v1/api/date/createOrThrow
37
+ * @see https://utils.duplojs.dev/en/v1/api/date/create
40
38
  *
41
39
  * @namespace D
42
40
  *
43
41
  */
44
- export declare function createOrThrow<GenericInput extends TheDate | Date | number>(input: GenericInput): TheDate;
42
+ export declare function createOrThrow<GenericInput extends TheDate | Date | number | SerializedTheDate>(input: GenericInput): TheDate;
45
43
  export declare function createOrThrow<GenericInput extends SpoolingDate>(input: GenericInput): TheDate;
46
44
  export {};
@@ -1,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var constants = require('./constants.cjs');
4
- var createTheTime = require('./createTheTime.cjs');
5
4
  var isSafeTimeValue = require('./isSafeTimeValue.cjs');
6
- var isTime = require('./isTime.cjs');
5
+ var theTime = require('./theTime.cjs');
7
6
  var create = require('../either/left/create.cjs');
8
7
  var create$1 = require('../either/right/create.cjs');
9
8
 
@@ -16,14 +15,24 @@ const unitsMapper = {
16
15
  millisecond: 1,
17
16
  };
18
17
  function createTime(input, unit) {
19
- if (typeof input === "number" && unit) {
20
- return createTheTime.createTheTime(input * unitsMapper[unit]);
18
+ if (input instanceof theTime.TheTime) {
19
+ return input;
21
20
  }
22
21
  if (typeof input === "number") {
22
+ if (unit) {
23
+ return theTime.TheTime.new(input * unitsMapper[unit]);
24
+ }
23
25
  return createFromTimeValue(input * unitsMapper[unit ?? "millisecond"]);
24
26
  }
25
- if (typeof input === "string" && isTime.isTime(input)) {
26
- return input;
27
+ if (typeof input === "string") {
28
+ const serializeTheTimeMatch = input.match(constants.serializeTheTimeRegex);
29
+ if (!serializeTheTimeMatch) {
30
+ return create.left("time-created-error", null);
31
+ }
32
+ const { value, sign } = serializeTheTimeMatch.groups;
33
+ return createFromTimeValue(Number(sign === "-"
34
+ ? `-${value}`
35
+ : value));
27
36
  }
28
37
  const { value = 0, week = 0, day = 0, hour = 0, minute = 0, second = 0, millisecond = 0, } = input;
29
38
  let fromValue = 0;
@@ -55,7 +64,7 @@ function createFromTimeValue(input) {
55
64
  if (!isSafeTimeValue.isSafeTimeValue(input)) {
56
65
  return create.left("time-created-error", null);
57
66
  }
58
- return create$1.right("time-created", createTheTime.createTheTime(input));
67
+ return create$1.right("time-created", theTime.TheTime.new(input));
59
68
  }
60
69
 
61
70
  exports.createTime = createTime;