| 'use strict'; | 
|   | 
| module.exports = function defFunc (ajv) { | 
|   var transform = { | 
|     trimLeft: function (value) { | 
|       return value.replace(/^[\s]+/, ''); | 
|     }, | 
|     trimRight: function (value) { | 
|       return value.replace(/[\s]+$/, ''); | 
|     }, | 
|     trim: function (value) { | 
|       return value.trim(); | 
|     }, | 
|     toLowerCase: function (value) { | 
|       return value.toLowerCase(); | 
|     }, | 
|     toUpperCase: function (value) { | 
|       return value.toUpperCase(); | 
|     }, | 
|     toEnumCase: function (value, cfg) { | 
|       return cfg.hash[makeHashTableKey(value)] || value; | 
|     } | 
|   }; | 
|   | 
|   defFunc.definition = { | 
|     type: 'string', | 
|     errors: false, | 
|     modifying: true, | 
|     valid: true, | 
|     compile: function (schema, parentSchema) { | 
|       var cfg; | 
|   | 
|       if (schema.indexOf('toEnumCase') !== -1) { | 
|         // build hash table to enum values | 
|         cfg = {hash: {}}; | 
|   | 
|         // requires `enum` in schema | 
|         if (!parentSchema.enum) | 
|           throw new Error('Missing enum. To use `transform:["toEnumCase"]`, `enum:[...]` is required.'); | 
|         for (var i = parentSchema.enum.length; i--; i) { | 
|           var v = parentSchema.enum[i]; | 
|           if (typeof v !== 'string') continue; | 
|           var k = makeHashTableKey(v); | 
|           // requires all `enum` values have unique keys | 
|           if (cfg.hash[k]) | 
|             throw new Error('Invalid enum uniqueness. To use `transform:["toEnumCase"]`, all values must be unique when case insensitive.'); | 
|           cfg.hash[k] = v; | 
|         } | 
|       } | 
|   | 
|       return function (data, dataPath, object, key) { | 
|         // skip if value only | 
|         if (!object) return; | 
|   | 
|         // apply transform in order provided | 
|         for (var j = 0, l = schema.length; j < l; j++) | 
|           data = transform[schema[j]](data, cfg); | 
|   | 
|         object[key] = data; | 
|       }; | 
|     }, | 
|     metaSchema: { | 
|       type: 'array', | 
|       items: { | 
|         type: 'string', | 
|         enum: [ | 
|           'trimLeft', 'trimRight', 'trim', | 
|           'toLowerCase', 'toUpperCase', 'toEnumCase' | 
|         ] | 
|       } | 
|     } | 
|   }; | 
|   | 
|   ajv.addKeyword('transform', defFunc.definition); | 
|   return ajv; | 
|   | 
|   function makeHashTableKey (value) { | 
|     return value.toLowerCase(); | 
|   } | 
| }; |