@atproto/lex-schema 0.0.2 → 0.0.3

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 (289) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/dist/core/$type.d.ts +6 -3
  3. package/dist/core/$type.d.ts.map +1 -1
  4. package/dist/core/$type.js +1 -0
  5. package/dist/core/$type.js.map +1 -1
  6. package/dist/core/record-key.d.ts +3 -3
  7. package/dist/core/record-key.d.ts.map +1 -1
  8. package/dist/core/record-key.js +12 -6
  9. package/dist/core/record-key.js.map +1 -1
  10. package/dist/core/result.d.ts.map +1 -1
  11. package/dist/core/result.js +6 -0
  12. package/dist/core/result.js.map +1 -1
  13. package/dist/core/string-format.d.ts +30 -27
  14. package/dist/core/string-format.d.ts.map +1 -1
  15. package/dist/core/string-format.js +56 -42
  16. package/dist/core/string-format.js.map +1 -1
  17. package/dist/core/types.d.ts +9 -1
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/core/types.js.map +1 -1
  20. package/dist/external.d.ts +31 -28
  21. package/dist/external.d.ts.map +1 -1
  22. package/dist/external.js +33 -17
  23. package/dist/external.js.map +1 -1
  24. package/dist/schema/_parameters.d.ts +2 -2
  25. package/dist/schema/_parameters.d.ts.map +1 -1
  26. package/dist/schema/array.d.ts +5 -6
  27. package/dist/schema/array.d.ts.map +1 -1
  28. package/dist/schema/array.js +5 -6
  29. package/dist/schema/array.js.map +1 -1
  30. package/dist/schema/blob.d.ts +2 -3
  31. package/dist/schema/blob.d.ts.map +1 -1
  32. package/dist/schema/blob.js +1 -2
  33. package/dist/schema/blob.js.map +1 -1
  34. package/dist/schema/boolean.d.ts +4 -5
  35. package/dist/schema/boolean.d.ts.map +1 -1
  36. package/dist/schema/boolean.js +2 -3
  37. package/dist/schema/boolean.js.map +1 -1
  38. package/dist/schema/bytes.d.ts +3 -4
  39. package/dist/schema/bytes.d.ts.map +1 -1
  40. package/dist/schema/bytes.js +2 -3
  41. package/dist/schema/bytes.js.map +1 -1
  42. package/dist/schema/cid.d.ts +13 -6
  43. package/dist/schema/cid.d.ts.map +1 -1
  44. package/dist/schema/cid.js +2 -4
  45. package/dist/schema/cid.js.map +1 -1
  46. package/dist/schema/custom.d.ts +3 -4
  47. package/dist/schema/custom.d.ts.map +1 -1
  48. package/dist/schema/custom.js +4 -3
  49. package/dist/schema/custom.js.map +1 -1
  50. package/dist/schema/dict.d.ts +3 -3
  51. package/dist/schema/dict.d.ts.map +1 -1
  52. package/dist/schema/dict.js +1 -1
  53. package/dist/schema/dict.js.map +1 -1
  54. package/dist/schema/discriminated-union.d.ts +15 -24
  55. package/dist/schema/discriminated-union.d.ts.map +1 -1
  56. package/dist/schema/discriminated-union.js +40 -64
  57. package/dist/schema/discriminated-union.js.map +1 -1
  58. package/dist/schema/enum.d.ts +8 -4
  59. package/dist/schema/enum.d.ts.map +1 -1
  60. package/dist/schema/enum.js +5 -3
  61. package/dist/schema/enum.js.map +1 -1
  62. package/dist/schema/integer.d.ts +3 -4
  63. package/dist/schema/integer.d.ts.map +1 -1
  64. package/dist/schema/integer.js +3 -4
  65. package/dist/schema/integer.js.map +1 -1
  66. package/dist/schema/intersection.d.ts +22 -14
  67. package/dist/schema/intersection.d.ts.map +1 -1
  68. package/dist/schema/intersection.js +12 -22
  69. package/dist/schema/intersection.js.map +1 -1
  70. package/dist/schema/literal.d.ts +7 -3
  71. package/dist/schema/literal.d.ts.map +1 -1
  72. package/dist/schema/literal.js +5 -3
  73. package/dist/schema/literal.js.map +1 -1
  74. package/dist/schema/never.d.ts +2 -2
  75. package/dist/schema/never.d.ts.map +1 -1
  76. package/dist/schema/never.js +1 -1
  77. package/dist/schema/never.js.map +1 -1
  78. package/dist/schema/null.d.ts +2 -3
  79. package/dist/schema/null.d.ts.map +1 -1
  80. package/dist/schema/null.js +1 -2
  81. package/dist/schema/null.js.map +1 -1
  82. package/dist/schema/nullable.d.ts +7 -0
  83. package/dist/schema/nullable.d.ts.map +1 -0
  84. package/dist/schema/nullable.js +19 -0
  85. package/dist/schema/nullable.js.map +1 -0
  86. package/dist/schema/object.d.ts +10 -44
  87. package/dist/schema/object.d.ts.map +1 -1
  88. package/dist/schema/object.js +10 -46
  89. package/dist/schema/object.js.map +1 -1
  90. package/dist/schema/optional.d.ts +7 -0
  91. package/dist/schema/optional.d.ts.map +1 -0
  92. package/dist/schema/optional.js +25 -0
  93. package/dist/schema/optional.js.map +1 -0
  94. package/dist/schema/params.d.ts +14 -19
  95. package/dist/schema/params.d.ts.map +1 -1
  96. package/dist/schema/params.js +10 -24
  97. package/dist/schema/params.js.map +1 -1
  98. package/dist/schema/payload.d.ts +4 -4
  99. package/dist/schema/payload.d.ts.map +1 -1
  100. package/dist/schema/payload.js.map +1 -1
  101. package/dist/schema/permission-set.d.ts +6 -6
  102. package/dist/schema/permission-set.d.ts.map +1 -1
  103. package/dist/schema/permission-set.js +1 -2
  104. package/dist/schema/permission-set.js.map +1 -1
  105. package/dist/schema/permission.d.ts +0 -1
  106. package/dist/schema/permission.d.ts.map +1 -1
  107. package/dist/schema/permission.js +0 -1
  108. package/dist/schema/permission.js.map +1 -1
  109. package/dist/schema/procedure.d.ts +8 -9
  110. package/dist/schema/procedure.d.ts.map +1 -1
  111. package/dist/schema/procedure.js +0 -1
  112. package/dist/schema/procedure.js.map +1 -1
  113. package/dist/schema/query.d.ts +7 -8
  114. package/dist/schema/query.d.ts.map +1 -1
  115. package/dist/schema/query.js +0 -1
  116. package/dist/schema/query.js.map +1 -1
  117. package/dist/schema/record.d.ts +34 -28
  118. package/dist/schema/record.d.ts.map +1 -1
  119. package/dist/schema/record.js +1 -2
  120. package/dist/schema/record.js.map +1 -1
  121. package/dist/schema/ref.d.ts +2 -3
  122. package/dist/schema/ref.d.ts.map +1 -1
  123. package/dist/schema/ref.js +1 -2
  124. package/dist/schema/ref.js.map +1 -1
  125. package/dist/schema/refine.d.ts +18 -0
  126. package/dist/schema/refine.d.ts.map +1 -0
  127. package/dist/schema/refine.js +33 -0
  128. package/dist/schema/refine.js.map +1 -0
  129. package/dist/schema/regexp.d.ts +7 -0
  130. package/dist/schema/regexp.d.ts.map +1 -0
  131. package/dist/schema/regexp.js +22 -0
  132. package/dist/schema/regexp.js.map +1 -0
  133. package/dist/schema/string.d.ts +4 -8
  134. package/dist/schema/string.d.ts.map +1 -1
  135. package/dist/schema/string.js +6 -3
  136. package/dist/schema/string.js.map +1 -1
  137. package/dist/schema/subscription.d.ts +7 -6
  138. package/dist/schema/subscription.d.ts.map +1 -1
  139. package/dist/schema/subscription.js.map +1 -1
  140. package/dist/schema/token.d.ts +2 -3
  141. package/dist/schema/token.d.ts.map +1 -1
  142. package/dist/schema/token.js +1 -2
  143. package/dist/schema/token.js.map +1 -1
  144. package/dist/schema/typed-object.d.ts +29 -27
  145. package/dist/schema/typed-object.d.ts.map +1 -1
  146. package/dist/schema/typed-object.js +1 -2
  147. package/dist/schema/typed-object.js.map +1 -1
  148. package/dist/schema/typed-ref.d.ts +2 -2
  149. package/dist/schema/typed-ref.d.ts.map +1 -1
  150. package/dist/schema/typed-ref.js +1 -1
  151. package/dist/schema/typed-ref.js.map +1 -1
  152. package/dist/schema/typed-union.d.ts +3 -4
  153. package/dist/schema/typed-union.d.ts.map +1 -1
  154. package/dist/schema/typed-union.js +3 -10
  155. package/dist/schema/typed-union.js.map +1 -1
  156. package/dist/schema/union.d.ts +2 -2
  157. package/dist/schema/union.d.ts.map +1 -1
  158. package/dist/schema/union.js +1 -1
  159. package/dist/schema/union.js.map +1 -1
  160. package/dist/schema/unknown-object.d.ts +2 -3
  161. package/dist/schema/unknown-object.d.ts.map +1 -1
  162. package/dist/schema/unknown-object.js +1 -2
  163. package/dist/schema/unknown-object.js.map +1 -1
  164. package/dist/schema/unknown.d.ts +2 -2
  165. package/dist/schema/unknown.d.ts.map +1 -1
  166. package/dist/schema/unknown.js +1 -1
  167. package/dist/schema/unknown.js.map +1 -1
  168. package/dist/schema.d.ts +4 -0
  169. package/dist/schema.d.ts.map +1 -1
  170. package/dist/schema.js +6 -1
  171. package/dist/schema.js.map +1 -1
  172. package/dist/util/array-agg.d.ts.map +1 -1
  173. package/dist/util/array-agg.js +1 -0
  174. package/dist/util/array-agg.js.map +1 -1
  175. package/dist/util/lazy-property.d.ts +2 -0
  176. package/dist/util/lazy-property.d.ts.map +1 -0
  177. package/dist/util/lazy-property.js +14 -0
  178. package/dist/util/lazy-property.js.map +1 -0
  179. package/dist/validation/schema.d.ts +24 -0
  180. package/dist/validation/schema.d.ts.map +1 -0
  181. package/dist/validation/schema.js +57 -0
  182. package/dist/validation/schema.js.map +1 -0
  183. package/dist/validation/validation-error.d.ts +3 -3
  184. package/dist/validation/validation-error.d.ts.map +1 -1
  185. package/dist/validation/validation-error.js +32 -4
  186. package/dist/validation/validation-error.js.map +1 -1
  187. package/dist/validation/validation-issue.d.ts +32 -24
  188. package/dist/validation/validation-issue.d.ts.map +1 -1
  189. package/dist/validation/validation-issue.js +136 -92
  190. package/dist/validation/validation-issue.js.map +1 -1
  191. package/dist/validation/validator.d.ts +20 -50
  192. package/dist/validation/validator.d.ts.map +1 -1
  193. package/dist/validation/validator.js +40 -134
  194. package/dist/validation/validator.js.map +1 -1
  195. package/dist/validation.d.ts +1 -0
  196. package/dist/validation.d.ts.map +1 -1
  197. package/dist/validation.js +1 -0
  198. package/dist/validation.js.map +1 -1
  199. package/package.json +8 -4
  200. package/src/core/$type.ts +7 -4
  201. package/src/core/record-key.ts +12 -5
  202. package/src/core/result.ts +6 -0
  203. package/src/core/string-format.ts +97 -61
  204. package/src/core/types.ts +12 -6
  205. package/src/external.ts +92 -70
  206. package/src/schema/_parameters.test.ts +416 -0
  207. package/src/schema/array.test.ts +237 -0
  208. package/src/schema/array.ts +17 -11
  209. package/src/schema/blob.test.ts +506 -0
  210. package/src/schema/blob.ts +3 -5
  211. package/src/schema/boolean.test.ts +116 -0
  212. package/src/schema/boolean.ts +5 -7
  213. package/src/schema/bytes.test.ts +226 -0
  214. package/src/schema/bytes.ts +4 -6
  215. package/src/schema/cid.test.ts +155 -0
  216. package/src/schema/cid.ts +14 -8
  217. package/src/schema/custom.test.ts +413 -0
  218. package/src/schema/custom.ts +10 -8
  219. package/src/schema/dict.test.ts +198 -0
  220. package/src/schema/dict.ts +6 -8
  221. package/src/schema/discriminated-union.test.ts +675 -0
  222. package/src/schema/discriminated-union.ts +68 -95
  223. package/src/schema/enum.test.ts +396 -0
  224. package/src/schema/enum.ts +12 -5
  225. package/src/schema/integer.test.ts +312 -0
  226. package/src/schema/integer.ts +5 -7
  227. package/src/schema/intersection.test.ts +32 -0
  228. package/src/schema/intersection.ts +37 -40
  229. package/src/schema/literal.test.ts +531 -0
  230. package/src/schema/literal.ts +12 -5
  231. package/src/schema/never.test.ts +174 -0
  232. package/src/schema/never.ts +3 -10
  233. package/src/schema/null.test.ts +79 -0
  234. package/src/schema/null.ts +3 -5
  235. package/src/schema/nullable.test.ts +480 -0
  236. package/src/schema/nullable.ts +23 -0
  237. package/src/schema/object.test.ts +47 -115
  238. package/src/schema/object.ts +19 -123
  239. package/src/schema/optional.test.ts +485 -0
  240. package/src/schema/optional.ts +31 -0
  241. package/src/schema/params.test.ts +582 -0
  242. package/src/schema/params.ts +37 -55
  243. package/src/schema/payload.test.ts +345 -0
  244. package/src/schema/payload.ts +5 -5
  245. package/src/schema/permission-set.test.ts +679 -0
  246. package/src/schema/permission-set.ts +6 -8
  247. package/src/schema/permission.test.ts +536 -0
  248. package/src/schema/permission.ts +0 -2
  249. package/src/schema/procedure.test.ts +443 -0
  250. package/src/schema/procedure.ts +11 -13
  251. package/src/schema/query.test.ts +408 -0
  252. package/src/schema/query.ts +9 -11
  253. package/src/schema/record.test.ts +694 -0
  254. package/src/schema/record.ts +38 -36
  255. package/src/schema/ref.test.ts +365 -0
  256. package/src/schema/ref.ts +8 -5
  257. package/src/schema/refine.test.ts +578 -0
  258. package/src/schema/refine.ts +85 -0
  259. package/src/schema/regexp.test.ts +580 -0
  260. package/src/schema/regexp.ts +22 -0
  261. package/src/schema/string.test.ts +612 -0
  262. package/src/schema/string.ts +11 -17
  263. package/src/schema/subscription.test.ts +689 -0
  264. package/src/schema/subscription.ts +13 -8
  265. package/src/schema/token.test.ts +428 -0
  266. package/src/schema/token.ts +3 -5
  267. package/src/schema/typed-object.test.ts +612 -0
  268. package/src/schema/typed-object.ts +23 -20
  269. package/src/schema/typed-ref.test.ts +823 -0
  270. package/src/schema/typed-ref.ts +10 -5
  271. package/src/schema/typed-union.test.ts +378 -0
  272. package/src/schema/typed-union.ts +6 -15
  273. package/src/schema/union.test.ts +200 -0
  274. package/src/schema/union.ts +5 -4
  275. package/src/schema/unknown-object.test.ts +592 -0
  276. package/src/schema/unknown-object.ts +3 -5
  277. package/src/schema/unknown.test.ts +312 -0
  278. package/src/schema/unknown.ts +3 -3
  279. package/src/schema.ts +7 -1
  280. package/src/util/array-agg.ts +1 -0
  281. package/src/util/lazy-property.ts +14 -0
  282. package/src/validation/schema.ts +92 -0
  283. package/src/validation/validation-error.ts +60 -9
  284. package/src/validation/validation-issue.ts +141 -144
  285. package/src/validation/validator.ts +67 -206
  286. package/src/validation.ts +1 -0
  287. package/tsconfig.build.json +12 -0
  288. package/tsconfig.json +7 -0
  289. package/tsconfig.tests.json +9 -0
