[feat] add array validate contains type #16
@ -1,5 +1,6 @@
|
|||||||
const Base = require('./base.js')
|
const Base = require('./base.js')
|
||||||
const util = require('util')
|
const util = require('util')
|
||||||
|
const validate = require('../validate.js')
|
||||||
|
|
||||||
class TypeArray extends Base {
|
class TypeArray extends Base {
|
||||||
constructor () {
|
constructor () {
|
||||||
@ -8,6 +9,10 @@ class TypeArray extends Base {
|
|||||||
this._empty = false
|
this._empty = false
|
||||||
this._min = null
|
this._min = null
|
||||||
this._max = null
|
this._max = null
|
||||||
|
/**
|
||||||
|
* @type {Base[]}
|
||||||
|
*/
|
||||||
|
this._itemTypes = []
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,6 +35,11 @@ class TypeArray extends Base {
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
items (...args) {
|
||||||
|
this._itemTypes.push(...args)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set max length
|
* set max length
|
||||||
* @param {number} num
|
* @param {number} num
|
||||||
@ -50,6 +60,23 @@ class TypeArray extends Base {
|
|||||||
if (!this._empty && value.length === 0) return `not allow empty`
|
if (!this._empty && value.length === 0) return `not allow empty`
|
||||||
if (this._min !== null && value.length < this._min) return `value length < ${this._min}`
|
if (this._min !== null && value.length < this._min) return `value length < ${this._min}`
|
||||||
if (this._max !== null && value.length > this._max) return `value length > ${this._max}`
|
if (this._max !== null && value.length > this._max) return `value length > ${this._max}`
|
||||||
|
|
||||||
|
for (const item of value) {
|
||||||
|
let verified = false
|
||||||
|
let fail = ''
|
||||||
|
for (const type of this._itemTypes) {
|
||||||
|
const result = type.validate(item)
|
||||||
|
if (result) {
|
||||||
|
fail = result
|
||||||
|
} else {
|
||||||
|
verified = true
|
||||||
|
fail = ''
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!verified || fail) return fail || `item type not match`
|
||||||
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/* eslint-disable no-undef */
|
/* eslint-disable no-undef */
|
||||||
const TypeArray = require('./array.js')
|
const TypeArray = require('./array.js')
|
||||||
|
const TypeString = require('./string.js')
|
||||||
|
const TypeObject = require('./object.js')
|
||||||
|
|
||||||
describe('test validate schema type array', () => {
|
describe('test validate schema type array', () => {
|
||||||
function throwFunc (val) {
|
function throwFunc (val) {
|
||||||
@ -59,4 +61,15 @@ describe('test validate schema type array', () => {
|
|||||||
|
|
||||||
expect(throwFunc(arr.validate([1, 2, 3]))).toThrow()
|
expect(throwFunc(arr.validate([1, 2, 3]))).toThrow()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('test array contains value', async () => {
|
||||||
|
const arr = new TypeArray().items(new TypeString())
|
||||||
|
|
||||||
|
expect(throwFunc(arr.validate([1, 2, 3]))).toThrow()
|
||||||
|
throwFunc(arr.validate(['asd']))
|
||||||
|
|
||||||
|
const arr2 = new TypeArray().items(new TypeString(), new TypeObject())
|
||||||
|
expect(throwFunc(arr2.validate([123, true]))).toThrow()
|
||||||
|
throwFunc(arr2.validate(['asd', '33', {}]))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user