Skip to content

VariantSchema

22 exports Added in v1.0.0 Source

Accessors

fields

Added in v1.0.0 Source

Signature

declare function fields<A extends Struct<any>>(self: A): A[typeof TypeId];

Constructors

make

Added in v1.0.0 Source

Signature

declare function make<Variants extends readonly Array<string>, Default extends string>(options: {
  readonly defaultVariant: Default;
  readonly variants: Variants;
}): {
  readonly Class: <Self = never>(identifier: string) => <Fields extends Fields>(fields: Fields & Validate<Fields, Variants[number]>, annotations?: any) => [Self] extends [never] ? "Missing `Self` generic - use `class Self extends Class<Self>()({ ... })`" : ClassFromFields<Self, Fields, ExtractFields<Default, Fields, true>> & { [V in string]: Struct<Simplify<ExtractFields<V, Fields, false>>> };
  readonly extract: {
    <V extends string>(variant: V): <A extends Struct<any>>(self: A) => Extract<V, A, V extends Default ? true : false>;
    <V extends string, A extends Struct<any>>(self: A, variant: V): Extract<V, A, V extends Default ? true : false>;
  };
  readonly Field: <A extends ConfigWithKeys<Variants[number]>>(config: A & { [K in string | number | symbol]: never }) => Field<A>;
  readonly fieldEvolve: {
    <Self extends any, Mapping extends any>(f: Mapping): (self: Self) => Field<Self extends Field<S> ? { [K in string | number | symbol]: K extends keyof Mapping ? Mapping[K] extends (arg: any) => any ? ReturnType<any[any]> : S[K] : S[K] } : { [K in string]: K extends keyof Mapping ? Mapping[K] extends (arg: any) => any ? ReturnType<any[any]> : Self : Self }>;
    <Self extends any, Mapping extends any>(self: Self, f: Mapping): Field<Self extends Field<S> ? { [K in string | number | symbol]: K extends keyof Mapping ? Mapping[K] extends (arg: any) => any ? ReturnType<any[any]> : S[K] : S[K] } : { [K in string]: K extends keyof Mapping ? Mapping[K] extends (arg: any) => any ? ReturnType<any[any]> : Self : Self }>;
  };
  readonly FieldExcept: <Keys extends readonly Array<Variants[number]>>(...keys: Keys) => <S extends any>(schema: S) => Field<{ [K in string]: S }>;
  readonly fieldFromKey: {
    <Self extends any, Mapping extends any>(mapping: Mapping): (self: Self) => Field<Self extends Field<S> ? { [K in string | number | symbol]: K extends keyof Mapping ? Mapping[K] extends string ? Rename<S[K], any[any]> : S[K] : S[K] } : { [K in string]: K extends keyof Mapping ? Mapping[K] extends string ? Rename<Self, any[any]> : Self : Self }>;
    <Self extends any, Mapping extends any>(self: Self, mapping: Mapping): Field<Self extends Field<S> ? { [K in string | number | symbol]: K extends keyof Mapping ? Mapping[K] extends string ? Rename<S[K], any[any]> : S[K] : S[K] } : { [K in string]: K extends keyof Mapping ? Mapping[K] extends string ? Rename<Self, any[any]> : Self : Self }>;
  };
  readonly FieldOnly: <Keys extends readonly Array<Variants[number]>>(...keys: Keys) => <S extends any>(schema: S) => Field<{ [K in string]: S }>;
  readonly Struct: <A extends Fields>(fields: A & Validate<A, Variants[number]>) => Struct<A>;
  readonly Union: <Members extends readonly Array<Struct<any>>>(...members: Members) => Union<Members> & Variants<Members, Variants[number]>;
}

Extractors

Extract type

Added in v1.0.0 Source

Signature

type Extract<V extends string, A extends Struct<any>, IsDefault = false> = [A] extends [
  Struct<infer Fields>,
]
  ? IsDefault extends true
    ? [A] extends [Schema.Schema.Any]
      ? A
      : Schema.Struct<Schema.Simplify<ExtractFields<V, Fields>>>
    : Schema.Struct<Schema.Simplify<ExtractFields<V, Fields>>>
  : never;

