58 lines
1.1 KiB
TypeScript
58 lines
1.1 KiB
TypeScript
import SchemaItem from './SchemaItem'
|
|
|
|
export type SchemaInfer<Type extends SchemaItem> = Type extends SchemaItem<infer X> ? X : never
|
|
export type Infer<Type extends SchemaItem> = SchemaInfer<Type>
|
|
|
|
export interface ValidationError {
|
|
message: string
|
|
field?: string
|
|
value?: unknown
|
|
}
|
|
|
|
export type ValidationResult<T> = {
|
|
object: T
|
|
valid: true
|
|
errors?: undefined
|
|
} | {
|
|
valid: false
|
|
object?: (T extends object ? Partial<T> : T) | undefined
|
|
errors: Array<ValidationError>
|
|
}
|
|
|
|
export type ValidationResultOld<T> = {
|
|
object: T
|
|
valid: true
|
|
error?: undefined
|
|
} | {
|
|
valid: false
|
|
object?: (T extends object ? Partial<T> : T) | undefined
|
|
error: Array<ValidationError>
|
|
}
|
|
|
|
export interface SchemaJSON {
|
|
i: string
|
|
a?: Array<string> | undefined
|
|
c?: Array<unknown> | undefined
|
|
f?: Array<{
|
|
n: string
|
|
a?: Array<unknown> | undefined
|
|
}> | undefined
|
|
}
|
|
|
|
/**
|
|
* @deprecated use `SchemaJSON`
|
|
*/
|
|
export type SchemaItemJSON = SchemaJSON
|
|
|
|
/**
|
|
* @deprecated use `Record<string, SchemaItem>`
|
|
*/
|
|
export type Model = Record<string, SchemaItem>
|
|
|
|
/**
|
|
* @deprecated
|
|
*/
|
|
export type ModelInfer<M extends Model> = {
|
|
[key in keyof M]: SchemaInfer<M[key]>
|
|
}
|