@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,204 +0,0 @@
1
- import { LexValue } from '@atproto/lex-data'
2
- import { InferInput, Schema, Validator } from '../core.js'
3
- import { ObjectSchema, object } from './object.js'
4
-
5
- export type { LexValue }
6
-
7
- type ToBodyMime<TEncoding extends string> = TEncoding extends '*/*'
8
- ? `${string}/${string}`
9
- : TEncoding extends `${infer T extends string}/*`
10
- ? `${T}/${string}`
11
- : TEncoding
12
-
13
- type ToBodyType<
14
- TEncoding extends string,
15
- TSchema,
16
- TBinary,
17
- > = TSchema extends Schema
18
- ? InferInput<TSchema>
19
- : TEncoding extends `application/json`
20
- ? LexValue
21
- : TBinary
22
-
23
- /**
24
- * Infers the type of a Payload's encoding and body.
25
- *
26
- * @template TPayload - The Payload type
27
- * @template TBody - Fallback body type for non-JSON encodings
28
- */
29
- export type InferPayload<TPayload extends Payload, TBinary> =
30
- TPayload extends Payload<infer TEncoding, infer TSchema>
31
- ? TEncoding extends string
32
- ? {
33
- encoding: ToBodyMime<TEncoding>
34
- body: ToBodyType<TEncoding, TSchema, TBinary>
35
- }
36
- : undefined
37
- : never
38
-
39
- /**
40
- * Converts schema encoding patterns to data encoding types.
41
- *
42
- * Handles wildcards like '*\/*' and 'image/*' in MIME types.
43
- *
44
- * @template TPayload - The Payload type
45
- */
46
- export type InferPayloadEncoding<TPayload extends Payload> =
47
- TPayload extends Payload<infer TEncoding, any>
48
- ? TEncoding extends string
49
- ? ToBodyMime<TEncoding>
50
- : undefined
51
- : never
52
-
53
- /**
54
- * Infers the body type from a Payload and fallback type.
55
- *
56
- * @template TPayload - The Payload type
57
- * @template TBody - Fallback body type for non-JSON encodings without schema
58
- */
59
- export type InferPayloadBody<TPayload extends Payload, TBinary> =
60
- TPayload extends Payload<infer TEncoding, infer TSchema>
61
- ? TEncoding extends string
62
- ? ToBodyType<TEncoding, TSchema, TBinary>
63
- : undefined
64
- : never
65
-
66
- /**
67
- * Determines valid schema type based on encoding presence.
68
- *
69
- * @template E - The encoding string type, or undefined
70
- */
71
- export type PayloadSchema<E extends string | undefined> = E extends undefined
72
- ? undefined
73
- : Schema<LexValue> | undefined
74
-
75
- /**
76
- * Represents a payload definition for Lexicon endpoints.
77
- *
78
- * Payloads define the body format for HTTP requests and responses.
79
- * They consist of an encoding (MIME type) and an optional schema
80
- * for validating the body content.
81
- *
82
- * @template TEncoding - The MIME type string, or undefined for no body
83
- * @template TPayload - The schema type for body validation
84
- *
85
- * @example
86
- * ```ts
87
- * const jsonPayload = new Payload('application/json', l.object({ data: l.string() }))
88
- * const binaryPayload = new Payload('image/*', undefined)
89
- * const noPayload = new Payload(undefined, undefined)
90
- * ```
91
- */
92
- export class Payload<
93
- const TEncoding extends string | undefined = string | undefined,
94
- const TSchema extends PayloadSchema<TEncoding> = PayloadSchema<TEncoding>,
95
- > {
96
- constructor(
97
- readonly encoding: TEncoding,
98
- readonly schema: TSchema,
99
- ) {
100
- if (encoding === undefined && schema !== undefined) {
101
- throw new TypeError('schema cannot be defined when encoding is undefined')
102
- }
103
- }
104
-
105
- /**
106
- * Checks whether the given content-type matches the expected payload schema's
107
- * encoding.
108
- */
109
- matchesEncoding(contentType: string | undefined): boolean {
110
- const { encoding } = this
111
-
112
- if (encoding === undefined) {
113
- // When the output is not defined, we don't enforce any rule on the payload.
114
- return true
115
- } else if (contentType == null) {
116
- // Expecting a body, but got no content-type
117
- return false
118
- }
119
-
120
- if (encoding === '*/*') {
121
- return true
122
- }
123
-
124
- const mime = contentType?.split(';', 1)[0].trim()
125
- if (encoding.endsWith('/*')) {
126
- return mime.startsWith(encoding.slice(0, -1))
127
- }
128
-
129
- // Invalid: Lexicon can only specify "*/*" or "type/*" wildcards
130
- if (encoding.includes('*')) {
131
- return false
132
- }
133
-
134
- return encoding === mime
135
- }
136
- }
137
-
138
- /**
139
- * Creates a payload definition for Lexicon endpoint bodies.
140
- *
141
- * Defines the expected MIME type and optional validation schema for
142
- * request or response bodies.
143
- *
144
- * @param encoding - MIME type string (e.g., 'application/json', 'image/*'), or undefined for no body
145
- * @param validator - Optional schema for validating the body content. Must be undefined if encoding is undefined.
146
- * @returns A new {@link Payload} instance
147
- *
148
- * @example
149
- * ```ts
150
- * // JSON payload with schema
151
- * const output = l.payload('application/json', l.object({
152
- * posts: l.array(postSchema),
153
- * cursor: l.optional(l.string()),
154
- * }))
155
- *
156
- * // Binary payload (no schema validation)
157
- * const blobInput = l.payload('*\/*', undefined)
158
- *
159
- * // Image payload with wildcard
160
- * const imageInput = l.payload('image/*', undefined)
161
- *
162
- * // No payload (for endpoints without body)
163
- * const noBody = l.payload()
164
- * ```
165
- */
166
- /*@__NO_SIDE_EFFECTS__*/
167
- export function payload<
168
- const E extends string | undefined = undefined,
169
- const S extends PayloadSchema<E> = undefined,
170
- >(encoding: E = undefined as E, validator: S = undefined as S) {
171
- return new Payload<E, S>(encoding, validator)
172
- }
173
-
174
- /**
175
- * Creates a JSON payload with an object schema.
176
- *
177
- * Convenience function for the common case of JSON request/response bodies.
178
- * Equivalent to `l.payload('application/json', l.object(properties))`.
179
- *
180
- * @param properties - Object mapping property names to validators
181
- * @returns A new {@link Payload} instance with 'application/json' encoding
182
- *
183
- * @example
184
- * ```ts
185
- * // Query output
186
- * const profileOutput = l.jsonPayload({
187
- * did: l.string({ format: 'did' }),
188
- * handle: l.string({ format: 'handle' }),
189
- * displayName: l.optional(l.string()),
190
- * })
191
- *
192
- * // Procedure input
193
- * const createPostInput = l.jsonPayload({
194
- * text: l.string({ maxGraphemes: 300 }),
195
- * createdAt: l.string({ format: 'datetime' }),
196
- * })
197
- * ```
198
- */
199
- /*@__NO_SIDE_EFFECTS__*/
200
- export function jsonPayload<
201
- P extends Record<string, Validator<undefined | LexValue>>,
202
- >(properties: P): Payload<'application/json', ObjectSchema<P>> {
203
- return payload('application/json', object(properties))
204
- }