@duplojs/utils 1.1.12 → 1.1.14

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 (227) hide show
  1. package/dist/array/flat.cjs +1 -13
  2. package/dist/array/flat.d.ts +1 -4
  3. package/dist/array/flat.mjs +1 -13
  4. package/dist/array/index.cjs +2 -0
  5. package/dist/array/index.d.ts +1 -0
  6. package/dist/array/index.mjs +1 -0
  7. package/dist/array/notIncludes.cjs +12 -0
  8. package/dist/array/notIncludes.d.ts +4 -0
  9. package/dist/array/notIncludes.mjs +10 -0
  10. package/dist/array/reduce.d.ts +6 -7
  11. package/dist/array/reduceRight.d.ts +4 -3
  12. package/dist/common/createKindIdentifier.cjs +27 -0
  13. package/dist/common/createKindIdentifier.d.ts +7 -0
  14. package/dist/common/createKindIdentifier.mjs +25 -0
  15. package/dist/common/index.d.ts +1 -0
  16. package/dist/common/kind.cjs +15 -12
  17. package/dist/common/kind.d.ts +2 -2
  18. package/dist/common/kind.mjs +15 -12
  19. package/dist/common/or.d.ts +9 -9
  20. package/dist/common/types/index.d.ts +2 -0
  21. package/dist/common/types/onlyLiteral.d.ts +18 -0
  22. package/dist/common/types/unwrapArray.d.ts +1 -0
  23. package/dist/dataParser/base.cjs +55 -29
  24. package/dist/dataParser/base.d.ts +1 -1
  25. package/dist/dataParser/base.mjs +55 -29
  26. package/dist/dataParser/baseExtended.cjs +15 -2
  27. package/dist/dataParser/baseExtended.d.ts +8 -3
  28. package/dist/dataParser/baseExtended.mjs +15 -2
  29. package/dist/dataParser/extended/array.cjs +1 -0
  30. package/dist/dataParser/extended/array.d.ts +11 -5
  31. package/dist/dataParser/extended/array.mjs +1 -0
  32. package/dist/dataParser/extended/bigint.cjs +1 -0
  33. package/dist/dataParser/extended/bigint.d.ts +9 -2
  34. package/dist/dataParser/extended/bigint.mjs +1 -0
  35. package/dist/dataParser/extended/boolean.cjs +1 -0
  36. package/dist/dataParser/extended/boolean.d.ts +13 -2
  37. package/dist/dataParser/extended/boolean.mjs +1 -0
  38. package/dist/dataParser/extended/coerce/bigint.cjs +1 -0
  39. package/dist/dataParser/extended/coerce/bigint.mjs +1 -0
  40. package/dist/dataParser/extended/coerce/boolean.cjs +1 -0
  41. package/dist/dataParser/extended/coerce/boolean.mjs +1 -0
  42. package/dist/dataParser/extended/coerce/empty.cjs +1 -0
  43. package/dist/dataParser/extended/coerce/empty.mjs +1 -0
  44. package/dist/dataParser/extended/coerce/nil.cjs +1 -0
  45. package/dist/dataParser/extended/coerce/nil.mjs +1 -0
  46. package/dist/dataParser/extended/coerce/number.cjs +1 -0
  47. package/dist/dataParser/extended/coerce/number.mjs +1 -0
  48. package/dist/dataParser/extended/coerce/string.cjs +1 -0
  49. package/dist/dataParser/extended/coerce/string.mjs +1 -0
  50. package/dist/dataParser/extended/empty.cjs +1 -0
  51. package/dist/dataParser/extended/empty.d.ts +13 -2
  52. package/dist/dataParser/extended/empty.mjs +1 -0
  53. package/dist/dataParser/extended/index.cjs +2 -0
  54. package/dist/dataParser/extended/index.d.ts +1 -0
  55. package/dist/dataParser/extended/index.mjs +1 -0
  56. package/dist/dataParser/extended/lazy.cjs +1 -0
  57. package/dist/dataParser/extended/lazy.d.ts +13 -3
  58. package/dist/dataParser/extended/lazy.mjs +1 -0
  59. package/dist/dataParser/extended/literal.cjs +1 -0
  60. package/dist/dataParser/extended/literal.d.ts +13 -2
  61. package/dist/dataParser/extended/literal.mjs +1 -0
  62. package/dist/dataParser/extended/nil.cjs +1 -0
  63. package/dist/dataParser/extended/nil.d.ts +13 -2
  64. package/dist/dataParser/extended/nil.mjs +1 -0
  65. package/dist/dataParser/extended/nullable.cjs +1 -0
  66. package/dist/dataParser/extended/nullable.d.ts +14 -4
  67. package/dist/dataParser/extended/nullable.mjs +1 -0
  68. package/dist/dataParser/extended/number.cjs +1 -0
  69. package/dist/dataParser/extended/number.d.ts +9 -2
  70. package/dist/dataParser/extended/number.mjs +1 -0
  71. package/dist/dataParser/extended/object.cjs +1 -0
  72. package/dist/dataParser/extended/object.d.ts +13 -2
  73. package/dist/dataParser/extended/object.mjs +1 -0
  74. package/dist/dataParser/extended/optional.cjs +1 -0
  75. package/dist/dataParser/extended/optional.d.ts +14 -4
  76. package/dist/dataParser/extended/optional.mjs +1 -0
  77. package/dist/dataParser/extended/pipe.cjs +1 -0
  78. package/dist/dataParser/extended/pipe.d.ts +13 -3
  79. package/dist/dataParser/extended/pipe.mjs +1 -0
  80. package/dist/dataParser/extended/record.cjs +3 -2
  81. package/dist/dataParser/extended/record.d.ts +13 -3
  82. package/dist/dataParser/extended/record.mjs +2 -1
  83. package/dist/dataParser/extended/recover.cjs +14 -0
  84. package/dist/dataParser/extended/recover.d.ts +23 -0
  85. package/dist/dataParser/extended/recover.mjs +12 -0
  86. package/dist/dataParser/extended/string.cjs +1 -0
  87. package/dist/dataParser/extended/string.d.ts +9 -2
  88. package/dist/dataParser/extended/string.mjs +1 -0
  89. package/dist/dataParser/extended/templateLiteral.cjs +4 -2
  90. package/dist/dataParser/extended/templateLiteral.d.ts +13 -2
  91. package/dist/dataParser/extended/templateLiteral.mjs +3 -1
  92. package/dist/dataParser/extended/transform.cjs +1 -0
  93. package/dist/dataParser/extended/transform.d.ts +12 -2
  94. package/dist/dataParser/extended/transform.mjs +1 -0
  95. package/dist/dataParser/extended/tuple.cjs +11 -1
  96. package/dist/dataParser/extended/tuple.d.ts +19 -2
  97. package/dist/dataParser/extended/tuple.mjs +11 -1
  98. package/dist/dataParser/extended/union.cjs +1 -0
  99. package/dist/dataParser/extended/union.d.ts +13 -2
  100. package/dist/dataParser/extended/union.mjs +1 -0
  101. package/dist/dataParser/extended/unknown.cjs +1 -0
  102. package/dist/dataParser/extended/unknown.d.ts +13 -2
  103. package/dist/dataParser/extended/unknown.mjs +1 -0
  104. package/dist/dataParser/identifier.cjs +2 -17
  105. package/dist/dataParser/identifier.d.ts +216 -8
  106. package/dist/dataParser/identifier.mjs +2 -17
  107. package/dist/dataParser/index.cjs +29 -18
  108. package/dist/dataParser/index.mjs +18 -14
  109. package/dist/dataParser/parsers/array/checkers/max.cjs +3 -3
  110. package/dist/dataParser/parsers/array/checkers/max.d.ts +2 -2
  111. package/dist/dataParser/parsers/array/checkers/max.mjs +3 -3
  112. package/dist/dataParser/parsers/array/checkers/min.cjs +3 -3
  113. package/dist/dataParser/parsers/array/checkers/min.d.ts +2 -2
  114. package/dist/dataParser/parsers/array/checkers/min.mjs +3 -3
  115. package/dist/dataParser/parsers/array/index.d.ts +14 -7
  116. package/dist/dataParser/parsers/bigint/checkers/max.cjs +3 -3
  117. package/dist/dataParser/parsers/bigint/checkers/max.d.ts +2 -2
  118. package/dist/dataParser/parsers/bigint/checkers/max.mjs +3 -3
  119. package/dist/dataParser/parsers/bigint/checkers/min.cjs +3 -3
  120. package/dist/dataParser/parsers/bigint/checkers/min.d.ts +2 -2
  121. package/dist/dataParser/parsers/bigint/checkers/min.mjs +3 -3
  122. package/dist/dataParser/parsers/bigint/index.d.ts +11 -4
  123. package/dist/dataParser/parsers/boolean.d.ts +16 -4
  124. package/dist/dataParser/parsers/coerce/bigint.cjs +1 -0
  125. package/dist/dataParser/parsers/coerce/bigint.mjs +1 -0
  126. package/dist/dataParser/parsers/coerce/boolean.cjs +1 -0
  127. package/dist/dataParser/parsers/coerce/boolean.mjs +1 -0
  128. package/dist/dataParser/parsers/coerce/empty.cjs +1 -0
  129. package/dist/dataParser/parsers/coerce/empty.mjs +1 -0
  130. package/dist/dataParser/parsers/coerce/nil.cjs +1 -0
  131. package/dist/dataParser/parsers/coerce/nil.mjs +1 -0
  132. package/dist/dataParser/parsers/coerce/number.cjs +1 -0
  133. package/dist/dataParser/parsers/coerce/number.mjs +1 -0
  134. package/dist/dataParser/parsers/coerce/string.cjs +1 -0
  135. package/dist/dataParser/parsers/coerce/string.mjs +1 -0
  136. package/dist/dataParser/parsers/empty.d.ts +16 -4
  137. package/dist/dataParser/parsers/index.d.ts +2 -0
  138. package/dist/dataParser/parsers/lazy.d.ts +16 -4
  139. package/dist/dataParser/parsers/literal.d.ts +16 -4
  140. package/dist/dataParser/parsers/nil.d.ts +16 -4
  141. package/dist/dataParser/parsers/nullable.cjs +3 -2
  142. package/dist/dataParser/parsers/nullable.d.ts +19 -6
  143. package/dist/dataParser/parsers/nullable.mjs +3 -2
  144. package/dist/dataParser/parsers/number/checkers/int.cjs +3 -3
  145. package/dist/dataParser/parsers/number/checkers/int.d.ts +2 -2
  146. package/dist/dataParser/parsers/number/checkers/int.mjs +3 -3
  147. package/dist/dataParser/parsers/number/checkers/max.cjs +3 -3
  148. package/dist/dataParser/parsers/number/checkers/max.d.ts +2 -2
  149. package/dist/dataParser/parsers/number/checkers/max.mjs +3 -3
  150. package/dist/dataParser/parsers/number/checkers/min.cjs +3 -3
  151. package/dist/dataParser/parsers/number/checkers/min.d.ts +2 -2
  152. package/dist/dataParser/parsers/number/checkers/min.mjs +3 -3
  153. package/dist/dataParser/parsers/number/index.d.ts +11 -4
  154. package/dist/dataParser/parsers/object.d.ts +16 -4
  155. package/dist/dataParser/parsers/optional.cjs +3 -2
  156. package/dist/dataParser/parsers/optional.d.ts +19 -6
  157. package/dist/dataParser/parsers/optional.mjs +3 -2
  158. package/dist/dataParser/parsers/pipe.d.ts +16 -4
  159. package/dist/dataParser/parsers/record/findRecordRequiredKey.cjs +50 -0
  160. package/dist/dataParser/parsers/record/findRecordRequiredKey.d.ts +4 -0
  161. package/dist/dataParser/parsers/record/findRecordRequiredKey.mjs +47 -0
  162. package/dist/dataParser/parsers/{record.cjs → record/index.cjs} +21 -3
  163. package/dist/dataParser/parsers/record/index.d.ts +42 -0
  164. package/dist/dataParser/parsers/{record.mjs → record/index.mjs} +21 -4
  165. package/dist/dataParser/parsers/recover.cjs +32 -0
  166. package/dist/dataParser/parsers/recover.d.ts +28 -0
  167. package/dist/dataParser/parsers/recover.mjs +29 -0
  168. package/dist/dataParser/parsers/refine.cjs +18 -0
  169. package/dist/dataParser/parsers/refine.d.ts +17 -0
  170. package/dist/dataParser/parsers/refine.mjs +15 -0
  171. package/dist/dataParser/parsers/string/checkers/email.cjs +3 -3
  172. package/dist/dataParser/parsers/string/checkers/email.d.ts +2 -2
  173. package/dist/dataParser/parsers/string/checkers/email.mjs +3 -3
  174. package/dist/dataParser/parsers/string/checkers/max.cjs +3 -3
  175. package/dist/dataParser/parsers/string/checkers/max.d.ts +2 -2
  176. package/dist/dataParser/parsers/string/checkers/max.mjs +3 -3
  177. package/dist/dataParser/parsers/string/checkers/min.cjs +3 -3
  178. package/dist/dataParser/parsers/string/checkers/min.d.ts +2 -2
  179. package/dist/dataParser/parsers/string/checkers/min.mjs +3 -3
  180. package/dist/dataParser/parsers/string/checkers/regex.cjs +3 -3
  181. package/dist/dataParser/parsers/string/checkers/regex.d.ts +2 -2
  182. package/dist/dataParser/parsers/string/checkers/regex.mjs +3 -3
  183. package/dist/dataParser/parsers/string/checkers/url.cjs +3 -3
  184. package/dist/dataParser/parsers/string/checkers/url.d.ts +2 -2
  185. package/dist/dataParser/parsers/string/checkers/url.mjs +3 -3
  186. package/dist/dataParser/parsers/string/index.d.ts +11 -4
  187. package/dist/dataParser/parsers/templateLiteral/createTemplateLiteralPattern.cjs +75 -0
  188. package/dist/dataParser/parsers/templateLiteral/createTemplateLiteralPattern.d.ts +2 -0
  189. package/dist/dataParser/parsers/templateLiteral/createTemplateLiteralPattern.mjs +73 -0
  190. package/dist/dataParser/parsers/templateLiteral/index.cjs +31 -0
  191. package/dist/dataParser/parsers/templateLiteral/index.d.ts +66 -0
  192. package/dist/dataParser/parsers/templateLiteral/index.mjs +27 -0
  193. package/dist/dataParser/parsers/transform.d.ts +16 -4
  194. package/dist/dataParser/parsers/tuple.d.ts +14 -4
  195. package/dist/dataParser/parsers/union.d.ts +16 -4
  196. package/dist/dataParser/parsers/unknown.d.ts +16 -4
  197. package/dist/dataParser/types/checkers.d.ts +1 -1
  198. package/dist/dataParser/types/dataParsers.d.ts +2 -2
  199. package/dist/either/bool/falsy.cjs +1 -1
  200. package/dist/either/bool/falsy.mjs +1 -1
  201. package/dist/either/bool/truthy.cjs +2 -2
  202. package/dist/either/bool/truthy.mjs +2 -2
  203. package/dist/either/future/create.cjs +1 -1
  204. package/dist/either/future/create.mjs +1 -1
  205. package/dist/either/nullable/empty.cjs +1 -1
  206. package/dist/either/nullable/empty.mjs +1 -1
  207. package/dist/either/nullish/filled.cjs +2 -2
  208. package/dist/either/nullish/filled.mjs +2 -2
  209. package/dist/either/optional/filled.cjs +2 -2
  210. package/dist/either/optional/filled.mjs +2 -2
  211. package/dist/either/right/asyncPipe.cjs +1 -1
  212. package/dist/either/right/asyncPipe.mjs +1 -1
  213. package/dist/either/right/pipe.cjs +1 -1
  214. package/dist/either/right/pipe.mjs +1 -1
  215. package/dist/generator/asyncReduce.cjs +1 -1
  216. package/dist/generator/asyncReduce.d.ts +4 -3
  217. package/dist/generator/asyncReduce.mjs +1 -1
  218. package/dist/generator/reduce.d.ts +6 -7
  219. package/dist/index.cjs +2 -0
  220. package/dist/index.mjs +1 -0
  221. package/dist/string/types/index.d.ts +1 -0
  222. package/dist/string/types/templateLiteralContainLargeType.d.ts +5 -0
  223. package/package.json +3 -3
  224. package/dist/dataParser/parsers/record.d.ts +0 -30
  225. package/dist/dataParser/parsers/templateLiteral.cjs +0 -47
  226. package/dist/dataParser/parsers/templateLiteral.d.ts +0 -49
  227. package/dist/dataParser/parsers/templateLiteral.mjs +0 -44
