@duplojs/utils 1.4.46 → 1.4.48

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 (66) hide show
  1. package/dist/common/index.d.ts +2 -1
  2. package/dist/common/mimeType.cjs +1081 -0
  3. package/dist/common/mimeType.d.ts +22 -0
  4. package/dist/common/mimeType.mjs +1079 -0
  5. package/dist/common/path.cjs +114 -0
  6. package/dist/common/path.d.ts +145 -0
  7. package/dist/common/path.mjs +114 -0
  8. package/dist/dataParser/base.cjs +4 -0
  9. package/dist/dataParser/base.d.ts +34 -0
  10. package/dist/dataParser/base.mjs +4 -0
  11. package/dist/dataParser/extended/date.d.ts +3 -3
  12. package/dist/dataParser/extended/time.d.ts +3 -3
  13. package/dist/dataParser/identifier.d.ts +16 -4
  14. package/dist/dataParser/parsers/array/index.cjs +1 -0
  15. package/dist/dataParser/parsers/array/index.mjs +1 -0
  16. package/dist/dataParser/parsers/date.cjs +7 -7
  17. package/dist/dataParser/parsers/date.d.ts +4 -4
  18. package/dist/dataParser/parsers/date.mjs +7 -7
  19. package/dist/dataParser/parsers/lazy.cjs +1 -0
  20. package/dist/dataParser/parsers/lazy.mjs +1 -0
  21. package/dist/dataParser/parsers/nullable.cjs +1 -0
  22. package/dist/dataParser/parsers/nullable.mjs +1 -0
  23. package/dist/dataParser/parsers/object/index.cjs +2 -0
  24. package/dist/dataParser/parsers/object/index.mjs +2 -0
  25. package/dist/dataParser/parsers/optional.cjs +1 -0
  26. package/dist/dataParser/parsers/optional.mjs +1 -0
  27. package/dist/dataParser/parsers/pipe.cjs +1 -0
  28. package/dist/dataParser/parsers/pipe.mjs +1 -0
  29. package/dist/dataParser/parsers/record/index.cjs +1 -0
  30. package/dist/dataParser/parsers/record/index.mjs +1 -0
  31. package/dist/dataParser/parsers/recover.cjs +1 -0
  32. package/dist/dataParser/parsers/recover.mjs +1 -0
  33. package/dist/dataParser/parsers/time/index.cjs +8 -8
  34. package/dist/dataParser/parsers/time/index.d.ts +4 -4
  35. package/dist/dataParser/parsers/time/index.mjs +8 -8
  36. package/dist/dataParser/parsers/transform.cjs +1 -0
  37. package/dist/dataParser/parsers/transform.mjs +1 -0
  38. package/dist/dataParser/parsers/tuple.cjs +2 -0
  39. package/dist/dataParser/parsers/tuple.mjs +2 -0
  40. package/dist/dataParser/parsers/union.cjs +2 -0
  41. package/dist/dataParser/parsers/union.mjs +2 -0
  42. package/dist/index.cjs +7 -2
  43. package/dist/index.mjs +2 -2
  44. package/dist/metadata.json +18 -68
  45. package/package.json +1 -1
  46. package/dist/common/path/getBaseName.cjs +0 -25
  47. package/dist/common/path/getBaseName.d.ts +0 -26
  48. package/dist/common/path/getBaseName.mjs +0 -23
  49. package/dist/common/path/getExtensionName.cjs +0 -17
  50. package/dist/common/path/getExtensionName.d.ts +0 -21
  51. package/dist/common/path/getExtensionName.mjs +0 -15
  52. package/dist/common/path/getParentFolderPath.cjs +0 -21
  53. package/dist/common/path/getParentFolderPath.d.ts +0 -23
  54. package/dist/common/path/getParentFolderPath.mjs +0 -19
  55. package/dist/common/path/index.cjs +0 -19
  56. package/dist/common/path/index.d.ts +0 -27
  57. package/dist/common/path/index.mjs +0 -10
  58. package/dist/common/path/isAbsolute.cjs +0 -15
  59. package/dist/common/path/isAbsolute.d.ts +0 -21
  60. package/dist/common/path/isAbsolute.mjs +0 -13
  61. package/dist/common/path/resolveFrom.cjs +0 -18
  62. package/dist/common/path/resolveFrom.d.ts +0 -27
  63. package/dist/common/path/resolveFrom.mjs +0 -16
  64. package/dist/common/path/resolveRelative.cjs +0 -51
  65. package/dist/common/path/resolveRelative.d.ts +0 -23
  66. package/dist/common/path/resolveRelative.mjs +0 -49
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var success = require('../either/right/success.cjs');
4
+ var fail = require('../either/left/fail.cjs');
5
+
6
+ exports.Path = void 0;
7
+ (function (Path) {
8
+ Path.baseNameRegex = /\/?([^/]+)$/;
9
+ Path.folderNameRegex = /([^]+)\/[^/]+\/?$/;
10
+ Path.extensionNameRegex = /\.([^./]+)$/;
11
+ Path.isRelativeRegex = /(^|\/)\.\.(?=\/|$)/;
12
+ Path.segmentTrailingRegex = /\/$/;
13
+ Path.segmentRelativeRegex = /^(.\/)/;
14
+ /**
15
+ * {@include common/path/getBaseName/index.md}
16
+ */
17
+ function getBaseName(path, params) {
18
+ const match = Path.baseNameRegex.exec(path);
19
+ if (!match) {
20
+ return null;
21
+ }
22
+ if (params?.removeExtension) {
23
+ return match[1].replace(Path.extensionNameRegex, "");
24
+ }
25
+ return match[1];
26
+ }
27
+ Path.getBaseName = getBaseName;
28
+ /**
29
+ * {@include common/path/getExtensionName/index.md}
30
+ */
31
+ function getExtensionName(path) {
32
+ const match = Path.extensionNameRegex.exec(path);
33
+ if (match) {
34
+ return match[1];
35
+ }
36
+ return null;
37
+ }
38
+ Path.getExtensionName = getExtensionName;
39
+ /**
40
+ * {@include common/path/getParentFolderPath/index.md}
41
+ */
42
+ function getParentFolderPath(path) {
43
+ const match = path.match(Path.folderNameRegex);
44
+ if (!match) {
45
+ return null;
46
+ }
47
+ return match[1];
48
+ }
49
+ Path.getParentFolderPath = getParentFolderPath;
50
+ /**
51
+ * {@include common/path/isAbsolute/index.md}
52
+ */
53
+ function isAbsolute(path) {
54
+ return path.startsWith("/")
55
+ && !Path.isRelativeRegex.test(path);
56
+ }
57
+ Path.isAbsolute = isAbsolute;
58
+ /**
59
+ * {@include common/path/resolveFrom/index.md}
60
+ */
61
+ function resolveFrom(origin, segments) {
62
+ const result = resolveRelative([origin, ...segments]);
63
+ return isAbsolute(result)
64
+ ? success.success(result)
65
+ : fail.fail();
66
+ }
67
+ Path.resolveFrom = resolveFrom;
68
+ /**
69
+ * {@include common/path/resolveRelative/index.md}
70
+ */
71
+ function resolveRelative(segments) {
72
+ let clearedPath = "";
73
+ for (const segment of segments) {
74
+ if (segment.length === 0) {
75
+ continue;
76
+ }
77
+ if (segment === "/") {
78
+ clearedPath = segment;
79
+ continue;
80
+ }
81
+ const formattedSegment = segment
82
+ .replace(Path.segmentTrailingRegex, "")
83
+ .replace(Path.segmentRelativeRegex, "");
84
+ if (formattedSegment.startsWith("/")) {
85
+ clearedPath = formattedSegment;
86
+ continue;
87
+ }
88
+ if (clearedPath === "/") {
89
+ clearedPath += formattedSegment;
90
+ }
91
+ else {
92
+ clearedPath += `/${formattedSegment}`;
93
+ }
94
+ }
95
+ const dotResult = [];
96
+ const result = [];
97
+ for (const element of clearedPath.split("/")) {
98
+ if (element === "..") {
99
+ const deletedElement = result.pop();
100
+ if (!deletedElement) {
101
+ dotResult.push(element);
102
+ }
103
+ }
104
+ else {
105
+ result.push(element);
106
+ }
107
+ }
108
+ if (dotResult.length === 0) {
109
+ return result.join("/");
110
+ }
111
+ return `${dotResult.join("/")}/${result.join("/")}`;
112
+ }
113
+ Path.resolveRelative = resolveRelative;
114
+ })(exports.Path || (exports.Path = {}));
@@ -0,0 +1,145 @@
1
+ import * as DEither from "../either";
2
+ import type { AnyTuple } from "./types";
3
+ export declare namespace Path {
4
+ const baseNameRegex: RegExp;
5
+ const folderNameRegex: RegExp;
6
+ const extensionNameRegex: RegExp;
7
+ const isRelativeRegex: RegExp;
8
+ const segmentTrailingRegex: RegExp;
9
+ const segmentRelativeRegex: RegExp;
10
+ interface GetBaseNameParams {
11
+ removeExtension?: boolean;
12
+ }
13
+ /**
14
+ * Returns the last segment of a path (after the final slash), with optional extension removal.
15
+ *
16
+ * **Supported call styles:**
17
+ * - Classic: `getBaseName(path, params?)` -> returns the base name or null
18
+ *
19
+ * The path must contain at least one `/` to match. It returns null when no segment is found.
20
+ * When `removeExtension` is true, the file extension is removed from the base name.
21
+ *
22
+ * ```ts
23
+ * const defaultResult = Path.getBaseName("/foo/bar.txt");
24
+ * // defaultResult: "bar.txt"
25
+ * const withoutExtResult = Path.getBaseName("/foo/bar.txt", { removeExtension: true });
26
+ * // withoutExtResult: "bar"
27
+ * const nullResult = Path.getBaseName("bar.txt");
28
+ * // nullResult: null
29
+ * ```
30
+ *
31
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/getBaseName
32
+ *
33
+ */
34
+ function getBaseName<GenericPath extends string>(path: GenericPath, params?: GetBaseNameParams): string | null;
35
+ /**
36
+ * Returns the last extension of a path, without the leading dot.
37
+ *
38
+ * **Supported call styles:**
39
+ * - Classic: `getExtensionName(path)` -> returns the extension or null
40
+ *
41
+ * It returns null when no extension is found, when the path ends with a dot, or when the path is `..`.
42
+ *
43
+ * ```ts
44
+ * const txtResult = Path.getExtensionName("/foo/bar.txt");
45
+ * // txtResult: "txt"
46
+ * const tarResult = Path.getExtensionName("archive.tar.gz");
47
+ * // tarResult: "gz"
48
+ * const dotResult = Path.getExtensionName("file.");
49
+ * // dotResult: null
50
+ * ```
51
+ *
52
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/getExtensionName
53
+ *
54
+ */
55
+ function getExtensionName<GenericPath extends string>(path: GenericPath): string | null;
56
+ /**
57
+ * Returns the parent folder path of a POSIX path.
58
+ *
59
+ * **Supported call styles:**
60
+ * - Classic: `getParentFolderPath(path)` -> returns the parent folder or null
61
+ *
62
+ * The path must contain at least one `/` to match. It removes a trailing slash and drops the last segment.
63
+ *
64
+ * ```ts
65
+ * const result = Path.getParentFolderPath("/foo/bar/baz");
66
+ * // result: "/foo/bar"
67
+ * const trailingResult = Path.getParentFolderPath("/foo/bar/");
68
+ * // trailingResult: "/foo"
69
+ * const relativeResult = Path.getParentFolderPath("foo");
70
+ * // relativeResult: null
71
+ * ```
72
+ *
73
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/getParentFolderPath
74
+ *
75
+ */
76
+ function getParentFolderPath<GenericPath extends string>(path: GenericPath): string | null;
77
+ /**
78
+ * Checks whether a path is absolute (POSIX).
79
+ *
80
+ * **Supported call styles:**
81
+ * - Classic: `isAbsolute(path)` -> returns a boolean
82
+ *
83
+ * It returns true when the path starts with `/` and does not contain `..` segments.
84
+ *
85
+ * ```ts
86
+ * const absolutePath = Path.isAbsolute("/var/log");
87
+ * // absolutePath: true
88
+ * const parentTraversal = Path.isAbsolute("/var/../log");
89
+ * // parentTraversal: false
90
+ * const relativePath = Path.isAbsolute("var/log");
91
+ * // relativePath: false
92
+ * ```
93
+ *
94
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/isAbsolute
95
+ *
96
+ */
97
+ function isAbsolute<GenericPath extends string>(path: GenericPath): boolean;
98
+ /**
99
+ * Resolves a list of path segments from an origin and returns an Either.
100
+ *
101
+ * **Supported call styles:**
102
+ * - Classic: `resolveFrom(origin, segments)` -> returns an Either
103
+ *
104
+ * Segments are resolved in order using `resolveRelative`.
105
+ * The result is an `Either` that is `success` only when the resolved path is absolute; otherwise it returns `fail`.
106
+ *
107
+ * ```ts
108
+ * const absoluteResult = Path.resolveFrom("/root", ["alpha", "beta"]);
109
+ * // absoluteResult: DEither.success<"/root/alpha/beta">
110
+ * const result = unwrap(absoluteResult);
111
+ * // result: "/root/alpha/beta"
112
+ *
113
+ * const overrideResult = Path.resolveFrom("gamma", ["alpha", "/root", "beta"]);
114
+ * // overrideResult: DEither.success<"/root/beta">
115
+ * const relativeResult = Path.resolveFrom("alpha", ["..", ".."]);
116
+ * // relativeResult: DEither.fail
117
+ * ```
118
+ *
119
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/resolveFrom
120
+ *
121
+ */
122
+ function resolveFrom<GenericSegment extends string>(origin: string, segments: AnyTuple<GenericSegment>): DEither.Fail | DEither.Success<string>;
123
+ /**
124
+ * Resolves path segments into a single POSIX-like path.
125
+ *
126
+ * **Supported call styles:**
127
+ * - Classic: `resolveRelative(segments)` -> returns the resolved path
128
+ *
129
+ * Empty segments are ignored, trailing slashes and leading `./` are removed, and absolute segments reset the base.
130
+ * `..` segments remove previous segments and may remain leading when resolving above root.
131
+ *
132
+ * ```ts
133
+ * const basicResult = Path.resolveRelative(["alpha", "beta"]);
134
+ * // basicResult: "/alpha/beta"
135
+ * const overrideResult = Path.resolveRelative(["alpha", "/root", "beta"]);
136
+ * // overrideResult: "/root/beta"
137
+ * const parentResult = Path.resolveRelative(["alpha", "..", "..", "beta"]);
138
+ * // parentResult: "../beta"
139
+ * ```
140
+ *
141
+ * @see https://utils.duplojs.dev/en/v1/api/common/path/resolveRelative
142
+ *
143
+ */
144
+ function resolveRelative<GenericSegment extends string>(segments: AnyTuple<GenericSegment>): string;
145
+ }
@@ -0,0 +1,114 @@
1
+ import { success } from '../either/right/success.mjs';
2
+ import { fail } from '../either/left/fail.mjs';
3
+
4
+ var Path;
5
+ (function (Path) {
6
+ Path.baseNameRegex = /\/?([^/]+)$/;
7
+ Path.folderNameRegex = /([^]+)\/[^/]+\/?$/;
8
+ Path.extensionNameRegex = /\.([^./]+)$/;
9
+ Path.isRelativeRegex = /(^|\/)\.\.(?=\/|$)/;
10
+ Path.segmentTrailingRegex = /\/$/;
11
+ Path.segmentRelativeRegex = /^(.\/)/;
12
+ /**
13
+ * {@include common/path/getBaseName/index.md}
14
+ */
15
+ function getBaseName(path, params) {
16
+ const match = Path.baseNameRegex.exec(path);
17
+ if (!match) {
18
+ return null;
19
+ }
20
+ if (params?.removeExtension) {
21
+ return match[1].replace(Path.extensionNameRegex, "");
22
+ }
23
+ return match[1];
24
+ }
25
+ Path.getBaseName = getBaseName;
26
+ /**
27
+ * {@include common/path/getExtensionName/index.md}
28
+ */
29
+ function getExtensionName(path) {
30
+ const match = Path.extensionNameRegex.exec(path);
31
+ if (match) {
32
+ return match[1];
33
+ }
34
+ return null;
35
+ }
36
+ Path.getExtensionName = getExtensionName;
37
+ /**
38
+ * {@include common/path/getParentFolderPath/index.md}
39
+ */
40
+ function getParentFolderPath(path) {
41
+ const match = path.match(Path.folderNameRegex);
42
+ if (!match) {
43
+ return null;
44
+ }
45
+ return match[1];
46
+ }
47
+ Path.getParentFolderPath = getParentFolderPath;
48
+ /**
49
+ * {@include common/path/isAbsolute/index.md}
50
+ */
51
+ function isAbsolute(path) {
52
+ return path.startsWith("/")
53
+ && !Path.isRelativeRegex.test(path);
54
+ }
55
+ Path.isAbsolute = isAbsolute;
56
+ /**
57
+ * {@include common/path/resolveFrom/index.md}
58
+ */
59
+ function resolveFrom(origin, segments) {
60
+ const result = resolveRelative([origin, ...segments]);
61
+ return isAbsolute(result)
62
+ ? success(result)
63
+ : fail();
64
+ }
65
+ Path.resolveFrom = resolveFrom;
66
+ /**
67
+ * {@include common/path/resolveRelative/index.md}
68
+ */
69
+ function resolveRelative(segments) {
70
+ let clearedPath = "";
71
+ for (const segment of segments) {
72
+ if (segment.length === 0) {
73
+ continue;
74
+ }
75
+ if (segment === "/") {
76
+ clearedPath = segment;
77
+ continue;
78
+ }
79
+ const formattedSegment = segment
80
+ .replace(Path.segmentTrailingRegex, "")
81
+ .replace(Path.segmentRelativeRegex, "");
82
+ if (formattedSegment.startsWith("/")) {
83
+ clearedPath = formattedSegment;
84
+ continue;
85
+ }
86
+ if (clearedPath === "/") {
87
+ clearedPath += formattedSegment;
88
+ }
89
+ else {
90
+ clearedPath += `/${formattedSegment}`;
91
+ }
92
+ }
93
+ const dotResult = [];
94
+ const result = [];
95
+ for (const element of clearedPath.split("/")) {
96
+ if (element === "..") {
97
+ const deletedElement = result.pop();
98
+ if (!deletedElement) {
99
+ dotResult.push(element);
100
+ }
101
+ }
102
+ else {
103
+ result.push(element);
104
+ }
105
+ }
106
+ if (dotResult.length === 0) {
107
+ return result.join("/");
108
+ }
109
+ return `${dotResult.join("/")}/${result.join("/")}`;
110
+ }
111
+ Path.resolveRelative = resolveRelative;
112
+ })(Path || (Path = {}));
113
+
114
+ export { Path };
@@ -42,6 +42,7 @@ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
42
42
  : {
43
43
  sync: exec,
44
44
  async: exec,
45
+ isAsynchronous: () => false,
45
46
  };
