converter.js (2571B)
1 var util = require('../core').util; 2 var typeOf = require('./types').typeOf; 3 var DynamoDBSet = require('./set'); 4 5 function convertInput(data) { 6 if (typeOf(data) === 'Object') { 7 var map = {M: {}}; 8 for (var key in data) { 9 map['M'][key] = convertInput(data[key]); 10 } 11 return map; 12 } else if (typeOf(data) === 'Array') { 13 var list = {L: []}; 14 for (var i = 0; i < data.length; i++) { 15 list['L'].push(convertInput(data[i])); 16 } 17 return list; 18 } else if (typeOf(data) === 'Set') { 19 return formatSet(data); 20 } else if (typeOf(data) === 'String') { 21 return { 'S': data }; 22 } else if (typeOf(data) === 'Number') { 23 return { 'N': data.toString() }; 24 } else if (typeOf(data) === 'Binary') { 25 return { 'B': data }; 26 } else if (typeOf(data) === 'Boolean') { 27 return {'BOOL': data}; 28 } else if (typeOf(data) === 'null') { 29 return {'NULL': true}; 30 } 31 } 32 33 function formatSet(data) { 34 var map = {}; 35 switch (data.type) { 36 case 'String': map['SS'] = data.values; break; 37 case 'Binary': map['BS'] = data.values; break; 38 case 'Number': map['NS'] = data.values.map(function (value) { 39 return value.toString(); 40 }); 41 } 42 return map; 43 } 44 45 function convertOutput(data) { 46 var list, map, i; 47 for (var type in data) { 48 var values = data[type]; 49 if (type === 'M') { 50 map = {}; 51 for (var key in values) { 52 map[key] = convertOutput(values[key]); 53 } 54 return map; 55 } else if (type === 'L') { 56 list = []; 57 for (i = 0; i < values.length; i++) { 58 list.push(convertOutput(values[i])); 59 } 60 return list; 61 } else if (type === 'SS') { 62 list = []; 63 for (i = 0; i < values.length; i++) { 64 list.push(values[i] + ''); 65 } 66 return new DynamoDBSet(list); 67 } else if (type === 'NS') { 68 list = []; 69 for (i = 0; i < values.length; i++) { 70 list.push(Number(values[i])); 71 } 72 return new DynamoDBSet(list); 73 } else if (type === 'BS') { 74 list = []; 75 for (i = 0; i < values.length; i++) { 76 list.push(new util.Buffer(values[i])); 77 } 78 return new DynamoDBSet(list); 79 } else if (type === 'S') { 80 return values + ''; 81 } else if (type === 'N') { 82 return Number(values); 83 } else if (type === 'B') { 84 return new util.Buffer(values); 85 } else if (type === 'BOOL') { 86 return (values === 'true' || values === 'TRUE' || values === true); 87 } else if (type === 'NULL') { 88 return null; 89 } 90 } 91 } 92 93 module.exports = { 94 input: convertInput, 95 output: convertOutput 96 };