-
-
Notifications
You must be signed in to change notification settings - Fork 370
Expand file tree
/
Copy pathminDigitChars.ts
More file actions
135 lines (130 loc) 路 2.83 KB
/
Copy pathminDigitChars.ts
File metadata and controls
135 lines (130 loc) 路 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import type {
BaseIssue,
BaseValidation,
ErrorMessage,
} from '../../types/index.ts';
import { _addIssue, _getDigitCount } from '../../utils/index.ts';
/**
* Min digits issue interface.
*/
export interface MinDigitCharsIssue<
TInput extends string,
TRequirement extends number,
> extends BaseIssue<TInput> {
/**
* The issue kind.
*/
readonly kind: 'validation';
/**
* The issue type.
*/
readonly type: 'min_digits';
/**
* The expected property.
*/
readonly expected: `>=${TRequirement}`;
/**
* The received property.
*/
readonly received: `${number}`;
/**
* The minimum digits.
*/
readonly requirement: TRequirement;
}
/**
* Min digits action interface.
*/
export interface MinDigitCharsAction<
TInput extends string,
TRequirement extends number,
TMessage extends
| ErrorMessage<MinDigitCharsIssue<TInput, TRequirement>>
| undefined,
> extends BaseValidation<
TInput,
TInput,
MinDigitCharsIssue<TInput, TRequirement>
> {
/**
* The action type.
*/
readonly type: 'min_digits';
/**
* The action reference.
*/
readonly reference: typeof minDigitChars;
/**
* The expected property.
*/
readonly expects: `>=${TRequirement}`;
/**
* The minimum digits.
*/
readonly requirement: TRequirement;
/**
* The error message.
*/
readonly message: TMessage;
}
/**
* Creates a min digits validation action.
*
* @param requirement The minimum digits.
*
* @returns A min digits action.
*/
export function minDigitChars<
TInput extends string,
const TRequirement extends number,
>(
requirement: TRequirement
): MinDigitCharsAction<TInput, TRequirement, undefined>;
/**
* Creates a min digits validation action.
*
* @param requirement The minimum digits.
* @param message The error message.
*
* @returns A min digits action.
*/
export function minDigitChars<
TInput extends string,
const TRequirement extends number,
const TMessage extends
| ErrorMessage<MinDigitCharsIssue<TInput, TRequirement>>
| undefined,
>(
requirement: TRequirement,
message: TMessage
): MinDigitCharsAction<TInput, TRequirement, TMessage>;
// @__NO_SIDE_EFFECTS__
export function minDigitChars(
requirement: number,
message?: ErrorMessage<MinDigitCharsIssue<string, number>>
): MinDigitCharsAction<
string,
number,
ErrorMessage<MinDigitCharsIssue<string, number>> | undefined
> {
return {
kind: 'validation',
type: 'min_digits',
reference: minDigitChars,
async: false,
expects: `>=${requirement}`,
requirement,
message,
'~run'(dataset, config) {
if (dataset.typed) {
const count = _getDigitCount(dataset.value);
if (count < this.requirement) {
_addIssue(this, 'digits', dataset, config, {
received: `${count}`,
});
}
}
return dataset;
},
};
}