ExtractFields type

Added in v1.0.0 Source

Signature

type ExtractFields<V extends string, Fields extends Struct.Fields, IsDefault = false> = {
  [K in keyof Fields]: [Fields[K]] extends [Struct<infer _>]
    ? Extract<V, Fields[K], IsDefault>
    : [Fields[K]] extends [Field<infer Config>]
      ? [Config[V]] extends [Schema.Schema.All | Schema.PropertySignature.All]
        ? Config[V]
        : never
      : [Fields[K]] extends [Schema.Schema.All | Schema.PropertySignature.All]
        ? Fields[K]
        : never;
};

Guards

isField

Added in v1.0.0 Source

Signature

declare function isField(u: unknown): u is Field<any>;

isStruct

Added in v1.0.0 Source

Signature

declare function isStruct(u: unknown): u is Struct<any>;

Models

Class interface

Added in v1.0.0 Source

Signature

interface Class<
  Self,
  Fields extends Struct.Fields,
  SchemaFields extends Schema.Struct.Fields,
  A,
  I,
  R,
  C,
>
  extends Schema<Self, Schema.Simplify<I>, R>, Struct<Schema.Simplify<Fields>> {
  constructor(
    props: RequiredKeys<C> extends never ? any : Simplify<C>,
    options?: {
      readonly disableValidation?: boolean;
    },
  );
  readonly ast: Transformation;
  readonly fields: Simplify<SchemaFields>;
  readonly identifier: string;
  annotations(annotations: Schema<Self>): SchemaClass<Self, I, R>;
  make<Args extends Array<any>, X>(this: (...args: Args) => X, ...args: Args): X;
}

Field

Added in v1.0.0 Source

Field interface

Added in v1.0.0 Source

Signature

interface Field<in out A extends Field.Config> extends Pipeable {
  readonly [FieldTypeId]: typeof FieldTypeId;
  readonly schemas: A;
}

fromKey

Added in v1.0.0 Source

fromKey interface

Added in v1.0.0 Source

Signature

interface fromKey<S extends Schema.Schema.All, Key extends string> extends PropertySignature<
  ":",
  Type<S>,
  Key,
  ":",
  Encoded<S>,
  false,
  Context<S>
> {}

Struct

Added in v1.0.0 Source

Struct interface

Added in v1.0.0 Source

Signature

interface Struct<in out A extends Field.Fields> extends Pipeable {
  readonly [TypeId]: A;
}

Union

Added in v1.0.0 Source

Union interface

Added in v1.0.0 Source

Signature

interface Union<Members extends ReadonlyArray<Struct<any>>> extends Union<{
  [K in keyof Members]: [Members[K]] extends [Schema.Schema.All] ? Members[K] : never;
}> {}

Overrideable

Override

Added in v1.0.0 Source

Signature

declare function Override<A>(value: A): A & Brand<"Override">;

Overrideable

Added in v1.0.0 Source

Signature

declare const Overrideable: <From, IFrom, RFrom, To, ITo, R>(
  from: any,
  to: any,
  options: {
    readonly constructorDefault?: () => To;
    readonly decode?: any;
    readonly generate: (_: Option<ITo>) => Effect<From, ParseIssue, R>;
  },
) => Overrideable<To, IFrom, RFrom | R>;

Overrideable interface

Added in v1.0.0 Source

Signature

interface Overrideable<To, From, R = never> extends PropertySignature<
  ":",
  (To & Brand<"Override">) | undefined,
  never,
  ":",
  From,
  true,
  R
> {}

Type Ids

FieldTypeId

Added in v1.0.0 Source

Signature

declare const FieldTypeId: unique symbol;

FieldTypeId type

Added in v1.0.0 Source

Signature

type FieldTypeId = typeof FieldTypeId;

TypeId

Added in v1.0.0 Source

Signature

declare const TypeId: unique symbol;

TypeId type

Added in v1.0.0 Source

Signature

type TypeId = typeof TypeId;