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.
Files changed (50) hide show
  1. package/README.md +159 -0
  2. package/dist/core/common/index.d.ts +31 -0
  3. package/dist/core/common/index.d.ts.map +1 -0
  4. package/dist/core/common/index.js +91 -0
  5. package/dist/core/common/index.js.map +1 -0
  6. package/dist/core/errors/index.d.ts +28 -0
  7. package/dist/core/errors/index.d.ts.map +1 -0
  8. package/dist/core/errors/index.js +75 -0
  9. package/dist/core/errors/index.js.map +1 -0
  10. package/dist/core/index.d.ts +14 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/index.js +14 -0
  13. package/dist/core/index.js.map +1 -0
  14. package/dist/core/schemas/SuperRefine.d.ts +7 -0
  15. package/dist/core/schemas/SuperRefine.d.ts.map +1 -0
  16. package/dist/core/schemas/SuperRefine.js +10 -0
  17. package/dist/core/schemas/SuperRefine.js.map +1 -0
  18. package/dist/core/schemas/arraySchema.d.ts +14 -0
  19. package/dist/core/schemas/arraySchema.d.ts.map +1 -0
  20. package/dist/core/schemas/arraySchema.js +74 -0
  21. package/dist/core/schemas/arraySchema.js.map +1 -0
  22. package/dist/core/schemas/baseSchema.d.ts +38 -0
  23. package/dist/core/schemas/baseSchema.d.ts.map +1 -0
  24. package/dist/core/schemas/baseSchema.js +143 -0
  25. package/dist/core/schemas/baseSchema.js.map +1 -0
  26. package/dist/core/schemas/numberSchema.d.ts +17 -0
  27. package/dist/core/schemas/numberSchema.d.ts.map +1 -0
  28. package/dist/core/schemas/numberSchema.js +90 -0
  29. package/dist/core/schemas/numberSchema.js.map +1 -0
  30. package/dist/core/schemas/objectSchema.d.ts +11 -0
  31. package/dist/core/schemas/objectSchema.d.ts.map +1 -0
  32. package/dist/core/schemas/objectSchema.js +50 -0
  33. package/dist/core/schemas/objectSchema.js.map +1 -0
  34. package/dist/core/schemas/optionalSchema.d.ts +7 -0
  35. package/dist/core/schemas/optionalSchema.d.ts.map +1 -0
  36. package/dist/core/schemas/optionalSchema.js +19 -0
  37. package/dist/core/schemas/optionalSchema.js.map +1 -0
  38. package/dist/core/schemas/stringSchema.d.ts +16 -0
  39. package/dist/core/schemas/stringSchema.d.ts.map +1 -0
  40. package/dist/core/schemas/stringSchema.js +84 -0
  41. package/dist/core/schemas/stringSchema.js.map +1 -0
  42. package/dist/core/schemas/unionSchema.d.ts +9 -0
  43. package/dist/core/schemas/unionSchema.d.ts.map +1 -0
  44. package/dist/core/schemas/unionSchema.js +22 -0
  45. package/dist/core/schemas/unionSchema.js.map +1 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +3 -0
  49. package/dist/index.js.map +1 -0
  50. 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,7 @@
1
+ import type { Errors } from "./baseSchema.js";
2
+ export declare class RefinementCtx {
3
+ private _issues;
4
+ addError(issue: Errors): void;
5
+ get errors(): Errors[];
6
+ }
7
+ //# sourceMappingURL=SuperRefine.d.ts.map
@@ -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,10 @@
1
+ export class RefinementCtx {
2
+ _issues = [];
3
+ addError(issue) {
4
+ this._issues.push(issue);
5
+ }
6
+ get errors() {
7
+ return this._issues;
8
+ }
9
+ }
10
+ //# sourceMappingURL=SuperRefine.js.map
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,IAAI,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAA2D,MAAM,iBAAiB,CAAC;AAElG,MAAM,OAAO,YAAa,SAAQ,MAAc;IAC5C,YAAY,QAAwB,EAAE;QAClC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IACS,KAAK,CAAC,IAAkB;QAC9B,OAAO,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC,CAAA;IACN,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrC,CAAC,CAAA;IACN,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrC,CAAC,CAAA;IACN,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;SACxC,CAAC,CAAA;IACN,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;SACxC,CAAC,CAAA;IACN,CAAC;IAED,UAAU,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC1C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;SACjD,CAAC,CAAA;IACN,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SACnC,CAAC,CAAA;IACN,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACjC,CAAC,CAAA;IACN,CAAC;IAED,GAAG,CAAC,KAAa;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK;YACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;SACvC,CAAC,CAAA;IACN,CAAC;IACD,GAAG,CAAC,KAAa;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;YACd,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK;YACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;SACvC,CAAC,CAAA;IACN,CAAC;IACD,KAAK,CAAC,KAAc,EAAE,IAAU;QAC5B,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAe;gBACtB,MAAM,EAAE,CAAC;wBACL,IAAI,EAAE,IAAI,IAAI,KAAK;wBACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;qBAChC,CAAC;aACL,CAAA;QACL,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACpC,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,KAAK,EAAE,KAAe;YACtB,MAAM,EAAE,MAAM;SACjB,CAAA;IACL,CAAC;CACJ"}
@@ -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"}
@@ -0,0 +1,3 @@
1
+ import validex from "./core/index.js";
2
+ export default validex;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ import validex from "./core/index.js";
2
+ export default validex;
3
+ //# sourceMappingURL=index.js.map
@@ -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
+ }