@duplojs/utils 1.4.53 → 1.4.54
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.
- package/dist/clean/constraint/defaultConstraint/number.cjs +8 -0
- package/dist/clean/constraint/defaultConstraint/number.d.ts +29 -0
- package/dist/clean/constraint/defaultConstraint/number.mjs +8 -1
- package/dist/clean/index.cjs +4 -0
- package/dist/clean/index.d.ts +1 -0
- package/dist/clean/index.mjs +2 -1
- package/dist/clean/maybe.cjs +21 -0
- package/dist/clean/maybe.d.ts +135 -0
- package/dist/clean/maybe.mjs +18 -0
- package/dist/dataParser/base.d.ts +2 -2
- package/dist/metadata.json +9 -0
- package/package.json +1 -1
|
@@ -30,9 +30,17 @@ function NumberMin(value) {
|
|
|
30
30
|
function NumberMax(value) {
|
|
31
31
|
return base.createConstraint(`number-max-${value}`, base$1.Number, max.checkerNumberMax(value));
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* {@include clean/PositiveInt/index.md}
|
|
35
|
+
*/
|
|
36
|
+
const PositiveInt = base.createConstraint("positive-int", base$1.Number, [
|
|
37
|
+
int.checkerInt(),
|
|
38
|
+
min.checkerNumberMin(1),
|
|
39
|
+
]);
|
|
33
40
|
|
|
34
41
|
exports.Int = Int;
|
|
35
42
|
exports.Negative = Negative;
|
|
36
43
|
exports.NumberMax = NumberMax;
|
|
37
44
|
exports.NumberMin = NumberMin;
|
|
38
45
|
exports.Positive = Positive;
|
|
46
|
+
exports.PositiveInt = PositiveInt;
|
|
@@ -148,3 +148,32 @@ export type NumberMin<GenericValue extends number> = ReturnType<typeof NumberMin
|
|
|
148
148
|
*/
|
|
149
149
|
export declare function NumberMax<GenericValue extends number>(value: GenericValue & OnlyLiteralNumber<GenericValue>): import("..").ConstraintHandler<`number-max-${GenericValue & OnlyLiteralNumber<GenericValue>}`, number, readonly [DDataParser.DataParserCheckerNumberMax]>;
|
|
150
150
|
export type NumberMax<GenericValue extends number> = ReturnType<typeof NumberMax<GenericValue>>;
|
|
151
|
+
/**
|
|
152
|
+
* Constraint handler that validates strictly positive integers (>= 1).
|
|
153
|
+
*
|
|
154
|
+
* **Supported call styles:**
|
|
155
|
+
* - Classic: `PositiveInt.create(value)` -> returns Either
|
|
156
|
+
*
|
|
157
|
+
* Use it as a reusable rule to validate inputs and to constrain NewTypes to positive integer numbers.
|
|
158
|
+
*
|
|
159
|
+
* ```ts
|
|
160
|
+
* const result = C.PositiveInt.create(4);
|
|
161
|
+
*
|
|
162
|
+
* if (E.isRight(result)) {
|
|
163
|
+
* // result: E.Right<"createConstrainedType", C.ConstrainedType<"positive-int", 4>>
|
|
164
|
+
* }
|
|
165
|
+
*
|
|
166
|
+
* const value = C.PositiveInt.createOrThrow(10);
|
|
167
|
+
* // value: C.ConstrainedType<"positive-int", 10>
|
|
168
|
+
*
|
|
169
|
+
* C.PositiveInt.is(value); // type guard
|
|
170
|
+
*
|
|
171
|
+
* ```
|
|
172
|
+
*
|
|
173
|
+
* @see https://utils.duplojs.dev/en/v1/api/clean/constraints
|
|
174
|
+
*
|
|
175
|
+
* @namespace C
|
|
176
|
+
*
|
|
177
|
+
*/
|
|
178
|
+
export declare const PositiveInt: import("..").ConstraintHandler<"positive-int", number, readonly [DDataParser.DataParserCheckerInt, DDataParser.DataParserCheckerNumberMin]>;
|
|
179
|
+
export type PositiveInt = GetConstraint<typeof PositiveInt>;
|
|
@@ -28,5 +28,12 @@ function NumberMin(value) {
|
|
|
28
28
|
function NumberMax(value) {
|
|
29
29
|
return createConstraint(`number-max-${value}`, Number, checkerNumberMax(value));
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* {@include clean/PositiveInt/index.md}
|
|
33
|
+
*/
|
|
34
|
+
const PositiveInt = createConstraint("positive-int", Number, [
|
|
35
|
+
checkerInt(),
|
|
36
|
+
checkerNumberMin(1),
|
|
37
|
+
]);
|
|
31
38
|
|
|
32
|
-
export { Int, Negative, NumberMax, NumberMin, Positive };
|
|
39
|
+
export { Int, Negative, NumberMax, NumberMin, Positive, PositiveInt };
|
package/dist/clean/index.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var repository = require('./repository.cjs');
|
|
|
7
7
|
var useCase = require('./useCase.cjs');
|
|
8
8
|
var flag = require('./flag.cjs');
|
|
9
9
|
var unwrapEntity = require('./unwrapEntity.cjs');
|
|
10
|
+
var maybe = require('./maybe.cjs');
|
|
10
11
|
var base = require('./constraint/base.cjs');
|
|
11
12
|
var number = require('./constraint/defaultConstraint/number.cjs');
|
|
12
13
|
var string = require('./constraint/defaultConstraint/string.cjs');
|
|
@@ -58,6 +59,8 @@ exports.useCaseInstances = useCase.useCaseInstances;
|
|
|
58
59
|
exports.createFlag = flag.createFlag;
|
|
59
60
|
exports.flagKind = flag.flagKind;
|
|
60
61
|
exports.unwrapEntity = unwrapEntity.unwrapEntity;
|
|
62
|
+
exports.none = maybe.none;
|
|
63
|
+
exports.some = maybe.some;
|
|
61
64
|
exports.CreateConstrainedTypeError = base.CreateConstrainedTypeError;
|
|
62
65
|
exports.constrainedTypeKind = base.constrainedTypeKind;
|
|
63
66
|
exports.constraintHandlerKind = base.constraintHandlerKind;
|
|
@@ -67,6 +70,7 @@ exports.Negative = number.Negative;
|
|
|
67
70
|
exports.NumberMax = number.NumberMax;
|
|
68
71
|
exports.NumberMin = number.NumberMin;
|
|
69
72
|
exports.Positive = number.Positive;
|
|
73
|
+
exports.PositiveInt = number.PositiveInt;
|
|
70
74
|
exports.Email = string.Email;
|
|
71
75
|
exports.StringMax = string.StringMax;
|
|
72
76
|
exports.StringMin = string.StringMin;
|
package/dist/clean/index.d.ts
CHANGED
package/dist/clean/index.mjs
CHANGED
|
@@ -5,8 +5,9 @@ export { createRepository, repositoryHandlerKind } from './repository.mjs';
|
|
|
5
5
|
export { createUseCase, useCaseHandlerKind, useCaseInstances } from './useCase.mjs';
|
|
6
6
|
export { createFlag, flagKind } from './flag.mjs';
|
|
7
7
|
export { unwrapEntity } from './unwrapEntity.mjs';
|
|
8
|
+
export { none, some } from './maybe.mjs';
|
|
8
9
|
export { CreateConstrainedTypeError, constrainedTypeKind, constraintHandlerKind, createConstraint } from './constraint/base.mjs';
|
|
9
|
-
export { Int, Negative, NumberMax, NumberMin, Positive } from './constraint/defaultConstraint/number.mjs';
|
|
10
|
+
export { Int, Negative, NumberMax, NumberMin, Positive, PositiveInt } from './constraint/defaultConstraint/number.mjs';
|
|
10
11
|
export { Email, StringMax, StringMin, Url } from './constraint/defaultConstraint/string.mjs';
|
|
11
12
|
export { CreateConstraintsSetError, constraintsSetHandlerKind, createConstraintsSet } from './constraint/set.mjs';
|
|
12
13
|
export { BigInt, Boolean, CreatePrimitiveError, Date, Number, String, Time, primitiveHandlerKind } from './primitive/base.mjs';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var entity = require('./entity.cjs');
|
|
4
|
+
var create = require('../either/right/create.cjs');
|
|
5
|
+
var create$1 = require('../either/left/create.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* {@include clean/some/index.md}
|
|
9
|
+
*/
|
|
10
|
+
function some(entity$1) {
|
|
11
|
+
return create.right(`some-${entity.entityKind.getValue(entity$1)}`, entity$1);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* {@include clean/none/index.md}
|
|
15
|
+
*/
|
|
16
|
+
function none(entityName) {
|
|
17
|
+
return create$1.left(`none-${entityName}`, null);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
exports.none = none;
|
|
21
|
+
exports.some = some;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import * as DEither from "../either";
|
|
2
|
+
import { type Entity, entityKind } from "./entity";
|
|
3
|
+
import { type GetKindValue } from "../common";
|
|
4
|
+
export interface Some<GenericEntity extends Entity = Entity> extends DEither.Right<`some-${GetKindValue<typeof entityKind, GenericEntity>}`, GenericEntity> {
|
|
5
|
+
}
|
|
6
|
+
export interface None<GenericEntityName extends string = string> extends DEither.Left<`none-${GenericEntityName}`, null> {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Union type that represents an optional entity in business flows.
|
|
10
|
+
*
|
|
11
|
+
* **Supported usage style:**
|
|
12
|
+
* - Type contract: `Maybe<Entity>`
|
|
13
|
+
*
|
|
14
|
+
* Use `Maybe` to define a business contract before implementation details. Then produce values with `some(entity)` when data exists, or `none(entityName)` when it does not.
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* const UserId = C.createNewType("userId", DPE.number());
|
|
18
|
+
* const User = C.createEntity("User", () => ({
|
|
19
|
+
* id: UserId,
|
|
20
|
+
* }));
|
|
21
|
+
*
|
|
22
|
+
* type UserMaybe = C.Maybe<
|
|
23
|
+
* C.GetEntity<typeof User>
|
|
24
|
+
* >;
|
|
25
|
+
*
|
|
26
|
+
* const availableUser = User.new({
|
|
27
|
+
* id: UserId.createOrThrow(1 as number),
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const foundUser: UserMaybe = C.some(availableUser);
|
|
31
|
+
* const missingUser: UserMaybe = C.none("User");
|
|
32
|
+
*
|
|
33
|
+
* type checkFound = ExpectType<
|
|
34
|
+
* typeof foundUser,
|
|
35
|
+
* C.Some<typeof availableUser>,
|
|
36
|
+
* "strict"
|
|
37
|
+
* >;
|
|
38
|
+
*
|
|
39
|
+
* type checkMissing = ExpectType<
|
|
40
|
+
* typeof missingUser,
|
|
41
|
+
* C.None<"User">,
|
|
42
|
+
* "strict"
|
|
43
|
+
* >;
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* `Maybe` helps keep use-case signatures explicit: a function can return a typed optional entity without exposing null/undefined at the domain boundary.
|
|
48
|
+
*
|
|
49
|
+
* @see https://utils.duplojs.dev/en/v1/api/clean/maybe
|
|
50
|
+
*
|
|
51
|
+
* @namespace C
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
export type Maybe<GenericEntity extends Entity = Entity> = (Some<GenericEntity> | None<GetKindValue<typeof entityKind, GenericEntity>>);
|
|
55
|
+
/**
|
|
56
|
+
* Constructor that creates a `Maybe` success branch from an entity.
|
|
57
|
+
*
|
|
58
|
+
* **Supported call styles:**
|
|
59
|
+
* - Classic: `some(entity)` -> returns `Some<Entity>`
|
|
60
|
+
* - Pipe-compatible: `pipe(entity, some)`
|
|
61
|
+
*
|
|
62
|
+
* Use `some` when the expected entity is available and must satisfy a `Maybe<Entity>` contract.
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* const UserId = C.createNewType("userId", DPE.number());
|
|
66
|
+
* const User = C.createEntity("User", () => ({
|
|
67
|
+
* id: UserId,
|
|
68
|
+
* }));
|
|
69
|
+
*
|
|
70
|
+
* const firstUser = User.new({
|
|
71
|
+
* id: UserId.createOrThrow(1),
|
|
72
|
+
* });
|
|
73
|
+
* const firstMaybe = C.some(firstUser);
|
|
74
|
+
* // firstMaybe: C.Some<typeof firstUser>
|
|
75
|
+
*
|
|
76
|
+
* const secondUser = User.new({
|
|
77
|
+
* id: UserId.createOrThrow(2),
|
|
78
|
+
* });
|
|
79
|
+
* const secondMaybe = C.some(secondUser);
|
|
80
|
+
* // secondMaybe: C.Some<typeof secondUser>
|
|
81
|
+
*
|
|
82
|
+
* const pipedMaybe = pipe(
|
|
83
|
+
* firstUser,
|
|
84
|
+
* C.some,
|
|
85
|
+
* );
|
|
86
|
+
*
|
|
87
|
+
* type check = ExpectType<
|
|
88
|
+
* typeof pipedMaybe,
|
|
89
|
+
* C.Some<typeof firstUser>,
|
|
90
|
+
* "strict"
|
|
91
|
+
* >;
|
|
92
|
+
*
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @see https://utils.duplojs.dev/en/v1/api/clean/maybe
|
|
96
|
+
*
|
|
97
|
+
* @namespace C
|
|
98
|
+
*
|
|
99
|
+
*/
|
|
100
|
+
export declare function some<GenericEntity extends Entity>(entity: GenericEntity): Some<GenericEntity>;
|
|
101
|
+
/**
|
|
102
|
+
* Constructor that creates a `Maybe` empty branch from an entity name.
|
|
103
|
+
*
|
|
104
|
+
* **Supported call styles:**
|
|
105
|
+
* - Classic: `none(entityName)` -> returns `None<entityName>`
|
|
106
|
+
* - Pipe-compatible: `pipe(entityName, none)`
|
|
107
|
+
*
|
|
108
|
+
* Use `none` when an entity is absent but you still want to keep a precise business contract with `Maybe<Entity>`.
|
|
109
|
+
*
|
|
110
|
+
* ```ts
|
|
111
|
+
* const noUser = C.none("User");
|
|
112
|
+
* // noUser: C.None<"User">
|
|
113
|
+
*
|
|
114
|
+
* const noOrder = C.none("Order");
|
|
115
|
+
* // noOrder: C.None<"Order">
|
|
116
|
+
*
|
|
117
|
+
* const pipedNone = pipe(
|
|
118
|
+
* "Invoice",
|
|
119
|
+
* C.none,
|
|
120
|
+
* );
|
|
121
|
+
*
|
|
122
|
+
* type check = ExpectType<
|
|
123
|
+
* typeof pipedNone,
|
|
124
|
+
* C.None<"Invoice">,
|
|
125
|
+
* "strict"
|
|
126
|
+
* >;
|
|
127
|
+
*
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* @see https://utils.duplojs.dev/en/v1/api/clean/maybe
|
|
131
|
+
*
|
|
132
|
+
* @namespace C
|
|
133
|
+
*
|
|
134
|
+
*/
|
|
135
|
+
export declare function none<GenericEntityName extends string>(entityName: GenericEntityName): None<GenericEntityName>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { entityKind } from './entity.mjs';
|
|
2
|
+
import { right } from '../either/right/create.mjs';
|
|
3
|
+
import { left } from '../either/left/create.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* {@include clean/some/index.md}
|
|
7
|
+
*/
|
|
8
|
+
function some(entity) {
|
|
9
|
+
return right(`some-${entityKind.getValue(entity)}`, entity);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* {@include clean/none/index.md}
|
|
13
|
+
*/
|
|
14
|
+
function none(entityName) {
|
|
15
|
+
return left(`none-${entityName}`, null);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { none, some };
|
|
@@ -239,8 +239,8 @@ export interface DataParser<GenericDefinition extends DataParserDefinition = Dat
|
|
|
239
239
|
isAsynchronous(): boolean;
|
|
240
240
|
}
|
|
241
241
|
interface DataParserInitExecParams<GenericDataParser extends DataParser> {
|
|
242
|
-
sync(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): (GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue);
|
|
243
|
-
async(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): Promise<GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue>;
|
|
242
|
+
sync(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): (GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserError | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue);
|
|
243
|
+
async(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): Promise<GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserError | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue>;
|
|
244
244
|
isAsynchronous(self: GenericDataParser): boolean;
|
|
245
245
|
}
|
|
246
246
|
declare const DataParserThrowError_base: new (params: {
|
package/dist/metadata.json
CHANGED