import { HOOKS } from '../../utils/hooks'; import { CoreType } from '../types'; import { CAST_STRATEGY } from '../../utils/cast-strategy'; export type SchemaDef = Record; export type FieldMap = { [key: string]: IOttomanType; }; export type PluginConstructor = (Schema: any) => void; export type FactoryFunction = (name: any, options: any) => IOttomanType; /** * Should throw all errors detected. */ export type OttomanSchemaTypes = 'String' | 'Boolean' | 'Number' | 'Date' | 'Array' | 'Reference' | 'Embed' | 'Mixed'; export type ValidatorFunction = (value: unknown) => void; export type AutoFunction = () => unknown; export type SupportFactoryTypes = { [key in OttomanSchemaTypes]: FactoryFunction; }; export type SupportTypes = { [key in OttomanSchemaTypes]: CoreType; }; export type CustomValidations = { [key: string]: ValidatorFunction; }; export type RequiredFunction = () => boolean | RequiredOption; export type HookHandler = (IDocument: any) => void; export type Hook = { [key in HOOKS]?: HookHandler[] | HookHandler; }; export interface ValidatorOption { regexp: RegExp; message: string; } export interface RequiredOption { val: boolean; message: string; } interface SchemaTimestampsConfig { createdAt?: boolean | string; updatedAt?: boolean | string; currentTime?: () => Date | number; } export interface CoreTypeOptions { required?: boolean | RequiredOption | RequiredFunction; /** * If truthy, Ottoman will disallow changes to this path once the document is saved to the database for the first time. **/ immutable?: boolean; default?: unknown; validator?: ValidatorOption | ValidatorFunction | string; } export declare abstract class IOttomanType { name: string; typeName: string; protected constructor(name: string, typeName: string); abstract cast(value: unknown, strategy?: CAST_STRATEGY): unknown; abstract validate(value: unknown, strict?: boolean): unknown; } export interface SchemaOptions { strict?: boolean; preHooks?: Hook; postHooks?: Hook; /** * The timestamps option tells Ottoman to assign createdAt and updatedAt fields to your schema. The type * assigned is `Date`. By default, the names of the fields are createdAt and updatedAt. Customize the * field names by setting timestamps.createdAt and timestamps.updatedAt. */ timestamps?: boolean | SchemaTimestampsConfig; enforceRefCheck?: boolean | 'throw'; } export {};