72 lines
1.5 KiB
JavaScript
72 lines
1.5 KiB
JavaScript
|
var util = require('../core').util;
|
||
|
var typeOf = require('./types').typeOf;
|
||
|
|
||
|
/**
|
||
|
* @api private
|
||
|
*/
|
||
|
var memberTypeToSetType = {
|
||
|
'String': 'String',
|
||
|
'Number': 'Number',
|
||
|
'NumberValue': 'Number',
|
||
|
'Binary': 'Binary'
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* @api private
|
||
|
*/
|
||
|
var DynamoDBSet = util.inherit({
|
||
|
|
||
|
constructor: function Set(list, options) {
|
||
|
options = options || {};
|
||
|
this.wrapperName = 'Set';
|
||
|
this.initialize(list, options.validate);
|
||
|
},
|
||
|
|
||
|
initialize: function(list, validate) {
|
||
|
var self = this;
|
||
|
self.values = [].concat(list);
|
||
|
self.detectType();
|
||
|
if (validate) {
|
||
|
self.validate();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
detectType: function() {
|
||
|
this.type = memberTypeToSetType[typeOf(this.values[0])];
|
||
|
if (!this.type) {
|
||
|
throw util.error(new Error(), {
|
||
|
code: 'InvalidSetType',
|
||
|
message: 'Sets can contain string, number, or binary values'
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
validate: function() {
|
||
|
var self = this;
|
||
|
var length = self.values.length;
|
||
|
var values = self.values;
|
||
|
for (var i = 0; i < length; i++) {
|
||
|
if (memberTypeToSetType[typeOf(values[i])] !== self.type) {
|
||
|
throw util.error(new Error(), {
|
||
|
code: 'InvalidType',
|
||
|
message: self.type + ' Set contains ' + typeOf(values[i]) + ' value'
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Render the underlying values only when converting to JSON.
|
||
|
*/
|
||
|
toJSON: function() {
|
||
|
var self = this;
|
||
|
return self.values;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @api private
|
||
|
*/
|
||
|
module.exports = DynamoDBSet;
|