@duplojs/utils 1.4.45 → 1.4.47

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 (44) hide show
  1. package/dist/dataParser/base.cjs +4 -0
  2. package/dist/dataParser/base.d.ts +34 -0
  3. package/dist/dataParser/base.mjs +4 -0
  4. package/dist/dataParser/extended/nullable.d.ts +1 -1
  5. package/dist/dataParser/extended/optional.d.ts +1 -1
  6. package/dist/dataParser/extended/recover.d.ts +1 -1
  7. package/dist/dataParser/parsers/array/index.cjs +1 -0
  8. package/dist/dataParser/parsers/array/index.d.ts +1 -1
  9. package/dist/dataParser/parsers/array/index.mjs +1 -0
  10. package/dist/dataParser/parsers/lazy.cjs +1 -0
  11. package/dist/dataParser/parsers/lazy.d.ts +1 -1
  12. package/dist/dataParser/parsers/lazy.mjs +1 -0
  13. package/dist/dataParser/parsers/literal.d.ts +1 -1
  14. package/dist/dataParser/parsers/nullable.cjs +1 -0
  15. package/dist/dataParser/parsers/nullable.d.ts +2 -2
  16. package/dist/dataParser/parsers/nullable.mjs +1 -0
  17. package/dist/dataParser/parsers/object/index.cjs +2 -0
  18. package/dist/dataParser/parsers/object/index.d.ts +3 -3
  19. package/dist/dataParser/parsers/object/index.mjs +2 -0
  20. package/dist/dataParser/parsers/optional.cjs +1 -0
  21. package/dist/dataParser/parsers/optional.d.ts +3 -3
  22. package/dist/dataParser/parsers/optional.mjs +1 -0
  23. package/dist/dataParser/parsers/pipe.cjs +1 -0
  24. package/dist/dataParser/parsers/pipe.d.ts +1 -1
  25. package/dist/dataParser/parsers/pipe.mjs +1 -0
  26. package/dist/dataParser/parsers/record/index.cjs +1 -0
  27. package/dist/dataParser/parsers/record/index.d.ts +1 -1
  28. package/dist/dataParser/parsers/record/index.mjs +1 -0
  29. package/dist/dataParser/parsers/recover.cjs +1 -0
  30. package/dist/dataParser/parsers/recover.d.ts +3 -3
  31. package/dist/dataParser/parsers/recover.mjs +1 -0
  32. package/dist/dataParser/parsers/templateLiteral/index.d.ts +1 -1
  33. package/dist/dataParser/parsers/transform.cjs +1 -0
  34. package/dist/dataParser/parsers/transform.d.ts +1 -1
  35. package/dist/dataParser/parsers/transform.mjs +1 -0
  36. package/dist/dataParser/parsers/tuple.cjs +2 -0
  37. package/dist/dataParser/parsers/tuple.d.ts +1 -1
  38. package/dist/dataParser/parsers/tuple.mjs +2 -0
  39. package/dist/dataParser/parsers/union.cjs +2 -0
  40. package/dist/dataParser/parsers/union.d.ts +1 -1
  41. package/dist/dataParser/parsers/union.mjs +2 -0
  42. package/dist/string/isIn.d.ts +2 -2
  43. package/dist/string/slice.d.ts +1 -1
  44. package/package.json +1 -1
@@ -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
  }
@@ -42,7 +42,7 @@ export interface DataParserNullableExtended<GenericDefinition extends dataParser
42
42
  * @namespace DPE
43
43
  *
44
44
  */
45
- export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionNullable<Output<GenericDataParser> | null>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullableExtended<MergeDefinition<dataParsers.DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
45
+ export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionNullable<Output<GenericDataParser>>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullableExtended<MergeDefinition<dataParsers.DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
46
46
  inner: GenericDataParser;
47
47
  }>>;
48
48
  export declare namespace nullable {
@@ -42,7 +42,7 @@ export interface DataParserOptionalExtended<GenericDefinition extends dataParser
42
42
  * @namespace DPE
43
43
  *
44
44
  */
45
- export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionOptional<Output<GenericDataParser> | undefined>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptionalExtended<MergeDefinition<dataParsers.DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
45
+ export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionOptional<Output<GenericDataParser>>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptionalExtended<MergeDefinition<dataParsers.DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
46
46
  inner: GenericDataParser;
47
47
  }>>;