46
47
  function middleExec(data, error$1) {
47
48
  let result = formattedExec.sync(data, error$1, self);
@@ -163,6 +164,9 @@ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
163
164
  }
164
165
  return result;
165
166
  },
167
+ isAsynchronous() {
168
+ return formattedExec.isAsynchronous(self);
169
+ },
166
170
  }, (value) => dataParserKind.setTo(value, null), kind.setTo, (value) => dataParserInit.overrideHandler.apply(value), (value) => specificOverrideHandler.apply(value));
167
171
  return self;
168
172
  }
@@ -204,10 +204,44 @@ export interface DataParser<GenericDefinition extends DataParserDefinition = Dat
204
204
  *
205
205
  */
206
206
  asyncParseOrThrow(data: unknown): Promise<GenericOutput>;
207
+ /**
208
+ * The isAsynchronous() method tells whether a data parser requires async execution.
209
+ *
210
+ * **Supported call styles:**
211
+ * - Method: `dataParser.isAsynchronous()` -> returns a boolean
212
+ *
213
+ * It checks the parser definition (and nested parsers when relevant) and does not run any parsing.
214
+ *
215
+ * ```ts
216
+ * const syncParser = DDataParser.string();
217
+ * syncParser.isAsynchronous(); // false
218
+ *
219
+ * const asyncTransform = DDataParser.transform(
220
+ * DDataParser.number(),
221
+ * async(value) => {
222
+ * const result = await Promise.resolve(value);
223
+ *
224
+ * return result;
225
+ * },
226
+ * );
227
+ * asyncTransform.isAsynchronous(); // true
228
+ *
229
+ * const asyncArray = DDataParser.array(asyncTransform);
230
+ * asyncArray.isAsynchronous(); // true
231
+ *
232
+ * ```
233
+ *
234
+ * @see https://utils.duplojs.dev/en/v1/api/dataParser/isAsynchronous
235
+ *
236
+ * @namespace DP
237
+ *
238
+ */
239
+ isAsynchronous(): boolean;
207
240
  }
