@zudojs/validation 0.0.1
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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/validationComposer/index.d.ts +7 -0
- package/dist/validationComposer/index.d.ts.map +1 -0
- package/dist/validationComposer/index.js +7 -0
- package/dist/validationComposer/index.js.map +1 -0
- package/dist/validationComposer/validationComposer.core.d.ts +51 -0
- package/dist/validationComposer/validationComposer.core.d.ts.map +1 -0
- package/dist/validationComposer/validationComposer.core.js +191 -0
- package/dist/validationComposer/validationComposer.core.js.map +1 -0
- package/dist/validationConstraints/index.d.ts +16 -0
- package/dist/validationConstraints/index.d.ts.map +1 -0
- package/dist/validationConstraints/index.js +24 -0
- package/dist/validationConstraints/index.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.array.d.ts +22 -0
- package/dist/validationConstraints/validationConstraints.array.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.array.js +55 -0
- package/dist/validationConstraints/validationConstraints.array.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.base.d.ts +47 -0
- package/dist/validationConstraints/validationConstraints.base.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.base.js +88 -0
- package/dist/validationConstraints/validationConstraints.base.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.circular.d.ts +25 -0
- package/dist/validationConstraints/validationConstraints.circular.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.circular.js +73 -0
- package/dist/validationConstraints/validationConstraints.circular.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.collection.d.ts +10 -0
- package/dist/validationConstraints/validationConstraints.collection.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.collection.js +22 -0
- package/dist/validationConstraints/validationConstraints.collection.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.date.d.ts +14 -0
- package/dist/validationConstraints/validationConstraints.date.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.date.js +30 -0
- package/dist/validationConstraints/validationConstraints.date.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.depth.d.ts +20 -0
- package/dist/validationConstraints/validationConstraints.depth.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.depth.js +70 -0
- package/dist/validationConstraints/validationConstraints.depth.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.number.d.ts +38 -0
- package/dist/validationConstraints/validationConstraints.number.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.number.js +92 -0
- package/dist/validationConstraints/validationConstraints.number.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.size.d.ts +20 -0
- package/dist/validationConstraints/validationConstraints.size.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.size.js +82 -0
- package/dist/validationConstraints/validationConstraints.size.js.map +1 -0
- package/dist/validationConstraints/validationConstraints.string.d.ts +50 -0
- package/dist/validationConstraints/validationConstraints.string.d.ts.map +1 -0
- package/dist/validationConstraints/validationConstraints.string.js +121 -0
- package/dist/validationConstraints/validationConstraints.string.js.map +1 -0
- package/dist/validationErrors/index.d.ts +8 -0
- package/dist/validationErrors/index.d.ts.map +1 -0
- package/dist/validationErrors/index.js +8 -0
- package/dist/validationErrors/index.js.map +1 -0
- package/dist/validationErrors/validationError.base.d.ts +60 -0
- package/dist/validationErrors/validationError.base.d.ts.map +1 -0
- package/dist/validationErrors/validationError.base.js +83 -0
- package/dist/validationErrors/validationError.base.js.map +1 -0
- package/dist/validationErrors/validationError.types.d.ts +30 -0
- package/dist/validationErrors/validationError.types.d.ts.map +1 -0
- package/dist/validationErrors/validationError.types.js +62 -0
- package/dist/validationErrors/validationError.types.js.map +1 -0
- package/dist/validationFactory/index.d.ts +7 -0
- package/dist/validationFactory/index.d.ts.map +1 -0
- package/dist/validationFactory/index.js +7 -0
- package/dist/validationFactory/index.js.map +1 -0
- package/dist/validationFactory/validationFactory.core.d.ts +40 -0
- package/dist/validationFactory/validationFactory.core.d.ts.map +1 -0
- package/dist/validationFactory/validationFactory.core.js +70 -0
- package/dist/validationFactory/validationFactory.core.js.map +1 -0
- package/dist/validationNormalizer/index.d.ts +8 -0
- package/dist/validationNormalizer/index.d.ts.map +1 -0
- package/dist/validationNormalizer/index.js +8 -0
- package/dist/validationNormalizer/index.js.map +1 -0
- package/dist/validationNormalizer/validationNormalizer.core.d.ts +27 -0
- package/dist/validationNormalizer/validationNormalizer.core.d.ts.map +1 -0
- package/dist/validationNormalizer/validationNormalizer.core.js +63 -0
- package/dist/validationNormalizer/validationNormalizer.core.js.map +1 -0
- package/dist/validationNormalizer/validationNormalizer.helpers.d.ts +38 -0
- package/dist/validationNormalizer/validationNormalizer.helpers.d.ts.map +1 -0
- package/dist/validationNormalizer/validationNormalizer.helpers.js +89 -0
- package/dist/validationNormalizer/validationNormalizer.helpers.js.map +1 -0
- package/dist/validationParser/index.d.ts +7 -0
- package/dist/validationParser/index.d.ts.map +1 -0
- package/dist/validationParser/index.js +7 -0
- package/dist/validationParser/index.js.map +1 -0
- package/dist/validationParser/validationParser.core.d.ts +42 -0
- package/dist/validationParser/validationParser.core.d.ts.map +1 -0
- package/dist/validationParser/validationParser.core.js +118 -0
- package/dist/validationParser/validationParser.core.js.map +1 -0
- package/dist/validationRegistry/index.d.ts +8 -0
- package/dist/validationRegistry/index.d.ts.map +1 -0
- package/dist/validationRegistry/index.js +8 -0
- package/dist/validationRegistry/index.js.map +1 -0
- package/dist/validationRegistry/validationRegistry.core.d.ts +45 -0
- package/dist/validationRegistry/validationRegistry.core.d.ts.map +1 -0
- package/dist/validationRegistry/validationRegistry.core.js +91 -0
- package/dist/validationRegistry/validationRegistry.core.js.map +1 -0
- package/dist/validationRegistry/validationRegistry.readonly.d.ts +18 -0
- package/dist/validationRegistry/validationRegistry.readonly.d.ts.map +1 -0
- package/dist/validationRegistry/validationRegistry.readonly.js +31 -0
- package/dist/validationRegistry/validationRegistry.readonly.js.map +1 -0
- package/dist/validationResult/index.d.ts +7 -0
- package/dist/validationResult/index.d.ts.map +1 -0
- package/dist/validationResult/index.js +7 -0
- package/dist/validationResult/index.js.map +1 -0
- package/dist/validationResult/validationResult.type.d.ts +73 -0
- package/dist/validationResult/validationResult.type.d.ts.map +1 -0
- package/dist/validationResult/validationResult.type.js +108 -0
- package/dist/validationResult/validationResult.type.js.map +1 -0
- package/dist/validationSchema/index.d.ts +7 -0
- package/dist/validationSchema/index.d.ts.map +1 -0
- package/dist/validationSchema/index.js +7 -0
- package/dist/validationSchema/index.js.map +1 -0
- package/dist/validationSchema/validationSchema.core.d.ts +39 -0
- package/dist/validationSchema/validationSchema.core.d.ts.map +1 -0
- package/dist/validationSchema/validationSchema.core.js +77 -0
- package/dist/validationSchema/validationSchema.core.js.map +1 -0
- package/dist/validationTransformer/index.d.ts +7 -0
- package/dist/validationTransformer/index.d.ts.map +1 -0
- package/dist/validationTransformer/index.js +7 -0
- package/dist/validationTransformer/index.js.map +1 -0
- package/dist/validationTransformer/validationTransformer.core.d.ts +44 -0
- package/dist/validationTransformer/validationTransformer.core.d.ts.map +1 -0
- package/dist/validationTransformer/validationTransformer.core.js +115 -0
- package/dist/validationTransformer/validationTransformer.core.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only facade over a validation registry.
|
|
3
|
+
*/
|
|
4
|
+
export class ReadonlyValidationRegistry {
|
|
5
|
+
registry;
|
|
6
|
+
constructor(registry) {
|
|
7
|
+
this.registry = registry;
|
|
8
|
+
}
|
|
9
|
+
get(name) {
|
|
10
|
+
return this.registry.get(name);
|
|
11
|
+
}
|
|
12
|
+
require(name) {
|
|
13
|
+
return this.registry.require(name);
|
|
14
|
+
}
|
|
15
|
+
has(name) {
|
|
16
|
+
return this.registry.has(name);
|
|
17
|
+
}
|
|
18
|
+
names() {
|
|
19
|
+
return this.registry.names();
|
|
20
|
+
}
|
|
21
|
+
entries() {
|
|
22
|
+
return this.registry.entries();
|
|
23
|
+
}
|
|
24
|
+
get size() {
|
|
25
|
+
return this.registry.size;
|
|
26
|
+
}
|
|
27
|
+
validate(name, value) {
|
|
28
|
+
return this.registry.validate(name, value);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validationRegistry.readonly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationRegistry.readonly.js","sourceRoot":"","sources":["../../src/validationRegistry/validationRegistry.readonly.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,OAAO,0BAA0B;IACR,QAAQ;IAArC,YAA6B,QAA4B;wBAA5B,QAAQ;IAAuB,CAAC;IAEtD,GAAG,CAAc,IAAY;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC;IACpC,CAAC;IAEM,OAAO,CAAc,IAAY;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAI,IAAI,CAAC,CAAC;IACxC,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAEM,QAAQ,CAAI,IAAY,EAAE,KAAc;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAI,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationResult/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationResult/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation result types and helpers.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseError, ErrorCategory, ErrorSeverity } from "@zudojs/errors";
|
|
5
|
+
/** A single validation issue. */
|
|
6
|
+
export interface ValidationIssue {
|
|
7
|
+
readonly path: readonly (string | number)[];
|
|
8
|
+
readonly code: string;
|
|
9
|
+
readonly message: string;
|
|
10
|
+
readonly expected?: unknown;
|
|
11
|
+
readonly received?: unknown;
|
|
12
|
+
}
|
|
13
|
+
/** Formats validation issues into a human-readable string. */
|
|
14
|
+
export declare function formatIssues(issues: readonly ValidationIssue[]): string;
|
|
15
|
+
/** Groups validation issues by their first path segment. */
|
|
16
|
+
export declare function toFieldErrors(issues: readonly ValidationIssue[]): Readonly<Record<string, string>>;
|
|
17
|
+
/** A successful validation result. */
|
|
18
|
+
export interface ValidationSuccess<T> {
|
|
19
|
+
readonly success: true;
|
|
20
|
+
readonly data: T;
|
|
21
|
+
readonly issues?: readonly ValidationIssue[];
|
|
22
|
+
}
|
|
23
|
+
/** A failed validation result. */
|
|
24
|
+
export interface ValidationFailure {
|
|
25
|
+
readonly success: false;
|
|
26
|
+
readonly data?: unknown;
|
|
27
|
+
readonly issues: readonly ValidationIssue[];
|
|
28
|
+
}
|
|
29
|
+
/** Union type for validation results. */
|
|
30
|
+
export type ValidationResult<T> = ValidationSuccess<T> | ValidationFailure;
|
|
31
|
+
/** Creates a successful validation result. */
|
|
32
|
+
export declare function success<T>(data: T): ValidationSuccess<T>;
|
|
33
|
+
/** Creates a failed validation result. */
|
|
34
|
+
export declare function failure(issues: readonly ValidationIssue[]): ValidationFailure;
|
|
35
|
+
/** Checks whether a result is successful. */
|
|
36
|
+
export declare function isValidationSuccess<T>(result: ValidationResult<T>): result is ValidationSuccess<T>;
|
|
37
|
+
/** Checks whether a result is a failure. */
|
|
38
|
+
export declare function isValidationFailure<T>(result: ValidationResult<T>): result is ValidationFailure;
|
|
39
|
+
/** Unwraps a successful result or throws a ValidationResultError. */
|
|
40
|
+
export declare function unwrapValidation<T>(result: ValidationResult<T>): T;
|
|
41
|
+
/** Creates a single validation issue. */
|
|
42
|
+
export declare function issue(message: string, options?: {
|
|
43
|
+
readonly path?: readonly (string | number)[];
|
|
44
|
+
readonly code?: string;
|
|
45
|
+
readonly expected?: unknown;
|
|
46
|
+
readonly received?: unknown;
|
|
47
|
+
}): ValidationIssue;
|
|
48
|
+
/** Transforms the data in a successful result. */
|
|
49
|
+
export declare function map<T, U>(result: ValidationResult<T>, fn: (data: T) => U): ValidationResult<U>;
|
|
50
|
+
/** Combines multiple validation results. Returns the first failure, or a success with all data. */
|
|
51
|
+
export declare function combine<T extends readonly unknown[]>(results: {
|
|
52
|
+
[K in keyof T]: ValidationResult<T[K]>;
|
|
53
|
+
}): ValidationResult<T>;
|
|
54
|
+
/** Error thrown when attempting to unwrap a failed validation result. */
|
|
55
|
+
export declare class ValidationResultError extends BaseError {
|
|
56
|
+
readonly issues: readonly ValidationIssue[];
|
|
57
|
+
constructor(issues: readonly ValidationIssue[]);
|
|
58
|
+
toJSON(): {
|
|
59
|
+
code: string;
|
|
60
|
+
category: ErrorCategory;
|
|
61
|
+
severity: ErrorSeverity;
|
|
62
|
+
statusCode: number;
|
|
63
|
+
expose: boolean;
|
|
64
|
+
isOperational: boolean;
|
|
65
|
+
metadata: Readonly<import("@zudojs/errors").ErrorMetadata>;
|
|
66
|
+
stack?: string;
|
|
67
|
+
cause?: import("@zudojs/errors").SerializedBaseError | unknown;
|
|
68
|
+
name: string;
|
|
69
|
+
message: string;
|
|
70
|
+
issues: readonly ValidationIssue[];
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=validationResult.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationResult.type.d.ts","sourceRoot":"","sources":["../../src/validationResult/validationResult.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation result types and helpers.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseError, ErrorCode, ErrorCategory, ErrorSeverity, } from "@zudojs/errors";
|
|
5
|
+
/** Formats validation issues into a human-readable string. */
|
|
6
|
+
export function formatIssues(issues) {
|
|
7
|
+
if (issues.length === 0)
|
|
8
|
+
return "";
|
|
9
|
+
return issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
10
|
+
}
|
|
11
|
+
/** Groups validation issues by their first path segment. */
|
|
12
|
+
export function toFieldErrors(issues) {
|
|
13
|
+
const result = {};
|
|
14
|
+
for (const issue of issues) {
|
|
15
|
+
const field = issue.path[0];
|
|
16
|
+
if (typeof field === "string" && !(field in result))
|
|
17
|
+
result[field] = issue.message;
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
/** Creates a successful validation result. */
|
|
22
|
+
export function success(data) {
|
|
23
|
+
return Object.freeze({
|
|
24
|
+
success: true,
|
|
25
|
+
data,
|
|
26
|
+
issues: [],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Creates a failed validation result. */
|
|
30
|
+
export function failure(issues) {
|
|
31
|
+
if (issues.length === 0)
|
|
32
|
+
throw new Error("A failure must contain at least one issue.");
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
success: false,
|
|
35
|
+
issues: Object.freeze([...issues]),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Checks whether a result is successful. */
|
|
39
|
+
export function isValidationSuccess(result) {
|
|
40
|
+
return result.success;
|
|
41
|
+
}
|
|
42
|
+
/** Checks whether a result is a failure. */
|
|
43
|
+
export function isValidationFailure(result) {
|
|
44
|
+
return !result.success;
|
|
45
|
+
}
|
|
46
|
+
/** Unwraps a successful result or throws a ValidationResultError. */
|
|
47
|
+
export function unwrapValidation(result) {
|
|
48
|
+
if (result.success)
|
|
49
|
+
return result.data;
|
|
50
|
+
throw new ValidationResultError(result.issues);
|
|
51
|
+
}
|
|
52
|
+
/** Creates a single validation issue. */
|
|
53
|
+
export function issue(message, options) {
|
|
54
|
+
return Object.freeze({
|
|
55
|
+
path: options?.path ?? [],
|
|
56
|
+
code: options?.code ?? "VALIDATION_ERROR",
|
|
57
|
+
message,
|
|
58
|
+
...(options?.expected !== undefined ? { expected: options.expected } : {}),
|
|
59
|
+
...(options?.received !== undefined ? { received: options.received } : {}),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Transforms the data in a successful result. */
|
|
63
|
+
export function map(result, fn) {
|
|
64
|
+
if (result.success)
|
|
65
|
+
return success(fn(result.data));
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/** Combines multiple validation results. Returns the first failure, or a success with all data. */
|
|
69
|
+
export function combine(results) {
|
|
70
|
+
const failures = [];
|
|
71
|
+
const data = [];
|
|
72
|
+
for (const result of results) {
|
|
73
|
+
if (result.success) {
|
|
74
|
+
data.push(result.data);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
failures.push(...result.issues);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return failures.length > 0
|
|
81
|
+
? failure(failures)
|
|
82
|
+
: success(data);
|
|
83
|
+
}
|
|
84
|
+
/** Error thrown when attempting to unwrap a failed validation result. */
|
|
85
|
+
export class ValidationResultError extends BaseError {
|
|
86
|
+
issues;
|
|
87
|
+
constructor(issues) {
|
|
88
|
+
super(formatIssues(issues) || "Validation failed.", {
|
|
89
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
90
|
+
category: ErrorCategory.VALIDATION,
|
|
91
|
+
severity: ErrorSeverity.WARNING,
|
|
92
|
+
statusCode: 400,
|
|
93
|
+
expose: true,
|
|
94
|
+
metadata: { issueCount: issues.length },
|
|
95
|
+
});
|
|
96
|
+
this.name = "ValidationResultError";
|
|
97
|
+
this.issues = Object.freeze([...issues]);
|
|
98
|
+
}
|
|
99
|
+
toJSON() {
|
|
100
|
+
return {
|
|
101
|
+
...super.toJSON(),
|
|
102
|
+
name: this.name,
|
|
103
|
+
message: this.message,
|
|
104
|
+
issues: this.issues,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=validationResult.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationResult.type.js","sourceRoot":"","sources":["../../src/validationResult/validationResult.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationSchema/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationSchema/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z, ZodError, type ZodType } from "zod";
|
|
2
|
+
import type { ValidationIssue, ValidationResult } from "../validationResult/validationResult.type.js";
|
|
3
|
+
/** Generic schema type used throughout the validation package. */
|
|
4
|
+
export type ValidationSchema<T = unknown> = ZodType<T>;
|
|
5
|
+
/** Options for schema parsing. */
|
|
6
|
+
export interface ParseOptions {
|
|
7
|
+
readonly pathPrefix?: readonly (string | number)[];
|
|
8
|
+
}
|
|
9
|
+
/** Maps a Zod error into the package's normalized issue format. */
|
|
10
|
+
export declare function mapZodIssues(error: ZodError, pathPrefix?: readonly (string | number)[]): ValidationIssue[];
|
|
11
|
+
/** Safely parses input using a Zod schema. */
|
|
12
|
+
export declare function validate<T>(schema: ValidationSchema<T>, value: unknown, options?: ParseOptions): ValidationResult<T>;
|
|
13
|
+
/** Parses input using a schema and throws when validation fails. */
|
|
14
|
+
export declare function parse<T>(schema: ValidationSchema<T>, value: unknown, options?: ParseOptions): T;
|
|
15
|
+
/** Safely parses input asynchronously. */
|
|
16
|
+
export declare function validateAsync<T>(schema: ValidationSchema<T>, value: unknown, options?: ParseOptions): Promise<ValidationResult<T>>;
|
|
17
|
+
/** Parses input asynchronously and throws when validation fails. */
|
|
18
|
+
export declare function parseAsync<T>(schema: ValidationSchema<T>, value: unknown, options?: ParseOptions): Promise<T>;
|
|
19
|
+
/** Determines whether a value matches a schema. */
|
|
20
|
+
export declare function isValid<T>(schema: ValidationSchema<T>, value: unknown): value is T;
|
|
21
|
+
/** Creates a validation function from a schema. */
|
|
22
|
+
export declare function createValidator<T>(schema: ValidationSchema<T>): (value: unknown) => ValidationResult<T>;
|
|
23
|
+
/** Creates a throwing parser from a schema. */
|
|
24
|
+
export declare function createParser<T>(schema: ValidationSchema<T>): (value: unknown) => T;
|
|
25
|
+
/** Creates an asynchronous validator from a schema. */
|
|
26
|
+
export declare function createAsyncValidator<T>(schema: ValidationSchema<T>): (value: unknown) => Promise<ValidationResult<T>>;
|
|
27
|
+
/** Creates an asynchronous throwing parser from a schema. */
|
|
28
|
+
export declare function createAsyncParser<T>(schema: ValidationSchema<T>): (value: unknown) => Promise<T>;
|
|
29
|
+
/** Returns the underlying Zod schema. */
|
|
30
|
+
export declare function unwrapSchema<T>(schema: ValidationSchema<T>): ValidationSchema<T>;
|
|
31
|
+
/** Converts a validation result into a throwing operation. */
|
|
32
|
+
export declare function assertValid<T>(result: ValidationResult<T>): asserts result is {
|
|
33
|
+
readonly success: true;
|
|
34
|
+
readonly data: T;
|
|
35
|
+
readonly issues: readonly [];
|
|
36
|
+
};
|
|
37
|
+
/** Re-exports Zod so consumers do not need to depend on a second version of Zod. */
|
|
38
|
+
export { z };
|
|
39
|
+
//# sourceMappingURL=validationSchema.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationSchema.core.d.ts","sourceRoot":"","sources":["../../src/validationSchema/validationSchema.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z, ZodError } from "zod";
|
|
2
|
+
import { failure, success } from "../validationResult/validationResult.type.js";
|
|
3
|
+
import { SchemaValidationError } from "../validationErrors/validationError.types.js";
|
|
4
|
+
/** Maps a Zod error into the package's normalized issue format. */
|
|
5
|
+
export function mapZodIssues(error, pathPrefix = []) {
|
|
6
|
+
return error.issues.map((currentIssue) => ({
|
|
7
|
+
path: [
|
|
8
|
+
...pathPrefix,
|
|
9
|
+
...currentIssue.path.filter((p) => typeof p === "string" || typeof p === "number"),
|
|
10
|
+
],
|
|
11
|
+
code: currentIssue.code,
|
|
12
|
+
message: currentIssue.message,
|
|
13
|
+
...(currentIssue.code === "invalid_type"
|
|
14
|
+
? { expected: currentIssue.expected }
|
|
15
|
+
: {}),
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
/** Safely parses input using a Zod schema. */
|
|
19
|
+
export function validate(schema, value, options = {}) {
|
|
20
|
+
const result = schema.safeParse(value);
|
|
21
|
+
if (result.success)
|
|
22
|
+
return success(result.data);
|
|
23
|
+
return failure(mapZodIssues(result.error, options.pathPrefix));
|
|
24
|
+
}
|
|
25
|
+
/** Parses input using a schema and throws when validation fails. */
|
|
26
|
+
export function parse(schema, value, options = {}) {
|
|
27
|
+
const result = validate(schema, value, options);
|
|
28
|
+
if (result.success)
|
|
29
|
+
return result.data;
|
|
30
|
+
throw new SchemaValidationError("Schema validation failed.", result.issues);
|
|
31
|
+
}
|
|
32
|
+
/** Safely parses input asynchronously. */
|
|
33
|
+
export async function validateAsync(schema, value, options = {}) {
|
|
34
|
+
const result = await schema.safeParseAsync(value);
|
|
35
|
+
if (result.success)
|
|
36
|
+
return success(result.data);
|
|
37
|
+
return failure(mapZodIssues(result.error, options.pathPrefix));
|
|
38
|
+
}
|
|
39
|
+
/** Parses input asynchronously and throws when validation fails. */
|
|
40
|
+
export async function parseAsync(schema, value, options = {}) {
|
|
41
|
+
const result = await validateAsync(schema, value, options);
|
|
42
|
+
if (result.success)
|
|
43
|
+
return result.data;
|
|
44
|
+
throw new SchemaValidationError("Schema validation failed.", result.issues);
|
|
45
|
+
}
|
|
46
|
+
/** Determines whether a value matches a schema. */
|
|
47
|
+
export function isValid(schema, value) {
|
|
48
|
+
return schema.safeParse(value).success;
|
|
49
|
+
}
|
|
50
|
+
/** Creates a validation function from a schema. */
|
|
51
|
+
export function createValidator(schema) {
|
|
52
|
+
return (value) => validate(schema, value);
|
|
53
|
+
}
|
|
54
|
+
/** Creates a throwing parser from a schema. */
|
|
55
|
+
export function createParser(schema) {
|
|
56
|
+
return (value) => parse(schema, value);
|
|
57
|
+
}
|
|
58
|
+
/** Creates an asynchronous validator from a schema. */
|
|
59
|
+
export function createAsyncValidator(schema) {
|
|
60
|
+
return (value) => validateAsync(schema, value);
|
|
61
|
+
}
|
|
62
|
+
/** Creates an asynchronous throwing parser from a schema. */
|
|
63
|
+
export function createAsyncParser(schema) {
|
|
64
|
+
return (value) => parseAsync(schema, value);
|
|
65
|
+
}
|
|
66
|
+
/** Returns the underlying Zod schema. */
|
|
67
|
+
export function unwrapSchema(schema) {
|
|
68
|
+
return schema;
|
|
69
|
+
}
|
|
70
|
+
/** Converts a validation result into a throwing operation. */
|
|
71
|
+
export function assertValid(result) {
|
|
72
|
+
if (!result.success)
|
|
73
|
+
throw new SchemaValidationError("Schema validation failed.", result.issues);
|
|
74
|
+
}
|
|
75
|
+
/** Re-exports Zod so consumers do not need to depend on a second version of Zod. */
|
|
76
|
+
export { z };
|
|
77
|
+
//# sourceMappingURL=validationSchema.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationSchema.core.js","sourceRoot":"","sources":["../../src/validationSchema/validationSchema.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationTransformer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationTransformer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ValidationSchema } from "../validationSchema/validationSchema.core.js";
|
|
2
|
+
import type { ValidationResult } from "../validationResult/validationResult.type.js";
|
|
3
|
+
/** A synchronous transformation function. */
|
|
4
|
+
export type ValidationTransform<T, U> = (value: T) => U;
|
|
5
|
+
/** An asynchronous transformation function. */
|
|
6
|
+
export type AsyncValidationTransform<T, U> = (value: T) => U | Promise<U>;
|
|
7
|
+
/** Options for transformation operations. */
|
|
8
|
+
export interface TransformerOptions {
|
|
9
|
+
readonly name?: string;
|
|
10
|
+
readonly transformErrorMessage?: string;
|
|
11
|
+
}
|
|
12
|
+
/** A reusable synchronous transformer. */
|
|
13
|
+
export interface ValidationTransformer<T, U> {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
transform(value: T): U;
|
|
16
|
+
safeTransform(value: T): ValidationResult<U>;
|
|
17
|
+
validateAndTransform(value: unknown): ValidationResult<U>;
|
|
18
|
+
}
|
|
19
|
+
/** A reusable asynchronous transformer. */
|
|
20
|
+
export interface AsyncValidationTransformer<T, U> {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
transform(value: T): Promise<U>;
|
|
23
|
+
safeTransform(value: T): Promise<ValidationResult<U>>;
|
|
24
|
+
validateAndTransform(value: unknown): Promise<ValidationResult<U>>;
|
|
25
|
+
}
|
|
26
|
+
/** Creates a synchronous transformer. */
|
|
27
|
+
export declare function createValidationTransformer<T, U>(transform: ValidationTransform<T, U>, options?: TransformerOptions): ValidationTransformer<T, U>;
|
|
28
|
+
/** Creates an asynchronous transformer. */
|
|
29
|
+
export declare function createAsyncValidationTransformer<T, U>(transform: AsyncValidationTransform<T, U>, options?: TransformerOptions): AsyncValidationTransformer<T, U>;
|
|
30
|
+
/** Validates input and then transforms it. */
|
|
31
|
+
export declare function validateAndTransform<T, U>(schema: ValidationSchema<T>, value: unknown, transform: ValidationTransform<T, U>, options?: TransformerOptions): ValidationResult<U>;
|
|
32
|
+
/** Validates input and then transforms it asynchronously. */
|
|
33
|
+
export declare function validateAndTransformAsync<T, U>(schema: ValidationSchema<T>, value: unknown, transform: AsyncValidationTransform<T, U>, options?: TransformerOptions): Promise<ValidationResult<U>>;
|
|
34
|
+
/** Creates a transformation pipeline. */
|
|
35
|
+
export declare function composeTransforms<T, U, V>(first: ValidationTransform<T, U>, second: ValidationTransform<U, V>): ValidationTransform<T, V>;
|
|
36
|
+
/** Creates a transformation pipeline from multiple functions. */
|
|
37
|
+
export declare function composeManyTransforms<T>(...transforms: readonly ValidationTransform<T, T>[]): ValidationTransform<T, T>;
|
|
38
|
+
/** Applies a transformation to every item in an array. */
|
|
39
|
+
export declare function transformArray<T, U>(values: readonly T[], transform: ValidationTransform<T, U>): U[];
|
|
40
|
+
/** Applies an asynchronous transformation to every item in an array. */
|
|
41
|
+
export declare function transformArrayAsync<T, U>(values: readonly T[], transform: AsyncValidationTransform<T, U>): Promise<U[]>;
|
|
42
|
+
/** Creates a schema that transforms the validated value. */
|
|
43
|
+
export declare function withTransformer<T, U>(schema: ValidationSchema<T>, transform: ValidationTransform<T, U>): ValidationSchema<U>;
|
|
44
|
+
//# sourceMappingURL=validationTransformer.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationTransformer.core.d.ts","sourceRoot":"","sources":["../../src/validationTransformer/validationTransformer.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { validate, validateAsync, } from "../validationSchema/validationSchema.core.js";
|
|
2
|
+
import { failure, success } from "../validationResult/validationResult.type.js";
|
|
3
|
+
import { ConstraintValidationError } from "../validationErrors/validationError.types.js";
|
|
4
|
+
function transformFailure(options, error) {
|
|
5
|
+
return failure([
|
|
6
|
+
{
|
|
7
|
+
path: [],
|
|
8
|
+
code: "transform_failed",
|
|
9
|
+
message: options.transformErrorMessage ?? "Validation transformation failed.",
|
|
10
|
+
received: error instanceof Error ? error.message : error,
|
|
11
|
+
},
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
/** Creates a synchronous transformer. */
|
|
15
|
+
export function createValidationTransformer(transform, options = {}) {
|
|
16
|
+
const name = options.name ?? "ValidationTransformer";
|
|
17
|
+
return Object.freeze({
|
|
18
|
+
name,
|
|
19
|
+
transform(value) {
|
|
20
|
+
try {
|
|
21
|
+
return transform(value);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new ConstraintValidationError(options.transformErrorMessage ?? "Validation transformation failed.", [], { cause: error });
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
safeTransform(value) {
|
|
28
|
+
try {
|
|
29
|
+
return success(transform(value));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return transformFailure(options, error);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
validateAndTransform(value) {
|
|
36
|
+
return this.safeTransform(value);
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Creates an asynchronous transformer. */
|
|
41
|
+
export function createAsyncValidationTransformer(transform, options = {}) {
|
|
42
|
+
const name = options.name ?? "AsyncValidationTransformer";
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
name,
|
|
45
|
+
async transform(value) {
|
|
46
|
+
try {
|
|
47
|
+
return await transform(value);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new ConstraintValidationError(options.transformErrorMessage ?? "Validation transformation failed.", [], { cause: error });
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
async safeTransform(value) {
|
|
54
|
+
try {
|
|
55
|
+
return success(await transform(value));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return transformFailure(options, error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
async validateAndTransform(value) {
|
|
62
|
+
return this.safeTransform(value);
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Validates input and then transforms it. */
|
|
67
|
+
export function validateAndTransform(schema, value, transform, options = {}) {
|
|
68
|
+
const validation = validate(schema, value);
|
|
69
|
+
if (!validation.success)
|
|
70
|
+
return validation;
|
|
71
|
+
try {
|
|
72
|
+
return success(transform(validation.data));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return transformFailure(options, error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Validates input and then transforms it asynchronously. */
|
|
79
|
+
export async function validateAndTransformAsync(schema, value, transform, options = {}) {
|
|
80
|
+
const validation = await validateAsync(schema, value);
|
|
81
|
+
if (!validation.success)
|
|
82
|
+
return validation;
|
|
83
|
+
try {
|
|
84
|
+
return success(await transform(validation.data));
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return transformFailure(options, error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Creates a transformation pipeline. */
|
|
91
|
+
export function composeTransforms(first, second) {
|
|
92
|
+
return (value) => second(first(value));
|
|
93
|
+
}
|
|
94
|
+
/** Creates a transformation pipeline from multiple functions. */
|
|
95
|
+
export function composeManyTransforms(...transforms) {
|
|
96
|
+
return (value) => {
|
|
97
|
+
let current = value;
|
|
98
|
+
for (const transform of transforms)
|
|
99
|
+
current = transform(current);
|
|
100
|
+
return current;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Applies a transformation to every item in an array. */
|
|
104
|
+
export function transformArray(values, transform) {
|
|
105
|
+
return values.map(transform);
|
|
106
|
+
}
|
|
107
|
+
/** Applies an asynchronous transformation to every item in an array. */
|
|
108
|
+
export async function transformArrayAsync(values, transform) {
|
|
109
|
+
return Promise.all(values.map(transform));
|
|
110
|
+
}
|
|
111
|
+
/** Creates a schema that transforms the validated value. */
|
|
112
|
+
export function withTransformer(schema, transform) {
|
|
113
|
+
return schema.transform(transform);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=validationTransformer.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationTransformer.core.js","sourceRoot":"","sources":["../../src/validationTransformer/validationTransformer.core.ts"],"names":[],"mappings":"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"}
|