@c9up/rune 0.1.5 → 0.1.6
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/Schema.d.ts +71 -2
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +73 -16
- package/dist/Schema.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -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 +1 -1
- package/src/Schema.ts +164 -20
- package/src/index.ts +5 -0
package/dist/Schema.d.ts
CHANGED
|
@@ -10,6 +10,55 @@ export interface ValidationError {
|
|
|
10
10
|
rule: string;
|
|
11
11
|
message: string;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Field context handed to `.use()` rules — mirrors VineJS's field context. It
|
|
15
|
+
* exposes the value plus the surrounding data so a rule can validate across
|
|
16
|
+
* fields (e.g. `password === passwordConfirmation`), and a `report()` sink to
|
|
17
|
+
* raise errors (VineJS reports instead of returning a boolean).
|
|
18
|
+
*/
|
|
19
|
+
export interface FieldContext {
|
|
20
|
+
/** The current field value (post-transform). */
|
|
21
|
+
value: unknown;
|
|
22
|
+
/** The root object being validated. Shared across fields — do NOT mutate. */
|
|
23
|
+
data: Record<string, unknown>;
|
|
24
|
+
/** The immediate parent container of this field (object or array). */
|
|
25
|
+
parent: Record<string, unknown> | unknown[];
|
|
26
|
+
/** Dotted path to the field, e.g. `address.city` or `tags.0`. */
|
|
27
|
+
field: string;
|
|
28
|
+
/** Runtime metadata passed to `validate(data, { meta })`. */
|
|
29
|
+
meta: Record<string, unknown>;
|
|
30
|
+
/** `true` while no error has been reported for this field yet. */
|
|
31
|
+
isValid: boolean;
|
|
32
|
+
/** Report a validation failure for this field. */
|
|
33
|
+
report(message: string, rule: string): void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A `.use()` rule validator — VineJS shape `(value, options, field)`. Report
|
|
37
|
+
* failures via `field.report(...)`; the return value is ignored.
|
|
38
|
+
*/
|
|
39
|
+
export type RuleValidator<Options = undefined> = (value: unknown, options: Options, field: FieldContext) => void;
|
|
40
|
+
/** A compiled `.use()` rule produced by {@link createRule}. */
|
|
41
|
+
export interface CompiledRule {
|
|
42
|
+
readonly __rune: "rule";
|
|
43
|
+
run(value: unknown, field: FieldContext): void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Turn a validator function into a reusable `.use()` rule — VineJS's
|
|
47
|
+
* `createRule`. Returns a factory: call it with the rule's options to get a
|
|
48
|
+
* `CompiledRule`, then attach it with `chain.use(rule(options))`.
|
|
49
|
+
*
|
|
50
|
+
* const sameAs = createRule<string>((value, other, field) => {
|
|
51
|
+
* if (value !== field.data[other]) {
|
|
52
|
+
* field.report(`Must match ${other}`, 'sameAs')
|
|
53
|
+
* }
|
|
54
|
+
* })
|
|
55
|
+
* schema({
|
|
56
|
+
* password: rules.string().min(8),
|
|
57
|
+
* passwordConfirmation: rules.string().use(sameAs('password')),
|
|
58
|
+
* })
|
|
59
|
+
*/
|
|
60
|
+
export declare function createRule(validator: RuleValidator<undefined>): () => CompiledRule;
|
|
61
|
+
export declare function createRule<Options>(validator: RuleValidator<Options>): (options: Options) => CompiledRule;
|
|
13
62
|
/**
|
|
14
63
|
* Validation result — discriminated union that narrows `data` to the schema's
|
|
15
64
|
* `T` when `valid` is `true`, removing the need for callers to cast or guard
|
|
@@ -24,9 +73,20 @@ export type ValidationResult<T = Record<string, unknown>> = {
|
|
|
24
73
|
errors: ValidationError[];
|
|
25
74
|
data?: undefined;
|
|
26
75
|
};
|
|
76
|
+
/** Options for {@link ValidationSchema.validate}. */
|
|
77
|
+
export interface ValidateOptions {
|
|
78
|
+
/** Runtime metadata exposed to `.use()` rules via `field.meta` (VineJS parity). */
|
|
79
|
+
meta?: Record<string, unknown>;
|
|
80
|
+
}
|
|
27
81
|
export interface ValidationSchema<T = Record<string, unknown>> {
|
|
28
82
|
fields: Record<string, RuleChain>;
|
|
29
|
-
validate(data: unknown): ValidationResult<T>;
|
|
83
|
+
validate(data: unknown, options?: ValidateOptions): ValidationResult<T>;
|
|
84
|
+
}
|
|
85
|
+
/** Context threaded through validation so field rules can reach root/parent/meta. */
|
|
86
|
+
interface RunContext {
|
|
87
|
+
data: Record<string, unknown>;
|
|
88
|
+
parent: Record<string, unknown> | unknown[];
|
|
89
|
+
meta: Record<string, unknown>;
|
|
30
90
|
}
|
|
31
91
|
/**
|
|
32
92
|
* Create a validation schema.
|
|
@@ -66,6 +126,8 @@ export declare class RuleChain {
|
|
|
66
126
|
name: string;
|
|
67
127
|
fn: (value: unknown) => unknown;
|
|
68
128
|
}>;
|
|
129
|
+
/** Public read access to `.use()` rules (used to keep such schemas off the native path). */
|
|
130
|
+
get useRules(): readonly CompiledRule[];
|
|
69
131
|
/** Mark field as optional. */
|
|
70
132
|
optional(): this;
|
|
71
133
|
/** Must be an object matching a nested schema. */
|
|
@@ -90,10 +152,16 @@ export declare class RuleChain {
|
|
|
90
152
|
trim(): this;
|
|
91
153
|
/** Custom validation rule. */
|
|
92
154
|
custom(name: string, validate: (value: unknown) => boolean, message?: string): this;
|
|
155
|
+
/**
|
|
156
|
+
* Attach a `.use()` rule (from {@link createRule}). Unlike `custom`, the rule
|
|
157
|
+
* receives a {@link FieldContext} with the root `data` and `parent`, so it can
|
|
158
|
+
* validate across fields. Runs after this field's type/value rules.
|
|
159
|
+
*/
|
|
160
|
+
use(rule: CompiledRule): this;
|
|
93
161
|
/** Set custom error message for the last rule. */
|
|
94
162
|
message(msg: string): this;
|
|
95
163
|
/** Internal: validate a field value and return errors + transformed value. */
|
|
96
|
-
_validateWithTransform(field: string, value: unknown): {
|
|
164
|
+
_validateWithTransform(field: string, value: unknown, ctx?: RunContext): {
|
|
97
165
|
errors: ValidationError[];
|
|
98
166
|
transformed: unknown;
|
|
99
167
|
};
|
|
@@ -109,4 +177,5 @@ export declare const rules: {
|
|
|
109
177
|
boolean: () => RuleChain;
|
|
110
178
|
any: () => RuleChain;
|
|
111
179
|
};
|
|
180
|
+
export {};
|
|
112
181
|
//# 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;AASH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAChF,MAAM,MAAM,oBAAoB,GAAG,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,uBAAuB,KAC5B,MAAM,GAAG,SAAS,CAAC;AAExB,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACrD;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema.js
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { RuneError } from "./errors.js";
|
|
7
7
|
import { isNativeAvailable, validateNative, warnNativeUnavailableOnce, } from "./native.js";
|
|
8
|
+
export function createRule(validator) {
|
|
9
|
+
return (options) => ({
|
|
10
|
+
__rune: "rule",
|
|
11
|
+
run(value, field) {
|
|
12
|
+
validator(value, options, field);
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Default context for internal callers that don't supply one (no root available). */
|
|
17
|
+
const EMPTY_RUN_CONTEXT = { data: {}, parent: {}, meta: {} };
|
|
8
18
|
/** Type guard: narrows `unknown` to a plain object (non-null, non-array, typeof 'object'). */
|
|
9
19
|
function isPlainObject(value) {
|
|
10
20
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -74,6 +84,8 @@ function resolveRuleMessage(field, rule) {
|
|
|
74
84
|
/** Compute once: does any field rule prevent dispatching to Rust? */
|
|
75
85
|
function detectHasCustomRules(fields) {
|
|
76
86
|
return Object.values(fields).some((chain) => {
|
|
87
|
+
if (chain.useRules.length > 0)
|
|
88
|
+
return true; // .use() rule — TS-only (Rust can't run JS)
|
|
77
89
|
return chain.rules.some((r) => {
|
|
78
90
|
if (!STANDARD_RULES.has(r.name))
|
|
79
91
|
return true; // custom rule
|
|
@@ -104,7 +116,7 @@ export function schema(fields) {
|
|
|
104
116
|
const hasCustomRules = detectHasCustomRules(fields);
|
|
105
117
|
return {
|
|
106
118
|
fields,
|
|
107
|
-
validate(data) {
|
|
119
|
+
validate(data, options) {
|
|
108
120
|
if (!isPlainObject(data)) {
|
|
109
121
|
return {
|
|
110
122
|
valid: false,
|
|
@@ -129,9 +141,16 @@ export function schema(fields) {
|
|
|
129
141
|
}
|
|
130
142
|
const errors = [];
|
|
131
143
|
const validated = {};
|
|
144
|
+
// Root context: `data` is the root, `parent` of a top-level field is the
|
|
145
|
+
// root too; nested/array recursion narrows `parent` as it descends.
|
|
146
|
+
const rootCtx = {
|
|
147
|
+
data,
|
|
148
|
+
parent: data,
|
|
149
|
+
meta: options?.meta ?? {},
|
|
150
|
+
};
|
|
132
151
|
for (const [field, chain] of Object.entries(fields)) {
|
|
133
152
|
const value = data[field];
|
|
134
|
-
const result = chain._validateWithTransform(field, value);
|
|
153
|
+
const result = chain._validateWithTransform(field, value, rootCtx);
|
|
135
154
|
errors.push(...result.errors);
|
|
136
155
|
if (result.errors.length === 0 && value !== undefined) {
|
|
137
156
|
validated[field] = result.transformed;
|
|
@@ -157,6 +176,7 @@ export class RuleChain {
|
|
|
157
176
|
#transforms = [];
|
|
158
177
|
#nestedSchema = null;
|
|
159
178
|
#arrayItemChain = null;
|
|
179
|
+
#useRules = [];
|
|
160
180
|
/** Public read access to rules (for OpenAPI generation, Rust bridge). */
|
|
161
181
|
get rules() {
|
|
162
182
|
return this.#rules;
|
|
@@ -167,6 +187,10 @@ export class RuleChain {
|
|
|
167
187
|
get transforms() {
|
|
168
188
|
return this.#transforms;
|
|
169
189
|
}
|
|
190
|
+
/** Public read access to `.use()` rules (used to keep such schemas off the native path). */
|
|
191
|
+
get useRules() {
|
|
192
|
+
return this.#useRules;
|
|
193
|
+
}
|
|
170
194
|
/** Mark field as optional. */
|
|
171
195
|
optional() {
|
|
172
196
|
this.#isOptional = true;
|
|
@@ -286,6 +310,18 @@ export class RuleChain {
|
|
|
286
310
|
});
|
|
287
311
|
return this;
|
|
288
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Attach a `.use()` rule (from {@link createRule}). Unlike `custom`, the rule
|
|
315
|
+
* receives a {@link FieldContext} with the root `data` and `parent`, so it can
|
|
316
|
+
* validate across fields. Runs after this field's type/value rules.
|
|
317
|
+
*/
|
|
318
|
+
use(rule) {
|
|
319
|
+
if (rule?.__rune !== "rule" || typeof rule.run !== "function") {
|
|
320
|
+
throw new RuneError("INVALID_RULE", "use() expects a compiled rule — call the factory first", { hint: "use(myRule()) or use(myRule(options)), not use(myRule)" });
|
|
321
|
+
}
|
|
322
|
+
this.#useRules.push(rule);
|
|
323
|
+
return this;
|
|
324
|
+
}
|
|
289
325
|
/** Set custom error message for the last rule. */
|
|
290
326
|
message(msg) {
|
|
291
327
|
if (this.#rules.length === 0) {
|
|
@@ -295,7 +331,7 @@ export class RuleChain {
|
|
|
295
331
|
return this;
|
|
296
332
|
}
|
|
297
333
|
/** Internal: validate a field value and return errors + transformed value. */
|
|
298
|
-
_validateWithTransform(field, value) {
|
|
334
|
+
_validateWithTransform(field, value, ctx = EMPTY_RUN_CONTEXT) {
|
|
299
335
|
if (value === undefined || value === null) {
|
|
300
336
|
if (this.#isOptional)
|
|
301
337
|
return { errors: [], transformed: value };
|
|
@@ -308,35 +344,56 @@ export class RuleChain {
|
|
|
308
344
|
// 2. Apply transforms (trim, etc.), then run value rules on the result.
|
|
309
345
|
let transformed = this.#applyTransformsTo(value);
|
|
310
346
|
const errors = this.#runValueRules(field, transformed);
|
|
347
|
+
// 3. Vine-style .use() rules — run with a FieldContext exposing the root
|
|
348
|
+
// `data` and `parent`, so a rule can validate across fields.
|
|
349
|
+
if (this.#useRules.length > 0) {
|
|
350
|
+
this.#runUseRules(field, transformed, ctx, errors);
|
|
351
|
+
}
|
|
311
352
|
// 4. Nested object validation (only if type check passed — not arrays)
|
|
312
|
-
if (this.#nestedSchema &&
|
|
313
|
-
|
|
314
|
-
transformed
|
|
315
|
-
!Array.isArray(transformed)) {
|
|
316
|
-
transformed = { ...transformed };
|
|
353
|
+
if (this.#nestedSchema && isPlainObject(transformed)) {
|
|
354
|
+
const obj = { ...transformed };
|
|
355
|
+
transformed = obj;
|
|
317
356
|
for (const [nestedField, chain] of Object.entries(this.#nestedSchema)) {
|
|
318
|
-
const
|
|
319
|
-
const nestedResult = chain._validateWithTransform(`${field}.${nestedField}`, nestedValue);
|
|
357
|
+
const nestedResult = chain._validateWithTransform(`${field}.${nestedField}`, obj[nestedField], { data: ctx.data, parent: obj, meta: ctx.meta });
|
|
320
358
|
errors.push(...nestedResult.errors);
|
|
321
359
|
if (nestedResult.transformed !== undefined) {
|
|
322
|
-
|
|
323
|
-
nestedResult.transformed;
|
|
360
|
+
obj[nestedField] = nestedResult.transformed;
|
|
324
361
|
}
|
|
325
362
|
}
|
|
326
363
|
}
|
|
327
364
|
// 5. Array item validation
|
|
328
365
|
if (this.#arrayItemChain && Array.isArray(transformed)) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
366
|
+
const arr = [...transformed];
|
|
367
|
+
transformed = arr;
|
|
368
|
+
for (let i = 0; i < arr.length; i++) {
|
|
369
|
+
const itemResult = this.#arrayItemChain._validateWithTransform(`${field}.${i}`, arr[i], { data: ctx.data, parent: arr, meta: ctx.meta });
|
|
332
370
|
errors.push(...itemResult.errors);
|
|
333
371
|
if (itemResult.transformed !== undefined) {
|
|
334
|
-
|
|
372
|
+
arr[i] = itemResult.transformed;
|
|
335
373
|
}
|
|
336
374
|
}
|
|
337
375
|
}
|
|
338
376
|
return { errors, transformed };
|
|
339
377
|
}
|
|
378
|
+
/** Run `.use()` rules on the transformed value with a fresh FieldContext. */
|
|
379
|
+
#runUseRules(field, transformed, ctx, errors) {
|
|
380
|
+
const fieldCtx = {
|
|
381
|
+
value: transformed,
|
|
382
|
+
data: ctx.data,
|
|
383
|
+
parent: ctx.parent,
|
|
384
|
+
field,
|
|
385
|
+
meta: ctx.meta,
|
|
386
|
+
isValid: errors.length === 0,
|
|
387
|
+
report(message, rule) {
|
|
388
|
+
errors.push({ field, rule, message });
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
for (const rule of this.#useRules) {
|
|
392
|
+
// Refresh isValid so a rule can early-return once the field has failed.
|
|
393
|
+
fieldCtx.isValid = errors.length === 0;
|
|
394
|
+
rule.run(transformed, fieldCtx);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
340
397
|
#requiredError(field) {
|
|
341
398
|
return {
|
|
342
399
|
field,
|
package/dist/Schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* @implements FR38, FR39, FR40, FR41, FR42
|
|
5
5
|
*/
|
|
6
6
|
export { RuneError } from "./errors.js";
|
|
7
|
-
export type { RuleChain, ValidationError, ValidationMessageParams, ValidationResult, ValidationSchema, ValidationTranslator, } from "./Schema.js";
|
|
8
|
-
export { bindRosetta, rules, schema, setValidationTranslator, } from "./Schema.js";
|
|
7
|
+
export type { CompiledRule, FieldContext, RuleChain, RuleValidator, ValidateOptions, ValidationError, ValidationMessageParams, ValidationResult, ValidationSchema, ValidationTranslator, } from "./Schema.js";
|
|
8
|
+
export { bindRosetta, createRule, rules, schema, setValidationTranslator, } from "./Schema.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACX,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACX,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,WAAW,EACX,UAAU,EACV,KAAK,EACL,MAAM,EACN,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* @implements FR38, FR39, FR40, FR41, FR42
|
|
5
5
|
*/
|
|
6
6
|
export { RuneError } from "./errors.js";
|
|
7
|
-
export { bindRosetta, rules, schema, setValidationTranslator, } from "./Schema.js";
|
|
7
|
+
export { bindRosetta, createRule, rules, schema, setValidationTranslator, } from "./Schema.js";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC,OAAO,EACN,WAAW,EACX,UAAU,EACV,KAAK,EACL,MAAM,EACN,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
|
package/index.darwin-arm64.node
CHANGED
|
Binary file
|
package/index.darwin-x64.node
CHANGED
|
Binary file
|
|
Binary file
|
package/index.linux-x64-gnu.node
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/src/Schema.ts
CHANGED
|
@@ -23,6 +23,77 @@ export interface ValidationError {
|
|
|
23
23
|
message: string;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Field context handed to `.use()` rules — mirrors VineJS's field context. It
|
|
28
|
+
* exposes the value plus the surrounding data so a rule can validate across
|
|
29
|
+
* fields (e.g. `password === passwordConfirmation`), and a `report()` sink to
|
|
30
|
+
* raise errors (VineJS reports instead of returning a boolean).
|
|
31
|
+
*/
|
|
32
|
+
export interface FieldContext {
|
|
33
|
+
/** The current field value (post-transform). */
|
|
34
|
+
value: unknown;
|
|
35
|
+
/** The root object being validated. Shared across fields — do NOT mutate. */
|
|
36
|
+
data: Record<string, unknown>;
|
|
37
|
+
/** The immediate parent container of this field (object or array). */
|
|
38
|
+
parent: Record<string, unknown> | unknown[];
|
|
39
|
+
/** Dotted path to the field, e.g. `address.city` or `tags.0`. */
|
|
40
|
+
field: string;
|
|
41
|
+
/** Runtime metadata passed to `validate(data, { meta })`. */
|
|
42
|
+
meta: Record<string, unknown>;
|
|
43
|
+
/** `true` while no error has been reported for this field yet. */
|
|
44
|
+
isValid: boolean;
|
|
45
|
+
/** Report a validation failure for this field. */
|
|
46
|
+
report(message: string, rule: string): void;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A `.use()` rule validator — VineJS shape `(value, options, field)`. Report
|
|
51
|
+
* failures via `field.report(...)`; the return value is ignored.
|
|
52
|
+
*/
|
|
53
|
+
export type RuleValidator<Options = undefined> = (
|
|
54
|
+
value: unknown,
|
|
55
|
+
options: Options,
|
|
56
|
+
field: FieldContext,
|
|
57
|
+
) => void;
|
|
58
|
+
|
|
59
|
+
/** A compiled `.use()` rule produced by {@link createRule}. */
|
|
60
|
+
export interface CompiledRule {
|
|
61
|
+
readonly __rune: "rule";
|
|
62
|
+
run(value: unknown, field: FieldContext): void;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Turn a validator function into a reusable `.use()` rule — VineJS's
|
|
67
|
+
* `createRule`. Returns a factory: call it with the rule's options to get a
|
|
68
|
+
* `CompiledRule`, then attach it with `chain.use(rule(options))`.
|
|
69
|
+
*
|
|
70
|
+
* const sameAs = createRule<string>((value, other, field) => {
|
|
71
|
+
* if (value !== field.data[other]) {
|
|
72
|
+
* field.report(`Must match ${other}`, 'sameAs')
|
|
73
|
+
* }
|
|
74
|
+
* })
|
|
75
|
+
* schema({
|
|
76
|
+
* password: rules.string().min(8),
|
|
77
|
+
* passwordConfirmation: rules.string().use(sameAs('password')),
|
|
78
|
+
* })
|
|
79
|
+
*/
|
|
80
|
+
export function createRule(
|
|
81
|
+
validator: RuleValidator<undefined>,
|
|
82
|
+
): () => CompiledRule;
|
|
83
|
+
export function createRule<Options>(
|
|
84
|
+
validator: RuleValidator<Options>,
|
|
85
|
+
): (options: Options) => CompiledRule;
|
|
86
|
+
export function createRule<Options>(
|
|
87
|
+
validator: RuleValidator<Options>,
|
|
88
|
+
): (options: Options) => CompiledRule {
|
|
89
|
+
return (options: Options): CompiledRule => ({
|
|
90
|
+
__rune: "rule",
|
|
91
|
+
run(value: unknown, field: FieldContext): void {
|
|
92
|
+
validator(value, options, field);
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
26
97
|
/**
|
|
27
98
|
* Validation result — discriminated union that narrows `data` to the schema's
|
|
28
99
|
* `T` when `valid` is `true`, removing the need for callers to cast or guard
|
|
@@ -32,11 +103,27 @@ export type ValidationResult<T = Record<string, unknown>> =
|
|
|
32
103
|
| { valid: true; errors: ValidationError[]; data: T }
|
|
33
104
|
| { valid: false; errors: ValidationError[]; data?: undefined };
|
|
34
105
|
|
|
106
|
+
/** Options for {@link ValidationSchema.validate}. */
|
|
107
|
+
export interface ValidateOptions {
|
|
108
|
+
/** Runtime metadata exposed to `.use()` rules via `field.meta` (VineJS parity). */
|
|
109
|
+
meta?: Record<string, unknown>;
|
|
110
|
+
}
|
|
111
|
+
|
|
35
112
|
export interface ValidationSchema<T = Record<string, unknown>> {
|
|
36
113
|
fields: Record<string, RuleChain>;
|
|
37
|
-
validate(data: unknown): ValidationResult<T>;
|
|
114
|
+
validate(data: unknown, options?: ValidateOptions): ValidationResult<T>;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Context threaded through validation so field rules can reach root/parent/meta. */
|
|
118
|
+
interface RunContext {
|
|
119
|
+
data: Record<string, unknown>;
|
|
120
|
+
parent: Record<string, unknown> | unknown[];
|
|
121
|
+
meta: Record<string, unknown>;
|
|
38
122
|
}
|
|
39
123
|
|
|
124
|
+
/** Default context for internal callers that don't supply one (no root available). */
|
|
125
|
+
const EMPTY_RUN_CONTEXT: RunContext = { data: {}, parent: {}, meta: {} };
|
|
126
|
+
|
|
40
127
|
/** Type guard: narrows `unknown` to a plain object (non-null, non-array, typeof 'object'). */
|
|
41
128
|
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
42
129
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -119,6 +206,7 @@ function resolveRuleMessage(field: string, rule: RuleDef): string {
|
|
|
119
206
|
/** Compute once: does any field rule prevent dispatching to Rust? */
|
|
120
207
|
function detectHasCustomRules(fields: Record<string, RuleChain>): boolean {
|
|
121
208
|
return Object.values(fields).some((chain) => {
|
|
209
|
+
if (chain.useRules.length > 0) return true; // .use() rule — TS-only (Rust can't run JS)
|
|
122
210
|
return chain.rules.some((r) => {
|
|
123
211
|
if (!STANDARD_RULES.has(r.name)) return true; // custom rule
|
|
124
212
|
if (!hasDefaultMessage(r)) return true; // custom message
|
|
@@ -151,7 +239,7 @@ export function schema<T = Record<string, unknown>>(
|
|
|
151
239
|
|
|
152
240
|
return {
|
|
153
241
|
fields,
|
|
154
|
-
validate(data: unknown): ValidationResult<T> {
|
|
242
|
+
validate(data: unknown, options?: ValidateOptions): ValidationResult<T> {
|
|
155
243
|
if (!isPlainObject(data)) {
|
|
156
244
|
return {
|
|
157
245
|
valid: false,
|
|
@@ -178,10 +266,17 @@ export function schema<T = Record<string, unknown>>(
|
|
|
178
266
|
|
|
179
267
|
const errors: ValidationError[] = [];
|
|
180
268
|
const validated: Record<string, unknown> = {};
|
|
269
|
+
// Root context: `data` is the root, `parent` of a top-level field is the
|
|
270
|
+
// root too; nested/array recursion narrows `parent` as it descends.
|
|
271
|
+
const rootCtx: RunContext = {
|
|
272
|
+
data,
|
|
273
|
+
parent: data,
|
|
274
|
+
meta: options?.meta ?? {},
|
|
275
|
+
};
|
|
181
276
|
|
|
182
277
|
for (const [field, chain] of Object.entries(fields)) {
|
|
183
278
|
const value = data[field];
|
|
184
|
-
const result = chain._validateWithTransform(field, value);
|
|
279
|
+
const result = chain._validateWithTransform(field, value, rootCtx);
|
|
185
280
|
errors.push(...result.errors);
|
|
186
281
|
if (result.errors.length === 0 && value !== undefined) {
|
|
187
282
|
validated[field] = result.transformed;
|
|
@@ -223,6 +318,7 @@ export class RuleChain {
|
|
|
223
318
|
#transforms: Array<{ name: string; fn: (value: unknown) => unknown }> = [];
|
|
224
319
|
#nestedSchema: Record<string, RuleChain> | null = null;
|
|
225
320
|
#arrayItemChain: RuleChain | null = null;
|
|
321
|
+
#useRules: CompiledRule[] = [];
|
|
226
322
|
|
|
227
323
|
/** Public read access to rules (for OpenAPI generation, Rust bridge). */
|
|
228
324
|
get rules(): readonly RuleDef[] {
|
|
@@ -237,6 +333,10 @@ export class RuleChain {
|
|
|
237
333
|
}> {
|
|
238
334
|
return this.#transforms;
|
|
239
335
|
}
|
|
336
|
+
/** Public read access to `.use()` rules (used to keep such schemas off the native path). */
|
|
337
|
+
get useRules(): readonly CompiledRule[] {
|
|
338
|
+
return this.#useRules;
|
|
339
|
+
}
|
|
240
340
|
|
|
241
341
|
/** Mark field as optional. */
|
|
242
342
|
optional(): this {
|
|
@@ -377,6 +477,23 @@ export class RuleChain {
|
|
|
377
477
|
return this;
|
|
378
478
|
}
|
|
379
479
|
|
|
480
|
+
/**
|
|
481
|
+
* Attach a `.use()` rule (from {@link createRule}). Unlike `custom`, the rule
|
|
482
|
+
* receives a {@link FieldContext} with the root `data` and `parent`, so it can
|
|
483
|
+
* validate across fields. Runs after this field's type/value rules.
|
|
484
|
+
*/
|
|
485
|
+
use(rule: CompiledRule): this {
|
|
486
|
+
if (rule?.__rune !== "rule" || typeof rule.run !== "function") {
|
|
487
|
+
throw new RuneError(
|
|
488
|
+
"INVALID_RULE",
|
|
489
|
+
"use() expects a compiled rule — call the factory first",
|
|
490
|
+
{ hint: "use(myRule()) or use(myRule(options)), not use(myRule)" },
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
this.#useRules.push(rule);
|
|
494
|
+
return this;
|
|
495
|
+
}
|
|
496
|
+
|
|
380
497
|
/** Set custom error message for the last rule. */
|
|
381
498
|
message(msg: string): this {
|
|
382
499
|
if (this.#rules.length === 0) {
|
|
@@ -390,6 +507,7 @@ export class RuleChain {
|
|
|
390
507
|
_validateWithTransform(
|
|
391
508
|
field: string,
|
|
392
509
|
value: unknown,
|
|
510
|
+
ctx: RunContext = EMPTY_RUN_CONTEXT,
|
|
393
511
|
): { errors: ValidationError[]; transformed: unknown } {
|
|
394
512
|
if (value === undefined || value === null) {
|
|
395
513
|
if (this.#isOptional) return { errors: [], transformed: value };
|
|
@@ -404,41 +522,42 @@ export class RuleChain {
|
|
|
404
522
|
let transformed = this.#applyTransformsTo(value);
|
|
405
523
|
const errors = this.#runValueRules(field, transformed);
|
|
406
524
|
|
|
525
|
+
// 3. Vine-style .use() rules — run with a FieldContext exposing the root
|
|
526
|
+
// `data` and `parent`, so a rule can validate across fields.
|
|
527
|
+
if (this.#useRules.length > 0) {
|
|
528
|
+
this.#runUseRules(field, transformed, ctx, errors);
|
|
529
|
+
}
|
|
530
|
+
|
|
407
531
|
// 4. Nested object validation (only if type check passed — not arrays)
|
|
408
|
-
if (
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
transformed !== null &&
|
|
412
|
-
!Array.isArray(transformed)
|
|
413
|
-
) {
|
|
414
|
-
transformed = { ...(transformed as Record<string, unknown>) };
|
|
532
|
+
if (this.#nestedSchema && isPlainObject(transformed)) {
|
|
533
|
+
const obj: Record<string, unknown> = { ...transformed };
|
|
534
|
+
transformed = obj;
|
|
415
535
|
for (const [nestedField, chain] of Object.entries(this.#nestedSchema)) {
|
|
416
|
-
const nestedValue = (transformed as Record<string, unknown>)[
|
|
417
|
-
nestedField
|
|
418
|
-
];
|
|
419
536
|
const nestedResult = chain._validateWithTransform(
|
|
420
537
|
`${field}.${nestedField}`,
|
|
421
|
-
|
|
538
|
+
obj[nestedField],
|
|
539
|
+
{ data: ctx.data, parent: obj, meta: ctx.meta },
|
|
422
540
|
);
|
|
423
541
|
errors.push(...nestedResult.errors);
|
|
424
542
|
if (nestedResult.transformed !== undefined) {
|
|
425
|
-
|
|
426
|
-
nestedResult.transformed;
|
|
543
|
+
obj[nestedField] = nestedResult.transformed;
|
|
427
544
|
}
|
|
428
545
|
}
|
|
429
546
|
}
|
|
430
547
|
|
|
431
548
|
// 5. Array item validation
|
|
432
549
|
if (this.#arrayItemChain && Array.isArray(transformed)) {
|
|
433
|
-
|
|
434
|
-
|
|
550
|
+
const arr: unknown[] = [...transformed];
|
|
551
|
+
transformed = arr;
|
|
552
|
+
for (let i = 0; i < arr.length; i++) {
|
|
435
553
|
const itemResult = this.#arrayItemChain._validateWithTransform(
|
|
436
554
|
`${field}.${i}`,
|
|
437
|
-
|
|
555
|
+
arr[i],
|
|
556
|
+
{ data: ctx.data, parent: arr, meta: ctx.meta },
|
|
438
557
|
);
|
|
439
558
|
errors.push(...itemResult.errors);
|
|
440
559
|
if (itemResult.transformed !== undefined) {
|
|
441
|
-
|
|
560
|
+
arr[i] = itemResult.transformed;
|
|
442
561
|
}
|
|
443
562
|
}
|
|
444
563
|
}
|
|
@@ -446,6 +565,31 @@ export class RuleChain {
|
|
|
446
565
|
return { errors, transformed };
|
|
447
566
|
}
|
|
448
567
|
|
|
568
|
+
/** Run `.use()` rules on the transformed value with a fresh FieldContext. */
|
|
569
|
+
#runUseRules(
|
|
570
|
+
field: string,
|
|
571
|
+
transformed: unknown,
|
|
572
|
+
ctx: RunContext,
|
|
573
|
+
errors: ValidationError[],
|
|
574
|
+
): void {
|
|
575
|
+
const fieldCtx: FieldContext = {
|
|
576
|
+
value: transformed,
|
|
577
|
+
data: ctx.data,
|
|
578
|
+
parent: ctx.parent,
|
|
579
|
+
field,
|
|
580
|
+
meta: ctx.meta,
|
|
581
|
+
isValid: errors.length === 0,
|
|
582
|
+
report(message: string, rule: string): void {
|
|
583
|
+
errors.push({ field, rule, message });
|
|
584
|
+
},
|
|
585
|
+
};
|
|
586
|
+
for (const rule of this.#useRules) {
|
|
587
|
+
// Refresh isValid so a rule can early-return once the field has failed.
|
|
588
|
+
fieldCtx.isValid = errors.length === 0;
|
|
589
|
+
rule.run(transformed, fieldCtx);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
449
593
|
#requiredError(field: string): ValidationError {
|
|
450
594
|
return {
|
|
451
595
|
field,
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
export { RuneError } from "./errors.js";
|
|
8
8
|
export type {
|
|
9
|
+
CompiledRule,
|
|
10
|
+
FieldContext,
|
|
9
11
|
RuleChain,
|
|
12
|
+
RuleValidator,
|
|
13
|
+
ValidateOptions,
|
|
10
14
|
ValidationError,
|
|
11
15
|
ValidationMessageParams,
|
|
12
16
|
ValidationResult,
|
|
@@ -15,6 +19,7 @@ export type {
|
|
|
15
19
|
} from "./Schema.js";
|
|
16
20
|
export {
|
|
17
21
|
bindRosetta,
|
|
22
|
+
createRule,
|
|
18
23
|
rules,
|
|
19
24
|
schema,
|
|
20
25
|
setValidationTranslator,
|