48
48
  export declare namespace optional {
@@ -41,7 +41,7 @@ export interface DataParserRecoverExtended<GenericDefinition extends dataParsers
41
41
  * @namespace DPE
42
42
  *
43
43
  */
44
- export declare function recover<GenericDataParser extends DataParser, GenericRecoveredValue extends unknown, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionRecover, "inner" | "recoveredValue">> = never>(inner: GenericDataParser, recoveredValue: GenericRecoveredValue, definition?: GenericDefinition): DataParserRecoverExtended<MergeDefinition<dataParsers.DataParserDefinitionRecover, NeverCoalescing<GenericDefinition, {}> & {
44
+ export declare function recover<GenericDataParser extends DataParser, GenericRecoveredValue extends Output<GenericDataParser>, const GenericDefinition extends Partial<Omit<dataParsers.DataParserDefinitionRecover, "inner" | "recoveredValue">> = never>(inner: GenericDataParser, recoveredValue: GenericRecoveredValue, definition?: GenericDefinition): DataParserRecoverExtended<MergeDefinition<dataParsers.DataParserDefinitionRecover, NeverCoalescing<GenericDefinition, {}> & {
45
45
  inner: GenericDataParser;
46
46
  recoveredValue: GenericRecoveredValue;
47
47
  }>>;
@@ -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
  }
@@ -8,7 +8,7 @@ export * from "./checkers";
8
8
  export interface DataParserArrayCheckerCustom<GenericInput extends unknown[] = unknown[]> {
9
9
  }
10
10
  export type DataParserArrayCheckers<GenericInput extends unknown[] = unknown[]> = (DataParserArrayCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserArrayCheckerCustom<GenericInput>, DataParserChecker>] | DataParserCheckerArrayMin | DataParserCheckerArrayMax | CheckerRefineImplementation<GenericInput>);
11
- export interface DataParserDefinitionArray extends DataParserDefinition<DataParserArrayCheckers> {
11
+ export interface DataParserDefinitionArray extends DataParserDefinition<DataParserArrayCheckers<unknown[]>> {
12
12
  readonly element: DataParser;
13
13
  }
14
14
  export declare const arrayKind: import("../../../common").KindHandler<import("../../../common").KindDefinition<"@DuplojsUtilsDataParser/array", unknown>>;
@@ -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
  }
@@ -17,6 +17,7 @@ function lazy(getter, definition) {
17
17
  }, {
18
18
  sync: (data, _error, self) => self.definition.getter.value.exec(data, _error),
19
19
  async: (data, _error, self) => self.definition.getter.value.asyncExec(data, _error),
20
+ isAsynchronous: (self) => self.definition.getter.value.isAsynchronous(),
20
21
  }, lazy.overrideHandler);
21
22
  return self;
22
23
  }
@@ -6,7 +6,7 @@ import { type GetPropsWithValueExtends } from "../../object";
6
6
  export interface DataParserLazyCheckerCustom<GenericInput extends unknown = unknown> {
7
7
  }
8
8
  export type DataParserLazyCheckers<GenericInput extends unknown = unknown> = (DataParserLazyCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserLazyCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
9
- export interface DataParserDefinitionLazy extends DataParserDefinition<DataParserLazyCheckers> {
9
+ export interface DataParserDefinitionLazy extends DataParserDefinition<DataParserLazyCheckers<unknown>> {
10
10
  getter: Memoized<DataParser>;
11
11
  }
12
12
  export declare const lazyKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/lazy", unknown>>;
@@ -15,6 +15,7 @@ function lazy(getter, definition) {
15
15
  }, {
16
16
  sync: (data, _error, self) => self.definition.getter.value.exec(data, _error),
17
17
  async: (data, _error, self) => self.definition.getter.value.asyncExec(data, _error),
18
+ isAsynchronous: (self) => self.definition.getter.value.isAsynchronous(),
18
19
  }, lazy.overrideHandler);
19
20
  return self;
20
21
  }
