Browse Source

add allOf

master
Daniel Cousens 6 years ago
parent
commit
537f24d3a1
  1. 17
      index.js
  2. 2583
      test/fixtures.json
  3. 5
      test/types.js
  4. 3
      test/values.js

17
index.js

@ -149,6 +149,23 @@ var TYPES = {
return _oneOf
},
allOf: function allOf () {
var types = [].slice.call(arguments).map(compile)
function _allOf (value, strict) {
return types.every(function (type) {
try {
return typeforce(type, value, strict)
} catch (e) {
return false
}
})
}
_allOf.toJSON = function () { return types.map(tfJSON).join(' & ') }
return _allOf
},
quacksLike: function quacksLike (type) {
function _quacksLike (value) {
return type === getValueTypeName(value)

2583
test/fixtures.json

File diff suppressed because it is too large

5
test/types.js

@ -14,7 +14,7 @@ module.exports = {
'?Boolean|Number': typeforce.maybe(typeforce.oneOf('Boolean', 'Number')),
'?{ a: ?Number }': typeforce.maybe({ a: '?Number' }),
'?{ a: Number }': typeforce.maybe({ a: 'Number' }),
'{ a: Number|Null }': { a: typeforce.oneOf('Number', 'Null') },
'{ a: Number|Nil }': { a: typeforce.oneOf('Number', typeforce.Nil) },
'{ a: Number|{ b: Number } }': { a: typeforce.oneOf('Number', { b: 'Number' }) },
'{ a: ?{ b: Number } }': { a: typeforce.maybe({ b: 'Number' }) },
'{ a: ?{ b: ?{ c: Number } } }': { a: typeforce.maybe({ b: typeforce.maybe({ c: 'Number' }) }) },
@ -31,6 +31,9 @@ module.exports = {
'{ Letter: Number }': typeforce.map('Number', Letter),
'{ a: { b: Buffer3 } }': { a: { b: typeforce.BufferN(3) } },
'{ a: Buffer10|Number }': { a: typeforce.oneOf(typeforce.BufferN(10), 'Number') },
'{ a: { b: Buffer } }': typeforce.allOf({ a: typeforce.Object }, { a: { b: typeforce.Buffer } }),
'{ x: Number } & { y: Number }': typeforce.allOf({ x: typeforce.Number }, { y: typeforce.Number }),
'{ x: Number } & { z: Number }': typeforce.allOf({ x: typeforce.Number }, { z: typeforce.Number }),
'Array6(Number)': typeforce.arrayOf(typeforce.Number, { length: 6 }),
'Array>=6(Number)': typeforce.arrayOf(typeforce.Number, { minLength: 6 }),
'Array<=6(Number)': typeforce.arrayOf(typeforce.Number, { maxLength: 6 }),

3
test/values.js

@ -10,6 +10,9 @@ module.exports = {
'{ a: Buffer10 }': { a: buffer10 },
'{ a: { b: Buffer3 } }': { a: { b: buffer3 } },
'{ a: { b: Buffer10 } }': { a: { b: buffer10 } },
'{ x: 1 }': { x: 1 },
'{ y: 2 }': { y: 2 },
'{ x: 1, y: 2 }': { x: 1, y: 2 },
'Array5': [1, 2, 3, 4, 5],
'Array6': [1, 2, 3, 4, 5, 6],
'Array7-N': [1, 2, 3, 4, 5, 6, 7],

Loading…
Cancel
Save