@duplojs/utils 1.4.51 → 1.4.53

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 (82) hide show
  1. package/dist/clean/constraint/base.cjs +5 -2
  2. package/dist/clean/constraint/base.d.ts +3 -0
  3. package/dist/clean/constraint/base.mjs +5 -2
  4. package/dist/clean/constraint/defaultConstraint/number.cjs +14 -0
  5. package/dist/clean/constraint/defaultConstraint/number.d.ts +61 -0
  6. package/dist/clean/constraint/defaultConstraint/number.mjs +13 -1
  7. package/dist/clean/constraint/defaultConstraint/string.cjs +16 -0
  8. package/dist/clean/constraint/defaultConstraint/string.d.ts +61 -0
  9. package/dist/clean/constraint/defaultConstraint/string.mjs +15 -1
  10. package/dist/clean/constraint/index.d.ts +1 -0
  11. package/dist/clean/constraint/set.cjs +95 -0
  12. package/dist/clean/constraint/set.d.ts +147 -0
  13. package/dist/clean/constraint/set.mjs +91 -0
  14. package/dist/clean/entity.cjs +5 -3
  15. package/dist/clean/entity.d.ts +3 -0
  16. package/dist/clean/entity.mjs +5 -3
  17. package/dist/clean/flag.cjs +5 -2
  18. package/dist/clean/flag.d.ts +3 -0
  19. package/dist/clean/flag.mjs +5 -2
  20. package/dist/clean/index.cjs +8 -0
  21. package/dist/clean/index.mjs +3 -2
  22. package/dist/clean/newType.cjs +17 -10
  23. package/dist/clean/newType.d.ts +26 -13
  24. package/dist/clean/newType.mjs +17 -10
  25. package/dist/clean/primitive/base.cjs +5 -2
  26. package/dist/clean/primitive/base.mjs +5 -2
  27. package/dist/clean/repository.cjs +5 -2
  28. package/dist/clean/repository.d.ts +3 -0
  29. package/dist/clean/repository.mjs +5 -2
  30. package/dist/clean/useCase.cjs +10 -5
  31. package/dist/clean/useCase.d.ts +14 -7
  32. package/dist/clean/useCase.mjs +10 -5
  33. package/dist/dataParser/baseExtended.cjs +5 -5
  34. package/dist/dataParser/baseExtended.d.ts +3 -3
  35. package/dist/dataParser/baseExtended.mjs +5 -5
  36. package/dist/dataParser/extended/array.cjs +2 -2
  37. package/dist/dataParser/extended/array.mjs +2 -2
  38. package/dist/dataParser/extended/bigint.cjs +2 -2
  39. package/dist/dataParser/extended/bigint.mjs +2 -2
  40. package/dist/dataParser/extended/boolean.cjs +2 -2
  41. package/dist/dataParser/extended/boolean.mjs +2 -2
  42. package/dist/dataParser/extended/date.cjs +2 -2
  43. package/dist/dataParser/extended/date.mjs +2 -2
  44. package/dist/dataParser/extended/empty.cjs +2 -2
  45. package/dist/dataParser/extended/empty.mjs +2 -2
  46. package/dist/dataParser/extended/lazy.cjs +2 -2
  47. package/dist/dataParser/extended/lazy.mjs +2 -2
  48. package/dist/dataParser/extended/literal.cjs +2 -2
  49. package/dist/dataParser/extended/literal.mjs +2 -2
  50. package/dist/dataParser/extended/nil.cjs +2 -2
  51. package/dist/dataParser/extended/nil.mjs +2 -2
  52. package/dist/dataParser/extended/nullable.cjs +2 -2
  53. package/dist/dataParser/extended/nullable.mjs +2 -2
  54. package/dist/dataParser/extended/number.cjs +2 -2
  55. package/dist/dataParser/extended/number.mjs +2 -2
  56. package/dist/dataParser/extended/object.cjs +2 -2
  57. package/dist/dataParser/extended/object.mjs +2 -2
  58. package/dist/dataParser/extended/optional.cjs +2 -2
  59. package/dist/dataParser/extended/optional.mjs +2 -2
  60. package/dist/dataParser/extended/pipe.cjs +2 -2
  61. package/dist/dataParser/extended/pipe.mjs +2 -2
  62. package/dist/dataParser/extended/record.cjs +2 -2
  63. package/dist/dataParser/extended/record.mjs +2 -2
  64. package/dist/dataParser/extended/recover.cjs +2 -2
  65. package/dist/dataParser/extended/recover.mjs +2 -2
  66. package/dist/dataParser/extended/string.cjs +2 -2
  67. package/dist/dataParser/extended/string.mjs +2 -2
  68. package/dist/dataParser/extended/templateLiteral.cjs +2 -2
  69. package/dist/dataParser/extended/templateLiteral.mjs +2 -2
  70. package/dist/dataParser/extended/time.cjs +2 -2
  71. package/dist/dataParser/extended/time.mjs +2 -2
  72. package/dist/dataParser/extended/transform.cjs +2 -2
  73. package/dist/dataParser/extended/transform.mjs +2 -2
  74. package/dist/dataParser/extended/tuple.cjs +2 -2
  75. package/dist/dataParser/extended/tuple.mjs +2 -2
  76. package/dist/dataParser/extended/union.cjs +2 -2
  77. package/dist/dataParser/extended/union.mjs +2 -2
  78. package/dist/dataParser/extended/unknown.cjs +2 -2
  79. package/dist/dataParser/extended/unknown.mjs +2 -2
  80. package/dist/metadata.json +9 -0
  81. package/dist/string/types/forbiddenString.d.ts +1 -2
  82. package/package.json +1 -1