@@ -7,7 +7,7 @@ export type LiteralValue = string | number | bigint | undefined | null | boolean
7
7
  export interface DataParserLiteralCheckerCustom<GenericInput extends LiteralValue = LiteralValue> {
8
8
  }
9
9
  export type DataParserLiteralCheckers<GenericInput extends LiteralValue = LiteralValue> = (DataParserLiteralCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserLiteralCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
10
- export interface DataParserDefinitionLiteral extends DataParserDefinition<DataParserLiteralCheckers> {
10
+ export interface DataParserDefinitionLiteral extends DataParserDefinition<DataParserLiteralCheckers<LiteralValue>> {
11
11
  readonly value: readonly LiteralValue[];
12
12
  }
13
13
  export declare const literalKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/literal", unknown>>;
@@ -27,6 +27,7 @@ function nullable(inner, definition) {
27
27
  }
28
28
  return self.definition.inner.asyncExec(data, error);
29
29
  },
30
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
30
31
  }, nullable.overrideHandler);
31
32
  return self;
32
33
  }
@@ -6,9 +6,9 @@ import { type GetPropsWithValueExtends } from "../../object";
6
6
  export interface DataParserNullableCheckerCustom<GenericInput extends unknown = unknown> {
7
7
  }
8
8
  export type DataParserNullableCheckers<GenericInput extends unknown = unknown> = (DataParserNullableCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserNullableCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
9
- export interface DataParserDefinitionNullable<GenericCoalescingValue extends unknown = unknown> extends DataParserDefinition<DataParserNullableCheckers> {
9
+ export interface DataParserDefinitionNullable<GenericOutput extends unknown = unknown> extends DataParserDefinition<DataParserNullableCheckers> {
10
10
  readonly inner: DataParser;
11
- readonly coalescingValue: GenericCoalescingValue;
11
+ readonly coalescingValue: GenericOutput;
12
12
  }
13
13
  export declare const nullableKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/nullable", unknown>>;
14
14
  type _DataParserNullable<GenericDefinition extends DataParserDefinitionNullable> = (DataParser<GenericDefinition, IsEqual<GenericDefinition["coalescingValue"], unknown> extends true ? Output<GenericDefinition["inner"]> | null : Output<GenericDefinition["inner"]>, Input<GenericDefinition["inner"]> | null> & Kind<typeof nullableKind.definition>);
@@ -25,6 +25,7 @@ function nullable(inner, definition) {
25
25
  }
26
26
  return self.definition.inner.asyncExec(data, error);
27
27
  },
28
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
28
29
  }, nullable.overrideHandler);
29
30
  return self;
30
31
  }
@@ -4,6 +4,7 @@ var base = require('../../base.cjs');
4
4
  var error = require('../../error.cjs');
5
5
  var kind = require('../../kind.cjs');
6
6
  var memo = require('../../../common/memo.cjs');
7
+ var some = require('../../../array/some.cjs');
7
8
  var pipe = require('../../../common/pipe.cjs');
8
9
  var map = require('../../../array/map.cjs');
9
10
  var filter = require('../../../array/filter.cjs');
@@ -69,6 +70,7 @@ function object(shape, definition) {
69
70
  void (self.definition.optimizedShape.value.length && error.popErrorPath(error$1));
70
71
  return output;
71
72
  },
73
+ isAsynchronous: (self) => some.some(self.definition.optimizedShape.value, (element) => element.value.isAsynchronous()),
72
74
  }, object.overrideHandler);
73
75
  return self;
74
76
  }
@@ -16,10 +16,10 @@ export type DataParserObjectShapeOutput<GenericShape extends DataParserObjectSha
16
16
  export type DataParserObjectShapeInput<GenericShape extends DataParserObjectShape> = {
17
17
  -readonly [Prop in keyof GenericShape as GenericShape[Prop] extends Kind<typeof dataParserKind.definition> ? Prop : never]: Input<GenericShape[Prop]>;
18
18
  } extends infer InferredResult extends object ? DObject.PartialKeys<InferredResult, DObject.GetPropsWithValueExtends<InferredResult, undefined>> : never;
