schema-validex 1.0.0
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/README.md +159 -0
- package/dist/core/common/index.d.ts +31 -0
- package/dist/core/common/index.d.ts.map +1 -0
- package/dist/core/common/index.js +91 -0
- package/dist/core/common/index.js.map +1 -0
- package/dist/core/errors/index.d.ts +28 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +75 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schemas/SuperRefine.d.ts +7 -0
- package/dist/core/schemas/SuperRefine.d.ts.map +1 -0
- package/dist/core/schemas/SuperRefine.js +10 -0
- package/dist/core/schemas/SuperRefine.js.map +1 -0
- package/dist/core/schemas/arraySchema.d.ts +14 -0
- package/dist/core/schemas/arraySchema.d.ts.map +1 -0
- package/dist/core/schemas/arraySchema.js +74 -0
- package/dist/core/schemas/arraySchema.js.map +1 -0
- package/dist/core/schemas/baseSchema.d.ts +38 -0
- package/dist/core/schemas/baseSchema.d.ts.map +1 -0
- package/dist/core/schemas/baseSchema.js +143 -0
- package/dist/core/schemas/baseSchema.js.map +1 -0
- package/dist/core/schemas/numberSchema.d.ts +17 -0
- package/dist/core/schemas/numberSchema.d.ts.map +1 -0
- package/dist/core/schemas/numberSchema.js +90 -0
- package/dist/core/schemas/numberSchema.js.map +1 -0
- package/dist/core/schemas/objectSchema.d.ts +11 -0
- package/dist/core/schemas/objectSchema.d.ts.map +1 -0
- package/dist/core/schemas/objectSchema.js +50 -0
- package/dist/core/schemas/objectSchema.js.map +1 -0
- package/dist/core/schemas/optionalSchema.d.ts +7 -0
- package/dist/core/schemas/optionalSchema.d.ts.map +1 -0
- package/dist/core/schemas/optionalSchema.js +19 -0
- package/dist/core/schemas/optionalSchema.js.map +1 -0
- package/dist/core/schemas/stringSchema.d.ts +16 -0
- package/dist/core/schemas/stringSchema.d.ts.map +1 -0
- package/dist/core/schemas/stringSchema.js +84 -0
- package/dist/core/schemas/stringSchema.js.map +1 -0
- package/dist/core/schemas/unionSchema.d.ts +9 -0
- package/dist/core/schemas/unionSchema.d.ts.map +1 -0
- package/dist/core/schemas/unionSchema.js +22 -0
- package/dist/core/schemas/unionSchema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# validex
|
|
2
|
+
|
|
3
|
+
A lightweight, type-safe schema validation library for TypeScript, inspired by Zod.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install schema-validex
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Basic Usage
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import v from 'validex';
|
|
17
|
+
|
|
18
|
+
const schema = v.string().min(3).max(10);
|
|
19
|
+
const result = schema.safeParse("hello");
|
|
20
|
+
|
|
21
|
+
if (result.success) {
|
|
22
|
+
console.log("Valid:", result.value);
|
|
23
|
+
} else {
|
|
24
|
+
console.error("Errors:", result.errors);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Real-World Form Validation
|
|
29
|
+
|
|
30
|
+
Here's a comprehensive example simulating a user registration form that uses most of the available validation features:
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import v from 'schema-validex';
|
|
34
|
+
|
|
35
|
+
const registrationSchema = v.object({
|
|
36
|
+
// String validations
|
|
37
|
+
username: v.string().min(3).max(20).startsWith('user_'),
|
|
38
|
+
email: v.string().email(),
|
|
39
|
+
website: v.string().url(),
|
|
40
|
+
bio: v.string().max(100).nonempty(),
|
|
41
|
+
|
|
42
|
+
// Number validations
|
|
43
|
+
age: v.number().int().min(18).max(99),
|
|
44
|
+
experienceYears: v.number().nonnegative().safe(),
|
|
45
|
+
|
|
46
|
+
// Union types (e.g., role can be one of specific strings or an ID)
|
|
47
|
+
role: v.union([
|
|
48
|
+
v.string().regex(/^(admin|editor|viewer)$/),
|
|
49
|
+
v.number().int().positive() // or a numeric role ID
|
|
50
|
+
]),
|
|
51
|
+
|
|
52
|
+
// Array validations
|
|
53
|
+
skills: v.array(v.string().min(2)).min(1).max(10),
|
|
54
|
+
|
|
55
|
+
// Nested Objects
|
|
56
|
+
contact: v.object({
|
|
57
|
+
phone: v.string().length(10).regex(/^\d+$/),
|
|
58
|
+
address: v.object({
|
|
59
|
+
street: v.string(),
|
|
60
|
+
city: v.string(),
|
|
61
|
+
zipCode: v.string().regex(/^\d{5}(-\d{4})?$/)
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const formData = {
|
|
67
|
+
username: "user_johndoe",
|
|
68
|
+
email: "john@example.com",
|
|
69
|
+
website: "https://johndoe.dev",
|
|
70
|
+
bio: "Full-stack developer loving TypeScript",
|
|
71
|
+
age: 28,
|
|
72
|
+
experienceYears: 5,
|
|
73
|
+
role: "admin",
|
|
74
|
+
skills: ["TypeScript", "React", "Node.js"],
|
|
75
|
+
contact: {
|
|
76
|
+
phone: "1234567890",
|
|
77
|
+
address: {
|
|
78
|
+
street: "123 Tech Lane",
|
|
79
|
+
city: "Innovation City",
|
|
80
|
+
zipCode: "94043"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const result = registrationSchema.safeParse(formData);
|
|
86
|
+
|
|
87
|
+
if (result.success) {
|
|
88
|
+
console.log("Validation Successful:", result.value);
|
|
89
|
+
} else {
|
|
90
|
+
// Returns an array of errors with paths and messages
|
|
91
|
+
console.error("Validation Failed:", result.errors);
|
|
92
|
+
/*
|
|
93
|
+
Example Error Output:
|
|
94
|
+
[
|
|
95
|
+
{ path: ['age'], message: 'Number must be greater than or equal to 18' },
|
|
96
|
+
{ path: ['contact', 'phone'], message: 'String must be exactly 10 characters' }
|
|
97
|
+
]
|
|
98
|
+
*/
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## API Reference
|
|
103
|
+
|
|
104
|
+
### Primitives
|
|
105
|
+
|
|
106
|
+
#### String (`v.string()`)
|
|
107
|
+
- `.min(length: number)`: Minimum length
|
|
108
|
+
- `.max(length: number)`: Maximum length
|
|
109
|
+
- `.length(length: number)`: Exact length
|
|
110
|
+
- `.email(regex?: RegExp)`: Validates email format
|
|
111
|
+
- `.url(regex?: RegExp)`: Validates URL format
|
|
112
|
+
- `.regex(regex: RegExp)`: Matches regular expression
|
|
113
|
+
- `.startsWith(prefix: string)`: Starts with substring
|
|
114
|
+
- `.endsWith(suffix: string)`: Ends with substring
|
|
115
|
+
- `.nonempty()`: Rejects empty strings
|
|
116
|
+
|
|
117
|
+
#### Number (`v.number()`)
|
|
118
|
+
- `.min(value: number)`: Minimum value (inclusive)
|
|
119
|
+
- `.max(value: number)`: Maximum value (inclusive)
|
|
120
|
+
- `.int()`: Must be an integer
|
|
121
|
+
- `.positive()`: Must be > 0
|
|
122
|
+
- `.negative()`: Must be < 0
|
|
123
|
+
- `.nonpositive()`: Must be <= 0
|
|
124
|
+
- `.nonnegative()`: Must be >= 0
|
|
125
|
+
- `.multipleOf(n: number)`: Must be a multiple of n
|
|
126
|
+
- `.finite()`: Must be finite
|
|
127
|
+
- `.safe()`: Must be a safe integer
|
|
128
|
+
|
|
129
|
+
### Complex Types
|
|
130
|
+
|
|
131
|
+
#### Array (`v.array(schema)`)
|
|
132
|
+
- `.min(length: number)`: Minimum number of items
|
|
133
|
+
- `.max(length: number)`: Maximum number of items
|
|
134
|
+
- `.nonempty()`: Array must have at least one item
|
|
135
|
+
|
|
136
|
+
#### Object (`v.object(shape)`)
|
|
137
|
+
Creates a schema for an object where each key matches the corresponding schema in `shape`.
|
|
138
|
+
|
|
139
|
+
#### Union (`v.union([schema1, schema2, ...])`)
|
|
140
|
+
Validates if the input matches at least one of the provided schemas.
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const idSchema = v.union([
|
|
144
|
+
v.string(),
|
|
145
|
+
v.number()
|
|
146
|
+
]);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Error Handling
|
|
150
|
+
|
|
151
|
+
Validation results return a `SafeParseResult` object:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
type SafeParseResult<T> =
|
|
155
|
+
| { success: true; value: T; errors: [] }
|
|
156
|
+
| { success: false; value: unknown; errors: { path: (string | number)[]; message: string }[] };
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
If `success` is `false`, the `errors` array contains details about what validation failed and where.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const commonFunctions: {
|
|
2
|
+
isString(value: unknown): value is string;
|
|
3
|
+
isNumber(value: unknown): value is number;
|
|
4
|
+
isArray(value: unknown): value is Array<any>;
|
|
5
|
+
isObject(value: unknown): value is object;
|
|
6
|
+
isBoolean(value: unknown): value is boolean;
|
|
7
|
+
isSymbol(value: unknown): value is symbol;
|
|
8
|
+
startsWith(value: string, prefix?: string): boolean;
|
|
9
|
+
endsWith(value: string, suffix?: string): boolean;
|
|
10
|
+
uppercase(value: string): string;
|
|
11
|
+
lowercase(value: string): string;
|
|
12
|
+
trim(value: string): string;
|
|
13
|
+
length(value: string, len: number): boolean;
|
|
14
|
+
min(value: string, len: number): boolean;
|
|
15
|
+
max(value: string, len: number): boolean;
|
|
16
|
+
matchRegex(value: string, regex: RegExp): boolean;
|
|
17
|
+
isEmail(value: string, customRegex?: RegExp): boolean;
|
|
18
|
+
isUrl(value: string, customRegex?: RegExp): boolean;
|
|
19
|
+
nonEmpty(value: string): boolean;
|
|
20
|
+
isInteger(value: number): boolean;
|
|
21
|
+
isPositive(value: number): boolean;
|
|
22
|
+
isNegative(value: number): boolean;
|
|
23
|
+
isNonPositive(value: number): boolean;
|
|
24
|
+
isNonNegative(value: number): boolean;
|
|
25
|
+
isMultipleOf(value: number, multiple: number): boolean;
|
|
26
|
+
isFinite(value: number): boolean;
|
|
27
|
+
isSafeInteger(value: number): boolean;
|
|
28
|
+
minLen(value: any[], len: number): boolean;
|
|
29
|
+
maxLen(value: any[], len: number): boolean;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/common/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;oBACR,OAAO,GAAG,KAAK,IAAI,MAAM;oBAGzB,OAAO,GAAG,KAAK,IAAI,MAAM;mBAG1B,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC;oBAG5B,OAAO,GAAG,KAAK,IAAI,MAAM;qBAGxB,OAAO,GAAG,KAAK,IAAI,OAAO;oBAG3B,OAAO,GAAG,KAAK,IAAI,MAAM;sBAGvB,MAAM,WAAU,MAAM;oBAGxB,MAAM,WAAU,MAAM;qBAGrB,MAAM;qBAGN,MAAM;gBAGX,MAAM;kBAGJ,MAAM,OAAO,MAAM;eAGtB,MAAM,OAAO,MAAM;eAGnB,MAAM,OAAO,MAAM;sBAGZ,MAAM,SAAS,MAAM;mBAGxB,MAAM,gBAAe,MAAM;iBAI7B,MAAM,gBAAe,MAAM;oBAIxB,MAAM;qBAIL,MAAM;sBAGL,MAAM;sBAGN,MAAM;yBAGH,MAAM;yBAGN,MAAM;wBAGP,MAAM,YAAY,MAAM;oBAG5B,MAAM;yBAGD,MAAM;kBAIb,GAAG,EAAE,OAAO,MAAM;kBAGlB,GAAG,EAAE,OAAO,MAAM;CAGnC,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export const commonFunctions = {
|
|
2
|
+
isString(value) {
|
|
3
|
+
return typeof value === "string";
|
|
4
|
+
},
|
|
5
|
+
isNumber(value) {
|
|
6
|
+
return typeof value === "number";
|
|
7
|
+
},
|
|
8
|
+
isArray(value) {
|
|
9
|
+
return Array.isArray(value);
|
|
10
|
+
},
|
|
11
|
+
isObject(value) {
|
|
12
|
+
return typeof value === "object" && value !== null;
|
|
13
|
+
},
|
|
14
|
+
isBoolean(value) {
|
|
15
|
+
return typeof value === "boolean";
|
|
16
|
+
},
|
|
17
|
+
isSymbol(value) {
|
|
18
|
+
return typeof value === "symbol";
|
|
19
|
+
},
|
|
20
|
+
startsWith(value, prefix = "") {
|
|
21
|
+
return value.startsWith(prefix);
|
|
22
|
+
},
|
|
23
|
+
endsWith(value, suffix = "") {
|
|
24
|
+
return value.endsWith(suffix);
|
|
25
|
+
},
|
|
26
|
+
uppercase(value) {
|
|
27
|
+
return value.toUpperCase();
|
|
28
|
+
},
|
|
29
|
+
lowercase(value) {
|
|
30
|
+
return value.toLowerCase();
|
|
31
|
+
},
|
|
32
|
+
trim(value) {
|
|
33
|
+
return value.trim();
|
|
34
|
+
},
|
|
35
|
+
length(value, len) {
|
|
36
|
+
return value.length === len;
|
|
37
|
+
},
|
|
38
|
+
min(value, len) {
|
|
39
|
+
return value.length >= len;
|
|
40
|
+
},
|
|
41
|
+
max(value, len) {
|
|
42
|
+
return value.length <= len;
|
|
43
|
+
},
|
|
44
|
+
matchRegex(value, regex) {
|
|
45
|
+
return regex.test(value);
|
|
46
|
+
},
|
|
47
|
+
isEmail(value, customRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/) {
|
|
48
|
+
const emailRegex = customRegex || /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
49
|
+
return this.matchRegex(value, emailRegex);
|
|
50
|
+
},
|
|
51
|
+
isUrl(value, customRegex = /^(https?:\/\/)?([\w.-]+)\.[a-z]{2,}(:[0-9]+)?(\/[^\s]*)?$/) {
|
|
52
|
+
const urlRegex = customRegex || /^(https?:\/\/)?([\w.-]+)\.[a-z]{2,}(:[0-9]+)?(\/[^\s]*)?$/;
|
|
53
|
+
return this.matchRegex(value, urlRegex);
|
|
54
|
+
},
|
|
55
|
+
nonEmpty(value) {
|
|
56
|
+
return value.length > 0;
|
|
57
|
+
},
|
|
58
|
+
// Number validations
|
|
59
|
+
isInteger(value) {
|
|
60
|
+
return Number.isInteger(value);
|
|
61
|
+
},
|
|
62
|
+
isPositive(value) {
|
|
63
|
+
return value > 0;
|
|
64
|
+
},
|
|
65
|
+
isNegative(value) {
|
|
66
|
+
return value < 0;
|
|
67
|
+
},
|
|
68
|
+
isNonPositive(value) {
|
|
69
|
+
return value <= 0;
|
|
70
|
+
},
|
|
71
|
+
isNonNegative(value) {
|
|
72
|
+
return value >= 0;
|
|
73
|
+
},
|
|
74
|
+
isMultipleOf(value, multiple) {
|
|
75
|
+
return value % multiple === 0;
|
|
76
|
+
},
|
|
77
|
+
isFinite(value) {
|
|
78
|
+
return Number.isFinite(value);
|
|
79
|
+
},
|
|
80
|
+
isSafeInteger(value) {
|
|
81
|
+
return Number.isSafeInteger(value);
|
|
82
|
+
},
|
|
83
|
+
// Array validations
|
|
84
|
+
minLen(value, len) {
|
|
85
|
+
return value.length >= len;
|
|
86
|
+
},
|
|
87
|
+
maxLen(value, len) {
|
|
88
|
+
return value.length <= len;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/common/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const ERRORS: {
|
|
2
|
+
string(value: unknown): string;
|
|
3
|
+
number(value: unknown): string;
|
|
4
|
+
object(value: unknown): string;
|
|
5
|
+
array(value: unknown): string;
|
|
6
|
+
boolean(value: unknown): string;
|
|
7
|
+
symbol(value: unknown): string;
|
|
8
|
+
min(value: unknown, length: number): string;
|
|
9
|
+
max(value: unknown, length: number): string;
|
|
10
|
+
length(value: unknown, length: number): string;
|
|
11
|
+
regex(value: unknown): string;
|
|
12
|
+
email(value: unknown): string;
|
|
13
|
+
url(value: unknown): string;
|
|
14
|
+
startsWith(value: unknown, prefix: string): string;
|
|
15
|
+
endsWith(value: unknown, suffix: string): string;
|
|
16
|
+
nonEmpty(value: unknown): string;
|
|
17
|
+
optional(value: unknown): string;
|
|
18
|
+
int(value: unknown): string;
|
|
19
|
+
positive(value: unknown): string;
|
|
20
|
+
negative(value: unknown): string;
|
|
21
|
+
nonPositive(value: unknown): string;
|
|
22
|
+
nonNegative(value: unknown): string;
|
|
23
|
+
multipleOf(value: unknown, divisor: number): string;
|
|
24
|
+
finite(value: unknown): string;
|
|
25
|
+
safe(value: unknown): string;
|
|
26
|
+
};
|
|
27
|
+
export type ErrorType = keyof typeof ERRORS;
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;kBACD,OAAO;kBAGP,OAAO;kBAGP,OAAO;iBAGR,OAAO;mBAGL,OAAO;kBAGR,OAAO;eAGV,OAAO,UAAU,MAAM;eAGvB,OAAO,UAAU,MAAM;kBAGpB,OAAO,UAAU,MAAM;iBAGxB,OAAO;iBAGP,OAAO;eAGT,OAAO;sBAGA,OAAO,UAAU,MAAM;oBAGzB,OAAO,UAAU,MAAM;oBAGvB,OAAO;oBAGP,OAAO;eAGZ,OAAO;oBAGF,OAAO;oBAGP,OAAO;uBAGJ,OAAO;uBAGP,OAAO;sBAGR,OAAO,WAAW,MAAM;kBAG5B,OAAO;gBAGT,OAAO;CAGtB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export const ERRORS = {
|
|
2
|
+
string(value) {
|
|
3
|
+
return `Expected ${value} to be a string`;
|
|
4
|
+
},
|
|
5
|
+
number(value) {
|
|
6
|
+
return `Expected ${JSON.stringify(value)} to be a number`;
|
|
7
|
+
},
|
|
8
|
+
object(value) {
|
|
9
|
+
return `Expected ${JSON.stringify(value)} to be an object`;
|
|
10
|
+
},
|
|
11
|
+
array(value) {
|
|
12
|
+
return `Expected ${JSON.stringify(value)} to be an array`;
|
|
13
|
+
},
|
|
14
|
+
boolean(value) {
|
|
15
|
+
return `Expected ${JSON.stringify(value)} to be a boolean value`;
|
|
16
|
+
},
|
|
17
|
+
symbol(value) {
|
|
18
|
+
return `Expected ${JSON.stringify(value)} to be a symbol value`;
|
|
19
|
+
},
|
|
20
|
+
min(value, length) {
|
|
21
|
+
return `Expected ${value} to be at least ${length} characters long`;
|
|
22
|
+
},
|
|
23
|
+
max(value, length) {
|
|
24
|
+
return `Expected ${value} to be at most ${length} characters long`;
|
|
25
|
+
},
|
|
26
|
+
length(value, length) {
|
|
27
|
+
return `Expected ${value} to be ${length} characters long`;
|
|
28
|
+
},
|
|
29
|
+
regex(value) {
|
|
30
|
+
return `Expected ${JSON.stringify(value)} to match the regex pattern`;
|
|
31
|
+
},
|
|
32
|
+
email(value) {
|
|
33
|
+
return `Expected ${JSON.stringify(value)} to be a valid email address`;
|
|
34
|
+
},
|
|
35
|
+
url(value) {
|
|
36
|
+
return `Expected ${JSON.stringify(value)} to be a valid URL`;
|
|
37
|
+
},
|
|
38
|
+
startsWith(value, prefix) {
|
|
39
|
+
return `Expected ${JSON.stringify(value)} to start with ${prefix}`;
|
|
40
|
+
},
|
|
41
|
+
endsWith(value, suffix) {
|
|
42
|
+
return `Expected ${JSON.stringify(value)} to end with ${suffix}`;
|
|
43
|
+
},
|
|
44
|
+
nonEmpty(value) {
|
|
45
|
+
return `Expected ${JSON.stringify(value)} to be non-empty`;
|
|
46
|
+
},
|
|
47
|
+
optional(value) {
|
|
48
|
+
return `${JSON.stringify(value)} is optional`;
|
|
49
|
+
},
|
|
50
|
+
int(value) {
|
|
51
|
+
return `Expected ${value} to be an integer`;
|
|
52
|
+
},
|
|
53
|
+
positive(value) {
|
|
54
|
+
return `Expected ${value} to be positive`;
|
|
55
|
+
},
|
|
56
|
+
negative(value) {
|
|
57
|
+
return `Expected ${value} to be negative`;
|
|
58
|
+
},
|
|
59
|
+
nonPositive(value) {
|
|
60
|
+
return `Expected ${value} to be non-positive`;
|
|
61
|
+
},
|
|
62
|
+
nonNegative(value) {
|
|
63
|
+
return `Expected ${value} to be non-negative`;
|
|
64
|
+
},
|
|
65
|
+
multipleOf(value, divisor) {
|
|
66
|
+
return `Expected ${value} to be a multiple of ${divisor}`;
|
|
67
|
+
},
|
|
68
|
+
finite(value) {
|
|
69
|
+
return `Expected ${value} to be finite`;
|
|
70
|
+
},
|
|
71
|
+
safe(value) {
|
|
72
|
+
return `Expected ${value} to be a safe integer`;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,MAAM,CAAC,KAAc;QACjB,OAAO,YAAY,KAAK,iBAAiB,CAAA;IAC7C,CAAC;IACD,MAAM,CAAC,KAAc;QACjB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAA;IAC7D,CAAC;IACD,MAAM,CAAC,KAAc;QACjB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAA;IAC9D,CAAC;IACD,KAAK,CAAC,KAAc;QAChB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAA;IAC7D,CAAC;IACD,OAAO,CAAC,KAAc;QAClB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,wBAAwB,CAAA;IACpE,CAAC;IACD,MAAM,CAAC,KAAc;QACjB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAA;IACnE,CAAC;IACD,GAAG,CAAC,KAAc,EAAE,MAAc;QAC9B,OAAO,YAAY,KAAK,mBAAmB,MAAM,kBAAkB,CAAA;IACvE,CAAC;IACD,GAAG,CAAC,KAAc,EAAE,MAAc;QAC9B,OAAO,YAAY,KAAK,kBAAkB,MAAM,kBAAkB,CAAA;IACtE,CAAC;IACD,MAAM,CAAC,KAAc,EAAE,MAAc;QACjC,OAAO,YAAY,KAAK,UAAU,MAAM,kBAAkB,CAAA;IAC9D,CAAC;IACD,KAAK,CAAC,KAAc;QAChB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAA;IACzE,CAAC;IACD,KAAK,CAAC,KAAc;QAChB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,8BAA8B,CAAA;IAC1E,CAAC;IACD,GAAG,CAAC,KAAc;QACd,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAA;IAChE,CAAC;IACD,UAAU,CAAC,KAAc,EAAE,MAAc;QACrC,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,MAAM,EAAE,CAAA;IACtE,CAAC;IACD,QAAQ,CAAC,KAAc,EAAE,MAAc;QACnC,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,MAAM,EAAE,CAAA;IACpE,CAAC;IACD,QAAQ,CAAC,KAAc;QACnB,OAAO,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAA;IAC9D,CAAC;IACD,QAAQ,CAAC,KAAc;QACnB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAA;IACjD,CAAC;IACD,GAAG,CAAC,KAAc;QACd,OAAO,YAAY,KAAK,mBAAmB,CAAA;IAC/C,CAAC;IACD,QAAQ,CAAC,KAAc;QACnB,OAAO,YAAY,KAAK,iBAAiB,CAAA;IAC7C,CAAC;IACD,QAAQ,CAAC,KAAc;QACnB,OAAO,YAAY,KAAK,iBAAiB,CAAA;IAC7C,CAAC;IACD,WAAW,CAAC,KAAc;QACtB,OAAO,YAAY,KAAK,qBAAqB,CAAA;IACjD,CAAC;IACD,WAAW,CAAC,KAAc;QACtB,OAAO,YAAY,KAAK,qBAAqB,CAAA;IACjD,CAAC;IACD,UAAU,CAAC,KAAc,EAAE,OAAe;QACtC,OAAO,YAAY,KAAK,wBAAwB,OAAO,EAAE,CAAA;IAC7D,CAAC;IACD,MAAM,CAAC,KAAc;QACjB,OAAO,YAAY,KAAK,eAAe,CAAA;IAC3C,CAAC;IACD,IAAI,CAAC,KAAc;QACf,OAAO,YAAY,KAAK,uBAAuB,CAAA;IACnD,CAAC;CACJ,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ArraySchema, type TArray } from "./schemas/arraySchema.js";
|
|
2
|
+
import { NumberSchema } from "./schemas/numberSchema.js";
|
|
3
|
+
import { ObjectSchema, type Shape } from "./schemas/objectSchema.js";
|
|
4
|
+
import { StringSchema } from "./schemas/stringSchema.js";
|
|
5
|
+
import { UnionSchema, type TUnion } from "./schemas/unionSchema.js";
|
|
6
|
+
declare const validex: {
|
|
7
|
+
string: () => StringSchema;
|
|
8
|
+
number: () => NumberSchema;
|
|
9
|
+
object: <T extends Shape>(shape: T) => ObjectSchema<T>;
|
|
10
|
+
array: <T extends TArray>(shape: T) => ArraySchema<T>;
|
|
11
|
+
union: <T extends TUnion>(schemas: T) => UnionSchema<T>;
|
|
12
|
+
};
|
|
13
|
+
export default validex;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEpE,QAAA,MAAM,OAAO;;;aAGA,CAAC,SAAS,KAAK,SAAS,CAAC;YAC1B,CAAC,SAAS,MAAM,SAAS,CAAC;YAC1B,CAAC,SAAS,MAAM,WAAW,CAAC;CACvC,CAAA;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ArraySchema } from "./schemas/arraySchema.js";
|
|
2
|
+
import { NumberSchema } from "./schemas/numberSchema.js";
|
|
3
|
+
import { ObjectSchema } from "./schemas/objectSchema.js";
|
|
4
|
+
import { StringSchema } from "./schemas/stringSchema.js";
|
|
5
|
+
import { UnionSchema } from "./schemas/unionSchema.js";
|
|
6
|
+
const validex = {
|
|
7
|
+
string: () => new StringSchema(),
|
|
8
|
+
number: () => new NumberSchema(),
|
|
9
|
+
object: (shape) => new ObjectSchema(shape),
|
|
10
|
+
array: (shape) => new ArraySchema(shape),
|
|
11
|
+
union: (schemas) => new UnionSchema(schemas),
|
|
12
|
+
};
|
|
13
|
+
export default validex;
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAc,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAe,MAAM,0BAA0B,CAAC;AAEpE,MAAM,OAAO,GAAG;IACZ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IAChC,MAAM,EAAE,CAAkB,KAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC;IAC9D,KAAK,EAAE,CAAmB,KAAQ,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;IAC7D,KAAK,EAAE,CAAmB,OAAU,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC;CACpE,CAAA;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuperRefine.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/SuperRefine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAGtB,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuperRefine.js","sourceRoot":"","sources":["../../../src/core/schemas/SuperRefine.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACd,OAAO,GAAa,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAa;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Schema, type Path, type Rule, type SafeParseResult } from "./baseSchema.js";
|
|
2
|
+
export type TArray = Schema<any>;
|
|
3
|
+
type Parsed<T extends TArray> = T extends Schema<infer U> ? U : never;
|
|
4
|
+
export declare class ArraySchema<T extends TArray> extends Schema<Parsed<T>[]> {
|
|
5
|
+
private Shape;
|
|
6
|
+
constructor(Shape: T, rules?: Rule<Parsed<T>[]>[]);
|
|
7
|
+
protected clone(rule: Rule<Parsed<T>[]>): ArraySchema<T>;
|
|
8
|
+
min(length: number): ArraySchema<T>;
|
|
9
|
+
max(length: number): ArraySchema<T>;
|
|
10
|
+
nonempty(): ArraySchema<T>;
|
|
11
|
+
parse(value: unknown, path: Path | undefined): SafeParseResult<Parsed<T>[]>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=arraySchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arraySchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/arraySchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIrF,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,KAAK,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtE,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,CAAC,EAAE,KAAK,GAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAO;IAI7D,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAIxD,GAAG,CAAC,MAAM,EAAE,MAAM;IAOlB,GAAG,CAAC,MAAM,EAAE,MAAM;IAOlB,QAAQ;IAWR,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;CA0C9E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ERRORS } from "../errors/index.js";
|
|
2
|
+
import { commonFunctions as CF } from "../common/index.js";
|
|
3
|
+
import { Schema } from "./baseSchema.js";
|
|
4
|
+
import { RefinementCtx } from "./SuperRefine.js";
|
|
5
|
+
export class ArraySchema extends Schema {
|
|
6
|
+
Shape;
|
|
7
|
+
constructor(Shape, rules = []) {
|
|
8
|
+
super(rules);
|
|
9
|
+
this.Shape = Shape;
|
|
10
|
+
}
|
|
11
|
+
clone(rule) {
|
|
12
|
+
return new ArraySchema(this.Shape, [...this.rules, rule]);
|
|
13
|
+
}
|
|
14
|
+
min(length) {
|
|
15
|
+
return this.clone({
|
|
16
|
+
check: (v) => CF.minLen(v, length),
|
|
17
|
+
message: (v) => ERRORS.min(v, length),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
max(length) {
|
|
21
|
+
return this.clone({
|
|
22
|
+
check: (v) => CF.maxLen(v, length),
|
|
23
|
+
message: (v) => ERRORS.max(v, length),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
nonempty() {
|
|
27
|
+
return this.clone({
|
|
28
|
+
check: (v) => CF.nonEmpty(v), // Common nonEmpty works for string, but we added minLen. CF.nonEmpty is string only?
|
|
29
|
+
// CF.nonEmpty in common uses value.length > 0.
|
|
30
|
+
// Let's check common again. I didn't change nonEmpty type signature.
|
|
31
|
+
// I added minLen.
|
|
32
|
+
// Actually, I can use minLen(1). Or just v.length > 0.
|
|
33
|
+
message: (v) => ERRORS.nonEmpty(v),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
parse(value, path) {
|
|
37
|
+
if (!Array.isArray(value)) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
value: value,
|
|
41
|
+
errors: [{ path: path ?? [value], message: ERRORS.array(value) }]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const result = [];
|
|
45
|
+
const errors = [];
|
|
46
|
+
// Run schema-level rules (min, max, etc.)
|
|
47
|
+
errors.push(...this.run(value, path ?? []));
|
|
48
|
+
value.forEach((item, i) => {
|
|
49
|
+
const childResult = this.Shape.parse(item, path);
|
|
50
|
+
if (!childResult.success) {
|
|
51
|
+
const childErrors = childResult.errors.map((error) => ({
|
|
52
|
+
path: [i, ...error.path],
|
|
53
|
+
message: error.message
|
|
54
|
+
}));
|
|
55
|
+
errors.push(...childErrors);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
result.push(childResult.value);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
if (errors.length > 0) {
|
|
62
|
+
return { success: false, value, errors };
|
|
63
|
+
}
|
|
64
|
+
const refineCtx = new RefinementCtx();
|
|
65
|
+
for (const refinement of this.refinements) {
|
|
66
|
+
refinement(result, refineCtx);
|
|
67
|
+
}
|
|
68
|
+
if (refineCtx.errors.length > 0) {
|
|
69
|
+
return { success: false, value, errors: refineCtx.errors };
|
|
70
|
+
}
|
|
71
|
+
return { success: true, value, errors: [] };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=arraySchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arraySchema.js","sourceRoot":"","sources":["../../../src/core/schemas/arraySchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { RefinementCtx } from "./SuperRefine.js";
|
|
2
|
+
export type Path = (string | number)[];
|
|
3
|
+
export type Rule<T> = {
|
|
4
|
+
check: (v: T) => boolean;
|
|
5
|
+
message: (v: T) => string;
|
|
6
|
+
};
|
|
7
|
+
export type Errors = {
|
|
8
|
+
path: Path;
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export type SafeParseResult<T> = {
|
|
12
|
+
success: boolean;
|
|
13
|
+
value: T;
|
|
14
|
+
errors: Errors[];
|
|
15
|
+
};
|
|
16
|
+
export type Refinement<T> = {
|
|
17
|
+
check: (value: T) => boolean;
|
|
18
|
+
message: string | ((value: T) => string);
|
|
19
|
+
path?: Path;
|
|
20
|
+
};
|
|
21
|
+
export declare abstract class Schema<T> {
|
|
22
|
+
protected rules: Rule<T>[];
|
|
23
|
+
constructor(rules?: Rule<T>[]);
|
|
24
|
+
protected refinements: ((value: T, ctx: RefinementCtx) => void)[];
|
|
25
|
+
protected clone(rule: Rule<T>): any;
|
|
26
|
+
protected run(value: T, path: Path): Errors[];
|
|
27
|
+
abstract parse(value: unknown, path?: Path): SafeParseResult<T>;
|
|
28
|
+
optional(): Schema<T | undefined>;
|
|
29
|
+
default(value: T): Schema<T>;
|
|
30
|
+
refine(check: (value: T) => boolean, options: {
|
|
31
|
+
message: string | ((value: T) => string);
|
|
32
|
+
path?: Path;
|
|
33
|
+
}): Schema<T>;
|
|
34
|
+
superRefine(refinements: (value: T, ctx: RefinementCtx) => void): this;
|
|
35
|
+
transform(transform: (value: T) => T): Schema<T>;
|
|
36
|
+
safeParse(value: unknown): SafeParseResult<T>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=baseSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/baseSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;AAEtC,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IAClB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;IACxB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;CAC5B,CAAA;AACD,MAAM,MAAM,MAAM,GAAG;IACjB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AACD,MAAM,MAAM,eAAe,CAAC,CAAC,IACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAEtD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAA;IAC5B,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,IAAI,CAAA;CACd,CAAA;AAED,8BAAsB,MAAM,CAAC,CAAC;IACd,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAhB,KAAK,GAAE,IAAI,CAAC,CAAC,CAAC,EAAO;IAC3C,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC,EAAE,CAAK;IAEtE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAI7B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE;IAa7C,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;IAE/D,QAAQ,IAAI,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAIjC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAI5B,MAAM,CACF,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAC5B,OAAO,EAAE;QACL,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,EAAE,IAAI,CAAA;KACd,GACF,MAAM,CAAC,CAAC,CAAC;IAQZ,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,IAAI;IAK/D,SAAS,CACL,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAC3B,MAAM,CAAC,CAAC,CAAC;IAIZ,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;CAGhD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export class Schema {
|
|
2
|
+
rules;
|
|
3
|
+
constructor(rules = []) {
|
|
4
|
+
this.rules = rules;
|
|
5
|
+
}
|
|
6
|
+
refinements = [];
|
|
7
|
+
clone(rule) {
|
|
8
|
+
return new this.constructor([...this.rules, rule]);
|
|
9
|
+
}
|
|
10
|
+
run(value, path) {
|
|
11
|
+
const errors = [];
|
|
12
|
+
for (const { check, message } of this.rules) {
|
|
13
|
+
if (!check(value)) {
|
|
14
|
+
errors.push({
|
|
15
|
+
path: path,
|
|
16
|
+
message: message(value)
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return errors;
|
|
21
|
+
}
|
|
22
|
+
optional() {
|
|
23
|
+
return new OptionalSchema(this);
|
|
24
|
+
}
|
|
25
|
+
default(value) {
|
|
26
|
+
return new DefaultSchema(this, value);
|
|
27
|
+
}
|
|
28
|
+
refine(check, options) {
|
|
29
|
+
return new RefinementSchema(this, {
|
|
30
|
+
check,
|
|
31
|
+
message: options.message,
|
|
32
|
+
path: options.path && typeof options.path === "object" ? [...options.path] : [],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
superRefine(refinements) {
|
|
36
|
+
this.refinements.push(refinements);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
transform(transform) {
|
|
40
|
+
return new TransformSchema(this, transform);
|
|
41
|
+
}
|
|
42
|
+
safeParse(value) {
|
|
43
|
+
return this.parse(value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
class OptionalSchema extends Schema {
|
|
47
|
+
inner;
|
|
48
|
+
constructor(inner) {
|
|
49
|
+
super();
|
|
50
|
+
this.inner = inner;
|
|
51
|
+
}
|
|
52
|
+
parse(value, path) {
|
|
53
|
+
if (value === undefined || value === null) {
|
|
54
|
+
return {
|
|
55
|
+
success: true,
|
|
56
|
+
value: undefined,
|
|
57
|
+
errors: [],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return this.inner.parse(value, path);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
class DefaultSchema extends Schema {
|
|
64
|
+
inner;
|
|
65
|
+
defaultValue;
|
|
66
|
+
constructor(inner, defaultValue) {
|
|
67
|
+
super();
|
|
68
|
+
this.inner = inner;
|
|
69
|
+
this.defaultValue = defaultValue;
|
|
70
|
+
}
|
|
71
|
+
parse(value, path) {
|
|
72
|
+
if (value === undefined || value === null) {
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
value: this.defaultValue,
|
|
76
|
+
errors: [],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return this.inner.parse(value, path);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
class RefinementSchema extends Schema {
|
|
83
|
+
inner;
|
|
84
|
+
refinement;
|
|
85
|
+
constructor(inner, refinement) {
|
|
86
|
+
super();
|
|
87
|
+
this.inner = inner;
|
|
88
|
+
this.refinement = refinement;
|
|
89
|
+
}
|
|
90
|
+
parse(value, path) {
|
|
91
|
+
const result = this.inner.parse(value, path);
|
|
92
|
+
if (!result.success)
|
|
93
|
+
return result;
|
|
94
|
+
const ok = this.refinement.check(result.value);
|
|
95
|
+
const errors = [...result.errors];
|
|
96
|
+
if (!ok) {
|
|
97
|
+
errors.push({
|
|
98
|
+
path: this.refinement.path && typeof this.refinement.path === "object" ? [...path, ...this.refinement.path] : path,
|
|
99
|
+
message: typeof this.refinement.message === "function"
|
|
100
|
+
? this.refinement.message(result.value)
|
|
101
|
+
: this.refinement.message,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
success: errors.length === 0,
|
|
106
|
+
value: result.value,
|
|
107
|
+
errors,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
class TransformSchema extends Schema {
|
|
112
|
+
inner;
|
|
113
|
+
transformer;
|
|
114
|
+
constructor(inner, transformer) {
|
|
115
|
+
super();
|
|
116
|
+
this.inner = inner;
|
|
117
|
+
this.transformer = transformer;
|
|
118
|
+
}
|
|
119
|
+
parse(value, path) {
|
|
120
|
+
const result = this.inner.parse(value, path);
|
|
121
|
+
if (!result.success)
|
|
122
|
+
return result;
|
|
123
|
+
const tValue = this.transformer(result.value);
|
|
124
|
+
try {
|
|
125
|
+
return {
|
|
126
|
+
success: true,
|
|
127
|
+
value: tValue,
|
|
128
|
+
errors: [],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
return {
|
|
133
|
+
success: false,
|
|
134
|
+
value: result.value,
|
|
135
|
+
errors: [{
|
|
136
|
+
path,
|
|
137
|
+
message: e instanceof Error ? e.message : "Transform failed",
|
|
138
|
+
}],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=baseSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/baseSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Schema, type Path, type Rule, type SafeParseResult } from "./baseSchema.js";
|
|
2
|
+
export declare class NumberSchema extends Schema<number> {
|
|
3
|
+
constructor(rules?: Rule<number>[]);
|
|
4
|
+
protected clone(rule: Rule<number>): NumberSchema;
|
|
5
|
+
int(): NumberSchema;
|
|
6
|
+
positive(): NumberSchema;
|
|
7
|
+
negative(): NumberSchema;
|
|
8
|
+
nonpositive(): NumberSchema;
|
|
9
|
+
nonnegative(): NumberSchema;
|
|
10
|
+
multipleOf(multiple: number): NumberSchema;
|
|
11
|
+
finite(): NumberSchema;
|
|
12
|
+
safe(): NumberSchema;
|
|
13
|
+
min(value: number): NumberSchema;
|
|
14
|
+
max(value: number): NumberSchema;
|
|
15
|
+
parse(value: unknown, path: Path): SafeParseResult<number>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=numberSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numberSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/numberSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAe,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElG,qBAAa,YAAa,SAAQ,MAAM,CAAC,MAAM,CAAC;gBAChC,KAAK,GAAE,IAAI,CAAC,MAAM,CAAC,EAAO;IAGtC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAIlC,GAAG;IAOH,QAAQ;IAOR,QAAQ;IAOR,WAAW;IAOX,WAAW;IAOX,UAAU,CAAC,QAAQ,EAAE,MAAM;IAO3B,MAAM;IAON,IAAI;IAOJ,GAAG,CAAC,KAAK,EAAE,MAAM;IAMjB,GAAG,CAAC,KAAK,EAAE,MAAM;IAMjB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC;CAkB7D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ERRORS } from "../errors/index.js";
|
|
2
|
+
import { commonFunctions as CF } from "../common/index.js";
|
|
3
|
+
import { Schema } from "./baseSchema.js";
|
|
4
|
+
export class NumberSchema extends Schema {
|
|
5
|
+
constructor(rules = []) {
|
|
6
|
+
super(rules);
|
|
7
|
+
}
|
|
8
|
+
clone(rule) {
|
|
9
|
+
return new NumberSchema([...this.rules, rule]);
|
|
10
|
+
}
|
|
11
|
+
int() {
|
|
12
|
+
return this.clone({
|
|
13
|
+
check: (v) => CF.isInteger(v),
|
|
14
|
+
message: (v) => ERRORS.int(v),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
positive() {
|
|
18
|
+
return this.clone({
|
|
19
|
+
check: (v) => CF.isPositive(v),
|
|
20
|
+
message: (v) => ERRORS.positive(v),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
negative() {
|
|
24
|
+
return this.clone({
|
|
25
|
+
check: (v) => CF.isNegative(v),
|
|
26
|
+
message: (v) => ERRORS.negative(v),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
nonpositive() {
|
|
30
|
+
return this.clone({
|
|
31
|
+
check: (v) => CF.isNonPositive(v),
|
|
32
|
+
message: (v) => ERRORS.nonPositive(v),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
nonnegative() {
|
|
36
|
+
return this.clone({
|
|
37
|
+
check: (v) => CF.isNonNegative(v),
|
|
38
|
+
message: (v) => ERRORS.nonNegative(v),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
multipleOf(multiple) {
|
|
42
|
+
return this.clone({
|
|
43
|
+
check: (v) => CF.isMultipleOf(v, multiple),
|
|
44
|
+
message: (v) => ERRORS.multipleOf(v, multiple),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
finite() {
|
|
48
|
+
return this.clone({
|
|
49
|
+
check: (v) => CF.isFinite(v),
|
|
50
|
+
message: (v) => ERRORS.finite(v),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
safe() {
|
|
54
|
+
return this.clone({
|
|
55
|
+
check: (v) => CF.isSafeInteger(v),
|
|
56
|
+
message: (v) => ERRORS.safe(v),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
min(value) {
|
|
60
|
+
return this.clone({
|
|
61
|
+
check: (v) => v >= value,
|
|
62
|
+
message: (v) => ERRORS.min(v, value),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
max(value) {
|
|
66
|
+
return this.clone({
|
|
67
|
+
check: (v) => v <= value,
|
|
68
|
+
message: (v) => ERRORS.max(v, value),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
parse(value, path) {
|
|
72
|
+
if (!CF.isNumber(value)) {
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
value: value,
|
|
76
|
+
errors: [{
|
|
77
|
+
path: path ?? value,
|
|
78
|
+
message: ERRORS.number(value)
|
|
79
|
+
}]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const result = this.run(value, path);
|
|
83
|
+
return {
|
|
84
|
+
success: result.length === 0,
|
|
85
|
+
value: value,
|
|
86
|
+
errors: result
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=numberSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numberSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/numberSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Schema, type Path, type SafeParseResult } from "./baseSchema.js";
|
|
2
|
+
export type Shape = Record<string, Schema<any>>;
|
|
3
|
+
export declare class ObjectSchema<T extends Shape> extends Schema<{
|
|
4
|
+
[K in keyof T]: any;
|
|
5
|
+
}> {
|
|
6
|
+
private shape;
|
|
7
|
+
constructor(shape: T);
|
|
8
|
+
protected clone(): ObjectSchema<T>;
|
|
9
|
+
parse(value: unknown, path: Path): SafeParseResult<any>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=objectSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/objectSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAe,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtF,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAE/C,qBAAa,YAAY,CAAC,CAAC,SAAS,KAAK,CAAE,SAAQ,MAAM,CAAC;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG;CACtB,CAAC;IACc,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,CAAC;IAI5B,SAAS,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;IAIlC,KAAK,CACD,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,IAAI,GACX,eAAe,CAAC,GAAG,CAAC;CA0C1B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ERRORS } from "../errors/index.js";
|
|
2
|
+
import { commonFunctions as CF } from "../common/index.js";
|
|
3
|
+
import { Schema } from "./baseSchema.js";
|
|
4
|
+
import { RefinementCtx } from "./SuperRefine.js";
|
|
5
|
+
export class ObjectSchema extends Schema {
|
|
6
|
+
shape;
|
|
7
|
+
constructor(shape) {
|
|
8
|
+
super();
|
|
9
|
+
this.shape = shape;
|
|
10
|
+
}
|
|
11
|
+
clone() {
|
|
12
|
+
return new ObjectSchema(this.shape);
|
|
13
|
+
}
|
|
14
|
+
parse(value, path) {
|
|
15
|
+
if (!CF.isObject(value)) {
|
|
16
|
+
return {
|
|
17
|
+
success: false,
|
|
18
|
+
value: value,
|
|
19
|
+
errors: [{ path: path ?? value, message: ERRORS.object(value) }],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const result = {};
|
|
23
|
+
const errors = [];
|
|
24
|
+
for (const key in this.shape) {
|
|
25
|
+
const schema = this.shape[key];
|
|
26
|
+
if (!schema) {
|
|
27
|
+
throw new Error(`Schema for key ${key} not found`);
|
|
28
|
+
}
|
|
29
|
+
const child = schema.parse(value[key], path && key ? [...path, key] : path || [key]);
|
|
30
|
+
if (!child.success) {
|
|
31
|
+
errors.push(...child.errors);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
result[key] = child.value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (errors.length > 0) {
|
|
38
|
+
return { success: false, value, errors };
|
|
39
|
+
}
|
|
40
|
+
const refinementCtx = new RefinementCtx();
|
|
41
|
+
for (const refinement of this.refinements) {
|
|
42
|
+
refinement(result, refinementCtx);
|
|
43
|
+
}
|
|
44
|
+
if (refinementCtx.errors.length > 0) {
|
|
45
|
+
return { success: false, value, errors: refinementCtx.errors };
|
|
46
|
+
}
|
|
47
|
+
return { success: true, value: result, errors: [] };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=objectSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/objectSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,eAAe,IAAI,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAgD,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAIhD,MAAM,OAAO,YAA8B,SAAQ,MAEjD;IACsB;IAApB,YAAoB,KAAQ;QACxB,KAAK,EAAE,CAAA;QADS,UAAK,GAAL,KAAK,CAAG;IAE5B,CAAC;IAES,KAAK;QACX,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CACD,KAAc,EACd,IAAU;QAEV,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;aACnE,CAAA;QACL,CAAC;QAED,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,MAAM,MAAM,GAAa,EAAE,CAAA;QAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAA;YACtD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CACrB,KAAa,CAAC,GAAG,CAAC,EACnB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAC/C,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;QAC5C,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAC1C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAA;QAClE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACvD,CAAC;CACJ"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Schema, type Path, type SafeParseResult } from "./baseSchema.js";
|
|
2
|
+
export declare class OptionalSchema<T> extends Schema<T | undefined> {
|
|
3
|
+
private readonly inner;
|
|
4
|
+
constructor(inner: Schema<T>);
|
|
5
|
+
parse(value: unknown, path: Path): SafeParseResult<T | undefined>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=optionalSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optionalSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/optionalSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAG7C,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC;CAWpE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Schema } from "./baseSchema.js";
|
|
2
|
+
export class OptionalSchema extends Schema {
|
|
3
|
+
inner;
|
|
4
|
+
constructor(inner) {
|
|
5
|
+
super();
|
|
6
|
+
this.inner = inner;
|
|
7
|
+
}
|
|
8
|
+
parse(value, path) {
|
|
9
|
+
if (value === undefined || value === null) {
|
|
10
|
+
return {
|
|
11
|
+
success: true,
|
|
12
|
+
value: undefined,
|
|
13
|
+
errors: []
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return this.inner.parse(value, path);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=optionalSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optionalSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/optionalSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AAE1E,MAAM,OAAO,cAAkB,SAAQ,MAAqB;IAC3B;IAA7B,YAA6B,KAAgB;QACzC,KAAK,EAAE,CAAA;QADkB,UAAK,GAAL,KAAK,CAAW;IAE7C,CAAC;IACD,KAAK,CAAC,KAAc,EAAE,IAAU;QAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,EAAE;aACb,CAAA;QACL,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;CAEJ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Schema, type Path, type Rule, type SafeParseResult } from "./baseSchema.js";
|
|
2
|
+
export declare class StringSchema extends Schema<string> {
|
|
3
|
+
constructor(rules?: Rule<string>[]);
|
|
4
|
+
protected clone(rule: Rule<string>): StringSchema;
|
|
5
|
+
length(length: number): StringSchema;
|
|
6
|
+
min(length: number): StringSchema;
|
|
7
|
+
max(length: number): StringSchema;
|
|
8
|
+
email(regex?: RegExp): StringSchema;
|
|
9
|
+
url(regex?: RegExp): StringSchema;
|
|
10
|
+
regex(regex: RegExp): StringSchema;
|
|
11
|
+
startsWith(prefix: string): StringSchema;
|
|
12
|
+
endsWith(suffix: string): StringSchema;
|
|
13
|
+
nonempty(): StringSchema;
|
|
14
|
+
parse(value: unknown, path: Path): SafeParseResult<string>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=stringSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/stringSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAe,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjG,qBAAa,YAAa,SAAQ,MAAM,CAAC,MAAM,CAAC;gBAChC,KAAK,GAAE,IAAI,CAAC,MAAM,CAAC,EAAO;IAItC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAIlC,MAAM,CAAC,MAAM,EAAE,MAAM;IAOrB,GAAG,CAAC,MAAM,EAAE,MAAM;IAOlB,GAAG,CAAC,MAAM,EAAE,MAAM;IAOlB,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM;IAOpB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM;IAOlB,KAAK,CAAC,KAAK,EAAE,MAAM;IAOnB,UAAU,CAAC,MAAM,EAAE,MAAM;IAOzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAOvB,QAAQ;IAOR,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC;CAkB7D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ERRORS } from "../errors/index.js";
|
|
2
|
+
import { commonFunctions as CF } from "../common/index.js";
|
|
3
|
+
import { Schema } from "./baseSchema.js";
|
|
4
|
+
export class StringSchema extends Schema {
|
|
5
|
+
constructor(rules = []) {
|
|
6
|
+
super(rules);
|
|
7
|
+
}
|
|
8
|
+
clone(rule) {
|
|
9
|
+
return new StringSchema([...this.rules, rule]);
|
|
10
|
+
}
|
|
11
|
+
length(length) {
|
|
12
|
+
return this.clone({
|
|
13
|
+
check: (v) => CF.length(v, length),
|
|
14
|
+
message: (v) => ERRORS.length(v, length),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
min(length) {
|
|
18
|
+
return this.clone({
|
|
19
|
+
check: (v) => CF.min(v, length),
|
|
20
|
+
message: (v) => ERRORS.min(v, length),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
max(length) {
|
|
24
|
+
return this.clone({
|
|
25
|
+
check: (v) => CF.max(v, length),
|
|
26
|
+
message: (v) => ERRORS.max(v, length),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
email(regex) {
|
|
30
|
+
return this.clone({
|
|
31
|
+
check: (v) => CF.isEmail(v, regex),
|
|
32
|
+
message: (v) => ERRORS.email(v),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
url(regex) {
|
|
36
|
+
return this.clone({
|
|
37
|
+
check: (v) => CF.isUrl(v, regex),
|
|
38
|
+
message: (v) => ERRORS.url(v),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
regex(regex) {
|
|
42
|
+
return this.clone({
|
|
43
|
+
check: (v) => CF.matchRegex(v, regex),
|
|
44
|
+
message: (v) => ERRORS.regex(v),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
startsWith(prefix) {
|
|
48
|
+
return this.clone({
|
|
49
|
+
check: (v) => CF.startsWith(v, prefix),
|
|
50
|
+
message: (v) => ERRORS.startsWith(v, prefix),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
endsWith(suffix) {
|
|
54
|
+
return this.clone({
|
|
55
|
+
check: (v) => CF.endsWith(v, suffix),
|
|
56
|
+
message: (v) => ERRORS.endsWith(v, suffix),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
nonempty() {
|
|
60
|
+
return this.clone({
|
|
61
|
+
check: (v) => CF.nonEmpty(v),
|
|
62
|
+
message: (v) => ERRORS.nonEmpty(v),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
parse(value, path) {
|
|
66
|
+
if (!CF.isString(value)) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
value: value,
|
|
70
|
+
errors: [{
|
|
71
|
+
path: path || value,
|
|
72
|
+
message: ERRORS.string(value)
|
|
73
|
+
}]
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const errors = this.run(value, path);
|
|
77
|
+
return {
|
|
78
|
+
success: errors.length === 0,
|
|
79
|
+
value: value,
|
|
80
|
+
errors
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=stringSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/stringSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema, type SafeParseResult, type Path } from "./baseSchema.js";
|
|
2
|
+
export type TUnion = Schema<any>[];
|
|
3
|
+
export declare class UnionSchema<T extends TUnion> extends Schema<any> {
|
|
4
|
+
private schemas;
|
|
5
|
+
constructor(schemas: T);
|
|
6
|
+
protected clone(): UnionSchema<T>;
|
|
7
|
+
parse(value: unknown, path: Path | undefined): SafeParseResult<any>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=unionSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unionSchema.d.ts","sourceRoot":"","sources":["../../../src/core/schemas/unionSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,eAAe,EAAe,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvF,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;AAClC,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,GAAG,CAAC;IAC9C,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,CAAC;IAI9B,SAAS,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;IAIjC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC;CAWtE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Schema } from "./baseSchema.js";
|
|
2
|
+
export class UnionSchema extends Schema {
|
|
3
|
+
schemas;
|
|
4
|
+
constructor(schemas) {
|
|
5
|
+
super();
|
|
6
|
+
this.schemas = schemas;
|
|
7
|
+
}
|
|
8
|
+
clone() {
|
|
9
|
+
return new UnionSchema(this.schemas);
|
|
10
|
+
}
|
|
11
|
+
parse(value, path) {
|
|
12
|
+
const errors = [];
|
|
13
|
+
for (const schema of this.schemas) {
|
|
14
|
+
const res = schema.parse(value, path);
|
|
15
|
+
if (res.success)
|
|
16
|
+
return res;
|
|
17
|
+
errors.push(...res.errors);
|
|
18
|
+
}
|
|
19
|
+
return { success: false, value, errors };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=unionSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unionSchema.js","sourceRoot":"","sources":["../../../src/core/schemas/unionSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgD,MAAM,iBAAiB,CAAC;AAGvF,MAAM,OAAO,WAA8B,SAAQ,MAAW;IACtC;IAApB,YAAoB,OAAU;QAC1B,KAAK,EAAE,CAAC;QADQ,YAAO,GAAP,OAAO,CAAG;IAE9B,CAAC;IAES,KAAK;QACX,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAc,EAAE,IAAsB;QACxC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;CACJ"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAEtC,eAAe,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAEtC,eAAe,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "schema-validex",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A schema validation library for TypeScript inspired by Zod. Includes features like type inference, runtime validation, and type-safe schema definition.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"start": "tsc && node dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"typescript",
|
|
23
|
+
"type-validation",
|
|
24
|
+
"runtime-types",
|
|
25
|
+
"schema-validation",
|
|
26
|
+
"type-safe",
|
|
27
|
+
"runtime-checks",
|
|
28
|
+
"object-validation",
|
|
29
|
+
"array-validation",
|
|
30
|
+
"json-validation",
|
|
31
|
+
"zod-like",
|
|
32
|
+
"ts-schema",
|
|
33
|
+
"input-validation"
|
|
34
|
+
],
|
|
35
|
+
"author": "Abhishek Mahato",
|
|
36
|
+
"license": "ISC",
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^25.0.3",
|
|
39
|
+
"typescript": "^5.9.3"
|
|
40
|
+
}
|
|
41
|
+
}
|