@@ -3,7 +3,9 @@
3
3
  var kind = require('../kind.cjs');
4
4
  var kind$1 = require('../../common/kind.cjs');
5
5
  var coalescing = require('../../array/coalescing.cjs');
6
+ var pipe = require('../../common/pipe.cjs');
6
7
  var errorKindNamespace = require('../../common/errorKindNamespace.cjs');
8
+ var override = require('../../common/override.cjs');
7
9
  var is = require('../../either/left/is.cjs');
8
10
  var unwrap = require('../../common/unwrap.cjs');
9
11
  var create = require('../../either/left/create.cjs');
@@ -62,7 +64,7 @@ function createConstraint(name, primitiveHandler, checker) {
62
64
  }
63
65
  return false;
64
66
  }
65
- return constraintHandlerKind.setTo({
67
+ return pipe.pipe({
66
68
  name,
67
69
  primitiveHandler,
68
70
  checkers,
@@ -71,8 +73,9 @@ function createConstraint(name, primitiveHandler, checker) {
71
73
  createWithUnknown: create$2,
72
74
  createWithUnknownOrThrow: createOrThrow,
73
75
  is: is$1,
74
- });
76
+ }, constraintHandlerKind.setTo, createConstraint.overrideHandler.apply);
75
77
  }
78
+ createConstraint.overrideHandler = override.createOverride("@duplojs/utils/clean/constraint");
76
79
 
77
80
  exports.CreateConstrainedTypeError = CreateConstrainedTypeError;
78
81
  exports.constrainedTypeKind = constrainedTypeKind;
@@ -138,5 +138,8 @@ export declare function createConstraint<GenericName extends string, GenericPrim
138
138
  DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, GenericPrimitiveValue>,
139
139
  ...DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, GenericPrimitiveValue>[]
140
140
  ]) = never>(name: GenericName, primitiveHandler: PrimitiveHandler<GenericPrimitiveValue>, checker: GenericChecker): ConstraintHandler<GenericName, GenericPrimitiveValue, DArray.ArrayCoalescing<GenericChecker>>;
141
+ export declare namespace createConstraint {
142
+ var overrideHandler: import("../..").OverrideHandler<ConstraintHandler<string, EligiblePrimitive, readonly DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, unknown>[]>>;
143
+ }
141
144
  export type GetConstraint<GenericConstrainHandler extends ConstraintHandler, GenericValue extends DDataParser.InputChecker<GenericConstrainHandler["checkers"][number]> = DDataParser.InputChecker<GenericConstrainHandler["checkers"][number]>> = Extract<ConstrainedType<GenericConstrainHandler["name"], GenericValue>, any>;
142
145
  export {};
@@ -1,7 +1,9 @@
1
1
  import { createCleanKind } from '../kind.mjs';
2
2
  import { kindHeritage } from '../../common/kind.mjs';
3
3
  import { coalescing } from '../../array/coalescing.mjs';
4
+ import { pipe } from '../../common/pipe.mjs';
4
5
  import { createErrorKind } from '../../common/errorKindNamespace.mjs';
6
+ import { createOverride } from '../../common/override.mjs';
5
7
  import { isLeft } from '../../either/left/is.mjs';
6
8
  import { unwrap } from '../../common/unwrap.mjs';
7
9
  import { left } from '../../either/left/create.mjs';
@@ -60,7 +62,7 @@ function createConstraint(name, primitiveHandler, checker) {
60
62
  }
61
63
  return false;
62
64
  }
63
- return constraintHandlerKind.setTo({
65
+ return pipe({
64
66
  name,
65
67
  primitiveHandler,
66
68
  checkers,
@@ -69,7 +71,8 @@ function createConstraint(name, primitiveHandler, checker) {
69
71
  createWithUnknown: create,
70
72
  createWithUnknownOrThrow: createOrThrow,
71
73
  is,
72
- });
74
+ }, constraintHandlerKind.setTo, createConstraint.overrideHandler.apply);
73
75
  }
76
+ createConstraint.overrideHandler = createOverride("@duplojs/utils/clean/constraint");
74
77
 
75
78
  export { CreateConstrainedTypeError, constrainedTypeKind, constraintHandlerKind, createConstraint };