@@ -0,0 +1,174 @@
1
+ import { NeverSchema } from './never.js'
2
+
3
+ describe('NeverSchema', () => {
4
+ describe('basic validation', () => {
5
+ const schema = new NeverSchema()
6
+
7
+ it('rejects strings', () => {
8
+ const result = schema.safeParse('string')
9
+ expect(result.success).toBe(false)
10
+ })
11
+
12
+ it('rejects numbers', () => {
13
+ const result = schema.safeParse(42)
14
+ expect(result.success).toBe(false)
15
+ })
16
+
17
+ it('rejects booleans', () => {
18
+ const result = schema.safeParse(true)
19
+ expect(result.success).toBe(false)
20
+ })
21
+
22
+ it('rejects null', () => {
23
+ const result = schema.safeParse(null)
24
+ expect(result.success).toBe(false)
25
+ })
26
+
27
+ it('rejects undefined', () => {
28
+ const result = schema.safeParse(undefined)
29
+ expect(result.success).toBe(false)
30
+ })
31
+
32
+ it('rejects objects', () => {
33
+ const result = schema.safeParse({})
34
+ expect(result.success).toBe(false)
35
+ })
36
+
37
+ it('rejects arrays', () => {
38
+ const result = schema.safeParse([])
39
+ expect(result.success).toBe(false)
40
+ })
41
+
42
+ it('rejects empty strings', () => {
43
+ const result = schema.safeParse('')
44
+ expect(result.success).toBe(false)
45
+ })
46
+
47
+ it('rejects zero', () => {
48
+ const result = schema.safeParse(0)
49
+ expect(result.success).toBe(false)
50
+ })
51
+
52
+ it('rejects false', () => {
53
+ const result = schema.safeParse(false)
54
+ expect(result.success).toBe(false)
55
+ })
56
+ })
57
+
58
+ describe('edge cases', () => {
59
+ const schema = new NeverSchema()
60
+
61
+ it('rejects BigInt', () => {
62
+ const result = schema.safeParse(BigInt(123))
63
+ expect(result.success).toBe(false)
64
+ })
65
+
66
+ it('rejects Symbol', () => {
67
+ const result = schema.safeParse(Symbol('test'))
68
+ expect(result.success).toBe(false)
69
+ })
70
+
71
+ it('rejects functions', () => {
72
+ const result = schema.safeParse(() => {})
73
+ expect(result.success).toBe(false)
74
+ })
75
+
76
+ it('rejects Date objects', () => {
77
+ const result = schema.safeParse(new Date())
78
+ expect(result.success).toBe(false)
79
+ })
80
+
81
+ it('rejects RegExp objects', () => {
82
+ const result = schema.safeParse(/test/)
83
+ expect(result.success).toBe(false)
84
+ })
85
+
86
+ it('rejects nested objects', () => {
87
+ const result = schema.safeParse({ nested: { value: 'test' } })
88
+ expect(result.success).toBe(false)
89
+ })
90
+
91
+ it('rejects nested arrays', () => {
92
+ const result = schema.safeParse([
93
+ [1, 2],
94
+ [3, 4],
95
+ ])
96
+ expect(result.success).toBe(false)
97
+ })
98
+
99
+ it('rejects Map objects', () => {
100
+ const result = schema.safeParse(new Map())
101
+ expect(result.success).toBe(false)
102
+ })
103
+
104
+ it('rejects Set objects', () => {
105
+ const result = schema.safeParse(new Set())
106
+ expect(result.success).toBe(false)
107
+ })
108
+
109
+ it('rejects Error objects', () => {
110
+ const result = schema.safeParse(new Error('test'))
111
+ expect(result.success).toBe(false)
112
+ })
113
+ })
114
+
115
+ describe('complex data types', () => {
116
+ const schema = new NeverSchema()
117
+
118
+ it('rejects class instances', () => {
119
+ class TestClass {
120
+ value = 'test'
121
+ }
122
+ const result = schema.safeParse(new TestClass())
123
+ expect(result.success).toBe(false)
124
+ })
125
+
126
+ it('rejects arrays with values', () => {
127
+ const result = schema.safeParse([1, 2, 3, 'four', true])
128
+ expect(result.success).toBe(false)
129
+ })
130
+
131
+ it('rejects objects with properties', () => {
132
+ const result = schema.safeParse({
133
+ name: 'test',
134
+ age: 30,
135
+ active: true,
136
+ })
137
+ expect(result.success).toBe(false)
138
+ })
139
+
140
+ it('rejects Promise objects', () => {
141
+ const result = schema.safeParse(Promise.resolve(42))
142
+ expect(result.success).toBe(false)
143
+ })
144
+
145
+ it('rejects Buffer objects', () => {
146
+ const result = schema.safeParse(Buffer.from('test'))
147
+ expect(result.success).toBe(false)
148
+ })
149
+ })
150
+
151
+ describe('special number values', () => {
152
+ const schema = new NeverSchema()
153
+
154
+ it('rejects NaN', () => {
155
+ const result = schema.safeParse(NaN)
156
+ expect(result.success).toBe(false)
157
+ })
158
+
159
+ it('rejects Infinity', () => {
160
+ const result = schema.safeParse(Infinity)
161
+ expect(result.success).toBe(false)
162
+ })
163
+
164
+ it('rejects negative Infinity', () => {
165
+ const result = schema.safeParse(-Infinity)
166
+ expect(result.success).toBe(false)
167
+ })
168
+
169
+ it('rejects negative zero', () => {
170
+ const result = schema.safeParse(-0)
171
+ expect(result.success).toBe(false)
172
+ })
173
+ })
174
+ })
@@ -1,14 +1,7 @@
1
- import {
2
- ValidationFailure,
3
- Validator,
4
- ValidatorContext,
5
- } from '../validation.js'
1
+ import { Schema, ValidationFailure, ValidatorContext } from '../validation.js'
6
2
 