@@ -1,14 +1,27 @@
1
- import { type NeverCoalescing, type Kind } from "../../common";
2
- import { type DataParserDefinition, type DataParser, type Output, type Input } from "../base";
3
- import { type MergeDefinition } from "../../dataParser/types";
4
- export interface DataParserDefinitionNullable extends DataParserDefinition<never> {
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer, type IsEqual } from "../../common";
2
+ import { type DataParserDefinition, type DataParser, type Output, type Input, 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
+ export interface DataParserNullableCheckerCustom<GenericInput extends unknown = unknown> {
7
+ }
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> {
5
10
  readonly inner: DataParser;
11
+ readonly coalescingValue: GenericCoalescingValue;
6
12
  }
7
13
  export declare const nullableKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/nullable", unknown>>;
8
- type _DataParserNullable<GenericDefinition extends DataParserDefinitionNullable> = (DataParser<GenericDefinition, Output<GenericDefinition["inner"]> | null, Input<GenericDefinition["inner"]> | null> & Kind<typeof nullableKind.definition>);
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>);
9
15
  export interface DataParserNullable<GenericDefinition extends DataParserDefinitionNullable = DataParserDefinitionNullable> extends _DataParserNullable<GenericDefinition> {
16
+ addChecker<GenericChecker extends readonly [
17
+ DataParserNullableCheckers<Output<this>>,
18
+ ...DataParserNullableCheckers<Output<this>>[]
19
+ ]>(...args: FixDeepFunctionInfer<readonly [
20
+ DataParserNullableCheckers<Output<this>>,
21
+ ...DataParserNullableCheckers<Output<this>>[]
22
+ ], GenericChecker>): DataParserNullable<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
10
23
  }
