287 lines
6.2 KiB
TypeScript
287 lines
6.2 KiB
TypeScript
/**
|
|
* @since 2.0.0
|
|
*/
|
|
import type * as Cause from "./Cause.js"
|
|
import * as internal from "./internal/configError.js"
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const ConfigErrorTypeId: unique symbol = internal.ConfigErrorTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type ConfigErrorTypeId = typeof ConfigErrorTypeId
|
|
|
|
/**
|
|
* The possible ways that loading configuration data may fail.
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export type ConfigError =
|
|
| And
|
|
| Or
|
|
| InvalidData
|
|
| MissingData
|
|
| SourceUnavailable
|
|
| Unsupported
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
*/
|
|
export declare namespace ConfigError {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Proto {
|
|
readonly _tag: "ConfigError"
|
|
readonly [ConfigErrorTypeId]: ConfigErrorTypeId
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export type Reducer<C, Z> = ConfigErrorReducer<C, Z>
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface ConfigErrorReducer<in C, in out Z> {
|
|
andCase(context: C, left: Z, right: Z): Z
|
|
orCase(context: C, left: Z, right: Z): Z
|
|
invalidDataCase(context: C, path: Array<string>, message: string): Z
|
|
missingDataCase(context: C, path: Array<string>, message: string): Z
|
|
sourceUnavailableCase(
|
|
context: C,
|
|
path: Array<string>,
|
|
message: string,
|
|
cause: Cause.Cause<unknown>
|
|
): Z
|
|
unsupportedCase(context: C, path: Array<string>, message: string): Z
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface And extends ConfigError.Proto {
|
|
readonly _op: "And"
|
|
readonly left: ConfigError
|
|
readonly right: ConfigError
|
|
readonly message: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Or extends ConfigError.Proto {
|
|
readonly _op: "Or"
|
|
readonly left: ConfigError
|
|
readonly right: ConfigError
|
|
readonly message: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface InvalidData extends ConfigError.Proto {
|
|
readonly _op: "InvalidData"
|
|
readonly path: Array<string>
|
|
readonly message: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface MissingData extends ConfigError.Proto {
|
|
readonly _op: "MissingData"
|
|
readonly path: Array<string>
|
|
readonly message: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface SourceUnavailable extends ConfigError.Proto {
|
|
readonly _op: "SourceUnavailable"
|
|
readonly path: Array<string>
|
|
readonly message: string
|
|
readonly cause: Cause.Cause<unknown>
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Unsupported extends ConfigError.Proto {
|
|
readonly _op: "Unsupported"
|
|
readonly path: Array<string>
|
|
readonly message: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Options {
|
|
readonly pathDelim: string
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const And: (self: ConfigError, that: ConfigError) => ConfigError = internal.And
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const Or: (self: ConfigError, that: ConfigError) => ConfigError = internal.Or
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const MissingData: (path: Array<string>, message: string, options?: Options) => ConfigError =
|
|
internal.MissingData
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const InvalidData: (path: Array<string>, message: string, options?: Options) => ConfigError =
|
|
internal.InvalidData
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const SourceUnavailable: (
|
|
path: Array<string>,
|
|
message: string,
|
|
cause: Cause.Cause<unknown>,
|
|
options?: Options
|
|
) => ConfigError = internal.SourceUnavailable
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const Unsupported: (path: Array<string>, message: string, options?: Options) => ConfigError =
|
|
internal.Unsupported
|
|
|
|
/**
|
|
* Returns `true` if the specified value is a `ConfigError`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isConfigError: (u: unknown) => u is ConfigError = internal.isConfigError
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is an `And`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isAnd: (self: ConfigError) => self is And = internal.isAnd
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is an `Or`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isOr: (self: ConfigError) => self is Or = internal.isOr
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is an `InvalidData`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isInvalidData: (self: ConfigError) => self is InvalidData = internal.isInvalidData
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is an `MissingData`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isMissingData: (self: ConfigError) => self is MissingData = internal.isMissingData
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` contains only `MissingData` errors, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @categer getters
|
|
*/
|
|
export const isMissingDataOnly: (self: ConfigError) => boolean = internal.isMissingDataOnly
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is a `SourceUnavailable`,
|
|
* `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isSourceUnavailable: (self: ConfigError) => self is SourceUnavailable = internal.isSourceUnavailable
|
|
|
|
/**
|
|
* Returns `true` if the specified `ConfigError` is an `Unsupported`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isUnsupported: (self: ConfigError) => self is Unsupported = internal.isUnsupported
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
export const prefixed: {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(prefix: Array<string>): (self: ConfigError) => ConfigError
|
|
/**
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(self: ConfigError, prefix: Array<string>): ConfigError
|
|
} = internal.prefixed
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
export const reduceWithContext: {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
<C, Z>(context: C, reducer: ConfigErrorReducer<C, Z>): (self: ConfigError) => Z
|
|
/**
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
<C, Z>(self: ConfigError, context: C, reducer: ConfigErrorReducer<C, Z>): Z
|
|
} = internal.reduceWithContext
|