@orion-js/schema 4.0.0-next.7 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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/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/isNil.js","../src/ValidationError.ts","../src/getSchemaFromTypedSchema.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/getValidationErrors/getError/index.ts","../src/getValidationErrors/convertTypedSchema.ts","../src/clone.ts","../src/getValidationErrors/doValidation.ts","../src/getValidationErrors/getValidationErrorsObject.ts","../src/getValidationErrors/index.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/models.ts","../src/schemaWithName/index.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 './fieldType'\nexport * from './schemaWithName'\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","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","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: object\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\nexport default class ValidationError extends Error {\n public code: string\n public isValidationError: boolean\n public isOrionError: boolean\n public validationErrors: object\n\n constructor(validationErrors: object) {\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\n this.getInfo\n }\n\n public getInfo = (): ValidationErrorInfo => {\n return {\n error: 'validationError',\n message: 'Validation Error',\n validationErrors: this.validationErrors,\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 return new ValidationError(newErrors)\n }\n}\n","import {Schema} from '.'\n\n// @ts-ignore polyfill for Symbol.metadata // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#decorator-metadata\nSymbol.metadata ??= Symbol('Symbol.metadata')\n\nexport const getSchemaFromTypedSchema = (schema: Schema | Function): Schema => {\n const item = schema as any\n\n if (!schema[Symbol.metadata]) return item\n if (!schema[Symbol.metadata]._isTypedSchema) return item\n\n return schema[Symbol.metadata]._getModel().getSchema()\n}\n","import {CleanFunction, 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 __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\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')\n }\n\n return type as FieldValidatorType\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 {getSchemaFromTypedSchema} from '../getSchemaFromTypedSchema'\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 info[paramName].type = getSchemaFromTypedSchema(type)\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 = {schema, doc, currentDoc, value, currentSchema, keys, options, args, addError}\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 })\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 {getSchemaFromTypedSchema} from '../getSchemaFromTypedSchema'\nimport {Schema} from '../types/schema'\nimport doValidation from './doValidation'\nimport getValidationErrorsObject from './getValidationErrorsObject'\n\nconst defaultOptions = {\n omitRequired: false,\n}\n\nexport default async function getValidationErrors(\n schema: Schema | Function,\n doc: any,\n passedOptions = {},\n ...args\n) {\n schema = getSchemaFromTypedSchema(schema)\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 ValidationError from './ValidationError'\nimport getValidationErrors from './getValidationErrors'\nimport {InferSchemaType} from './types/fields'\nimport {Schema} from './types/schema'\n\nexport default async function validate<TSchema extends Schema = Schema>(\n schema: TSchema | Function,\n doc: InferSchemaType<TSchema>,\n passedOptions = {},\n ...args\n) {\n const validationErrors = await getValidationErrors(schema, doc, passedOptions, ...args)\n if (validationErrors) {\n throw new ValidationError(validationErrors)\n }\n}\n","import getValidationErrors from './getValidationErrors'\nimport {Schema} from './types/schema'\n\nexport default async function isValid(schema: Schema, doc: any, passedOptions = {}, ...args) {\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 | void {\n if (type(schema.type) === 'Object' && type(value) === 'Object') {\n const result = schema as SchemaNode\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} from '../types/schema'\nimport {FieldValidatorType} from '../types/fieldValidators'\nimport getObjectNode from './getObjectNode'\n\nexport default async function cleanType(\n type: SchemaFieldType | FieldValidatorType,\n fieldSchema: Partial<SchemaNode>,\n value: any,\n info: CurrentNodeInfo,\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 {getSchemaFromTypedSchema} from '../getSchemaFromTypedSchema'\nimport {InferSchemaType} from '../types'\nimport {CurrentNodeInfoOptions, Schema} 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 Schema = Schema>(\n schema: TSchema | Function,\n doc: InferSchemaType<TSchema>,\n opts: CurrentNodeInfoOptions = {},\n ...args\n): Promise<InferSchemaType<TSchema>> {\n if (!doc) return doc\n schema = getSchemaFromTypedSchema(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)\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]> & {type: TValues[number]} {\n return {\n type: values[0],\n ...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}\n","import getFieldValidator from './getValidationErrors/getError/getFieldValidator'\nimport {Schema, 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 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): Schema {\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 (type.getSchema) {\n return type.getSchema()\n }\n\n if (objectHasSubObjectWithKey(type, 'type')) return type // ya es un schema\n\n return null\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 {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"],"mappings":"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","names":["clean","dotGetSchema_default","getValidationErrors","validate","clean","type","type","type","clone","type","clone","Dot","getValidationErrors","getValidationErrors","getValidationErrors","type","type","clean","value","result","defaultOptions","clean","dotGet","dotGetSchema_default","defaultOptions","dotGetSchema_default","clean","defaultOptions","getValidationErrors","type"]}
1
+ {"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/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/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/getSchemaFromTypedSchema.ts","../src/getValidationErrors/convertTypedSchema.ts","../src/clone.ts","../src/getValidationErrors/doValidation.ts","../src/getValidationErrors/getValidationErrorsObject.ts","../src/getValidationErrors/index.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"],"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'\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","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","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: object\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\nexport default class ValidationError extends Error {\n public code: string\n public isValidationError: boolean\n public isOrionError: boolean\n public validationErrors: object\n\n constructor(validationErrors: object) {\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\n this.getInfo\n }\n\n public getInfo = (): ValidationErrorInfo => {\n return {\n error: 'validationError',\n message: 'Validation Error',\n validationErrors: this.validationErrors,\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 return new ValidationError(newErrors)\n }\n}\n","import {CleanFunction, 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 __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\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 {Schema, SchemaFieldType} from '.'\n\n// @ts-ignore polyfill for Symbol.metadata // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#decorator-metadata\nSymbol.metadata ??= Symbol('Symbol.metadata')\n\nexport const getSchemaFromTypedSchema = (schema: Schema | Function | SchemaFieldType): Schema => {\n const item = schema as any\n\n if (!schema[Symbol.metadata]) return item\n if (!schema[Symbol.metadata]._isTypedSchema) return item\n\n return schema[Symbol.metadata]._getModel().getSchema()\n}\n","import {getSchemaFromTypedSchema} from '../getSchemaFromTypedSchema'\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 info[paramName].type = getSchemaFromTypedSchema(type)\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 ValidationError from './ValidationError'\nimport getValidationErrors from './getValidationErrors'\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 throw new ValidationError(validationErrors)\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\nexport type Simplifed<T> = {\n [K in keyof T]: T[K] extends object ? Simplifed<T[K]> : T[K]\n}\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>> = Simplifed<\n 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\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"],"mappings":"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","names":["clean","dotGetSchema_default","getValidationErrors","validate","clean","type","type","schema","type","schema","type","clone","schema","type","clone","Dot","getValidationErrors","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"]}
package/dist/index.d.cts CHANGED
@@ -1,20 +1,3 @@
1
- interface FieldTypeOpts<TType = any> {
2
- name: string;
3
- validate?: ValidateFunction<TType>;
4
- clean?: CleanFunction<TType>;
5
- toGraphQLType?: (GraphQL: any) => any;
6
- meta?: any;
7
- }
8
- interface FieldType<TType = any> {
9
- name: string;
10
- validate: ValidateFunction;
11
- clean: CleanFunction;
12
- meta?: any;
13
- toGraphQLType?: (GraphQL: any) => any;
14
- __tsFieldType: TType;
15
- __isFieldType: boolean;
16
- }
17
-
18
1
  type Constructor<T> = new (...args: any[]) => T;
