Class ArrayShape<HeadShapes, RestShape>

The shape of an array or a tuple value.

Shape Input Type Output Type
ArrayShape<[], null> [] []
ArrayShape<[], Shape<A, B>> A[] B[]
ArrayShape<​[Shape<A, B>, Shape<X, Y>], null> [A, X] [B, Y]
ArrayShape<​[Shape<A, B>], Shape<X, Y>> [A, ...X[]] [B, ...Y[]]

Type Parameters

  • HeadShapes extends readonly AnyShape[]

    The array of positioned element shapes.

  • RestShape extends AnyShape | null

    The shape of rest elements, or null if there are no rest elements.

Hierarchy (view full)

Implements

Constructors

Properties

_applyCoerce: ((input) => unknown[]) = coerceToNever

Applies coercion rules to the given value. Call this method in Shape._apply and Shape._applyAsync to coerce the input.

Override CoercibleShape._coerce and Shape._getInputs methods to implement custom type coercion.

Type declaration

    • (input): unknown[]
    • Parameters

      • input: unknown

        The input value to coerce.

      Returns unknown[]

Returns

The coerced value, or NEVER if coercion isn't possible.

_applyOperations: ApplyOperationsCallback

The callback that applies Shape.operations to the shape output value.

This method returns a promise if there are async Shape.operations.

If the shape overrides only Shape._apply and doesn't override Shape._applyAsync then it's only safe to call this method as the last statement in Shape._apply. Otherwise, it may return an unexpected promise.

If the shape overrides both Shape._apply and Shape._applyAsync then this method would always synchronously return a Result inside Shape._apply.

_options: undefined | IssueOptions | Message

The type constraint options or the type issue message.

_typeIssueFactory: ((input, options) => Issue)

Returns issues associated with an invalid input value type.

Type declaration

annotations: Dict<any> = {}

The dictionary of shape annotations.

headShapes: HeadShapes

The array of positioned element shapes.

inputs: readonly unknown[]

The array of unique input types and values that are accepted by the shape.

isAsync: boolean

true if the shape allows only Shape.parseAsync and throws an error if Shape.parse is called, or false if the shape can be used in both sync and async contexts.

operations: readonly Operation[] = []

The array of operations that are applied to the shape output.

restShape: RestShape

The shape of rest elements or null if there are no rest elements.

messages: Messages = defaultMessages

The mapping from an issue type to a corresponding issue message.

