@duplojs/utils 1.3.29 → 1.3.31

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 (246) hide show
  1. package/dist/clean/entity.d.ts +2 -2
  2. package/dist/clean/flag.cjs +4 -0
  3. package/dist/clean/flag.d.ts +1 -0
  4. package/dist/clean/flag.mjs +4 -0
  5. package/dist/clean/index.cjs +15 -0
  6. package/dist/clean/index.d.ts +1 -0
  7. package/dist/clean/index.mjs +8 -1
  8. package/dist/clean/newType.d.ts +2 -2
  9. package/dist/clean/primitive/base.cjs +3 -0
  10. package/dist/clean/primitive/base.d.ts +4 -2
  11. package/dist/clean/primitive/base.mjs +3 -1
  12. package/dist/clean/primitive/operations/date/dateAddTime.cjs +16 -0
  13. package/dist/clean/primitive/operations/date/dateAddTime.d.ts +4 -0
  14. package/dist/clean/primitive/operations/date/dateAddTime.mjs +14 -0
  15. package/dist/clean/primitive/operations/date/dateMax.cjs +1 -5
  16. package/dist/clean/primitive/operations/date/dateMax.d.ts +1 -2
  17. package/dist/clean/primitive/operations/date/dateMax.mjs +1 -5
  18. package/dist/clean/primitive/operations/date/dateMin.cjs +1 -5
  19. package/dist/clean/primitive/operations/date/dateMin.d.ts +1 -2
  20. package/dist/clean/primitive/operations/date/dateMin.mjs +1 -5
  21. package/dist/clean/primitive/operations/date/dateSubtractTime.cjs +16 -0
  22. package/dist/clean/primitive/operations/date/dateSubtractTime.d.ts +4 -0
  23. package/dist/clean/primitive/operations/date/dateSubtractTime.mjs +14 -0
  24. package/dist/clean/primitive/operations/date/index.d.ts +2 -4
  25. package/dist/clean/primitive/operations/equal.d.ts +3 -3
  26. package/dist/clean/primitive/operations/index.d.ts +1 -0
  27. package/dist/clean/primitive/operations/sort.cjs +6 -0
  28. package/dist/clean/primitive/operations/sort.d.ts +4 -8
  29. package/dist/clean/primitive/operations/sort.mjs +6 -0
  30. package/dist/clean/primitive/operations/time/index.d.ts +4 -0
  31. package/dist/clean/primitive/operations/time/timeGreaterThan.cjs +15 -0
  32. package/dist/clean/primitive/operations/time/timeGreaterThan.d.ts +4 -0
  33. package/dist/clean/primitive/operations/time/timeGreaterThan.mjs +13 -0
  34. package/dist/clean/primitive/operations/time/timeLessThan.cjs +15 -0
  35. package/dist/clean/primitive/operations/time/timeLessThan.d.ts +4 -0
  36. package/dist/clean/primitive/operations/time/timeLessThan.mjs +13 -0
  37. package/dist/clean/primitive/operations/time/timeMax.cjs +12 -0
  38. package/dist/clean/primitive/operations/time/timeMax.d.ts +4 -0
  39. package/dist/clean/primitive/operations/time/timeMax.mjs +10 -0
  40. package/dist/clean/primitive/operations/time/timeMin.cjs +12 -0
  41. package/dist/clean/primitive/operations/time/timeMin.d.ts +4 -0
  42. package/dist/clean/primitive/operations/time/timeMin.mjs +10 -0
  43. package/dist/clean/unwrapEntity.cjs +26 -0
  44. package/dist/clean/unwrapEntity.d.ts +13 -0
  45. package/dist/clean/unwrapEntity.mjs +24 -0
  46. package/dist/common/index.d.ts +2 -0
  47. package/dist/common/override.cjs +38 -17
  48. package/dist/common/override.d.ts +5 -8
  49. package/dist/common/override.mjs +38 -17
  50. package/dist/common/pipeCall.cjs +7 -0
  51. package/dist/common/pipeCall.d.ts +1 -0
  52. package/dist/common/pipeCall.mjs +5 -0
  53. package/dist/common/toCurriedPredicate.cjs +7 -0
  54. package/dist/common/toCurriedPredicate.d.ts +1 -0
  55. package/dist/common/toCurriedPredicate.mjs +5 -0
  56. package/dist/common/toWrappedValue.d.ts +2 -1
  57. package/dist/common/types/DeepReadonly.d.ts +3 -0
  58. package/dist/common/types/index.d.ts +1 -0
  59. package/dist/dataParser/extended/coerce/index.cjs +2 -0
  60. package/dist/dataParser/extended/coerce/index.d.ts +1 -0
  61. package/dist/dataParser/extended/coerce/index.mjs +1 -0
  62. package/dist/dataParser/extended/coerce/time.cjs +12 -0
  63. package/dist/dataParser/extended/coerce/time.d.ts +7 -0
  64. package/dist/dataParser/extended/coerce/time.mjs +10 -0
  65. package/dist/dataParser/extended/index.cjs +2 -0
  66. package/dist/dataParser/extended/index.d.ts +1 -0
  67. package/dist/dataParser/extended/index.mjs +1 -0
  68. package/dist/dataParser/extended/object.cjs +5 -0
  69. package/dist/dataParser/extended/object.d.ts +4 -0
  70. package/dist/dataParser/extended/object.mjs +5 -0
  71. package/dist/dataParser/extended/time.cjs +22 -0
  72. package/dist/dataParser/extended/time.d.ts +34 -0
  73. package/dist/dataParser/extended/time.mjs +20 -0
  74. package/dist/dataParser/identifier.d.ts +10 -4
  75. package/dist/dataParser/index.cjs +36 -24
  76. package/dist/dataParser/index.mjs +4 -0
  77. package/dist/dataParser/parsers/coerce/index.cjs +2 -0
  78. package/dist/dataParser/parsers/coerce/index.d.ts +1 -0
  79. package/dist/dataParser/parsers/coerce/index.mjs +1 -0
  80. package/dist/dataParser/parsers/coerce/time.cjs +12 -0
  81. package/dist/dataParser/parsers/coerce/time.d.ts +6 -0
  82. package/dist/dataParser/parsers/coerce/time.mjs +10 -0
  83. package/dist/dataParser/parsers/date.cjs +6 -12
  84. package/dist/dataParser/parsers/date.mjs +6 -12
  85. package/dist/dataParser/parsers/index.d.ts +1 -0
  86. package/dist/dataParser/parsers/literal.d.ts +2 -2
  87. package/dist/dataParser/parsers/object/extends.cjs +15 -0
  88. package/dist/dataParser/parsers/object/extends.d.ts +9 -0
  89. package/dist/dataParser/parsers/object/extends.mjs +12 -0
  90. package/dist/dataParser/parsers/object/index.d.ts +1 -0
  91. package/dist/dataParser/parsers/time/checkers/index.d.ts +2 -0
  92. package/dist/dataParser/parsers/time/checkers/max.cjs +19 -0
  93. package/dist/dataParser/parsers/time/checkers/max.d.ts +12 -0
  94. package/dist/dataParser/parsers/time/checkers/max.mjs +16 -0
  95. package/dist/dataParser/parsers/time/checkers/min.cjs +19 -0
  96. package/dist/dataParser/parsers/time/checkers/min.d.ts +12 -0
  97. package/dist/dataParser/parsers/time/checkers/min.mjs +16 -0
  98. package/dist/dataParser/parsers/time/index.cjs +47 -0
  99. package/dist/dataParser/parsers/time/index.d.ts +33 -0
  100. package/dist/dataParser/parsers/time/index.mjs +44 -0
  101. package/dist/dataParser/types/checkers.d.ts +1 -1
  102. package/dist/dataParser/types/dataParsers.d.ts +2 -2
  103. package/dist/date/applyTimezone.cjs +17 -0
  104. package/dist/date/applyTimezone.d.ts +4 -0
  105. package/dist/date/applyTimezone.mjs +15 -0
  106. package/dist/date/constants.cjs +13 -3
  107. package/dist/date/constants.d.ts +6 -1
  108. package/dist/date/constants.mjs +9 -4
  109. package/dist/date/create.cjs +62 -29
  110. package/dist/date/create.d.ts +10 -6
  111. package/dist/date/create.mjs +60 -27
  112. package/dist/date/createOrThrow.cjs +4 -1
  113. package/dist/date/createOrThrow.d.ts +5 -4
  114. package/dist/date/createOrThrow.mjs +4 -1
  115. package/dist/date/createTheDate.cjs +10 -0
  116. package/dist/date/createTheDate.d.ts +2 -0
  117. package/dist/date/createTheDate.mjs +8 -0
  118. package/dist/date/createTheTime.cjs +10 -0
  119. package/dist/date/createTheTime.d.ts +2 -0
  120. package/dist/date/createTheTime.mjs +8 -0
  121. package/dist/date/createTime.cjs +61 -0
  122. package/dist/date/createTime.d.ts +44 -0
  123. package/dist/date/createTime.mjs +59 -0
  124. package/dist/date/createTimeOrThrow.cjs +28 -0
  125. package/dist/date/createTimeOrThrow.d.ts +10 -0
  126. package/dist/date/createTimeOrThrow.mjs +25 -0
  127. package/dist/date/format.cjs +37 -0
  128. package/dist/date/format.d.ts +4 -0
  129. package/dist/date/format.mjs +35 -0
  130. package/dist/date/getTimezoneOffset.cjs +27 -0
  131. package/dist/date/getTimezoneOffset.d.ts +4 -0
  132. package/dist/date/getTimezoneOffset.mjs +25 -0
  133. package/dist/date/getters/getDayOfYear.cjs +2 -1
  134. package/dist/date/getters/getDayOfYear.mjs +2 -1
  135. package/dist/date/index.cjs +51 -2
  136. package/dist/date/index.d.ts +15 -0
  137. package/dist/date/index.mjs +25 -3
  138. package/dist/date/is.cjs +9 -1
  139. package/dist/date/is.mjs +9 -1
  140. package/dist/date/isSafeTimeValue.cjs +15 -0
  141. package/dist/date/isSafeTimeValue.d.ts +1 -0
  142. package/dist/date/isSafeTimeValue.mjs +13 -0
  143. package/dist/date/isSafeTimestamp.cjs +3 -3
  144. package/dist/date/isSafeTimestamp.d.ts +1 -1
  145. package/dist/date/isSafeTimestamp.mjs +3 -3
  146. package/dist/date/isTime.cjs +17 -0
  147. package/dist/date/isTime.d.ts +2 -0
  148. package/dist/date/isTime.mjs +15 -0
  149. package/dist/date/makeSafeTimeValue.cjs +20 -0
  150. package/dist/date/makeSafeTimeValue.d.ts +1 -0
  151. package/dist/date/makeSafeTimeValue.mjs +18 -0
  152. package/dist/date/makeSafeTimestamp.cjs +20 -0
  153. package/dist/date/makeSafeTimestamp.d.ts +1 -0
  154. package/dist/date/makeSafeTimestamp.mjs +18 -0
  155. package/dist/date/maxTime.cjs +10 -0
  156. package/dist/date/maxTime.d.ts +3 -0
  157. package/dist/date/maxTime.mjs +8 -0
  158. package/dist/date/minTime.cjs +10 -0
  159. package/dist/date/minTime.d.ts +3 -0
  160. package/dist/date/minTime.mjs +8 -0
  161. package/dist/date/operators/addDays.cjs +2 -3
  162. package/dist/date/operators/addDays.mjs +2 -3
  163. package/dist/date/operators/addHours.cjs +2 -3
  164. package/dist/date/operators/addHours.mjs +2 -3
  165. package/dist/date/operators/addMilliseconds.cjs +2 -3
  166. package/dist/date/operators/addMilliseconds.mjs +2 -3
  167. package/dist/date/operators/addMinutes.cjs +2 -3
  168. package/dist/date/operators/addMinutes.mjs +2 -3
  169. package/dist/date/operators/addMonths.cjs +2 -3
  170. package/dist/date/operators/addMonths.mjs +2 -3
  171. package/dist/date/operators/addSeconds.cjs +2 -3
  172. package/dist/date/operators/addSeconds.mjs +2 -3
  173. package/dist/date/operators/addTime.cjs +21 -0
  174. package/dist/date/operators/addTime.d.ts +5 -0
  175. package/dist/date/operators/addTime.mjs +19 -0
  176. package/dist/date/operators/addWeeks.cjs +2 -3
  177. package/dist/date/operators/addWeeks.mjs +2 -3
  178. package/dist/date/operators/addYears.cjs +2 -3
  179. package/dist/date/operators/addYears.mjs +2 -3
  180. package/dist/date/operators/betweenThanTime.cjs +17 -0
  181. package/dist/date/operators/betweenThanTime.d.ts +3 -0
  182. package/dist/date/operators/betweenThanTime.mjs +15 -0
  183. package/dist/date/operators/betweenTime.cjs +17 -0
  184. package/dist/date/operators/betweenTime.d.ts +3 -0
  185. package/dist/date/operators/betweenTime.mjs +15 -0
  186. package/dist/date/operators/greaterThanTime.cjs +16 -0
  187. package/dist/date/operators/greaterThanTime.d.ts +3 -0
  188. package/dist/date/operators/greaterThanTime.mjs +14 -0
  189. package/dist/date/operators/greaterTime.cjs +16 -0
  190. package/dist/date/operators/greaterTime.d.ts +3 -0
  191. package/dist/date/operators/greaterTime.mjs +14 -0
  192. package/dist/date/operators/index.d.ts +8 -0
  193. package/dist/date/operators/lessThanTime.cjs +16 -0
  194. package/dist/date/operators/lessThanTime.d.ts +3 -0
  195. package/dist/date/operators/lessThanTime.mjs +14 -0
  196. package/dist/date/operators/lessTime.cjs +16 -0
  197. package/dist/date/operators/lessTime.d.ts +3 -0
  198. package/dist/date/operators/lessTime.mjs +14 -0
  199. package/dist/date/operators/subtractDays.cjs +2 -3
  200. package/dist/date/operators/subtractDays.mjs +2 -3
  201. package/dist/date/operators/subtractHours.cjs +2 -3
  202. package/dist/date/operators/subtractHours.mjs +2 -3
  203. package/dist/date/operators/subtractMilliseconds.cjs +2 -3
  204. package/dist/date/operators/subtractMilliseconds.mjs +2 -3
  205. package/dist/date/operators/subtractMinutes.cjs +2 -3
  206. package/dist/date/operators/subtractMinutes.mjs +2 -3
  207. package/dist/date/operators/subtractMonths.cjs +2 -3
  208. package/dist/date/operators/subtractMonths.mjs +2 -3
  209. package/dist/date/operators/subtractSeconds.cjs +2 -3
  210. package/dist/date/operators/subtractSeconds.mjs +2 -3
  211. package/dist/date/operators/subtractTime.cjs +21 -0
  212. package/dist/date/operators/subtractTime.d.ts +5 -0
  213. package/dist/date/operators/subtractTime.mjs +19 -0
  214. package/dist/date/operators/subtractWeeks.cjs +2 -3
  215. package/dist/date/operators/subtractWeeks.mjs +2 -3
  216. package/dist/date/operators/subtractYears.cjs +2 -3
  217. package/dist/date/operators/subtractYears.mjs +2 -3
  218. package/dist/date/sortTimes.cjs +20 -0
  219. package/dist/date/sortTimes.d.ts +4 -0
  220. package/dist/date/sortTimes.mjs +18 -0
  221. package/dist/date/{types/timezone.cjs → timezone.cjs} +1 -1
  222. package/dist/date/{types/timezone.d.ts → timezone.d.ts} +1 -1
  223. package/dist/date/{types/timezone.mjs → timezone.mjs} +1 -1
  224. package/dist/date/toTimeValue.cjs +14 -0
  225. package/dist/date/toTimeValue.d.ts +2 -0
  226. package/dist/date/toTimeValue.mjs +12 -0
  227. package/dist/date/toTimestamp.cjs +6 -21
  228. package/dist/date/toTimestamp.d.ts +0 -8
  229. package/dist/date/toTimestamp.mjs +8 -22
  230. package/dist/date/types/index.d.ts +3 -1
  231. package/dist/date/types/isSafeYear.d.ts +5 -52
  232. package/dist/date/types/spoolingDate.d.ts +12 -0
  233. package/dist/date/types/spoolingTime.d.ts +9 -0
  234. package/dist/date/types/theTime.d.ts +1 -0
  235. package/dist/index.cjs +4 -0
  236. package/dist/index.mjs +2 -0
  237. package/dist/metadata.json +401 -5
  238. package/dist/number/types/index.d.ts +2 -0
  239. package/dist/number/types/isGreater.d.ts +50 -0
  240. package/dist/number/types/isLess.d.ts +3 -0
  241. package/dist/object/hasKeys.d.ts +2 -2
  242. package/dist/object/types/forbiddenKey.d.ts +6 -0
  243. package/dist/object/types/index.d.ts +1 -0
  244. package/dist/string/types/index.d.ts +1 -0
  245. package/dist/string/types/replace.d.ts +1 -0
  246. package/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ import { dataParserCheckerInit } from '../../../base.mjs';
