@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinclair/typebox",
3
- "version": "0.31.6",
3
+ "version": "0.31.8",
4
4
  "description": "JSONSchema Type Builder with Static Type Resolution for TypeScript",
5
5
  "keywords": [
6
6
  "typescript",
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 checked using standard Json Schema validation.
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 types are designed to express industry standard schematics as TypeScript types. All types are runtime reflectable, serializable and publishable by default. It includes an extensible type system able to represent type safe schematics 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.
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 validation for data received over the wire.
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> ? Array<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);
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 a property key from the given schema */
780
- protected Discard(schema: TSchema, key: PropertyKey): TSchema;
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 a property key from the given schema */
1878
- Discard(schema, key) {
1879
- const { [key]: _, ...rest } = schema;
1880
- return rest;
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);