@rjsf/validator-ajv8 6.1.1 → 6.1.2

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/lib/types.d.ts CHANGED
@@ -15,6 +15,8 @@ export interface CustomValidatorOptionsType {
15
15
  ajvFormatOptions?: FormatsPluginOptions | false;
16
16
  /** The AJV class to construct */
17
17
  AjvClass?: typeof Ajv;
18
+ /** A function to call to extend AJV, such as `ajvErrors()` */
19
+ extenderFn?: (ajv: Ajv) => Ajv;
18
20
  }
19
21
  /** The type describing a function that takes a list of Ajv `ErrorObject`s and localizes them
20
22
  */
package/lib/validator.js CHANGED
@@ -10,8 +10,8 @@ export default class AJV8Validator {
10
10
  * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s
11
11
  */
12
12
  constructor(options, localizer) {
13
- const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass } = options;
14
- this.ajv = createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass);
13
+ const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn } = options;
14
+ this.ajv = createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn);
15
15
  this.localizer = localizer;
16
16
  }
17
17
  /** Resets the internal AJV validator to clear schemas from it. Can be helpful for resetting the validator for tests.
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rjsf/validator-ajv8",
3
- "version": "6.1.1",
3
+ "version": "6.1.2",
4
4
  "main": "dist/index.js",
5
5
  "module": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -21,14 +21,28 @@ export function compileSchemaValidatorsCode<S extends StrictRJSFSchema = RJSFSch
21
21
  const schemaMaps = schemaParser(schema);
22
22
  const schemas = Object.values(schemaMaps);
23
23
 
24
- const { additionalMetaSchemas, customFormats, ajvOptionsOverrides = {}, ajvFormatOptions, AjvClass } = options;
24
+ const {
25
+ additionalMetaSchemas,
26
+ customFormats,
27
+ ajvOptionsOverrides = {},
28
+ ajvFormatOptions,
29
+ AjvClass,
30
+ extenderFn,
31
+ } = options;
25
32
  // Allow users to turn off the `lines: true` feature in their own overrides, but NOT the `source: true`
26
33
  const compileOptions = {
27
34
  ...ajvOptionsOverrides,
28
35
  code: { lines: true, ...ajvOptionsOverrides.code, source: true },
29
36
  schemas,
30
37
  };
31
- const ajv = createAjvInstance(additionalMetaSchemas, customFormats, compileOptions, ajvFormatOptions, AjvClass);
38
+ const ajv = createAjvInstance(
39
+ additionalMetaSchemas,
40
+ customFormats,
41
+ compileOptions,
42
+ ajvFormatOptions,
43
+ AjvClass,
44
+ extenderFn,
45
+ );
32
46
 
33
47
  return standaloneCode(ajv);
34
48
  }
@@ -30,6 +30,7 @@ export const DATA_URL_FORMAT_REGEX = /^data:([a-z]+\/[a-z0-9-+.]+)?;(?:name=(.*)
30
30
  * @param [ajvOptionsOverrides={}] - The set of validator config override options
31
31
  * @param [ajvFormatOptions] - The `ajv-format` options to use when adding formats to `ajv`; pass `false` to disable it
32
32
  * @param [AjvClass] - The `Ajv` class to use when creating the validator instance
33
+ * @param [extenderFn] - A function to call to extend AJV, such as `ajvErrors()`
33
34
  */
34
35
  export default function createAjvInstance(
35
36
  additionalMetaSchemas?: CustomValidatorOptionsType['additionalMetaSchemas'],
@@ -37,8 +38,9 @@ export default function createAjvInstance(
37
38
  ajvOptionsOverrides: CustomValidatorOptionsType['ajvOptionsOverrides'] = {},
38
39
  ajvFormatOptions?: FormatsPluginOptions | false,
39
40
  AjvClass: typeof Ajv = Ajv,
41
+ extenderFn?: CustomValidatorOptionsType['extenderFn'],
40
42
  ) {
41
- const ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });
43
+ let ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });
42
44
  if (ajvFormatOptions) {
43
45
  addFormats(ajv, ajvFormatOptions);
44
46
  } else if (ajvFormatOptions !== false) {
@@ -64,6 +66,9 @@ export default function createAjvInstance(
64
66
  ajv.addFormat(formatName, customFormats[formatName]);
65
67
  });
66
68
  }
