From a0f644ddba15fa6e83556d915fe4ed72f56050fe Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Thu, 13 Sep 2018 08:52:49 -0700 Subject: [PATCH] fix to throw out invalid date objects (#116) --- src/types.js | 10 +++++++++- test/fixtures/built-ins/date-invalid-date.js | 14 ++++++++++++++ test/fixtures/built-ins/date-invalid.js | 12 ++++++++++++ test/fixtures/built-ins/date-valid.js | 7 +++++++ test/fixtures/built-ins/number-invalid.js | 12 ++++++++++++ test/fixtures/built-ins/number-valid.js | 7 +++++++ test/fixtures/built-ins/string-invalid.js | 12 ++++++++++++ test/fixtures/built-ins/string-valid.js | 7 +++++++ 8 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/built-ins/date-invalid-date.js create mode 100644 test/fixtures/built-ins/date-invalid.js create mode 100644 test/fixtures/built-ins/date-valid.js create mode 100644 test/fixtures/built-ins/number-invalid.js create mode 100644 test/fixtures/built-ins/number-valid.js create mode 100644 test/fixtures/built-ins/string-invalid.js create mode 100644 test/fixtures/built-ins/string-valid.js diff --git a/src/types.js b/src/types.js index 735a25ab..5b831c4e 100644 --- a/src/types.js +++ b/src/types.js @@ -11,7 +11,6 @@ const TYPES = [ 'array', 'boolean', 'buffer', - 'date', 'error', 'float32array', 'float64array', @@ -52,6 +51,15 @@ TYPES.forEach(type => { Types[type] = value => kindOf(value) === type }) +/** + * Handle the 'date' case specially, to throw out invalid `Date` objects. + * + * @param {Mixed} value + * @return {Boolean} + */ + +Types.date = value => kindOf(value) === 'date' && !isNaN(value) + /** * Export. * diff --git a/test/fixtures/built-ins/date-invalid-date.js b/test/fixtures/built-ins/date-invalid-date.js new file mode 100644 index 00000000..6b2ddda6 --- /dev/null +++ b/test/fixtures/built-ins/date-invalid-date.js @@ -0,0 +1,14 @@ +import { struct } from '../../..' + +const invalid = new Date('invalid') + +export const Struct = struct('date') + +export const data = invalid + +export const error = { + path: [], + value: invalid, + type: 'date', + reason: null, +} diff --git a/test/fixtures/built-ins/date-invalid.js b/test/fixtures/built-ins/date-invalid.js new file mode 100644 index 00000000..8b2508c7 --- /dev/null +++ b/test/fixtures/built-ins/date-invalid.js @@ -0,0 +1,12 @@ +import { struct } from '../../..' + +export const Struct = struct('date') + +export const data = 'invalid' + +export const error = { + path: [], + value: 'invalid', + type: 'date', + reason: null, +} diff --git a/test/fixtures/built-ins/date-valid.js b/test/fixtures/built-ins/date-valid.js new file mode 100644 index 00000000..b601b54b --- /dev/null +++ b/test/fixtures/built-ins/date-valid.js @@ -0,0 +1,7 @@ +import { struct } from '../../..' + +export const Struct = struct('date') + +export const data = new Date(0) + +export const output = new Date(0) diff --git a/test/fixtures/built-ins/number-invalid.js b/test/fixtures/built-ins/number-invalid.js new file mode 100644 index 00000000..faf3603e --- /dev/null +++ b/test/fixtures/built-ins/number-invalid.js @@ -0,0 +1,12 @@ +import { struct } from '../../..' + +export const Struct = struct('number') + +export const data = 'invalid' + +export const error = { + path: [], + value: 'invalid', + type: 'number', + reason: null, +} diff --git a/test/fixtures/built-ins/number-valid.js b/test/fixtures/built-ins/number-valid.js new file mode 100644 index 00000000..ba4e923f --- /dev/null +++ b/test/fixtures/built-ins/number-valid.js @@ -0,0 +1,7 @@ +import { struct } from '../../..' + +export const Struct = struct('number') + +export const data = 42 + +export const output = 42 diff --git a/test/fixtures/built-ins/string-invalid.js b/test/fixtures/built-ins/string-invalid.js new file mode 100644 index 00000000..6d02c0b1 --- /dev/null +++ b/test/fixtures/built-ins/string-invalid.js @@ -0,0 +1,12 @@ +import { struct } from '../../..' + +export const Struct = struct('string') + +export const data = 42 + +export const error = { + path: [], + value: 42, + type: 'string', + reason: null, +} diff --git a/test/fixtures/built-ins/string-valid.js b/test/fixtures/built-ins/string-valid.js new file mode 100644 index 00000000..2d9082f9 --- /dev/null +++ b/test/fixtures/built-ins/string-valid.js @@ -0,0 +1,7 @@ +import { struct } from '../../..' + +export const Struct = struct('string') + +export const data = 'valid' + +export const output = 'valid'