19
2
  type Blackbox = {
20
3
  [name: string]: any;
@@ -23,8 +6,10 @@ type FieldTypesList = 'string' | 'date' | 'integer' | 'number' | 'ID' | 'boolean
23
6
  type AClass$1 = abstract new (...args: any) => any;
24
7
  type TypedSchemaOnSchema = AClass$1;
25
8
  type ConstructorsTypesList = Constructor<String> | Constructor<Number> | Constructor<Boolean> | Constructor<Date> | StringConstructor | NumberConstructor | BooleanConstructor | DateConstructor | String | Number | Boolean | Date;
26
- type SchemaMetaFieldTypeSingle = FieldTypesList | ConstructorsTypesList | Schema | FieldType | TypedSchemaOnSchema;
9
+ type SchemaMetaFieldTypeSingleNonSchema = FieldTypesList | ConstructorsTypesList | FieldType;
10
+ type SchemaMetaFieldTypeSingle = SchemaMetaFieldTypeSingleNonSchema | Schema | TypedSchemaOnSchema;
27
11
  type SchemaFieldType = SchemaMetaFieldTypeSingle | SchemaMetaFieldTypeSingle[];
12
+ type SchemaFieldTypeNonSchema = SchemaMetaFieldTypeSingleNonSchema | SchemaMetaFieldTypeSingleNonSchema[];
28
13
  type ValidateFunction<TType = any> = (value: TType, info?: Partial<CurrentNodeInfo>, ...args: any[]) => object | string | null | undefined | void | Promise<object | string | null | undefined | void>;
29
14
  type CleanFunction<TType = any> = (value: TType, info?: Partial<CurrentNodeInfo>, ...args: any[]) => TType | Promise<TType>;
30
15
  type SchemaRecursiveNodeTypeExtras = {
@@ -104,22 +89,22 @@ interface CurrentNodeInfoOptions {
104
89
  forceDoc?: any;
105
90
  omitRequired?: boolean;
106
91
  }
107
- interface CurrentNodeInfo<TType extends SchemaFieldType = any> {
92
+ interface CurrentNodeInfo {
108
93
  /**
109
94
  * The global schema, prefaced by {type: {...}} to be compatible with subschemas
110
95
  * Sometimes it's given without {type: {...}}. TODO: Normalize this.
111
96
  */
112
- schema?: SchemaNode | Schema;
97
+ schema?: SchemaFieldType;
113
98
  /**
114
99
  * The current node subschema
115
100
  */
116
- currentSchema?: Partial<SchemaNode<TType>>;
117
- value: TType;
101
+ currentSchema?: Partial<SchemaNode<SchemaFieldType>>;
102
+ value: InferSchemaType<SchemaFieldType>;
118
103
  doc?: any;
119
104
  currentDoc?: any;
120
105
  options?: CurrentNodeInfoOptions;
121
106
  args?: any[];
122
- type?: TType;
107
+ type?: SchemaFieldType;
123
108
  keys?: string[];
124
109
  addError?: (keys: string[], code: string | object) => void;
125
110
  }
@@ -140,41 +125,70 @@ type SchemaMetadata = {
140
125
  type Schema = {
141
126
  [K: string]: SchemaNode;
142
127
  };
128
+ type SingleLevelSchema = {
129
+ [K: string]: SchemaNode<SchemaFieldTypeNonSchema>;
130
+ };
131
+ type SchemaInAnyOrionForm = Schema | TypedSchemaOnSchema;
143
132
  type SchemaWithMetadata = {
144
133
  [K: string]: SchemaNode | SchemaMetadata[keyof SchemaMetadata];
145
134
  } & SchemaMetadata;
146
135
 
136
+ interface FieldTypeOpts<TType = any> {
137
+ name: string;
138
+ validate?: ValidateFunction<TType>;
139
+ clean?: CleanFunction<TType>;
140
+ toGraphQLType?: (GraphQL: any) => any;
141
+ meta?: any;
142
+ }
143
+ interface FieldType<TType = any> {
144
+ name: string;
145
+ validate: ValidateFunction;
146
+ clean: CleanFunction;
147
+ meta?: any;
148
+ toGraphQLType?: (GraphQL: any) => any;
149
+ __tsFieldType: TType;
150
+ __isFieldType: boolean;
151
+ }
152
+
147
153
  type InferSchemaTypeForFieldType<T> = T extends {
148
154
  __tsFieldType: infer U;
149
155
  } ? U : T extends 'string' ? string : T extends 'date' ? Date : T extends 'integer' ? number : T extends 'number' ? number : T extends 'ID' ? string : T extends 'boolean' ? boolean : T extends 'email' ? string : T extends 'blackbox' ? Blackbox : T extends 'any' ? any : T extends String ? string : T extends Number ? number : T extends Boolean ? boolean : T extends Date ? Date : T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends DateConstructor ? Date : T extends Array<infer U> ? InferSchemaTypeForFieldType<U>[] : T extends Record<string, any> ? InferSchemaTypeForSchema<T> : T;
150
- type SchemaKeysNotOfSchemaItems = keyof SchemaRecursiveNodeTypeExtras;
156
+ type SchemaKeysNotOfSchemaItems = '__isFieldType' | '__GraphQLType' | '__skipChildValidation';
151
157
  type NodeIsOptional<TNode> = TNode extends {
152
158
  optional: true;
153
- } ? true : TNode extends {
154
- defaultValue: any;
155
159
  } ? true : false;
156
- type InferSchemaTypeForSchema<TSchema extends Record<string, any>> = Omit<{
157
- -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true ? never : K]: InferSchemaTypeForFieldType<TSchema[K]['type']>;
160
+ type Simplifed<T> = {
161
+ [K in keyof T]: T[K] extends object ? Simplifed<T[K]> : T[K];
162
+ };
163
+ type WithoutNotSchemaItems<T extends Record<string, any>> = T extends {
164
+ [key in SchemaKeysNotOfSchemaItems]: any;
165
+ } & Record<string, any> ? Omit<T, SchemaKeysNotOfSchemaItems> : T;
166
+ type InferSchemaTypeForSchema<TSchema extends Record<string, any>> = Simplifed<WithoutNotSchemaItems<{
167
+ -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true ? never : K]: InferSchemaType<TSchema[K]['type']>;
158
168
  } & {
159
- -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true ? K : never]?: InferSchemaTypeForFieldType<TSchema[K]['type']>;
160
- }, SchemaKeysNotOfSchemaItems>;
161
- type IsPossiblyASchema<TType> = TType extends Record<string, any> ? keyof {
169
+ -readonly [K in keyof TSchema as NodeIsOptional<TSchema[K]> extends true ? K : never]?: InferSchemaType<TSchema[K]['type']>;
170
+ }>>;
171
+ type IsPossiblyASchema<TType> = TType extends FieldType ? false : TType extends Record<string, any> ? keyof {
162
172
  [K in keyof TType as 'type' extends keyof TType[K] ? K : never]: TType[K];
163
173
  } extends never ? false : true : false;
164
- type AClass = abstract new (...args: any) => any;
174
+ type AClass<T = any> = abstract new (...args: any) => T;
165
175
  /**
166
176
  * Returns the type of the schema
167
177
  */
168
178
  type InferSchemaType<TType> = TType extends {
169
179
  __isModel: true;
170
180
  type: infer U;
171
- } ? InferSchemaTypeForSchema<U> : TType extends AClass ? InstanceType<TType> : IsPossiblyASchema<TType> extends true ? InferSchemaTypeForSchema<TType> : InferSchemaTypeForFieldType<TType>;
181
+ } ? InferSchemaTypeForSchema<U> : TType extends SchemaMetaFieldTypeSingleNonSchema ? InferSchemaTypeForFieldType<TType> : TType extends AClass<infer U> ? U : IsPossiblyASchema<TType> extends true ? InferSchemaTypeForSchema<TType> : InferSchemaTypeForFieldType<TType>;
172
182
  /**
173
183
  * Returns the type of the schema but only if its a schema
174
184
  */
175
185
  type StrictInferSchemaType<TSchema extends Schema> = InferSchemaTypeForSchema<TSchema>;
186
+ /**
187
+ * Returns the type of the schema but only if its a schema
188
+ */
189
+ type InferSchemaTypeFromTypedSchema<TTypedSchema extends TypedSchemaOnSchema> = TTypedSchema;
176
190
 
177
- declare function validate<TSchema extends Schema = Schema>(schema: TSchema | Function, doc: InferSchemaType<TSchema>, passedOptions?: {}, ...args: any[]): Promise<void>;
191
+ declare function validate<TSchema extends SchemaFieldType>(schema: TSchema, doc: InferSchemaType<TSchema>, passedOptions?: {}, ...args: any[]): Promise<void>;
178
192
 
179
193
  interface ValidationErrorInfo {
180
194
  error: string;
@@ -191,10 +205,6 @@ declare class ValidationError extends Error {
191
205
  prependKey: (prepend: any) => ValidationError;
192
206
  }
193
207
 
194
- declare function getValidationErrors(schema: Schema | Function, doc: any, passedOptions?: {}, ...args: any[]): Promise<any>;
195
-
196
- declare function isValid(schema: Schema, doc: any, passedOptions?: {}, ...args: any[]): Promise<boolean>;
197
-
198
208
  declare const _default: {
199
209
  array: FieldType<any[]>;
200
210
  plainObject: FieldType<Blackbox>;
@@ -211,11 +221,15 @@ declare const _default: {
211
221
 
212
222
  type FieldValidatorType = keyof typeof _default | 'custom' | 'plainObject';
213
223
 
214
- declare function getFieldType(type: SchemaFieldType | FieldValidatorType | any): FieldType;
215
-
216
224
  type MergeSchemas<SchemaA extends Schema, SchemaB extends Schema> = SchemaA & SchemaB;
217
225
 
218
- declare function clean<TSchema extends Schema = Schema>(schema: TSchema | Function, doc: InferSchemaType<TSchema>, opts?: CurrentNodeInfoOptions, ...args: any[]): Promise<InferSchemaType<TSchema>>;
226
+ declare function getValidationErrors<TSchema extends SchemaFieldType>(schema: TSchema, doc: InferSchemaType<TSchema>, passedOptions?: {}, ...args: any[]): Promise<any>;
227
+
228
+ declare function isValid<TSchema extends Schema>(schema: TSchema, doc: InferSchemaType<TSchema>, passedOptions?: {}, ...args: any[]): Promise<boolean>;
229
+
230
+ declare function getFieldType(type: SchemaFieldType | FieldValidatorType | any): FieldType;
231
+
232
+ declare function clean<TSchema extends SchemaFieldType>(schema: TSchema, doc: InferSchemaType<TSchema>, opts?: CurrentNodeInfoOptions, ...args: any[]): Promise<InferSchemaType<TSchema>>;
219
233
 
220
234
  declare function export_default$2(schema: any, key: any, value: any, passedOptions?: {}, ...args: any[]): Promise<any>;
221
235
 
@@ -223,16 +237,17 @@ declare function export_default$1(schema: Schema, key: string, value: any, passe
223
237
 
224
238
  declare function export_default(schema: Schema, path: string): SchemaNode;
225
239
 
226
- declare function createEnum<const TValues extends readonly string[]>(name: string, values: TValues): FieldType<TValues[number]> & {
227
- type: TValues[number];
228
- };
240
+ declare function createEnum<const TValues extends readonly string[]>(name: string, values: TValues): FieldType<TValues[number]>;
229
241
 
230
242
  declare function isSchemaLike(type: any): boolean;
243
+ declare function isStrictSchemaLike<TType extends Schema | SchemaFieldTypeNonSchema>(type: TType): TType extends Schema ? true : false;
231
244
  declare function isSchemaOrFieldLike(type: any): boolean;
232
245
  declare function getSchemaModelName(type: any): string | null;
233
- declare function getSchemaFromAnyOrionForm(type: any): Schema;
246
+ declare function getSchemaFromAnyOrionForm(type: any): SchemaFieldType;
234
247
  declare function getSchemaWithMetadataFromAnyOrionForm(type: any): SchemaWithMetadata;
235
248
 
249
+ declare function cleanAndValidate<TSchema extends SchemaFieldType>(schema: TSchema, doc: InferSchemaType<TSchema>): Promise<InferSchemaType<TSchema>>;
250
+
236
251
  /**
237
252
  * Assigns a name to a schema for GraphQL type generation.
238
253
  *
@@ -248,4 +263,4 @@ declare function getSchemaWithMetadataFromAnyOrionForm(type: any): SchemaWithMet
248
263
  */
249
264
  declare function schemaWithName<TModelName extends string, TSchema extends Schema>(name: TModelName, schema: TSchema): TSchema;
250
265
 
251
- export { type Blackbox, type CleanFunction, type Constructor, type ConstructorsTypesList, type CurrentNodeInfo, type CurrentNodeInfoOptions, type FieldType, type FieldTypeOpts, type FieldTypesList, type FieldValidatorType, type InferSchemaType, type MergeSchemas, type Schema, type SchemaFieldType, type SchemaMetaFieldTypeSingle, type SchemaMetadata, type SchemaNode, type SchemaRecursiveNodeTypeExtras, type SchemaWithMetadata, type StrictInferSchemaType, type TypedSchemaOnSchema, type ValidateFunction, ValidationError, clean, export_default$2 as cleanKey, createEnum, export_default as dotGetSchema, _default as fieldTypes, getFieldType, getSchemaFromAnyOrionForm, getSchemaModelName, getSchemaWithMetadataFromAnyOrionForm, getValidationErrors, isSchemaLike, isSchemaOrFieldLike, isValid, schemaWithName, validate, export_default$1 as validateKey };
266
+ export { type Blackbox, type CleanFunction, type Constructor, type ConstructorsTypesList, type CurrentNodeInfo, type CurrentNodeInfoOptions, type FieldType, type FieldTypeOpts, type FieldTypesList, type FieldValidatorType, type InferSchemaType, type InferSchemaTypeFromTypedSchema, type MergeSchemas, type Schema, type SchemaFieldType, type SchemaFieldTypeNonSchema, type SchemaInAnyOrionForm, type SchemaMetaFieldTypeSingle, type SchemaMetaFieldTypeSingleNonSchema, type SchemaMetadata, type SchemaNode, type SchemaRecursiveNodeTypeExtras, type SchemaWithMetadata, type Simplifed, type SingleLevelSchema, type StrictInferSchemaType, type TypedSchemaOnSchema, type ValidateFunction, ValidationError, clean, cleanAndValidate, export_default$2 as cleanKey, createEnum, export_default as dotGetSchema, _default as fieldTypes, getFieldType, getSchemaFromAnyOrionForm, getSchemaModelName, getSchemaWithMetadataFromAnyOrionForm, getValidationErrors, isSchemaLike, isSchemaOrFieldLike, isStrictSchemaLike, isValid, schemaWithName, validate, export_default$1 as validateKey };