69
+ if (extenderFn) {
70
+ ajv = extenderFn(ajv);
71
+ }
67
72
 
68
73
  return ajv;
69
74
  }
@@ -1,12 +1,14 @@
1
1
  import { ErrorObject } from 'ajv';
2
2
  import get from 'lodash/get';
3
3
  import {
4
+ ANY_OF_KEY,
4
5
  createErrorHandler,
5
6
  CustomValidator,
6
7
  ErrorTransformer,
7
8
  FormContextType,
8
9
  getDefaultFormState,
9
10
  getUiOptions,
11
+ ONE_OF_KEY,
10
12
  PROPERTIES_KEY,
11
13
  RJSFSchema,
12
14
  RJSFValidationError,
@@ -34,7 +36,7 @@ export function transformRJSFValidationErrors<
34
36
  S extends StrictRJSFSchema = RJSFSchema,
35
37
  F extends FormContextType = any,
36
38
  >(errors: ErrorObject[] = [], uiSchema?: UiSchema<T, S, F>): RJSFValidationError[] {
37
- return errors.map((e: ErrorObject) => {
39
+ const errorList = errors.map((e: ErrorObject) => {
38
40
  const { instancePath, keyword, params, schemaPath, parentSchema, ...rest } = e;
39
41
  let { message = '' } = rest;
40
42
  let property = instancePath.replace(/\//g, '.');
@@ -105,6 +107,28 @@ export function transformRJSFValidationErrors<
105
107
  title: uiTitle,
106
108
  };
107
109
  });
110
+ // Filter out duplicates around anyOf/oneOf messages
111
+ return errorList.reduce((acc: RJSFValidationError[], err: RJSFValidationError) => {
112
+ const { message, schemaPath } = err;
113
+ const anyOfIndex = schemaPath?.indexOf(`/${ANY_OF_KEY}/`);
114
+ const oneOfIndex = schemaPath?.indexOf(`/${ONE_OF_KEY}/`);
115
+ let schemaPrefix: string | undefined;
116
+ // Look specifically for `/anyOr/` or `/oneOf/` within the schemaPath information
117
+ if (anyOfIndex && anyOfIndex >= 0) {
118
+ schemaPrefix = schemaPath?.substring(0, anyOfIndex);
119
+ } else if (oneOfIndex && oneOfIndex >= 0) {
120
+ schemaPrefix = schemaPath?.substring(0, oneOfIndex);
121
+ }
122
+ // If there is a schemaPrefix, then search for a duplicate message with the same prefix, otherwise undefined
123
+ const dup = schemaPrefix
124
+ ? acc.find((e: RJSFValidationError) => e.message === message && e.schemaPath?.startsWith(schemaPrefix))
125
+ : undefined;
126
+ if (!dup) {
127
+ // Only push an error that is not a duplicate
128
+ acc.push(err);
129
+ }
130
+ return acc;
131
+ }, [] as RJSFValidationError[]);
108
132
  }
109
133
 
110
134
  /** This function processes the `formData` with an optional user contributed `customValidate` function, which receives
package/src/types.ts CHANGED
@@ -16,6 +16,8 @@ export interface CustomValidatorOptionsType {
16
16
  ajvFormatOptions?: FormatsPluginOptions | false;
17
17
  /** The AJV class to construct */
18
18
  AjvClass?: typeof Ajv;
19
+ /** A function to call to extend AJV, such as `ajvErrors()` */
20
+ extenderFn?: (ajv: Ajv) => Ajv;
19
21
  }
20
22
 
21
23
  /** The type describing a function that takes a list of Ajv `ErrorObject`s and localizes them
package/src/validator.ts CHANGED
@@ -42,8 +42,16 @@ export default class AJV8Validator<T = any, S extends StrictRJSFSchema = RJSFSch
42
42
  * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s
43
43
  */
44
44
  constructor(options: CustomValidatorOptionsType, localizer?: Localizer) {
45
- const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass } = options;
46
- this.ajv = createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass);
45
+ const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn } =
46
+ options;
47
+ this.ajv = createAjvInstance(
48
+ additionalMetaSchemas,
49
+ customFormats,
50
+ ajvOptionsOverrides,
51
+ ajvFormatOptions,
52
+ AjvClass,
53
+ extenderFn,
54
+ );
47
55
  this.localizer = localizer;
48
56
  }
49
57