@c9up/rune 0.1.6 → 0.1.7
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/MessagesProvider.d.ts +40 -0
- package/dist/MessagesProvider.d.ts.map +1 -0
- package/dist/MessagesProvider.js +77 -0
- package/dist/MessagesProvider.js.map +1 -0
- package/dist/Schema.d.ts +156 -26
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +628 -131
- package/dist/Schema.js.map +1 -1
- package/dist/errors.d.ts +32 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +27 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +3 -1
- package/src/MessagesProvider.ts +115 -0
- package/src/Schema.ts +814 -147
- package/src/errors.ts +48 -0
- package/src/index.ts +4 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SimpleMessagesProvider — VineJS-compatible message lookup.
|
|
3
|
+
*
|
|
4
|
+
* Resolves an error message for a `(rule, field)` pair using a `'field.rule'`
|
|
5
|
+
* → template map, human-readable field labels, wildcard (`*`) segments for
|
|
6
|
+
* array items, and mustache `{{ field }}` interpolation. Mirrors
|
|
7
|
+
* `@vinejs/vine`'s provider so validators authored against Vine's message
|
|
8
|
+
* conventions behave identically here.
|
|
9
|
+
*/
|
|
10
|
+
/** Rule name → message template, e.g. `{ required: 'The {{ field }} is required' }`. */
|
|
11
|
+
export type ValidationMessages = Record<string, string>;
|
|
12
|
+
/** Field path → human label, e.g. `{ 'user.email': 'Email address' }`. */
|
|
13
|
+
export type ValidationFields = Record<string, string>;
|
|
14
|
+
/** Interpolation values handed to a message template. */
|
|
15
|
+
export type MessageArgs = Record<string, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Contract any messages provider must satisfy — a single `getMessage` lookup.
|
|
18
|
+
* Keeping it an interface lets consumers swap in their own (e.g. i18n-backed)
|
|
19
|
+
* provider without importing the concrete class.
|
|
20
|
+
*/
|
|
21
|
+
export interface MessagesProviderContract {
|
|
22
|
+
getMessage(rawMessage: string, rule: string, field: string, args?: MessageArgs): string;
|
|
23
|
+
}
|
|
24
|
+
export declare class SimpleMessagesProvider implements MessagesProviderContract {
|
|
25
|
+
#private;
|
|
26
|
+
constructor(messages: ValidationMessages, fields?: ValidationFields);
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a message. Priority (VineJS order):
|
|
29
|
+
* 1. field-specific `user.email.required`
|
|
30
|
+
* 2. wildcard path `*.required` / `tags.*.minLength`
|
|
31
|
+
* 3. generic rule `required`
|
|
32
|
+
* 4. raw rule message (fallback)
|
|
33
|
+
*/
|
|
34
|
+
getMessage(rawMessage: string, rule: string, field: string, args?: MessageArgs): string;
|
|
35
|
+
toJSON(): {
|
|
36
|
+
messages: ValidationMessages;
|
|
37
|
+
fields: ValidationFields;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=MessagesProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagesProvider.d.ts","sourceRoot":"","sources":["../src/MessagesProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxD,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAOlD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC,UAAU,CACT,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GAChB,MAAM,CAAC;CACV;AAaD,qBAAa,sBAAuB,YAAW,wBAAwB;;gBAI1D,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAuBnE;;;;;;OAMG;IACH,UAAU,CACT,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GAChB,MAAM;IAwBT,MAAM,IAAI;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE;CAGpE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SimpleMessagesProvider — VineJS-compatible message lookup.
|
|
3
|
+
*
|
|
4
|
+
* Resolves an error message for a `(rule, field)` pair using a `'field.rule'`
|
|
5
|
+
* → template map, human-readable field labels, wildcard (`*`) segments for
|
|
6
|
+
* array items, and mustache `{{ field }}` interpolation. Mirrors
|
|
7
|
+
* `@vinejs/vine`'s provider so validators authored against Vine's message
|
|
8
|
+
* conventions behave identically here.
|
|
9
|
+
*/
|
|
10
|
+
/** Narrow to a plain record so dotted-path interpolation can index it. */
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === "object" && value !== null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Replace a dotted field path's numeric segments with `*` so array items share
|
|
16
|
+
* a single wildcard message key — `tags.0.name` → `tags.*.name` (VineJS parity).
|
|
17
|
+
*/
|
|
18
|
+
function toWildcardPath(field) {
|
|
19
|
+
return field
|
|
20
|
+
.split(".")
|
|
21
|
+
.map((segment) => (/^\d+$/.test(segment) ? "*" : segment))
|
|
22
|
+
.join(".");
|
|
23
|
+
}
|
|
24
|
+
export class SimpleMessagesProvider {
|
|
25
|
+
#messages;
|
|
26
|
+
#fields;
|
|
27
|
+
constructor(messages, fields) {
|
|
28
|
+
this.#messages = messages;
|
|
29
|
+
this.#fields = fields ?? {};
|
|
30
|
+
}
|
|
31
|
+
/** Mustache-style `{{ token }}` interpolation with dotted-path lookup. */
|
|
32
|
+
#interpolate(message, data) {
|
|
33
|
+
if (!message.includes("{{")) {
|
|
34
|
+
return message;
|
|
35
|
+
}
|
|
36
|
+
return message.replace(/{{(.*?)}}/g, (_match, rawKey) => {
|
|
37
|
+
const tokens = rawKey.trim().split(".");
|
|
38
|
+
let output = data;
|
|
39
|
+
for (const token of tokens) {
|
|
40
|
+
if (!isRecord(output)) {
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
output = Object.hasOwn(output, token) ? output[token] : undefined;
|
|
44
|
+
}
|
|
45
|
+
return output === undefined || output === null ? "" : String(output);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a message. Priority (VineJS order):
|
|
50
|
+
* 1. field-specific `user.email.required`
|
|
51
|
+
* 2. wildcard path `*.required` / `tags.*.minLength`
|
|
52
|
+
* 3. generic rule `required`
|
|
53
|
+
* 4. raw rule message (fallback)
|
|
54
|
+
*/
|
|
55
|
+
getMessage(rawMessage, rule, field, args) {
|
|
56
|
+
const fieldName = this.#fields[field] ?? field;
|
|
57
|
+
const data = { field: fieldName, ...args };
|
|
58
|
+
const fieldMessage = this.#messages[`${field}.${rule}`];
|
|
59
|
+
if (fieldMessage !== undefined) {
|
|
60
|
+
return this.#interpolate(fieldMessage, data);
|
|
61
|
+
}
|
|
62
|
+
const wildcard = toWildcardPath(field);
|
|
63
|
+
const wildcardMessage = wildcard !== field ? this.#messages[`${wildcard}.${rule}`] : undefined;
|
|
64
|
+
if (wildcardMessage !== undefined) {
|
|
65
|
+
return this.#interpolate(wildcardMessage, data);
|
|
66
|
+
}
|
|
67
|
+
const ruleMessage = this.#messages[rule];
|
|
68
|
+
if (ruleMessage !== undefined) {
|
|
69
|
+
return this.#interpolate(ruleMessage, data);
|
|
70
|
+
}
|
|
71
|
+
return this.#interpolate(rawMessage, data);
|
|
72
|
+
}
|
|
73
|
+
toJSON() {
|
|
74
|
+
return { messages: this.#messages, fields: this.#fields };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=MessagesProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagesProvider.js","sourceRoot":"","sources":["../src/MessagesProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema.d.ts
CHANGED
|
@@ -3,12 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @implements FR38, FR39, FR40, FR41
|
|
5
5
|
*/
|
|
6
|
+
import type { MessagesProviderContract } from "./MessagesProvider.js";
|
|
6
7
|
export type ValidationMessageParams = Record<string, string | number | boolean>;
|
|
7
8
|
export type ValidationTranslator = (key: string, params?: ValidationMessageParams) => string | undefined;
|
|
8
9
|
export interface ValidationError {
|
|
9
10
|
field: string;
|
|
10
11
|
rule: string;
|
|
11
12
|
message: string;
|
|
13
|
+
/** Array index when the field is an array item (VineJS parity). */
|
|
14
|
+
index?: number;
|
|
15
|
+
/** Rule metadata carried for reporters/i18n (e.g. `{ min: 3 }`). */
|
|
16
|
+
meta?: Record<string, unknown>;
|
|
12
17
|
}
|
|
13
18
|
/**
|
|
14
19
|
* Field context handed to `.use()` rules — mirrors VineJS's field context. It
|
|
@@ -77,33 +82,69 @@ export type ValidationResult<T = Record<string, unknown>> = {
|
|
|
77
82
|
export interface ValidateOptions {
|
|
78
83
|
/** Runtime metadata exposed to `.use()` rules via `field.meta` (VineJS parity). */
|
|
79
84
|
meta?: Record<string, unknown>;
|
|
85
|
+
/**
|
|
86
|
+
* VineJS-style messages provider. When supplied, default rule messages are
|
|
87
|
+
* resolved through it (custom `.message()` overrides still win, and the
|
|
88
|
+
* provider takes precedence over a globally bound translator).
|
|
89
|
+
*/
|
|
90
|
+
messagesProvider?: MessagesProviderContract;
|
|
80
91
|
}
|
|
81
92
|
export interface ValidationSchema<T = Record<string, unknown>> {
|
|
82
93
|
fields: Record<string, RuleChain>;
|
|
94
|
+
/** Result-based validation (superset) — never throws. */
|
|
83
95
|
validate(data: unknown, options?: ValidateOptions): ValidationResult<T>;
|
|
96
|
+
/**
|
|
97
|
+
* Throwing validation (VineJS/Adonis parity). Returns the validated data on
|
|
98
|
+
* success; throws {@link RuneValidationError} (`E_VALIDATION_ERROR`, HTTP 422)
|
|
99
|
+
* with a structured `.messages` array on failure.
|
|
100
|
+
*/
|
|
101
|
+
validateOrThrow(data: unknown, options?: ValidateOptions): T;
|
|
84
102
|
}
|
|
85
103
|
/** Context threaded through validation so field rules can reach root/parent/meta. */
|
|
86
104
|
interface RunContext {
|
|
87
105
|
data: Record<string, unknown>;
|
|
88
106
|
parent: Record<string, unknown> | unknown[];
|
|
89
107
|
meta: Record<string, unknown>;
|
|
108
|
+
messagesProvider?: MessagesProviderContract;
|
|
90
109
|
}
|
|
110
|
+
/** Extract the phantom output type of a chain. */
|
|
111
|
+
type OutputOf<C> = C extends RuleChain<infer O> ? O : never;
|
|
112
|
+
/** Keys whose output includes `undefined` become optional in the inferred shape. */
|
|
113
|
+
type OptionalKeys<S> = {
|
|
114
|
+
[K in keyof S]: undefined extends OutputOf<S[K]> ? K : never;
|
|
115
|
+
}[keyof S];
|
|
116
|
+
/** Flatten an intersection into a single readable object type. */
|
|
117
|
+
type Prettify<T> = {
|
|
118
|
+
[K in keyof T]: T[K];
|
|
119
|
+
} & unknown;
|
|
120
|
+
/**
|
|
121
|
+
* Infer the validated data shape from a schema's field map — the type
|
|
122
|
+
* `result.data` carries once `result.valid === true`. `rules.string()` →
|
|
123
|
+
* `string`, `.optional()` → an optional key, `.nullable()` → `T | null`,
|
|
124
|
+
* `.object(shape)`/`.array(item)` recurse.
|
|
125
|
+
*/
|
|
126
|
+
export type Infer<S> = Prettify<{
|
|
127
|
+
[K in Exclude<keyof S, OptionalKeys<S>>]: OutputOf<S[K]>;
|
|
128
|
+
} & {
|
|
129
|
+
[K in OptionalKeys<S>]?: Exclude<OutputOf<S[K]>, undefined>;
|
|
130
|
+
}>;
|
|
91
131
|
/**
|
|
92
132
|
* Create a validation schema.
|
|
93
133
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
134
|
+
* The field map's rule chains are phantom-typed, so `result.data` is inferred
|
|
135
|
+
* automatically — `schema({ email: rules.string(), age: rules.number() })`
|
|
136
|
+
* types `data` as `{ email: string; age: number }` with no manual generic.
|
|
97
137
|
*
|
|
98
|
-
* const RegisterValidator = schema
|
|
138
|
+
* const RegisterValidator = schema({
|
|
99
139
|
* email: rules.string().email(),
|
|
100
|
-
*
|
|
140
|
+
* age: rules.number().optional(),
|
|
101
141
|
* });
|
|
142
|
+
* // Infer<typeof RegisterValidator> not needed — result.data is typed.
|
|
102
143
|
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* own narrowing continue to compile.
|
|
144
|
+
* An explicit generic is still accepted for back-compat
|
|
145
|
+
* (`schema<MyType>({ ... })`), overriding inference.
|
|
106
146
|
*/
|
|
147
|
+
export declare function schema<S extends Record<string, RuleChain>>(fields: S): ValidationSchema<Infer<S>>;
|
|
107
148
|
export declare function schema<T = Record<string, unknown>>(fields: Record<string, RuleChain>): ValidationSchema<T>;
|
|
108
149
|
export declare function setValidationTranslator(translator?: ValidationTranslator): void;
|
|
109
150
|
export declare function bindRosetta(rosetta: {
|
|
@@ -113,43 +154,126 @@ export declare function bindRosetta(rosetta: {
|
|
|
113
154
|
export interface RuleDef {
|
|
114
155
|
name: string;
|
|
115
156
|
param?: number;
|
|
157
|
+
/** Interpolation args exposed to i18n/messages providers (e.g. `{ min: 3 }`). */
|
|
158
|
+
args?: Record<string, unknown>;
|
|
116
159
|
validate: (value: unknown) => boolean;
|
|
117
160
|
message: string;
|
|
161
|
+
/** Set when `.message()` overrode this rule's default text. */
|
|
162
|
+
hasCustomMessage?: boolean;
|
|
163
|
+
}
|
|
164
|
+
/** A conditional-required condition (VineJS `requiredWhen` family). */
|
|
165
|
+
interface RequiredCondition {
|
|
166
|
+
kind: "exists" | "missing" | "when";
|
|
167
|
+
otherField: string;
|
|
168
|
+
operator?: "=" | "!=" | ">" | "<" | ">=" | "<=" | "in" | "notIn";
|
|
169
|
+
value?: unknown;
|
|
118
170
|
}
|
|
119
|
-
/**
|
|
120
|
-
|
|
171
|
+
/** Phantom brand carrying the inferred output type (never assigned at runtime). */
|
|
172
|
+
declare const OUTPUT: unique symbol;
|
|
173
|
+
/** Rule chain — fluent, phantom-typed validation builder. */
|
|
174
|
+
export declare class RuleChain<Output = unknown> {
|
|
121
175
|
#private;
|
|
176
|
+
/** Phantom output type — drives {@link Infer}; never read at runtime. */
|
|
177
|
+
readonly [OUTPUT]: Output;
|
|
122
178
|
/** Public read access to rules (for OpenAPI generation, Rust bridge). */
|
|
123
179
|
get rules(): readonly RuleDef[];
|
|
124
180
|
get isOptionalField(): boolean;
|
|
181
|
+
/** Public read access to the `.nullable()` flag (keeps such schemas off the native path). */
|
|
182
|
+
get isNullable(): boolean;
|
|
125
183
|
get transforms(): ReadonlyArray<{
|
|
126
184
|
name: string;
|
|
127
|
-
fn: (value: unknown) => unknown;
|
|
185
|
+
fn: (value: unknown, field: FieldContext) => unknown;
|
|
128
186
|
}>;
|
|
129
187
|
/** Public read access to `.use()` rules (used to keep such schemas off the native path). */
|
|
130
188
|
get useRules(): readonly CompiledRule[];
|
|
131
|
-
/**
|
|
132
|
-
|
|
189
|
+
/** Public read access to `.parse()` pre-transforms (kept off the native path). */
|
|
190
|
+
get preTransforms(): ReadonlyArray<(value: unknown) => unknown>;
|
|
191
|
+
/** Whether this chain carries a `requiredWhen`-family condition. */
|
|
192
|
+
get hasConditionalRequired(): boolean;
|
|
193
|
+
/** Mark field as optional (absent / `undefined` allowed). */
|
|
194
|
+
optional(): RuleChain<Output | undefined>;
|
|
195
|
+
/** Mark field as nullable (`null` allowed, kept in the output). */
|
|
196
|
+
nullable(): RuleChain<Output | null>;
|
|
197
|
+
/** Mark field as both optional and nullable. */
|
|
198
|
+
nullish(): RuleChain<Output | null | undefined>;
|
|
199
|
+
/** Stop at the first failing rule for this field (VineJS bail). */
|
|
200
|
+
bail(enabled?: boolean): this;
|
|
133
201
|
/** Must be an object matching a nested schema. */
|
|
134
|
-
object
|
|
202
|
+
object<Sh extends Record<string, RuleChain>>(shape: Sh): RuleChain<Infer<Sh>>;
|
|
135
203
|
/** Must be an array. Items validated by the provided chain. */
|
|
136
|
-
array(itemChain?:
|
|
204
|
+
array<Item extends RuleChain>(itemChain?: Item): RuleChain<OutputOf<Item>[]>;
|
|
137
205
|
/** Must be a string. */
|
|
138
|
-
string():
|
|
206
|
+
string(): RuleChain<string>;
|
|
139
207
|
/** Must be a number. */
|
|
140
|
-
number():
|
|
208
|
+
number(): RuleChain<number>;
|
|
141
209
|
/** Must be a boolean. */
|
|
142
|
-
boolean():
|
|
143
|
-
/**
|
|
210
|
+
boolean(): RuleChain<boolean>;
|
|
211
|
+
/** Must equal one of `values` (enum). Narrows the output to the union. */
|
|
212
|
+
enum<const V extends readonly (string | number | boolean)[]>(values: V): RuleChain<V[number]>;
|
|
213
|
+
/** Must equal a literal value. */
|
|
214
|
+
literal<V extends string | number | boolean>(value: V): RuleChain<V>;
|
|
215
|
+
/** Minimum length (string) or minimum value (number). Alias of min/minLength. */
|
|
144
216
|
min(n: number): this;
|
|
145
|
-
/** Maximum length (string) or maximum value (number). */
|
|
217
|
+
/** Maximum length (string) or maximum value (number). Alias of max/maxLength. */
|
|
146
218
|
max(n: number): this;
|
|
219
|
+
/** Minimum length for a string or array (VineJS `minLength`). */
|
|
220
|
+
minLength(n: number): this;
|
|
221
|
+
/** Maximum length for a string or array (VineJS `maxLength`). */
|
|
222
|
+
maxLength(n: number): this;
|
|
223
|
+
/** Exact length for a string or array (VineJS `fixedLength`). */
|
|
224
|
+
fixedLength(n: number): this;
|
|
147
225
|
/** Must be a valid email. */
|
|
148
226
|
email(): this;
|
|
149
|
-
/** Must
|
|
227
|
+
/** Must match a regular expression (TS-only — never dispatched to Rust). */
|
|
228
|
+
regex(pattern: RegExp): this;
|
|
229
|
+
/** Must be a valid URL (TS-only — uses the WHATWG URL parser). */
|
|
230
|
+
url(): this;
|
|
231
|
+
/** Must be a valid UUID. */
|
|
232
|
+
uuid(): this;
|
|
233
|
+
/** Must contain only ASCII letters. */
|
|
234
|
+
alpha(): this;
|
|
235
|
+
/** Must contain only ASCII letters and digits. */
|
|
236
|
+
alphaNumeric(): this;
|
|
237
|
+
/** String must start with `substring`. */
|
|
238
|
+
startsWith(substring: string): this;
|
|
239
|
+
/** String must end with `substring`. */
|
|
240
|
+
endsWith(substring: string): this;
|
|
241
|
+
/** Value must be one of `values`. */
|
|
242
|
+
in(values: ReadonlyArray<string | number | boolean>): this;
|
|
243
|
+
/** Value must NOT be one of `values`. */
|
|
244
|
+
notIn(values: ReadonlyArray<string | number | boolean>): this;
|
|
245
|
+
/** Number must be positive (> 0) and finite. */
|
|
150
246
|
positive(): this;
|
|
247
|
+
/** Number must be negative (< 0) and finite. */
|
|
248
|
+
negative(): this;
|
|
249
|
+
/** Number must be >= 0 and finite. */
|
|
250
|
+
nonNegative(): this;
|
|
251
|
+
/** Number must fall within `[min, max]` (inclusive). */
|
|
252
|
+
range(min: number, max: number): this;
|
|
253
|
+
/** Number must have at most `digits` decimal places (TS-only). */
|
|
254
|
+
decimal(digits: number): this;
|
|
255
|
+
/** Must equal a sibling field (VineJS `sameAs`). Cross-field → TS-only. */
|
|
256
|
+
sameAs(otherField: string): this;
|
|
257
|
+
/** Must equal its `<field>_confirmation` sibling (VineJS `confirmed`). */
|
|
258
|
+
confirmed(options?: {
|
|
259
|
+
confirmationField?: string;
|
|
260
|
+
}): this;
|
|
261
|
+
/** Required only when `otherField` is present (non-null) — else optional. */
|
|
262
|
+
requiredIfExists(otherField: string): this;
|
|
263
|
+
/** Required only when `otherField` is absent/null — else optional. */
|
|
264
|
+
requiredIfMissing(otherField: string): this;
|
|
265
|
+
/** Required only when `otherField <op> value` holds — else optional. */
|
|
266
|
+
requiredWhen(otherField: string, operator: RequiredCondition["operator"], value: unknown): this;
|
|
151
267
|
/** Trim whitespace (transform). */
|
|
152
268
|
trim(): this;
|
|
269
|
+
/**
|
|
270
|
+
* Post-validation transform changing the output type (VineJS `transform`).
|
|
271
|
+
* `value` is `unknown` — narrow it in the callback (the no-cast rule forbids
|
|
272
|
+
* lying about a dynamically-produced value's static type).
|
|
273
|
+
*/
|
|
274
|
+
transform<U>(fn: (value: unknown, field: FieldContext) => U): RuleChain<U>;
|
|
275
|
+
/** Pre-validation transform of the raw input (VineJS `parse`). */
|
|
276
|
+
parse(fn: (value: unknown) => unknown): this;
|
|
153
277
|
/** Custom validation rule. */
|
|
154
278
|
custom(name: string, validate: (value: unknown) => boolean, message?: string): this;
|
|
155
279
|
/**
|
|
@@ -161,7 +285,7 @@ export declare class RuleChain {
|
|
|
161
285
|
/** Set custom error message for the last rule. */
|
|
162
286
|
message(msg: string): this;
|
|
163
287
|
/** Internal: validate a field value and return errors + transformed value. */
|
|
164
|
-
_validateWithTransform(field: string,
|
|
288
|
+
_validateWithTransform(field: string, rawValue: unknown, ctx?: RunContext): {
|
|
165
289
|
errors: ValidationError[];
|
|
166
290
|
transformed: unknown;
|
|
167
291
|
};
|
|
@@ -170,12 +294,18 @@ export declare class RuleChain {
|
|
|
170
294
|
/** Internal: apply transforms. */
|
|
171
295
|
_transform(value: unknown): unknown;
|
|
172
296
|
}
|
|
297
|
+
/** No-op alias of {@link schema} — VineJS `vine.compile()` API parity. */
|
|
298
|
+
export declare function compile<T extends ValidationSchema>(s: T): T;
|
|
173
299
|
/** Entry point for building rules. */
|
|
174
300
|
export declare const rules: {
|
|
175
|
-
string: () => RuleChain
|
|
176
|
-
number: () => RuleChain
|
|
177
|
-
boolean: () => RuleChain
|
|
178
|
-
any: () => RuleChain
|
|
301
|
+
string: () => RuleChain<string>;
|
|
302
|
+
number: () => RuleChain<number>;
|
|
303
|
+
boolean: () => RuleChain<boolean>;
|
|
304
|
+
any: () => RuleChain<unknown>;
|
|
305
|
+
object: <Sh extends Record<string, RuleChain>>(shape: Sh) => RuleChain<Infer<Sh>>;
|
|
306
|
+
array: <Item extends RuleChain>(item?: Item) => RuleChain<OutputOf<Item>[]>;
|
|
307
|
+
enum: <const V extends readonly (string | number | boolean)[]>(values: V) => RuleChain<V[number]>;
|
|
308
|
+
literal: <V extends string | number | boolean>(value: V) => RuleChain<V>;
|
|
179
309
|
};
|
|
180
310
|
export {};
|
|
181
311
|
//# sourceMappingURL=Schema.d.ts.map
|
package/dist/Schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|