@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.
@@ -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 };
@@ -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;
@@ -33,3 +33,4 @@ export * from "./repository";
33
33
  export * from "./useCase";
34
34
  export * from "./flag";
35
35
  export * from "./unwrapEntity";
36
+ export * from "./maybe";
@@ -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: {
@@ -967,6 +967,15 @@
967
967
  {
968
968
  "name": "kind.mjs"
969
969
  },
970
+ {
971
+ "name": "maybe.cjs"
972
+ },
973
+ {
974
+ "name": "maybe.d.ts"
975
+ },
976
+ {
977
+ "name": "maybe.mjs"
978
+ },
970
979
  {
971
980
  "name": "newType.cjs"
972
981
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.4.53",
3
+ "version": "1.4.54",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"