@atproto/lex-schema 0.1.4 → 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.
- package/CHANGELOG.md +24 -0
- package/dist/core/$type.d.ts +2 -2
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js.map +1 -1
- package/dist/core/record-key.d.ts +1 -1
- package/dist/core/record-key.d.ts.map +1 -1
- package/dist/core/record-key.js.map +1 -1
- package/dist/core/schema.d.ts +3 -2
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +1 -1
- package/dist/core/schema.js.map +1 -1
- package/dist/core/standard-schema.d.ts +2 -2
- package/dist/core/standard-schema.d.ts.map +1 -1
- package/dist/core/standard-schema.js.map +1 -1
- package/dist/core/string-format.d.ts +2 -2
- package/dist/core/string-format.d.ts.map +1 -1
- package/dist/core/string-format.js.map +1 -1
- package/dist/core/validation-error.d.ts +1 -1
- package/dist/core/validation-error.d.ts.map +1 -1
- package/dist/core/validation-error.js +1 -1
- package/dist/core/validation-error.js.map +1 -1
- package/dist/core/validator.d.ts +1 -1
- package/dist/core/validator.d.ts.map +1 -1
- package/dist/core/validator.js +1 -1
- package/dist/core/validator.js.map +1 -1
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +2 -2
- package/dist/helpers.js.map +1 -1
- package/dist/schema/array.d.ts +1 -1
- package/dist/schema/array.d.ts.map +1 -1
- package/dist/schema/array.js +1 -1
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +1 -1
- package/dist/schema/blob.d.ts.map +1 -1
- package/dist/schema/blob.js +2 -2
- package/dist/schema/blob.js.map +1 -1
- package/dist/schema/boolean.js +1 -1
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.js +1 -1
- package/dist/schema/bytes.js.map +1 -1
- package/dist/schema/cid.d.ts +1 -1
- package/dist/schema/cid.d.ts.map +1 -1
- package/dist/schema/cid.js +3 -3
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.js +1 -1
- package/dist/schema/custom.js.map +1 -1
- package/dist/schema/dict.d.ts +1 -1
- package/dist/schema/dict.d.ts.map +1 -1
- package/dist/schema/dict.js +1 -1
- package/dist/schema/dict.js.map +1 -1
- package/dist/schema/discriminated-union.d.ts +1 -1
- package/dist/schema/discriminated-union.d.ts.map +1 -1
- package/dist/schema/discriminated-union.js +2 -1
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.js +1 -1
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.js +1 -1
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +1 -1
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +3 -1
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/lex-map.d.ts +1 -1
- package/dist/schema/lex-map.d.ts.map +1 -1
- package/dist/schema/lex-map.js +1 -1
- package/dist/schema/lex-map.js.map +1 -1
- package/dist/schema/lex-value.d.ts +1 -1
- package/dist/schema/lex-value.d.ts.map +1 -1
- package/dist/schema/lex-value.js +1 -1
- package/dist/schema/lex-value.js.map +1 -1
- package/dist/schema/literal.js +1 -1
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.js +1 -1
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.js +1 -1
- package/dist/schema/null.js.map +1 -1
- package/dist/schema/nullable.d.ts +1 -1
- package/dist/schema/nullable.d.ts.map +1 -1
- package/dist/schema/nullable.js +1 -1
- package/dist/schema/nullable.js.map +1 -1
- package/dist/schema/object.d.ts +2 -1
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +1 -1
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +2 -1
- package/dist/schema/optional.d.ts.map +1 -1
- package/dist/schema/optional.js +2 -1
- package/dist/schema/optional.js.map +1 -1
- package/dist/schema/params.d.ts +1 -1
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +1 -1
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +3 -2
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js +2 -1
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/permission-set.d.ts +1 -1
- package/dist/schema/permission-set.d.ts.map +1 -1
- package/dist/schema/permission-set.js +1 -0
- package/dist/schema/permission-set.js.map +1 -1
- package/dist/schema/permission.d.ts +1 -1
- package/dist/schema/permission.d.ts.map +1 -1
- package/dist/schema/permission.js.map +1 -1
- package/dist/schema/procedure.d.ts +1 -1
- package/dist/schema/procedure.d.ts.map +1 -1
- package/dist/schema/procedure.js +2 -0
- package/dist/schema/procedure.js.map +1 -1
- package/dist/schema/query.d.ts +1 -1
- package/dist/schema/query.d.ts.map +1 -1
- package/dist/schema/query.js +2 -0
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/record.d.ts +2 -2
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +1 -1
- package/dist/schema/record.js.map +1 -1
- package/dist/schema/ref.d.ts +1 -1
- package/dist/schema/ref.d.ts.map +1 -1
- package/dist/schema/ref.js +1 -1
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +2 -2
- package/dist/schema/refine.d.ts.map +1 -1
- package/dist/schema/refine.js +1 -1
- package/dist/schema/refine.js.map +1 -1
- package/dist/schema/regexp.js +1 -1
- package/dist/schema/regexp.js.map +1 -1
- package/dist/schema/string.d.ts +2 -2
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +1 -1
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +3 -2
- package/dist/schema/subscription.d.ts.map +1 -1
- package/dist/schema/subscription.js +2 -0
- package/dist/schema/subscription.js.map +1 -1
- package/dist/schema/token.d.ts +1 -1
- package/dist/schema/token.d.ts.map +1 -1
- package/dist/schema/token.js +1 -1
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +2 -2
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +1 -1
- package/dist/schema/typed-object.js.map +1 -1
- package/dist/schema/typed-ref.d.ts +1 -1
- package/dist/schema/typed-ref.d.ts.map +1 -1
- package/dist/schema/typed-ref.js +1 -1
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +1 -1
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +3 -1
- package/dist/schema/typed-union.js.map +1 -1
- package/dist/schema/union.d.ts +1 -1
- package/dist/schema/union.d.ts.map +1 -1
- package/dist/schema/union.js +1 -1
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown.js +1 -1
- package/dist/schema/unknown.js.map +1 -1
- package/dist/schema/with-default.d.ts +1 -1
- package/dist/schema/with-default.d.ts.map +1 -1
- package/dist/schema/with-default.js +1 -1
- package/dist/schema/with-default.js.map +1 -1
- package/package.json +6 -10
- package/src/core/$type.test.ts +0 -24
- package/src/core/$type.ts +0 -199
- package/src/core/record-key.ts +0 -85
- package/src/core/result.ts +0 -15
- package/src/core/schema.ts +0 -412
- package/src/core/standard-schema.test.ts +0 -124
- package/src/core/standard-schema.ts +0 -31
- package/src/core/string-format.ts +0 -411
- package/src/core/types.ts +0 -120
- package/src/core/validation-error.ts +0 -134
- package/src/core/validation-issue.ts +0 -340
- package/src/core/validator.ts +0 -636
- package/src/core.ts +0 -9
- package/src/external.ts +0 -3
- package/src/helpers.test.ts +0 -694
- package/src/helpers.ts +0 -222
- package/src/index.ts +0 -3
- package/src/schema/array.test.ts +0 -251
- package/src/schema/array.ts +0 -126
- package/src/schema/blob.test.ts +0 -733
- package/src/schema/blob.ts +0 -150
- package/src/schema/boolean.test.ts +0 -118
- package/src/schema/boolean.ts +0 -46
- package/src/schema/bytes.test.ts +0 -227
- package/src/schema/bytes.ts +0 -81
- package/src/schema/cid.test.ts +0 -125
- package/src/schema/cid.ts +0 -69
- package/src/schema/custom.test.ts +0 -414
- package/src/schema/custom.ts +0 -106
- package/src/schema/dict.test.ts +0 -181
- package/src/schema/dict.ts +0 -122
- package/src/schema/discriminated-union.test.ts +0 -676
- package/src/schema/discriminated-union.ts +0 -196
- package/src/schema/enum.test.ts +0 -398
- package/src/schema/enum.ts +0 -77
- package/src/schema/integer.test.ts +0 -314
- package/src/schema/integer.ts +0 -86
- package/src/schema/intersection.test.ts +0 -33
- package/src/schema/intersection.ts +0 -113
- package/src/schema/lex-map.test.ts +0 -593
- package/src/schema/lex-map.ts +0 -63
- package/src/schema/lex-value.test.ts +0 -81
- package/src/schema/lex-value.ts +0 -86
- package/src/schema/literal.test.ts +0 -533
- package/src/schema/literal.ts +0 -70
- package/src/schema/never.test.ts +0 -175
- package/src/schema/never.ts +0 -56
- package/src/schema/null.test.ts +0 -80
- package/src/schema/null.ts +0 -49
- package/src/schema/nullable.test.ts +0 -470
- package/src/schema/nullable.ts +0 -74
- package/src/schema/object.test.ts +0 -69
- package/src/schema/object.ts +0 -136
- package/src/schema/optional.test.ts +0 -479
- package/src/schema/optional.ts +0 -92
- package/src/schema/params.test.ts +0 -1118
- package/src/schema/params.ts +0 -371
- package/src/schema/payload.test.ts +0 -340
- package/src/schema/payload.ts +0 -204
- package/src/schema/permission-set.test.ts +0 -613
- package/src/schema/permission-set.ts +0 -86
- package/src/schema/permission.test.ts +0 -537
- package/src/schema/permission.ts +0 -63
- package/src/schema/procedure.test.ts +0 -324
- package/src/schema/procedure.ts +0 -98
- package/src/schema/query.test.ts +0 -348
- package/src/schema/query.ts +0 -86
- package/src/schema/record.test.ts +0 -812
- package/src/schema/record.ts +0 -217
- package/src/schema/ref.test.ts +0 -349
- package/src/schema/ref.ts +0 -103
- package/src/schema/refine.test.ts +0 -579
- package/src/schema/refine.ts +0 -153
- package/src/schema/regexp.test.ts +0 -577
- package/src/schema/regexp.ts +0 -82
- package/src/schema/string.test.ts +0 -773
- package/src/schema/string.ts +0 -229
- package/src/schema/subscription.test.ts +0 -499
- package/src/schema/subscription.ts +0 -108
- package/src/schema/token.test.ts +0 -152
- package/src/schema/token.ts +0 -103
- package/src/schema/typed-object.test.ts +0 -745
- package/src/schema/typed-object.ts +0 -181
- package/src/schema/typed-ref.test.ts +0 -796
- package/src/schema/typed-ref.ts +0 -126
- package/src/schema/typed-union.test.ts +0 -355
- package/src/schema/typed-union.ts +0 -130
- package/src/schema/union.test.ts +0 -191
- package/src/schema/union.ts +0 -89
- package/src/schema/unknown.test.ts +0 -313
- package/src/schema/unknown.ts +0 -47
- package/src/schema/with-default.ts +0 -81
- package/src/schema.ts +0 -43
- package/src/util/array-agg.test.ts +0 -42
- package/src/util/array-agg.ts +0 -44
- package/src/util/assertion-util.ts +0 -1
- package/src/util/if-any.ts +0 -3
- package/src/util/lazy-property.ts +0 -14
- package/src/util/memoize.ts +0 -37
- package/tsconfig.build.json +0 -12
- package/tsconfig.json +0 -7
- package/tsconfig.tests.json +0 -8
package/src/schema/payload.ts
DELETED
|
@@ -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
|
-
}
|