@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
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { LexMap, isPlainObject } from '@atproto/lex-data'
|
|
2
|
-
import {
|
|
3
|
-
$Type,
|
|
4
|
-
$TypeOf,
|
|
5
|
-
$Typed,
|
|
6
|
-
$TypedMaybe,
|
|
7
|
-
$type,
|
|
8
|
-
$typed,
|
|
9
|
-
InferInput,
|
|
10
|
-
InferOutput,
|
|
11
|
-
NsidString,
|
|
12
|
-
Schema,
|
|
13
|
-
Unknown$TypedObject,
|
|
14
|
-
ValidationContext,
|
|
15
|
-
Validator,
|
|
16
|
-
} from '../core.js'
|
|
17
|
-
import { lazyProperty } from '../util/lazy-property.js'
|
|
18
|
-
|
|
19
|
-
export type MaybeTypedObject<
|
|
20
|
-
TType extends $Type,
|
|
21
|
-
TValue extends { $type?: unknown } = { $type?: unknown },
|
|
22
|
-
> = TValue extends { $type?: TType }
|
|
23
|
-
? TValue
|
|
24
|
-
: $TypedMaybe<Exclude<TValue, Unknown$TypedObject>, TType>
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Schema for typed objects in Lexicon unions.
|
|
28
|
-
*
|
|
29
|
-
* Typed objects have a `$type` field that identifies which variant they are
|
|
30
|
-
* in a union. The `$type` can be omitted in input (it's implicit), but if
|
|
31
|
-
* present, it must match the expected value.
|
|
32
|
-
*
|
|
33
|
-
* @template TType - The $type string literal type
|
|
34
|
-
* @template TShape - The validator type for the object's shape
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```ts
|
|
38
|
-
* const schema = new TypedObjectSchema(
|
|
39
|
-
* 'app.bsky.embed.images#view',
|
|
40
|
-
* l.object({ images: l.array(imageSchema) })
|
|
41
|
-
* )
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export class TypedObjectSchema<
|
|
45
|
-
const TType extends $Type = $Type,
|
|
46
|
-
const TShape extends Validator<LexMap> = Validator<LexMap>,
|
|
47
|
-
> extends Schema<
|
|
48
|
-
$TypedMaybe<InferInput<TShape>, TType>,
|
|
49
|
-
$TypedMaybe<InferOutput<TShape>, TType>
|
|
50
|
-
> {
|
|
51
|
-
readonly type = 'typedObject' as const
|
|
52
|
-
|
|
53
|
-
constructor(
|
|
54
|
-
readonly $type: TType,
|
|
55
|
-
readonly schema: TShape,
|
|
56
|
-
) {
|
|
57
|
-
super()
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
validateInContext(input: unknown, ctx: ValidationContext) {
|
|
61
|
-
if (!isPlainObject(input)) {
|
|
62
|
-
return ctx.issueUnexpectedType(input, 'object')
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
'$type' in input &&
|
|
67
|
-
input.$type !== undefined &&
|
|
68
|
-
input.$type !== this.$type
|
|
69
|
-
) {
|
|
70
|
-
return ctx.issueInvalidPropertyValue(input, '$type', [this.$type])
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return ctx.validate(input, this.schema)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
build(
|
|
77
|
-
input: Omit<InferOutput<TShape>, '$type'>,
|
|
78
|
-
): $Typed<InferOutput<TShape>, TType>
|
|
79
|
-
build(
|
|
80
|
-
input: Omit<InferInput<TShape>, '$type'>,
|
|
81
|
-
): $Typed<InferInput<TShape>, TType>
|
|
82
|
-
build(input: Record<string, unknown>) {
|
|
83
|
-
return $typed(input, this.$type)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
isTypeOf<TValue extends Record<string, unknown>>(
|
|
87
|
-
value: TValue,
|
|
88
|
-
): value is MaybeTypedObject<TType, TValue> {
|
|
89
|
-
return value.$type === undefined || value.$type === this.$type
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Bound alias for {@link build} for compatibility with generated utilities.
|
|
94
|
-
* @see {@link build}
|
|
95
|
-
*/
|
|
96
|
-
get $build(): typeof this.build {
|
|
97
|
-
return lazyProperty(this, '$build', this.build.bind(this))
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Bound alias for {@link isTypeOf} for compatibility with generated utilities.
|
|
102
|
-
* @see {@link isTypeOf}
|
|
103
|
-
*/
|
|
104
|
-
get $isTypeOf(): typeof this.isTypeOf {
|
|
105
|
-
return lazyProperty(this, '$isTypeOf', this.isTypeOf.bind(this))
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Creates a typed object schema for use in Lexicon unions.
|
|
111
|
-
*
|
|
112
|
-
* Typed objects are identified by their `$type` field, which combines an NSID
|
|
113
|
-
* and a hash (e.g., 'app.bsky.embed.images#view'). Used for union variants.
|
|
114
|
-
*
|
|
115
|
-
* This function offers two overloads:
|
|
116
|
-
* - One that infers the type from arguments (no circular reference support)
|
|
117
|
-
* - One with explicit interface for codegen with circular references
|
|
118
|
-
*
|
|
119
|
-
* @param nsid - The NSID part of the type (e.g., 'app.bsky.embed.images')
|
|
120
|
-
* @param hash - The hash part of the type (e.g., 'view'), defaults to 'main'
|
|
121
|
-
* @param validator - Schema for validating the object properties
|
|
122
|
-
* @returns A new {@link TypedObjectSchema} instance
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```ts
|
|
126
|
-
* // Image embed view
|
|
127
|
-
* const imageViewSchema = l.typedObject(
|
|
128
|
-
* 'app.bsky.embed.images',
|
|
129
|
-
* 'view',
|
|
130
|
-
* l.object({
|
|
131
|
-
* images: l.array(l.object({
|
|
132
|
-
* thumb: l.string(),
|
|
133
|
-
* fullsize: l.string(),
|
|
134
|
-
* alt: l.string(),
|
|
135
|
-
* })),
|
|
136
|
-
* })
|
|
137
|
-
* )
|
|
138
|
-
*
|
|
139
|
-
* // Main type (hash defaults to 'main')
|
|
140
|
-
* const postViewSchema = l.typedObject(
|
|
141
|
-
* 'app.bsky.feed.defs',
|
|
142
|
-
* 'postView',
|
|
143
|
-
* l.object({ uri: l.string(), cid: l.string(), author: authorSchema })
|
|
144
|
-
* )
|
|
145
|
-
*
|
|
146
|
-
* // Use $isTypeOf to narrow union types
|
|
147
|
-
* if (imageViewSchema.$isTypeOf(embed)) {
|
|
148
|
-
* // embed is narrowed to image view type
|
|
149
|
-
* }
|
|
150
|
-
*
|
|
151
|
-
* // Use $build to construct typed objects
|
|
152
|
-
* const view = imageViewSchema.$build({ images: [...] })
|
|
153
|
-
* // view.$type === 'app.bsky.embed.images#view'
|
|
154
|
-
* ```
|
|
155
|
-
*/
|
|
156
|
-
export function typedObject<
|
|
157
|
-
const N extends NsidString,
|
|
158
|
-
const H extends string,
|
|
159
|
-
const S extends Validator<LexMap>,
|
|
160
|
-
>(nsid: N, hash: H, validator: S): TypedObjectSchema<$Type<N, H>, S>
|
|
161
|
-
export function typedObject<V extends { $type?: $Type }>(
|
|
162
|
-
nsid: V extends { $type?: infer T extends string }
|
|
163
|
-
? T extends `${infer N}#${string}`
|
|
164
|
-
? N
|
|
165
|
-
: T // (T is a "main" type, so already an NSID)
|
|
166
|
-
: never,
|
|
167
|
-
hash: V extends { $type?: infer T extends string }
|
|
168
|
-
? T extends `${string}#${infer H}`
|
|
169
|
-
? H
|
|
170
|
-
: 'main'
|
|
171
|
-
: never,
|
|
172
|
-
validator: Validator<Omit<V, '$type'>>,
|
|
173
|
-
): TypedObjectSchema<$TypeOf<V>, Validator<V>>
|
|
174
|
-
/*@__NO_SIDE_EFFECTS__*/
|
|
175
|
-
export function typedObject<
|
|
176
|
-
const N extends NsidString,
|
|
177
|
-
const H extends string,
|
|
178
|
-
const S extends Validator<LexMap>,
|
|
179
|
-
>(nsid: N, hash: H, validator: S) {
|
|
180
|
-
return new TypedObjectSchema<$Type<N, H>, S>($type(nsid, hash), validator)
|
|
181
|
-
}
|