2
+ import { SymbolDataParserErrorIssue } from '../../../error.mjs';
3
+ import { createDataParserKind } from '../../../kind.mjs';
4
+ import { greaterTime } from '../../../../date/operators/greaterTime.mjs';
5
+
6
+ const checkerTimeMinKind = createDataParserKind("checker-time-min");
7
+ function checkerTimeMin(min, definition = {}) {
8
+ return dataParserCheckerInit(checkerTimeMinKind, {
9
+ definition: {
10
+ ...definition,
11
+ min,
12
+ },
13
+ }, (value, self) => greaterTime(value, self.definition.min) ? value : SymbolDataParserErrorIssue);
14
+ }
15
+
16
+ export { checkerTimeMin, checkerTimeMinKind };
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ var base = require('../../base.cjs');
4
+ var error = require('../../error.cjs');
5
+ var kind = require('../../kind.cjs');
6
+ var isSafeTimeValue = require('../../../date/isSafeTimeValue.cjs');
7
+ var createTheTime = require('../../../date/createTheTime.cjs');
8
+ var constants = require('../../../date/constants.cjs');
9
+ var createTime = require('../../../date/createTime.cjs');
10
+ var is = require('../../../either/left/is.cjs');
11
+ var unwrap = require('../../../common/unwrap.cjs');
12
+ var isTime = require('../../../date/isTime.cjs');
13
+ var override = require('../../../common/override.cjs');
14
+
15
+ const timeKind = kind.createDataParserKind("time");
16
+ function time(definition) {
17
+ const self = base.dataParserInit(timeKind, {
18
+ errorMessage: definition?.errorMessage,
19
+ checkers: definition?.checkers ?? [],
20
+ coerce: definition?.coerce ?? false,
21
+ }, (data, _error, self) => {
22
+ if (self.definition.coerce) {
23
+ if (typeof data === "number") {
24
+ if (!isSafeTimeValue.isSafeTimeValue(data)) {
25
+ return error.SymbolDataParserErrorIssue;
26
+ }
27
+ return createTheTime.createTheTime(data);
28
+ }
29
+ if (typeof data === "string" && constants.isoTimeRegex.test(data)) {
30
+ const result = createTime.createTime({ value: data });
31
+ if (is.isLeft(result)) {
32
+ return error.SymbolDataParserErrorIssue;
33
+ }
34
+ return unwrap.unwrap(result);
35
+ }
36
+ }
37
+ if (typeof data === "string" && isTime.isTime(data)) {
38
+ return data;
39
+ }
40
+ return error.SymbolDataParserErrorIssue;
41
+ });
42
+ return time.overrideHandler.apply(self);
43
+ }
44
+ time.overrideHandler = override.createOverride("@duplojs/utils/data-parser/time");
45
+
46
+ exports.time = time;
47
+ exports.timeKind = timeKind;
@@ -0,0 +1,33 @@
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer } from "../../../common";
2
+ import { type DataParserDefinition, type DataParser, type DataParserChecker } from "../../base";
3
+ import { type AddCheckersToDefinition, type MergeDefinition } from "../../../dataParser/types";
4
+ import { type CheckerRefineImplementation } from "../refine";
5
+ import { type GetPropsWithValueExtends } from "../../../object";
6
+ import { type TheTime } from "../../../date";
7
+ import { type DataParserCheckerTimeMax, type DataParserCheckerTimeMin } from "./checkers";
8
+ export * from "./checkers";
9
+ export interface DataParserTimeCheckerCustom {
10
+ }
11
+ export type DataParserTimeCheckers = (DataParserTimeCheckerCustom[GetPropsWithValueExtends<DataParserTimeCheckerCustom, DataParserChecker>] | CheckerRefineImplementation<TheTime> | DataParserCheckerTimeMax | DataParserCheckerTimeMin);
12
+ export interface DataParserDefinitionTime extends DataParserDefinition<DataParserTimeCheckers> {
13
+ readonly coerce: boolean;
14
+ }
15
+ export declare const timeKind: import("../../../common").KindHandler<import("../../../common").KindDefinition<"@DuplojsUtilsDataParser/time", unknown>>;
16
+ type _DataParserTime<GenericDefinition extends DataParserDefinitionTime> = (DataParser<GenericDefinition, TheTime, TheTime> & Kind<typeof timeKind.definition>);
17
+ export interface DataParserTime<GenericDefinition extends DataParserDefinitionTime = DataParserDefinitionTime> extends _DataParserTime<GenericDefinition> {
18
+ addChecker<GenericChecker extends readonly [
19
+ DataParserTimeCheckers,
20
+ ...DataParserTimeCheckers[]
21
+ ]>(...args: FixDeepFunctionInfer<readonly [
22
+ DataParserTimeCheckers,
23
+ ...DataParserTimeCheckers[]
24
+ ], GenericChecker>): DataParserTime<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
25
+ /**
26
+ * @deprecated Method with unreliable typing.
27
+ */
28
+ construct<const GenericDefinition extends DataParserDefinitionTime>(definition: GenericDefinition): DataParserTime<MergeDefinition<DataParserDefinitionTime, GenericDefinition>>;
29
+ }
30
+ export declare function time<const GenericDefinition extends Partial<DataParserDefinitionTime> = never>(definition?: GenericDefinition): DataParserTime<MergeDefinition<DataParserDefinitionTime, NeverCoalescing<GenericDefinition, {}>>>;
31
+ export declare namespace time {
32
+ var overrideHandler: import("../../../common").OverrideHandler<DataParserTime<DataParserDefinitionTime>>;
33
+ }
@@ -0,0 +1,44 @@
1
+ import { dataParserInit } from '../../base.mjs';
2
+ import { SymbolDataParserErrorIssue } from '../../error.mjs';
3
+ import { createDataParserKind } from '../../kind.mjs';
4
+ import { isSafeTimeValue } from '../../../date/isSafeTimeValue.mjs';
5
+ import { createTheTime } from '../../../date/createTheTime.mjs';
6
+ import { isoTimeRegex } from '../../../date/constants.mjs';
7
+ import { createTime } from '../../../date/createTime.mjs';
8
+ import { isLeft } from '../../../either/left/is.mjs';
9
+ import { unwrap } from '../../../common/unwrap.mjs';
10
+ import { isTime } from '../../../date/isTime.mjs';
11
+ import { createOverride } from '../../../common/override.mjs';
12
+
13
+ const timeKind = createDataParserKind("time");
14
+ function time(definition) {
15
+ const self = dataParserInit(timeKind, {
16
+ errorMessage: definition?.errorMessage,
17
+ checkers: definition?.checkers ?? [],
18
+ coerce: definition?.coerce ?? false,
19
+ }, (data, _error, self) => {
20
+ if (self.definition.coerce) {
21
+ if (typeof data === "number") {
22
+ if (!isSafeTimeValue(data)) {
23
+ return SymbolDataParserErrorIssue;
24
+ }
25
+ return createTheTime(data);
26
+ }
27
+ if (typeof data === "string" && isoTimeRegex.test(data)) {
28
+ const result = createTime({ value: data });
29
+ if (isLeft(result)) {
30
+ return SymbolDataParserErrorIssue;
31
+ }
32
+ return unwrap(result);
33
+ }
34
+ }
35
+ if (typeof data === "string" && isTime(data)) {
36
+ return data;
37
+ }
38
+ return SymbolDataParserErrorIssue;
39
+ });
40
+ return time.overrideHandler.apply(self);
41
+ }
42
+ time.overrideHandler = createOverride("@duplojs/utils/data-parser/time");
43
+
44
+ export { time, timeKind };
@@ -4,4 +4,4 @@ import type * as AllDataParser from "../parsers";
4
4
  export interface CheckerCustom {
5
5
  base: DataParserChecker;
6
6
  }
