import { HasTag, InferKind, SomeSpec, Spec, SpecKind, SpecSuccess, SpectypesError } from './types.js' import { error } from './error.js' type SpectypesRecordKeyError = SpectypesError type SpectypesRecordItemError = SpectypesError // eslint-disable-next-line @typescript-eslint/naming-convention export const UNSAFE_record: { /** * Creates a record validator spec. Unlike `record` this validator is not protected from prototype * pollution and objects containing properties that override Object.prototype methods are valid. * * @param keySpec Spec to validate each key of a record. Validates a string and can be transformed to string or number * @param itemSpec Spec to validate each item of a record. */ ( keySpec: HasTag extends true ? SpectypesRecordKeyError<'optional'> : HasTag extends true ? SpectypesRecordKeyError<'unknown'> : HasTag extends true ? SpectypesRecordKeyError<'nullish'> : HasTag extends true ? SpectypesRecordKeyError<'lazy'> : HasTag extends true ? SpectypesRecordKeyError<'array'> : HasTag extends true ? SpectypesRecordKeyError<'tuple'> : HasTag extends true ? SpectypesRecordKeyError<'object'> : HasTag extends true ? SpectypesRecordKeyError<'record'> : HasTag extends true ? SpectypesRecordKeyError<'merge'> : HasTag extends true ? SpectypesRecordKeyError<'struct'> : HasTag extends true ? SpectypesRecordKeyError<'number'> : HasTag extends true ? SpectypesRecordKeyError<'boolean'> : HasTag extends true ? SpectypesRecordKeyError<'non string literal'> : KeySpec extends Spec ? KeySpec : { readonly "spectypes error: only number or string 'record' key types allowed": never }, itemSpec: HasTag extends true ? SpectypesRecordItemError<'optional'> : HasTag extends true ? SpectypesRecordItemError<'lazy'> : ItemSpec ): SpecSuccess extends number | string ? Spec< ['record'], InferKind, { readonly [key in SpecSuccess]: SpecSuccess } > : never /** * Creates a record validation spec. Record keys will not be validated. Unlike `record` this * validator is not protected from prototype pollution and objects containing properties that * override Object.prototype methods are valid. * * @param itemSpec Spec to validate each item of a record. */ ( itemSpec: HasTag extends true ? SpectypesRecordItemError<'optional'> : HasTag extends true ? SpectypesRecordItemError<'lazy'> : ItemSpec ): Spec<['record'], SpecKind, { readonly [key in string]: SpecSuccess }> } = error