7
- export class NeverSchema extends Validator<never> {
8
- override validateInContext(
9
- input: unknown,
10
- ctx: ValidatorContext,
11
- ): ValidationFailure {
3
+ export class NeverSchema extends Schema<never> {
4
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationFailure {
12
5
  return ctx.issueInvalidType(input, 'never')
13
6
  }
14
7
  }
@@ -0,0 +1,79 @@
1
+ import { NullSchema } from './null.js'
2
+
3
+ describe('NullSchema', () => {
4
+ describe('basic validation', () => {
5
+ const schema = new NullSchema()
6
+
7
+ it('validates null', () => {
8
+ const result = schema.safeParse(null)
9
+ expect(result.success).toBe(true)
10
+ if (result.success) {
11
+ expect(result.value).toBe(null)
12
+ }
13
+ })
14
+
15
+ it('rejects strings', () => {
16
+ const result = schema.safeParse('null')
17
+ expect(result.success).toBe(false)
18
+ })
19
+
20
+ it('rejects numbers', () => {
21
+ const result = schema.safeParse(0)
22
+ expect(result.success).toBe(false)
23
+ })
24
+
25
+ it('rejects booleans', () => {
26
+ const result = schema.safeParse(false)
27
+ expect(result.success).toBe(false)
28
+ })
29
+
30
+ it('rejects undefined', () => {
31
+ const result = schema.safeParse(undefined)
32
+ expect(result.success).toBe(false)
33
+ })
34
+
35
+ it('rejects objects', () => {
36
+ const result = schema.safeParse({})
37
+ expect(result.success).toBe(false)
38
+ })
39
+
40
+ it('rejects arrays', () => {
41
+ const result = schema.safeParse([])
42
+ expect(result.success).toBe(false)
43
+ })
44
+
45
+ it('rejects empty string', () => {
46
+ const result = schema.safeParse('')
47
+ expect(result.success).toBe(false)
48
+ })
49
+ })
50
+
51
+ describe('edge cases', () => {
52
+ const schema = new NullSchema()
53
+
54
+ it('rejects falsy values', () => {
55
+ const result = schema.safeParse(0)
56
+ expect(result.success).toBe(false)
57
+ })
58
+
59
+ it('rejects string "null"', () => {
60
+ const result = schema.safeParse('null')
61
+ expect(result.success).toBe(false)
62
+ })
63
+
64
+ it('rejects NaN', () => {
65
+ const result = schema.safeParse(NaN)
66
+ expect(result.success).toBe(false)
67
+ })
68
+
69
+ it('rejects nested null in object', () => {
70
+ const result = schema.safeParse({ value: null })
71
+ expect(result.success).toBe(false)
72
+ })
73
+
74
+ it('rejects nested null in array', () => {
75
+ const result = schema.safeParse([null])
76
+ expect(result.success).toBe(false)
77
+ })
78
+ })
79
+ })
@@ -1,13 +1,11 @@
1
- import { ValidationResult, Validator, ValidatorContext } from '../validation.js'
2
-
3
- export class NullSchema extends Validator<null> {
4
- readonly lexiconType = 'null' as const
1
+ import { Schema, ValidationResult, ValidatorContext } from '../validation.js'
5
2
 
3
+ export class NullSchema extends Schema<null> {
6
4
  constructor() {
7
5
  super()
8
6
  }
9
7
 
10
- override validateInContext(
8
+ validateInContext(
11
9
  input: unknown,
12
10
  ctx: ValidatorContext,
13
11
  ): ValidationResult<null> {