{
  "version": 3,
  "sources": ["../../src/validation.ts", "../../src/utils.ts"],
  "sourcesContent": ["import isEmpty from 'lodash/isEmpty.js'\nimport merge from 'lodash/merge.js'\nimport flatMap from 'lodash/flatMap.js'\nimport get from 'lodash/get.js'\nimport {\n  DataDescription,\n  ModelInstance,\n  ModelType,\n  ModelValidatorComponent,\n  PropertyValidatorComponent,\n  PropertyValidatorComponentSync,\n  PropertyValidator,\n  PropertyConfig,\n  PropertyValidators,\n  ValueGetter,\n  Arrayable,\n  DataValue,\n  ModelErrors,\n  ValidatorContext,\n  ValuePropertyValidatorComponent,\n  ValidationErrors,\n  MaybeFunction,\n  PropertyValidatorComponentTypeAdvanced,\n  PrimitiveValueType,\n  ToObjectResult,\n} from './types.js'\nimport { flowFindFirst } from './utils.js'\n\nconst multiValidator = <T extends Arrayable<DataValue>>(\n  validators: ValuePropertyValidatorComponent<T>[]\n): ValuePropertyValidatorComponent<T> => {\n  const flow = flowFindFirst<T, string>(\n    validators as ((t: T) => undefined | string)[]\n  )\n  return flow as ValuePropertyValidatorComponent<T>\n}\n\nconst filterEmpty = <T>(\n  array: readonly (T | undefined | null)[]\n): readonly T[] => {\n  return array.filter(x => x) as readonly T[]\n}\n\nconst _trueOrError =\n  <T extends Arrayable<DataValue>>(\n    method: (t: T) => boolean,\n    error: string\n  ): ValuePropertyValidatorComponent<T> =>\n  (value: T) => {\n    if (method(value) === false) {\n      return error\n    }\n    return undefined\n  }\n\nconst _typeOrError =\n  <T extends Arrayable<DataValue>>(\n    type: string,\n    errorMessage: string\n  ): ValuePropertyValidatorComponent<T> =>\n  (value: T) => {\n    if (typeof value !== type) {\n      return errorMessage\n    }\n    return undefined\n  }\n\nconst isType =\n  <T extends Arrayable<DataValue>>(\n    type: string\n  ): ValuePropertyValidatorComponent<T> =>\n  (value: T) => {\n    // @ts-ignore\n    return _typeOrError(type, `Must be a ${type}`)(value)\n  }\nconst isNumber = isType<number>('number')\nconst isInteger = _trueOrError<number>(Number.isInteger, 'Must be an integer')\n\nconst isObject = multiValidator<object>([\n  isType<object>('object'),\n  x => (Array.isArray(x) ? 'Must be an object, but got an array' : undefined),\n])\nconst isBoolean = isType<boolean>('boolean')\nconst isString = isType<string>('string')\nconst isArray = _trueOrError<readonly DataValue[]>(\n  (v: any) => Array.isArray(v),\n  'Value is not an array'\n)\n\nconst PRIMITIVE_TO_SPECIAL_TYPE_VALIDATOR: Record<\n  PrimitiveValueType,\n  ValuePropertyValidatorComponent<any>\n> = {\n  [PrimitiveValueType.boolean]: isBoolean,\n  [PrimitiveValueType.string]: isString,\n  [PrimitiveValueType.integer]: isInteger,\n  [PrimitiveValueType.number]: isNumber,\n  [PrimitiveValueType.object]: isObject,\n}\n\nconst arrayType =\n  <TValue extends DataValue>(\n    type: PrimitiveValueType\n  ): ValuePropertyValidatorComponent<readonly TValue[]> =>\n  (value: readonly TValue[]) => {\n    const arrayError = isArray(value)\n    if (arrayError) {\n      return arrayError\n    }\n    const validator = PRIMITIVE_TO_SPECIAL_TYPE_VALIDATOR[type] || isType(type)\n    return (value as readonly []).reduce(\n      (acc: string | undefined, v: DataValue) => {\n        if (acc) {\n          return acc\n        }\n\n        return validator(v)\n      },\n      undefined\n    )\n  }\n\nconst meetsRegex =\n  <TValue extends DataValue>(\n    regex: string | RegExp,\n    flags?: string,\n    errorMessage = 'Format was invalid'\n  ): ValuePropertyValidatorComponent<TValue> =>\n  (value: TValue) => {\n    const reg = new RegExp(regex, flags)\n    // @ts-ignore\n    return _trueOrError((v: string) => reg.test(v), errorMessage)(value)\n  }\n\nconst choices =\n  <T extends DataValue>(\n    choiceArray: readonly T[]\n  ): ValuePropertyValidatorComponent<T> =>\n  (value: T | readonly T[]) => {\n    if (Array.isArray(value)) {\n      const bad = value.find(v => !choiceArray.includes(v))\n      if (bad) {\n        return `${bad} is not a valid choice`\n      }\n    } else {\n      if (!choiceArray.includes(value as T)) {\n        return `${value} is not a valid choice`\n      }\n    }\n    return undefined\n  }\n\nconst isDate: ValuePropertyValidatorComponent<Date> = (value: Date) => {\n  if (!value) {\n    return 'Date value is empty'\n  }\n  if (!value.toISOString) {\n    return 'Value is not a date'\n  }\n  return undefined\n}\n\nconst isRequired: ValuePropertyValidatorComponent<any> = (value?: any) => {\n  if (value === true || value === false) {\n    return undefined\n  }\n  // @ts-ignore\n  if (isNumber(value) === undefined) {\n    return undefined\n  }\n  const empty = isEmpty(value)\n  if (empty) {\n    // @ts-ignore\n    if (isDate(value)) {\n      return 'A value is required'\n    }\n  }\n  return undefined\n}\n\nconst maxNumber =\n  (max: number): ValuePropertyValidatorComponent<number> =>\n  (value: number) => {\n    // @ts-ignore\n    const numberError = isNumber(value)\n    if (numberError) {\n      return numberError\n    }\n    if (value && value > max) {\n      return `The maximum is ${max}`\n    }\n    return undefined\n  }\n\nconst minNumber =\n  (min: number): ValuePropertyValidatorComponent<number> =>\n  (value: number) => {\n    // @ts-ignore\n    const numberError = isNumber(value)\n    if (numberError) {\n      return numberError\n    }\n    if (value && value < min) {\n      return `The minimum is ${min}`\n    }\n    return undefined\n  }\n\nconst maxTextLength =\n  (max: number): ValuePropertyValidatorComponent<string> =>\n  (value: string) => {\n    // @ts-ignore\n    const stringError = isString(value)\n    if (stringError) {\n      return stringError\n    }\n    if (value && value.length > max) {\n      return `The maximum length is ${max}`\n    }\n    return undefined\n  }\n\nconst minTextLength =\n  (min: number): ValuePropertyValidatorComponent<string> =>\n  (value: string) => {\n    // @ts-ignore\n    const stringError = isString(value)\n    if (stringError) {\n      return stringError\n    }\n    if (value && value.length < min) {\n      return `The minimum length is ${min}`\n    }\n    return undefined\n  }\n\nconst aggregateValidator = <T extends DataDescription>(\n  value: any,\n  methodOrMethods:\n    | PropertyValidatorComponent<T>\n    | readonly PropertyValidatorComponent<T>[]\n): PropertyValidator<T> => {\n  const toDo = Array.isArray(methodOrMethods)\n    ? methodOrMethods\n    : [methodOrMethods]\n\n  const _aggregativeValidator: PropertyValidator<T> = async (\n    model: ModelType<T>,\n    instanceData: ToObjectResult<T>,\n    propertyConfiguration: ValidatorContext\n  ) => {\n    const values = await Promise.all(\n      toDo.map(method => {\n        return method(value, model, instanceData, propertyConfiguration)\n      })\n    )\n    return filterEmpty(values)\n  }\n  return _aggregativeValidator\n}\n\nconst emptyValidator = () => undefined\n\nconst _boolChoice =\n  <T extends DataDescription>(\n    method: (configValue: any) => PropertyValidatorComponentSync<T>\n  ) =>\n  (configValue: any) => {\n    const func = method(configValue)\n    const validatorWrapper: PropertyValidatorComponentSync<T> = func\n    return validatorWrapper\n  }\n\ntype MethodConfigDict<T extends DataDescription> = Readonly<{\n  [s: string]: (config: any) => PropertyValidatorComponentSync<T>\n}>\n\nconst simpleFuncWrap =\n  <T extends DataDescription>(validator: PropertyValidatorComponentSync<T>) =>\n  () => {\n    return validator\n  }\n\nconst includeOrDont =\n  <T extends DataDescription>(\n    method: () => PropertyValidatorComponentSync<T>\n  ) =>\n  (configValue: any) => {\n    if (configValue === false) {\n      return emptyValidator\n    }\n    const func = method()\n    const validatorWrapper: PropertyValidatorComponentSync<T> = func\n    return validatorWrapper\n  }\n\nconst CONFIG_TO_VALIDATE_METHOD = <\n  T extends DataDescription,\n>(): MethodConfigDict<T> => ({\n  required: includeOrDont(simpleFuncWrap(isRequired)),\n  isInteger: _boolChoice<T>(simpleFuncWrap(isInteger)),\n  isNumber: _boolChoice<T>(simpleFuncWrap(isNumber)),\n  isString: _boolChoice<T>(simpleFuncWrap(isString)),\n  isArray: _boolChoice<T>(simpleFuncWrap(isArray)),\n  isBoolean: _boolChoice<T>(simpleFuncWrap(isBoolean)),\n  choices: _boolChoice<T>(choices),\n})\n\nconst createPropertyValidator = <\n  TValue extends Arrayable<DataValue>,\n  T extends DataDescription = DataDescription,\n  TModelExtensions extends object = object,\n  TModelInstanceExtensions extends object = object,\n>(\n  valueGetter: ValueGetter<\n    TValue,\n    T,\n    TModelExtensions,\n    TModelInstanceExtensions\n  >,\n  config: PropertyConfig<TValue>\n): PropertyValidator<T> => {\n  const _propertyValidator = async (\n    model: ModelType<T>,\n    instanceData: ToObjectResult<T>,\n    propertyConfiguration: ValidatorContext\n  ): Promise<ValidationErrors> => {\n    return Promise.resolve().then(async () => {\n      const configToValidateMethod = CONFIG_TO_VALIDATE_METHOD<T>()\n      if (!config) {\n        config = {}\n      }\n      const validators: readonly PropertyValidatorComponent<T>[] = [\n        ...Object.entries(config).map(([key, value]) => {\n          const method = configToValidateMethod[key]\n          if (method) {\n            return method(value)\n          }\n          return emptyValidator\n        }),\n        ...(config.validators ? config.validators : []),\n      ].filter(x => x) as PropertyValidatorComponent<T>[]\n      const value = await valueGetter()\n      const isRequiredValue = config.required\n        ? true\n        : validators.includes(isRequired)\n      if (!value && !isRequiredValue) {\n        return []\n      }\n      const validator = aggregateValidator(value, validators)\n      const errors = await validator(model, instanceData, propertyConfiguration)\n      return [...new Set(flatMap(errors))]\n    })\n  }\n  return _propertyValidator\n}\n\nconst createModelValidator = <\n  T extends DataDescription,\n  TModelExtensions extends object = object,\n  TModelInstanceExtensions extends object = object,\n>(\n  validators: PropertyValidators<T>,\n  modelValidators?: readonly ModelValidatorComponent<\n    T,\n    TModelExtensions,\n    TModelInstanceExtensions\n  >[]\n) => {\n  const _modelValidator = async (\n    instance: ModelInstance<T, TModelExtensions, TModelInstanceExtensions>,\n    propertyConfiguration: ValidatorContext\n  ): Promise<ModelErrors<T> | undefined> => {\n    return Promise.resolve().then(async () => {\n      if (!instance) {\n        throw new Error(`Instance cannot be empty`)\n      }\n      const model = instance.getModel()\n      const keysAndFunctions = Object.entries(validators)\n      const instanceData = await instance.toObj<T>()\n      const propertyValidationErrors = await Promise.all(\n        keysAndFunctions.map(async ([key, validator]) => {\n          return [\n            key,\n            await validator(model, instanceData, propertyConfiguration),\n          ]\n        })\n      )\n      const modelValidationErrors = (\n        await Promise.all(\n          modelValidators\n            ? modelValidators.map(validator => {\n                return validator(model, instanceData, propertyConfiguration)\n              })\n            : []\n        )\n      ).filter(x => x) as readonly string[]\n      const propertyErrors = propertyValidationErrors\n        .filter(([, errors]) => Boolean(errors) && errors.length > 0)\n        .reduce((acc, [key, errors]) => {\n          return merge(acc, { [String(key)]: errors })\n        }, {} as ModelErrors<T>)\n      const final =\n        modelValidationErrors.length > 0\n          ? merge(propertyErrors, { overall: modelValidationErrors })\n          : propertyErrors\n      if (isEmpty(final)) {\n        return undefined\n      }\n      return final\n    })\n  }\n  return _modelValidator\n}\n\nconst isValid = <T extends DataDescription>(errors: ModelErrors<T>) => {\n  return Object.keys(errors).length < 1\n}\n\nconst referenceTypeMatch = (\n  referencedModel: MaybeFunction<ModelType<any>>\n): PropertyValidatorComponentTypeAdvanced<\n  ModelInstance<any, any, any>,\n  any\n> => {\n  return (value?: ModelInstance<any, any, any>) => {\n    const theType = typeof value\n    switch (theType) {\n      case 'string':\n      case 'number':\n      case 'undefined':\n        return undefined\n      default:\n        break\n    }\n    if (value === null) {\n      return undefined\n    }\n    // This needs to stay here, as it delays the creation long enough for\n    // self referencing types.\n    const model =\n      typeof referencedModel === 'function'\n        ? referencedModel()\n        : referencedModel\n    // Assumption: By the time this is received, value === a model instance.\n    const eModel = model.getName()\n    const aModel = value.getModel().getName()\n    if (eModel !== aModel) {\n      return `Model should be ${eModel} instead, received ${aModel}`\n    }\n    return undefined\n  }\n}\n\n/**\n * A validator that can validate an entire object.\n *\n * @param required - If this object is required.\n * @param keyToValidators - An object that has a dotted path key to the property to validate, and one or more validators for it.\n */\nconst objectValidator = <T extends object>({\n  required,\n  keyToValidators,\n}: {\n  required?: boolean\n  keyToValidators: Record<\n    string,\n    | ValuePropertyValidatorComponent<any>\n    | ValuePropertyValidatorComponent<any>[]\n  >\n}): ValuePropertyValidatorComponent<T> => {\n  return (obj: T) => {\n    if (!obj) {\n      if (required) {\n        return 'Must include a value'\n      }\n      return undefined\n    }\n    const isNotObj = isObject(obj)\n    if (isNotObj) {\n      return isNotObj\n    }\n    return (\n      Object.entries(keyToValidators)\n        .reduce((acc, [key, validator]) => {\n          const theValidator = Array.isArray(validator)\n            ? multiValidator(validator)\n            : (validator as ValuePropertyValidatorComponent<any>)\n          const value = get(obj, key)\n          const error = theValidator(value)\n          if (error) {\n            return acc.concat(`${key}: ${error}`)\n          }\n          return acc\n        }, [] as string[])\n        .join(', ') || undefined\n    )\n  }\n}\n\nconst optionalValidator = <T extends Arrayable<DataValue>>(\n  validator: ValuePropertyValidatorComponent<T>\n): ValuePropertyValidatorComponent<T> => {\n  return (v: T | undefined): string | undefined => {\n    if (v === undefined || v === null) {\n      return undefined\n    }\n    return validator(v)\n  }\n}\n\nconst UUID_VALIDATOR =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/iu\n\nconst isValidUuid: ValuePropertyValidatorComponent<string> = (uuid: string) => {\n  const stringError = isString(uuid)\n  if (stringError) {\n    return stringError\n  }\n  return meetsRegex<string>(UUID_VALIDATOR, 'g', 'Invalid UUID format')(uuid)\n}\n\nexport {\n  isNumber,\n  isBoolean,\n  isString,\n  isInteger,\n  isType,\n  isDate,\n  isArray,\n  isRequired,\n  maxNumber,\n  minNumber,\n  choices,\n  maxTextLength,\n  minTextLength,\n  meetsRegex,\n  aggregateValidator,\n  emptyValidator,\n  createPropertyValidator,\n  createModelValidator,\n  arrayType,\n  isValid,\n  referenceTypeMatch,\n  multiValidator,\n  isObject,\n  objectValidator,\n  optionalValidator,\n  isValidUuid,\n}\n", "import AsyncLock from 'async-lock'\nimport { v4 as uuidv4 } from 'uuid'\n// @ts-ignore\nimport getRandomValuesFunc from 'get-random-values'\n\nconst getRandomValues = (): Uint8Array => {\n  const array = new Uint8Array(1)\n  if (typeof window !== 'undefined') {\n    if (window.crypto) {\n      return window.crypto.getRandomValues(array)\n    }\n    // @ts-ignore\n    if (window.msCrypto) {\n      // @ts-ignore\n      return window.msCrypto.getRandomValues(array)\n    }\n  }\n\n  return getRandomValuesFunc(array)\n}\n\nconst toTitleCase = (string: string) => {\n  return `${string.slice(0, 1).toUpperCase()}${string.slice(1)}`\n}\n\nconst loweredTitleCase = (string: string) => {\n  return `${string.slice(0, 1).toLowerCase()}${string.slice(1)}`\n}\n\nconst isPromise = <T>(something: any): something is Promise<T> => {\n  if (something?.then) {\n    return true\n  }\n  return false\n}\n\nenum PluralEndings {\n  ves = 'fe',\n  ies = 'y',\n  i = 'us',\n  zes = 'ze',\n  ses = 's',\n  es = 'e',\n  s = '',\n}\nconst _singularizingRe = new RegExp(\n  `(${Object.keys(PluralEndings).join('|')})$`,\n  'u'\n)\n\nconst singularize = (word: string) => {\n  // @ts-ignore\n  return word.replace(_singularizingRe, r => PluralEndings[r])\n}\n\nconst createHeadAndTail = (values: readonly string[], joiner: string) => {\n  const head = values[0]\n  const tail = values.slice(1).join(joiner)\n  return [head, tail]\n}\n\nconst flowFindFirst =\n  <T, TResult>(funcs: ((t: T) => undefined | TResult)[]) =>\n  (input: T) => {\n    return funcs.reduce((acc: undefined | TResult, func) => {\n      if (acc) {\n        return acc\n      }\n      return func(input)\n    }, undefined) as string | TResult\n  }\n\nconst memoizeSync = <T, A extends Array<any>>(method: (...args: A) => T) => {\n  /* eslint-disable functional/no-let */\n  let value: any = undefined\n  let called = false\n  return (...args: A): T => {\n    if (!called) {\n      called = true\n      value = method(...args)\n    }\n\n    return value\n  }\n  /* eslint-enable functional/no-let */\n}\n\nconst memoizeAsync = <T, A extends Array<any>>(method: (...args: A) => T) => {\n  const key = uuidv4()\n  const lock = new AsyncLock()\n  /* eslint-disable functional/no-let */\n  let value: any = undefined\n  let called = false\n  return async (...args: A): Promise<T> => {\n    return lock.acquire(key, async () => {\n      if (!called) {\n        called = true\n        value = await method(...args)\n      }\n\n      return value\n    })\n  }\n  /* eslint-enable functional/no-let */\n}\n\nconst createUuid = uuidv4\n\nexport {\n  getRandomValues,\n  loweredTitleCase,\n  toTitleCase,\n  isPromise,\n  createHeadAndTail,\n  singularize,\n  flowFindFirst,\n  memoizeSync,\n  memoizeAsync,\n  createUuid,\n}\n"],
  "mappings": "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",
  "names": ["PluralEndings", "isEmpty", "value", "flatMap", "merge", "get"]
}