19
- export interface DataParserObjectCheckerCustom<GenericInput extends DataParserObjectShape = DataParserObjectShape> {
19
+ export interface DataParserObjectCheckerCustom<GenericInput extends object = object> {
20
20
  }
21
- export type DataParserObjectCheckers<GenericInput extends DataParserObjectShape = DataParserObjectShape> = (DataParserObjectCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserObjectCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
22
- export interface DataParserDefinitionObject extends DataParserDefinition<DataParserObjectCheckers> {
21
+ export type DataParserObjectCheckers<GenericInput extends object = object> = (DataParserObjectCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserObjectCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
22
+ export interface DataParserDefinitionObject extends DataParserDefinition<DataParserObjectCheckers<object>> {
23
23
  readonly shape: DataParserObjectShape;
24
24
  readonly optimizedShape: Memoized<{
25
25
  readonly key: string;
@@ -2,6 +2,7 @@ import { dataParserInit, SymbolDataParserError, dataParserKind } from '../../bas
2
2
  import { SymbolDataParserErrorIssue, setErrorPath, popErrorPath } from '../../error.mjs';
3
3
  import { createDataParserKind } from '../../kind.mjs';
4
4
  import { memo } from '../../../common/memo.mjs';
5
+ import { some } from '../../../array/some.mjs';
5
6
  import { pipe } from '../../../common/pipe.mjs';
6
7
  import { map } from '../../../array/map.mjs';
7
8
  import { filter } from '../../../array/filter.mjs';
@@ -67,6 +68,7 @@ function object(shape, definition) {
67
68
  void (self.definition.optimizedShape.value.length && popErrorPath(error));
68
69
  return output;
69
70
  },
71
+ isAsynchronous: (self) => some(self.definition.optimizedShape.value, (element) => element.value.isAsynchronous()),
70
72
  }, object.overrideHandler);
71
73
  return self;
72
74
  }
@@ -27,6 +27,7 @@ function optional(inner, definition) {
27
27
  }
28
28
  return self.definition.inner.asyncExec(data, error);
29
29
  },
30
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
30
31
  }, optional.overrideHandler);
31
32
  return self;
32
33
  }
@@ -6,9 +6,9 @@ import { type GetPropsWithValueExtends } from "../../object";
6
6
  export interface DataParserOptionalCheckerCustom<GenericInput extends unknown = unknown> {
7
7
  }
8
8
  export type DataParserOptionalCheckers<GenericInput extends unknown = unknown> = (DataParserOptionalCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserOptionalCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
9
- export interface DataParserDefinitionOptional<GenericCoalescingValue extends unknown = unknown> extends DataParserDefinition<DataParserOptionalCheckers> {
9
+ export interface DataParserDefinitionOptional<GenericOutput extends unknown = unknown> extends DataParserDefinition<DataParserOptionalCheckers> {
10
10
  readonly inner: DataParser;
11
- readonly coalescingValue: GenericCoalescingValue;
11
+ readonly coalescingValue: GenericOutput;
12
12
  }
13
13
  export declare const optionalKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/optional", unknown>>;
14
14
  type _DataParserOptional<GenericDefinition extends DataParserDefinitionOptional> = (DataParser<GenericDefinition, IsEqual<GenericDefinition["coalescingValue"], unknown> extends true ? Output<GenericDefinition["inner"]> | undefined : Output<GenericDefinition["inner"]>, Input<GenericDefinition["inner"]> | undefined> & Kind<typeof optionalKind.definition>);
@@ -51,7 +51,7 @@ export interface DataParserOptional<GenericDefinition extends DataParserDefiniti
51
51
  * @namespace DP
52
52
  *
53
53
  */
54
- export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional<Output<GenericDataParser>>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
54
+ export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
55
55
  inner: GenericDataParser;
56
56
  }>>;
57
57
  export declare namespace optional {
@@ -25,6 +25,7 @@ function optional(inner, definition) {
25
25
  }
26
26
  return self.definition.inner.asyncExec(data, error);
27
27
  },
28
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
28
29
  }, optional.overrideHandler);
29
30
  return self;
30
31
  }
@@ -29,6 +29,7 @@ function pipe(input, output, definition) {
29
29
  }
