Thanks to visit codestin.com
Credit goes to effect-ts.github.io

Skip to main content Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

VariantSchema.ts overview

Since v1.0.0


Exports Grouped by Category


accessors

fields

Signature

declare const fields: <A extends Struct<any>>(self: A) => A[TypeId]

Source

Since v1.0.0

constructors

make

Signature

declare const make: <const Variants extends ReadonlyArray<string>, const Default extends Variants[number]>(options: {
  readonly variants: Variants
  readonly defaultVariant: Default
}) => {
  readonly Struct: <const A extends Struct.Fields>(fields: A & Struct.Validate<A, Variants[number]>) => Struct<A>
  readonly Field: <const A extends Field.ConfigWithKeys<Variants[number]>>(
    config: A & { readonly [K in Exclude<keyof A, Variants[number]>]: never }
  ) => Field<A>
  readonly FieldOnly: <const Keys extends ReadonlyArray<Variants[number]>>(
    ...keys: Keys
  ) => <S extends Schema.Schema.All | Schema.PropertySignature.All>(
    schema: S
  ) => Field<{ readonly [K in Keys[number]]: S }>
  readonly FieldExcept: <const Keys extends ReadonlyArray<Variants[number]>>(
    ...keys: Keys
  ) => <S extends Schema.Schema.All | Schema.PropertySignature.All>(
    schema: S
  ) => Field<{ readonly [K in Exclude<Variants[number], Keys[number]>]: S }>
  readonly fieldEvolve: {
    <
      Self extends Field<any> | Field.ValueAny,
      const Mapping extends Self extends Field<infer S>
        ? { readonly [K in keyof S]?: (variant: S[K]) => Field.ValueAny }
        : { readonly [K in Variants[number]]?: (variant: Self) => Field.ValueAny }
    >(
      f: Mapping
    ): (
      self: Self
    ) => Field<
      Self extends Field<infer S>
        ? {
            readonly [K in keyof S]: K extends keyof Mapping
              ? Mapping[K] extends (arg: any) => any
                ? ReturnType<Mapping[K]>
                : S[K]
              : S[K]
          }
        : {
            readonly [K in Variants[number]]: K extends keyof Mapping
              ? Mapping[K] extends (arg: any) => any
                ? ReturnType<Mapping[K]>
                : Self
              : Self
          }
    >
    <
      Self extends Field<any> | Field.ValueAny,
      const Mapping extends Self extends Field<infer S>
        ? { readonly [K in keyof S]?: (variant: S[K]) => Field.ValueAny }
        : { readonly [K in Variants[number]]?: (variant: Self) => Field.ValueAny }
    >(
      self: Self,
      f: Mapping
    ): Field<
      Self extends Field<infer S>
        ? {
            readonly [K in keyof S]: K extends keyof Mapping
              ? Mapping[K] extends (arg: any) => any
                ? ReturnType<Mapping[K]>
                : S[K]
              : S[K]
          }
        : {
            readonly [K in Variants[number]]: K extends keyof Mapping
              ? Mapping[K] extends (arg: any) => any
                ? ReturnType<Mapping[K]>
                : Self
              : Self
          }
    >
  }
  readonly fieldFromKey: {
    <
      Self extends Field<any> | Field.ValueAny,
      const Mapping extends Self extends Field<infer S>
        ? { readonly [K in keyof S]?: string }
        : { readonly [K in Variants[number]]?: string }
    >(
      mapping: Mapping
    ): (
      self: Self
    ) => Field<
      Self extends Field<infer S>
        ? {
            readonly [K in keyof S]: K extends keyof Mapping
              ? Mapping[K] extends string
                ? fromKey.Rename<S[K], Mapping[K]>
                : S[K]
              : S[K]
          }
        : {
            readonly [K in Variants[number]]: K extends keyof Mapping
              ? Mapping[K] extends string
                ? fromKey.Rename<Self, Mapping[K]>
                : Self
              : Self
          }
    >
    <
      Self extends Field<any> | Field.ValueAny,
      const Mapping extends Self extends Field<infer S>
        ? { readonly [K in keyof S]?: string }
        : { readonly [K in Variants[number]]?: string }
    >(
      self: Self,
      mapping: Mapping
    ): Field<
      Self extends Field<infer S>
        ? {
            readonly [K in keyof S]: K extends keyof Mapping
              ? Mapping[K] extends string
                ? fromKey.Rename<S[K], Mapping[K]>
                : S[K]
              : S[K]
          }
        : {
            readonly [K in Variants[number]]: K extends keyof Mapping
              ? Mapping[K] extends string
                ? fromKey.Rename<Self, Mapping[K]>
                : Self
              : Self
          }
    >
  }
  readonly Class: <Self = never>(
    identifier: string
  ) => <const Fields extends Struct.Fields>(
    fields: Fields & Struct.Validate<Fields, Variants[number]>,
    annotations?: Schema.Annotations.Schema<Self>
  ) => [Self] extends [never]
    ? MissingSelfGeneric
    : ClassFromFields<Self, Fields, ExtractFields<Default, Fields, true>> & {
        readonly [V in Variants[number]]: Extract<V, Struct<Fields>>
      }
  readonly Union: <const Members extends ReadonlyArray<Struct<any>>>(
    ...members: Members
  ) => Union<Members> & Union.Variants<Members, Variants[number]>
  readonly extract: {
    <V extends Variants[number]>(
      variant: V
    ): <A extends Struct<any>>(self: A) => Extract<V, A, V extends Default ? true : false>
    <V extends Variants[number], A extends Struct<any>>(
      self: A,
      variant: V
    ): Extract<V, A, V extends Default ? true : false>
  }
}

