@atproto/lex-schema 0.0.5 → 0.0.7
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 +30 -0
- package/dist/core/$type.d.ts +6 -3
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js.map +1 -1
- package/dist/core/property-key.d.ts.map +1 -0
- package/dist/core/property-key.js.map +1 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/validation-error.d.ts +19 -0
- package/dist/core/validation-error.d.ts.map +1 -0
- package/dist/{validation → core}/validation-error.js +12 -5
- package/dist/core/validation-error.js.map +1 -0
- package/dist/{validation → core}/validation-issue.d.ts +43 -0
- package/dist/core/validation-issue.d.ts.map +1 -0
- package/dist/{validation → core}/validation-issue.js +45 -0
- package/dist/core/validation-issue.js.map +1 -0
- package/dist/{validation → core}/validator.d.ts +1 -1
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/{validation → core}/validator.js +4 -4
- package/dist/core/validator.js.map +1 -0
- package/dist/core.d.ts +5 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +5 -0
- package/dist/core.js.map +1 -1
- package/dist/external.d.ts +15 -16
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +38 -55
- package/dist/external.js.map +1 -1
- package/dist/helpers.d.ts +7 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +10 -0
- package/dist/helpers.js.map +1 -1
- package/dist/schema/_parameters.d.ts +1 -1
- package/dist/schema/_parameters.d.ts.map +1 -1
- package/dist/schema/_parameters.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 +2 -2
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +3 -7
- 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.d.ts +1 -1
- package/dist/schema/boolean.d.ts.map +1 -1
- package/dist/schema/boolean.js +2 -2
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.d.ts +1 -1
- package/dist/schema/bytes.d.ts.map +1 -1
- package/dist/schema/bytes.js +2 -2
- 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 +2 -2
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.d.ts +1 -1
- package/dist/schema/custom.d.ts.map +1 -1
- package/dist/schema/custom.js +3 -3
- 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 +2 -2
- 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 -2
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.d.ts +1 -1
- package/dist/schema/enum.d.ts.map +1 -1
- package/dist/schema/enum.js +2 -2
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.d.ts +1 -1
- package/dist/schema/integer.d.ts.map +1 -1
- package/dist/schema/integer.js +4 -4
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +1 -2
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +2 -2
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/literal.d.ts +1 -1
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +2 -2
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.d.ts +1 -1
- package/dist/schema/never.d.ts.map +1 -1
- package/dist/schema/never.js +2 -2
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.d.ts +1 -1
- package/dist/schema/null.d.ts.map +1 -1
- package/dist/schema/null.js +2 -2
- 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 +2 -2
- package/dist/schema/nullable.js.map +1 -1
- package/dist/schema/object.d.ts +1 -2
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +2 -2
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +1 -1
- package/dist/schema/optional.d.ts.map +1 -1
- package/dist/schema/optional.js +2 -2
- package/dist/schema/optional.js.map +1 -1
- package/dist/schema/params.d.ts +1 -2
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +2 -2
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +1 -1
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/record.d.ts +9 -14
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +5 -3
- 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 +2 -2
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +18 -1
- package/dist/schema/refine.d.ts.map +1 -1
- package/dist/schema/refine.js +2 -2
- package/dist/schema/refine.js.map +1 -1
- package/dist/schema/regexp.d.ts +1 -1
- package/dist/schema/regexp.d.ts.map +1 -1
- package/dist/schema/regexp.js +2 -2
- package/dist/schema/regexp.js.map +1 -1
- package/dist/schema/string.d.ts +1 -2
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +1 -2
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +1 -2
- package/dist/schema/subscription.d.ts.map +1 -1
- 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 +2 -2
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +8 -13
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +5 -3
- 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 +2 -2
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +2 -3
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +2 -2
- 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 +3 -3
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown-object.d.ts +1 -2
- package/dist/schema/unknown-object.d.ts.map +1 -1
- package/dist/schema/unknown-object.js +2 -2
- package/dist/schema/unknown-object.js.map +1 -1
- package/dist/schema/unknown.d.ts +1 -1
- package/dist/schema/unknown.d.ts.map +1 -1
- package/dist/schema/unknown.js +2 -2
- package/dist/schema/unknown.js.map +1 -1
- package/dist/util/memoize.d.ts +3 -0
- package/dist/util/memoize.d.ts.map +1 -0
- package/dist/util/memoize.js +52 -0
- package/dist/util/memoize.js.map +1 -0
- package/package.json +6 -6
- package/src/core/$type.ts +13 -2
- package/src/{validation → core}/validation-error.ts +11 -3
- package/src/{validation → core}/validation-issue.ts +52 -0
- package/src/{validation → core}/validator.ts +1 -1
- package/src/core.ts +5 -0
- package/src/external.ts +67 -48
- package/src/helpers.test.ts +1 -0
- package/src/helpers.ts +16 -2
- package/src/schema/_parameters.test.ts +1 -0
- package/src/schema/_parameters.ts +1 -1
- package/src/schema/array.test.ts +1 -0
- package/src/schema/array.ts +1 -1
- package/src/schema/blob.test.ts +1 -0
- package/src/schema/blob.ts +3 -6
- package/src/schema/boolean.test.ts +1 -0
- package/src/schema/boolean.ts +1 -1
- package/src/schema/bytes.test.ts +1 -0
- package/src/schema/bytes.ts +1 -1
- package/src/schema/cid.test.ts +1 -0
- package/src/schema/cid.ts +1 -1
- package/src/schema/custom.test.ts +3 -2
- package/src/schema/custom.ts +1 -1
- package/src/schema/dict.test.ts +1 -0
- package/src/schema/dict.ts +1 -1
- package/src/schema/discriminated-union.test.ts +1 -0
- package/src/schema/discriminated-union.ts +1 -1
- package/src/schema/enum.test.ts +1 -0
- package/src/schema/enum.ts +1 -1
- package/src/schema/integer.test.ts +1 -0
- package/src/schema/integer.ts +3 -3
- package/src/schema/intersection.test.ts +1 -0
- package/src/schema/intersection.ts +2 -2
- package/src/schema/literal.test.ts +1 -0
- package/src/schema/literal.ts +1 -1
- package/src/schema/never.test.ts +1 -0
- package/src/schema/never.ts +1 -1
- package/src/schema/null.test.ts +1 -0
- package/src/schema/null.ts +1 -1
- package/src/schema/nullable.test.ts +1 -0
- package/src/schema/nullable.ts +1 -1
- package/src/schema/object.test.ts +1 -0
- package/src/schema/object.ts +3 -3
- package/src/schema/optional.test.ts +1 -0
- package/src/schema/optional.ts +1 -1
- package/src/schema/params.test.ts +1 -0
- package/src/schema/params.ts +3 -3
- package/src/schema/payload.test.ts +1 -0
- package/src/schema/payload.ts +1 -1
- package/src/schema/permission-set.test.ts +1 -0
- package/src/schema/permission.test.ts +1 -0
- package/src/schema/procedure.test.ts +1 -0
- package/src/schema/query.test.ts +1 -0
- package/src/schema/record.test.ts +1 -0
- package/src/schema/record.ts +11 -9
- package/src/schema/ref.test.ts +2 -1
- package/src/schema/ref.ts +1 -1
- package/src/schema/refine.test.ts +1 -0
- package/src/schema/refine.ts +18 -1
- package/src/schema/regexp.test.ts +1 -0
- package/src/schema/regexp.ts +1 -1
- package/src/schema/string.test.ts +1 -0
- package/src/schema/string.ts +8 -2
- package/src/schema/subscription.test.ts +1 -0
- package/src/schema/subscription.ts +1 -2
- package/src/schema/token.test.ts +1 -0
- package/src/schema/token.ts +1 -1
- package/src/schema/typed-object.test.ts +1 -0
- package/src/schema/typed-object.ts +10 -6
- package/src/schema/typed-ref.test.ts +1 -0
- package/src/schema/typed-ref.ts +1 -1
- package/src/schema/typed-union.test.ts +1 -0
- package/src/schema/typed-union.ts +4 -4
- package/src/schema/union.test.ts +1 -0
- package/src/schema/union.ts +1 -1
- package/src/schema/unknown-object.test.ts +1 -0
- package/src/schema/unknown-object.ts +1 -2
- package/src/schema/unknown.test.ts +1 -0
- package/src/schema/unknown.ts +1 -1
- package/src/util/array-agg.test.ts +1 -0
- package/src/util/memoize.ts +57 -0
- package/tsconfig.tests.json +1 -1
- package/dist/validation/property-key.d.ts.map +0 -1
- package/dist/validation/property-key.js.map +0 -1
- package/dist/validation/schema.d.ts.map +0 -1
- package/dist/validation/schema.js.map +0 -1
- package/dist/validation/validation-error.d.ts +0 -9
- package/dist/validation/validation-error.d.ts.map +0 -1
- package/dist/validation/validation-error.js.map +0 -1
- package/dist/validation/validation-issue.d.ts.map +0 -1
- package/dist/validation/validation-issue.js.map +0 -1
- package/dist/validation/validator.d.ts.map +0 -1
- package/dist/validation/validator.js.map +0 -1
- package/dist/validation.d.ts +0 -6
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -9
- package/dist/validation.js.map +0 -1
- package/src/validation.ts +0 -5
- /package/dist/{validation → core}/property-key.d.ts +0 -0
- /package/dist/{validation → core}/property-key.js +0 -0
- /package/dist/{validation → core}/schema.d.ts +0 -0
- /package/dist/{validation → core}/schema.js +0 -0
- /package/src/{validation → core}/property-key.ts +0 -0
- /package/src/{validation → core}/schema.ts +0 -0
package/src/helpers.test.ts
CHANGED
package/src/helpers.ts
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LexErrorData } from '@atproto/lex-data'
|
|
2
|
+
import { Infer, Restricted, Schema } from './core.js'
|
|
2
3
|
import {
|
|
3
4
|
InferPayload,
|
|
4
5
|
InferPayloadBody,
|
|
5
6
|
InferPayloadEncoding,
|
|
7
|
+
ObjectSchema,
|
|
8
|
+
OptionalSchema,
|
|
6
9
|
Payload,
|
|
7
10
|
Procedure,
|
|
8
11
|
Query,
|
|
12
|
+
StringSchema,
|
|
9
13
|
Subscription,
|
|
10
14
|
} from './schema.js'
|
|
11
|
-
|
|
15
|
+
|
|
16
|
+
export type Main<T> = T | { main: T }
|
|
17
|
+
|
|
18
|
+
export function getMain<T extends object>(ns: Main<T>): T {
|
|
19
|
+
return 'main' in ns ? ns.main : ns
|
|
20
|
+
}
|
|
12
21
|
|
|
13
22
|
/**
|
|
14
23
|
* Every XRPC implementation should translate `application/json` and `text/*`
|
|
@@ -59,3 +68,8 @@ export type InferMethodMessage<
|
|
|
59
68
|
//
|
|
60
69
|
M extends Procedure | Query | Subscription,
|
|
61
70
|
> = M extends { message: Schema } ? Infer<M['message']> : undefined
|
|
71
|
+
|
|
72
|
+
export const lexErrorData: Schema<LexErrorData> = new ObjectSchema({
|
|
73
|
+
error: new StringSchema({ minLength: 1 }),
|
|
74
|
+
message: new OptionalSchema(new StringSchema({})),
|
|
75
|
+
})
|
package/src/schema/array.test.ts
CHANGED
package/src/schema/array.ts
CHANGED
package/src/schema/blob.test.ts
CHANGED
package/src/schema/blob.ts
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BlobRef,
|
|
3
|
+
BlobRefValidationOptions,
|
|
3
4
|
LegacyBlobRef,
|
|
4
5
|
isBlobRef,
|
|
5
6
|
isLegacyBlobRef,
|
|
6
7
|
} from '@atproto/lex-data'
|
|
7
|
-
import { Schema, ValidationResult, ValidatorContext } from '../
|
|
8
|
+
import { Schema, ValidationResult, ValidatorContext } from '../core.js'
|
|
8
9
|
|
|
9
|
-
export type BlobSchemaOptions = {
|
|
10
|
+
export type BlobSchemaOptions = BlobRefValidationOptions & {
|
|
10
11
|
/**
|
|
11
12
|
* Whether to allow legacy blob references format
|
|
12
13
|
* @see {@link LegacyBlobRef}
|
|
13
14
|
*/
|
|
14
15
|
allowLegacy?: boolean
|
|
15
|
-
/**
|
|
16
|
-
* Whether to enforce strict validation on the blob reference (CID version, codec, hash function)
|
|
17
|
-
*/
|
|
18
|
-
strict?: boolean
|
|
19
16
|
/**
|
|
20
17
|
* List of accepted mime types
|
|
21
18
|
*/
|
package/src/schema/boolean.ts
CHANGED
package/src/schema/bytes.test.ts
CHANGED
package/src/schema/bytes.ts
CHANGED
package/src/schema/cid.test.ts
CHANGED
package/src/schema/cid.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { IssueCustom } from '../core.js'
|
|
2
3
|
import { CustomSchema } from './custom.js'
|
|
3
4
|
|
|
4
5
|
describe('CustomSchema', () => {
|
|
@@ -371,7 +372,7 @@ describe('CustomSchema', () => {
|
|
|
371
372
|
|
|
372
373
|
describe('assertion context behavior', () => {
|
|
373
374
|
it('calls assertion with null as this', () => {
|
|
374
|
-
const assertion =
|
|
375
|
+
const assertion = vi.fn(function (
|
|
375
376
|
this: unknown,
|
|
376
377
|
input: unknown,
|
|
377
378
|
): input is string {
|
package/src/schema/custom.ts
CHANGED
package/src/schema/dict.test.ts
CHANGED
package/src/schema/dict.ts
CHANGED
package/src/schema/enum.test.ts
CHANGED
package/src/schema/enum.ts
CHANGED
package/src/schema/integer.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema, ValidationResult, ValidatorContext } from '../
|
|
1
|
+
import { Schema, ValidationResult, ValidatorContext } from '../core.js'
|
|
2
2
|
|
|
3
3
|
export type IntegerSchemaOptions = {
|
|
4
4
|
default?: number
|
|
@@ -32,8 +32,8 @@ export class IntegerSchema extends Schema<number> {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Simple wrapper around {@link Number.
|
|
35
|
+
* Simple wrapper around {@link Number.isSafeInteger} that acts as a type guard.
|
|
36
36
|
*/
|
|
37
37
|
function isInteger(input: unknown): input is number {
|
|
38
|
-
return Number.
|
|
38
|
+
return Number.isSafeInteger(input)
|
|
39
39
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Simplify } from '../core.js'
|
|
2
1
|
import {
|
|
3
2
|
Infer,
|
|
4
3
|
Schema,
|
|
4
|
+
Simplify,
|
|
5
5
|
ValidationResult,
|
|
6
6
|
ValidatorContext,
|
|
7
|
-
} from '../
|
|
7
|
+
} from '../core.js'
|
|
8
8
|
import { DictSchema } from './dict.js'
|
|
9
9
|
import { ObjectSchema } from './object.js'
|
|
10
10
|
|
package/src/schema/literal.ts
CHANGED
package/src/schema/never.test.ts
CHANGED
package/src/schema/never.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema, ValidationFailure, ValidatorContext } from '../
|
|
1
|
+
import { Schema, ValidationFailure, ValidatorContext } from '../core.js'
|
|
2
2
|
|
|
3
3
|
export class NeverSchema extends Schema<never> {
|
|
4
4
|
validateInContext(input: unknown, ctx: ValidatorContext): ValidationFailure {
|
package/src/schema/null.test.ts
CHANGED
package/src/schema/null.ts
CHANGED
package/src/schema/nullable.ts
CHANGED
package/src/schema/object.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { isPlainObject } from '@atproto/lex-data'
|
|
2
|
-
import { WithOptionalProperties } from '../core.js'
|
|
3
|
-
import { lazyProperty } from '../util/lazy-property.js'
|
|
4
2
|
import {
|
|
5
3
|
Infer,
|
|
6
4
|
Schema,
|
|
7
5
|
ValidationResult,
|
|
8
6
|
Validator,
|
|
9
7
|
ValidatorContext,
|
|
10
|
-
|
|
8
|
+
WithOptionalProperties,
|
|
9
|
+
} from '../core.js'
|
|
10
|
+
import { lazyProperty } from '../util/lazy-property.js'
|
|
11
11
|
|
|
12
12
|
export type ObjectSchemaShape = Record<string, Validator>
|
|
13
13
|
|
package/src/schema/optional.ts
CHANGED
package/src/schema/params.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { isPlainObject } from '@atproto/lex-data'
|
|
2
|
-
import { WithOptionalProperties } from '../core.js'
|
|
3
|
-
import { lazyProperty } from '../util/lazy-property.js'
|
|
4
2
|
import {
|
|
5
3
|
Infer,
|
|
6
4
|
Schema,
|
|
7
5
|
ValidationResult,
|
|
8
6
|
Validator,
|
|
9
7
|
ValidatorContext,
|
|
10
|
-
|
|
8
|
+
WithOptionalProperties,
|
|
9
|
+
} from '../core.js'
|
|
10
|
+
import { lazyProperty } from '../util/lazy-property.js'
|
|
11
11
|
import { Param, ParamScalar, paramSchema } from './_parameters.js'
|
|
12
12
|
import { StringSchema } from './string.js'
|
|
13
13
|
|
package/src/schema/payload.ts
CHANGED
package/src/schema/query.test.ts
CHANGED
package/src/schema/record.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { LexiconRecordKey, NsidString, Simplify, TidString } from '../core.js'
|
|
2
1
|
import {
|
|
2
|
+
$Typed,
|
|
3
3
|
Infer,
|
|
4
|
+
LexiconRecordKey,
|
|
5
|
+
NsidString,
|
|
4
6
|
Schema,
|
|
7
|
+
TidString,
|
|
5
8
|
ValidationResult,
|
|
6
9
|
Validator,
|
|
7
10
|
ValidatorContext,
|
|
8
|
-
} from '../
|
|
11
|
+
} from '../core.js'
|
|
9
12
|
import { LiteralSchema } from './literal.js'
|
|
10
13
|
import { StringSchema } from './string.js'
|
|
11
14
|
import { TypedObject } from './typed-union.js'
|
|
@@ -16,7 +19,7 @@ export type InferRecordKey<R extends RecordSchema> =
|
|
|
16
19
|
export type RecordSchemaOutput<
|
|
17
20
|
T extends NsidString,
|
|
18
21
|
S extends Validator<{ [k: string]: unknown }>,
|
|
19
|
-
> =
|
|
22
|
+
> = $Typed<Infer<S>, T>
|
|
20
23
|
|
|
21
24
|
export class RecordSchema<
|
|
22
25
|
K extends LexiconRecordKey = any,
|
|
@@ -36,17 +39,16 @@ export class RecordSchema<
|
|
|
36
39
|
|
|
37
40
|
isTypeOf<X extends { $type?: unknown }>(
|
|
38
41
|
value: X,
|
|
39
|
-
): value is Exclude<
|
|
40
|
-
X extends { $type?: T } ? X : X & { $type?: T },
|
|
41
|
-
TypedObject
|
|
42
|
-
> {
|
|
42
|
+
): value is Exclude<X extends { $type: T } ? X : $Typed<X, T>, TypedObject> {
|
|
43
43
|
return value.$type === this.$type
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
build<X extends Omit<Infer<S>, '$type'>>(
|
|
47
47
|
input: X,
|
|
48
|
-
):
|
|
49
|
-
return
|
|
48
|
+
): $Typed<Omit<X, '$type'>, T> {
|
|
49
|
+
return input.$type === this.$type
|
|
50
|
+
? (input as $Typed<X, T>)
|
|
51
|
+
: { ...input, $type: this.$type }
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
$isTypeOf<X extends { $type?: unknown }>(value: X) {
|
package/src/schema/ref.test.ts
CHANGED
package/src/schema/ref.ts
CHANGED
package/src/schema/refine.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ValidationResult,
|
|
6
6
|
Validator,
|
|
7
7
|
ValidatorContext,
|
|
8
|
-
} from '../
|
|
8
|
+
} from '../core.js'
|
|
9
9
|
import { CustomAssertionContext } from './custom.js'
|
|
10
10
|
|
|
11
11
|
export type RefinementCheck<T> = {
|
|
@@ -31,6 +31,23 @@ export type Refinement<T = any, Out extends T = T> =
|
|
|
31
31
|
| RefinementCheck<T>
|
|
32
32
|
| RefinementAssertion<T, Out>
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Create a refined schema based on an existing schema and a refinement check.
|
|
36
|
+
*
|
|
37
|
+
* @param schema - The base schema to refine.
|
|
38
|
+
* @param refinement - The refinement check to apply.
|
|
39
|
+
* @returns A new schema that includes the refinement.
|
|
40
|
+
* @example
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* const PositiveInt = refine(l.integer(), {
|
|
44
|
+
* check: (value) => value > 0,
|
|
45
|
+
* message: 'Value must be a positive integer',
|
|
46
|
+
* })
|
|
47
|
+
* const result = PositiveInt.validate(-5)
|
|
48
|
+
* // result.success === false
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
34
51
|
export function refine<S extends Validator, Out extends Infer<S>>(
|
|
35
52
|
schema: S,
|
|
36
53
|
refinement: RefinementAssertion<Infer<S>, Out>,
|
package/src/schema/regexp.ts
CHANGED
package/src/schema/string.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { asCid, graphemeLen, utf8Len } from '@atproto/lex-data'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
InferStringFormat,
|
|
4
|
+
Schema,
|
|
5
|
+
StringFormat,
|
|
6
|
+
ValidationResult,
|
|
7
|
+
ValidatorContext,
|
|
8
|
+
assertStringFormat,
|
|
9
|
+
} from '../core.js'
|
|
4
10
|
import { TokenSchema } from './token.js'
|
|
5
11
|
|
|
6
12
|
export type StringSchemaOptions = {
|
package/src/schema/token.test.ts
CHANGED
package/src/schema/token.ts
CHANGED