@@ -16,6 +16,99 @@ Features of the library:
16
16
- Custom validation rules can be added using the JSON Expression language.
17
17
- Can generate random JSON values that match the schema.
18
18
19
+ ## Quick Start
20
+
21
+ Define a user schema and validate data in just a few lines:
22
+
23
+ ``` ts
24
+ import {t } from ' @jsonjoy.com/json-type' ;
25
+
26
+ // Define a user type
27
+ const User = t .Object ([
28
+ t .prop (' id' , t .Number ()),
29
+ t .prop (' name' , t .String ()),
30
+ t .prop (' email' , t .String ()),
31
+ t .propOpt (' age' , t .Number ({gte: 0 , lte: 120 }))
32
+ ]);
33
+
34
+ // Validate data
35
+ const isValid = User .validateSchema ();
36
+ User .validate ({
37
+ id: 1 ,
38
+ name: " Alice" ,
39
+
40
+ age: 30
41
+ }); // ✅ Valid
42
+
43
+ // Generate random test data
44
+ const randomUser = User .random ();
45
+ // { id: 42, name: "xyz123", email: "abc", age: 25 }
46
+ ```
47
+
48
+ ## Advanced Features
49
+
50
+ JSON Type goes beyond basic validation with powerful JIT compilation:
51
+
52
+ ``` ts
53
+ // Compile ultra-fast validators
54
+ const validator = User .compileValidator ({errors: ' boolean' });
55
+ const isValid = validator (userData ); // Blazing fast validation
56
+
57
+ // Generate TypeScript types
58
+ const tsCode = User .toTypeScript ();
59
+ // type User = { id: number; name: string; email: string; age?: number; }
60
+
61
+ // Compile optimized serializers
62
+ const toJson = User .compileEncoder (' json' );
63
+ const jsonString = toJson (userData ); // Faster than JSON.stringify
64
+
65
+ const toCbor = User .compileCborEncoder ();
66
+ const cborBytes = toCbor (userData ); // Binary serialization
67
+ ```
68
+
69
+ ## Real-World Example
70
+
71
+ Build type-safe APIs with complex schemas:
72
+
73
+ ``` ts
74
+ import {t } from ' @jsonjoy.com/json-type' ;
75
+
76
+ // Define API request/response types
77
+ const CreatePostRequest = t .Object ([
78
+ t .prop (' title' , t .String ({min: 1 , max: 100 })),
79
+ t .prop (' content' , t .String ({min: 10 })),
80
+ t .prop (' tags' , t .Array (t .String (), {max: 5 })),
81
+ t .prop (' published' , t .Boolean ())
82
+ ]);
83
+
84
+ const Post = t .Object ([
85
+ t .prop (' id' , t .String ()),
86
+ t .prop (' title' , t .String ()),
87
+ t .prop (' content' , t .String ()),
88
+ t .prop (' tags' , t .Array (t .String ())),
89
+ t .prop (' published' , t .Boolean ()),
90
+ t .prop (' createdAt' , t .Number ({format: ' u64' })),
91
+ t .prop (' author' , t .Object ([
92
+ t .prop (' id' , t .String ()),
93
+ t .prop (' name' , t .String ())
94
+ ]))
95
+ ]);
96
+
97
+ const CreatePostResponse = t .Object ([
98
+ t .prop (' success' , t .Boolean ()),
99
+ t .prop (' post' , Post ),
100
+ t .propOpt (' error' , t .String ())
101
+ ]);
102
+
103
+ // Use in your API
104
+ function createPost(data : unknown ) {
105
+ CreatePostRequest .validate (data ); // Throws if invalid
106
+
107
+ // Your business logic here...
108
+
109
+ return CreatePostResponse .random (); // Type-safe response
110
+ }
111
+ ```
19
112
20
113
## Usage
21
114
0 commit comments