All files / src/validators datatypes.js

86% Statements 43/50
87.5% Branches 7/8
66.67% Functions 12/18
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 751x 1x 1x   1x 1x   1x   1x     1x   1x 64x 42x 15x 1x 80x 1x 6x 3x 40060x 1x 1x 3x 1x 21x 1x 1x 11x   1x                                                       1x 41099x   41099x     1x           1x  
const Promise = require('bluebird');
const util = require('util');
const check = require('check-types');
 
let dseDriver;
try {
  // eslint-disable-next-line import/no-extraneous-dependencies, import/no-unresolved
  dseDriver = require('dse-driver');
} catch (e) {
  dseDriver = null;
}
 
const cql = Promise.promisifyAll(dseDriver || require('cassandra-driver'));
 
const validators = {};
validators.is_array = (obj) => (check.array(obj));
validators.is_object = (obj) => (check.object(obj));
validators.is_long = (obj) => ((obj instanceof cql.types.Long));
validators.is_decimal = (obj) => ((obj instanceof cql.types.BigDecimal));
validators.is_integer = (obj) => (check.integer(obj));
validators.is_var_int = (obj) => ((obj instanceof cql.types.Integer));
validators.is_boolean = (obj) => ((obj === true || obj === false));
validators.is_number = (obj) => (check.number(obj));
validators.is_string = (obj) => (check.string(obj));
validators.is_local_date = (obj) => ((obj instanceof cql.types.LocalDate));
validators.is_local_time = (obj) => ((obj instanceof cql.types.LocalTime));
validators.is_date = (obj) => (check.date(new Date(obj)));
validators.is_buffer = (obj) => ((obj instanceof Buffer));
validators.is_timeuuid = (obj) => ((obj instanceof cql.types.TimeUuid));
validators.is_uuid = (obj) => ((obj instanceof cql.types.Uuid));
validators.is_inet = (obj) => ((obj instanceof cql.types.InetAddress));
validators.is_frozen = (obj) => ((validators.is_array(obj) || validators.is_object(obj)));
 
const TYPE_MAP = {
  ascii: { validator: validators.is_string },
  bigint: { validator: validators.is_long },
  blob: { validator: validators.is_buffer },
  boolean: { validator: validators.is_boolean },
  counter: { validator: validators.is_long },
  date: { validator: validators.is_local_date },
  decimal: { validator: validators.is_decimal },
  double: { validator: validators.is_number },
  float: { validator: validators.is_number },
  inet: { validator: validators.is_inet },
  int: { validator: validators.is_integer },
  list: { validator: validators.is_array },
  map: { validator: validators.is_object },
  set: { validator: validators.is_array },
  smallint: { validator: validators.is_integer },
  text: { validator: validators.is_string },
  time: { validator: validators.is_local_time },
  timestamp: { validator: validators.is_date },
  timeuuid: { validator: validators.is_timeuuid },
  tinyint: { validator: validators.is_integer },
  uuid: { validator: validators.is_uuid },
  varchar: { validator: validators.is_string },
  varint: { validator: validators.is_var_int },
  frozen: { validator: validators.is_frozen },
};
 
 
TYPE_MAP.generic_type_validator = function f(fieldtype) {
  Iif (!this[fieldtype]) return null;
 
  return {
    validator: this[fieldtype].validator,
    message(value, propName, fieldType) {
      return util.format('Invalid Value: "%s" for Field: %s (Type: %s)', value, propName, fieldType);
    },
    type: 'type_validator',
  };
};
 
module.exports = TYPE_MAP;