Methods

  • Synchronously parses the input.

    Parameters

    • input: any

      The shape input to parse.

    • options: ApplyOptions

      Parsing options.

    • nonce: number

      The globally unique number that identifies the parsing process.

    Returns Result<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>

    null if input matches the output, Ok that wraps the output, or an array of captured issues.

  • Asynchronously parses the input.

    Parameters

    • input: any

      The shape input to parse.

    • options: ApplyOptions

      Parsing options.

    • nonce: number

      The globally unique number that identifies the parsing process.

    Returns Promise<Result<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>>

    null if input matches the output, Ok that wraps the output, or an array of captured issues.

  • Coerces a value to an array.

    Parameters

    • input: unknown

      The value to coerce.

    Returns unknown[]

    An array, or NEVER if coercion isn't possible.

  • Must return true if the shape must be used in async context only, otherwise the shape can be used in both sync and async contexts. Override this method to implement a custom shape.

    Returns boolean

  • Returns true if the shape accepts given input type or value, or false otherwise.

    Parameters

    • input: unknown

      The type or value that must be checked.

    Returns boolean

  • Adds an asynchronous operation to the shape.

    Type Parameters

    • Param

      The param that is passed to the operation when it is applied.

    Parameters

    Returns this

    The clone of the shape.

  • Adds an asynchronous operation to the shape.

    Parameters

    • cb: OperationCallback<PromiseLike<Result<[...{
          [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
      }[], ...(RestShape extends undefined | null
          ? []
          : RestShape extends Shape<any, any>
              ? RestShape[typeof OUTPUT][]
              : [])[]]>>, [...{
          [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
      }[], ...(RestShape extends undefined | null
          ? []
          : RestShape extends Shape<any, any>
              ? RestShape[typeof OUTPUT][]
              : [])[]]>

      The callback that asynchronously applies an operation to the shape output value.

    • Optional options: OperationOptions

      The operation options.

    Returns this

    The clone of the shape.

  • Adds a synchronous operation to the shape.

    Type Parameters

    • Param

      The param that is passed to the operation when it is applied.

    Parameters

    Returns this

    The clone of the shape.

  • Adds a synchronous operation to the shape.

    Parameters

    • cb: OperationCallback<Result<[...{
          [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
      }[], ...(RestShape extends undefined | null
          ? []
          : RestShape extends Shape<any, any>
              ? RestShape[typeof OUTPUT][]
              : [])[]]>, [...{
          [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
      }[], ...(RestShape extends undefined | null
          ? []
          : RestShape extends Shape<any, any>
              ? RestShape[typeof OUTPUT][]
              : [])[]]>

      The callback that synchronously applies an operation to the shape output value.

    • Optional options: OperationOptions

      The operation options.

    Returns this

    The clone of the shape.

  • Adds annotations to the shape.

    Parameters

    • annotations: ReadonlyDict<any>

      Annotations to add.

    Returns this

    The clone of the shape with the updated annotations.

  • Returns a sub-shape that describes a value associated with the given property name, or null if there's no such sub-shape.

    Parameters

    • key: unknown

      The key for which the sub-shape must be retrieved.

    Returns null | AnyShape

    The sub-shape or null if there's no such key in the shape.

  • Adds a synchronous operation that checks that the shape output satisfies a requirement.

    The callback must return null or undefined if value is valid, or an issue or an array of issues if value is invalid. If a callback returns an empty array, it is considered that no issues have occurred.

    Type Parameters

    • Param

      The param that is passed to the operation when it is applied.

    Parameters

    Returns this

    The clone of the shape.

  • Adds a synchronous operation that checks that the shape output satisfies a requirement.

    The callback must return null or undefined if value is valid, or an issue or an array of issues if value is invalid. If a callback returns an empty array, it is considered that no issues have occurred.

    Parameters

    Returns this

    The clone of the shape.

  • Adds an asynchronous operation that checks that the shape output satisfies a requirement.

    The callback must return a promise that is resolved with null or undefined if value is valid, or an issue or an array of issues if value is invalid. If promise resolves with an empty array, it is considered that no issues have occurred.

    Type Parameters

    • Param

      The param that is passed to the operation when it is applied.

    Parameters

    Returns this

    The clone of the shape.

  • Adds an asynchronous operation that checks that the shape output satisfies a requirement.

    The callback must return a promise that is resolved with null or undefined if value is valid, or an issue or an array of issues if value is invalid. If promise resolves with an empty array, it is considered that no issues have occurred.

    Parameters

    • cb: OperationCallback<PromiseLike<CheckResult>, [...{
          [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
      }[], ...(RestShape extends undefined | null
          ? []
          : RestShape extends Shape<any, any>
              ? RestShape[typeof OUTPUT][]
              : [])[]]>

      The callback that checks that a value satisfies a requirement and returns issues if it doesn't.

    • Optional options: OperationOptions

      The operation options.

    Returns this

    The clone of the shape.

  • Enables an input value coercion.

    Returns this

    The clone of the shape.

  • Synchronously parses the value.

    Parameters

    • input: unknown

      The value to parse.

    • Optional options: ParseOptions

      Parsing options.

    Returns [...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]

    The value that conforms the output type of the shape.

    Throws

    Error if the shape doesn't support the sync parsing, see Shape.isAsync.

    Throws

    ValidationError if any issues occur during parsing.

  • Asynchronously parses the value.

    Parameters

    • input: unknown

      The value to parse.

    • Optional options: ParseOptions

      Parsing options.

    Returns Promisify<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>

    The promise that resolves with the value that conforms the output type of the shape, or rejects with a ValidationError if any issues occur during parsing.

  • Synchronously parses the value and returns undefined if parsing fails.

    Parameters

    • input: unknown

      The value to parse.

    Returns undefined | [...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]

    The value that conforms the output type of the shape.

    Throws

    Error if the shape doesn't support the sync parsing, see Shape.isAsync.

  • Synchronously parses the value and returns the default value if parsing fails.

    Type Parameters

    • DefaultValue

      The default value that is returned if parsing fails.

    Parameters

    • input: unknown

      The value to parse.

    • defaultValue: DefaultValue

      The default value that is returned if parsing fails.

    • Optional options: ApplyOptions

      Parsing options.

    Returns [...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]] | DefaultValue

    The value that conforms the output type of the shape.

    Throws

    Error if the shape doesn't support the sync parsing, see Shape.isAsync.

  • Asynchronously parses the value and returns undefined value if parsing fails.

    Parameters

    • input: unknown

      The value to parse.

    Returns Promisify<undefined | [...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>

    The value that conforms the output type of the shape.

  • Asynchronously parses the value and returns the default value if parsing fails.

    Type Parameters

    • DefaultValue

      The default value that is returned if parsing fails.

    Parameters

    • input: unknown

      The value to parse.

    • defaultValue: DefaultValue

      The default value that is returned if parsing fails.

    • Optional options: ApplyOptions

      Parsing options.

    Returns Promisify<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]] | DefaultValue>

    The value that conforms the output type of the shape.

  • Returns an array shape that has rest elements constrained by the given shape.

    Note: This method returns a shape without any operations.

    Type Parameters

    • S extends null | AnyShape

      The shape of rest elements.

    Parameters

    • restShape: S

      The shape of rest elements, or null if there are no rest elements.

    Returns ArrayShape<HeadShapes, S>

    The new array shape.

  • Synchronously parses the value and returns Ok or Err object that wraps the result.

    Parameters

    • input: unknown

      The value to parse.

    • Optional options: ApplyOptions

      Parsing options.

    Returns Err | Ok<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>

    The Ok instance if parsing has succeeded or Err if parsing has failed.

    Throws

    Error if the shape doesn't support the sync parsing, see Shape.isAsync.

  • Asynchronously parses the value and returns Ok or Err object that wraps the result.

    Parameters

    • input: unknown

      The value to parse.

    • Optional options: ApplyOptions

      Parsing options.

    Returns Promise<Err | Ok<[...{
        [K in string | number | symbol]: HeadShapes[K][typeof OUTPUT]
    }[], ...(RestShape extends undefined | null
        ? []
        : RestShape extends Shape<any, any>
            ? RestShape[typeof OUTPUT][]
            : [])[]]>>

    The Ok instance if parsing has succeeded or Err if parsing has failed.

Plugin Methods

  • Requires an array to contain at least one element that conforms the given shape.

    Parameters

    • value: any

      The shape of the required element or its literal value.

    • Optional options: IssueOptions | Message

      The issue options or the issue message.

    Returns this

    The clone of the shape.

  • Constrains the array length.

    Parameters

    • length: number

      The minimum array length.

    • Optional options: IssueOptions | Message

      The issue options or the issue message.

    Returns this

    The clone of the shape.

  • Constrains the maximum array length.

    Parameters

    • length: number

      The maximum array length.

    • Optional options: IssueOptions | Message

      The issue options or the issue message.

    Returns this

    The clone of the shape.

  • Constrains the minimum array length.

    Parameters

    • length: number

      The minimum array length.

    • Optional options: IssueOptions | Message

      The issue options or the issue message.

    Returns this

    The clone of the shape.

  • Constrains the array length to be at least one element.

    Parameters

    Returns this

    The clone of the shape.

Accessors

  • get isCoercing(): boolean
  • true if this shapes coerces input values to the required type during parsing, or false otherwise.

    Returns boolean