30
30
  return self.definition.output.asyncExec(result, error);
31
31
  },
32
+ isAsynchronous: (self) => self.definition.input.isAsynchronous() || self.definition.output.isAsynchronous(),
32
33
  }, pipe.overrideHandler);
33
34
  return self;
34
35
  }
@@ -6,7 +6,7 @@ import { type GetPropsWithValueExtends } from "../../object";
6
6
  export interface DataParserPipeCheckerCustom<GenericInput extends unknown = unknown> {
7
7
  }
8
8
  export type DataParserPipeCheckers<GenericInput extends unknown = unknown> = (DataParserPipeCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserPipeCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
9
- export interface DataParserDefinitionPipe extends DataParserDefinition<DataParserPipeCheckers> {
9
+ export interface DataParserDefinitionPipe extends DataParserDefinition<DataParserPipeCheckers<unknown>> {
10
10
  readonly input: DataParser;
11
11
  readonly output: DataParser;
12
12
  }
@@ -27,6 +27,7 @@ function pipe(input, output, definition) {
27
27
  }
28
28
  return self.definition.output.asyncExec(result, error);
29
29
  },
30
+ isAsynchronous: (self) => self.definition.input.isAsynchronous() || self.definition.output.isAsynchronous(),
30
31
  }, pipe.overrideHandler);
31
32
  return self;
32
33
  }
@@ -94,6 +94,7 @@ function record(key, value, definition) {
94
94
  }
95
95
  return output;
96
96
  },
97
+ isAsynchronous: (self) => self.definition.value.isAsynchronous(),
97
98
  }, record.overrideHandler);
98
99
  return self;
99
100
  }
@@ -18,7 +18,7 @@ export type DataParserRecordKey = (DataParserString | DataParserTemplateLiteral
18
18
  export interface DataParserRecordCheckerCustom<GenericInput extends Record<string, unknown> = Record<string, unknown>> {
19
19
  }
20
20
  export type DataParserRecordCheckers<GenericInput extends Record<string, unknown> = Record<string, unknown>> = (DataParserRecordCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserRecordCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
21
- export interface DataParserDefinitionRecord extends DataParserDefinition<DataParserRecordCheckers> {
21
+ export interface DataParserDefinitionRecord extends DataParserDefinition<DataParserRecordCheckers<Record<string, unknown>>> {
22
22
  readonly key: DataParserRecordKey;
23
23
  readonly value: DataParser;
24
24
  readonly requireKey: string[] | null;
@@ -93,6 +93,7 @@ function record(key, value, definition) {
93
93
  }
94
94
  return output;
95
95
  },
96
+ isAsynchronous: (self) => self.definition.value.isAsynchronous(),
96
97
  }, record.overrideHandler);
97
98
  return self;
98
99
  }
@@ -27,6 +27,7 @@ function recover(inner, recoveredValue, definition) {
27
27
  ? self.definition.recoveredValue
28
28
  : result;
29
29
  },
30
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
30
31
  }, recover.overrideHandler);
31
32
  return self;
32
33
  }
@@ -41,9 +41,9 @@ export interface DataParserRecover<GenericDefinition extends DataParserDefinitio
41
41
  * const withString = DP.recover(DP.string(), "fallback");
42
42
  * const stringResult = withString.parse(123);
43
43
  *
