@duplojs/utils 1.4.46 → 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.
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.4.46",
3
+ "version": "1.4.47",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"