7
- export type DataParserCheckers = (CheckerCustom[GetPropsWithValueExtends<CheckerCustom, DataParserChecker>] | AllDataParser.DataParserCheckerUrl | AllDataParser.DataParserCheckerArrayMax | AllDataParser.DataParserCheckerArrayMin | AllDataParser.DataParserCheckerBigIntMax | AllDataParser.DataParserCheckerBigIntMin | AllDataParser.DataParserCheckerNumberMax | AllDataParser.DataParserCheckerNumberMin | AllDataParser.DataParserCheckerInt | AllDataParser.DataParserCheckerEmail | AllDataParser.DataParserCheckerRefine);
7
+ export type DataParserCheckers = (CheckerCustom[GetPropsWithValueExtends<CheckerCustom, DataParserChecker>] | AllDataParser.DataParserCheckerUrl | AllDataParser.DataParserCheckerArrayMax | AllDataParser.DataParserCheckerArrayMin | AllDataParser.DataParserCheckerBigIntMax | AllDataParser.DataParserCheckerBigIntMin | AllDataParser.DataParserCheckerNumberMax | AllDataParser.DataParserCheckerNumberMin | AllDataParser.DataParserCheckerInt | AllDataParser.DataParserCheckerEmail | AllDataParser.DataParserCheckerRefine | AllDataParser.DataParserCheckerTimeMin | AllDataParser.DataParserCheckerTimeMax);
@@ -6,8 +6,8 @@ import { type DataParserExtended } from "../baseExtended";
6
6
  export interface DataParserCustom {
7
7
  base: DataParser;
8
8
  }