208
241
  interface DataParserInitExecParams<GenericDataParser extends DataParser> {
209
242
  sync(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): (GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue);
210
243
  async(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): Promise<GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue>;
244
+ isAsynchronous(self: GenericDataParser): boolean;
211
245
  }
212
246
  declare const DataParserThrowError_base: new (params: {
213
247
  "@DuplojsUtilsError/dataParserThrowError"?: unknown;
@@ -40,6 +40,7 @@ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
40
40
  : {
41
41
  sync: exec,
42
42
  async: exec,
43
+ isAsynchronous: () => false,
43
44
  };
44
45
  function middleExec(data, error) {
45
46
  let result = formattedExec.sync(data, error, self);
@@ -161,6 +162,9 @@ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
161
162
  }
162
163
  return result;
163
164
  },
165
+ isAsynchronous() {
166
+ return formattedExec.isAsynchronous(self);
167
+ },
164
168
  }, (value) => dataParserKind.setTo(value, null), kind.setTo, (value) => dataParserInit.overrideHandler.apply(value), (value) => specificOverrideHandler.apply(value));
165
169
  return self;
166
170
  }
@@ -16,16 +16,16 @@ export interface DataParserDateExtended<GenericDefinition extends dataParsers.Da
16
16
  refine(theFunction: (input: Output<this>) => boolean, definition?: Partial<Omit<dataParsers.DataParserCheckerDefinitionRefine, "theFunction">>): DataParserDateExtended<AddCheckersToDefinition<GenericDefinition, readonly [dataParsers.CheckerRefineImplementation<Output<this>>]>>;
