{
  "version": 3,
  "sources": ["../src/index.ts", "../src/validator.ts", "../src/createAjvInstance.ts", "../src/processRawValidationErrors.ts", "../src/customizeValidator.ts", "../src/precompiledValidator.ts", "../src/createPrecompiledValidator.ts"],
  "sourcesContent": ["import customizeValidator from './customizeValidator';\nimport createPrecompiledValidator from './createPrecompiledValidator';\n\nexport { customizeValidator, createPrecompiledValidator };\nexport * from './types';\n\nexport default customizeValidator();\n", "import Ajv, { ErrorObject, ValidateFunction } from 'ajv';\nimport {\n  CustomValidator,\n  deepEquals,\n  ErrorTransformer,\n  FormContextType,\n  ID_KEY,\n  RJSFSchema,\n  ROOT_SCHEMA_PREFIX,\n  StrictRJSFSchema,\n  UiSchema,\n  ValidationData,\n  ValidatorType,\n  withIdRefPrefix,\n  hashForSchema,\n} from '@rjsf/utils';\n\nimport { CustomValidatorOptionsType, Localizer } from './types';\nimport createAjvInstance from './createAjvInstance';\nimport processRawValidationErrors, { RawValidationErrorsType } from './processRawValidationErrors';\n\n/** `ValidatorType` implementation that uses the AJV 8 validation mechanism.\n */\nexport default class AJV8Validator<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n> implements ValidatorType<T, S, F> {\n  /** The AJV instance to use for all validations\n   *\n   * @private\n   */\n  ajv: Ajv;\n\n  /** The Localizer function to use for localizing Ajv errors\n   *\n   * @private\n   */\n  readonly localizer?: Localizer;\n\n  /** Constructs an `AJV8Validator` instance using the `options`\n   *\n   * @param options - The `CustomValidatorOptionsType` options that are used to create the AJV instance\n   * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n   */\n  constructor(options: CustomValidatorOptionsType, localizer?: Localizer) {\n    const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn } =\n      options;\n    this.ajv = createAjvInstance(\n      additionalMetaSchemas,\n      customFormats,\n      ajvOptionsOverrides,\n      ajvFormatOptions,\n      AjvClass,\n      extenderFn,\n    );\n    this.localizer = localizer;\n  }\n\n  /** Resets the internal AJV validator to clear schemas from it. Can be helpful for resetting the validator for tests.\n   */\n  reset() {\n    this.ajv.removeSchema();\n  }\n\n  /** Runs the pure validation of the `schema` and `formData` without any of the RJSF functionality. Provided for use\n   * by the playground. Returns the `errors` from the validation\n   *\n   * @param schema - The schema against which to validate the form data   * @param schema\n   * @param formData - The form data to validate\n   */\n  rawValidation<Result = any>(schema: S, formData?: T): RawValidationErrorsType<Result> {\n    let compilationError: Error | undefined = undefined;\n    let compiledValidator: ValidateFunction | undefined;\n    try {\n      if (schema[ID_KEY]) {\n        compiledValidator = this.ajv.getSchema(schema[ID_KEY]);\n      }\n      if (compiledValidator === undefined) {\n        compiledValidator = this.ajv.compile(schema);\n      }\n      compiledValidator(formData);\n    } catch (err) {\n      compilationError = err as Error;\n    }\n\n    let errors;\n    if (compiledValidator) {\n      if (typeof this.localizer === 'function') {\n        // Properties need to be enclosed with quotes so that\n        // `AJV8Validator#transformRJSFValidationErrors` replaces property names\n        // with `title` or `ui:title`. See #4348, #4349, #4387, and #4402.\n        (compiledValidator.errors ?? []).forEach((error) => {\n          ['missingProperty', 'property'].forEach((key) => {\n            if (error.params?.[key]) {\n              error.params[key] = `'${error.params[key]}'`;\n            }\n          });\n          if (error.params?.deps) {\n            // As `error.params.deps` is the comma+space separated list of missing dependencies, enclose each dependency separately.\n            // For example, `A, B` is converted into `'A', 'B'`.\n            error.params.deps = error.params.deps\n              .split(', ')\n              .map((v: string) => `'${v}'`)\n              .join(', ');\n          }\n        });\n        this.localizer(compiledValidator.errors);\n        // Revert to originals\n        (compiledValidator.errors ?? []).forEach((error) => {\n          ['missingProperty', 'property'].forEach((key) => {\n            if (error.params?.[key]) {\n              error.params[key] = error.params[key].slice(1, -1);\n            }\n          });\n          if (error.params?.deps) {\n            // Remove surrounding quotes from each missing dependency. For example, `'A', 'B'` is reverted to `A, B`.\n            error.params.deps = error.params.deps\n              .split(', ')\n              .map((v: string) => v.slice(1, -1))\n              .join(', ');\n          }\n        });\n      }\n      errors = compiledValidator.errors || undefined;\n\n      // Clear errors to prevent persistent errors, see #1104\n      compiledValidator.errors = null;\n    }\n\n    return {\n      errors: errors as unknown as Result[],\n      validationError: compilationError,\n    };\n  }\n\n  /** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n   * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n   * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n   * transform them in what ever way it chooses.\n   *\n   * @param formData - The form data to validate\n   * @param schema - The schema against which to validate the form data\n   * @param [customValidate] - An optional function that is used to perform custom validation\n   * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n   * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n   */\n  validateFormData(\n    formData: T | undefined,\n    schema: S,\n    customValidate?: CustomValidator<T, S, F>,\n    transformErrors?: ErrorTransformer<T, S, F>,\n    uiSchema?: UiSchema<T, S, F>,\n  ): ValidationData<T> {\n    const rawErrors = this.rawValidation<ErrorObject>(schema, formData);\n    return processRawValidationErrors(this, rawErrors, formData, schema, customValidate, transformErrors, uiSchema);\n  }\n\n  /**\n   * This function checks if a schema needs to be added and if the root schemas don't match it removes the old root schema from the ajv instance and adds the new one.\n   * @param rootSchema - The root schema used to provide $ref resolutions\n   */\n  handleSchemaUpdate(rootSchema: S): void {\n    const rootSchemaId = rootSchema[ID_KEY] ?? ROOT_SCHEMA_PREFIX;\n    // add the rootSchema ROOT_SCHEMA_PREFIX as id.\n    // if schema validator instance doesn't exist, add it.\n    // else if the root schemas don't match, we should remove and add the root schema so we don't have to remove and recompile the schema every run.\n    if (this.ajv.getSchema(rootSchemaId) === undefined) {\n      this.ajv.addSchema(rootSchema, rootSchemaId);\n    } else if (!deepEquals(rootSchema, this.ajv.getSchema(rootSchemaId)?.schema)) {\n      this.ajv.removeSchema(rootSchemaId);\n      this.ajv.addSchema(rootSchema, rootSchemaId);\n    }\n  }\n\n  /** Validates data against a schema, returning true if the data is valid, or\n   * false otherwise. If the schema is invalid, then this function will return\n   * false.\n   *\n   * @param schema - The schema against which to validate the form data\n   * @param formData - The form data to validate\n   * @param rootSchema - The root schema used to provide $ref resolutions\n   */\n  isValid(schema: S, formData: T | undefined, rootSchema: S) {\n    try {\n      this.handleSchemaUpdate(rootSchema);\n      // then rewrite the schema ref's to point to the rootSchema\n      // this accounts for the case where schema have references to models\n      // that lives in the rootSchema but not in the schema in question.\n      const schemaWithIdRefPrefix = withIdRefPrefix<S>(schema) as S;\n      const schemaId = schemaWithIdRefPrefix[ID_KEY] ?? hashForSchema(schemaWithIdRefPrefix);\n      let compiledValidator: ValidateFunction | undefined;\n      compiledValidator = this.ajv.getSchema(schemaId);\n      if (compiledValidator === undefined) {\n        // Add schema by an explicit ID so it can be fetched later\n        // Fall back to using compile if necessary\n        // https://ajv.js.org/guide/managing-schemas.html#pre-adding-all-schemas-vs-adding-on-demand\n        compiledValidator =\n          this.ajv.addSchema(schemaWithIdRefPrefix, schemaId).getSchema(schemaId) ||\n          this.ajv.compile(schemaWithIdRefPrefix);\n      }\n      const result = compiledValidator(formData);\n      return result as boolean;\n    } catch (e) {\n      console.warn('Error encountered compiling schema:', e);\n      return false;\n    }\n  }\n}\n", "import Ajv, { Options } from 'ajv';\nimport addFormats, { FormatsPluginOptions } from 'ajv-formats';\nimport isObject from 'lodash/isObject';\nimport { ADDITIONAL_PROPERTY_FLAG, RJSF_ADDITIONAL_PROPERTIES_FLAG } from '@rjsf/utils';\n\nimport { CustomValidatorOptionsType } from './types';\n\nexport const AJV_CONFIG: Options = {\n  allErrors: true,\n  multipleOfPrecision: 8,\n  strict: false,\n  verbose: true,\n  discriminator: false, // TODO enable this in V6\n} as const;\nexport const COLOR_FORMAT_REGEX =\n  /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/;\nexport const DATA_URL_FORMAT_REGEX = /^data:([a-z]+\\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;\n\n/** Creates an Ajv version 8 implementation object with standard support for the 'color` and `data-url` custom formats.\n * If `additionalMetaSchemas` are provided then the Ajv instance is modified to add each of the meta schemas in the\n * list. If `customFormats` are provided then those additional formats are added to the list of supported formats. If\n * `ajvOptionsOverrides` are provided then they are spread on top of the default `AJV_CONFIG` options when constructing\n * the `Ajv` instance. With Ajv v8, the JSON Schema formats are not provided by default, but can be plugged in. By\n * default, all formats from the `ajv-formats` library are added. To disable this capability, set the `ajvFormatOptions`\n * parameter to `false`. Additionally, you can configure the `ajv-formats` by providing a custom set of\n * [format options](https://github.com/ajv-validator/ajv-formats) to the `ajvFormatOptions` parameter.\n *\n * @param [additionalMetaSchemas] - The list of additional meta schemas that the validator can access\n * @param [customFormats] - The set of additional custom formats that the validator will support\n * @param [ajvOptionsOverrides={}] - The set of validator config override options\n * @param [ajvFormatOptions] - The `ajv-format` options to use when adding formats to `ajv`; pass `false` to disable it\n * @param [AjvClass] - The `Ajv` class to use when creating the validator instance\n * @param [extenderFn] - A function to call to extend AJV, such as `ajvErrors()`\n */\nexport default function createAjvInstance(\n  additionalMetaSchemas?: CustomValidatorOptionsType['additionalMetaSchemas'],\n  customFormats?: CustomValidatorOptionsType['customFormats'],\n  ajvOptionsOverrides: CustomValidatorOptionsType['ajvOptionsOverrides'] = {},\n  ajvFormatOptions?: FormatsPluginOptions | false,\n  AjvClass: typeof Ajv = Ajv,\n  extenderFn?: CustomValidatorOptionsType['extenderFn'],\n) {\n  let ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });\n  if (ajvFormatOptions) {\n    addFormats(ajv, ajvFormatOptions);\n  } else if (ajvFormatOptions !== false) {\n    addFormats(ajv);\n  }\n\n  // add custom formats\n  ajv.addFormat('data-url', DATA_URL_FORMAT_REGEX);\n  ajv.addFormat('color', COLOR_FORMAT_REGEX);\n\n  // Add RJSF-specific additional properties keywords so Ajv doesn't report errors if strict is enabled.\n  ajv.addKeyword(ADDITIONAL_PROPERTY_FLAG);\n  ajv.addKeyword(RJSF_ADDITIONAL_PROPERTIES_FLAG);\n\n  // add more schemas to validate against\n  if (Array.isArray(additionalMetaSchemas)) {\n    ajv.addMetaSchema(additionalMetaSchemas);\n  }\n\n  // add more custom formats to validate against\n  if (isObject(customFormats)) {\n    Object.keys(customFormats).forEach((formatName) => {\n      ajv.addFormat(formatName, customFormats[formatName]);\n    });\n  }\n  if (extenderFn) {\n    ajv = extenderFn(ajv);\n  }\n\n  return ajv;\n}\n", "import { ErrorObject } from 'ajv';\nimport get from 'lodash/get';\nimport {\n  ANY_OF_KEY,\n  createErrorHandler,\n  CustomValidator,\n  ErrorTransformer,\n  FormContextType,\n  getDefaultFormState,\n  getUiOptions,\n  ONE_OF_KEY,\n  PROPERTIES_KEY,\n  RJSFSchema,\n  RJSFValidationError,\n  StrictRJSFSchema,\n  toErrorSchema,\n  UiSchema,\n  unwrapErrorHandler,\n  validationDataMerge,\n  ValidatorType,\n} from '@rjsf/utils';\n\nexport type RawValidationErrorsType<Result = any> = {\n  errors?: Result[];\n  validationError?: Error;\n};\n\n/** Transforming the error output from ajv to format used by @rjsf/utils.\n * At some point, components should be updated to support ajv.\n *\n * @param errors - The list of AJV errors to convert to `RJSFValidationErrors`\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n */\nexport function transformRJSFValidationErrors<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n>(errors: ErrorObject[] = [], uiSchema?: UiSchema<T, S, F>): RJSFValidationError[] {\n  const errorList = errors.map((e: ErrorObject) => {\n    const { instancePath, keyword, params, schemaPath, parentSchema, ...rest } = e;\n    let { message = '' } = rest;\n    let property = instancePath.replace(/\\//g, '.');\n    let stack = `${property} ${message}`.trim();\n    let uiTitle = '';\n    const rawPropertyNames: string[] = [\n      ...(params.deps?.split(', ') || []),\n      params.missingProperty,\n      params.property,\n    ].filter((item) => item);\n\n    if (rawPropertyNames.length > 0) {\n      rawPropertyNames.forEach((currentProperty) => {\n        const path = property ? `${property}.${currentProperty}` : currentProperty;\n        let uiSchemaTitle = getUiOptions(get(uiSchema, `${path.replace(/^\\./, '')}`)).title;\n        if (uiSchemaTitle === undefined) {\n          // To retrieve a title from UI schema, construct a path to UI schema from `schemaPath` and `currentProperty`.\n          // For example, when `#/properties/A/properties/B/required` and `C` are given, they are converted into `['A', 'B', 'C']`.\n          const uiSchemaPath = schemaPath\n            .replace(/\\/properties\\//g, '/')\n            .split('/')\n            .slice(1, -1)\n            .concat([currentProperty]);\n          uiSchemaTitle = getUiOptions(get(uiSchema, uiSchemaPath)).title;\n        }\n        if (uiSchemaTitle) {\n          message = message.replace(`'${currentProperty}'`, `'${uiSchemaTitle}'`);\n          uiTitle = uiSchemaTitle;\n        } else {\n          const parentSchemaTitle = get(parentSchema, [PROPERTIES_KEY, currentProperty, 'title']);\n          if (parentSchemaTitle) {\n            message = message.replace(`'${currentProperty}'`, `'${parentSchemaTitle}'`);\n            uiTitle = parentSchemaTitle;\n          }\n        }\n      });\n\n      stack = message;\n    } else {\n      const uiSchemaTitle = getUiOptions<T, S, F>(get(uiSchema, `${property.replace(/^\\./, '')}`)).title;\n\n      if (uiSchemaTitle) {\n        stack = `'${uiSchemaTitle}' ${message}`.trim();\n        uiTitle = uiSchemaTitle;\n      } else {\n        const parentSchemaTitle = parentSchema?.title;\n\n        if (parentSchemaTitle) {\n          stack = `'${parentSchemaTitle}' ${message}`.trim();\n          uiTitle = parentSchemaTitle;\n        }\n      }\n    }\n\n    // If params.missingProperty is undefined, it is removed from rawPropertyNames by filter((item) => item).\n    if ('missingProperty' in params) {\n      property = property ? `${property}.${params.missingProperty}` : params.missingProperty;\n    }\n\n    // put data in expected format\n    return {\n      name: keyword,\n      property,\n      message,\n      params, // specific to ajv\n      stack,\n      schemaPath,\n      title: uiTitle,\n    };\n  });\n  // Filter out duplicates around anyOf/oneOf messages\n  return errorList.reduce((acc: RJSFValidationError[], err: RJSFValidationError) => {\n    const { message, schemaPath } = err;\n    const anyOfIndex = schemaPath?.indexOf(`/${ANY_OF_KEY}/`);\n    const oneOfIndex = schemaPath?.indexOf(`/${ONE_OF_KEY}/`);\n    let schemaPrefix: string | undefined;\n    // Look specifically for `/anyOr/` or `/oneOf/` within the schemaPath information\n    if (anyOfIndex && anyOfIndex >= 0) {\n      schemaPrefix = schemaPath?.substring(0, anyOfIndex);\n    } else if (oneOfIndex && oneOfIndex >= 0) {\n      schemaPrefix = schemaPath?.substring(0, oneOfIndex);\n    }\n    // If there is a schemaPrefix, then search for a duplicate message with the same prefix, otherwise undefined\n    const dup = schemaPrefix\n      ? acc.find((e: RJSFValidationError) => e.message === message && e.schemaPath?.startsWith(schemaPrefix))\n      : undefined;\n    if (!dup) {\n      // Only push an error that is not a duplicate\n      acc.push(err);\n    }\n    return acc;\n  }, [] as RJSFValidationError[]);\n}\n\n/** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n * transform them in what ever way it chooses.\n *\n * @param validator - The `ValidatorType` implementation used for the `getDefaultFormState()` call\n * @param rawErrors - The list of raw `ErrorObject`s to process\n * @param formData - The form data to validate\n * @param schema - The schema against which to validate the form data\n * @param [customValidate] - An optional function that is used to perform custom validation\n * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n */\nexport default function processRawValidationErrors<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n>(\n  validator: ValidatorType<T, S, F>,\n  rawErrors: RawValidationErrorsType<ErrorObject>,\n  formData: T | undefined,\n  schema: S,\n  customValidate?: CustomValidator<T, S, F>,\n  transformErrors?: ErrorTransformer<T, S, F>,\n  uiSchema?: UiSchema<T, S, F>,\n) {\n  const { validationError: invalidSchemaError } = rawErrors;\n  let errors = transformRJSFValidationErrors<T, S, F>(rawErrors.errors, uiSchema);\n\n  if (invalidSchemaError) {\n    errors = [...errors, { stack: invalidSchemaError!.message }];\n  }\n  if (typeof transformErrors === 'function') {\n    errors = transformErrors(errors, uiSchema);\n  }\n\n  let errorSchema = toErrorSchema<T>(errors);\n\n  if (invalidSchemaError) {\n    errorSchema = {\n      ...errorSchema,\n      $schema: {\n        __errors: [invalidSchemaError!.message],\n      },\n    };\n  }\n\n  if (typeof customValidate !== 'function') {\n    return { errors, errorSchema };\n  }\n\n  // Include form data with undefined values, which is required for custom validation.\n  const newFormData = getDefaultFormState<T, S, F>(validator, schema, formData, schema, true) as T;\n\n  const errorHandler = customValidate(newFormData, createErrorHandler<T>(newFormData), uiSchema, errorSchema);\n  const userErrorSchema = unwrapErrorHandler<T>(errorHandler);\n  return validationDataMerge<T>({ errors, errorSchema }, userErrorSchema);\n}\n", "import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils';\n\nimport { CustomValidatorOptionsType, Localizer } from './types';\nimport AJV8Validator from './validator';\n\n/** Creates and returns a customized implementation of the `ValidatorType` with the given customization `options` if\n * provided. If a `localizer` is provided, it is used to translate the messages generated by the underlying AJV\n * validation.\n *\n * @param [options={}] - The `CustomValidatorOptionsType` options that are used to create the `ValidatorType` instance\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n * @returns - The custom validator implementation resulting from the set of parameters provided\n */\nexport default function customizeValidator<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n>(options: CustomValidatorOptionsType = {}, localizer?: Localizer) {\n  return new AJV8Validator<T, S, F>(options, localizer);\n}\n", "import { ErrorObject } from 'ajv';\nimport get from 'lodash/get';\nimport {\n  CustomValidator,\n  deepEquals,\n  ErrorTransformer,\n  FormContextType,\n  hashForSchema,\n  ID_KEY,\n  JUNK_OPTION_ID,\n  retrieveSchema,\n  RJSFSchema,\n  StrictRJSFSchema,\n  UiSchema,\n  ValidationData,\n  ValidatorType,\n} from '@rjsf/utils';\n\nimport { CompiledValidateFunction, Localizer, ValidatorFunctions } from './types';\nimport processRawValidationErrors, { RawValidationErrorsType } from './processRawValidationErrors';\n\n/** `ValidatorType` implementation that uses an AJV 8 precompiled validator as created by the\n * `compileSchemaValidators()` function provided by the `@rjsf/validator-ajv8` library.\n */\nexport default class AJV8PrecompiledValidator<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n> implements ValidatorType<T, S, F> {\n  /** The root schema object used to construct this validator\n   *\n   * @private\n   */\n  readonly rootSchema: S;\n\n  /** The `ValidatorFunctions` map used to construct this validator\n   *\n   * @private\n   */\n  readonly validateFns: ValidatorFunctions;\n\n  /** The main validator function associated with the base schema in the `precompiledValidator`\n   *\n   * @private\n   */\n  readonly mainValidator: CompiledValidateFunction;\n\n  /** The Localizer function to use for localizing Ajv errors\n   *\n   * @private\n   */\n  readonly localizer?: Localizer;\n\n  /** Constructs an `AJV8PrecompiledValidator` instance using the `validateFns` and `rootSchema`\n   *\n   * @param validateFns - The map of the validation functions that are generated by the `schemaCompile()` function\n   * @param rootSchema - The root schema that was used with the `compileSchema()` function\n   * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n   * @throws - Error when the base schema of the precompiled validator does not have a matching validator function\n   */\n  constructor(validateFns: ValidatorFunctions, rootSchema: S, localizer?: Localizer) {\n    this.rootSchema = rootSchema;\n    this.validateFns = validateFns;\n    this.localizer = localizer;\n    this.mainValidator = this.getValidator(rootSchema);\n  }\n\n  /** Returns the precompiled validator associated with the given `schema` from the map of precompiled validator\n   * functions.\n   *\n   * @param schema - The schema for which a precompiled validator function is desired\n   * @returns - The precompiled validator function associated with this schema\n   */\n  getValidator(schema: S) {\n    const key = get(schema, ID_KEY) || hashForSchema(schema);\n    const validator = this.validateFns[key];\n    if (!validator) {\n      throw new Error(`No precompiled validator function was found for the given schema for \"${key}\"`);\n    }\n    return validator;\n  }\n\n  /** Ensures that the validator is using the same schema as the root schema used to construct the precompiled\n   * validator. It first compares the given `schema` against the root schema and if they aren't the same, then it\n   * checks against the resolved root schema, on the chance that a resolved version of the root schema was passed in\n   * instead of the raw root schema.\n   *\n   * @param schema - The schema against which to validate the form data\n   * @param [formData] - The form data to validate if any\n   */\n  ensureSameRootSchema(schema: S, formData?: T) {\n    if (!deepEquals(schema, this.rootSchema)) {\n      // Resolve the root schema with the passed in form data since that may affect the resolution\n      const resolvedRootSchema = retrieveSchema(this, this.rootSchema, this.rootSchema, formData);\n      if (!deepEquals(schema, resolvedRootSchema)) {\n        throw new Error(\n          'The schema associated with the precompiled validator differs from the rootSchema provided for validation',\n        );\n      }\n    }\n    return true;\n  }\n\n  /** Runs the pure validation of the `schema` and `formData` without any of the RJSF functionality. Provided for use\n   * by the playground. Returns the `errors` from the validation\n   *\n   * @param schema - The schema against which to validate the form data\n   * @param [formData] - The form data to validate, if any\n   * @throws - Error when the schema provided does not match the base schema of the precompiled validator\n   */\n  rawValidation<Result = any>(schema: S, formData?: T): RawValidationErrorsType<Result> {\n    this.ensureSameRootSchema(schema, formData);\n    this.mainValidator(formData);\n\n    if (typeof this.localizer === 'function') {\n      this.localizer(this.mainValidator.errors);\n    }\n    const errors = this.mainValidator.errors || undefined;\n\n    // Clear errors to prevent persistent errors, see #1104\n    this.mainValidator.errors = null;\n\n    return { errors: errors as unknown as Result[] };\n  }\n\n  /** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n   * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n   * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n   * transform them in what ever way it chooses.\n   *\n   * @param formData - The form data to validate\n   * @param schema - The schema against which to validate the form data\n   * @param [customValidate] - An optional function that is used to perform custom validation\n   * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n   * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n   */\n  validateFormData(\n    formData: T | undefined,\n    schema: S,\n    customValidate?: CustomValidator<T, S, F>,\n    transformErrors?: ErrorTransformer<T, S, F>,\n    uiSchema?: UiSchema<T, S, F>,\n  ): ValidationData<T> {\n    const rawErrors = this.rawValidation<ErrorObject>(schema, formData);\n    return processRawValidationErrors(this, rawErrors, formData, schema, customValidate, transformErrors, uiSchema);\n  }\n\n  /** Validates data against a schema, returning true if the data is valid, or false otherwise. If the schema is\n   * invalid, then this function will return false.\n   *\n   * @param schema - The schema against which to validate the form data\n   * @param formData - The form data to validate\n   * @param rootSchema - The root schema used to provide $ref resolutions\n   * @returns - true if the formData validates against the schema, false otherwise\n   * @throws - Error when the schema provided does not match the base schema of the precompiled validator OR if there\n   *        isn't a precompiled validator function associated with the schema\n   */\n  isValid(schema: S, formData: T | undefined, rootSchema: S) {\n    this.ensureSameRootSchema(rootSchema, formData);\n    if (get(schema, ID_KEY) === JUNK_OPTION_ID) {\n      return false;\n    }\n    const validator = this.getValidator(schema);\n    return validator(formData);\n  }\n}\n", "import { FormContextType, RJSFSchema, StrictRJSFSchema, ValidatorType } from '@rjsf/utils';\n\nimport { Localizer, ValidatorFunctions } from './types';\nimport AJV8PrecompiledValidator from './precompiledValidator';\n\n/** Creates and returns a `ValidatorType` interface that is implemented with a precompiled validator. If a `localizer`\n * is provided, it is used to translate the messages generated by the underlying AJV validation.\n *\n * NOTE: The `validateFns` parameter is an object obtained by importing from a precompiled validation file created via\n * the `compileSchemaValidators()` function.\n *\n * @param validateFns - The map of the validation functions that are created by the `compileSchemaValidators()` function\n * @param rootSchema - The root schema that was used with the `compileSchemaValidators()` function\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n * @returns - The precompiled validator implementation resulting from the set of parameters provided\n */\nexport default function createPrecompiledValidator<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n>(validateFns: ValidatorFunctions, rootSchema: S, localizer?: Localizer): ValidatorType<T, S, F> {\n  return new AJV8PrecompiledValidator<T, S, F>(validateFns, rootSchema, localizer);\n}\n"],
  "mappings": "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",
  "names": ["import_utils", "Ajv", "addFormats", "isObject", "import_utils", "get", "import_get", "import_utils", "get"]
}