9
- export type DataParsers = (DataParserCustom[GetPropsWithValueExtends<DataParserCustom, DataParser>] | AllDataParser.DataParserString | AllDataParser.DataParserObject | AllDataParser.DataParserNumber | AllDataParser.DataParserLiteral | AllDataParser.DataParserUnion | AllDataParser.DataParserArray | AllDataParser.DataParserBigInt | AllDataParser.DataParserTuple | AllDataParser.DataParserTransform | AllDataParser.DataParserBoolean | AllDataParser.DataParserDate | AllDataParser.DataParserNil | AllDataParser.DataParserEmpty | AllDataParser.DataParserTemplateLiteral | AllDataParser.DataParserPipe | AllDataParser.DataParserNullable | AllDataParser.DataParserOptional | AllDataParser.DataParserLazy | AllDataParser.DataParserUnknown | AllDataParser.DataParserRecord | AllDataParser.DataParserRecover);
9
+ export type DataParsers = (DataParserCustom[GetPropsWithValueExtends<DataParserCustom, DataParser>] | AllDataParser.DataParserString | AllDataParser.DataParserObject | AllDataParser.DataParserNumber | AllDataParser.DataParserLiteral | AllDataParser.DataParserUnion | AllDataParser.DataParserArray | AllDataParser.DataParserBigInt | AllDataParser.DataParserTuple | AllDataParser.DataParserTransform | AllDataParser.DataParserBoolean | AllDataParser.DataParserDate | AllDataParser.DataParserTime | AllDataParser.DataParserNil | AllDataParser.DataParserEmpty | AllDataParser.DataParserTemplateLiteral | AllDataParser.DataParserPipe | AllDataParser.DataParserNullable | AllDataParser.DataParserOptional | AllDataParser.DataParserLazy | AllDataParser.DataParserUnknown | AllDataParser.DataParserRecord | AllDataParser.DataParserRecover);
10
10
  export interface DataParserExtendedCustom {
11
11
  base: DataParserExtended;
12
12
  }
