@atproto/lex-schema 0.1.5 → 0.1.6

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 (263) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/core/$type.d.ts +2 -2
  3. package/dist/core/$type.d.ts.map +1 -1
  4. package/dist/core/$type.js.map +1 -1
  5. package/dist/core/record-key.d.ts +1 -1
  6. package/dist/core/record-key.d.ts.map +1 -1
  7. package/dist/core/record-key.js.map +1 -1
  8. package/dist/core/schema.d.ts +3 -2
  9. package/dist/core/schema.d.ts.map +1 -1
  10. package/dist/core/schema.js +1 -1
  11. package/dist/core/schema.js.map +1 -1
  12. package/dist/core/standard-schema.d.ts +2 -2
  13. package/dist/core/standard-schema.d.ts.map +1 -1
  14. package/dist/core/standard-schema.js.map +1 -1
  15. package/dist/core/string-format.d.ts +2 -2
  16. package/dist/core/string-format.d.ts.map +1 -1
  17. package/dist/core/string-format.js.map +1 -1
  18. package/dist/core/validation-error.d.ts +1 -1
  19. package/dist/core/validation-error.d.ts.map +1 -1
  20. package/dist/core/validation-error.js +1 -1
  21. package/dist/core/validation-error.js.map +1 -1
  22. package/dist/core/validator.d.ts +1 -1
  23. package/dist/core/validator.d.ts.map +1 -1
  24. package/dist/core/validator.js +1 -1
  25. package/dist/core/validator.js.map +1 -1
  26. package/dist/helpers.d.ts +2 -2
  27. package/dist/helpers.d.ts.map +1 -1
  28. package/dist/helpers.js +2 -2
  29. package/dist/helpers.js.map +1 -1
  30. package/dist/schema/array.d.ts +1 -1
  31. package/dist/schema/array.d.ts.map +1 -1
  32. package/dist/schema/array.js +1 -1
  33. package/dist/schema/array.js.map +1 -1
  34. package/dist/schema/blob.d.ts +1 -1
  35. package/dist/schema/blob.d.ts.map +1 -1
  36. package/dist/schema/blob.js +2 -2
  37. package/dist/schema/blob.js.map +1 -1
  38. package/dist/schema/boolean.js +1 -1
  39. package/dist/schema/boolean.js.map +1 -1
  40. package/dist/schema/bytes.js +1 -1
  41. package/dist/schema/bytes.js.map +1 -1
  42. package/dist/schema/cid.d.ts +1 -1
  43. package/dist/schema/cid.d.ts.map +1 -1
  44. package/dist/schema/cid.js +3 -3
  45. package/dist/schema/cid.js.map +1 -1
  46. package/dist/schema/custom.js +1 -1
  47. package/dist/schema/custom.js.map +1 -1
  48. package/dist/schema/dict.d.ts +1 -1
  49. package/dist/schema/dict.d.ts.map +1 -1
  50. package/dist/schema/dict.js +1 -1
  51. package/dist/schema/dict.js.map +1 -1
  52. package/dist/schema/discriminated-union.d.ts +1 -1
  53. package/dist/schema/discriminated-union.d.ts.map +1 -1
  54. package/dist/schema/discriminated-union.js +2 -1
  55. package/dist/schema/discriminated-union.js.map +1 -1
  56. package/dist/schema/enum.js +1 -1
  57. package/dist/schema/enum.js.map +1 -1
  58. package/dist/schema/integer.js +1 -1
  59. package/dist/schema/integer.js.map +1 -1
  60. package/dist/schema/intersection.d.ts +1 -1
  61. package/dist/schema/intersection.d.ts.map +1 -1
  62. package/dist/schema/intersection.js +3 -1
  63. package/dist/schema/intersection.js.map +1 -1
  64. package/dist/schema/lex-map.d.ts +1 -1
  65. package/dist/schema/lex-map.d.ts.map +1 -1
  66. package/dist/schema/lex-map.js +1 -1
  67. package/dist/schema/lex-map.js.map +1 -1
  68. package/dist/schema/lex-value.d.ts +1 -1
  69. package/dist/schema/lex-value.d.ts.map +1 -1
  70. package/dist/schema/lex-value.js +1 -1
  71. package/dist/schema/lex-value.js.map +1 -1
  72. package/dist/schema/literal.js +1 -1
  73. package/dist/schema/literal.js.map +1 -1
  74. package/dist/schema/never.js +1 -1
  75. package/dist/schema/never.js.map +1 -1
  76. package/dist/schema/null.js +1 -1
  77. package/dist/schema/null.js.map +1 -1
  78. package/dist/schema/nullable.d.ts +1 -1
  79. package/dist/schema/nullable.d.ts.map +1 -1
  80. package/dist/schema/nullable.js +1 -1
  81. package/dist/schema/nullable.js.map +1 -1
  82. package/dist/schema/object.d.ts +2 -1
  83. package/dist/schema/object.d.ts.map +1 -1
  84. package/dist/schema/object.js +1 -1
  85. package/dist/schema/object.js.map +1 -1
  86. package/dist/schema/optional.d.ts +2 -1
  87. package/dist/schema/optional.d.ts.map +1 -1
  88. package/dist/schema/optional.js +2 -1
  89. package/dist/schema/optional.js.map +1 -1
  90. package/dist/schema/params.d.ts +1 -1
  91. package/dist/schema/params.d.ts.map +1 -1
  92. package/dist/schema/params.js +1 -1
  93. package/dist/schema/params.js.map +1 -1
  94. package/dist/schema/payload.d.ts +3 -2
  95. package/dist/schema/payload.d.ts.map +1 -1
  96. package/dist/schema/payload.js +2 -1
  97. package/dist/schema/payload.js.map +1 -1
  98. package/dist/schema/permission-set.d.ts +1 -1
  99. package/dist/schema/permission-set.d.ts.map +1 -1
  100. package/dist/schema/permission-set.js +1 -0
  101. package/dist/schema/permission-set.js.map +1 -1
  102. package/dist/schema/permission.d.ts +1 -1
  103. package/dist/schema/permission.d.ts.map +1 -1
  104. package/dist/schema/permission.js.map +1 -1
  105. package/dist/schema/procedure.d.ts +1 -1
  106. package/dist/schema/procedure.d.ts.map +1 -1
  107. package/dist/schema/procedure.js +2 -0
  108. package/dist/schema/procedure.js.map +1 -1
  109. package/dist/schema/query.d.ts +1 -1
  110. package/dist/schema/query.d.ts.map +1 -1
  111. package/dist/schema/query.js +2 -0
  112. package/dist/schema/query.js.map +1 -1
  113. package/dist/schema/record.d.ts +2 -2
  114. package/dist/schema/record.d.ts.map +1 -1
  115. package/dist/schema/record.js +1 -1
  116. package/dist/schema/record.js.map +1 -1
  117. package/dist/schema/ref.d.ts +1 -1
  118. package/dist/schema/ref.d.ts.map +1 -1
  119. package/dist/schema/ref.js +1 -1
  120. package/dist/schema/ref.js.map +1 -1
  121. package/dist/schema/refine.d.ts +2 -2
  122. package/dist/schema/refine.d.ts.map +1 -1
  123. package/dist/schema/refine.js +1 -1
  124. package/dist/schema/refine.js.map +1 -1
  125. package/dist/schema/regexp.js +1 -1
  126. package/dist/schema/regexp.js.map +1 -1
  127. package/dist/schema/string.d.ts +2 -2
  128. package/dist/schema/string.d.ts.map +1 -1
  129. package/dist/schema/string.js +1 -1
  130. package/dist/schema/string.js.map +1 -1
  131. package/dist/schema/subscription.d.ts +3 -2
  132. package/dist/schema/subscription.d.ts.map +1 -1
  133. package/dist/schema/subscription.js +2 -0
  134. package/dist/schema/subscription.js.map +1 -1
  135. package/dist/schema/token.d.ts +1 -1
  136. package/dist/schema/token.d.ts.map +1 -1
  137. package/dist/schema/token.js +1 -1
  138. package/dist/schema/token.js.map +1 -1
  139. package/dist/schema/typed-object.d.ts +2 -2
  140. package/dist/schema/typed-object.d.ts.map +1 -1
  141. package/dist/schema/typed-object.js +1 -1
  142. package/dist/schema/typed-object.js.map +1 -1
  143. package/dist/schema/typed-ref.d.ts +1 -1
  144. package/dist/schema/typed-ref.d.ts.map +1 -1
  145. package/dist/schema/typed-ref.js +1 -1
  146. package/dist/schema/typed-ref.js.map +1 -1
  147. package/dist/schema/typed-union.d.ts +1 -1
  148. package/dist/schema/typed-union.d.ts.map +1 -1
  149. package/dist/schema/typed-union.js +3 -1
  150. package/dist/schema/typed-union.js.map +1 -1
  151. package/dist/schema/union.d.ts +1 -1
  152. package/dist/schema/union.d.ts.map +1 -1
  153. package/dist/schema/union.js +1 -1
  154. package/dist/schema/union.js.map +1 -1
  155. package/dist/schema/unknown.js +1 -1
  156. package/dist/schema/unknown.js.map +1 -1
  157. package/dist/schema/with-default.d.ts +1 -1
  158. package/dist/schema/with-default.d.ts.map +1 -1
  159. package/dist/schema/with-default.js +1 -1
  160. package/dist/schema/with-default.js.map +1 -1
  161. package/package.json +6 -10
  162. package/src/core/$type.test.ts +0 -24
  163. package/src/core/$type.ts +0 -199
  164. package/src/core/record-key.ts +0 -85
  165. package/src/core/result.ts +0 -15
  166. package/src/core/schema.ts +0 -412
  167. package/src/core/standard-schema.test.ts +0 -124
  168. package/src/core/standard-schema.ts +0 -31
  169. package/src/core/string-format.ts +0 -411
  170. package/src/core/types.ts +0 -120
  171. package/src/core/validation-error.ts +0 -134
  172. package/src/core/validation-issue.ts +0 -340
  173. package/src/core/validator.ts +0 -636
  174. package/src/core.ts +0 -9
  175. package/src/external.ts +0 -3
  176. package/src/helpers.test.ts +0 -694
  177. package/src/helpers.ts +0 -222
  178. package/src/index.ts +0 -3
  179. package/src/schema/array.test.ts +0 -251
  180. package/src/schema/array.ts +0 -126
  181. package/src/schema/blob.test.ts +0 -733
  182. package/src/schema/blob.ts +0 -150
  183. package/src/schema/boolean.test.ts +0 -118
  184. package/src/schema/boolean.ts +0 -46
  185. package/src/schema/bytes.test.ts +0 -227
  186. package/src/schema/bytes.ts +0 -81
  187. package/src/schema/cid.test.ts +0 -125
  188. package/src/schema/cid.ts +0 -69
  189. package/src/schema/custom.test.ts +0 -414
  190. package/src/schema/custom.ts +0 -106
  191. package/src/schema/dict.test.ts +0 -181
  192. package/src/schema/dict.ts +0 -122
  193. package/src/schema/discriminated-union.test.ts +0 -676
  194. package/src/schema/discriminated-union.ts +0 -196
  195. package/src/schema/enum.test.ts +0 -398
  196. package/src/schema/enum.ts +0 -77
  197. package/src/schema/integer.test.ts +0 -314
  198. package/src/schema/integer.ts +0 -86
  199. package/src/schema/intersection.test.ts +0 -33
  200. package/src/schema/intersection.ts +0 -113
  201. package/src/schema/lex-map.test.ts +0 -593
  202. package/src/schema/lex-map.ts +0 -63
  203. package/src/schema/lex-value.test.ts +0 -81
  204. package/src/schema/lex-value.ts +0 -86
  205. package/src/schema/literal.test.ts +0 -533
  206. package/src/schema/literal.ts +0 -70
  207. package/src/schema/never.test.ts +0 -175
  208. package/src/schema/never.ts +0 -56
  209. package/src/schema/null.test.ts +0 -80
  210. package/src/schema/null.ts +0 -49
  211. package/src/schema/nullable.test.ts +0 -470
  212. package/src/schema/nullable.ts +0 -74
  213. package/src/schema/object.test.ts +0 -69
  214. package/src/schema/object.ts +0 -136
  215. package/src/schema/optional.test.ts +0 -479
  216. package/src/schema/optional.ts +0 -92
  217. package/src/schema/params.test.ts +0 -1118
  218. package/src/schema/params.ts +0 -371
  219. package/src/schema/payload.test.ts +0 -340
  220. package/src/schema/payload.ts +0 -204
  221. package/src/schema/permission-set.test.ts +0 -613
  222. package/src/schema/permission-set.ts +0 -86
  223. package/src/schema/permission.test.ts +0 -537
  224. package/src/schema/permission.ts +0 -63
  225. package/src/schema/procedure.test.ts +0 -324
  226. package/src/schema/procedure.ts +0 -98
  227. package/src/schema/query.test.ts +0 -348
  228. package/src/schema/query.ts +0 -86
  229. package/src/schema/record.test.ts +0 -812
  230. package/src/schema/record.ts +0 -217
  231. package/src/schema/ref.test.ts +0 -349
  232. package/src/schema/ref.ts +0 -103
  233. package/src/schema/refine.test.ts +0 -579
  234. package/src/schema/refine.ts +0 -153
  235. package/src/schema/regexp.test.ts +0 -577
  236. package/src/schema/regexp.ts +0 -82
  237. package/src/schema/string.test.ts +0 -773
  238. package/src/schema/string.ts +0 -229
  239. package/src/schema/subscription.test.ts +0 -499
  240. package/src/schema/subscription.ts +0 -108
  241. package/src/schema/token.test.ts +0 -152
  242. package/src/schema/token.ts +0 -103
  243. package/src/schema/typed-object.test.ts +0 -745
  244. package/src/schema/typed-object.ts +0 -181
  245. package/src/schema/typed-ref.test.ts +0 -796
  246. package/src/schema/typed-ref.ts +0 -126
  247. package/src/schema/typed-union.test.ts +0 -355
  248. package/src/schema/typed-union.ts +0 -130
  249. package/src/schema/union.test.ts +0 -191
  250. package/src/schema/union.ts +0 -89
  251. package/src/schema/unknown.test.ts +0 -313
  252. package/src/schema/unknown.ts +0 -47
  253. package/src/schema/with-default.ts +0 -81
  254. package/src/schema.ts +0 -43
  255. package/src/util/array-agg.test.ts +0 -42
  256. package/src/util/array-agg.ts +0 -44
  257. package/src/util/assertion-util.ts +0 -1
  258. package/src/util/if-any.ts +0 -3
  259. package/src/util/lazy-property.ts +0 -14
  260. package/src/util/memoize.ts +0 -37
  261. package/tsconfig.build.json +0 -12
  262. package/tsconfig.json +0 -7
  263. package/tsconfig.tests.json +0 -8
