@sinclair/typebox 0.31.6 → 0.31.8
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/package.json +1 -1
- package/readme.md +3 -3
- package/typebox.d.ts +3 -3
- package/typebox.js +12 -10
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -58,11 +58,11 @@ type T = Static<typeof T> // type T = {
|
|
|
58
58
|
|
|
59
59
|
## Overview
|
|
60
60
|
|
|
61
|
-
TypeBox is a runtime type builder that creates Json Schema objects that infer as TypeScript types. The schemas produced by this library are designed to match the static type checking rules of the TypeScript compiler. TypeBox offers a unified type that can be statically checked by TypeScript or runtime
|
|
61
|
+
TypeBox is a runtime type builder that creates Json Schema objects that infer as TypeScript types. The schemas produced by this library are designed to match the static type checking rules of the TypeScript compiler. TypeBox offers a unified type that can be statically checked by TypeScript or runtime asserted using standard Json Schema validation.
|
|
62
62
|
|
|
63
|
-
TypeBox
|
|
63
|
+
TypeBox uses industry standard schematics for runtime type representation; enabling types to be reflected, serialized and published directly. Its type system is fully extensible and able to support type representation for multiple schema specifications. It also provides a high performance validation compiler, various tools for working with dynamic data and offers detailed structured error reporting.
|
|
64
64
|
|
|
65
|
-
TypeBox can be used as a simple tool to build up complex schemas or integrated into applications to enable high performance runtime
|
|
65
|
+
TypeBox can be used as a simple tool to build up complex schemas or integrated into applications and frameworks to enable high performance runtime type checking for data received over the wire.
|
|
66
66
|
|
|
67
67
|
License MIT
|
|
68
68
|
|
package/typebox.d.ts
CHANGED
|
@@ -440,7 +440,7 @@ export type DecodeProperties<T extends TProperties> = {
|
|
|
440
440
|
[K in keyof T]: DecodeType<T[K]>;
|
|
441
441
|
};
|
|
442
442
|
export type DecodeRest<T extends TSchema[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [DecodeType<L>, ...DecodeRest<R>] : [];
|
|
443
|
-
export type DecodeType<T extends TSchema> = (T extends TOptional<infer S extends TSchema> ? TOptional<DecodeType<S>> : T extends TReadonly<infer S extends TSchema> ? TReadonly<DecodeType<S>> : T extends TTransform<infer _, infer R> ? TUnsafe<R> : T extends TArray<infer S extends TSchema> ?
|
|
443
|
+
export type DecodeType<T extends TSchema> = (T extends TOptional<infer S extends TSchema> ? TOptional<DecodeType<S>> : T extends TReadonly<infer S extends TSchema> ? TReadonly<DecodeType<S>> : T extends TTransform<infer _, infer R> ? TUnsafe<R> : T extends TArray<infer S extends TSchema> ? TArray<DecodeType<S>> : T extends TAsyncIterator<infer S extends TSchema> ? TAsyncIterator<DecodeType<S>> : T extends TConstructor<infer P extends TSchema[], infer R extends TSchema> ? TConstructor<P, DecodeType<R>> : T extends TFunction<infer P extends TSchema[], infer R extends TSchema> ? TFunction<P, DecodeType<R>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<S> : T extends TIterator<infer S extends TSchema> ? TIterator<DecodeType<S>> : T extends TNot<infer S extends TSchema> ? TNot<DecodeType<S>> : T extends TObject<infer S> ? TObject<Evaluate<DecodeProperties<S>>> : T extends TPromise<infer S extends TSchema> ? TPromise<DecodeType<S>> : T extends TRecord<infer K, infer S> ? TRecord<K, DecodeType<S>> : T extends TRecursive<infer S extends TSchema> ? TRecursive<DecodeType<S>> : T extends TRef<infer S extends TSchema> ? TRef<DecodeType<S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<S> : T extends TUnion<infer S extends TSchema[]> ? TUnion<S> : T);
|
|
444
444
|
export type TransformFunction<T = any, U = any> = (value: T) => U;
|
|
445
445
|
export interface TransformOptions<I extends TSchema = TSchema, O extends unknown = unknown> {
|
|
446
446
|
Decode: TransformFunction<StaticDecode<I>, O>;
|
|
@@ -776,8 +776,8 @@ export declare class TypeBuilder {
|
|
|
776
776
|
protected Create<T>(schema: Omit<T, 'static' | 'params'>): T;
|
|
777
777
|
/** `[Internal]` Throws a TypeBuilder error with the given message */
|
|
778
778
|
protected Throw(message: string): never;
|
|
779
|
-
/** `[Internal]` Discards
|
|
780
|
-
protected Discard(
|
|
779
|
+
/** `[Internal]` Discards property keys from the given record type */
|
|
780
|
+
protected Discard(record: Record<PropertyKey, any>, keys: PropertyKey[]): any;
|
|
781
781
|
/** `[Json]` Omits compositing symbols from this schema */
|
|
782
782
|
Strict<T extends TSchema>(schema: T): T;
|
|
783
783
|
}
|
package/typebox.js
CHANGED
|
@@ -1874,10 +1874,12 @@ class TypeBuilder {
|
|
|
1874
1874
|
Throw(message) {
|
|
1875
1875
|
throw new TypeBuilderError(message);
|
|
1876
1876
|
}
|
|
1877
|
-
/** `[Internal]` Discards
|
|
1878
|
-
Discard(
|
|
1879
|
-
|
|
1880
|
-
|
|
1877
|
+
/** `[Internal]` Discards property keys from the given record type */
|
|
1878
|
+
Discard(record, keys) {
|
|
1879
|
+
return keys.reduce((acc, key) => {
|
|
1880
|
+
const { [key]: _, ...rest } = acc;
|
|
1881
|
+
return rest;
|
|
1882
|
+
}, record);
|
|
1881
1883
|
}
|
|
1882
1884
|
/** `[Json]` Omits compositing symbols from this schema */
|
|
1883
1885
|
Strict(schema) {
|
|
@@ -2076,7 +2078,7 @@ class JsonTypeBuilder extends TypeBuilder {
|
|
|
2076
2078
|
Omit(schema, unresolved, options = {}) {
|
|
2077
2079
|
const keys = KeyArrayResolver.Resolve(unresolved);
|
|
2078
2080
|
// prettier-ignore
|
|
2079
|
-
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), exports.Transform), (object) => {
|
|
2081
|
+
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), ['$id', exports.Transform]), (object) => {
|
|
2080
2082
|
if (ValueGuard.IsArray(object.required)) {
|
|
2081
2083
|
object.required = object.required.filter((key) => !keys.includes(key));
|
|
2082
2084
|
if (object.required.length === 0)
|
|
@@ -2092,18 +2094,18 @@ class JsonTypeBuilder extends TypeBuilder {
|
|
|
2092
2094
|
/** `[Json]` Constructs a type where all properties are optional */
|
|
2093
2095
|
Partial(schema, options = {}) {
|
|
2094
2096
|
// prettier-ignore
|
|
2095
|
-
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), exports.Transform), (object) => {
|
|
2097
|
+
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), ['$id', exports.Transform]), (object) => {
|
|
2096
2098
|
const properties = Object.getOwnPropertyNames(object.properties).reduce((acc, key) => {
|
|
2097
2099
|
return { ...acc, [key]: this.Optional(object.properties[key]) };
|
|
2098
2100
|
}, {});
|
|
2099
|
-
return this.Object(properties, this.Discard(object, 'required') /* object used as options to retain other constraints */);
|
|
2101
|
+
return this.Object(properties, this.Discard(object, ['required']) /* object used as options to retain other constraints */);
|
|
2100
2102
|
}, options);
|
|
2101
2103
|
}
|
|
2102
2104
|
/** `[Json]` Constructs a type whose keys are picked from the given type */
|
|
2103
2105
|
Pick(schema, unresolved, options = {}) {
|
|
2104
2106
|
const keys = KeyArrayResolver.Resolve(unresolved);
|
|
2105
2107
|
// prettier-ignore
|
|
2106
|
-
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), exports.Transform), (object) => {
|
|
2108
|
+
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), ['$id', exports.Transform]), (object) => {
|
|
2107
2109
|
if (ValueGuard.IsArray(object.required)) {
|
|
2108
2110
|
object.required = object.required.filter((key) => keys.includes(key));
|
|
2109
2111
|
if (object.required.length === 0)
|
|
@@ -2169,9 +2171,9 @@ class JsonTypeBuilder extends TypeBuilder {
|
|
|
2169
2171
|
/** `[Json]` Constructs a type where all properties are required */
|
|
2170
2172
|
Required(schema, options = {}) {
|
|
2171
2173
|
// prettier-ignore
|
|
2172
|
-
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), exports.Transform), (object) => {
|
|
2174
|
+
return ObjectMap.Map(this.Discard(TypeClone.Type(schema), ['$id', exports.Transform]), (object) => {
|
|
2173
2175
|
const properties = Object.getOwnPropertyNames(object.properties).reduce((acc, key) => {
|
|
2174
|
-
return { ...acc, [key]: this.Discard(object.properties[key], exports.Optional) };
|
|
2176
|
+
return { ...acc, [key]: this.Discard(object.properties[key], [exports.Optional]) };
|
|
2175
2177
|
}, {});
|
|
2176
2178
|
return this.Object(properties, object /* object used as options to retain other constraints */);
|
|
2177
2179
|
}, options);
|