From 88199d569c2d6d2123678bec08ba9a8ffcf841f1 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 3 Mar 2019 09:16:00 +0000 Subject: [PATCH] rename option to strictDefaults --- README.md | 15 ++++++++------- lib/ajv.d.ts | 2 +- lib/ajv.js | 2 +- lib/dot/defaults.def | 9 +++++---- lib/dot/validate.jst | 9 +++++---- spec/options/useDefaults.spec.js | 18 +++++++++--------- 6 files changed, 29 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index c26aa07..b61da8b 100644 --- a/README.md +++ b/README.md @@ -798,14 +798,15 @@ console.log(validate(data)); // true console.log(data); // [ 1, "foo" ] ``` -`default` keywords in other cases are invalid: +`default` keywords in other cases are ignored: - not in `properties` or `items` subschemas - in schemas inside `anyOf`, `oneOf` and `not` (see [#42](https://github.com/epoberezkin/ajv/issues/42)) - in `if` subschema of `switch` keyword - in schemas generated by custom macro keywords -The [`invalidDefaults` option](#options) customizes Ajv's behavior for invalid defaults (`false` ignores invalid defaults, `true` raises an error, and `"log"` outputs a warning). +The [`strictDefaults` option](#options) customizes Ajv's behavior for the defaults that Ajv ignores (`true` raises an error, and `"log"` outputs a warning). + ## Coercing data types @@ -1071,7 +1072,7 @@ Defaults: removeAdditional: false, useDefaults: false, coerceTypes: false, - invalidDefaults: false, + strictDefaults: false, // asynchronous validation options: transpile: undefined, // requires ajv-async package // advanced options: @@ -1153,10 +1154,10 @@ Defaults: - `false` (default) - no type coercion. - `true` - coerce scalar data types. - `"array"` - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema). -- _invalidDefaults_: specify behavior for invalid `default` keywords in schemas. Option values: - - `false` (default) - ignore invalid defaults - - `true` - if an invalid default is present, throw an error - - `"log"` - if an invalid default is present, log warning +- _strictDefaults_: specify behavior for ignored `default` keywords in schemas. Option values: + - `false` (default) - ignored defaults are not reported + - `true` - if an ignored default is present, throw an error + - `"log"` - if an ignored default is present, log warning ##### Asynchronous validation options diff --git a/lib/ajv.d.ts b/lib/ajv.d.ts index bbba7a5..63f110a 100644 --- a/lib/ajv.d.ts +++ b/lib/ajv.d.ts @@ -180,7 +180,7 @@ declare namespace ajv { removeAdditional?: boolean | 'all' | 'failing'; useDefaults?: boolean | 'shared'; coerceTypes?: boolean | 'array'; - invalidDefaults?: boolean | 'log'; + strictDefaults?: boolean | 'log'; async?: boolean | string; transpile?: string | ((code: string) => string); meta?: boolean | object; diff --git a/lib/ajv.js b/lib/ajv.js index 0b975a2..611b938 100644 --- a/lib/ajv.js +++ b/lib/ajv.js @@ -39,7 +39,7 @@ Ajv.$dataMetaSchema = $dataMetaSchema; var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; -var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'invalidDefaults' ]; +var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; var META_SUPPORT_DATA = ['/properties']; /** diff --git a/lib/dot/defaults.def b/lib/dot/defaults.def index 3e4a8de..ec6c70f 100644 --- a/lib/dot/defaults.def +++ b/lib/dot/defaults.def @@ -1,10 +1,11 @@ {{## def.assignDefault: {{? it.compositeRule }} - {{? it.opts.invalidDefaults }} - {{? it.opts.invalidDefaults === 'log' }} - {{ it.logger.warn('default is ignored for: ' + $passData); }} + {{? it.opts.strictDefaults }} + {{ var $defaultMsg = 'default is ignored for: ' + $passData; }} + {{? it.opts.strictDefaults === 'log' }} + {{ it.logger.warn($defaultMsg); }} {{??}} - {{ throw new Error('default is ignored for: ' + $passData); }} + {{ throw new Error($defaultMsg); }} {{?}} {{?}} {{??}} diff --git a/lib/dot/validate.jst b/lib/dot/validate.jst index 4e05ce8..12a2fe4 100644 --- a/lib/dot/validate.jst +++ b/lib/dot/validate.jst @@ -72,11 +72,12 @@ it.dataPathArr = [undefined]; }} - {{? it.opts.invalidDefaults && it.schema.default !== undefined }} - {{? it.opts.invalidDefaults === 'log' }} - {{ it.logger.warn('default is ignored in the schema root'); }} + {{? it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults }} + {{ var $defaultMsg = 'default is ignored in the schema root'; }} + {{? it.opts.strictDefaults === 'log' }} + {{ it.logger.warn($defaultMsg); }} {{??}} - {{ throw new Error('default is ignored in the schema root'); }} + {{ throw new Error($defaultMsg); }} {{?}} {{?}} diff --git a/spec/options/useDefaults.spec.js b/spec/options/useDefaults.spec.js index 4570a32..122d778 100644 --- a/spec/options/useDefaults.spec.js +++ b/spec/options/useDefaults.spec.js @@ -221,9 +221,9 @@ describe('useDefaults options', function() { }); }); - describe('invalidDefaults option', function() { - it('should throw an error given an invalid default in the schema root when invalidDefaults is true', function() { - var ajv = new Ajv({useDefaults: true, invalidDefaults: true}); + describe('strictDefaults option', function() { + it('should throw an error given an ignored default in the schema root when strictDefaults is true', function() { + var ajv = new Ajv({useDefaults: true, strictDefaults: true}); var schema = { default: 5, properties: {} @@ -231,8 +231,8 @@ describe('useDefaults options', function() { should.throw(function() { ajv.compile(schema); }); }); - it('should throw an error given an invalid default in oneOf when invalidDefaults is true', function() { - var ajv = new Ajv({useDefaults: true, invalidDefaults: true}); + it('should throw an error given an ignored default in oneOf when strictDefaults is true', function() { + var ajv = new Ajv({useDefaults: true, strictDefaults: true}); var schema = { oneOf: [ { enum: ['foo', 'bar'] }, @@ -248,11 +248,11 @@ describe('useDefaults options', function() { should.throw(function() { ajv.compile(schema); }); }); - it('should log a warning given an invalid default in the schema root when invalidDefaults is "log"', function() { + it('should log a warning given an ignored default in the schema root when strictDefaults is "log"', function() { var warnArg = null; var ajv = new Ajv({ useDefaults: true, - invalidDefaults: 'log', + strictDefaults: 'log', logger: { log: function() { throw new Error('should not be called'); @@ -273,11 +273,11 @@ describe('useDefaults options', function() { should.equal(warnArg, 'default is ignored in the schema root'); }); - it('should log a warning given an invalid default in oneOf when invalidDefaults is "log"', function() { + it('should log a warning given an ignored default in oneOf when strictDefaults is "log"', function() { var warnArg = null; var ajv = new Ajv({ useDefaults: true, - invalidDefaults: 'log', + strictDefaults: 'log', logger: { log: function() { throw new Error('should not be called');