Source

Since v1.0.0

extractors

Extract (type alias)

Signature

type Extract<V, A, IsDefault> = [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

Source

Since v1.0.0

ExtractFields (type alias)

Signature

type ExtractFields<V, Fields, IsDefault> = {
  readonly [K in keyof Fields as [Fields[K]] extends [Field<infer Config>]
    ? V extends keyof Config
      ? K
      : never
    : K]: [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
}

Source

Since v1.0.0

guards

isField

Signature

declare const isField: (u: unknown) => u is Field<any>

Source

Since v1.0.0

isStruct

Signature

declare const isStruct: (u: unknown) => u is Struct<any>

Source

Since v1.0.0

models

Class (interface)

Signature

export interface Class<Self, Fields extends Struct.Fields, SchemaFields extends Schema.Struct.Fields, A, I, R, C>
  extends Schema.Schema<Self, Schema.Simplify<I>, R>,
    Struct<Schema.Simplify<Fields>> {
  new (
    props: RequiredKeys<C> extends never ? void | Schema.Simplify<C> : Schema.Simplify<C>,
    options?: {
      readonly disableValidation?: boolean
    }
  ): A

  readonly ast: AST.Transformation

  make<Args extends Array<any>, X>(this: { new (...args: Args): X }, ...args: Args): X

  annotations(annotations: Schema.Annotations.Schema<Self>): Schema.SchemaClass<Self, I, R>

  readonly identifier: string
  readonly fields: Schema.Simplify<SchemaFields>
}

Source

Since v1.0.0

Field (interface)

Signature

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

Source

Since v1.0.0

Field (namespace)

Source

Since v1.0.0

Any (type alias)

Signature

type Any = { readonly [FieldTypeId]: FieldTypeId }

Source

Since v1.0.0

Config (type alias)

Signature

type Config = {
  readonly [key: string]: Schema.Schema.All | Schema.PropertySignature.All | undefined
}

Source

Since v1.0.0

ConfigWithKeys (type alias)

Signature

type ConfigWithKeys<K> = {
  readonly [P in K]?: Schema.Schema.All | Schema.PropertySignature.All
}

Source

Since v1.0.0

Fields (type alias)

Signature

type Fields = {
  readonly [key: string]: Schema.Schema.All | Schema.PropertySignature.All | Field<any> | Struct<any> | undefined
}

Source

Since v1.0.0

Struct (interface)

Signature

export interface Struct<in out A extends Field.Fields> extends Pipeable {
  readonly [TypeId]: A
  /** @internal */
  [cacheSymbol]?: Record<string, Schema.Schema.All>
}

Source

Since v1.0.0

Struct (namespace)

Source

Since v1.0.0

Any (type alias)

Signature

type Any = { readonly [TypeId]: any }

Source

Since v1.0.0

Fields (type alias)

Signature

type Fields = {
  readonly [key: string]: Schema.Schema.All | Schema.PropertySignature.All | Field<any> | Struct<any> | undefined
}

Source

Since v1.0.0

Validate (type alias)

Signature

type Validate<A, Variant> = {
  readonly [K in keyof A]: A[K] extends { readonly [TypeId]: infer _ }
    ? Validate<A[K], Variant>
    : A[K] extends Field<infer Config>
      ? [keyof Config] extends [Variant]
        ? {}
        : "field must have valid variants"
      : {}
}

Source

Since v1.0.0

Union (interface)

Signature

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

Source

Since v1.0.0

Union (namespace)

Source

Since v1.0.0

Variants (type alias)

Signature

type Union.Variants<Members, Variants> = {
    readonly [Variant in Variants]: Schema.Union<
      {
        [K in keyof Members]: Extract<Variant, Members[K]>
      }
    >
  }

Source

Since v1.0.0

fromKey (interface)

Signature

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

Source

Since v1.0.0

fromKey (namespace)

Source

Since v1.0.0

Rename (type alias)

Signature

type Rename<S, Key> =
  S extends Schema.PropertySignature<
    infer _TypeToken,
    infer _Type,
    infer _Key,
    infer _EncodedToken,
    infer _Encoded,
    infer _HasDefault,
    infer _R
  >
    ? Schema.PropertySignature<_TypeToken, _Type, Key, _EncodedToken, _Encoded, _HasDefault, _R>
    : S extends Schema.Schema.All
      ? fromKey<S, Key>
      : never

Source

Since v1.0.0

overrideable

Override

Signature

declare const Override: <A>(value: A) => A & Brand<"Override">

Source

Since v1.0.0

Overrideable

Signature

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

Source

Since v1.0.0

Overrideable (interface)

Signature

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

Source

Since v1.0.0

type ids

FieldTypeId

Signature

declare const FieldTypeId: unique symbol

Source

Since v1.0.0

FieldTypeId (type alias)

Signature

type FieldTypeId = typeof FieldTypeId

Source

Since v1.0.0

TypeId

Signature

declare const TypeId: unique symbol

Source

Since v1.0.0

TypeId (type alias)

Signature

type TypeId = typeof TypeId

Source

Since v1.0.0