17
17
  }
18
18
  /**
19
- * Creates an extended data parser for TheDate values.
19
+ * Creates an extended data parser for TheDate values or native Date instances.
20
20
  *
21
21
  * **Supported call styles:**
22
22
  * - Method: `DPE.date(definition?)` -> returns a date parser
23
23
  *
24
- * Validates TheDate values and can coerce from string or timestamp when enabled.
24
+ * Validates TheDate values (or Date instances) and can coerce from ISO strings or timestamps when enabled.
25
25
  *
26
26
  * ```ts
27
27
  * const parser = DPE.date();
28
- * const result = parser.parse("date0+");
28
+ * const result = parser.parse(new Date("2024-01-01T00:00:00.000Z"));
29
29
  * if (E.isRight(result)) {
30
30
  * const value = unwrap(result);
31
31
  * // value: TheDate
@@ -74,16 +74,16 @@ export interface DataParserTimeExtended<GenericDefinition extends dataParsers.Da
74
74
  max(max: TheTime, definition?: Partial<Omit<dataParsers.DataParserCheckerDefinitionTimeMax, "max">>): DataParserTimeExtended<AddCheckersToDefinition<GenericDefinition, readonly [dataParsers.DataParserCheckerTimeMax]>>;
75
75
  }
76
76
  /**
77
- * Creates an extended data parser for TheTime values.
77
+ * Creates an extended data parser for TheTime values or safe millisecond numbers.
78
78
  *
79
79
  * **Supported call styles:**
80
80
  * - Method: `DPE.time(definition?)` -> returns a time parser
81
81
  *
82
- * Validates TheTime values and exposes time-specific methods like min and max.
82
+ * Validates TheTime values (or safe millisecond numbers) and exposes time-specific methods like min and max.
83
83
  *
84
84
  * ```ts
85
85
  * const parser = DPE.time().min("time0+").max("time100+");
86
- * const result = parser.parse("time10+");
86
+ * const result = parser.parse(10);
87
87
  * if (E.isRight(result)) {
88
88
  * const value = unwrap(result);
89
89
  * // value: TheTime
@@ -42,10 +42,10 @@ export declare const identifier: {
42
42
  input: boolean;
43
43
  output: boolean;
44
44
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
45
- input: `date${number}-` | `date${number}+`;
45
+ input: `date${number}-` | `date${number}+` | Date;
46
46
  output: `date${number}-` | `date${number}+`;
47
47
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
48
- input: `time${number}-` | `time${number}+`;
48
+ input: number | `time${number}-` | `time${number}+`;
49
49
  output: `time${number}-` | `time${number}+`;
50
50
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
51
51
  input: null;
@@ -59,6 +59,12 @@ export declare const identifier: {
59
59
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
60
60
  input: unknown[];
61
61
  output: unknown[];
62
+ }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
63
+ input: `date${number}-` | `date${number}+`;
64
+ output: `date${number}-` | `date${number}+`;
65
+ }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
66
+ input: `time${number}-` | `time${number}+`;
67
+ output: `time${number}-` | `time${number}+`;
62
68
  }>>, GenericInput extends unknown, GenericGroupedKind extends import("../common").UnionToIntersection<GenericKindHandler extends import("../common").KindHandler<import("../common").KindDefinition<string, unknown>> ? import("../common").Kind<GenericKindHandler["definition"], GenericKindHandler["definition"]["value"]> : never>>(kind: GenericKindHandler | GenericKindHandler[]): (input: GenericInput) => input is (import("../common").IsEqual<import("../common").IsEqual<false | (GenericInput extends any ? import("../common").IsEqual<GenericInput, DataParser<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>> : never), boolean>, true> extends true ? Extract<DataParser<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>, GenericGroupedKind> | Extract<import("./parsers").DataParserString<import("./parsers").DataParserDefinitionString>, GenericGroupedKind> | Extract<import("./parsers").DataParserObject<import("./parsers").DataParserDefinitionObject>, GenericGroupedKind> | Extract<import("./parsers").DataParserNumber<import("./parsers").DataParserDefinitionNumber>, GenericGroupedKind> | Extract<import("./parsers").DataParserLiteral<import("./parsers").DataParserDefinitionLiteral>, GenericGroupedKind> | Extract<import("./parsers").DataParserUnion<import("./parsers").DataParserDefinitionUnion>, GenericGroupedKind> | Extract<import("./parsers").DataParserArray<import("./parsers").DataParserDefinitionArray>, GenericGroupedKind> | Extract<import("./parsers").DataParserBigInt<import("./parsers").DataParserDefinitionBigInt>, GenericGroupedKind> | Extract<import("./parsers").DataParserTuple<import("./parsers").DataParserDefinitionTuple>, GenericGroupedKind> | Extract<import("./parsers").DataParserTransform<import("./parsers").DataParserDefinitionTransform>, GenericGroupedKind> | Extract<import("./parsers").DataParserBoolean<import("./parsers").DataParserDefinitionBoolean>, GenericGroupedKind> | Extract<import("./parsers").DataParserDate<import("./parsers").DataParserDefinitionDate>, GenericGroupedKind> | Extract<import("./parsers").DataParserTime<import("./parsers").DataParserDefinitionTime>, GenericGroupedKind> | Extract<import("./parsers").DataParserNil<import("./parsers").DataParserDefinitionNil>, GenericGroupedKind> | Extract<import("./parsers").DataParserEmpty<import("./parsers").DataParserDefinitionEmpty>, GenericGroupedKind> | Extract<import("./parsers").DataParserTemplateLiteral<import("./parsers").DataParserDefinitionTemplateLiteral>, GenericGroupedKind> | Extract<import("./parsers").DataParserPipe<import("./parsers").DataParserDefinitionPipe>, GenericGroupedKind> | Extract<import("./parsers").DataParserNullable<import("./parsers").DataParserDefinitionNullable<unknown>>, GenericGroupedKind> | Extract<import("./parsers").DataParserOptional<import("./parsers").DataParserDefinitionOptional<unknown>>, GenericGroupedKind> | Extract<import("./parsers").DataParserLazy<import("./parsers").DataParserDefinitionLazy>, GenericGroupedKind> | Extract<import("./parsers").DataParserUnknown<import("./parsers").DataParserDefinitionUnknown>, GenericGroupedKind> | Extract<import("./parsers").DataParserRecord<import("./parsers").DataParserDefinitionRecord>, GenericGroupedKind> | Extract<import("./parsers").DataParserRecover<import("./parsers").DataParserDefinitionRecover>, GenericGroupedKind> | Extract<import("./baseExtended").DataParserExtended<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>, GenericGroupedKind> | Extract<import("./extended").DataParserStringExtended<import("./parsers").DataParserDefinitionString>, GenericGroupedKind> | Extract<import("./extended").DataParserObjectExtended<import("./parsers").DataParserDefinitionObject>, GenericGroupedKind> | Extract<import("./extended").DataParserNumberExtended<import("./parsers").DataParserDefinitionNumber>, GenericGroupedKind> | Extract<import("./extended").DataParserLiteralExtended<import("./parsers").DataParserDefinitionLiteral>, GenericGroupedKind> | Extract<import("./extended").DataParserUnionExtended<import("./parsers").DataParserDefinitionUnion>, GenericGroupedKind> | Extract<import("./extended").DataParserArrayExtended<import("./parsers").DataParserDefinitionArray>, GenericGroupedKind> | Extract<import("./extended").DataParserBigIntExtended<import("./parsers").DataParserDefinitionBigInt>, GenericGroupedKind> | Extract<import("./extended").DataParserTupleExtended<import("./parsers").DataParserDefinitionTuple>, GenericGroupedKind> | Extract<import("./extended").DataParserTransformExtended<import("./parsers").DataParserDefinitionTransform>, GenericGroupedKind> | Extract<import("./extended").DataParserBooleanExtended<import("./parsers").DataParserDefinitionBoolean>, GenericGroupedKind> | Extract<import("./extended").DataParserDateExtended<import("./parsers").DataParserDefinitionDate>, GenericGroupedKind> | Extract<import("./extended").DataParserTimeExtended<import("./parsers").DataParserDefinitionTime>, GenericGroupedKind> | Extract<import("./extended").DataParserNilExtended<import("./parsers").DataParserDefinitionNil>, GenericGroupedKind> | Extract<import("./extended").DataParserEmptyExtended<import("./parsers").DataParserDefinitionEmpty>, GenericGroupedKind> | Extract<import("./extended").DataParserTemplateLiteralExtended<import("./parsers").DataParserDefinitionTemplateLiteral>, GenericGroupedKind> | Extract<import("./extended").DataParserPipeExtended<import("./parsers").DataParserDefinitionPipe>, GenericGroupedKind> | Extract<import("./extended").DataParserNullableExtended<import("./parsers").DataParserDefinitionNullable<unknown>>, GenericGroupedKind> | Extract<import("./extended").DataParserOptionalExtended<import("./parsers").DataParserDefinitionOptional<unknown>>, GenericGroupedKind> | Extract<import("./extended").DataParserLazyExtended<import("./parsers").DataParserDefinitionLazy>, GenericGroupedKind> | Extract<import("./extended").DataParserUnknownExtended<import("./parsers").DataParserDefinitionUnknown>, GenericGroupedKind> | Extract<import("./extended").DataParserRecordExtended<import("./parsers").DataParserDefinitionRecord>, GenericGroupedKind> | Extract<import("./extended").DataParserRecoverExtended<import("./parsers").DataParserDefinitionRecover>, GenericGroupedKind> : never) | Extract<GenericInput, GenericGroupedKind>;
63
69
  <GenericKindHandler extends import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/bigint", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/extended", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/boolean", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/date", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/time", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/empty", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/nil", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/number", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/string", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/array", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/transform", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/union", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/pipe", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/nullable", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/optional", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/recover", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/lazy", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/literal", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/object", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/record", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/template-literal", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/tuple", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/unknown", unknown>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
64
70
  input: string;
@@ -94,10 +100,10 @@ export declare const identifier: {
94
100
  input: boolean;
95
101
  output: boolean;
96
102
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
97
- input: `date${number}-` | `date${number}+`;
103
+ input: `date${number}-` | `date${number}+` | Date;
98
104
  output: `date${number}-` | `date${number}+`;
99
105
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
100
- input: `time${number}-` | `time${number}+`;
106
+ input: number | `time${number}-` | `time${number}+`;
101
107
  output: `time${number}-` | `time${number}+`;
102
108
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
103
109
  input: null;
@@ -111,5 +117,11 @@ export declare const identifier: {
111
117
  }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
112
118
  input: unknown[];
113
119
  output: unknown[];
120
+ }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
121
+ input: `date${number}-` | `date${number}+`;
122
+ output: `date${number}-` | `date${number}+`;
123
+ }>> | import("../common").KindHandler<import("../common").KindDefinition<"@DuplojsUtilsDataParser/base", {
124
+ input: `time${number}-` | `time${number}+`;
125
+ output: `time${number}-` | `time${number}+`;
114
126
  }>>, GenericInput extends unknown, GenericGroupedKind extends import("../common").UnionToIntersection<GenericKindHandler extends import("../common").KindHandler<import("../common").KindDefinition<string, unknown>> ? import("../common").Kind<GenericKindHandler["definition"], GenericKindHandler["definition"]["value"]> : never>>(input: GenericInput, kind: GenericKindHandler | GenericKindHandler[]): input is (import("../common").IsEqual<import("../common").IsEqual<false | (GenericInput extends any ? import("../common").IsEqual<GenericInput, DataParser<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>> : never), boolean>, true> extends true ? Extract<DataParser<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>, GenericGroupedKind> | Extract<import("./parsers").DataParserString<import("./parsers").DataParserDefinitionString>, GenericGroupedKind> | Extract<import("./parsers").DataParserObject<import("./parsers").DataParserDefinitionObject>, GenericGroupedKind> | Extract<import("./parsers").DataParserNumber<import("./parsers").DataParserDefinitionNumber>, GenericGroupedKind> | Extract<import("./parsers").DataParserLiteral<import("./parsers").DataParserDefinitionLiteral>, GenericGroupedKind> | Extract<import("./parsers").DataParserUnion<import("./parsers").DataParserDefinitionUnion>, GenericGroupedKind> | Extract<import("./parsers").DataParserArray<import("./parsers").DataParserDefinitionArray>, GenericGroupedKind> | Extract<import("./parsers").DataParserBigInt<import("./parsers").DataParserDefinitionBigInt>, GenericGroupedKind> | Extract<import("./parsers").DataParserTuple<import("./parsers").DataParserDefinitionTuple>, GenericGroupedKind> | Extract<import("./parsers").DataParserTransform<import("./parsers").DataParserDefinitionTransform>, GenericGroupedKind> | Extract<import("./parsers").DataParserBoolean<import("./parsers").DataParserDefinitionBoolean>, GenericGroupedKind> | Extract<import("./parsers").DataParserDate<import("./parsers").DataParserDefinitionDate>, GenericGroupedKind> | Extract<import("./parsers").DataParserTime<import("./parsers").DataParserDefinitionTime>, GenericGroupedKind> | Extract<import("./parsers").DataParserNil<import("./parsers").DataParserDefinitionNil>, GenericGroupedKind> | Extract<import("./parsers").DataParserEmpty<import("./parsers").DataParserDefinitionEmpty>, GenericGroupedKind> | Extract<import("./parsers").DataParserTemplateLiteral<import("./parsers").DataParserDefinitionTemplateLiteral>, GenericGroupedKind> | Extract<import("./parsers").DataParserPipe<import("./parsers").DataParserDefinitionPipe>, GenericGroupedKind> | Extract<import("./parsers").DataParserNullable<import("./parsers").DataParserDefinitionNullable<unknown>>, GenericGroupedKind> | Extract<import("./parsers").DataParserOptional<import("./parsers").DataParserDefinitionOptional<unknown>>, GenericGroupedKind> | Extract<import("./parsers").DataParserLazy<import("./parsers").DataParserDefinitionLazy>, GenericGroupedKind> | Extract<import("./parsers").DataParserUnknown<import("./parsers").DataParserDefinitionUnknown>, GenericGroupedKind> | Extract<import("./parsers").DataParserRecord<import("./parsers").DataParserDefinitionRecord>, GenericGroupedKind> | Extract<import("./parsers").DataParserRecover<import("./parsers").DataParserDefinitionRecover>, GenericGroupedKind> | Extract<import("./baseExtended").DataParserExtended<import("./base").DataParserDefinition<import("./base").DataParserChecker<import("./base").DataParserCheckerDefinition, unknown>>, unknown, unknown>, GenericGroupedKind> | Extract<import("./extended").DataParserStringExtended<import("./parsers").DataParserDefinitionString>, GenericGroupedKind> | Extract<import("./extended").DataParserObjectExtended<import("./parsers").DataParserDefinitionObject>, GenericGroupedKind> | Extract<import("./extended").DataParserNumberExtended<import("./parsers").DataParserDefinitionNumber>, GenericGroupedKind> | Extract<import("./extended").DataParserLiteralExtended<import("./parsers").DataParserDefinitionLiteral>, GenericGroupedKind> | Extract<import("./extended").DataParserUnionExtended<import("./parsers").DataParserDefinitionUnion>, GenericGroupedKind> | Extract<import("./extended").DataParserArrayExtended<import("./parsers").DataParserDefinitionArray>, GenericGroupedKind> | Extract<import("./extended").DataParserBigIntExtended<import("./parsers").DataParserDefinitionBigInt>, GenericGroupedKind> | Extract<import("./extended").DataParserTupleExtended<import("./parsers").DataParserDefinitionTuple>, GenericGroupedKind> | Extract<import("./extended").DataParserTransformExtended<import("./parsers").DataParserDefinitionTransform>, GenericGroupedKind> | Extract<import("./extended").DataParserBooleanExtended<import("./parsers").DataParserDefinitionBoolean>, GenericGroupedKind> | Extract<import("./extended").DataParserDateExtended<import("./parsers").DataParserDefinitionDate>, GenericGroupedKind> | Extract<import("./extended").DataParserTimeExtended<import("./parsers").DataParserDefinitionTime>, GenericGroupedKind> | Extract<import("./extended").DataParserNilExtended<import("./parsers").DataParserDefinitionNil>, GenericGroupedKind> | Extract<import("./extended").DataParserEmptyExtended<import("./parsers").DataParserDefinitionEmpty>, GenericGroupedKind> | Extract<import("./extended").DataParserTemplateLiteralExtended<import("./parsers").DataParserDefinitionTemplateLiteral>, GenericGroupedKind> | Extract<import("./extended").DataParserPipeExtended<import("./parsers").DataParserDefinitionPipe>, GenericGroupedKind> | Extract<import("./extended").DataParserNullableExtended<import("./parsers").DataParserDefinitionNullable<unknown>>, GenericGroupedKind> | Extract<import("./extended").DataParserOptionalExtended<import("./parsers").DataParserDefinitionOptional<unknown>>, GenericGroupedKind> | Extract<import("./extended").DataParserLazyExtended<import("./parsers").DataParserDefinitionLazy>, GenericGroupedKind> | Extract<import("./extended").DataParserUnknownExtended<import("./parsers").DataParserDefinitionUnknown>, GenericGroupedKind> | Extract<import("./extended").DataParserRecordExtended<import("./parsers").DataParserDefinitionRecord>, GenericGroupedKind> | Extract<import("./extended").DataParserRecoverExtended<import("./parsers").DataParserDefinitionRecover>, GenericGroupedKind> : never) | Extract<GenericInput, GenericGroupedKind>;
115
127
  };
@@ -59,6 +59,7 @@ function array(element, definition) {
59
59
  void (data.length && error.popErrorPath(error$1));
60
60
  return output;
61
61
  },
62
+ isAsynchronous: (self) => self.definition.element.isAsynchronous(),
62
63
  }, array.overrideHandler);
63
64
  return self;
64
65
  }
@@ -57,6 +57,7 @@ function array(element, definition) {
57
57
  void (data.length && popErrorPath(error));
58
58
  return output;
59
59
  },
60
+ isAsynchronous: (self) => self.definition.element.isAsynchronous(),
60
61
  }, array.overrideHandler);
61
62
  return self;
62
63
  }
@@ -19,13 +19,6 @@ function date(definition) {
19
19
  coerce: definition?.coerce ?? false,
20
20
  }, (data, _error, self) => {
21
21
  if (self.definition.coerce) {
22
- if (data instanceof Date) {
23
- const timestamp = data.getTime();
24
- if (!isSafeTimestamp.isSafeTimestamp(timestamp)) {
25
- return error.SymbolDataParserErrorIssue;
26
- }
27
- return createTheDate.createTheDate(timestamp);
28
- }
29
22
  if (typeof data === "number") {
30
23
  if (!isSafeTimestamp.isSafeTimestamp(data)) {
31
24
  return error.SymbolDataParserErrorIssue;
@@ -43,6 +36,13 @@ function date(definition) {
43
36
  if (typeof data === "string" && is.is(data)) {
44
37
  return data;
45
38
  }
39
+ if (data instanceof Date) {
40
+ const timestamp = data.getTime();
41
+ if (!isSafeTimestamp.isSafeTimestamp(timestamp)) {
42
+ return error.SymbolDataParserErrorIssue;
43
+ }
44
+ return createTheDate.createTheDate(timestamp);
45
+ }
46
46
  return error.SymbolDataParserErrorIssue;
47
47
  }, date.overrideHandler);
48
48
  return self;