13
- export type DataParsersExtended = (DataParserExtendedCustom[GetPropsWithValueExtends<DataParserExtendedCustom, DataParserExtended>] | AllDataParserExtended.DataParserStringExtended | AllDataParserExtended.DataParserObjectExtended | AllDataParserExtended.DataParserNumberExtended | AllDataParserExtended.DataParserLiteralExtended | AllDataParserExtended.DataParserUnionExtended | AllDataParserExtended.DataParserArrayExtended | AllDataParserExtended.DataParserBigIntExtended | AllDataParserExtended.DataParserTupleExtended | AllDataParserExtended.DataParserTransformExtended | AllDataParserExtended.DataParserBooleanExtended | AllDataParserExtended.DataParserDateExtended | AllDataParserExtended.DataParserNilExtended | AllDataParserExtended.DataParserEmptyExtended | AllDataParserExtended.DataParserTemplateLiteralExtended | AllDataParserExtended.DataParserPipeExtended | AllDataParserExtended.DataParserNullableExtended | AllDataParserExtended.DataParserOptionalExtended | AllDataParserExtended.DataParserLazyExtended | AllDataParserExtended.DataParserUnknownExtended | AllDataParserExtended.DataParserRecordExtended | AllDataParserExtended.DataParserRecoverExtended);
13
+ export type DataParsersExtended = (DataParserExtendedCustom[GetPropsWithValueExtends<DataParserExtendedCustom, DataParserExtended>] | AllDataParserExtended.DataParserStringExtended | AllDataParserExtended.DataParserObjectExtended | AllDataParserExtended.DataParserNumberExtended | AllDataParserExtended.DataParserLiteralExtended | AllDataParserExtended.DataParserUnionExtended | AllDataParserExtended.DataParserArrayExtended | AllDataParserExtended.DataParserBigIntExtended | AllDataParserExtended.DataParserTupleExtended | AllDataParserExtended.DataParserTransformExtended | AllDataParserExtended.DataParserBooleanExtended | AllDataParserExtended.DataParserDateExtended | AllDataParserExtended.DataParserTimeExtended | AllDataParserExtended.DataParserNilExtended | AllDataParserExtended.DataParserEmptyExtended | AllDataParserExtended.DataParserTemplateLiteralExtended | AllDataParserExtended.DataParserPipeExtended | AllDataParserExtended.DataParserNullableExtended | AllDataParserExtended.DataParserOptionalExtended | AllDataParserExtended.DataParserLazyExtended | AllDataParserExtended.DataParserUnknownExtended | AllDataParserExtended.DataParserRecordExtended | AllDataParserExtended.DataParserRecoverExtended);
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var createOrThrow = require('./createOrThrow.cjs');
4
+ var getTimezoneOffset = require('./getTimezoneOffset.cjs');
5
+ var toTimestamp = require('./toTimestamp.cjs');
6
+
7
+ function applyTimezone(...args) {
8
+ if (args.length === 1) {
9
+ const [timeZone] = args;
10
+ return (theDate) => applyTimezone(theDate, timeZone);
11
+ }
12
+ const [theDate, timeZone] = args;
13
+ const timestamp = toTimestamp.toTimestamp(theDate);
14
+ return createOrThrow.createOrThrow(timestamp - getTimezoneOffset.getTimezoneOffset(theDate, timeZone));
15
+ }
16
+
17
+ exports.applyTimezone = applyTimezone;
@@ -0,0 +1,4 @@
1
+ import { type Timezone } from "./timezone";
2
+ import { type TheDate } from "./types";
3
+ export declare function applyTimezone(timeZone: Timezone): (theDate: TheDate) => TheDate;
4
+ export declare function applyTimezone(theDate: TheDate, timeZone: Timezone): TheDate;
@@ -0,0 +1,15 @@
1
+ import { createOrThrow } from './createOrThrow.mjs';
2
+ import { getTimezoneOffset } from './getTimezoneOffset.mjs';
3
+ import { toTimestamp } from './toTimestamp.mjs';
4
+
5
+ function applyTimezone(...args) {
6
+ if (args.length === 1) {
7
+ const [timeZone] = args;
8
+ return (theDate) => applyTimezone(theDate, timeZone);
9
+ }
10
+ const [theDate, timeZone] = args;
11
+ const timestamp = toTimestamp(theDate);
12
+ return createOrThrow(timestamp - getTimezoneOffset(theDate, timeZone));
13
+ }
14
+
15
+ export { applyTimezone };
@@ -1,29 +1,39 @@
1
1
  'use strict';
2
2
 
3
3
  const minTimestamp = -864e13;
4
- const maxTimestamp = 8640000000000000;
4
+ const maxTimestamp = 8_640_000_000_000_000;
5
+ const minTimeValue = -9007199254740991;
6
+ const maxTimeValue = 9_007_199_254_740_991;
5
7
  const millisecondInOneWeek = 604800000;
6
8
  const millisecondsInOneDay = 86400000;
7
9
  const millisecondInOneHour = 3600000;
8
10
  const millisecondInOneMinute = 60000;
11
+ const millisecondsInOneSecond = 1000;
9
12
  const daysInOneWeek = 7;
10
13
  const monthsInOneYear = 12;
11
14
  const minutesInOneHour = 60;
12
15
  const secondsInOneMinute = 60;
13
- const millisecondsInOneSecond = 1000;
14
16
  const hoursInOneDay = 24;
