@atproto/lex-schema 0.0.8 → 0.0.10
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/CHANGELOG.md +41 -0
- package/LICENSE.txt +1 -1
- package/dist/core/$type.d.ts +11 -0
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js +4 -0
- package/dist/core/$type.js.map +1 -1
- package/dist/core/schema.d.ts +31 -24
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +38 -8
- package/dist/core/schema.js.map +1 -1
- package/dist/core/string-format.d.ts +35 -35
- package/dist/core/string-format.d.ts.map +1 -1
- package/dist/core/string-format.js +49 -91
- package/dist/core/string-format.js.map +1 -1
- package/dist/core/validation-issue.js +1 -1
- package/dist/core/validation-issue.js.map +1 -1
- package/dist/core/validator.d.ts +53 -32
- package/dist/core/validator.d.ts.map +1 -1
- package/dist/core/validator.js +18 -22
- package/dist/core/validator.js.map +1 -1
- package/dist/external.d.ts +0 -85
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +0 -164
- package/dist/external.js.map +1 -1
- package/dist/helpers.d.ts +10 -5
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +3 -3
- package/dist/helpers.js.map +1 -1
- package/dist/schema/array.d.ts +9 -5
- package/dist/schema/array.d.ts.map +1 -1
- package/dist/schema/array.js +14 -5
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +9 -7
- package/dist/schema/blob.d.ts.map +1 -1
- package/dist/schema/blob.js +9 -5
- package/dist/schema/blob.js.map +1 -1
- package/dist/schema/boolean.d.ts +3 -7
- package/dist/schema/boolean.d.ts.map +1 -1
- package/dist/schema/boolean.js +6 -7
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.d.ts +3 -2
- package/dist/schema/bytes.d.ts.map +1 -1
- package/dist/schema/bytes.js +7 -3
- package/dist/schema/bytes.js.map +1 -1
- package/dist/schema/cid.d.ts +10 -8
- package/dist/schema/cid.d.ts.map +1 -1
- package/dist/schema/cid.js +5 -1
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.d.ts +6 -5
- package/dist/schema/custom.d.ts.map +1 -1
- package/dist/schema/custom.js +10 -4
- package/dist/schema/custom.js.map +1 -1
- package/dist/schema/dict.d.ts +8 -8
- package/dist/schema/dict.d.ts.map +1 -1
- package/dist/schema/dict.js +11 -2
- package/dist/schema/dict.js.map +1 -1
- package/dist/schema/discriminated-union.d.ts +21 -14
- package/dist/schema/discriminated-union.d.ts.map +1 -1
- package/dist/schema/discriminated-union.js +7 -0
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.d.ts +7 -9
- package/dist/schema/enum.d.ts.map +1 -1
- package/dist/schema/enum.js +8 -4
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.d.ts +5 -5
- package/dist/schema/integer.d.ts.map +1 -1
- package/dist/schema/integer.js +9 -5
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +4 -4
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +5 -0
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/literal.d.ts +6 -9
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +7 -4
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.d.ts +3 -2
- package/dist/schema/never.d.ts.map +1 -1
- package/dist/schema/never.js +5 -1
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.d.ts +4 -3
- package/dist/schema/null.d.ts.map +1 -1
- package/dist/schema/null.js +6 -4
- package/dist/schema/null.js.map +1 -1
- package/dist/schema/nullable.d.ts +6 -5
- package/dist/schema/nullable.d.ts.map +1 -1
- package/dist/schema/nullable.js +9 -5
- package/dist/schema/nullable.js.map +1 -1
- package/dist/schema/object.d.ts +10 -8
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +11 -3
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +7 -5
- package/dist/schema/optional.d.ts.map +1 -1
- package/dist/schema/optional.js +14 -6
- package/dist/schema/optional.js.map +1 -1
- package/dist/schema/params.d.ts +24 -13
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +47 -25
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +12 -9
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js +11 -0
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/permission-set.d.ts +1 -0
- package/dist/schema/permission-set.d.ts.map +1 -1
- package/dist/schema/permission-set.js +5 -0
- package/dist/schema/permission-set.js.map +1 -1
- package/dist/schema/permission.d.ts +6 -5
- package/dist/schema/permission.d.ts.map +1 -1
- package/dist/schema/permission.js +5 -0
- package/dist/schema/permission.js.map +1 -1
- package/dist/schema/procedure.d.ts +2 -1
- package/dist/schema/procedure.d.ts.map +1 -1
- package/dist/schema/procedure.js +5 -0
- package/dist/schema/procedure.js.map +1 -1
- package/dist/schema/query.d.ts +2 -1
- package/dist/schema/query.d.ts.map +1 -1
- package/dist/schema/query.js +5 -0
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/record.d.ts +48 -30
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +12 -9
- package/dist/schema/record.js.map +1 -1
- package/dist/schema/ref.d.ts +9 -6
- package/dist/schema/ref.d.ts.map +1 -1
- package/dist/schema/ref.js +9 -16
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +4 -4
- package/dist/schema/refine.d.ts.map +1 -1
- package/dist/schema/refine.js.map +1 -1
- package/dist/schema/regexp.d.ts +4 -3
- package/dist/schema/regexp.d.ts.map +1 -1
- package/dist/schema/regexp.js +5 -0
- package/dist/schema/regexp.js.map +1 -1
- package/dist/schema/string.d.ts +7 -8
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +13 -19
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +2 -1
- package/dist/schema/subscription.d.ts.map +1 -1
- package/dist/schema/subscription.js +5 -0
- package/dist/schema/subscription.js.map +1 -1
- package/dist/schema/token.d.ts +6 -5
- package/dist/schema/token.d.ts.map +1 -1
- package/dist/schema/token.js +5 -0
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +43 -26
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +6 -3
- package/dist/schema/typed-object.js.map +1 -1
- package/dist/schema/typed-ref.d.ts +16 -25
- package/dist/schema/typed-ref.d.ts.map +1 -1
- package/dist/schema/typed-ref.js +7 -17
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +9 -21
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +15 -11
- package/dist/schema/typed-union.js.map +1 -1
- package/dist/schema/union.d.ts +6 -6
- package/dist/schema/union.d.ts.map +1 -1
- package/dist/schema/union.js +7 -5
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown-object.d.ts +5 -4
- package/dist/schema/unknown-object.d.ts.map +1 -1
- package/dist/schema/unknown-object.js +5 -1
- package/dist/schema/unknown-object.js.map +1 -1
- package/dist/schema/unknown.d.ts +3 -2
- package/dist/schema/unknown.d.ts.map +1 -1
- package/dist/schema/unknown.js +5 -1
- package/dist/schema/unknown.js.map +1 -1
- package/dist/schema/with-default.d.ts +9 -0
- package/dist/schema/with-default.d.ts.map +1 -0
- package/dist/schema/with-default.js +27 -0
- package/dist/schema/with-default.js.map +1 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -4
- package/dist/schema.js.map +1 -1
- package/dist/util/assertion-util.d.ts +0 -6
- package/dist/util/assertion-util.d.ts.map +1 -1
- package/dist/util/assertion-util.js +0 -28
- package/dist/util/assertion-util.js.map +1 -1
- package/dist/util/memoize.d.ts +2 -2
- package/dist/util/memoize.d.ts.map +1 -1
- package/dist/util/memoize.js +23 -39
- package/dist/util/memoize.js.map +1 -1
- package/package.json +3 -3
- package/src/core/$type.test.ts +20 -0
- package/src/core/$type.ts +30 -0
- package/src/core/schema.ts +86 -38
- package/src/core/string-format.ts +119 -158
- package/src/core/validation-issue.ts +1 -1
- package/src/core/validator.ts +93 -53
- package/src/external.ts +0 -404
- package/src/helpers.test.ts +22 -21
- package/src/helpers.ts +14 -14
- package/src/schema/array.test.ts +38 -40
- package/src/schema/array.ts +35 -13
- package/src/schema/blob.test.ts +21 -21
- package/src/schema/blob.ts +19 -17
- package/src/schema/boolean.test.ts +9 -8
- package/src/schema/boolean.ts +7 -13
- package/src/schema/bytes.test.ts +13 -13
- package/src/schema/bytes.ts +13 -8
- package/src/schema/cid.test.ts +3 -3
- package/src/schema/cid.ts +15 -13
- package/src/schema/custom.test.ts +26 -26
- package/src/schema/custom.ts +20 -13
- package/src/schema/dict.test.ts +21 -39
- package/src/schema/dict.ts +28 -19
- package/src/schema/discriminated-union.test.ts +128 -128
- package/src/schema/discriminated-union.ts +45 -26
- package/src/schema/enum.test.ts +17 -16
- package/src/schema/enum.ts +16 -16
- package/src/schema/integer.test.ts +22 -21
- package/src/schema/integer.ts +12 -9
- package/src/schema/intersection.test.ts +10 -10
- package/src/schema/intersection.ts +17 -14
- package/src/schema/literal.test.ts +35 -34
- package/src/schema/literal.ts +12 -15
- package/src/schema/never.test.ts +5 -5
- package/src/schema/never.ts +7 -2
- package/src/schema/null.test.ts +3 -3
- package/src/schema/null.ts +9 -9
- package/src/schema/nullable.test.ts +31 -42
- package/src/schema/nullable.ts +17 -9
- package/src/schema/object.test.ts +10 -12
- package/src/schema/object.ts +27 -18
- package/src/schema/optional.test.ts +21 -28
- package/src/schema/optional.ts +27 -10
- package/src/schema/params.test.ts +471 -47
- package/src/schema/params.ts +72 -38
- package/src/schema/payload.test.ts +150 -156
- package/src/schema/payload.ts +35 -19
- package/src/schema/permission-set.test.ts +206 -273
- package/src/schema/permission-set.ts +8 -0
- package/src/schema/permission.test.ts +177 -177
- package/src/schema/permission.ts +13 -5
- package/src/schema/procedure.test.ts +183 -242
- package/src/schema/procedure.ts +18 -5
- package/src/schema/query.test.ts +186 -200
- package/src/schema/query.ts +16 -4
- package/src/schema/record.test.ts +121 -101
- package/src/schema/record.ts +74 -40
- package/src/schema/ref.test.ts +101 -118
- package/src/schema/ref.ts +33 -28
- package/src/schema/refine.test.ts +28 -28
- package/src/schema/refine.ts +23 -20
- package/src/schema/regexp.test.ts +29 -33
- package/src/schema/regexp.ts +11 -7
- package/src/schema/string.test.ts +35 -35
- package/src/schema/string.ts +24 -33
- package/src/schema/subscription.test.ts +259 -387
- package/src/schema/subscription.ts +16 -4
- package/src/schema/token.test.ts +47 -324
- package/src/schema/token.ts +14 -7
- package/src/schema/typed-object.test.ts +98 -81
- package/src/schema/typed-object.ts +68 -33
- package/src/schema/typed-ref.test.ts +206 -234
- package/src/schema/typed-ref.ts +40 -42
- package/src/schema/typed-union.test.ts +40 -64
- package/src/schema/typed-union.ts +36 -58
- package/src/schema/union.test.ts +17 -27
- package/src/schema/union.ts +20 -16
- package/src/schema/unknown-object.test.ts +8 -8
- package/src/schema/unknown-object.ts +9 -7
- package/src/schema/unknown.test.ts +4 -4
- package/src/schema/unknown.ts +7 -5
- package/src/schema/with-default.ts +35 -0
- package/src/schema.ts +2 -6
- package/src/util/assertion-util.ts +0 -39
- package/src/util/memoize.ts +26 -46
- package/dist/schema/_parameters.d.ts +0 -17
- package/dist/schema/_parameters.d.ts.map +0 -1
- package/dist/schema/_parameters.js +0 -20
- package/dist/schema/_parameters.js.map +0 -1
- package/src/schema/_parameters.test.ts +0 -417
- package/src/schema/_parameters.ts +0 -26
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { integer } from './integer.js'
|
|
3
|
+
import { object } from './object.js'
|
|
4
|
+
import { string } from './string.js'
|
|
5
|
+
import { typedObject } from './typed-object.js'
|
|
6
|
+
import { typedRef } from './typed-ref.js'
|
|
7
7
|
|
|
8
8
|
describe('TypedRefSchema', () => {
|
|
9
9
|
describe('basic validation', () => {
|
|
10
10
|
it('validates through a typed object reference with explicit $type', () => {
|
|
11
|
-
const
|
|
11
|
+
const typedObjectSchema = typedObject(
|
|
12
12
|
'com.example.user',
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
'main',
|
|
14
|
+
object({
|
|
15
|
+
name: string(),
|
|
16
|
+
age: integer(),
|
|
16
17
|
}),
|
|
17
18
|
)
|
|
18
19
|
|
|
19
|
-
const schema =
|
|
20
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
20
21
|
|
|
21
22
|
const result = schema.safeParse({
|
|
22
23
|
$type: 'com.example.user',
|
|
@@ -31,15 +32,16 @@ describe('TypedRefSchema', () => {
|
|
|
31
32
|
})
|
|
32
33
|
|
|
33
34
|
it('validates through a typed object with explicit $type', () => {
|
|
34
|
-
const
|
|
35
|
+
const typedObjectSchema = typedObject(
|
|
35
36
|
'com.example.user',
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
'main',
|
|
38
|
+
object({
|
|
39
|
+
name: string(),
|
|
40
|
+
age: integer(),
|
|
39
41
|
}),
|
|
40
42
|
)
|
|
41
43
|
|
|
42
|
-
const schema =
|
|
44
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
43
45
|
|
|
44
46
|
const result = schema.safeParse({
|
|
45
47
|
$type: 'com.example.user',
|
|
@@ -54,14 +56,15 @@ describe('TypedRefSchema', () => {
|
|
|
54
56
|
})
|
|
55
57
|
|
|
56
58
|
it('rejects input with wrong $type', () => {
|
|
57
|
-
const
|
|
59
|
+
const typedObjectSchema = typedObject(
|
|
58
60
|
'com.example.user',
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
'main',
|
|
62
|
+
object({
|
|
63
|
+
name: string(),
|
|
61
64
|
}),
|
|
62
65
|
)
|
|
63
66
|
|
|
64
|
-
const schema =
|
|
67
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
65
68
|
|
|
66
69
|
const result = schema.safeParse({
|
|
67
70
|
$type: 'com.example.wrong',
|
|
@@ -72,15 +75,16 @@ describe('TypedRefSchema', () => {
|
|
|
72
75
|
})
|
|
73
76
|
|
|
74
77
|
it('rejects invalid input through reference', () => {
|
|
75
|
-
const
|
|
78
|
+
const typedObjectSchema = typedObject(
|
|
76
79
|
'com.example.user',
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
'main',
|
|
81
|
+
object({
|
|
82
|
+
name: string(),
|
|
83
|
+
age: integer(),
|
|
80
84
|
}),
|
|
81
85
|
)
|
|
82
86
|
|
|
83
|
-
const schema =
|
|
87
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
84
88
|
|
|
85
89
|
const result = schema.safeParse({
|
|
86
90
|
$type: 'com.example.user',
|
|
@@ -92,42 +96,45 @@ describe('TypedRefSchema', () => {
|
|
|
92
96
|
})
|
|
93
97
|
|
|
94
98
|
it('rejects non-objects through reference', () => {
|
|
95
|
-
const
|
|
99
|
+
const typedObjectSchema = typedObject(
|
|
96
100
|
'com.example.value',
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
'main',
|
|
102
|
+
object({
|
|
103
|
+
value: string(),
|
|
99
104
|
}),
|
|
100
105
|
)
|
|
101
106
|
|
|
102
|
-
const schema =
|
|
107
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
103
108
|
|
|
104
109
|
const result = schema.safeParse('not an object')
|
|
105
110
|
expect(result.success).toBe(false)
|
|
106
111
|
})
|
|
107
112
|
|
|
108
113
|
it('rejects null through reference', () => {
|
|
109
|
-
const
|
|
114
|
+
const typedObjectSchema = typedObject(
|
|
110
115
|
'com.example.user',
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
'main',
|
|
117
|
+
object({
|
|
118
|
+
name: string(),
|
|
113
119
|
}),
|
|
114
120
|
)
|
|
115
121
|
|
|
116
|
-
const schema =
|
|
122
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
117
123
|
|
|
118
124
|
const result = schema.safeParse(null)
|
|
119
125
|
expect(result.success).toBe(false)
|
|
120
126
|
})
|
|
121
127
|
|
|
122
128
|
it('rejects undefined through reference', () => {
|
|
123
|
-
const
|
|
129
|
+
const typedObjectSchema = typedObject(
|
|
124
130
|
'com.example.user',
|
|
125
|
-
|
|
126
|
-
|
|
131
|
+
'main',
|
|
132
|
+
object({
|
|
133
|
+
name: string(),
|
|
127
134
|
}),
|
|
128
135
|
)
|
|
129
136
|
|
|
130
|
-
const schema =
|
|
137
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
131
138
|
|
|
132
139
|
const result = schema.safeParse(undefined)
|
|
133
140
|
expect(result.success).toBe(false)
|
|
@@ -136,27 +143,29 @@ describe('TypedRefSchema', () => {
|
|
|
136
143
|
|
|
137
144
|
describe('$type property', () => {
|
|
138
145
|
it('exposes the $type from the referenced schema', () => {
|
|
139
|
-
const
|
|
146
|
+
const typedObjectSchema = typedObject(
|
|
140
147
|
'com.example.post',
|
|
141
|
-
|
|
142
|
-
|
|
148
|
+
'main',
|
|
149
|
+
object({
|
|
150
|
+
text: string(),
|
|
143
151
|
}),
|
|
144
152
|
)
|
|
145
153
|
|
|
146
|
-
const schema =
|
|
154
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
147
155
|
|
|
148
156
|
expect(schema.$type).toBe('com.example.post')
|
|
149
157
|
})
|
|
150
158
|
|
|
151
159
|
it('validates that output has correct $type', () => {
|
|
152
|
-
const
|
|
160
|
+
const typedObjectSchema = typedObject(
|
|
153
161
|
'com.example.like',
|
|
154
|
-
|
|
155
|
-
|
|
162
|
+
'main',
|
|
163
|
+
object({
|
|
164
|
+
subject: string(),
|
|
156
165
|
}),
|
|
157
166
|
)
|
|
158
167
|
|
|
159
|
-
const schema =
|
|
168
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
160
169
|
|
|
161
170
|
const result = schema.safeParse({
|
|
162
171
|
$type: 'com.example.like',
|
|
@@ -170,14 +179,15 @@ describe('TypedRefSchema', () => {
|
|
|
170
179
|
})
|
|
171
180
|
|
|
172
181
|
it('ensures $type matches expected value', () => {
|
|
173
|
-
const
|
|
182
|
+
const typedObjectSchema = typedObject(
|
|
174
183
|
'com.example.follow',
|
|
175
|
-
|
|
176
|
-
|
|
184
|
+
'main',
|
|
185
|
+
object({
|
|
186
|
+
subject: string(),
|
|
177
187
|
}),
|
|
178
188
|
)
|
|
179
189
|
|
|
180
|
-
const schema =
|
|
190
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
181
191
|
|
|
182
192
|
// Try to pass wrong $type
|
|
183
193
|
const result = schema.safeParse({
|
|
@@ -193,12 +203,13 @@ describe('TypedRefSchema', () => {
|
|
|
193
203
|
it('does not call getter until first validation', () => {
|
|
194
204
|
let getterCalled = false
|
|
195
205
|
|
|
196
|
-
const schema =
|
|
206
|
+
const schema = typedRef(() => {
|
|
197
207
|
getterCalled = true
|
|
198
|
-
return
|
|
208
|
+
return typedObject(
|
|
199
209
|
'com.example.test',
|
|
200
|
-
|
|
201
|
-
|
|
210
|
+
'main',
|
|
211
|
+
object({
|
|
212
|
+
value: string(),
|
|
202
213
|
}),
|
|
203
214
|
)
|
|
204
215
|
})
|
|
@@ -212,12 +223,13 @@ describe('TypedRefSchema', () => {
|
|
|
212
223
|
it('does not call getter until $type is accessed', () => {
|
|
213
224
|
let getterCalled = false
|
|
214
225
|
|
|
215
|
-
const schema =
|
|
226
|
+
const schema = typedRef(() => {
|
|
216
227
|
getterCalled = true
|
|
217
|
-
return
|
|
228
|
+
return typedObject(
|
|
218
229
|
'com.example.test',
|
|
219
|
-
|
|
220
|
-
|
|
230
|
+
'main',
|
|
231
|
+
object({
|
|
232
|
+
value: string(),
|
|
221
233
|
}),
|
|
222
234
|
)
|
|
223
235
|
})
|
|
@@ -230,55 +242,11 @@ describe('TypedRefSchema', () => {
|
|
|
230
242
|
expect(type).toBe('com.example.test')
|
|
231
243
|
})
|
|
232
244
|
|
|
233
|
-
it('caches the resolved schema', () => {
|
|
234
|
-
let callCount = 0
|
|
235
|
-
|
|
236
|
-
const schema = new TypedRefSchema(() => {
|
|
237
|
-
callCount++
|
|
238
|
-
return new TypedObjectSchema(
|
|
239
|
-
'com.example.test',
|
|
240
|
-
new ObjectSchema({
|
|
241
|
-
value: new StringSchema({}),
|
|
242
|
-
}),
|
|
243
|
-
)
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
schema.safeParse({ value: 'first' })
|
|
247
|
-
schema.safeParse({ value: 'second' })
|
|
248
|
-
schema.safeParse({ value: 'third' })
|
|
249
|
-
|
|
250
|
-
expect(callCount).toBe(1)
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
it('caches schema after $type access', () => {
|
|
254
|
-
let callCount = 0
|
|
255
|
-
|
|
256
|
-
const schema = new TypedRefSchema(() => {
|
|
257
|
-
callCount++
|
|
258
|
-
return new TypedObjectSchema(
|
|
259
|
-
'com.example.test',
|
|
260
|
-
new ObjectSchema({
|
|
261
|
-
value: new StringSchema({}),
|
|
262
|
-
}),
|
|
263
|
-
)
|
|
264
|
-
})
|
|
265
|
-
|
|
266
|
-
// Access $type first
|
|
267
|
-
schema.$type
|
|
268
|
-
expect(callCount).toBe(1)
|
|
269
|
-
|
|
270
|
-
// Then validate multiple times
|
|
271
|
-
schema.safeParse({ value: 'test1' })
|
|
272
|
-
schema.safeParse({ value: 'test2' })
|
|
273
|
-
|
|
274
|
-
expect(callCount).toBe(1)
|
|
275
|
-
})
|
|
276
|
-
|
|
277
245
|
it('throws error if getter is called recursively', () => {
|
|
278
246
|
// @ts-expect-error
|
|
279
|
-
const schema =
|
|
247
|
+
const schema = typedRef(() => {
|
|
280
248
|
// This would cause infinite recursion if not protected
|
|
281
|
-
return schema.
|
|
249
|
+
return schema.validator
|
|
282
250
|
})
|
|
283
251
|
|
|
284
252
|
expect(() => {
|
|
@@ -289,14 +257,15 @@ describe('TypedRefSchema', () => {
|
|
|
289
257
|
|
|
290
258
|
describe('with constrained schemas', () => {
|
|
291
259
|
it('validates typed object with string constraints', () => {
|
|
292
|
-
const
|
|
260
|
+
const typedObjectSchema = typedObject(
|
|
293
261
|
'com.example.post',
|
|
294
|
-
|
|
295
|
-
|
|
262
|
+
'main',
|
|
263
|
+
object({
|
|
264
|
+
text: string({ minLength: 1, maxLength: 300 }),
|
|
296
265
|
}),
|
|
297
266
|
)
|
|
298
267
|
|
|
299
|
-
const schema =
|
|
268
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
300
269
|
|
|
301
270
|
const result = schema.safeParse({
|
|
302
271
|
$type: 'com.example.post',
|
|
@@ -307,14 +276,15 @@ describe('TypedRefSchema', () => {
|
|
|
307
276
|
})
|
|
308
277
|
|
|
309
278
|
it('rejects typed object violating string constraints', () => {
|
|
310
|
-
const
|
|
279
|
+
const typedObjectSchema = typedObject(
|
|
311
280
|
'com.example.post',
|
|
312
|
-
|
|
313
|
-
|
|
281
|
+
'main',
|
|
282
|
+
object({
|
|
283
|
+
text: string({ minLength: 1, maxLength: 300 }),
|
|
314
284
|
}),
|
|
315
285
|
)
|
|
316
286
|
|
|
317
|
-
const schema =
|
|
287
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
318
288
|
|
|
319
289
|
const result = schema.safeParse({
|
|
320
290
|
$type: 'com.example.post',
|
|
@@ -325,14 +295,15 @@ describe('TypedRefSchema', () => {
|
|
|
325
295
|
})
|
|
326
296
|
|
|
327
297
|
it('validates typed object with integer constraints', () => {
|
|
328
|
-
const
|
|
298
|
+
const typedObjectSchema = typedObject(
|
|
329
299
|
'com.example.rating',
|
|
330
|
-
|
|
331
|
-
|
|
300
|
+
'main',
|
|
301
|
+
object({
|
|
302
|
+
score: integer({ minimum: 1, maximum: 5 }),
|
|
332
303
|
}),
|
|
333
304
|
)
|
|
334
305
|
|
|
335
|
-
const schema =
|
|
306
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
336
307
|
|
|
337
308
|
const result = schema.safeParse({
|
|
338
309
|
$type: 'com.example.rating',
|
|
@@ -343,14 +314,15 @@ describe('TypedRefSchema', () => {
|
|
|
343
314
|
})
|
|
344
315
|
|
|
345
316
|
it('rejects typed object violating integer constraints', () => {
|
|
346
|
-
const
|
|
317
|
+
const typedObjectSchema = typedObject(
|
|
347
318
|
'com.example.rating',
|
|
348
|
-
|
|
349
|
-
|
|
319
|
+
'main',
|
|
320
|
+
object({
|
|
321
|
+
score: integer({ minimum: 1, maximum: 5 }),
|
|
350
322
|
}),
|
|
351
323
|
)
|
|
352
324
|
|
|
353
|
-
const schema =
|
|
325
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
354
326
|
|
|
355
327
|
const result = schema.safeParse({
|
|
356
328
|
$type: 'com.example.rating',
|
|
@@ -363,14 +335,15 @@ describe('TypedRefSchema', () => {
|
|
|
363
335
|
|
|
364
336
|
describe('multiple validations', () => {
|
|
365
337
|
it('validates multiple inputs correctly', () => {
|
|
366
|
-
const
|
|
338
|
+
const typedObjectSchema = typedObject(
|
|
367
339
|
'com.example.user',
|
|
368
|
-
|
|
369
|
-
|
|
340
|
+
'main',
|
|
341
|
+
object({
|
|
342
|
+
name: string({ minLength: 2 }),
|
|
370
343
|
}),
|
|
371
344
|
)
|
|
372
345
|
|
|
373
|
-
const schema =
|
|
346
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
374
347
|
|
|
375
348
|
const result1 = schema.safeParse({
|
|
376
349
|
$type: 'com.example.user',
|
|
@@ -392,15 +365,16 @@ describe('TypedRefSchema', () => {
|
|
|
392
365
|
})
|
|
393
366
|
|
|
394
367
|
it('handles different types of validation failures', () => {
|
|
395
|
-
const
|
|
368
|
+
const typedObjectSchema = typedObject(
|
|
396
369
|
'com.example.user',
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
370
|
+
'main',
|
|
371
|
+
object({
|
|
372
|
+
name: string({ minLength: 2 }),
|
|
373
|
+
age: integer({ minimum: 0, maximum: 150 }),
|
|
400
374
|
}),
|
|
401
375
|
)
|
|
402
376
|
|
|
403
|
-
const schema =
|
|
377
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
404
378
|
|
|
405
379
|
const result1 = schema.safeParse({
|
|
406
380
|
$type: 'com.example.user',
|
|
@@ -431,14 +405,15 @@ describe('TypedRefSchema', () => {
|
|
|
431
405
|
})
|
|
432
406
|
|
|
433
407
|
it('validates same input multiple times consistently', () => {
|
|
434
|
-
const
|
|
408
|
+
const typedObjectSchema = typedObject(
|
|
435
409
|
'com.example.post',
|
|
436
|
-
|
|
437
|
-
|
|
410
|
+
'main',
|
|
411
|
+
object({
|
|
412
|
+
text: string(),
|
|
438
413
|
}),
|
|
439
414
|
)
|
|
440
415
|
|
|
441
|
-
const schema =
|
|
416
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
442
417
|
|
|
443
418
|
const input = { $type: 'com.example.post', text: 'Hello world' }
|
|
444
419
|
|
|
@@ -454,12 +429,13 @@ describe('TypedRefSchema', () => {
|
|
|
454
429
|
|
|
455
430
|
describe('edge cases', () => {
|
|
456
431
|
it('handles empty object validation', () => {
|
|
457
|
-
const
|
|
432
|
+
const typedObjectSchema = typedObject(
|
|
458
433
|
'com.example.empty',
|
|
459
|
-
|
|
434
|
+
'main',
|
|
435
|
+
object({}),
|
|
460
436
|
)
|
|
461
437
|
|
|
462
|
-
const schema =
|
|
438
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
463
439
|
|
|
464
440
|
const result = schema.safeParse({ $type: 'com.example.empty' })
|
|
465
441
|
expect(result.success).toBe(true)
|
|
@@ -469,28 +445,30 @@ describe('TypedRefSchema', () => {
|
|
|
469
445
|
})
|
|
470
446
|
|
|
471
447
|
it('rejects arrays', () => {
|
|
472
|
-
const
|
|
448
|
+
const typedObjectSchema = typedObject(
|
|
473
449
|
'com.example.test',
|
|
474
|
-
|
|
475
|
-
|
|
450
|
+
'main',
|
|
451
|
+
object({
|
|
452
|
+
value: string(),
|
|
476
453
|
}),
|
|
477
454
|
)
|
|
478
455
|
|
|
479
|
-
const schema =
|
|
456
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
480
457
|
|
|
481
458
|
const result = schema.safeParse([{ value: 'test' }])
|
|
482
459
|
expect(result.success).toBe(false)
|
|
483
460
|
})
|
|
484
461
|
|
|
485
462
|
it('rejects primitive values', () => {
|
|
486
|
-
const
|
|
463
|
+
const typedObjectSchema = typedObject(
|
|
487
464
|
'com.example.test',
|
|
488
|
-
|
|
489
|
-
|
|
465
|
+
'main',
|
|
466
|
+
object({
|
|
467
|
+
value: string(),
|
|
490
468
|
}),
|
|
491
469
|
)
|
|
492
470
|
|
|
493
|
-
const schema =
|
|
471
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
494
472
|
|
|
495
473
|
const result1 = schema.safeParse('string')
|
|
496
474
|
expect(result1.success).toBe(false)
|
|
@@ -503,14 +481,15 @@ describe('TypedRefSchema', () => {
|
|
|
503
481
|
})
|
|
504
482
|
|
|
505
483
|
it('handles objects with extra properties', () => {
|
|
506
|
-
const
|
|
484
|
+
const typedObjectSchema = typedObject(
|
|
507
485
|
'com.example.user',
|
|
508
|
-
|
|
509
|
-
|
|
486
|
+
'main',
|
|
487
|
+
object({
|
|
488
|
+
name: string(),
|
|
510
489
|
}),
|
|
511
490
|
)
|
|
512
491
|
|
|
513
|
-
const schema =
|
|
492
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
514
493
|
|
|
515
494
|
const result = schema.safeParse({
|
|
516
495
|
$type: 'com.example.user',
|
|
@@ -523,14 +502,15 @@ describe('TypedRefSchema', () => {
|
|
|
523
502
|
})
|
|
524
503
|
|
|
525
504
|
it('validates with zero values', () => {
|
|
526
|
-
const
|
|
505
|
+
const typedObjectSchema = typedObject(
|
|
527
506
|
'com.example.counter',
|
|
528
|
-
|
|
529
|
-
|
|
507
|
+
'main',
|
|
508
|
+
object({
|
|
509
|
+
count: integer(),
|
|
530
510
|
}),
|
|
531
511
|
)
|
|
532
512
|
|
|
533
|
-
const schema =
|
|
513
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
534
514
|
|
|
535
515
|
const result = schema.safeParse({
|
|
536
516
|
$type: 'com.example.counter',
|
|
@@ -540,14 +520,15 @@ describe('TypedRefSchema', () => {
|
|
|
540
520
|
})
|
|
541
521
|
|
|
542
522
|
it('validates with empty strings', () => {
|
|
543
|
-
const
|
|
523
|
+
const typedObjectSchema = typedObject(
|
|
544
524
|
'com.example.text',
|
|
545
|
-
|
|
546
|
-
|
|
525
|
+
'main',
|
|
526
|
+
object({
|
|
527
|
+
content: string(),
|
|
547
528
|
}),
|
|
548
529
|
)
|
|
549
530
|
|
|
550
|
-
const schema =
|
|
531
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
551
532
|
|
|
552
533
|
const result = schema.safeParse({
|
|
553
534
|
$type: 'com.example.text',
|
|
@@ -557,14 +538,15 @@ describe('TypedRefSchema', () => {
|
|
|
557
538
|
})
|
|
558
539
|
|
|
559
540
|
it('rejects NaN in integer fields', () => {
|
|
560
|
-
const
|
|
541
|
+
const typedObjectSchema = typedObject(
|
|
561
542
|
'com.example.number',
|
|
562
|
-
|
|
563
|
-
|
|
543
|
+
'main',
|
|
544
|
+
object({
|
|
545
|
+
value: integer(),
|
|
564
546
|
}),
|
|
565
547
|
)
|
|
566
548
|
|
|
567
|
-
const schema =
|
|
549
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
568
550
|
|
|
569
551
|
const result = schema.safeParse({
|
|
570
552
|
$type: 'com.example.number',
|
|
@@ -574,14 +556,15 @@ describe('TypedRefSchema', () => {
|
|
|
574
556
|
})
|
|
575
557
|
|
|
576
558
|
it('rejects Infinity in integer fields', () => {
|
|
577
|
-
const
|
|
559
|
+
const typedObjectSchema = typedObject(
|
|
578
560
|
'com.example.number',
|
|
579
|
-
|
|
580
|
-
|
|
561
|
+
'main',
|
|
562
|
+
object({
|
|
563
|
+
value: integer(),
|
|
581
564
|
}),
|
|
582
565
|
)
|
|
583
566
|
|
|
584
|
-
const schema =
|
|
567
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
585
568
|
|
|
586
569
|
const result = schema.safeParse({
|
|
587
570
|
$type: 'com.example.number',
|
|
@@ -593,15 +576,16 @@ describe('TypedRefSchema', () => {
|
|
|
593
576
|
|
|
594
577
|
describe('nested references', () => {
|
|
595
578
|
it('validates through nested TypedRefSchema', () => {
|
|
596
|
-
const
|
|
579
|
+
const typedObjectSchema = typedObject(
|
|
597
580
|
'com.example.user',
|
|
598
|
-
|
|
599
|
-
|
|
581
|
+
'main',
|
|
582
|
+
object({
|
|
583
|
+
name: string({ minLength: 2 }),
|
|
600
584
|
}),
|
|
601
585
|
)
|
|
602
586
|
|
|
603
|
-
const innerRef =
|
|
604
|
-
const outerRef =
|
|
587
|
+
const innerRef = typedRef(() => typedObjectSchema)
|
|
588
|
+
const outerRef = typedRef(() => innerRef.validator)
|
|
605
589
|
|
|
606
590
|
const result = outerRef.safeParse({
|
|
607
591
|
$type: 'com.example.user',
|
|
@@ -614,22 +598,24 @@ describe('TypedRefSchema', () => {
|
|
|
614
598
|
})
|
|
615
599
|
|
|
616
600
|
it('validates with objects containing TypedRef fields', () => {
|
|
617
|
-
const innerTyped =
|
|
601
|
+
const innerTyped = typedObject(
|
|
618
602
|
'com.example.profile',
|
|
619
|
-
|
|
620
|
-
|
|
603
|
+
'main',
|
|
604
|
+
object({
|
|
605
|
+
bio: string(),
|
|
621
606
|
}),
|
|
622
607
|
)
|
|
623
608
|
|
|
624
|
-
const outerTyped =
|
|
609
|
+
const outerTyped = typedObject(
|
|
625
610
|
'com.example.user',
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
611
|
+
'main',
|
|
612
|
+
object({
|
|
613
|
+
name: string(),
|
|
614
|
+
profile: typedRef(() => innerTyped),
|
|
629
615
|
}),
|
|
630
616
|
)
|
|
631
617
|
|
|
632
|
-
const schema =
|
|
618
|
+
const schema = typedRef(() => outerTyped)
|
|
633
619
|
|
|
634
620
|
const result = schema.safeParse({
|
|
635
621
|
$type: 'com.example.user',
|
|
@@ -648,22 +634,24 @@ describe('TypedRefSchema', () => {
|
|
|
648
634
|
})
|
|
649
635
|
|
|
650
636
|
it('rejects nested objects with wrong $type', () => {
|
|
651
|
-
const innerTyped =
|
|
637
|
+
const innerTyped = typedObject(
|
|
652
638
|
'com.example.profile',
|
|
653
|
-
|
|
654
|
-
|
|
639
|
+
'main',
|
|
640
|
+
object({
|
|
641
|
+
bio: string(),
|
|
655
642
|
}),
|
|
656
643
|
)
|
|
657
644
|
|
|
658
|
-
const outerTyped =
|
|
645
|
+
const outerTyped = typedObject(
|
|
659
646
|
'com.example.user',
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
647
|
+
'main',
|
|
648
|
+
object({
|
|
649
|
+
name: string(),
|
|
650
|
+
profile: typedRef(() => innerTyped),
|
|
663
651
|
}),
|
|
664
652
|
)
|
|
665
653
|
|
|
666
|
-
const schema =
|
|
654
|
+
const schema = typedRef(() => outerTyped)
|
|
667
655
|
|
|
668
656
|
const result = schema.safeParse({
|
|
669
657
|
$type: 'com.example.user',
|
|
@@ -680,73 +668,55 @@ describe('TypedRefSchema', () => {
|
|
|
680
668
|
|
|
681
669
|
describe('schema property access', () => {
|
|
682
670
|
it('allows direct access to resolved schema', () => {
|
|
683
|
-
const
|
|
671
|
+
const typedObjectSchema = typedObject(
|
|
684
672
|
'com.example.test',
|
|
685
|
-
|
|
686
|
-
|
|
673
|
+
'main',
|
|
674
|
+
object({
|
|
675
|
+
value: string(),
|
|
687
676
|
}),
|
|
688
677
|
)
|
|
689
678
|
|
|
690
|
-
const refSchema =
|
|
679
|
+
const refSchema = typedRef(() => typedObjectSchema)
|
|
691
680
|
|
|
692
|
-
const resolved = refSchema.
|
|
693
|
-
expect(resolved).toBe(
|
|
681
|
+
const resolved = refSchema.validator
|
|
682
|
+
expect(resolved).toBe(typedObjectSchema)
|
|
694
683
|
expect(resolved.$type).toBe('com.example.test')
|
|
695
684
|
})
|
|
696
685
|
|
|
697
686
|
it('returns same instance on multiple schema property accesses', () => {
|
|
698
|
-
const
|
|
687
|
+
const typedObjectSchema = typedObject(
|
|
699
688
|
'com.example.test',
|
|
700
|
-
|
|
701
|
-
|
|
689
|
+
'main',
|
|
690
|
+
object({
|
|
691
|
+
value: string(),
|
|
702
692
|
}),
|
|
703
693
|
)
|
|
704
694
|
|
|
705
|
-
const refSchema =
|
|
695
|
+
const refSchema = typedRef(() => typedObjectSchema)
|
|
706
696
|
|
|
707
|
-
const first = refSchema.
|
|
708
|
-
const second = refSchema.
|
|
709
|
-
const third = refSchema.
|
|
697
|
+
const first = refSchema.validator
|
|
698
|
+
const second = refSchema.validator
|
|
699
|
+
const third = refSchema.validator
|
|
710
700
|
|
|
711
701
|
expect(first).toBe(second)
|
|
712
702
|
expect(second).toBe(third)
|
|
713
703
|
expect(first.$type).toBe('com.example.test')
|
|
714
704
|
})
|
|
715
|
-
|
|
716
|
-
it('resolves schema before validation', () => {
|
|
717
|
-
let resolved = false
|
|
718
|
-
|
|
719
|
-
const refSchema = new TypedRefSchema(() => {
|
|
720
|
-
resolved = true
|
|
721
|
-
return new TypedObjectSchema(
|
|
722
|
-
'com.example.test',
|
|
723
|
-
new ObjectSchema({
|
|
724
|
-
value: new StringSchema({}),
|
|
725
|
-
}),
|
|
726
|
-
)
|
|
727
|
-
})
|
|
728
|
-
|
|
729
|
-
expect(resolved).toBe(false)
|
|
730
|
-
|
|
731
|
-
const schemaValue = refSchema.schema
|
|
732
|
-
expect(resolved).toBe(true)
|
|
733
|
-
expect(schemaValue).toBeDefined()
|
|
734
|
-
expect(schemaValue.$type).toBe('com.example.test')
|
|
735
|
-
})
|
|
736
705
|
})
|
|
737
706
|
|
|
738
707
|
describe('complex object structures', () => {
|
|
739
708
|
it('validates complex nested structure', () => {
|
|
740
|
-
const
|
|
709
|
+
const typedObjectSchema = typedObject(
|
|
741
710
|
'com.example.post',
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
711
|
+
'main',
|
|
712
|
+
object({
|
|
713
|
+
text: string({ minLength: 1, maxLength: 300 }),
|
|
714
|
+
createdAt: string({ format: 'datetime' }),
|
|
715
|
+
likeCount: integer({ minimum: 0 }),
|
|
746
716
|
}),
|
|
747
717
|
)
|
|
748
718
|
|
|
749
|
-
const schema =
|
|
719
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
750
720
|
|
|
751
721
|
const result = schema.safeParse({
|
|
752
722
|
$type: 'com.example.post',
|
|
@@ -764,16 +734,17 @@ describe('TypedRefSchema', () => {
|
|
|
764
734
|
})
|
|
765
735
|
|
|
766
736
|
it('validates structure with multiple property types', () => {
|
|
767
|
-
const
|
|
737
|
+
const typedObjectSchema = typedObject(
|
|
768
738
|
'com.example.record',
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
739
|
+
'main',
|
|
740
|
+
object({
|
|
741
|
+
id: string({ format: 'nsid' }),
|
|
742
|
+
count: integer({ minimum: 0 }),
|
|
743
|
+
flag: string(),
|
|
773
744
|
}),
|
|
774
745
|
)
|
|
775
746
|
|
|
776
|
-
const schema =
|
|
747
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
777
748
|
|
|
778
749
|
const result = schema.safeParse({
|
|
779
750
|
$type: 'com.example.record',
|
|
@@ -786,15 +757,16 @@ describe('TypedRefSchema', () => {
|
|
|
786
757
|
})
|
|
787
758
|
|
|
788
759
|
it('rejects structure with any invalid property', () => {
|
|
789
|
-
const
|
|
760
|
+
const typedObjectSchema = typedObject(
|
|
790
761
|
'com.example.record',
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
762
|
+
'main',
|
|
763
|
+
object({
|
|
764
|
+
name: string({ minLength: 1 }),
|
|
765
|
+
count: integer({ minimum: 0 }),
|
|
794
766
|
}),
|
|
795
767
|
)
|
|
796
768
|
|
|
797
|
-
const schema =
|
|
769
|
+
const schema = typedRef(() => typedObjectSchema)
|
|
798
770
|
|
|
799
771
|
// Valid name, invalid count
|
|
800
772
|
const result1 = schema.safeParse({
|