@eluvio/elv-js-helpers
Version:
A collection of Javascript helper functions used by several Eluvio libraries.
56 lines (51 loc) • 2.12 kB
JavaScript
// noinspection JSValidateTypes
const defArrayModel = require('./defArrayModel')
const isArray = require('../Boolean/isArray')
const assertAfterCheck = require('../ModelAssertion/assertAfterCheck')
const assertNotEmpty = require('../ModelAssertion/assertNotEmpty')
/**
* Returns an [ObjectModel](http://objectmodel.js.org/) which will validate that an input is:
*
* * A [Javascript Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
* * Made up of elements that are of the specified type definition(s)
*
* To define an array that can hold any type of value, pass in [AnyModel](#AnyModel) for `def`.
*
* @function
* @category ModelFactory
* @sig String -> ([Model] | Model) -> (* -> Array | THROW)
* @param {String} name - the name of the generated Model
* @param {(Model[] | Model)} def - The type/Model or array of types/Model that elements
* @returns {Object} Returns an [ObjectModel](http://objectmodel.js.org/) that can be called with an input
* @example
*
* 'use strict'
* const defNonEmptyArrModel = require('@eluvio/elv-js-helpers/ModelFactory/defNonEmptyArrModel')
*
* const NonNegativeNumModel = require('@eluvio/elv-js-helpers/Model/NonNegativeNumModel')
*
* const NonEmptyAgeArrayModel = defNonEmptyArrModel('NonEmptyAgeArray', NonNegativeNumModel)
*
* NonEmptyAgeArrayModel([42]) //=> [42]
*
* NonEmptyAgeArrayModel([]) //=> EXCEPTION: 'Value must not be empty (got: [])'
*
* NonEmptyAgeArrayModel(-1) //=> EXCEPTION: 'expecting Array of NonNegativeNumber, got Number -1'
*
* NonEmptyAgeArrayModel([-1]) //=> EXCEPTION: 'Array[0] must be >= 0 (got: -1)'
*
* NonEmptyAgeArrayModel('') //=> EXCEPTION: 'expecting Array of NonNegativeNumber, got String ""'
*
* NonEmptyAgeArrayModel(['foo']) //=> EXCEPTION: 'expecting Array[0] to be Number, got String "foo"'
*
*/
const defNonEmptyArrModel = (name, def) => defArrayModel(name, def)
.extend()
.assert(
...assertAfterCheck(
isArray,
...assertNotEmpty
)
)
module.exports = defNonEmptyArrModel