15
- const theDateRegex = /^date(?<value>\d{1,16})(?<sign>[+-])$/;
17
+ const theDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
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>[+-])$/;
20
+ const isoTimeRegex = /^(?<sign>[+-])?(?<hour>[0-9]{2}):(?<minute>[0-9]{2})(?::(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
16
21
 
17
22
  exports.daysInOneWeek = daysInOneWeek;
18
23
  exports.hoursInOneDay = hoursInOneDay;
24
+ exports.isoDateRegex = isoDateRegex;
25
+ exports.isoTimeRegex = isoTimeRegex;
26
+ exports.maxTimeValue = maxTimeValue;
19
27
  exports.maxTimestamp = maxTimestamp;
20
28
  exports.millisecondInOneHour = millisecondInOneHour;
21
29
  exports.millisecondInOneMinute = millisecondInOneMinute;
22
30
  exports.millisecondInOneWeek = millisecondInOneWeek;
23
31
  exports.millisecondsInOneDay = millisecondsInOneDay;
24
32
  exports.millisecondsInOneSecond = millisecondsInOneSecond;
33
+ exports.minTimeValue = minTimeValue;
25
34
  exports.minTimestamp = minTimestamp;
26
35
  exports.minutesInOneHour = minutesInOneHour;
27
36
  exports.monthsInOneYear = monthsInOneYear;
28
37
  exports.secondsInOneMinute = secondsInOneMinute;
29
38
  exports.theDateRegex = theDateRegex;
39
+ exports.theTimeRegex = theTimeRegex;
@@ -1,13 +1,18 @@
1
1
  export declare const minTimestamp = -8640000000000000;
2
2
  export declare const maxTimestamp = 8640000000000000;
3
+ export declare const minTimeValue = -9007199254740991;
4
+ export declare const maxTimeValue = 9007199254740991;
3
5
  export declare const millisecondInOneWeek = 604800000;
4
6
  export declare const millisecondsInOneDay = 86400000;
5
7
  export declare const millisecondInOneHour = 3600000;
6
8
  export declare const millisecondInOneMinute = 60000;
9
+ export declare const millisecondsInOneSecond = 1000;
7
10
  export declare const daysInOneWeek = 7;
8
11
  export declare const monthsInOneYear = 12;
9
12
  export declare const minutesInOneHour = 60;
10
13
  export declare const secondsInOneMinute = 60;
11
- export declare const millisecondsInOneSecond = 1000;
12
14
  export declare const hoursInOneDay = 24;
13
15
  export declare const theDateRegex: RegExp;
16
+ export declare const isoDateRegex: RegExp;
17
+ export declare const theTimeRegex: RegExp;
18
+ export declare const isoTimeRegex: RegExp;
@@ -1,15 +1,20 @@
1
1
  const minTimestamp = -864e13;
2
- const maxTimestamp = 8640000000000000;
2
+ const maxTimestamp = 8_640_000_000_000_000;
3
+ const minTimeValue = -9007199254740991;
4
+ const maxTimeValue = 9_007_199_254_740_991;
3
5
  const millisecondInOneWeek = 604800000;
4
6
  const millisecondsInOneDay = 86400000;
5
7
  const millisecondInOneHour = 3600000;
6
8
  const millisecondInOneMinute = 60000;
9
+ const millisecondsInOneSecond = 1000;
7
10
  const daysInOneWeek = 7;
8
11
  const monthsInOneYear = 12;
9
12
  const minutesInOneHour = 60;
10
13
  const secondsInOneMinute = 60;
11
- const millisecondsInOneSecond = 1000;
12
14
  const hoursInOneDay = 24;
13
- const theDateRegex = /^date(?<value>\d{1,16})(?<sign>[+-])$/;
15
+ const theDateRegex = /^date-?(?<value>\d{1,16})(?<sign>[+-])$/;
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>[+-])$/;
18
+ const isoTimeRegex = /^(?<sign>[+-])?(?<hour>[0-9]{2}):(?<minute>[0-9]{2})(?::(?<second>[0-9]{2})(?:\.(?<millisecond>[0-9]{3}))?Z?)?$/;
14
19
 
15
- export { daysInOneWeek, hoursInOneDay, maxTimestamp, millisecondInOneHour, millisecondInOneMinute, millisecondInOneWeek, millisecondsInOneDay, millisecondsInOneSecond, minTimestamp, minutesInOneHour, monthsInOneYear, secondsInOneMinute, theDateRegex };
20
+ export { daysInOneWeek, hoursInOneDay, isoDateRegex, isoTimeRegex, maxTimeValue, maxTimestamp, millisecondInOneHour, millisecondInOneMinute, millisecondInOneWeek, millisecondsInOneDay, millisecondsInOneSecond, minTimeValue, minTimestamp, minutesInOneHour, monthsInOneYear, secondsInOneMinute, theDateRegex, theTimeRegex };
@@ -2,35 +2,27 @@
2
2
 
3
3
  var constants = require('./constants.cjs');
4
4
  var isSafeTimestamp = require('./isSafeTimestamp.cjs');
5
- var create$1 = require('../either/left/create.cjs');
6
- var create$2 = require('../either/right/create.cjs');
5
+ var applyTimezone = require('./applyTimezone.cjs');
6
+ var is = require('./is.cjs');
7
+ var toNative = require('./toNative.cjs');
8
+ var createTheDate = require('./createTheDate.cjs');
9
+ var create$1 = require('../either/right/create.cjs');
10
+ var is$1 = require('../either/left/is.cjs');
11
+ var create$2 = require('../either/left/create.cjs');
12
+ var unwrap = require('../common/unwrap.cjs');
13
+ var when = require('../either/left/when.cjs');
14
+ var safeCallback = require('../either/safeCallback.cjs');
7
15
 
8
16
  const safeDateRegex = /^(?<year>-?[0-9]+)-(?<monthWithDay>[0-1][0-9]-[0-3][0-9])$/;
9
17
  function create(input, params) {
10
- if (input instanceof Date) {
11
- const timestamp = input.getTime();
12
- if (!isSafeTimestamp.isSafeTimestamp(timestamp)) {
13
- return create$1.left("date-created-error", null);
14
- }
15
- const isNegative = timestamp < 0;
16
- return create$2.right("date-created", `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`);
17
- }
18
18
  if (typeof input === "number") {
19
- if (!isSafeTimestamp.isSafeTimestamp(input)) {
20
- return create$1.left("date-created-error", null);
21
- }
22
- const isNegative = input < 0;
23
- return create$2.right("date-created", `date${Math.abs(input)}${isNegative ? "-" : "+"}`);
19
+ return createFromTimestamp(input);
24
20
  }
25
- const theDateMatch = typeof input === "string" && input.match(constants.theDateRegex);
26
- if (theDateMatch) {
27
- const { value, sign } = theDateMatch.groups;
28
- const magnitude = Number(value);
29
- const timestamp = sign === "-" ? -magnitude : magnitude;
30
- if (!isSafeTimestamp.isSafeTimestamp(timestamp)) {
31
- return create$1.left("date-created-error", null);
32
- }
33
- return create$2.right("date-created", input);
21
+ if (input instanceof Date) {
22
+ return createFromTimestamp(input.getTime());
23
+ }
24
+ if (typeof input === "string" && is.is(input)) {
25
+ return create$1.right("date-created", input);
34
26
  }
35
27
  const safeDateMatch = typeof input === "string" && input.match(safeDateRegex);
36
28
  if (safeDateMatch) {
@@ -38,13 +30,54 @@ function create(input, params) {
38
30
  const date = new Date(`0000-${monthWithDay}T${params?.hour ?? "00"}:${params?.minute ?? "00"}:${params?.second ?? "00"}.${params?.millisecond ?? "000"}Z`);
39
31
  date.setUTCFullYear(Number(year));
40
32
  const timestamp = date.getTime();
41
- if (!isSafeTimestamp.isSafeTimestamp(timestamp)) {
42
- return "date0+";
33
+ return `date${Math.abs(timestamp)}${timestamp < 0 ? "-" : "+"}`;
34
+ }
35
+ if (typeof input === "object") {
36
+ let inputValueResult = undefined;
37
+ if (input.value instanceof Date) {
38
+ inputValueResult = createFromTimestamp(input.value.getTime());
43
39
  }
44
- const isNegative = timestamp < 0;
45
- return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
40
+ else if (typeof input.value === "number") {
41
+ inputValueResult = createFromTimestamp(input.value);
42
+ }
43
+ else if (is.is(input.value)) {
44
+ inputValueResult = create$1.right("date-created", input.value);
45
+ }
46
+ else {
47
+ const isoDateMatch = input.value.match(constants.isoDateRegex);
48
+ if (isoDateMatch) {
49
+ const { year, month, date, hour, minute, second, millisecond } = isoDateMatch.groups;
50
+ inputValueResult = createFromTimestamp(Date.UTC(Number(year), Number(month) - 1, Number(date), Number(hour), Number(minute), Number(second), Number(millisecond)));
51
+ }
52
+ }
53
+ if (!inputValueResult || is$1.isLeft(inputValueResult)) {
54
+ return inputValueResult || create$2.left("date-created-error", null);
55
+ }
56
+ const date = toNative.toNative(unwrap.unwrap(inputValueResult));
57
+ void (input.year && date.setUTCFullYear(input.year));
58
+ void (input.month && date.setMonth(input.month));
59
+ void (input.day && date.setDate(input.day));
60
+ void (input.hour && date.setHours(input.hour));
61
+ void (input.minute && date.setMinutes(input.minute));
62
+ void (input.second && date.setSeconds(input.second));
63
+ void (input.millisecond && date.setMilliseconds(input.millisecond));
64
+ const result = createFromTimestamp(date.getTime());
65
+ if (is$1.isLeft(result)) {
66
+ return result;
67
+ }
68
+ const timezone = input.timezone;
69
+ if (!timezone) {
70
+ return result;
71
+ }
72
+ return when.whenIsLeft(safeCallback.safeCallback(() => create$1.right("date-created", applyTimezone.applyTimezone(unwrap.unwrap(result), timezone))), () => create$2.left("date-created-error", null));
73
+ }
74
+ return create$2.left("date-created-error", null);
75
+ }
76
+ function createFromTimestamp(input) {
77
+ if (!isSafeTimestamp.isSafeTimestamp(input)) {
78
+ return create$2.left("date-created-error", null);
46
79
  }
47
- return create$1.left("date-created-error", null);
80
+ return create$1.right("date-created", createTheDate.createTheDate(input));
48
81
  }
49
82
 
50
83
  exports.create = create;
@@ -1,17 +1,20 @@
1
- import type { Hour, IsLeapYear, IsSafeYear, Millisecond, Minute, Second, TheDate } from "./types";
2
- import { type EitherLeft, type EitherRight } from "../either";
3
- import { type MonthWithDay } from "./types/month";
1
+ import type { Hour, IsLeapYear, IsSafeYear, Millisecond, Minute, Second, TheDate, MonthWithDay, SpoolingDate } from "./types";
2
+ import * as DEither from "../either";
4
3
  import type * as DString from "../string";
5
- export type MayBe = EitherRight<"date-created", TheDate> | EitherLeft<"date-created-error", null>;
4
+ import { type And, type IsEqual, type Not, type IsExtends } from "../common";
5
+ export type MayBe = DEither.EitherRight<"date-created", TheDate> | DEither.EitherLeft<"date-created-error", null>;
6
6
  type SafeDate = `${number}-${MonthWithDay}`;
7
7
  declare const SymbolForbiddenDate: unique symbol;
8
- type ForbiddenDate<GenericDate extends SafeDate> = ((DString.Includes<GenericDate, "."> extends true ? {
8
+ type ForbiddenDate<GenericDate extends string> = And<[
9
+ IsExtends<GenericDate, SafeDate>,
10
+ Not<IsEqual<GenericDate, SafeDate>>
11
+ ]> extends true ? ((DString.Includes<GenericDate, "."> extends true ? {
9
12
  [SymbolForbiddenDate]: "Year can't be includes a float number.";
10
13
  } : GenericDate) & (GenericDate extends `${infer InferredYear extends number}-02-29` ? IsLeapYear<InferredYear> extends true ? GenericDate : {
11
14
  [SymbolForbiddenDate]: "Is not a leap year.";
12
15
  } : GenericDate) & (GenericDate extends `${infer InferredYear extends number}-${MonthWithDay}` ? IsSafeYear<InferredYear> extends true ? GenericDate : {
13
16
  [SymbolForbiddenDate]: "Support that the years between -271820 and 275759.";
14
- } : GenericDate));
17
+ } : GenericDate)) : GenericDate;
15
18
  interface SafeDateParams {
16
19
  hour?: Hour;
17
20
  minute?: Minute;
@@ -19,5 +22,6 @@ interface SafeDateParams {
19
22
  millisecond?: Millisecond;
20
23
  }
21
24
  export declare function create<GenericInput extends TheDate | Date | number>(input: GenericInput): MayBe;
25
+ export declare function create<GenericInput extends SpoolingDate>(input: GenericInput): MayBe;
22
26
  export declare function create<GenericInput extends SafeDate>(input: GenericInput & ForbiddenDate<GenericInput>, params?: SafeDateParams): TheDate;
23
27
  export {};
@@ -1,33 +1,25 @@
1
- import { theDateRegex } from './constants.mjs';
1
+ import { isoDateRegex } from './constants.mjs';
2
2
  import { isSafeTimestamp } from './isSafeTimestamp.mjs';
3
- import { left } from '../either/left/create.mjs';
3
+ import { applyTimezone } from './applyTimezone.mjs';
4
+ import { is } from './is.mjs';
5
+ import { toNative } from './toNative.mjs';
6
+ import { createTheDate } from './createTheDate.mjs';
4
7
  import { right } from '../either/right/create.mjs';
8
+ import { isLeft } from '../either/left/is.mjs';
9
+ import { left } from '../either/left/create.mjs';
10
+ import { unwrap } from '../common/unwrap.mjs';
11
+ import { whenIsLeft } from '../either/left/when.mjs';
12
+ import { safeCallback } from '../either/safeCallback.mjs';
5
13
 
6
14
  const safeDateRegex = /^(?<year>-?[0-9]+)-(?<monthWithDay>[0-1][0-9]-[0-3][0-9])$/;
7
15
  function create(input, params) {
8
- if (input instanceof Date) {
9
- const timestamp = input.getTime();
10
- if (!isSafeTimestamp(timestamp)) {
11
- return left("date-created-error", null);
12
- }
13
- const isNegative = timestamp < 0;
14
- return right("date-created", `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`);
15
- }
16
16
  if (typeof input === "number") {
17
- if (!isSafeTimestamp(input)) {
18
- return left("date-created-error", null);
19
- }
20
- const isNegative = input < 0;
21
- return right("date-created", `date${Math.abs(input)}${isNegative ? "-" : "+"}`);
17
+ return createFromTimestamp(input);
22
18
  }
23
- const theDateMatch = typeof input === "string" && input.match(theDateRegex);
24
- if (theDateMatch) {
25
- const { value, sign } = theDateMatch.groups;
26
- const magnitude = Number(value);
27
- const timestamp = sign === "-" ? -magnitude : magnitude;
28
- if (!isSafeTimestamp(timestamp)) {
29
- return left("date-created-error", null);
30
- }
19
+ if (input instanceof Date) {
20
+ return createFromTimestamp(input.getTime());
21
+ }
22
+ if (typeof input === "string" && is(input)) {
31
23
  return right("date-created", input);
32
24
  }
33
25
  const safeDateMatch = typeof input === "string" && input.match(safeDateRegex);
@@ -36,13 +28,54 @@ function create(input, params) {
36
28
  const date = new Date(`0000-${monthWithDay}T${params?.hour ?? "00"}:${params?.minute ?? "00"}:${params?.second ?? "00"}.${params?.millisecond ?? "000"}Z`);
37
29
  date.setUTCFullYear(Number(year));
38
30
  const timestamp = date.getTime();
39
- if (!isSafeTimestamp(timestamp)) {
40
- return "date0+";
31
+ return `date${Math.abs(timestamp)}${timestamp < 0 ? "-" : "+"}`;
32
+ }
33
+ if (typeof input === "object") {
34
+ let inputValueResult = undefined;
35
+ if (input.value instanceof Date) {
36
+ inputValueResult = createFromTimestamp(input.value.getTime());
37
+ }
38
+ else if (typeof input.value === "number") {
39
+ inputValueResult = createFromTimestamp(input.value);
40
+ }
41
+ else if (is(input.value)) {
42
+ inputValueResult = right("date-created", input.value);
43
+ }
44
+ else {
45
+ const isoDateMatch = input.value.match(isoDateRegex);
46
+ if (isoDateMatch) {
47
+ const { year, month, date, hour, minute, second, millisecond } = isoDateMatch.groups;
48
+ inputValueResult = createFromTimestamp(Date.UTC(Number(year), Number(month) - 1, Number(date), Number(hour), Number(minute), Number(second), Number(millisecond)));
49
+ }
50
+ }
51
+ if (!inputValueResult || isLeft(inputValueResult)) {
52
+ return inputValueResult || left("date-created-error", null);
41
53
  }
42
- const isNegative = timestamp < 0;
43
- return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
54
+ const date = toNative(unwrap(inputValueResult));
55
+ void (input.year && date.setUTCFullYear(input.year));
56
+ void (input.month && date.setMonth(input.month));
57
+ void (input.day && date.setDate(input.day));
58
+ void (input.hour && date.setHours(input.hour));
59
+ void (input.minute && date.setMinutes(input.minute));
60
+ void (input.second && date.setSeconds(input.second));
61
+ void (input.millisecond && date.setMilliseconds(input.millisecond));
62
+ const result = createFromTimestamp(date.getTime());
63
+ if (isLeft(result)) {
64
+ return result;
65
+ }
66
+ const timezone = input.timezone;
67
+ if (!timezone) {
68
+ return result;
69
+ }
70
+ return whenIsLeft(safeCallback(() => right("date-created", applyTimezone(unwrap(result), timezone))), () => left("date-created-error", null));
44
71
  }
45
72
  return left("date-created-error", null);
46
73
  }
74
+ function createFromTimestamp(input) {
75
+ if (!isSafeTimestamp(input)) {
76
+ return left("date-created-error", null);
77
+ }
78
+ return right("date-created", createTheDate(input));
79
+ }
47
80
 
48
81
  export { create };
@@ -9,7 +9,10 @@ var errorKindNamespace = require('../common/errorKindNamespace.cjs');
9
9
  class CreateTheDateError extends kind.kindHeritage("create-the-date-error", errorKindNamespace.createErrorKind("create-the-date-error"), Error) {
10
10
  input;
11
11
  constructor(input) {
12
- super({}, [`Invalid input: ${input.toString()}`]);
12
+ const value = typeof input === "object" && "value" in input
13
+ ? JSON.stringify(input)
14
+ : input.toString();
15
+ super({}, [`Invalid date input: ${value}`]);
13
16
  this.input = input;
14
17
  }
15
18
  }
@@ -1,10 +1,11 @@
1
- import type { TheDate } from "./types";
1
+ import type { TheDate, SpoolingDate } from "./types";
2
2
  declare const CreateTheDateError_base: new (params: {
3
3
  "@DuplojsUtilsError/create-the-date-error"?: unknown;
4
4
  }, parentParams: [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
5
  export declare class CreateTheDateError extends CreateTheDateError_base {
6
- input: TheDate | Date | number;
7
- constructor(input: TheDate | Date | number);
6
+ input: string | Date | number | SpoolingDate;
7
+ constructor(input: string | Date | number | SpoolingDate);
8
8
  }
9
- export declare function createOrThrow<GenericInput extends TheDate | Date | number>(input: GenericInput): `date${number}-` | `date${number}+`;
9
+ export declare function createOrThrow<GenericInput extends TheDate | Date | number>(input: GenericInput): TheDate;
10
+ export declare function createOrThrow<GenericInput extends SpoolingDate>(input: GenericInput): TheDate;
10
11
  export {};
@@ -7,7 +7,10 @@ import { createErrorKind } from '../common/errorKindNamespace.mjs';
7
7
  class CreateTheDateError extends kindHeritage("create-the-date-error", createErrorKind("create-the-date-error"), Error) {
8
8
  input;
9
9
  constructor(input) {
10
- super({}, [`Invalid input: ${input.toString()}`]);
10
+ const value = typeof input === "object" && "value" in input
11
+ ? JSON.stringify(input)
12
+ : input.toString();
13
+ super({}, [`Invalid date input: ${value}`]);
11
14
  this.input = input;
12
15
  }
13
16
  }
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var makeSafeTimestamp = require('./makeSafeTimestamp.cjs');
4
+
5
+ function createTheDate(timestamp) {
6
+ const safeTimestamp = makeSafeTimestamp.makeSafeTimestamp(timestamp);
7
+ return `date${Math.abs(safeTimestamp)}${safeTimestamp < 0 ? "-" : "+"}`;
8
+ }
9
+
10
+ exports.createTheDate = createTheDate;
@@ -0,0 +1,2 @@
1
+ import { type TheDate } from "./types";
2
+ export declare function createTheDate(timestamp: number): TheDate;
@@ -0,0 +1,8 @@
1
+ import { makeSafeTimestamp } from './makeSafeTimestamp.mjs';
2
+
3
+ function createTheDate(timestamp) {
4
+ const safeTimestamp = makeSafeTimestamp(timestamp);
5
+ return `date${Math.abs(safeTimestamp)}${safeTimestamp < 0 ? "-" : "+"}`;
6
+ }
7
+
8
+ export { createTheDate };
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var makeSafeTimeValue = require('./makeSafeTimeValue.cjs');
4
+
5
+ function createTheTime(timestamp) {
6
+ const safeTimestamp = makeSafeTimeValue.makeSafeTimeValue(timestamp);
7
+ return `time${Math.abs(safeTimestamp)}${safeTimestamp < 0 ? "-" : "+"}`;
8
+ }
9
+
10
+ exports.createTheTime = createTheTime;