@@ -18,7 +18,21 @@ const Positive = base.createConstraint("positive", base$1.Number, min.checkerNum
18
18
  * {@include clean/Negative/index.md}
19
19
  */
20
20
  const Negative = base.createConstraint("negative", base$1.Number, max.checkerNumberMax(-1));
21
+ /**
22
+ * {@include clean/NumberMin/index.md}
23
+ */
24
+ function NumberMin(value) {
25
+ return base.createConstraint(`number-min-${value}`, base$1.Number, min.checkerNumberMin(value));
26
+ }
27
+ /**
28
+ * {@include clean/NumberMax/index.md}
29
+ */
30
+ function NumberMax(value) {
31
+ return base.createConstraint(`number-max-${value}`, base$1.Number, max.checkerNumberMax(value));
32
+ }
21
33
 
22
34
  exports.Int = Int;
23
35
  exports.Negative = Negative;
36
+ exports.NumberMax = NumberMax;
37
+ exports.NumberMin = NumberMin;
24
38
  exports.Positive = Positive;
@@ -1,5 +1,6 @@
1
1
  import { type GetConstraint } from "../base";
2
2
  import * as DDataParser from "../../../dataParser";
3
+ import { type OnlyLiteralNumber } from "../../../common";
3
4
  /**
4
5
  * Constraint handler that validates integer numbers.
5
6
  *
@@ -87,3 +88,63 @@ export type Positive = GetConstraint<typeof Positive>;
87
88
  */
88
89
  export declare const Negative: import("..").ConstraintHandler<"negative", number, readonly [DDataParser.DataParserCheckerNumberMax]>;
89
90
  export type Negative = GetConstraint<typeof Negative>;
91
+ /**
92
+ * Constraint factory that validates numbers greater than or equal to a minimum.
93
+ *
94
+ * **Supported call styles:**
95
+ * - Classic: `NumberMin(min)` -> returns a constraint handler
96
+ *
97
+ * Creates a constraint handler for `C.Number` that enforces a value greater than or equal to `min`. Use it to validate inputs and to constrain NewTypes with a minimum value requirement.
98
+ *
99
+ * ```ts
100
+ * const AdultMin = C.NumberMin(18);
101
+ *
102
+ * const result = AdultMin.create(18);
103
+ *
104
+ * if (E.isRight(result)) {
105
+ * // result: E.Right<"createConstrainedType", C.ConstrainedType<"number-min-18", 18>>
106
+ * }
107
+ *
108
+ * const age = AdultMin.createOrThrow(20);
109
+ * // age: C.ConstrainedType<"number-min-18", 20>
110
+ *
111
+ * AdultMin.is(age); // type guard
112
+ * ```
113
+ *
114
+ * @see https://utils.duplojs.dev/en/v1/api/clean/constraints
115
+ *
116
+ * @namespace C
117
+ *
118
+ */
119
+ export declare function NumberMin<GenericValue extends number>(value: GenericValue & OnlyLiteralNumber<GenericValue>): import("..").ConstraintHandler<`number-min-${GenericValue & OnlyLiteralNumber<GenericValue>}`, number, readonly [DDataParser.DataParserCheckerNumberMin]>;
120
+ export type NumberMin<GenericValue extends number> = ReturnType<typeof NumberMin<GenericValue>>;
121
+ /**
122
+ * Constraint factory that validates numbers less than or equal to a maximum.
123
+ *
124
+ * **Supported call styles:**
125
+ * - Classic: `NumberMax(max)` -> returns a constraint handler
126
+ *
127
+ * Creates a constraint handler for `C.Number` that enforces a value less than or equal to `max`. Use it to validate inputs and to constrain NewTypes with a maximum value requirement.
128
+ *
129
+ * ```ts
130
+ * const PercentMax = C.NumberMax(100);
131
+ *
132
+ * const result = PercentMax.create(100);
133
+ *
134
+ * if (E.isRight(result)) {
135
+ * // result: E.Right<"createConstrainedType", C.ConstrainedType<"number-max-100", 100>>
136
+ * }
137
+ *
138
+ * const value = PercentMax.createOrThrow(80);
139
+ * // value: C.ConstrainedType<"number-max-100", 80>
140
+ *
141
+ * PercentMax.is(value); // type guard
142
+ * ```
143
+ *
144
+ * @see https://utils.duplojs.dev/en/v1/api/clean/constraints
145
+ *
146
+ * @namespace C
147
+ *
148
+ */
149
+ export declare function NumberMax<GenericValue extends number>(value: GenericValue & OnlyLiteralNumber<GenericValue>): import("..").ConstraintHandler<`number-max-${GenericValue & OnlyLiteralNumber<GenericValue>}`, number, readonly [DDataParser.DataParserCheckerNumberMax]>;
150
+ export type NumberMax<GenericValue extends number> = ReturnType<typeof NumberMax<GenericValue>>;
@@ -16,5 +16,17 @@ const Positive = createConstraint("positive", Number, checkerNumberMin(1));
16
16
  * {@include clean/Negative/index.md}
17
17
  */
18
18
  const Negative = createConstraint("negative", Number, checkerNumberMax(-1));
19
+ /**
20
+ * {@include clean/NumberMin/index.md}
21
+ */
22
+ function NumberMin(value) {
23
+ return createConstraint(`number-min-${value}`, Number, checkerNumberMin(value));
24
+ }
25
+ /**
26
+ * {@include clean/NumberMax/index.md}
27
+ */
28
+ function NumberMax(value) {
29
+ return createConstraint(`number-max-${value}`, Number, checkerNumberMax(value));
30
+ }
19
31
 
20
- export { Int, Negative, Positive };
32
+ export { Int, Negative, NumberMax, NumberMin, Positive };
@@ -4,6 +4,8 @@ var base = require('../base.cjs');
4
4
  var base$1 = require('../../primitive/base.cjs');
5
5
  var email = require('../../../dataParser/parsers/string/checkers/email.cjs');
6
6
  var url = require('../../../dataParser/parsers/string/checkers/url.cjs');
7
+ var min = require('../../../dataParser/parsers/string/checkers/min.cjs');
8
+ var max = require('../../../dataParser/parsers/string/checkers/max.cjs');
7
9
 
8
10
  /**
9
11
  * {@include clean/Email/index.md}
@@ -13,6 +15,20 @@ const Email = base.createConstraint("email", base$1.String, email.checkerEmail()
13
15
  * {@include clean/Url/index.md}
14
16
  */
15
17
  const Url = base.createConstraint("url", base$1.String, url.checkerUrl());
18
+ /**
19
+ * {@include clean/StringMin/index.md}
20
+ */
21
+ function StringMin(value) {
22
+ return base.createConstraint(`string-min-${value}`, base$1.String, min.checkerStringMin(value));
23
+ }
24
+ /**
25
+ * {@include clean/StringMax/index.md}
26
+ */
27
+ function StringMax(value) {
28
+ return base.createConstraint(`string-max-${value}`, base$1.String, max.checkerStringMax(value));
29
+ }
16
30
 
17
31
  exports.Email = Email;
32
+ exports.StringMax = StringMax;
33
+ exports.StringMin = StringMin;
18
34
  exports.Url = Url;
@@ -1,5 +1,6 @@
1
1
  import { type GetConstraint } from "../base";
2
2
  import * as DDataParser from "../../../dataParser";
3
+ import { type OnlyLiteralNumber } from "../../../common";
3
4
  /**
4
5
  * Constraint handler that validates an email string.
5
6
  *
@@ -58,3 +59,63 @@ export type Email = GetConstraint<typeof Email>;
58
59
  */
59
60
  export declare const Url: import("..").ConstraintHandler<"url", string, readonly [DDataParser.DataParserCheckerUrl]>;
60
61
  export type Url = GetConstraint<typeof Url>;
62
+ /**
63
+ * Constraint factory that validates strings with a minimum length.
64
+ *
65
+ * **Supported call styles:**
66
+ * - Classic: `StringMin(min)` -> returns a constraint handler
67
+ *
68
+ * Creates a constraint handler for `C.String` that enforces a length greater than or equal to `min`. Use it to validate inputs and to constrain NewTypes with a minimum length requirement.
69
+ *
70
+ * ```ts
71
+ * const UsernameMin = C.StringMin(3);
72
+ *
73
+ * const result = UsernameMin.create("Ada");
74
+ *
75
+ * if (E.isRight(result)) {
76
+ * // result: E.Right<"createConstrainedType", C.ConstrainedType<"string-min-3", "Ada">>
77
+ * }
78
+ *
79
+ * const username = UsernameMin.createOrThrow("Eve");
80
+ * // username: C.ConstrainedType<"string-min-3", "Eve">
81
+ *
82
+ * UsernameMin.is(username); // type guard
83
+ * ```
84
+ *
85
+ * @see https://utils.duplojs.dev/en/v1/api/clean/constraints
86
+ *
87
+ * @namespace C
88
+ *
89
+ */
90
+ export declare function StringMin<GenericValue extends number>(value: GenericValue & OnlyLiteralNumber<GenericValue>): import("..").ConstraintHandler<`string-min-${GenericValue & OnlyLiteralNumber<GenericValue>}`, string, readonly [DDataParser.DataParserCheckerStringMin]>;
91
+ export type StringMin<GenericValue extends number> = GetConstraint<ReturnType<typeof StringMin<GenericValue>>>;
92
+ /**
93
+ * Constraint factory that validates strings with a maximum length.
94
+ *
95
+ * **Supported call styles:**
96
+ * - Classic: `StringMax(max)` -> returns a constraint handler
97
+ *
98
+ * Creates a constraint handler for `C.String` that enforces a length less than or equal to `max`. Use it to validate inputs and to constrain NewTypes with a maximum length requirement.
99
+ *
100
+ * ```ts
101
+ * const TitleMax = C.StringMax(10);
102
+ *
103
+ * const result = TitleMax.create("Hello");
104
+ *
105
+ * if (E.isRight(result)) {
106
+ * // result: E.Right<"createConstrainedType", C.ConstrainedType<"string-max-10", "Hello">>
107
+ * }
108
+ *
109
+ * const title = TitleMax.createOrThrow("World");
110
+ * // title: C.ConstrainedType<"string-max-10", "World">
111
+ *
112
+ * TitleMax.is(title); // type guard
113
+ * ```
114
+ *
115
+ * @see https://utils.duplojs.dev/en/v1/api/clean/constraints
116
+ *
117
+ * @namespace C
118
+ *
119
+ */
120
+ export declare function StringMax<GenericValue extends number>(value: GenericValue & OnlyLiteralNumber<GenericValue>): import("..").ConstraintHandler<`string-max-${GenericValue & OnlyLiteralNumber<GenericValue>}`, string, readonly [DDataParser.DataParserCheckerStringMax]>;
121
+ export type StringMax<GenericValue extends number> = GetConstraint<ReturnType<typeof StringMax<GenericValue>>>;
@@ -2,6 +2,8 @@ import { createConstraint } from '../base.mjs';
2
2
  import { String } from '../../primitive/base.mjs';
3
3
  import { checkerEmail } from '../../../dataParser/parsers/string/checkers/email.mjs';
4
4
  import { checkerUrl } from '../../../dataParser/parsers/string/checkers/url.mjs';
5
+ import { checkerStringMin } from '../../../dataParser/parsers/string/checkers/min.mjs';
6
+ import { checkerStringMax } from '../../../dataParser/parsers/string/checkers/max.mjs';
5
7
 
6
8
  /**
7
9
  * {@include clean/Email/index.md}
@@ -11,5 +13,17 @@ const Email = createConstraint("email", String, checkerEmail());
11
13
  * {@include clean/Url/index.md}
12
14
  */
13
15
  const Url = createConstraint("url", String, checkerUrl());
16
+ /**
17
+ * {@include clean/StringMin/index.md}
18
+ */
19
+ function StringMin(value) {
20
+ return createConstraint(`string-min-${value}`, String, checkerStringMin(value));
21
+ }
22
+ /**
23
+ * {@include clean/StringMax/index.md}
24
+ */
25
+ function StringMax(value) {
26
+ return createConstraint(`string-max-${value}`, String, checkerStringMax(value));
27
+ }
14
28
 
15
- export { Email, Url };
29
+ export { Email, StringMax, StringMin, Url };
@@ -1,2 +1,3 @@
1
1
  export * from "./base";
2
2
  export * from "./defaultConstraint";
3
+ export * from "./set";
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ var kind = require('../kind.cjs');
4
+ var base = require('./base.cjs');
5
+ var kind$1 = require('../../common/kind.cjs');
6
+ var flatMap = require('../../array/flatMap.cjs');
7
+ var coalescing = require('../../array/coalescing.cjs');
8
+ var pipe = require('../../common/pipe.cjs');
9
+ var map = require('../../array/map.cjs');
10
+ var entry = require('../../object/entry.cjs');
11
+ var errorKindNamespace = require('../../common/errorKindNamespace.cjs');
12
+ var fromEntries = require('../../object/fromEntries.cjs');
13
+ var override = require('../../common/override.cjs');
14
+ var is = require('../../either/left/is.cjs');
15
+ var unwrap = require('../../common/unwrap.cjs');
16
+ var create = require('../../either/left/create.cjs');
17
+ var create$1 = require('../../either/right/create.cjs');
18
+ var wrapValue = require('../../common/wrapValue.cjs');
19
+
20
+ const constraintsSetHandlerKind = kind.createCleanKind("constraints-set-handler");
21
+ class CreateConstraintsSetError extends kind$1.kindHeritage("create-constraint-set-error", errorKindNamespace.createErrorKind("create-constraint-set-error"), Error) {
22
+ data;
23
+ dataParserError;
24
+ constructor(data, dataParserError) {
25
+ super({}, ["Error when create constrained type with set."]);
26
+ this.data = data;
27
+ this.dataParserError = dataParserError;
28
+ }
29
+ }
30
+ /**
31
+ * {@include clean/createConstraintsSet/index.md}
32
+ */
33
+ function createConstraintsSet(primitiveHandler, constraint) {
34
+ const constraints = coalescing.coalescing(constraint);
35
+ const checkers = flatMap.flatMap(constraints, ({ checkers }) => checkers);
36
+ const dataParserWithCheckers = primitiveHandler
37
+ .dataParser
38
+ .addChecker(...checkers);
39
+ const constraintKindValue = pipe.pipe(constraints, map.map(({ name }) => entry.entry(name, null)), fromEntries.fromEntries);
40
+ const wrappedConstraints = pipe.pipe(constraints, map.map((constrain) => entry.entry(constrain.name, constrain)), fromEntries.fromEntries);
41
+ function getConstraint(name) {
42
+ return wrappedConstraints[name];
43
+ }
44
+ function create$2(data) {
45
+ const result = dataParserWithCheckers.parse(unwrap.unwrap(data));
46
+ if (is.isLeft(result)) {
47
+ return create.left("createConstraintsSetError", unwrap.unwrap(result));
48
+ }
49
+ else if (base.constrainedTypeKind.has(data)) {
50
+ return create$1.right("createConstraintsSet", base.constrainedTypeKind.addTo(data, {
51
+ ...base.constrainedTypeKind.getValue(data),
52
+ ...constraintKindValue,
53
+ }));
54
+ }
55
+ else {
56
+ return create$1.right("createConstraintsSet", base.constrainedTypeKind.setTo(wrapValue.wrapValue(unwrap.unwrap(result)), constraintKindValue));
57
+ }
58
+ }
59
+ function createOrThrow(data) {
60
+ const result = create$2(data);
61
+ if (is.isLeft(result)) {
62
+ throw new CreateConstraintsSetError(data, unwrap.unwrap(result));
63
+ }
64
+ else {
65
+ return unwrap.unwrap(result);
66
+ }
67
+ }
68
+ function is$1(input) {
69
+ if (!base.constrainedTypeKind.has(input)) {
70
+ return false;
71
+ }
72
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
73
+ for (let index = 0; index < constraints.length; index++) {
74
+ if (!constraints[index].is(input)) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ return pipe.pipe({
81
+ primitiveHandler,
82
+ constrains: constraints,
83
+ getConstraint,
84
+ create: create$2,
85
+ createOrThrow,
86
+ createWithUnknown: create$2,
87
+ createWithUnknownOrThrow: createOrThrow,
88
+ is: is$1,
89
+ }, constraintsSetHandlerKind.setTo, createConstraintsSet.overrideHandler.apply);
90
+ }
91
+ createConstraintsSet.overrideHandler = override.createOverride("@duplojs/utils/clean/constraints-set");
92
+
93
+ exports.CreateConstraintsSetError = CreateConstraintsSetError;
94
+ exports.constraintsSetHandlerKind = constraintsSetHandlerKind;
95
+ exports.createConstraintsSet = createConstraintsSet;
@@ -0,0 +1,147 @@
1
+ import { type Kind, type WrappedValue, type UnionToIntersection } from "../..";
2
+ import { type GetConstraint, type ConstraintHandler } from "../constraint";
3
+ import { type Primitive, type EligiblePrimitive, type PrimitiveHandler } from "../primitive";
4
+ import * as DEither from "../../either";
5
+ import * as DArray from "../../array";
6
+ import type * as DDataParser from "../../dataParser";
7
+ export declare const constraintsSetHandlerKind: import("../..").KindHandler<import("../..").KindDefinition<"@DuplojsUtilsClean/constraints-set-handler", unknown>>;
8
+ export interface ConstraintsSetHandler<GenericPrimitiveValue extends EligiblePrimitive = EligiblePrimitive, GenericConstrainsHandler extends readonly ConstraintHandler[] = readonly []> extends Kind<typeof constraintsSetHandlerKind.definition> {
9
+ /**
10
+ * The primitive handler used to validate and wrap values (e.g. `C.String`, `C.Number`).
11
+ *
12
+ */
13
+ readonly primitiveHandler: PrimitiveHandler<GenericPrimitiveValue>;
14
+ /**
15
+ * The list of constraint handlers applied by this set.
16
+ *
17
+ */
18
+ readonly constrains: GenericConstrainsHandler;
19
+ /**
20
+ * Creates a constrained value and returns an Either.
21
+ *
22
+ * ```ts
23
+ * const result = UsernameConstraints.create("Ada");
24
+ *
25
+ * if (E.isRight(result)) {
26
+ * // result: E.Right<"createConstraintsSet", C.Primitive<"Ada"> & C.GetConstraints<typeof UsernameConstraints>>
27
+ * }
28
+ * ```
29
+ *
30
+ */
31
+ create<const GenericInput extends GenericPrimitiveValue>(data: GenericInput): (DEither.Right<"createConstraintsSet", (Primitive<GenericInput> & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>)> | DEither.Left<"createConstraintsSetError", DDataParser.DataParserError>);
32
+ create<GenericPrimitive extends Primitive<GenericPrimitiveValue>>(data: GenericPrimitive): (DEither.Right<"createConstraintsSet", (GenericPrimitive & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>)> | DEither.Left<"createConstraintsSetError", DDataParser.DataParserError>);
33
+ /**
34
+ * Creates a constrained value and throws on error. Works with raw values or primitives.
35
+ *
36
+ * ```ts
37
+ * const value = UsernameConstraints.createOrThrow("Nova");
38
+ * // value: C.Primitive<"Nova"> & C.GetConstraints<typeof UsernameConstraints>
39
+ *
40
+ * const primitive = C.String.createOrThrow("Kit");
41
+ * UsernameConstraints.create(primitive);
42
+ * ```
43
+ *
44
+ */
45
+ createOrThrow<const GenericInput extends GenericPrimitiveValue>(data: GenericInput): (Primitive<GenericInput> & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>);
46
+ createOrThrow<GenericPrimitive extends Primitive<GenericPrimitiveValue>>(data: GenericPrimitive): (GenericPrimitive & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>);
47
+ /**
48
+ * Creates a constrained value from an unknown input and returns an Either.
49
+ *
50
+ * ```ts
51
+ * const unknownValue: unknown = "Sam";
52
+ * const maybe = UsernameConstraints.createWithUnknown(unknownValue);
53
+ * ```
54
+ *
55
+ */
56
+ createWithUnknown<GenericInput extends unknown>(data: GenericInput): (DEither.Right<"createConstraintsSet", (Primitive<GenericPrimitiveValue> & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>)> | DEither.Left<"createConstraintsSetError", DDataParser.DataParserError>);
57
+ /**
58
+ * Creates a constrained value from an unknown input and throws on error.
59
+ *
60
+ * ```ts
61
+ * const strictValue = UsernameConstraints.createWithUnknownOrThrow(unknownValue);
62
+ * ```
63
+ *
64
+ */
65
+ createWithUnknownOrThrow<GenericInput extends unknown>(data: GenericInput): (Primitive<GenericPrimitiveValue> & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>);
66
+ /**
67
+ * Checks if a value satisfies all constraints of the set (type guard).
68
+ *
69
+ * ```ts
70
+ * UsernameConstraints.is(value); // type guard
71
+ * ```
72
+ *
73
+ */
74
+ is<GenericInput extends WrappedValue>(input: GenericInput): input is Extract<GenericInput, (Primitive<GenericPrimitiveValue> & UnionToIntersection<GenericConstrainsHandler[number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never>)>;
75
+ /**
76
+ * Returns a constraint handler by name from the constraints set.
77
+ *
78
+ * ```ts
79
+ * const constraint = UsernameConstraints.getConstraint("string-max-16");
80
+ * constraint.createOrThrow("hello");
81
+ * ```
82
+ *
83
+ */
84
+ getConstraint<GenericConstraintName extends GenericConstrainsHandler[number]["name"]>(name: GenericConstraintName): Extract<GenericConstrainsHandler[number], ConstraintHandler<GenericConstraintName>>;
85
+ }
86
+ declare const CreateConstraintsSetError_base: new (params: {
87
+ "@DuplojsUtilsError/create-constraint-set-error"?: unknown;
88
+ }, parentParams: readonly [message?: string | undefined, options?: ErrorOptions | undefined]) => Error & Kind<import("../..").KindDefinition<"create-constraint-set-error", unknown>, unknown> & Kind<import("../..").KindDefinition<"@DuplojsUtilsError/create-constraint-set-error", unknown>, unknown>;
89
+ export declare class CreateConstraintsSetError extends CreateConstraintsSetError_base {
90
+ data: unknown;
91
+ dataParserError: DDataParser.DataParserError;
92
+ constructor(data: unknown, dataParserError: DDataParser.DataParserError);
93
+ }
94
+ /**
95
+ * Creates a constraints set handler to apply multiple constraints to a primitive.
96
+ *
97
+ * **Supported call styles:**
98
+ * - Classic: `createConstraintsSet(primitiveHandler, constraints)` -> returns a handler
99
+ *
100
+ * A constraints set validates input with the primitive DataParser, applies all constraint checkers, and tags the value with each constraint name. Use it to compose multiple constraints once and reuse the handler.
101
+ *
102
+ * ```ts
103
+ * const UsernameConstraints = C.createConstraintsSet(
104
+ * C.String,
105
+ * [C.StringMin(3), C.StringMax(16)],
106
+ * );
107
+ *
108
+ * const result = UsernameConstraints.create("Ada");
109
+ *
110
+ * if (E.isRight(result)) {
111
+ * // result: E.Right<"createConstraintsSet", C.Primitive<"Ada"> & C.GetConstraints<typeof UsernameConstraints>>
112
+ * }
113
+ *
114
+ * const value = UsernameConstraints.createOrThrow("Nova");
115
+ * // value: C.Primitive<"Nova"> & C.GetConstraints<typeof UsernameConstraints>
116
+ *
117
+ * const primitive = C.String.createOrThrow("Kit");
118
+ * UsernameConstraints.create(primitive);
119
+ *
120
+ * const unknownValue: unknown = "Sam";
121
+ * const maybe = UsernameConstraints.createWithUnknown(unknownValue);
122
+ * const strictValue = UsernameConstraints.createWithUnknownOrThrow(unknownValue);
123
+ *
124
+ * UsernameConstraints.is(value); // type guard
125
+ *
126
+ * const constraint = UsernameConstraints.getConstraint("string-max-16");
127
+ * constraint.createOrThrow("hello");
128
+ * ```
129
+ *
130
+ * @remarks
131
+ * - You can pass a single constraint handler or a tuple of constraints.
132
+ * - The handler accepts both raw values and primitives.
133
+ *
134
+ * @see https://utils.duplojs.dev/en/v1/api/clean/constraints
135
+ *
136
+ * @namespace C
137
+ *
138
+ */
139
+ export declare function createConstraintsSet<GenericPrimitiveValue extends EligiblePrimitive, const GenericConstrainHandler extends (ConstraintHandler<string, EligiblePrimitive, readonly DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, GenericPrimitiveValue>[]> | readonly [
140
+ ConstraintHandler<string, EligiblePrimitive, readonly DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, GenericPrimitiveValue>[]>,
141
+ ...ConstraintHandler<string, EligiblePrimitive, readonly DDataParser.DataParserChecker<DDataParser.DataParserCheckerDefinition, GenericPrimitiveValue>[]>[]
142
+ ]) = never>(primitiveHandler: PrimitiveHandler<GenericPrimitiveValue>, constraint: GenericConstrainHandler): ConstraintsSetHandler<GenericPrimitiveValue, DArray.ArrayCoalescing<GenericConstrainHandler>>;
143
+ export declare namespace createConstraintsSet {
144
+ var overrideHandler: import("../..").OverrideHandler<ConstraintsSetHandler<EligiblePrimitive, readonly []>>;
145
+ }
146
+ export type GetConstraints<GenericHandler extends ConstraintsSetHandler<EligiblePrimitive, readonly any[]>> = Extract<GenericHandler extends any ? UnionToIntersection<GenericHandler["constrains"][number] extends infer InferredConstraint ? InferredConstraint extends ConstraintHandler ? GetConstraint<InferredConstraint> : never : never> : never, any>;
147
+ export {};
@@ -0,0 +1,91 @@
1
+ import { createCleanKind } from '../kind.mjs';
2
+ import { constrainedTypeKind } from './base.mjs';
3
+ import { kindHeritage } from '../../common/kind.mjs';
4
+ import { flatMap } from '../../array/flatMap.mjs';
5
+ import { coalescing } from '../../array/coalescing.mjs';
6
+ import { pipe } from '../../common/pipe.mjs';
7
+ import { map } from '../../array/map.mjs';
8
+ import { entry } from '../../object/entry.mjs';
9
+ import { createErrorKind } from '../../common/errorKindNamespace.mjs';
10
+ import { fromEntries } from '../../object/fromEntries.mjs';
11
+ import { createOverride } from '../../common/override.mjs';
12
+ import { isLeft } from '../../either/left/is.mjs';
13
+ import { unwrap } from '../../common/unwrap.mjs';
14
+ import { left } from '../../either/left/create.mjs';
15
+ import { right } from '../../either/right/create.mjs';
16
+ import { wrapValue } from '../../common/wrapValue.mjs';
17
+
18
+ const constraintsSetHandlerKind = createCleanKind("constraints-set-handler");
19
+ class CreateConstraintsSetError extends kindHeritage("create-constraint-set-error", createErrorKind("create-constraint-set-error"), Error) {
20
+ data;
21
+ dataParserError;
22
+ constructor(data, dataParserError) {
23
+ super({}, ["Error when create constrained type with set."]);
24
+ this.data = data;
25
+ this.dataParserError = dataParserError;
26
+ }
27
+ }
28
+ /**
29
+ * {@include clean/createConstraintsSet/index.md}
30
+ */
31
+ function createConstraintsSet(primitiveHandler, constraint) {
32
+ const constraints = coalescing(constraint);
33
+ const checkers = flatMap(constraints, ({ checkers }) => checkers);
34
+ const dataParserWithCheckers = primitiveHandler
35
+ .dataParser
36
+ .addChecker(...checkers);
37
+ const constraintKindValue = pipe(constraints, map(({ name }) => entry(name, null)), fromEntries);
38
+ const wrappedConstraints = pipe(constraints, map((constrain) => entry(constrain.name, constrain)), fromEntries);
39
+ function getConstraint(name) {
40
+ return wrappedConstraints[name];
41
+ }
42
+ function create(data) {
43
+ const result = dataParserWithCheckers.parse(unwrap(data));
44
+ if (isLeft(result)) {
45
+ return left("createConstraintsSetError", unwrap(result));
46
+ }
47
+ else if (constrainedTypeKind.has(data)) {
48
+ return right("createConstraintsSet", constrainedTypeKind.addTo(data, {
49
+ ...constrainedTypeKind.getValue(data),
50
+ ...constraintKindValue,
51
+ }));
52
+ }
53
+ else {
54
+ return right("createConstraintsSet", constrainedTypeKind.setTo(wrapValue(unwrap(result)), constraintKindValue));
55
+ }
56
+ }
57
+ function createOrThrow(data) {
58
+ const result = create(data);
59
+ if (isLeft(result)) {
60
+ throw new CreateConstraintsSetError(data, unwrap(result));
61
+ }
62
+ else {
63
+ return unwrap(result);
64
+ }
65
+ }
66
+ function is(input) {
67
+ if (!constrainedTypeKind.has(input)) {
68
+ return false;
69
+ }
70
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
71
+ for (let index = 0; index < constraints.length; index++) {
72
+ if (!constraints[index].is(input)) {
73
+ return false;
74
+ }
75
+ }
76
+ return true;
77
+ }
78
+ return pipe({
79
+ primitiveHandler,
80
+ constrains: constraints,
81
+ getConstraint,
82
+ create,
83
+ createOrThrow,
84
+ createWithUnknown: create,
85
+ createWithUnknownOrThrow: createOrThrow,
86
+ is,
87
+ }, constraintsSetHandlerKind.setTo, createConstraintsSet.overrideHandler.apply);
88
+ }
89
+ createConstraintsSet.overrideHandler = createOverride("@duplojs/utils/clean/constraints-set");
90
+
91
+ export { CreateConstraintsSetError, constraintsSetHandlerKind, createConstraintsSet };