11
- export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionNullable, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullable<MergeDefinition<DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
24
+ export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionNullable<Output<GenericDataParser> | null>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullable<MergeDefinition<DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
12
25
  inner: GenericDataParser;
13
26
  }>>;
14
27
  export {};
@@ -8,17 +8,18 @@ function nullable(inner, definition) {
8
8
  errorMessage: definition?.errorMessage,
9
9
  checkers: definition?.checkers ?? [],
10
10
  inner,
11
+ coalescingValue: definition?.coalescingValue ?? null,
11
12
  },
12
13
  }, {
13
14
  sync: (data, error, self) => {
14
15
  if (data === null) {
15
- return data;
16
+ return self.definition.coalescingValue;
16
17
  }
17
18
  return self.definition.inner.exec(data, error);
18
19
  },
19
20
  async: async (data, error, self) => {
20
21
  if (data === null) {
21
- return data;
22
+ return self.definition.coalescingValue;
22
23
  }
23
24
  return self.definition.inner.asyncExec(data, error);
24
25
  },
@@ -5,9 +5,9 @@ var error = require('../../../error.cjs');
5
5
  var index = require('../index.cjs');
6
6
  var kind = require('../../../kind.cjs');
7
7
 
8
- const dataParserCheckerIntKind = kind.createDataParserKind("checker-number-int");
8
+ const checkerIntKind = kind.createDataParserKind("checker-number-int");
9
9
  function checkerInt(definition = {}) {
10
- return base.dataParserCheckerInit(dataParserCheckerIntKind, {
10
+ return base.dataParserCheckerInit(checkerIntKind, {
11
11
  definition,
12
12
  }, (data) => {
13
13
  if (Number.isInteger(data)) {
@@ -23,5 +23,5 @@ function int(definition) {
23
23
  }
24
24
 
25
25
  exports.checkerInt = checkerInt;
26
- exports.dataParserCheckerIntKind = dataParserCheckerIntKind;
26
+ exports.checkerIntKind = checkerIntKind;
27
27
  exports.int = int;
@@ -2,8 +2,8 @@ import { type Kind } from "../../../../common";
2
2
  import { type DataParserCheckerDefinition, type DataParserChecker } from "../../../../dataParser/base";
3
3
  export interface DataParserCheckerDefinitionInt extends DataParserCheckerDefinition {
4
4
  }
5
- export declare const dataParserCheckerIntKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-int", unknown>>;
6
- type _DataParserCheckerInt = (Kind<typeof dataParserCheckerIntKind.definition> & DataParserChecker<DataParserCheckerDefinitionInt, number>);
5
+ export declare const checkerIntKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-int", unknown>>;
6
+ type _DataParserCheckerInt = (Kind<typeof checkerIntKind.definition> & DataParserChecker<DataParserCheckerDefinitionInt, number>);
7
7
  export interface DataParserCheckerInt extends _DataParserCheckerInt {
8
8
  }
9
9
  export declare function checkerInt(definition?: Partial<DataParserCheckerDefinitionInt>): DataParserCheckerInt;
@@ -3,9 +3,9 @@ import { SymbolDataParserErrorIssue } from '../../../error.mjs';
3
3
  import { number } from '../index.mjs';
4
4
  import { createDataParserKind } from '../../../kind.mjs';
5
5
 
6
- const dataParserCheckerIntKind = createDataParserKind("checker-number-int");
6
+ const checkerIntKind = createDataParserKind("checker-number-int");
7
7
  function checkerInt(definition = {}) {
8
- return dataParserCheckerInit(dataParserCheckerIntKind, {
8
+ return dataParserCheckerInit(checkerIntKind, {
9
9
  definition,
10
10
  }, (data) => {
11
11
  if (Number.isInteger(data)) {
@@ -20,4 +20,4 @@ function int(definition) {
20
20
  });
21
21
  }
22
22
 
23
- export { checkerInt, dataParserCheckerIntKind, int };
23
+ export { checkerInt, checkerIntKind, int };
@@ -4,9 +4,9 @@ var base = require('../../../base.cjs');
4
4
  var error = require('../../../error.cjs');
5
5
  var kind = require('../../../kind.cjs');
6
6
 
7
- const dataParserCheckerNumberMaxKind = kind.createDataParserKind("checker-number-max");
7
+ const checkerNumberMaxKind = kind.createDataParserKind("checker-number-max");
8
8
  function checkerNumberMax(max, definition = {}) {
9
- return base.dataParserCheckerInit(dataParserCheckerNumberMaxKind, {
9
+ return base.dataParserCheckerInit(checkerNumberMaxKind, {
10
10
  definition: {
11
11
  ...definition,
12
12
  max,
@@ -15,4 +15,4 @@ function checkerNumberMax(max, definition = {}) {
15
15
  }
16
16
 
17
17
  exports.checkerNumberMax = checkerNumberMax;
18
- exports.dataParserCheckerNumberMaxKind = dataParserCheckerNumberMaxKind;
18
+ exports.checkerNumberMaxKind = checkerNumberMaxKind;
@@ -3,8 +3,8 @@ import { type DataParserCheckerDefinition, type DataParserChecker } from "../../
3
3
  export interface DataParserCheckerDefinitionNumberMax extends DataParserCheckerDefinition {
4
4
  max: number;
5
5
  }
6
- export declare const dataParserCheckerNumberMaxKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-max", unknown>>;
7
- type _DataParserCheckerNumberMax = (Kind<typeof dataParserCheckerNumberMaxKind.definition> & DataParserChecker<DataParserCheckerDefinitionNumberMax, number>);
6
+ export declare const checkerNumberMaxKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-max", unknown>>;
7
+ type _DataParserCheckerNumberMax = (Kind<typeof checkerNumberMaxKind.definition> & DataParserChecker<DataParserCheckerDefinitionNumberMax, number>);
8
8
  export interface DataParserCheckerNumberMax extends _DataParserCheckerNumberMax {
9
9
  }
10
10
  export declare function checkerNumberMax(max: number, definition?: Partial<Omit<DataParserCheckerDefinitionNumberMax, "max">>): DataParserCheckerNumberMax;
@@ -2,9 +2,9 @@ import { dataParserCheckerInit } from '../../../base.mjs';
2
2
  import { SymbolDataParserErrorIssue } from '../../../error.mjs';
3
3
  import { createDataParserKind } from '../../../kind.mjs';
4
4
 
5
- const dataParserCheckerNumberMaxKind = createDataParserKind("checker-number-max");
5
+ const checkerNumberMaxKind = createDataParserKind("checker-number-max");
6
6
  function checkerNumberMax(max, definition = {}) {
7
- return dataParserCheckerInit(dataParserCheckerNumberMaxKind, {
7
+ return dataParserCheckerInit(checkerNumberMaxKind, {
8
8
  definition: {
9
9
  ...definition,
10
10
  max,
@@ -12,4 +12,4 @@ function checkerNumberMax(max, definition = {}) {
12
12
  }, (value, self) => value <= self.definition.max ? value : SymbolDataParserErrorIssue);
13
13
  }
14
14
 
15
- export { checkerNumberMax, dataParserCheckerNumberMaxKind };
15
+ export { checkerNumberMax, checkerNumberMaxKind };
@@ -4,9 +4,9 @@ var base = require('../../../base.cjs');
4
4
  var error = require('../../../error.cjs');
5
5
  var kind = require('../../../kind.cjs');
6
6
 
7
- const dataParserCheckerNumberMinKind = kind.createDataParserKind("checker-number-min");
7
+ const checkerNumberMinKind = kind.createDataParserKind("checker-number-min");
8
8
  function checkerNumberMin(min, definition = {}) {
9
- return base.dataParserCheckerInit(dataParserCheckerNumberMinKind, {
9
+ return base.dataParserCheckerInit(checkerNumberMinKind, {
10
10
  definition: {
11
11
  ...definition,
12
12
  min,
@@ -15,4 +15,4 @@ function checkerNumberMin(min, definition = {}) {
15
15
  }
16
16
 
17
17
  exports.checkerNumberMin = checkerNumberMin;
18
- exports.dataParserCheckerNumberMinKind = dataParserCheckerNumberMinKind;
18
+ exports.checkerNumberMinKind = checkerNumberMinKind;
@@ -3,8 +3,8 @@ import { type DataParserCheckerDefinition, type DataParserChecker } from "../../
3
3
  export interface DataParserCheckerDefinitionNumberMin extends DataParserCheckerDefinition {
4
4
  min: number;
5
5
  }
6
- export declare const dataParserCheckerNumberMinKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-min", unknown>>;
7
- type _DataParserCheckerNumberMin = (Kind<typeof dataParserCheckerNumberMinKind.definition> & DataParserChecker<DataParserCheckerDefinitionNumberMin, number>);
6
+ export declare const checkerNumberMinKind: import("../../../../common").KindHandler<import("../../../../common").KindDefinition<"@DuplojsUtilsDataParser/checker-number-min", unknown>>;
7
+ type _DataParserCheckerNumberMin = (Kind<typeof checkerNumberMinKind.definition> & DataParserChecker<DataParserCheckerDefinitionNumberMin, number>);
8
8
  export interface DataParserCheckerNumberMin extends _DataParserCheckerNumberMin {
9
9
  }
10
10
  export declare function checkerNumberMin(min: number, definition?: Partial<Omit<DataParserCheckerDefinitionNumberMin, "min">>): DataParserCheckerNumberMin;
@@ -2,9 +2,9 @@ import { dataParserCheckerInit } from '../../../base.mjs';
2
2
  import { SymbolDataParserErrorIssue } from '../../../error.mjs';
3
3
  import { createDataParserKind } from '../../../kind.mjs';
4
4
 
5
- const dataParserCheckerNumberMinKind = createDataParserKind("checker-number-min");
5
+ const checkerNumberMinKind = createDataParserKind("checker-number-min");
6
6
  function checkerNumberMin(min, definition = {}) {
7
- return dataParserCheckerInit(dataParserCheckerNumberMinKind, {
7
+ return dataParserCheckerInit(checkerNumberMinKind, {
8
8
  definition: {
9
9
  ...definition,
10
10
  min,
@@ -12,4 +12,4 @@ function checkerNumberMin(min, definition = {}) {
12
12
  }, (value, self) => value >= self.definition.min ? value : SymbolDataParserErrorIssue);
13
13
  }
14
14
 
15
- export { checkerNumberMin, dataParserCheckerNumberMinKind };
15
+ export { checkerNumberMin, checkerNumberMinKind };
@@ -1,9 +1,13 @@
1
- import { type NeverCoalescing, type Kind } from "../../../common";
2
- import { type DataParserDefinition, type DataParser } from "../../base";
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer } from "../../../common";
2
+ import { type DataParserDefinition, type DataParser, type DataParserChecker } from "../../base";
3
3
  import { type AddCheckersToDefinition, type MergeDefinition } from "../../../dataParser/types";
4
4
  import { type DataParserCheckerInt, type DataParserCheckerNumberMin, type DataParserCheckerNumberMax } from "./checkers";
5
+ import { type CheckerRefineImplementation } from "../refine";
6
+ import { type GetPropsWithValueExtends } from "../../../object";
5
7
  export * from "./checkers";
6
- export type DataParserNumberCheckers = (DataParserCheckerInt | DataParserCheckerNumberMin | DataParserCheckerNumberMax);
8
+ export interface DataParserNumberCheckerCustom {
9
+ }
10
+ export type DataParserNumberCheckers = (DataParserNumberCheckerCustom[GetPropsWithValueExtends<DataParserNumberCheckerCustom, DataParserChecker>] | DataParserCheckerInt | DataParserCheckerNumberMin | DataParserCheckerNumberMax | CheckerRefineImplementation<number>);
7
11
  export interface DataParserDefinitionNumber extends DataParserDefinition<DataParserNumberCheckers> {
8
12
  readonly coerce: boolean;
9
13
  }
@@ -13,6 +17,9 @@ export interface DataParserNumber<GenericDefinition extends DataParserDefinition
13
17
  addChecker<GenericChecker extends readonly [
14
18
  DataParserNumberCheckers,
15
19
  ...DataParserNumberCheckers[]
16
- ]>(...args: GenericChecker): DataParserNumber<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
20
+ ]>(...args: FixDeepFunctionInfer<readonly [
21
+ DataParserNumberCheckers,
22
+ ...DataParserNumberCheckers[]
23
+ ], GenericChecker>): DataParserNumber<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
17
24
  }
18
25
  export declare function number<const GenericDefinition extends Partial<DataParserDefinitionNumber> = never>(definition?: GenericDefinition): DataParserNumber<MergeDefinition<DataParserDefinitionNumber, NeverCoalescing<GenericDefinition, {}>>>;
@@ -1,7 +1,9 @@
1
- import { type Kind, type IsEqual, type NeverCoalescing, type Memoized } from "../../common";
2
- import { dataParserKind, type Input, type Output, type DataParser, type DataParserDefinition } from "../base";
3
- import { type MergeDefinition } from "../types";
1
+ import { type Kind, type IsEqual, type NeverCoalescing, type Memoized, type FixDeepFunctionInfer } from "../../common";
2
+ import { dataParserKind, type Input, type Output, type DataParser, type DataParserDefinition, type DataParserChecker } from "../base";
3
+ import { type AddCheckersToDefinition, type MergeDefinition } from "../types";
4
4
  import * as DObject from "../../object";
5
+ import { type GetPropsWithValueExtends } from "../../object";
6
+ import { type CheckerRefineImplementation } from "./refine";
5
7
  export type DataParserObjectShape = Readonly<Record<string, DataParser>>;
6
8
  export type DataParserObjectShapeOutput<GenericShape extends DataParserObjectShape> = IsEqual<GenericShape, DataParserObjectShape> extends true ? DataParserObjectShape : {
7
9
  -readonly [Prop in keyof GenericShape as GenericShape[Prop] extends Kind<typeof dataParserKind.definition> ? Prop : never]: Output<GenericShape[Prop]>;
@@ -9,7 +11,10 @@ export type DataParserObjectShapeOutput<GenericShape extends DataParserObjectSha
9
11
  export type DataParserObjectShapeInput<GenericShape extends DataParserObjectShape> = IsEqual<GenericShape, DataParserObjectShape> extends true ? DataParserObjectShape : {
10
12
  -readonly [Prop in keyof GenericShape as GenericShape[Prop] extends Kind<typeof dataParserKind.definition> ? Prop : never]: Input<GenericShape[Prop]>;
11
13
  } extends infer InferredResult extends object ? DObject.PartialKeys<InferredResult, DObject.GetPropsWithValueExtends<InferredResult, undefined>> : never;
12
- export interface DataParserDefinitionObject extends DataParserDefinition<never> {
14
+ export interface DataParserObjectCheckerCustom<GenericInput extends DataParserObjectShape = DataParserObjectShape> {
15
+ }
16
+ export type DataParserObjectCheckers<GenericInput extends DataParserObjectShape = DataParserObjectShape> = (DataParserObjectCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserObjectCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
17
+ export interface DataParserDefinitionObject extends DataParserDefinition<DataParserObjectCheckers> {
13
18
  readonly shape: DataParserObjectShape;
14
19
  readonly optimizedShape: Memoized<{
15
20
  readonly key: string;
@@ -19,6 +24,13 @@ export interface DataParserDefinitionObject extends DataParserDefinition<never>
19
24
  export declare const objectKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/object", unknown>>;
20
25
  type _DataParserObject<GenericDefinition extends DataParserDefinitionObject> = (DataParser<GenericDefinition, DataParserObjectShapeOutput<GenericDefinition["shape"]>, DataParserObjectShapeInput<GenericDefinition["shape"]>> & Kind<typeof objectKind.definition>);
21
26
  export interface DataParserObject<GenericDefinition extends DataParserDefinitionObject = DataParserDefinitionObject> extends _DataParserObject<GenericDefinition> {
27
+ addChecker<GenericChecker extends readonly [
28
+ DataParserObjectCheckers<Output<this>>,
29
+ ...DataParserObjectCheckers<Output<this>>[]
30
+ ]>(...args: FixDeepFunctionInfer<readonly [
31
+ DataParserObjectCheckers<Output<this>>,
32
+ ...DataParserObjectCheckers<Output<this>>[]
33
+ ], GenericChecker>): DataParserObject<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
22
34
  }
23
35
  export declare function object<const GenericShape extends DataParserObjectShape, const GenericDefinition extends Partial<Omit<DataParserDefinitionObject, "shape">> = never>(shape: GenericShape, definition?: GenericDefinition): DataParserObject<MergeDefinition<DataParserDefinitionObject, NeverCoalescing<GenericDefinition, {}> & {
24
36
  shape: GenericShape;
@@ -10,17 +10,18 @@ function optional(inner, definition) {
10
10
  errorMessage: definition?.errorMessage,
11
11
  checkers: definition?.checkers ?? [],
12
12
  inner,
13
+ coalescingValue: definition?.coalescingValue,
13
14
  },
14
15
  }, {
15
16
  sync: (data, error, self) => {
16
17
  if (data === undefined) {
17
- return data;
18
+ return self.definition.coalescingValue;
18
19
  }
19
20
  return self.definition.inner.exec(data, error);
20
21
  },
21
22
  async: async (data, error, self) => {
22
23
  if (data === undefined) {
23
- return data;
24
+ return self.definition.coalescingValue;
24
25
  }
25
26
  return self.definition.inner.asyncExec(data, error);
26
27
  },
@@ -1,14 +1,27 @@
1
- import { type NeverCoalescing, type Kind } from "../../common";
2
- import { type DataParserDefinition, type DataParser, type Output, type Input } from "../base";
3
- import { type MergeDefinition } from "../../dataParser/types";
4
- export interface DataParserDefinitionOptional extends DataParserDefinition<never> {
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer, type IsEqual } from "../../common";
2
+ import { type DataParserDefinition, type DataParser, type Output, type Input, 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
+ export interface DataParserOptionalCheckerCustom<GenericInput extends unknown = unknown> {
7
+ }
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> {
5
10
  readonly inner: DataParser;
11
+ readonly coalescingValue: GenericCoalescingValue;
6
12
  }
7
13
  export declare const optionalKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/optional", unknown>>;
8
- type _DataParserOptional<GenericDefinition extends DataParserDefinitionOptional> = (DataParser<GenericDefinition, Output<GenericDefinition["inner"]> | undefined, Input<GenericDefinition["inner"]> | undefined> & Kind<typeof optionalKind.definition>);
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>);
9
15
  export interface DataParserOptional<GenericDefinition extends DataParserDefinitionOptional = DataParserDefinitionOptional> extends _DataParserOptional<GenericDefinition> {
16
+ addChecker<GenericChecker extends readonly [
17
+ DataParserOptionalCheckers<Output<this>>,
18
+ ...DataParserOptionalCheckers<Output<this>>[]
19
+ ]>(...args: FixDeepFunctionInfer<readonly [
20
+ DataParserOptionalCheckers<Output<this>>,
21
+ ...DataParserOptionalCheckers<Output<this>>[]
22
+ ], GenericChecker>): DataParserOptional<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
10
23
  }
11
- export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
24
+ export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional<Output<GenericDataParser> | undefined>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
12
25
  inner: GenericDataParser;
13
26
  }>>;
14
27
  export {};
@@ -8,17 +8,18 @@ function optional(inner, definition) {
8
8
  errorMessage: definition?.errorMessage,
9
9
  checkers: definition?.checkers ?? [],
10
10
  inner,
11
+ coalescingValue: definition?.coalescingValue,
11
12
  },
12
13
  }, {
13
14
  sync: (data, error, self) => {
14
15
  if (data === undefined) {
15
- return data;
16
+ return self.definition.coalescingValue;
16
17
  }
17
18
  return self.definition.inner.exec(data, error);
18
19
  },
19
20
  async: async (data, error, self) => {
20
21
  if (data === undefined) {
21
- return data;
22
+ return self.definition.coalescingValue;
22
23
  }
23
24
  return self.definition.inner.asyncExec(data, error);
24
25
  },
@@ -1,13 +1,25 @@
1
- import { type NeverCoalescing, type Kind } from "../../common";
2
- import { type DataParserDefinition, type DataParser, type Output, type Input } from "../base";
3
- import { type MergeDefinition } from "../../dataParser/types";
4
- export interface DataParserDefinitionPipe extends DataParserDefinition<never> {
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer } from "../../common";
2
+ import { type DataParserDefinition, type DataParser, type Output, type Input, 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
+ export interface DataParserPipeCheckerCustom<GenericInput extends unknown = unknown> {
7
+ }
8
+ export type DataParserPipeCheckers<GenericInput extends unknown = unknown> = (DataParserPipeCheckerCustom<GenericInput>[GetPropsWithValueExtends<DataParserPipeCheckerCustom<GenericInput>, DataParserChecker>] | CheckerRefineImplementation<GenericInput>);
9
+ export interface DataParserDefinitionPipe extends DataParserDefinition<DataParserPipeCheckers> {
5
10
  readonly input: DataParser;
6
11
  readonly output: DataParser;
7
12
  }
8
13
  export declare const pipeKind: import("../../common").KindHandler<import("../../common").KindDefinition<"@DuplojsUtilsDataParser/pipe", unknown>>;
9
14
  type _DataParserPipe<GenericDefinition extends DataParserDefinitionPipe> = (DataParser<GenericDefinition, Output<GenericDefinition["output"]>, Input<GenericDefinition["input"]>> & Kind<typeof pipeKind.definition>);
10
15
  export interface DataParserPipe<GenericDefinition extends DataParserDefinitionPipe = DataParserDefinitionPipe> extends _DataParserPipe<GenericDefinition> {
16
+ addChecker<GenericChecker extends readonly [
17
+ DataParserPipeCheckers<Output<this>>,
18
+ ...DataParserPipeCheckers<Output<this>>[]
19
+ ]>(...args: FixDeepFunctionInfer<readonly [
20
+ DataParserPipeCheckers<Output<this>>,
21
+ ...DataParserPipeCheckers<Output<this>>[]
22
+ ], GenericChecker>): DataParserPipe<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
11
23
  }
12
24
  export declare function pipe<GenericInput extends DataParser, GenericOutput extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionPipe, "input" | "output">> = never>(input: GenericInput, output: GenericOutput, definition?: GenericDefinition): DataParserPipe<MergeDefinition<DataParserDefinitionPipe, NeverCoalescing<GenericDefinition, {}> & {
13
25
  input: GenericInput;
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ var pipe = require('../../../common/pipe.cjs');
4
+ var innerPipe = require('../../../common/innerPipe.cjs');
5
+ var when$1 = require('../../../common/when.cjs');
6
+ var isType = require('../../../common/isType.cjs');
7
+ var or = require('../../../common/or.cjs');
8
+ var justReturn = require('../../../common/justReturn.cjs');
9
+ var filter = require('../../../array/filter.cjs');
10
+ var reduce = require('../../../array/reduce.cjs');
11
+ var includes = require('../../../array/includes.cjs');
12
+ var map = require('../../../array/map.cjs');
13
+ var flat = require('../../../array/flat.cjs');
14
+ var flatMap = require('../../../array/flatMap.cjs');
15
+ var notIncludes = require('../../../array/notIncludes.cjs');
16
+ require('../../../common/globalStore.cjs');
17
+ require('../../../common/builder.cjs');
18
+ require('../../../pattern/result.cjs');
19
+ var exhaustive = require('../../../pattern/exhaustive.cjs');
20
+ var otherwise = require('../../../pattern/otherwise.cjs');
21
+ var when = require('../../../pattern/when.cjs');
22
+ var concat = require('../../../string/concat.cjs');
23
+ var index$1 = require('../string/index.cjs');
24
+ var index$2 = require('../number/index.cjs');
25
+ var literal = require('../literal.cjs');
26
+ var union = require('../union.cjs');
27
+ var index = require('../templateLiteral/index.cjs');
28
+ var index$3 = require('../bigint/index.cjs');
29
+ var boolean = require('../boolean.cjs');
30
+ var empty = require('../empty.cjs');
31
+ var nil = require('../nil.cjs');
32
+
33
+ function findRecordRequiredKeyOnTemplateLiteralPart(templatePart) {
34
+ return pipe.pipe(templatePart, map.map(innerPipe.innerPipe(when.when((value) => index$1.stringKind.has(value)
35
+ || index$2.numberKind.has(value)
36
+ || index$3.bigIntKind.has(value), justReturn.justReturn(null)), when.when(or.or([
37
+ isType.isType("bigint"),
38
+ isType.isType("boolean"),
39
+ isType.isType("null"),
40
+ isType.isType("number"),
41
+ isType.isType("string"),
42
+ isType.isType("undefined"),
43
+ ]), innerPipe.innerPipe(when$1.when(isType.isType("bigint"), (value) => `${value}n`), String)), when.when(literal.literalKind.has, (value) => findRecordRequiredKey(value)), when.when(index.templateLiteralKind.has, (value) => findRecordRequiredKeyOnTemplateLiteralPart(value.definition.template)), when.when(boolean.booleanKind.has, justReturn.justReturn(["true", "false"])), when.when(empty.emptyKind.has, justReturn.justReturn("undefined")), when.when(nil.nilKind.has, justReturn.justReturn("null")), when.when(union.unionKind.has, (dataParser) => pipe.pipe(dataParser.definition.options, map.map((element) => findRecordRequiredKeyOnTemplateLiteralPart([element])), when.when(notIncludes.notIncludes(null), flat.flat), otherwise.otherwise(justReturn.justReturn(null)))), exhaustive.exhaustive)), reduce.reduce(reduce.reduceFrom([""]), ({ lastValue, element, exit, next }) => pipe.pipe(element, when.when(isType.isType("null"), justReturn.justReturn(exit(null))), when.when(isType.isType("string"), (element) => next(map.map(lastValue, (value) => concat.concat(value, element)))), when.when(isType.isType("array"), (elements) => next(flatMap.flatMap(lastValue, (value) => map.map(elements, (subValue) => concat.concat(value, subValue))))), exhaustive.exhaustive)));
44
+ }
45
+ function findRecordRequiredKey(keyParser) {
46
+ return pipe.pipe(keyParser, when.when((value) => index$1.stringKind.has(value) || index$2.numberKind.has(value), justReturn.justReturn(null)), when.when(literal.literalKind.has, (dataParser) => pipe.pipe(dataParser.definition.value, map.map(innerPipe.innerPipe(when$1.when(isType.isType("bigint"), (value) => `${value}n`), String)))), when.when(union.unionKind.has, (dataParser) => pipe.pipe(dataParser.definition.options, map.map(findRecordRequiredKey), when.when(includes.includes(null), justReturn.justReturn(null)), otherwise.otherwise(innerPipe.innerPipe(filter.filter(isType.isType("array")), flat.flat)))), when.when(index.templateLiteralKind.has, (dataParser) => findRecordRequiredKeyOnTemplateLiteralPart(dataParser.definition.template)), exhaustive.exhaustive);
47
+ }
48
+
49
+ exports.findRecordRequiredKey = findRecordRequiredKey;
50
+ exports.findRecordRequiredKeyOnTemplateLiteralPart = findRecordRequiredKeyOnTemplateLiteralPart;
@@ -0,0 +1,4 @@
1
+ import { type DataParserRecordKey } from ".";
2
+ import { type TemplateLiteralParts } from "../templateLiteral";
3
+ export declare function findRecordRequiredKeyOnTemplateLiteralPart(templatePart: readonly TemplateLiteralParts[]): string[] | null;
4
+ export declare function findRecordRequiredKey(keyParser: DataParserRecordKey): string[] | null;
@@ -0,0 +1,47 @@
1
+ import { pipe } from '../../../common/pipe.mjs';
2
+ import { innerPipe } from '../../../common/innerPipe.mjs';
3
+ import { when as when$1 } from '../../../common/when.mjs';
4
+ import { isType } from '../../../common/isType.mjs';
5
+ import { or } from '../../../common/or.mjs';
6
+ import { justReturn } from '../../../common/justReturn.mjs';
7
+ import { filter } from '../../../array/filter.mjs';
8
+ import { reduce, reduceFrom } from '../../../array/reduce.mjs';
9
+ import { includes } from '../../../array/includes.mjs';
10
+ import { map } from '../../../array/map.mjs';
11
+ import { flat } from '../../../array/flat.mjs';
12
+ import { flatMap } from '../../../array/flatMap.mjs';
13
+ import { notIncludes } from '../../../array/notIncludes.mjs';
14
+ import '../../../common/globalStore.mjs';
15
+ import '../../../common/builder.mjs';
16
+ import '../../../pattern/result.mjs';
17
+ import { exhaustive } from '../../../pattern/exhaustive.mjs';
18
+ import { otherwise } from '../../../pattern/otherwise.mjs';
19
+ import { when } from '../../../pattern/when.mjs';
20
+ import { concat } from '../../../string/concat.mjs';
21
+ import { stringKind } from '../string/index.mjs';
22
+ import { numberKind } from '../number/index.mjs';
23
+ import { literalKind } from '../literal.mjs';
24
+ import { unionKind } from '../union.mjs';
25
+ import { templateLiteralKind } from '../templateLiteral/index.mjs';
26
+ import { bigIntKind } from '../bigint/index.mjs';
27
+ import { booleanKind } from '../boolean.mjs';
28
+ import { emptyKind } from '../empty.mjs';
29
+ import { nilKind } from '../nil.mjs';
30
+
31
+ function findRecordRequiredKeyOnTemplateLiteralPart(templatePart) {
32
+ return pipe(templatePart, map(innerPipe(when((value) => stringKind.has(value)
33
+ || numberKind.has(value)
34
+ || bigIntKind.has(value), justReturn(null)), when(or([
35
+ isType("bigint"),
36
+ isType("boolean"),
37
+ isType("null"),
38
+ isType("number"),
39
+ isType("string"),
40
+ isType("undefined"),
41
+ ]), innerPipe(when$1(isType("bigint"), (value) => `${value}n`), String)), when(literalKind.has, (value) => findRecordRequiredKey(value)), when(templateLiteralKind.has, (value) => findRecordRequiredKeyOnTemplateLiteralPart(value.definition.template)), when(booleanKind.has, justReturn(["true", "false"])), when(emptyKind.has, justReturn("undefined")), when(nilKind.has, justReturn("null")), when(unionKind.has, (dataParser) => pipe(dataParser.definition.options, map((element) => findRecordRequiredKeyOnTemplateLiteralPart([element])), when(notIncludes(null), flat), otherwise(justReturn(null)))), exhaustive)), reduce(reduceFrom([""]), ({ lastValue, element, exit, next }) => pipe(element, when(isType("null"), justReturn(exit(null))), when(isType("string"), (element) => next(map(lastValue, (value) => concat(value, element)))), when(isType("array"), (elements) => next(flatMap(lastValue, (value) => map(elements, (subValue) => concat(value, subValue))))), exhaustive)));
42
+ }
43
+ function findRecordRequiredKey(keyParser) {
44
+ return pipe(keyParser, when((value) => stringKind.has(value) || numberKind.has(value), justReturn(null)), when(literalKind.has, (dataParser) => pipe(dataParser.definition.value, map(innerPipe(when$1(isType("bigint"), (value) => `${value}n`), String)))), when(unionKind.has, (dataParser) => pipe(dataParser.definition.options, map(findRecordRequiredKey), when(includes(null), justReturn(null)), otherwise(innerPipe(filter(isType("array")), flat)))), when(templateLiteralKind.has, (dataParser) => findRecordRequiredKeyOnTemplateLiteralPart(dataParser.definition.template)), exhaustive);
45
+ }
46
+
47
+ export { findRecordRequiredKey, findRecordRequiredKeyOnTemplateLiteralPart };
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var base = require('../base.cjs');
4
- var error = require('../error.cjs');
5
- var kind = require('../kind.cjs');
3
+ var base = require('../../base.cjs');
4
+ var error = require('../../error.cjs');
5
+ var kind = require('../../kind.cjs');
6
+ var findRecordRequiredKey = require('./findRecordRequiredKey.cjs');
6
7
 
7
8
  const recordKind = kind.createDataParserKind("record");
8
9
  function record(key, value, definition) {
@@ -12,6 +13,7 @@ function record(key, value, definition) {
12
13
  checkers: definition?.checkers ?? [],
13
14
  key,
14
15
  value,
16
+ requireKey: findRecordRequiredKey.findRecordRequiredKey(key),
15
17
  },
16
18
  }, {
17
19
  sync: (data, error$1, self) => {
@@ -43,6 +45,13 @@ function record(key, value, definition) {
43
45
  }
44
46
  }
45
47
  error.popErrorPath(error$1);
48
+ if (output === base.SymbolDataParserError) {
49
+ return output;
50
+ }
51
+ if (self.definition.requireKey
52
+ && self.definition.requireKey.length !== Object.keys(output).length) {
53
+ return error.SymbolDataParserErrorIssue;
54
+ }
46
55
  return output;
47
56
  },
48
57
  async: async (data, error$1, self) => {
@@ -74,10 +83,19 @@ function record(key, value, definition) {
74
83
  }
75
84
  }
76
85
  error.popErrorPath(error$1);
86
+ if (output === base.SymbolDataParserError) {
87
+ return output;
88
+ }
89
+ if (self.definition.requireKey
90
+ && self.definition.requireKey.length !== Object.keys(output).length) {
91
+ return error.SymbolDataParserErrorIssue;
92
+ }
77
93
  return output;
78
94
  },
79
95
  });
80
96
  }
81
97
 
98
+ exports.findRecordRequiredKey = findRecordRequiredKey.findRecordRequiredKey;
99
+ exports.findRecordRequiredKeyOnTemplateLiteralPart = findRecordRequiredKey.findRecordRequiredKeyOnTemplateLiteralPart;
82
100
  exports.record = record;
83
101
  exports.recordKind = recordKind;
@@ -0,0 +1,42 @@
1
+ import { type NeverCoalescing, type Kind, type FixDeepFunctionInfer, type Adaptor } from "../../../common";
2
+ import { type DataParserDefinition, type DataParser, type Output, type Input, type DataParserChecker } from "../../base";
3
+ import { type AddCheckersToDefinition, type MergeDefinition } from "../../../dataParser/types";
4
+ import { type DataParserString } from "../string";
5
+ import { type DataParserTemplateLiteral } from "../templateLiteral";
6
+ import { type DataParserLiteral } from "../literal";
7
+ import { type DataParserDefinitionNumber, type DataParserNumber } from "../number";
8
+ import { type DataParserDefinitionUnion, type DataParserUnion } from "../union";
9
+ import { type CheckerRefineImplementation } from "../refine";
10
+ import { type TemplateLiteralContainLargeType } from "../../../string";
11
+ import { type GetPropsWithValueExtends } from "../../../object";
12
+ export * from "./findRecordRequiredKey";
13
+ export type DataParserRecordKey = (DataParserString | DataParserTemplateLiteral | DataParserLiteral | DataParserNumber<DataParserDefinitionNumber & {
14
+ coerce: true;
15
+ }> | DataParserUnion<DataParserDefinitionUnion & {
16
+ options: DataParserRecordKey[];
17
+ }>);
18
+ export interface DataParserRecordCheckerCustom<GenericInput extends Record<string, unknown> = Record<string, unknown>> {
19
+ }
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> {
22
+ readonly key: DataParserRecordKey;
23
+ readonly value: DataParser;
24
+ readonly requireKey: string[] | null;
25
+ }
26
+ export declare const recordKind: import("../../../common").KindHandler<import("../../../common").KindDefinition<"@DuplojsUtilsDataParser/record", unknown>>;
27
+ export type DataParserRecordShapeOutput<GenericDataParserKey extends DataParserRecordKey, GenericDataParserValue extends DataParser> = Extract<Record<Output<GenericDataParserKey> extends infer InferredKey extends string | number ? `${InferredKey}` : never, Output<GenericDataParserValue> extends infer InferredValue ? InferredValue : never>, any>;
28
+ export type DataParserRecordShapeInput<GenericDataParserKey extends DataParserRecordKey, GenericDataParserValue extends DataParser> = Extract<Record<Input<GenericDataParserKey> extends infer InferredKey extends string | number ? `${InferredKey}` : never, Input<GenericDataParserValue> extends infer InferredValue ? InferredValue : never>, any>;
29
+ type _DataParserRecord<GenericDefinition extends DataParserDefinitionRecord> = (DataParser<GenericDefinition, DataParserRecordShapeOutput<GenericDefinition["key"], GenericDefinition["value"]> extends infer InferredOutput extends Record<string, unknown> ? TemplateLiteralContainLargeType<Adaptor<keyof InferredOutput, string>> extends true ? Partial<InferredOutput> : InferredOutput : never, DataParserRecordShapeInput<GenericDefinition["key"], GenericDefinition["value"]> extends infer InferredInput extends Record<string, unknown> ? TemplateLiteralContainLargeType<Adaptor<keyof InferredInput, string>> extends true ? Partial<InferredInput> : InferredInput : never> & Kind<typeof recordKind.definition>);
30
+ export interface DataParserRecord<GenericDefinition extends DataParserDefinitionRecord = DataParserDefinitionRecord> extends _DataParserRecord<GenericDefinition> {
31
+ addChecker<GenericChecker extends readonly [
32
+ DataParserRecordCheckers<Output<this>>,
33
+ ...DataParserRecordCheckers<Output<this>>[]
34
+ ]>(...args: FixDeepFunctionInfer<readonly [
35
+ DataParserRecordCheckers<Output<this>>,
36
+ ...DataParserRecordCheckers<Output<this>>[]
37
+ ], GenericChecker>): DataParserRecord<AddCheckersToDefinition<GenericDefinition, GenericChecker>>;
38
+ }
39
+ export declare function record<GenericDataParserKey extends DataParserRecordKey, GenericDataParserValue extends DataParser, const GenericDefinition extends Partial<DataParserDefinitionRecord> = never>(key: GenericDataParserKey, value: GenericDataParserValue, definition?: GenericDefinition): DataParserRecord<MergeDefinition<DataParserDefinitionRecord, NeverCoalescing<GenericDefinition, {}> & {
40
+ key: GenericDataParserKey;
41
+ value: GenericDataParserValue;
42
+ }>>;