{"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/_internals/isArray.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/_internals/isInteger.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/_internals/createPath.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/pick.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isType.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/clone.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isNil.js","../src/ValidationError.ts","../src/fieldType.ts","../src/Errors.ts","../src/fieldTypes/array.ts","../src/fieldTypes/plainObject.ts","../src/fieldTypes/string.ts","../src/fieldTypes/date.ts","../src/fieldTypes/number.ts","../src/fieldTypes/integer.ts","../src/fieldTypes/ID.ts","../src/fieldTypes/boolean.ts","../src/fieldTypes/email.ts","../src/fieldTypes/blackbox.ts","../src/fieldTypes/any.ts","../src/fieldTypes/index.ts","../src/getValidationErrors/getError/getFieldValidator.ts","../src/models.ts","../src/getValidationErrors/getError/index.ts","../src/getValidationErrors/convertTypedSchema.ts","../src/clone.ts","../src/getValidationErrors/doValidation.ts","../src/getValidationErrors/getValidationErrorsObject.ts","../src/getValidationErrors/index.ts","../src/getValidationErrors/getFieldLabels.ts","../src/validate.ts","../src/isValid.ts","../src/getValidationErrors/getError/getFieldType.ts","../src/clean/getObjectNode.ts","../src/clean/cleanType.ts","../src/clean/recursiveClean.ts","../src/clean/index.ts","../src/validateKey/dotGetSchema.ts","../src/dotGetSchema.ts","../src/cleanKey.ts","../src/validateKey/index.ts","../src/fieldTypes/enum.ts","../src/types/fields.ts","../src/cleanAndValidate.ts","../src/schemaWithName/index.ts","../src/cloneSchema.ts"],"sourcesContent":["import validate from './validate'\nimport ValidationError from './ValidationError'\nimport getValidationErrors from './getValidationErrors'\nimport isValid from './isValid'\nimport getFieldType from './getValidationErrors/getError/getFieldType'\nimport clean from './clean'\nimport cleanKey from './cleanKey'\nimport validateKey from './validateKey'\nimport dotGetSchema from './dotGetSchema'\nimport createEnum from './fieldTypes/enum'\nimport fieldTypes from './fieldTypes'\n\nexport {\n  validate,\n  ValidationError,\n  getValidationErrors,\n  isValid,\n  getFieldType,\n  clean,\n  cleanKey,\n  dotGetSchema,\n  validateKey,\n  createEnum,\n  fieldTypes,\n}\n\nexport * from './types'\nexport * from './models'\nexport * from './cleanAndValidate'\nexport * from './fieldType'\nexport * from './schemaWithName'\nexport * from './cloneSchema'\n","export function type(input){\n  if (input === null){\n    return 'Null'\n  } else if (input === undefined){\n    return 'Undefined'\n  } else if (Number.isNaN(input)){\n    return 'NaN'\n  }\n  const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n  return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","export const { isArray } = Array\n","function _isInteger(n){\n  return n << 0 === n\n}\n\nexport const isInteger = Number.isInteger || _isInteger\n\n/**\n * Check if `index` is integer even if it is a string.\n */\nexport const isIndexInteger = index => Number.isInteger(Number(index))\n","import { isInteger } from './isInteger.js'\n\nexport function createPath(path, delimiter = '.'){\n  return typeof path === 'string' ?\n    path.split(delimiter).map(x => isInteger(x) ? Number(x) : x) :\n    path\n}\n","import { createPath } from './_internals/createPath.js'\n\nexport function pick(propsToPick, input){\n  if (arguments.length === 1) return _input => pick(propsToPick, _input)\n\n  if (input === null || input === undefined){\n    return undefined\n  }\n  const keys = createPath(propsToPick, ',')\n  const willReturn = {}\n  let counter = 0\n\n  while (counter < keys.length){\n    if (keys[ counter ] in input){\n      willReturn[ keys[ counter ] ] = input[ keys[ counter ] ]\n    }\n    counter++\n  }\n\n  return willReturn\n}\n","import { type } from './type.js'\n\nexport function isType(xType, x){\n  if (arguments.length === 1){\n    return xHolder => isType(xType, xHolder)\n  }\n\n  return type(x) === xType\n}\n","import { isArray } from './_internals/isArray.js'\n\nexport function clone(input){\n  const out = isArray(input) ? Array(input.length) : {}\n  if (input && input.getTime) return new Date(input.getTime())\n\n  for (const key in input){\n    const v = input[ key ]\n    out[ key ] =\n      typeof v === 'object' && v !== null ?\n        v.getTime ?\n          new Date(v.getTime()) :\n          clone(v) :\n        v\n  }\n\n  return out\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n  const inputType = type(input)\n  if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n    return false\n  if (!input) return true\n\n  if (inputType === 'Object'){\n    return Object.keys(input).length === 0\n  }\n\n  if (inputType === 'Array'){\n    return input.length === 0\n  }\n\n  return false\n}\n","export function isNil(x){\n  return x === undefined || x === null\n}\n","import {type} from 'rambdax'\n\nexport interface ValidationErrorInfo {\n  error: string\n  message: string\n  validationErrors: Record<string, string>\n  labels: Record<string, string>\n}\n\nconst getPrintableError = (validationErrors: object): string => {\n  const printableErrors = Object.keys(validationErrors)\n    .map(key => {\n      return `${key}: ${validationErrors[key]}`\n    })\n    .join(', ')\n  const message = `Validation Error: {${printableErrors}}`\n  return message\n}\n\nconst cleanLabels = (\n  labels: Record<string, string>,\n  validationErrors: Record<string, string>,\n): Record<string, string> => {\n  const result: Record<string, string> = {}\n\n  for (const key of Object.keys(validationErrors)) {\n    if (labels[key]) {\n      result[key] = labels[key]\n    }\n  }\n\n  return result\n}\n\nexport default class ValidationError extends Error {\n  public code: string\n  public isValidationError: boolean\n  public isOrionError: boolean\n  public validationErrors: Record<string, string>\n  public labels: Record<string, string>\n\n  constructor(validationErrors: Record<string, string>, labels: Record<string, string> = {}) {\n    super(getPrintableError(validationErrors))\n\n    if (type(validationErrors) !== 'Object') {\n      throw new Error('ValidationError must be initialized with an errors object')\n    }\n\n    Error.captureStackTrace(this, this.constructor)\n\n    this.code = 'validationError'\n    this.isValidationError = true\n    this.isOrionError = true\n    this.validationErrors = validationErrors\n    this.labels = cleanLabels(labels, validationErrors)\n\n    this.getInfo()\n  }\n\n  public getInfo = (): ValidationErrorInfo => {\n    return {\n      error: 'validationError',\n      message: 'Validation Error',\n      validationErrors: this.validationErrors,\n      labels: this.labels,\n    }\n  }\n\n  public prependKey = prepend => {\n    const newErrors = {}\n\n    const keys = Object.keys(this.validationErrors)\n\n    for (const key of keys) {\n      newErrors[`${prepend}.${key}`] = this.validationErrors[key]\n    }\n\n    const newFieldLabels = {}\n\n    for (const key of Object.keys(this.labels)) {\n      newFieldLabels[`${prepend}.${key}`] = this.labels[key]\n    }\n\n    return new ValidationError(newErrors, newFieldLabels)\n  }\n}\n","import {CleanFunction, SchemaFieldType, SchemaNode, ValidateFunction} from './types/schema'\n\nexport interface FieldTypeOpts<TType = any> {\n  name: string\n  validate?: ValidateFunction<TType>\n  clean?: CleanFunction<TType>\n  toGraphQLType?: (GraphQL: any) => any\n  meta?: any\n}\n\nexport interface FieldType<TType = any> {\n  name: string\n  validate: ValidateFunction\n  clean: CleanFunction\n  meta?: any\n  toGraphQLType?: (GraphQL: any) => any\n  toSerializedType?: (node: SchemaNode) => Promise<SchemaFieldType>\n  __tsFieldType: TType\n  __isFieldType: boolean\n}\n\nexport default function fieldType<TType>(opts: FieldTypeOpts<TType>): FieldType<TType> {\n  const {name, validate, clean, ...otherFields} = opts\n  const overwrittenValidate: ValidateFunction = (value, info = {}) => {\n    if (!info.currentSchema) {\n      info.currentSchema = {}\n    }\n    return validate(value, info)\n  }\n\n  const overwrittenClean: CleanFunction = (value, info = {}) => {\n    if (!info.options) {\n      info.options = {}\n    }\n    if (clean) {\n      return clean(value, info)\n    }\n\n    return value\n  }\n\n  return {\n    ...otherFields,\n    name,\n    validate: overwrittenValidate,\n    clean: overwrittenClean,\n    __isFieldType: true,\n    __tsFieldType: null,\n  }\n}\n","export default {\n  NOT_IN_SCHEMA: 'notInSchema',\n  REQUIRED: 'required',\n  UNKNOWN_FIELD_TYPE: 'unknownFieldType',\n  NOT_AN_ARRAY: 'notAnArray',\n  NOT_AN_OBJECT: 'notAnObject',\n  NOT_A_STRING: 'notAString',\n  NOT_A_DATE: 'notADate',\n  NOT_AN_INTEGER: 'notAnInteger',\n  NOT_A_NUMBER: 'notANumber',\n  NOT_AN_ID: 'notAnId',\n  STRING_TOO_SHORT: 'stringTooShort',\n  STRING_TOO_LONG: 'stringTooLong',\n  NUMBER_TOO_SMALL: 'numberTooSmall',\n  NUMBER_TOO_BIG: 'numberTooBig',\n  NOT_A_BOOLEAN: 'notABoolean',\n  NOT_AN_EMAIL: 'notAnEmail',\n  NOT_UNIQUE: 'notUnique',\n  NOT_AN_ALLOWED_VALUE: 'notAnAllowedValue',\n}\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<any[]>({\n  name: 'array',\n  validate(value) {\n    if (!Array.isArray(value)) return Errors.NOT_AN_ARRAY\n  },\n  clean(value, {options}) {\n    if (options.autoConvert) {\n      if (!Array.isArray(value)) {\n        value = [value]\n      }\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport {type} from 'rambdax'\nimport Errors from '../Errors'\nimport {Blackbox} from '../types'\n\nexport default fieldType<Blackbox>({\n  name: 'plainObject',\n  validate(value: object) {\n    if (type(value) !== 'Object') return Errors.NOT_AN_OBJECT\n  },\n  clean(value, {type: typeObj, options}) {\n    if (type(value) !== 'Object') return value\n\n    if (options.filter) {\n      const documentKeys = Object.keys(value)\n      const schemaKeys = Object.keys(typeObj)\n      const notInSchemaKeys = documentKeys.filter(key => !schemaKeys.includes(key))\n      for (const key of notInSchemaKeys) {\n        delete value[key]\n      }\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<string>({\n  name: 'string',\n  validate(value: string, {currentSchema}) {\n    if (typeof value !== 'string') return Errors.NOT_A_STRING\n\n    if (Number.isFinite(currentSchema.min)) {\n      if (value.length < currentSchema.min) {\n        return Errors.STRING_TOO_SHORT\n      }\n    }\n\n    if (Number.isFinite(currentSchema.max)) {\n      if (value.length > currentSchema.max) {\n        return Errors.STRING_TOO_LONG\n      }\n    }\n\n    if (Array.isArray(currentSchema.allowedValues)) {\n      if (!currentSchema.allowedValues.includes(value)) {\n        return Errors.NOT_AN_ALLOWED_VALUE\n      }\n    }\n\n    if (value === '' && !currentSchema.optional) {\n      return Errors.REQUIRED\n    }\n  },\n  clean(value, {options: {autoConvert, trimStrings, removeEmptyStrings}}) {\n    if (autoConvert) {\n      value = String(value)\n    }\n\n    if (trimStrings) {\n      value = value.trim()\n    }\n\n    if (removeEmptyStrings && value === '') {\n      return undefined\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<Date>({\n  name: 'date',\n  validate(value) {\n    if (!(value instanceof Date)) return Errors.NOT_A_DATE\n  },\n  clean(value: Date, {options}) {\n    if (options.autoConvert) {\n      if (typeof value === 'string') {\n        const result = new Date(value)\n        if (Number.isNaN(result.getTime())) {\n          return value\n        }\n\n        value = result\n      } else if (typeof value === 'number') {\n        const result = new Date(value)\n        if (Number.isNaN(result.getTime())) {\n          return value\n        }\n\n        value = result\n      }\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<number>({\n  name: 'number',\n  validate(value: number, {currentSchema}) {\n    if (!Number.isFinite(value)) return Errors.NOT_A_NUMBER\n\n    if (Number.isFinite(currentSchema.min)) {\n      if (value < currentSchema.min) {\n        return Errors.NUMBER_TOO_SMALL\n      }\n    }\n\n    if (Number.isFinite(currentSchema.max)) {\n      if (value > currentSchema.max) {\n        return Errors.NUMBER_TOO_BIG\n      }\n    }\n  },\n  clean(value, {options: {autoConvert}}) {\n    if (typeof value === 'string' && autoConvert) {\n      value = Number(value)\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\nimport number from './number'\n\nexport default fieldType<number>({\n  name: 'integer',\n  validate(value: number, info) {\n    if (!Number.isInteger(value)) return Errors.NOT_AN_INTEGER\n    return number.validate(value, info)\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<string>({\n  name: 'ID',\n  validate(value: string) {\n    if (typeof value !== 'string' && !Number.isInteger(value)) return Errors.NOT_AN_ID\n  },\n  clean(value: string, {options}) {\n    if (typeof value !== 'string' && !Number.isInteger(value)) return value\n    const {trimStrings, removeEmptyStrings} = options\n\n    value = String(value)\n\n    if (trimStrings) {\n      value = value.trim()\n    }\n\n    if (removeEmptyStrings && value === '') {\n      return undefined\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport Errors from '../Errors'\n\nexport default fieldType<boolean>({\n  name: 'boolean',\n  validate(value) {\n    if (typeof value !== 'boolean') return Errors.NOT_A_BOOLEAN\n  },\n  clean(value, {options}) {\n    if (options.autoConvert) {\n      if (typeof value === 'string') {\n        const stringValue = value as string\n        if (stringValue === 'true') {\n          value = true\n        }\n        if (stringValue === 'false') {\n          value = false\n        }\n      }\n      if (typeof value === 'number') {\n        if (value === 0) {\n          value = false\n        } else {\n          value = true\n        }\n      }\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport {isNil} from 'rambdax'\nimport Errors from '../Errors'\n\nexport default fieldType<string>({\n  name: 'email',\n  validate(value, {currentSchema}) {\n    if ((value === '' || isNil(value)) && !currentSchema.optional) {\n      return Errors.REQUIRED\n    }\n\n    if (value && typeof value !== 'string') return Errors.NOT_A_STRING\n\n    // eslint-disable-next-line\n    const regex =\n      /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n    if (value && !regex.test(value)) return Errors.NOT_AN_EMAIL\n  },\n  clean(value) {\n    if (typeof value === 'string') {\n      value = value.toLowerCase()\n    }\n\n    return value\n  },\n})\n","import fieldType from '../fieldType'\nimport {type} from 'rambdax'\nimport Errors from '../Errors'\nimport {Blackbox} from '../types'\n\nexport default fieldType<Blackbox>({\n  name: 'blackbox',\n  validate(value) {\n    if (type(value) !== 'Object') return Errors.NOT_AN_OBJECT\n  },\n})\n","import fieldType from '../fieldType'\n\nexport default fieldType<any>({\n  name: 'any',\n  validate() {},\n})\n","import array from './array'\nimport plainObject from './plainObject'\nimport string from './string'\nimport date from './date'\nimport integer from './integer'\nimport number from './number'\nimport ID from './ID'\nimport boolean from './boolean'\nimport email from './email'\nimport blackbox from './blackbox'\nimport any from './any'\n\nexport default {\n  array,\n  plainObject,\n  string,\n  date,\n  integer,\n  number,\n  ID,\n  boolean,\n  email,\n  blackbox,\n  any,\n}\n","import fieldTypes from '../../fieldTypes'\nimport {FieldValidatorType} from '../../types/fieldValidators'\nimport {SchemaFieldType} from '../../types'\nimport {isType} from 'rambdax'\n\nexport default function getFieldValidator(type: SchemaFieldType): FieldValidatorType {\n  if (isType('Object', type)) {\n    if ((type as any).__isFieldType) return 'custom'\n    return 'plainObject'\n  }\n  if (Array.isArray(type)) return 'array'\n\n  if (type === String) return 'string'\n  if (typeof type === 'function' && type.name === 'Date') return 'date'\n  if (type === Number) return 'number'\n  if (type === Boolean) return 'boolean'\n  if (type === 'enum') return 'string'\n  if (typeof type === 'string' && type.startsWith('typedId:')) return 'string'\n\n  if (typeof type !== 'string') {\n    throw new Error(`Field type is invalid. Pass a string or a custom field type. Got ${type}`)\n  }\n\n  const exists = fieldTypes[type]\n\n  if (!exists) {\n    throw new Error(`Field type does not exist. Got ${type}`)\n  }\n\n  return type as FieldValidatorType\n}\n","import getFieldValidator from './getValidationErrors/getError/getFieldValidator'\nimport {Schema, SchemaFieldType, SchemaFieldTypeNonSchema, SchemaWithMetadata} from './types'\n\n// @ts-ignore polyfill for Symbol.metadata\nSymbol.metadata ??= Symbol('Symbol.metadata')\n\nexport function isSchemaLike(type: any): boolean {\n  if (!type) return false\n\n  if (objectHasSubObjectWithKey(type, 'type')) return true\n  if (type?.[Symbol.metadata]?._getModel) return true\n  if (type.getModel) return true\n  if (type.getSchema) return true\n  if (type.getCleanSchema) return true\n  if (type.__isModel) return true\n  if (type.__modelName) return true\n\n  return false\n}\n\nexport function isStrictSchemaLike<TType extends Schema | SchemaFieldTypeNonSchema>(\n  type: TType,\n): TType extends Schema ? true : false {\n  if (isSchemaLike(type)) return true as any\n  return false as any\n}\n\nexport function isSchemaOrFieldLike(type: any): boolean {\n  if (Array.isArray(type)) {\n    if (type.length !== 1) return false\n    return isSchemaOrFieldLike(type[0])\n  }\n\n  if (isSchemaLike(type)) return true\n  try {\n    if (getFieldValidator(type)) return true\n  } catch {\n    return false\n  }\n\n  return false\n}\n\nexport function getSchemaModelName(type: any): string | null {\n  if (!type) return null\n  if (type.__modelName) return type.__modelName\n  if (type.getModel) return type.getModel().name\n  if (type.getSchema) return type.getSchema().__modelName\n  return null\n}\n\nexport function getSchemaFromAnyOrionForm(type: any): SchemaFieldType {\n  if (!type) return type\n\n  if (type?.[Symbol.metadata]?._getModel) {\n    return type?.[Symbol.metadata]?._getModel().getSchema()\n  }\n  if (type?.getModel) return type.getModel().getSchema()\n\n  if (type.getSchema) {\n    return type.getSchema()\n  }\n\n  // if (objectHasSubObjectWithKey(type, 'type')) return type // ya es un schema\n\n  return type\n}\n\nfunction objectHasSubObjectWithKey(object: any, key: string) {\n  if (!object || typeof object !== 'object') return false\n\n  for (const key1 in object) {\n    const value = object[key1]\n    if (value && typeof value === 'object' && key in value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport function getSchemaWithMetadataFromAnyOrionForm(type: any): SchemaWithMetadata {\n  return getSchemaFromAnyOrionForm(type) as SchemaWithMetadata\n}\n","import getFieldValidator from './getFieldValidator'\nimport fieldTypes from '../../fieldTypes'\nimport Errors from '../../Errors'\nimport {CurrentNodeInfo, SchemaRecursiveNodeTypeExtras} from '../../types/schema'\nimport {FieldType} from '../../fieldType'\nimport {isNil} from 'rambdax'\n\nexport default async function getValidationErrors(\n  params: CurrentNodeInfo,\n): Promise<object | string | void> {\n  const {schema, doc, currentDoc, value, currentSchema, keys, options = {}, args = []} = params\n  const info = {schema, doc, currentDoc, keys, currentSchema, options}\n\n  if (isNil(value)) {\n    if (!currentSchema.optional && !options.omitRequired) {\n      return Errors.REQUIRED\n    }\n  } else {\n    const validatorKey = getFieldValidator(currentSchema.type)\n    const validator =\n      validatorKey === 'custom' ? (currentSchema.type as FieldType) : fieldTypes[validatorKey]\n\n    const error = await validator.validate(value, info, ...args)\n    if (error) {\n      return error\n    }\n  }\n\n  // to not deprecate yet custom field\n  if (currentSchema.custom) currentSchema.validate = currentSchema.custom\n\n  if (currentSchema.validate) {\n    const customError = await currentSchema.validate(value, info, ...args)\n    if (customError) {\n      return customError\n    }\n  }\n\n  const type = currentSchema.type as SchemaRecursiveNodeTypeExtras\n\n  if (type.__validate) {\n    const typeError = await type.__validate(value, info, ...args)\n    if (typeError) {\n      return typeError\n    }\n  }\n\n  return null\n}\n","import {getSchemaFromAnyOrionForm} from '../models'\nimport {CurrentNodeInfo} from '../types/schema'\n\nconst convertOnParam = (info: CurrentNodeInfo, paramName: string) => {\n  if (!info[paramName]) return\n\n  const type = info[paramName].type as any\n  if (!type) return\n\n  // Create a copy of the schema object to avoid mutating readonly objects\n  info[paramName] = {\n    ...info[paramName],\n    type: getSchemaFromAnyOrionForm(type),\n  }\n}\n\nexport const convertTypedSchema = (info: CurrentNodeInfo) => {\n  convertOnParam(info, 'schema')\n  convertOnParam(info, 'currentSchema')\n}\n","import {isType, clone as cloneRambdax} from 'rambdax'\n\nexport function clone<T>(value: T): T {\n  if (isType('Object', value)) {\n    return cloneRambdax(value)\n  }\n\n  if (Array.isArray(value)) {\n    return cloneRambdax(value)\n  }\n\n  return value\n}\n","import getError from './getError'\nimport Errors from '../Errors'\nimport {CurrentNodeInfo, SchemaNode, SchemaRecursiveNodeTypeExtras} from '../types/schema'\nimport {convertTypedSchema} from './convertTypedSchema'\nimport {isNil, type} from 'rambdax'\nimport {clone} from '../clone'\n\nexport default async function doValidation(params: CurrentNodeInfo) {\n  convertTypedSchema(params)\n\n  const {schema, doc, currentDoc, value, currentSchema, keys = [], addError, options, args} = params\n  const info = {\n    schema,\n    doc,\n    currentDoc,\n    value,\n    currentSchema,\n    keys,\n    options,\n    args,\n    addError,\n  }\n\n  const error = await getError(info)\n  if (error) {\n    addError(keys, error)\n    return\n  }\n\n  if (isNil(value)) return\n\n  /**\n   * Deep validation\n   */\n  if (type(currentSchema.type) === 'Object') {\n    const type = currentSchema.type as SchemaRecursiveNodeTypeExtras\n\n    if (type) {\n      if (type.__isFieldType) {\n        return\n      }\n\n      if (typeof type.__skipChildValidation === 'function') {\n        if (await type.__skipChildValidation(value, info)) {\n          return\n        }\n      }\n    }\n\n    const schemaKeys = Object.keys(currentSchema.type).filter(key => !key.startsWith('__'))\n    for (const key of schemaKeys) {\n      const itemSchema = currentSchema.type[key] as SchemaNode\n      const itemValue = value[key]\n      const keyItemKeys = clone(keys)\n      keyItemKeys.push(key)\n      await doValidation({\n        ...info,\n        currentDoc: value,\n        value: itemValue,\n        currentSchema: itemSchema,\n        keys: keyItemKeys,\n      } as any)\n    }\n\n    const documentKeys = Object.keys(value)\n    const notInSchemaKeys = documentKeys.filter(key => !schemaKeys.includes(key))\n    for (const key of notInSchemaKeys) {\n      const keyItemKeys = clone(keys)\n      keyItemKeys.push(key)\n      addError(keyItemKeys, Errors.NOT_IN_SCHEMA)\n    }\n  } else if (Array.isArray(currentSchema.type)) {\n    const itemSchema = currentSchema.type[0]\n    for (let i = 0; i < value.length; i++) {\n      const itemValue = value[i]\n      const keyItemKeys = clone(keys)\n      keyItemKeys.push(i.toString())\n      await doValidation({\n        ...info,\n        currentDoc: value,\n        value: itemValue,\n        currentSchema: {type: itemSchema},\n        keys: keyItemKeys,\n      })\n    }\n  }\n}\n","import Dot from 'dot-object'\n\nconst dot = new Dot('.', false, true, false)\n\nexport default function getValidationErrorsObject(validationErrors: {key: string; code: string}[]) {\n  if (validationErrors.length === 0) return null\n\n  const errors = {}\n\n  for (const validationError of validationErrors) {\n    errors[validationError.key] = validationError.code\n  }\n\n  return dot.dot(errors)\n}\n","import {getSchemaFromAnyOrionForm} from '../models'\nimport {InferSchemaType} from '../types'\nimport {SchemaFieldType} from '../types/schema'\nimport doValidation from './doValidation'\nimport getValidationErrorsObject from './getValidationErrorsObject'\n\nconst defaultOptions = {\n  omitRequired: false,\n}\n\nexport default async function getValidationErrors<TSchema extends SchemaFieldType>(\n  schema: TSchema,\n  doc: InferSchemaType<TSchema>,\n  passedOptions = {},\n  ...args\n) {\n  schema = getSchemaFromAnyOrionForm(schema) as TSchema\n\n  const options = {...defaultOptions, ...passedOptions}\n  const errors: {key: string; code: string}[] = []\n\n  const addError = (keys, code) => {\n    errors.push({\n      key: keys.join('.'),\n      code,\n    })\n  }\n\n  await doValidation({\n    schema,\n    doc,\n    currentDoc: doc,\n    value: doc,\n    currentSchema: {type: schema},\n    addError,\n    options,\n    args,\n  })\n\n  return getValidationErrorsObject(errors)\n}\n","import {getSchemaFromAnyOrionForm, isSchemaLike} from '../models'\nimport {SchemaFieldType} from '../types/schema'\n\n/**\n * Extracts field labels from a schema, creating a flat object with dot-notation keys\n * matching the validation error keys and their corresponding labels.\n */\nexport default function getFieldLabels(\n  schema: SchemaFieldType,\n  currentKey = '',\n): Record<string, string> {\n  schema = getSchemaFromAnyOrionForm(schema)\n\n  const labels: Record<string, string> = {}\n\n  if (!schema || typeof schema !== 'object') {\n    return labels\n  }\n\n  for (const [fieldKey, fieldSchema] of Object.entries(schema)) {\n    // Skip metadata fields\n    if (fieldKey.startsWith('__')) {\n      continue\n    }\n\n    const fullKey = currentKey ? `${currentKey}.${fieldKey}` : fieldKey\n    const field = fieldSchema as any\n\n    // Add the label for this field if it exists\n    if (field?.label && typeof field.label === 'string') {\n      labels[fullKey] = field.label\n    }\n\n    // Recursively handle nested schemas\n    if (field?.type) {\n      let typeToCheck = field.type\n\n      // Handle array types [SomeType]\n      if (Array.isArray(typeToCheck) && typeToCheck.length > 0) {\n        typeToCheck = typeToCheck[0]\n      }\n\n      // If the type is a nested schema, recursively get its labels\n      if (isSchemaLike(typeToCheck)) {\n        const nestedLabels = getFieldLabels(typeToCheck, fullKey)\n        Object.assign(labels, nestedLabels)\n      }\n    }\n  }\n\n  return labels\n}\n","import ValidationError from './ValidationError'\nimport getValidationErrors from './getValidationErrors'\nimport getFieldLabels from './getValidationErrors/getFieldLabels'\nimport {InferSchemaType} from './types/fields'\nimport {SchemaFieldType} from './types/schema'\n\nexport default async function validate<TSchema extends SchemaFieldType>(\n  schema: TSchema,\n  doc: InferSchemaType<TSchema>,\n  passedOptions = {},\n  ...args\n) {\n  const validationErrors = await getValidationErrors(schema, doc, passedOptions, ...args)\n  if (validationErrors) {\n    const labels = getFieldLabels(schema)\n\n    throw new ValidationError(validationErrors, labels)\n  }\n}\n","import getValidationErrors from './getValidationErrors'\nimport {InferSchemaType} from './types'\nimport {Schema} from './types/schema'\n\nexport default async function isValid<TSchema extends Schema>(\n  schema: TSchema,\n  doc: InferSchemaType<TSchema>,\n  passedOptions = {},\n  ...args\n) {\n  const validationErrors = await getValidationErrors(schema, doc, passedOptions, ...args)\n  return !validationErrors\n}\n","import getFieldValidator from './getFieldValidator'\nimport fieldTypes from '../../fieldTypes'\nimport {SchemaFieldType} from '../../types/schema'\nimport {FieldValidatorType} from '../../types/fieldValidators'\nimport {FieldType} from '../../fieldType'\n\nexport default function getFieldType(type: SchemaFieldType | FieldValidatorType | any) {\n  const validatorKey = getFieldValidator(type)\n  const validator = validatorKey === 'custom' ? type : fieldTypes[validatorKey]\n  return validator as FieldType\n}\n","import {type} from 'rambdax'\nimport {SchemaNode} from '../types/schema'\n\nexport default function getObjectNode(schema: Partial<SchemaNode>, value: any): SchemaNode {\n  if (type(schema.type) === 'Object' && type(value) === 'Object') {\n    const result = schema as any\n    return result\n  }\n\n  return null\n}\n","import getFieldType from '../getValidationErrors/getError/getFieldType'\nimport {isNil} from 'rambdax'\nimport {CurrentNodeInfo, SchemaFieldType, SchemaNode, SchemaMetadata, Schema} from '../types/schema'\nimport {FieldValidatorType} from '../types/fieldValidators'\nimport getObjectNode from './getObjectNode'\n\nexport default async function cleanType<TSchema extends Schema>(\n  type: SchemaFieldType | FieldValidatorType,\n  fieldSchema: Partial<SchemaNode>,\n  value: any,\n  info: CurrentNodeInfo<TSchema>,\n  ...args: any[]\n): Promise<any> {\n  info.type = fieldSchema.type\n  if (!info.type) {\n    throw new Error('Cleaning field with no type')\n  }\n\n  const {clean: rootFieldClean} = await getFieldType(type)\n\n  if (rootFieldClean && !isNil(value)) {\n    value = await rootFieldClean(value, info, ...args)\n  }\n\n  let needReClean = false\n\n  const objectTypeSchema = getObjectNode(fieldSchema, value)\n  if (objectTypeSchema && (objectTypeSchema.type as SchemaMetadata).__clean) {\n    needReClean = true\n    value = await (objectTypeSchema.type as SchemaMetadata).__clean(value, info, ...args)\n  }\n\n  const {defaultValue} = fieldSchema\n  if (isNil(value) && !isNil(defaultValue)) {\n    needReClean = true\n    if (typeof defaultValue === 'function') {\n      value = await defaultValue(info, ...args)\n    } else {\n      value = defaultValue\n    }\n  }\n\n  const {clean} = fieldSchema\n  if (clean) {\n    needReClean = true\n    value = await clean(value, info, ...args)\n  }\n\n  if (needReClean && rootFieldClean && !isNil(value)) {\n    value = await rootFieldClean(value, info, ...args)\n  }\n\n  return value\n}\n","import {isNil} from 'rambdax'\nimport cleanType from './cleanType'\nimport {CurrentNodeInfo, SchemaNode} from '../types/schema'\nimport getObjectNode from './getObjectNode'\nimport {convertTypedSchema} from '../getValidationErrors/convertTypedSchema'\n\nconst cleanObjectFields = async ({\n  schema,\n  value,\n  ...other\n}: {\n  schema: SchemaNode\n  value: object\n}): Promise<any> => {\n  const keys = Object.keys(schema.type).filter(key => !key.startsWith('__'))\n  const newDoc: object = {}\n\n  for (const key of keys) {\n    try {\n      const cleanOptions = {\n        ...other,\n        schema: schema.type[key],\n        value: value[key],\n        currentDoc: value,\n      }\n      const newValue = await clean(cleanOptions)\n      if (newValue !== undefined) {\n        newDoc[key] = newValue\n      }\n    } catch (error) {\n      throw new Error(`Error cleaning field ${key}, error: ${error.message}`)\n    }\n  }\n  return newDoc\n}\n\nconst cleanArrayItems = async ({\n  schema,\n  value,\n  ...other\n}: {\n  schema: Partial<SchemaNode>\n  value: any\n}): Promise<any> => {\n  // clean array items\n\n  const schemaType = schema.type[0]\n\n  const promises = value.map(async (item: any) => {\n    const newValue = await clean({\n      ...other,\n      schema: {\n        type: schemaType,\n      },\n      value: item,\n      currentDoc: value,\n    })\n    return newValue\n  })\n\n  const result = await Promise.all(promises)\n  return result.filter(value => value !== undefined)\n}\n\nfunction getArrayNode(\n  schema: Partial<SchemaNode>,\n  value: any | Array<any>,\n): SchemaNode | undefined {\n  if (Array.isArray(schema.type) && !isNil(value)) {\n    const result = schema as SchemaNode\n    return result\n  }\n\n  return null\n}\n\nconst clean = async (info: CurrentNodeInfo): Promise<any> => {\n  convertTypedSchema(info)\n\n  const {schema, args = [], value} = info\n\n  const currSchema: SchemaNode =\n    schema.type === undefined ? ({type: schema} as SchemaNode) : (schema as SchemaNode)\n\n  const objectSchema = getObjectNode(currSchema, value)\n  if (objectSchema) {\n    const newDoc = await cleanObjectFields({\n      ...info,\n      schema: objectSchema,\n      value: value as object,\n    })\n    const result = await cleanType('plainObject', objectSchema, newDoc, info, ...args)\n    return result\n  }\n\n  const arraySchema = getArrayNode(currSchema, value)\n\n  if (arraySchema) {\n    let updatedValue = value\n    if (!Array.isArray(value)) {\n      updatedValue = [value]\n    }\n\n    const newDoc = await cleanArrayItems({\n      ...info,\n      schema: arraySchema,\n      value: updatedValue,\n    })\n    const result = await cleanType('array', arraySchema, newDoc, info, ...args)\n    return result\n  }\n\n  const result = await cleanType(currSchema.type, currSchema, value, info, ...args)\n  return result\n}\n\nexport default clean\n","import {getSchemaFromAnyOrionForm} from '../models'\nimport {InferSchemaType} from '../types'\nimport {CurrentNodeInfoOptions, SchemaFieldType} from '../types/schema'\nimport recursiveClean from './recursiveClean'\n\nconst defaultOptions = {\n  autoConvert: true,\n  filter: true,\n  trimStrings: true,\n  removeEmptyStrings: false,\n}\n\nexport default async function clean<TSchema extends SchemaFieldType>(\n  schema: TSchema,\n  doc: InferSchemaType<TSchema>,\n  opts: CurrentNodeInfoOptions = {},\n  ...args\n): Promise<InferSchemaType<TSchema>> {\n  if (!doc) return doc\n  schema = getSchemaFromAnyOrionForm(schema) as TSchema\n\n  const options = {...defaultOptions, ...opts}\n  const params = {\n    schema: {type: schema},\n    value: doc,\n    doc: options.forceDoc || doc,\n    currentDoc: doc,\n    options,\n    args,\n  }\n\n  const cleanedResult = await recursiveClean(params as any)\n  return cleanedResult\n}\n","import {Schema, SchemaNode} from '..'\nimport {isType, isNil} from 'rambdax'\n\nconst dotGet = function dotGet(object: SchemaNode, path: string) {\n  if (path === '') return object\n\n  const pathParts = path.split('.')\n  const first = pathParts.shift()\n  const remainingPath = pathParts.join('.')\n\n  const levelObject = object.type\n\n  if (first === '$' || /^[0-9]+$/.test(first)) {\n    return dotGet({type: levelObject[0]}, remainingPath)\n  }\n\n  if (isType('Object', levelObject[first])) {\n    return dotGet(levelObject[first], remainingPath)\n  }\n\n  if (levelObject === 'blackbox') {\n    return {type: 'blackbox', optional: true, isBlackboxChild: true}\n  }\n\n  return null\n}\n\nexport default function (schema: Schema, path: string) {\n  if (isNil(schema)) {\n    throw new Error('You need to pass a schema')\n  }\n  return dotGet({type: schema}, path)\n}\n","import dotGetSchema from './validateKey/dotGetSchema'\n\nexport default dotGetSchema\n","import clean from './clean'\nimport dotGetSchema from './dotGetSchema'\n\nconst defaultOptions = {\n  filter: true,\n}\n\nexport default async function (schema, key, value, passedOptions = {}, ...args) {\n  const options = {...defaultOptions, ...passedOptions}\n  const keySchema = dotGetSchema(schema, key)\n\n  if (!keySchema) {\n    if (options.filter) {\n      return\n    } else {\n      return value\n    }\n  }\n\n  const result = await clean({clean: keySchema as any}, {clean: value}, options, ...args)\n  return result.clean\n}\n","import dotGetSchema from './dotGetSchema'\nimport getValidationErrors from '../getValidationErrors'\nimport Errors from '../Errors'\nimport {CurrentNodeInfoOptions, Schema} from '..'\n\nconst defaultOptions = {\n  filter: false,\n}\n\nexport default async function (\n  schema: Schema,\n  key: string,\n  value: any,\n  passedOptions: CurrentNodeInfoOptions = {},\n  ...args\n) {\n  const options: CurrentNodeInfoOptions = {...defaultOptions, ...passedOptions}\n  const keySchema = dotGetSchema(schema, key)\n\n  if (!keySchema) {\n    if (options.filter) {\n      return Errors.NOT_IN_SCHEMA\n    }\n    return null\n  }\n\n  if (keySchema.isBlackboxChild) {\n    return null\n  }\n\n  const result = await getValidationErrors(\n    {validate: keySchema as any},\n    {validate: value},\n    options,\n    ...args,\n  )\n\n  if (!result) return null\n\n  return result.validate\n}\n","import fieldType, {FieldType} from '../fieldType'\nimport Errors from '../Errors'\n\nexport default function createEnum<const TValues extends readonly string[]>(\n  name: string,\n  values: TValues,\n): FieldType<TValues[number]> {\n  return fieldType({\n    name: 'enum',\n    meta: {\n      enumName: name,\n      enumValues: values,\n    },\n    toGraphQLType: GraphQL => {\n      global.GraphQLEnums = global.GraphQLEnums || {}\n\n      global.GraphQLEnums[name] =\n        global.GraphQLEnums[name] ||\n        new GraphQL.GraphQLEnumType({\n          name,\n          values: values.reduce((result, value) => {\n            result[value] = {value}\n            return result\n          }, {}),\n        })\n\n      return global.GraphQLEnums[name]\n    },\n    validate(value: string, {currentSchema}) {\n      if (typeof value !== 'string') return Errors.NOT_A_STRING\n\n      if (!values.includes(value)) {\n        return Errors.NOT_AN_ALLOWED_VALUE\n      }\n\n      if (value === '' && !currentSchema.optional) {\n        return Errors.REQUIRED\n      }\n    },\n    clean(value, {options: {autoConvert, trimStrings, removeEmptyStrings}}) {\n      if (autoConvert) {\n        value = String(value)\n      }\n\n      if (trimStrings) {\n        value = value.trim()\n      }\n\n      if (removeEmptyStrings && value === '') {\n        return undefined\n      }\n\n      return value\n    },\n  })\n}\n","import {createEnum} from '..'\nimport {FieldType} from '../fieldType'\nimport {Blackbox, Schema, SchemaMetaFieldTypeSingleNonSchema, TypedSchemaOnSchema} from './schema'\n\ntype InferSchemaTypeForFieldType<T> =\n  // field type with setted _tsFieldType\n  T extends {__tsFieldType: infer U}\n    ? U\n    : // typed as strings\n      T extends 'string'\n      ? string\n      : T extends 'date'\n        ? Date\n        : T extends 'integer'\n          ? number\n          : T extends 'number'\n            ? number\n            : T extends 'ID'\n              ? string\n              : T extends 'boolean'\n                ? boolean\n                : T extends 'email'\n                  ? string\n                  : T extends 'blackbox'\n                    ? Blackbox\n                    : T extends 'any'\n                      ? any\n                      : // typed as object constructors (Like String, Number, Boolean, Date)\n                        T extends String\n                        ? string\n                        : T extends Number\n                          ? number\n                          : T extends Boolean\n                            ? boolean\n                            : T extends Date\n                              ? Date\n                              : T extends StringConstructor\n                                ? string\n                                : T extends NumberConstructor\n                                  ? number\n                                  : T extends BooleanConstructor\n                                    ? boolean\n                                    : T extends DateConstructor\n                                      ? Date\n                                      : // if is array, return infer the first element recursively\n                                        T extends Array<infer U>\n                                        ? InferSchemaTypeForFieldType<U>[]\n                                        : // if is object, asume it's a schema and infer the type of the object\n                                          T extends Record<string, any>\n                                          ? InferSchemaTypeForSchema<T>\n                                          : T\n\ntype SchemaKeysNotOfSchemaItems = '__isFieldType' | '__GraphQLType' | '__skipChildValidation'\n\ntype NodeIsOptional<TNode> = TNode extends {optional: true} ? true : false\n\n// esto hace que haya un infinity loopp\n// type NodeIsOptional<TNode> = TNode extends {optional: true}\n//   ? true\n//   : TNode extends {defaultValue: any}\n//     ? true\n//     : false\n\ntype WithoutNotSchemaItems<T extends Record<string, any>> = T extends {\n  [key in SchemaKeysNotOfSchemaItems]: any\n} & Record<string, any>\n  ? Omit<T, SchemaKeysNotOfSchemaItems>\n  : T\n\ntype InferSchemaTypeForSchema<TSchema extends Record<string, any>> = WithoutNotSchemaItems<\n  {\n    -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true\n      ? never\n      : K]: InferSchemaType<TSchema[K]['type']>\n  } & {\n    -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true\n      ? K\n      : never]?: InferSchemaType<TSchema[K]['type']>\n  }\n>\n\n// is a record with a child item that has type in its type\ntype IsPossiblyASchema<TType> = TType extends FieldType\n  ? false\n  : TType extends Record<string, any>\n    ? keyof {\n        [K in keyof TType as 'type' extends keyof TType[K] ? K : never]: TType[K]\n      } extends never\n      ? false\n      : true\n    : false\n\ntype AClass<T = any> = abstract new (...args: any) => T\n\n/**\n * Returns the type of the schema\n */\nexport type InferSchemaType<TType> = TType extends {__isModel: true; type: infer U}\n  ? InferSchemaTypeForSchema<U>\n  : TType extends SchemaMetaFieldTypeSingleNonSchema\n    ? InferSchemaTypeForFieldType<TType>\n    : TType extends AClass<infer U>\n      ? U\n      : IsPossiblyASchema<TType> extends true\n        ? InferSchemaTypeForSchema<TType>\n        : InferSchemaTypeForFieldType<TType>\n\n/**\n * Returns the type of the schema but only if its a schema\n */\nexport type StrictInferSchemaType<TSchema extends Schema> = InferSchemaTypeForSchema<TSchema>\n/**\n * Returns the type of the schema but only if its a schema\n */\nexport type InferSchemaTypeFromTypedSchema<TTypedSchema extends TypedSchemaOnSchema> = TTypedSchema\n\nconst subSchema = {\n  name: {\n    type: String,\n  },\n}\n\nconst schema = {\n  filter: {\n    type: String,\n  },\n  sub: {\n    type: subSchema,\n  },\n  gender: {\n    type: createEnum('gender', ['male', 'female']),\n  },\n  page: {\n    type: 'integer',\n    defaultValue: 1,\n    min: 1,\n  },\n  limit: {\n    type: 'integer',\n    defaultValue: 0,\n    min: 0,\n    max: 200,\n  },\n  sortBy: {\n    type: String,\n    optional: true,\n  },\n  sortType: {\n    type: String,\n    allowedValues: ['asc', 'desc'],\n    optional: true,\n  },\n} as const\n\ntype _ = InferSchemaType<typeof schema>\n\nconst _a: _ = {\n  filter: '123',\n  gender: 'male',\n  sub: {\n    name: '123',\n  },\n  limit: 1,\n  page: 1,\n}\n\ntype _2 = NodeIsOptional<(typeof schema)['sortType']>\n","import {InferSchemaType, SchemaFieldType} from './types'\nimport clean from './clean'\nimport validate from './validate'\n\nexport async function cleanAndValidate<TSchema extends SchemaFieldType>(\n  schema: TSchema,\n  doc: InferSchemaType<TSchema>,\n): Promise<InferSchemaType<TSchema>> {\n  const cleaned = await clean(schema, doc)\n  await validate(schema, cleaned)\n  return cleaned\n}\n","// import {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\n\nimport {Schema} from '../types'\n\n/**\n * Assigns a name to a schema for GraphQL type generation.\n *\n * This function associates a name with a schema object by setting an internal\n * `__modelName` property. This name is used when generating GraphQL types.\n *\n * @param name - The name to assign to the schema\n * @param schema - The schema object to name\n * @returns The same schema object with the internal name property added\n *\n * Note: The schema object is modified in-place, so the name will persist\n * even if you don't use the returned value.\n */\nexport function schemaWithName<TModelName extends string, TSchema extends Schema>(\n  name: TModelName,\n  schema: TSchema,\n): TSchema {\n  // @ts-ignore Internal property not included in type definition\n  schema.__modelName = name\n  return schema\n}\n","import {isEmpty, pick} from 'rambdax'\nimport {Schema, SchemaNode} from './types'\n\nexport type CloneSchemaOptions<\n  TSchema extends Schema,\n  TExtendFields extends Schema | undefined = undefined,\n  TPickFields extends (keyof TSchema)[] | undefined = undefined,\n  TOmitFields extends (keyof TSchema)[] | undefined = undefined,\n> = {\n  /**\n   * The schema to clone\n   */\n  schema: TSchema\n  /**\n   * The name of the cloned schema\n   */\n  name?: string\n  /**\n   * The schema to extend the cloned schema with\n   */\n  extendSchema?: TExtendFields\n  /**\n   * A function to map the fields of the cloned schema.\n   * Warning: This function will not be applied to the typescript types of this schema.\n   */\n  mapFields?: (field: TSchema[keyof TSchema], key: keyof TSchema) => SchemaNode\n  /**\n   * The fields to pick from the cloned schema\n   */\n  pickFields?: TPickFields\n  /**\n   * The fields to omit from the cloned schema\n   */\n  omitFields?: TOmitFields\n}\n\n// TExtendFields should replace TSchema if present\ntype ExtendFields<\n  TSchema extends Schema,\n  TExtendFields extends Schema | undefined,\n> = TExtendFields extends undefined\n  ? TSchema\n  : {\n      [key in keyof (TSchema & TExtendFields)]: key extends keyof TExtendFields\n        ? TExtendFields[key]\n        : key extends keyof TSchema\n          ? TSchema[key]\n          : never\n    }\n\ntype PickOrOmit<\n  TSchema extends Schema,\n  TPickFields extends (keyof TSchema)[] | undefined = undefined,\n  TOmitFields extends (keyof TSchema)[] | undefined = undefined,\n> = TPickFields extends undefined\n  ? TOmitFields extends undefined\n    ? TSchema\n    : Omit<TSchema, TOmitFields[number]>\n  : Pick<TSchema, TPickFields[number]>\n\nexport type ClonedSchema<\n  TSchema extends Schema,\n  TExtendFields extends Schema | undefined = undefined,\n  TPickFields extends (keyof TSchema)[] | undefined = undefined,\n  TOmitFields extends (keyof TSchema)[] | undefined = undefined,\n> = ExtendFields<PickOrOmit<TSchema, TPickFields, TOmitFields>, TExtendFields>\n\nexport function cloneSchema<\n  TSchema extends Schema,\n  TExtendFields extends Schema | undefined = undefined,\n  TPickFields extends (keyof TSchema)[] | undefined = undefined,\n  TOmitFields extends (keyof TSchema)[] | undefined = undefined,\n>(\n  options: CloneSchemaOptions<TSchema, TExtendFields, TPickFields, TOmitFields>,\n): ClonedSchema<TSchema, TExtendFields, TPickFields, TOmitFields> {\n  const {schema, extendSchema, mapFields, pickFields, omitFields} = options\n\n  const originalMetaKeys = Object.keys(schema).filter(key => key.startsWith('__'))\n  const originalMetaFields = pick(originalMetaKeys, schema)\n\n  const cloned = {...schema} as any\n\n  if (pickFields?.length) {\n    for (const key in cloned) {\n      if (!pickFields.includes(key)) {\n        delete cloned[key]\n      }\n    }\n  }\n\n  if (omitFields?.length) {\n    for (const key in cloned) {\n      if (omitFields.includes(key)) {\n        delete cloned[key]\n      }\n    }\n  }\n\n  if (!isEmpty(extendSchema)) {\n    for (const key in extendSchema) {\n      cloned[key] = extendSchema[key]\n    }\n  }\n\n  if (mapFields) {\n    for (const key in cloned) {\n      cloned[key] = mapFields(cloned[key], key)\n    }\n  }\n\n  for (const key of originalMetaKeys) {\n    if (originalMetaFields[key]) {\n      cloned[key] = originalMetaFields[key]\n    }\n  }\n\n  if (options.name) {\n    cloned.__modelName = options.name\n  }\n\n  return cloned\n}\n"],"mappings":"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","names":["clean","dotGetSchema_default","getValidationErrors","validate","clean","type","type","schema","type","type","clone","schema","type","clone","Dot","getValidationErrors","schema","schema","schema","getValidationErrors","schema","getValidationErrors","type","schema","type","clean","schema","value","result","defaultOptions","clean","schema","dotGet","schema","dotGetSchema_default","defaultOptions","schema","dotGetSchema_default","clean","defaultOptions","schema","getValidationErrors","schema","clean","schema","schema"]}