import { Serial } from 'type-core'; import { Schema } from '../../definitions/index.js'; import 'json-schema'; type Generalize = T | (T extends boolean ? boolean : never) | (T extends number ? number : never) | (T extends string ? string : never) | (T extends Serial[] ? Serial[] : never) | (T extends object ? { [key: string]: Serial; } : never); type EnsureResponse = Exclude> : EnsureResponse.Layer, A extends true ? undefined : never>; declare namespace EnsureResponse { type Layer = E extends Schema.Type ? Extract, undefined> | Extract> : EnsureResponseExtract; type EnsureResponseExtract = Extract | undefined : Schema.NameType | Generalize, D extends Schema.Type ? Schema.NameType : Schema.NameType | undefined>; } type EnsureSchema = EnsureSchema.Record | Schema | EnsureSchema.Name; declare namespace EnsureSchema { type Name = Exclude> extends never ? Schema.TypeName & N : Schema.TypeName> & N; type Record = Exclude> extends never ? RecordComplete : RecordComplete, D, E, N>; type RecordComplete = RecordFragment & Schema & Schema>; interface RecordFragment { type: N; default?: D; enum?: E[]; } } export { EnsureResponse, EnsureSchema };