44
- * const withCheckers = DP.recover(DP.string(), "fallback", {
45
- * checkers: [DP.checkerRefine((value) => value.length > 0)],
46
- * });
44
+ * const withCheckers = DP.recover(DP.string(), "fallback")
45
+ * .addChecker(DP.checkerRefine((value) => value.length > 0));
46
+ *
47
47
  * ```
48
48
  *
49
49
  * @see https://utils.duplojs.dev/en/v1/api/dataParser/recover
@@ -25,6 +25,7 @@ function recover(inner, recoveredValue, definition) {
25
25
  ? self.definition.recoveredValue
26
26
  : result;
27
27
  },
28
+ isAsynchronous: (self) => self.definition.inner.isAsynchronous(),
28
29
  }, recover.overrideHandler);
29
30
  return self;
30
31
  }
@@ -46,7 +46,7 @@ export type TemplateLiteralShapeInput<GenericTemplate extends TemplateLiteralSha
46
46
  export interface DataParserTemplateLiteralCheckerCustom<GenericInput extends string = string> {
47
47
  }
48
48
  export type DataParserTemplateLiteralCheckers<GenericInput extends string = string> = (DataParserTemplateLiteralCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserTemplateLiteralCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
49
- export interface DataParserDefinitionTemplateLiteral extends DataParserDefinition<DataParserTemplateLiteralCheckers> {
49
+ export interface DataParserDefinitionTemplateLiteral extends DataParserDefinition<DataParserTemplateLiteralCheckers<string>> {
50
50
  readonly template: TemplateLiteralShape;
51
51
  readonly pattern: RegExp;
52
52
  }
@@ -38,6 +38,7 @@ function transform(inner, theFunction, definition) {
38
38
  }
39
39
  return result;
40
40
  },
41
+ isAsynchronous: (self) => self.definition.theFunction.constructor.name === "AsyncFunction",
41
42
  }, transform.overrideHandler);
42
43
  return self;
43
44
  }
@@ -7,7 +7,7 @@ import { type GetPropsWithValueExtends } from "../../object";
7
7
  export interface DataParserTransformCheckerCustom<GenericInput extends unknown = unknown> {
8
8
  }
9
9
  export type DataParserTransformCheckers<GenericInput extends unknown = unknown> = (DataParserTransformCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserTransformCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
10
- export interface DataParserDefinitionTransform extends DataParserDefinition<DataParserTransformCheckers> {
10
+ export interface DataParserDefinitionTransform extends DataParserDefinition<DataParserTransformCheckers<unknown>> {
11
11
  readonly inner: DataParser;
12
12
  theFunction(input: any, error: DataParserError): unknown;
13
13
  }
@@ -36,6 +36,7 @@ function transform(inner, theFunction, definition) {
36
36
  }
37
37
  return result;
38
38
  },
39
+ isAsynchronous: (self) => self.definition.theFunction.constructor.name === "AsyncFunction",
39
40
  }, transform.overrideHandler);
40
41
  return self;
41
42
  }
@@ -3,6 +3,7 @@
3
3
  var base = require('../base.cjs');
4
4
  var error = require('../error.cjs');
5
5
  var kind = require('../kind.cjs');
6
+ var some = require('../../array/some.cjs');
6
7
  var override = require('../../common/override.cjs');
7
8
 
8
9
  const tupleKind = kind.createDataParserKind("tuple");
@@ -78,6 +79,7 @@ function tuple(shape, definition) {
78
79
  void (self.definition.shape.length && error.popErrorPath(error$1));
79
80
  return output;
80
81
  },
82
+ isAsynchronous: (self) => some.some(self.definition.shape, (element) => element.isAsynchronous()) || !!self.definition.rest?.isAsynchronous(),
81
83
  }, tuple.overrideHandler);
82
84
  return self;
83
85
  }
@@ -22,7 +22,7 @@ export type DataParserTupleShapeInput<GenericShape extends TupleShape, GenericRe
22
22
  export interface DataParserTupleCheckerCustom<GenericInput extends AnyTuple<unknown> = AnyTuple<unknown>> {
23
23
  }
24
24
  export type DataParserTupleCheckers<GenericInput extends AnyTuple<unknown> = AnyTuple<unknown>> = (DataParserTupleCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserTupleCheckerCustom<GenericInput>, DataParserChecker>] | DataParserCheckerArrayMin | DataParserCheckerArrayMax | CheckerRefineImplementation<GenericInput>);
25
- export interface DataParserDefinitionTuple extends DataParserDefinition<DataParserTupleCheckers> {
25
+ export interface DataParserDefinitionTuple extends DataParserDefinition<DataParserTupleCheckers<AnyTuple<unknown>>> {
26
26
  readonly shape: TupleShape;
27
27
  readonly rest?: DataParser;
28
28
  }
@@ -1,6 +1,7 @@
1
1
  import { dataParserInit, SymbolDataParserError } from '../base.mjs';
2
2
  import { SymbolDataParserErrorIssue, setErrorPath, popErrorPath } from '../error.mjs';
3
3
  import { createDataParserKind } from '../kind.mjs';
4
+ import { some } from '../../array/some.mjs';
4
5
  import { createOverride } from '../../common/override.mjs';
5
6
 
6
7
  const tupleKind = createDataParserKind("tuple");
@@ -76,6 +77,7 @@ function tuple(shape, definition) {
76
77
  void (self.definition.shape.length && popErrorPath(error));
77
78
  return output;
78
79
  },
80
+ isAsynchronous: (self) => some(self.definition.shape, (element) => element.isAsynchronous()) || !!self.definition.rest?.isAsynchronous(),
79
81
  }, tuple.overrideHandler);
80
82
  return self;
81
83
  }
@@ -3,6 +3,7 @@
3
3
  var base = require('../base.cjs');
4
4
  var error = require('../error.cjs');
5
5
  var kind = require('../kind.cjs');
6
+ var some = require('../../array/some.cjs');
6
7
  var override = require('../../common/override.cjs');
7
8
 
8
9
  const unionKind = kind.createDataParserKind("union");
@@ -33,6 +34,7 @@ function union(options, definition) {
33
34
  }
34
35
  return error.SymbolDataParserErrorIssue;
35
36
  },
37
+ isAsynchronous: (self) => some.some(self.definition.options, (element) => element.isAsynchronous()),
36
38
  }, union.overrideHandler);
37
39
  return self;
38
40
  }
@@ -7,7 +7,7 @@ export type UnionOptions = readonly [DataParser, ...DataParser[]];
7
7
  export interface DataParserUnionCheckerCustom<GenericInput extends unknown = unknown> {
8
8
  }
9
9
  export type DataParserUnionCheckers<GenericInput extends unknown = unknown> = (DataParserUnionCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserUnionCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
10
- export interface DataParserDefinitionUnion extends DataParserDefinition<DataParserUnionCheckers> {
10
+ export interface DataParserDefinitionUnion extends DataParserDefinition<DataParserUnionCheckers<unknown>> {
11
11
  readonly options: UnionOptions;
12
12
  }
13
13
  export declare const unionKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/union", unknown>>;
@@ -1,6 +1,7 @@
1
1
  import { dataParserInit, SymbolDataParserError } from '../base.mjs';
2
2
  import { SymbolDataParserErrorIssue } from '../error.mjs';
3
3
  import { createDataParserKind } from '../kind.mjs';
4
+ import { some } from '../../array/some.mjs';
4
5
  import { createOverride } from '../../common/override.mjs';
5
6
 
6
7
  const unionKind = createDataParserKind("union");
@@ -31,6 +32,7 @@ function union(options, definition) {
31
32
  }
32
33
  return SymbolDataParserErrorIssue;
33
34
  },
35
+ isAsynchronous: (self) => some(self.definition.options, (element) => element.isAsynchronous()),
34
36
  }, union.overrideHandler);
35
37
  return self;
36
38
  }
@@ -43,5 +43,5 @@
43
43
  * @namespace S
44
44
  *
45
45
  */
46
- export declare function isIn<GenericInput extends string, GenericValue extends GenericInput>(array: readonly GenericValue[]): (input: GenericInput) => input is Extract<GenericInput, GenericValue>;
47
- export declare function isIn<GenericInput extends string, GenericValue extends GenericInput>(input: GenericInput, array: readonly GenericValue[]): input is Extract<GenericInput, GenericValue>;
46
+ export declare function isIn<GenericValue extends string>(array: readonly (GenericValue | string)[]): (input: string) => input is GenericValue;
47
+ export declare function isIn<GenericValue extends string>(input: string, array: readonly (GenericValue | string)[]): input is GenericValue;
@@ -10,7 +10,7 @@
10
10
  * ```ts
11
11
  * S.slice("DuploJS Utils", 0, 7); // "DuploJS"
12
12
  *
13
- * S.slice("DuploJS Utils", -5); // "Utils"
13
+ * S.slice("DuploJS Utils", -5, Infinity); // "Utils"
14
14
  *
15
15
  * pipe(
16
16
  * "DuploJS Utils",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.4.45",
3
+ "version": "1.4.47",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"