@orion-js/schema 4.0.9 → 4.0.11

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.
package/dist/index.cjs CHANGED
@@ -144,12 +144,22 @@ var getPrintableError = (validationErrors) => {
144
144
  const message = `Validation Error: {${printableErrors}}`;
145
145
  return message;
146
146
  };
147
+ var cleanLabels = (labels, validationErrors) => {
148
+ const result = {};
149
+ for (const key of Object.keys(validationErrors)) {
150
+ if (labels[key]) {
151
+ result[key] = labels[key];
152
+ }
153
+ }
154
+ return result;
155
+ };
147
156
  var ValidationError = class _ValidationError extends Error {
148
157
  code;
149
158
  isValidationError;
150
159
  isOrionError;
151
160
  validationErrors;
152
- constructor(validationErrors) {
161
+ labels;
162
+ constructor(validationErrors, labels = {}) {
153
163
  super(getPrintableError(validationErrors));
154
164
  if (type(validationErrors) !== "Object") {
155
165
  throw new Error("ValidationError must be initialized with an errors object");
@@ -159,13 +169,15 @@ var ValidationError = class _ValidationError extends Error {
159
169
  this.isValidationError = true;
160
170
  this.isOrionError = true;
161
171
  this.validationErrors = validationErrors;
162
- this.getInfo;
172
+ this.labels = cleanLabels(labels, validationErrors);
173
+ this.getInfo();
163
174
  }
164
175
  getInfo = () => {
165
176
  return {
166
177
  error: "validationError",
167
178
  message: "Validation Error",
168
- validationErrors: this.validationErrors
179
+ validationErrors: this.validationErrors,
180
+ labels: this.labels
169
181
  };
170
182
  };
171
183
  prependKey = (prepend) => {
@@ -174,7 +186,11 @@ var ValidationError = class _ValidationError extends Error {
174
186
  for (const key of keys) {
175
187
  newErrors[`${prepend}.${key}`] = this.validationErrors[key];
176
188
  }
177
- return new _ValidationError(newErrors);
189
+ const newFieldLabels = {};
190
+ for (const key of Object.keys(this.labels)) {
191
+ newFieldLabels[`${prepend}.${key}`] = this.labels[key];
192
+ }
193
+ return new _ValidationError(newErrors, newFieldLabels);
178
194
  };
179
195
  };
180
196
 
@@ -471,6 +487,7 @@ function getFieldValidator(type2) {
471
487
  if (type2 === Number) return "number";
472
488
  if (type2 === Boolean) return "boolean";
473
489
  if (type2 === "enum") return "string";
490
+ if (typeof type2 === "string" && type2.startsWith("typedId:")) return "string";
474
491
  if (typeof type2 !== "string") {
475
492
  throw new Error(`Field type is invalid. Pass a string or a custom field type. Got ${type2}`);
476
493
  }
@@ -711,11 +728,42 @@ async function getValidationErrors2(schema2, doc, passedOptions = {}, ...args) {
711
728
  return getValidationErrorsObject(errors);
712
729
  }
713
730
 
731
+ // src/getValidationErrors/getFieldLabels.ts
732
+ function getFieldLabels(schema2, currentKey = "") {
733
+ schema2 = getSchemaFromAnyOrionForm(schema2);
734
+ const labels = {};
735
+ if (!schema2 || typeof schema2 !== "object") {
736
+ return labels;
737
+ }
738
+ for (const [fieldKey, fieldSchema] of Object.entries(schema2)) {
739
+ if (fieldKey.startsWith("__")) {
740
+ continue;
741
+ }
742
+ const fullKey = currentKey ? `${currentKey}.${fieldKey}` : fieldKey;
743
+ const field = fieldSchema;
744
+ if ((field == null ? void 0 : field.label) && typeof field.label === "string") {
745
+ labels[fullKey] = field.label;
746
+ }
747
+ if (field == null ? void 0 : field.type) {
748
+ let typeToCheck = field.type;
749
+ if (Array.isArray(typeToCheck) && typeToCheck.length > 0) {
750
+ typeToCheck = typeToCheck[0];
751
+ }
752
+ if (isSchemaLike(typeToCheck)) {
753
+ const nestedLabels = getFieldLabels(typeToCheck, fullKey);
754
+ Object.assign(labels, nestedLabels);
755
+ }
756
+ }
757
+ }
758
+ return labels;
759
+ }
760
+
714
761
  // src/validate.ts
715
762
  async function validate(schema2, doc, passedOptions = {}, ...args) {
716
763
  const validationErrors = await getValidationErrors2(schema2, doc, passedOptions, ...args);
717
764
  if (validationErrors) {
718
- throw new ValidationError(validationErrors);
765
+ const labels = getFieldLabels(schema2);
766
+ throw new ValidationError(validationErrors, labels);
719
767
  }
720
768
  }
721
769
 
@@ -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/_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/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: 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, 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\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 info[paramName].type = getSchemaFromAnyOrionForm(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\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","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"]}
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/_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 info[paramName].type = getSchemaFromAnyOrionForm(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 {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"]}
package/dist/index.d.cts CHANGED
@@ -195,14 +195,16 @@ declare function validate<TSchema extends SchemaFieldType>(schema: TSchema, doc:
195
195
  interface ValidationErrorInfo {
196
196
  error: string;
197
197
  message: string;
198
- validationErrors: object;
198
+ validationErrors: Record<string, string>;
199
+ labels: Record<string, string>;
199
200
  }
200
201
  declare class ValidationError extends Error {
201
202
  code: string;
202
203
  isValidationError: boolean;
203
204
  isOrionError: boolean;
204
- validationErrors: object;
205
- constructor(validationErrors: object);
205
+ validationErrors: Record<string, string>;
206
+ labels: Record<string, string>;
207
+ constructor(validationErrors: Record<string, string>, labels?: Record<string, string>);
206
208
  getInfo: () => ValidationErrorInfo;
207
209
  prependKey: (prepend: any) => ValidationError;
208
210
  }
package/dist/index.d.ts CHANGED
@@ -195,14 +195,16 @@ declare function validate<TSchema extends SchemaFieldType>(schema: TSchema, doc:
195
195
  interface ValidationErrorInfo {
196
196
  error: string;
197
197
  message: string;
198
- validationErrors: object;
198
+ validationErrors: Record<string, string>;
199
+ labels: Record<string, string>;
199
200
  }
200
201
  declare class ValidationError extends Error {
201
202
  code: string;
202
203
  isValidationError: boolean;
203
204
  isOrionError: boolean;
204
- validationErrors: object;
205
- constructor(validationErrors: object);
205
+ validationErrors: Record<string, string>;
206
+ labels: Record<string, string>;
207
+ constructor(validationErrors: Record<string, string>, labels?: Record<string, string>);
206
208
  getInfo: () => ValidationErrorInfo;
207
209
  prependKey: (prepend: any) => ValidationError;
208
210
  }
package/dist/index.js CHANGED
@@ -90,12 +90,22 @@ var getPrintableError = (validationErrors) => {
90
90
  const message = `Validation Error: {${printableErrors}}`;
91
91
  return message;
92
92
  };
93
+ var cleanLabels = (labels, validationErrors) => {
94
+ const result = {};
95
+ for (const key of Object.keys(validationErrors)) {
96
+ if (labels[key]) {
97
+ result[key] = labels[key];
98
+ }
99
+ }
100
+ return result;
101
+ };
93
102
  var ValidationError = class _ValidationError extends Error {
94
103
  code;
95
104
  isValidationError;
96
105
  isOrionError;
97
106
  validationErrors;
98
- constructor(validationErrors) {
107
+ labels;
108
+ constructor(validationErrors, labels = {}) {
99
109
  super(getPrintableError(validationErrors));
100
110
  if (type(validationErrors) !== "Object") {
101
111
  throw new Error("ValidationError must be initialized with an errors object");
@@ -105,13 +115,15 @@ var ValidationError = class _ValidationError extends Error {
105
115
  this.isValidationError = true;
106
116
  this.isOrionError = true;
107
117
  this.validationErrors = validationErrors;
108
- this.getInfo;
118
+ this.labels = cleanLabels(labels, validationErrors);
119
+ this.getInfo();
109
120
  }
110
121
  getInfo = () => {
111
122
  return {
112
123
  error: "validationError",
113
124
  message: "Validation Error",
114
- validationErrors: this.validationErrors
125
+ validationErrors: this.validationErrors,
126
+ labels: this.labels
115
127
  };
116
128
  };
117
129
  prependKey = (prepend) => {
@@ -120,7 +132,11 @@ var ValidationError = class _ValidationError extends Error {
120
132
  for (const key of keys) {
121
133
  newErrors[`${prepend}.${key}`] = this.validationErrors[key];
122
134
  }
123
- return new _ValidationError(newErrors);
135
+ const newFieldLabels = {};
136
+ for (const key of Object.keys(this.labels)) {
137
+ newFieldLabels[`${prepend}.${key}`] = this.labels[key];
138
+ }
139
+ return new _ValidationError(newErrors, newFieldLabels);
124
140
  };
125
141
  };
126
142
 
@@ -417,6 +433,7 @@ function getFieldValidator(type2) {
417
433
  if (type2 === Number) return "number";
418
434
  if (type2 === Boolean) return "boolean";
419
435
  if (type2 === "enum") return "string";
436
+ if (typeof type2 === "string" && type2.startsWith("typedId:")) return "string";
420
437
  if (typeof type2 !== "string") {
421
438
  throw new Error(`Field type is invalid. Pass a string or a custom field type. Got ${type2}`);
422
439
  }
@@ -657,11 +674,42 @@ async function getValidationErrors2(schema2, doc, passedOptions = {}, ...args) {
657
674
  return getValidationErrorsObject(errors);
658
675
  }
659
676
 
677
+ // src/getValidationErrors/getFieldLabels.ts
678
+ function getFieldLabels(schema2, currentKey = "") {
679
+ schema2 = getSchemaFromAnyOrionForm(schema2);
680
+ const labels = {};
681
+ if (!schema2 || typeof schema2 !== "object") {
682
+ return labels;
683
+ }
684
+ for (const [fieldKey, fieldSchema] of Object.entries(schema2)) {
685
+ if (fieldKey.startsWith("__")) {
686
+ continue;
687
+ }
688
+ const fullKey = currentKey ? `${currentKey}.${fieldKey}` : fieldKey;
689
+ const field = fieldSchema;
690
+ if ((field == null ? void 0 : field.label) && typeof field.label === "string") {
691
+ labels[fullKey] = field.label;
692
+ }
693
+ if (field == null ? void 0 : field.type) {
694
+ let typeToCheck = field.type;
695
+ if (Array.isArray(typeToCheck) && typeToCheck.length > 0) {
696
+ typeToCheck = typeToCheck[0];
697
+ }
698
+ if (isSchemaLike(typeToCheck)) {
699
+ const nestedLabels = getFieldLabels(typeToCheck, fullKey);
700
+ Object.assign(labels, nestedLabels);
701
+ }
702
+ }
703
+ }
704
+ return labels;
705
+ }
706
+
660
707
  // src/validate.ts
661
708
  async function validate(schema2, doc, passedOptions = {}, ...args) {
662
709
  const validationErrors = await getValidationErrors2(schema2, doc, passedOptions, ...args);
663
710
  if (validationErrors) {
664
- throw new ValidationError(validationErrors);
711
+ const labels = getFieldLabels(schema2);
712
+ throw new ValidationError(validationErrors, labels);
665
713
  }
666
714
  }
667
715
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../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/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":["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: 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, 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\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 info[paramName].type = getSchemaFromAnyOrionForm(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\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":["validate","clean","type","type","schema","type","type","clone","schema","type","clone","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","schema"]}
1
+ {"version":3,"sources":["../../../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":["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 info[paramName].type = getSchemaFromAnyOrionForm(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 {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":["validate","clean","type","type","schema","type","type","clone","schema","type","clone","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/schema",
3
- "version": "4.0.9",
3
+ "version": "4.0.11",
4
4
  "main": "./dist/index.cjs",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [