| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | '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();  }};
 |