rttc
Version:
Runtime type-checking for JavaScript.
49 lines (40 loc) • 1.38 kB
JavaScript
/**
* Module dependencies
*/
var _ = require('@sailshq/lodash');
var typeInfo = require('./type-info');
var dehydrate = require('./dehydrate');
var buildSchemaIterator = require('./helpers/build-schema-iterator');
/**
* Given a type schema, return an exemplar which accepts precisely the same set of values.
*
* @param {*} typeSchema
* @return {*}
*/
module.exports = function getDefaultExemplar (typeSchema) {
// Dehydrate the type schema to avoid circular recursion
var dehydratedTypeSchema = dehydrate(typeSchema);
// Configure type schema iterator
return buildSchemaIterator(
function onFacetDict(facetDictionary, parentKeyOrIndex, callRecursive){
return _.reduce(facetDictionary, function (memo, val, key) {
var facet = callRecursive(val, key);
memo[key] = facet;
return memo;
}, {});
},
function onPatternArray(patternArray, parentKeyOrIndex, iterateRecursive){
var pattern = iterateRecursive(patternArray[0], 0);
return [ pattern ];
},
function onGenericDict(schema, parentKeyOrIndex){
return typeInfo('dictionary').getExemplar();
},
function onGenericArray(schema, parentKeyOrIndex){
return typeInfo('array').getExemplar();
},
function onOther(schema, parentKeyOrIndex){
return typeInfo(schema).getExemplar();
}
)(dehydratedTypeSchema);
};