@@ -1,152 +0,0 @@
1
- import { describe, expect, it } from 'vitest'
2
- import { token } from './token.js'
3
-
4
- describe('TokenSchema', () => {
5
- describe('basic validation', () => {
6
- const schema = token('my.to.ken')
7
-
8
- it('validates exact token match', () => {
9
- expect(schema.safeParse('my.to.ken')).toMatchObject({
10
- success: true,
11
- value: 'my.to.ken',
12
- })
13
- })
14
-
15
- it('rejects different strings', () => {
16
- const result = schema.safeParse('other.to.ken')
17
- expect(result.success).toBe(false)
18
- })
19
-
20
- it('rejects similar strings with different case', () => {
21
- const result = schema.safeParse('My.To.Ken')
22
- expect(result.success).toBe(false)
23
- })
24
-
25
- it('rejects partial matches', () => {
26
- const result = schema.safeParse('my.to')
27
- expect(result.success).toBe(false)
28
- })
29
-
30
- it('rejects empty string', () => {
31
- const result = schema.safeParse('')
32
- expect(result.success).toBe(false)
33
- })
34
-
35
- it('rejects symbols', () => {
36
- const result = schema.safeParse(Symbol.for(schema.toString()))
37
- expect(result.success).toBe(false)
38
- })
39
-
40
- it('rejects functions', () => {
41
- const result = schema.safeParse(() => schema)
42
- expect(result.success).toBe(false)
43
- })
44
-
45
- it('rejects dates', () => {
46
- const result = schema.safeParse(new Date())
47
- expect(result.success).toBe(false)
48
- })
49
-
50
- it('rejects regular expressions', () => {
51
- const result = schema.safeParse(/mytoken/)
52
- expect(result.success).toBe(false)
53
- })
54
- })
55
-
56
- describe('TokenSchema instance validation', () => {
57
- const schema = token('my.to.ken')
58
-
59
- it('accepts TokenSchema instance with same value', () => {
60
- const otherInstance = token('my.to.ken')
61
- const result = schema.safeParse(otherInstance)
62
- expect(result.success).toBe(true)
63
- if (result.success) {
64
- expect(result.value).toBe('my.to.ken')
65
- }
66
- })
67
-
68
- it('rejects TokenSchema instance with different value', () => {
69
- const otherInstance = token('other.to.ken')
70
- const result = schema.safeParse(otherInstance)
71
- expect(result.success).toBe(false)
72
- })
73
-
74
- it('accepts itself as input', () => {
75
- expect(schema.safeParse(schema)).toMatchObject({
76
- success: true,
77
- value: 'my.to.ken',
78
- })
79
- })
80
- })
81
-
82
- describe('type validation', () => {
83
- const schema = token('my.to.ken')
84
-
85
- it('rejects null', () => {
86
- const result = schema.safeParse(null)
87
- expect(result.success).toBe(false)
88
- })
89
-
90
- it('rejects undefined', () => {
91
- const result = schema.safeParse(undefined)
92
- expect(result.success).toBe(false)
93
- })
94
-
95
- it('rejects numbers', () => {
96
- const result = schema.safeParse(123)
97
- expect(result.success).toBe(false)
98
- })
99
-
100
- it('rejects booleans', () => {
101
- const result = schema.safeParse(true)
102
- expect(result.success).toBe(false)
103
- })
104
-
105
- it('rejects objects', () => {
106
- const result = schema.safeParse({ token: 'mytoken' })
107
- expect(result.success).toBe(false)
108
- })
109
-
110
- it('rejects arrays', () => {
111
- const result = schema.safeParse(['mytoken'])
112
- expect(result.success).toBe(false)
113
- })
114
-
115
- it('rejects String objects', () => {
116
- const result = schema.safeParse(new String('mytoken'))
117
- expect(result.success).toBe(false)
118
- })
119
- })
120
-
121
- describe('serialization methods', () => {
122
- const schema = token('my.to.ken', 'foo')
123
-
124
- it('toJSON returns the token value', () => {
125
- expect(schema.toJSON()).toBe('my.to.ken#foo')
126
- })
127
-
128
- it('toString returns the token value', () => {
129
- expect(schema.toString()).toBe('my.to.ken#foo')
130
- })
131
-
132
- it('toJSON and toString return the same value', () => {
133
- expect(schema.toJSON()).toBe(schema.toString())
134
- })
135
-
136
- it('serializes to primitive string in JSON', () => {
137
- expect(JSON.stringify({ token: schema })).toBe(
138
- '{"token":"my.to.ken#foo"}',
139
- )
140
- })
141
- })
142
-
143
- describe('value property', () => {
144
- const schema = token('my.to.ken')
145
-
146
- it('exposes the token value through serialization', () => {
147
- // value is protected, so we verify it through toString/toJSON
148
- expect(schema.toString()).toBe('my.to.ken')
149
- expect(schema.toJSON()).toBe('my.to.ken')
150
- })
151
- })
152
- })
@@ -1,103 +0,0 @@
1
- import { $type, NsidString, Schema, ValidationContext } from '../core.js'
2
-
3
- /**
4
- * Schema for Lexicon token values.
5
- *
6
- * Tokens are named constants in Lexicon, identified by their NSID and hash.
7
- * They validate to their string value (e.g., 'app.bsky.feed.defs#requestLess').
8
- * TokenSchema instances can also be used as values themselves.
9
- *
10
- * @template TValue - The token string literal type
11
- *
12
- * @example
13
- * ```ts
14
- * const schema = new TokenSchema('app.bsky.feed.defs#requestLess')
15
- * schema.validate('app.bsky.feed.defs#requestLess') // success
16
- * ```
17
- */
18
- export class TokenSchema<
19
- const TValue extends string = string,
20
- > extends Schema<TValue> {
21
- readonly type = 'token' as const
22
-
23
- constructor(readonly value: TValue) {
24
- super()
25
- }
26
-
27
- get $token(): TValue {
28
- return this.value
29
- }
30
-
31
- validateInContext(input: unknown, ctx: ValidationContext) {
32
- if (input === this.value) {
33
- return ctx.success(this.value)
34
- }
35
-
36
- // @NOTE: allow using the token instance itself (but convert to the actual
37
- // token value)
38
- if (
39
- ctx.options.mode === 'parse' &&
40
- input instanceof TokenSchema &&
41
- input.value === this.value
42
- ) {
43
- return ctx.success(this.value)
44
- }
45
-
46
- if (typeof input !== 'string') {
47
- return ctx.issueUnexpectedType(input, 'token')
48
- }
49
-
50
- return ctx.issueInvalidValue(input, [this.value])
51
- }
52
-
53
- // When using the TokenSchema instance as data, let's serialize it to the
54
- // token value
55
-
56
- toJSON(): string {
57
- return this.value
58
- }
59
-
60
- toString(): string {
61
- return this.value
62
- }
63
- }
64
-
65
- /**
66
- * Creates a token schema for Lexicon named constants.
67
- *
68
- * Tokens are used in Lexicon as named constants or enum-like values.
69
- * The token instance can be used both as a schema validator and as
70
- * the token value itself (it serializes to its string value).
71
- *
72
- * @param nsid - The NSID part of the token
73
- * @param hash - The hash part of the token (defaults to 'main')
74
- * @returns A new {@link TokenSchema} instance
75
- *
76
- * @example
77
- * ```ts
78
- * // Define tokens
79
- * const requestLess = l.token('app.bsky.feed.defs', 'requestLess')
80
- * const requestMore = l.token('app.bsky.feed.defs', 'requestMore')
81
- *
82
- * // Use as a value
83
- * console.log(requestLess.toString()) // 'app.bsky.feed.defs#requestLess'
84
- *
85
- * // Use in union for validation
86
- * const feedbackSchema = l.union([requestLess, requestMore])
87
- *
88
- * // Validate
89
- * feedbackSchema.parse('app.bsky.feed.defs#requestLess') // success
90
- *
91
- * // Token instances can be used as values in other schemas
92
- * const feedbackRequest = l.object({
93
- * feedback: requestLess, // Accepts the token value
94
- * })
95
- * ```
96
- */
97
- /*@__NO_SIDE_EFFECTS__*/
98
- export function token<
99
- const N extends NsidString,
100
- const H extends string = 'main',
101
- >(nsid: N, hash: H = 'main' as H) {
102
- return new TokenSchema($type(nsid, hash))
103
- }